Tensorflow2.0入门教程8:信用卡反欺诈案例

通过Keras模型类搭建神经网络模型

数据集下载:
链接:https://pan.baidu.com/s/19IQ6BHmT_zNyJoaB_pPa3g
提取码:1nfc

import tensorflow as tf
import pandas as pd
import numpy as np

pandas读取数据

data = pd.read_csv("creditcard.csv")
data.head()
TimeV1V2V3V4V5V6V7V8V9...V21V22V23V24V25V26V27V28AmountClass
00.0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.363787...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620
10.01.1918570.2661510.1664800.4481540.060018-0.082361-0.0788030.085102-0.255425...-0.225775-0.6386720.101288-0.3398460.1671700.125895-0.0089830.0147242.690
21.0-1.358354-1.3401631.7732090.379780-0.5031981.8004990.7914610.247676-1.514654...0.2479980.7716790.909412-0.689281-0.327642-0.139097-0.055353-0.059752378.660
31.0-0.966272-0.1852261.792993-0.863291-0.0103091.2472030.2376090.377436-1.387024...-0.1083000.005274-0.190321-1.1755750.647376-0.2219290.0627230.061458123.500
42.0-1.1582330.8777371.5487180.403034-0.4071930.0959210.592941-0.2705330.817739...-0.0094310.798278-0.1374580.141267-0.2060100.5022920.2194220.21515369.990

5 rows × 31 columns

数据集描述

欧洲的信用卡持卡人在2013年9月2天时间里的284807笔交易数据,其中有492笔交易是欺诈交易,占比0.172%。数据采用PCA变换映射为V1,V2,…,V28 数值型属性,只有交易时间和金额这两个变量没有经过PCA变换。输出变量为二值变量,1为欺诈,0为正常交易。

Time(交易时间,需将s转化为hh-mm-ss形式)

V1~V28(经PCA转换后的数字变量)

Amount(交易金额)

Class(交易类型,1为欺诈,0为正常交易)

df = data.drop("Time",axis=1)
df.head()
V1V2V3V4V5V6V7V8V9V10...V21V22V23V24V25V26V27V28AmountClass
0-1.359807-0.0727812.5363471.378155-0.3383210.4623880.2395990.0986980.3637870.090794...-0.0183070.277838-0.1104740.0669280.128539-0.1891150.133558-0.021053149.620
11.1918570.2661510.1664800.4481540.060018-0.082361-0.0788030.085102-0.255425-0.166974...-0.225775-0.6386720.101288-0.3398460.1671700.125895-0.0089830.0147242.690
2-1.358354-1.3401631.7732090.379780-0.5031981.8004990.7914610.247676-1.5146540.207643...0.2479980.7716790.909412-0.689281-0.327642-0.139097-0.055353-0.059752378.660
3-0.966272-0.1852261.792993-0.863291-0.0103091.2472030.2376090.377436-1.387024-0.054952...-0.1083000.005274-0.190321-1.1755750.647376-0.2219290.0627230.061458123.500
4-1.1582330.8777371.5487180.403034-0.4071930.0959210.592941-0.2705330.8177390.753074...-0.0094310.798278-0.1374580.141267-0.2060100.5022920.2194220.21515369.990

5 rows × 30 columns

任务描述:

根据V1…V28,Amount的数值,预测交易类型class(为1或者0)

pandas转numpy

all_data = np.array(df)

打乱数据

np.random.shuffle(all_data)

获取训练数据

train_data = all_data[:200000,:-1]
train_label = all_data[:200000,-1]
train_data.shape
(200000, 29)

获取测试集数据

test_data = all_data[200000:,:-1]
test_label = all_data[200000:,-1]

搭建模型

class cred_model(tf.keras.Model):
    def __init__(self):
        super().__init__()
        self.dense1 = tf.keras.layers.Dense(
            input_shape=(29,),
            units=100,
            activation=tf.nn.relu,
        )
        self.dense2 = tf.keras.layers.Dense(
            units=1,
            activation=tf.nn.sigmoid,
        )

    def call(self, inputs):
        x = self.dense1(inputs)
        output = self.dense2(x)
        return output
model = cred_model()
model.summary()
Model: "cred_model_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_2 (Dense)              multiple                  3000      
_________________________________________________________________
dense_3 (Dense)              multiple                  101       
=================================================================
Total params: 3,101
Trainable params: 3,101
Non-trainable params: 0
_________________________________________________________________

配置模型

model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
             loss="binary_crossentropy",
             metrics=["acc"])

训练模型

model.fit(train_data, train_label, epochs=10, batch_size=100,
          validation_data=(test_data, test_label),)
Train on 200000 samples, validate on 84807 samples
Epoch 1/10
200000/200000 [==============================] - 4s 18us/sample - loss: 0.0240 - acc: 0.9988 - val_loss: 0.0056 - val_acc: 0.9994
Epoch 2/10
200000/200000 [==============================] - 3s 16us/sample - loss: 0.0112 - acc: 0.9992 - val_loss: 0.0075 - val_acc: 0.9994
Epoch 3/10
200000/200000 [==============================] - 4s 18us/sample - loss: 0.0091 - acc: 0.9992 - val_loss: 0.0503 - val_acc: 0.9987
Epoch 4/10
200000/200000 [==============================] - 3s 17us/sample - loss: 0.0152 - acc: 0.9993 - val_loss: 0.0097 - val_acc: 0.9993
Epoch 5/10
200000/200000 [==============================] - 3s 16us/sample - loss: 0.0108 - acc: 0.9994 - val_loss: 0.0052 - val_acc: 0.9994
Epoch 6/10
200000/200000 [==============================] - 3s 17us/sample - loss: 0.0064 - acc: 0.9994 - val_loss: 0.0076 - val_acc: 0.9992
Epoch 7/10
200000/200000 [==============================] - 3s 16us/sample - loss: 0.0101 - acc: 0.9994 - val_loss: 0.0077 - val_acc: 0.9994
Epoch 8/10
200000/200000 [==============================] - 3s 16us/sample - loss: 0.0057 - acc: 0.9994 - val_loss: 0.0070 - val_acc: 0.9994
Epoch 9/10
200000/200000 [==============================] - 3s 17us/sample - loss: 0.0075 - acc: 0.9994 - val_loss: 0.0044 - val_acc: 0.9993
Epoch 10/10
200000/200000 [==============================] - 3s 16us/sample - loss: 0.0070 - acc: 0.9994 - val_loss: 0.0053 - val_acc: 0.9994

<tensorflow.python.keras.callbacks.History at 0x16f5b4d4d30>
model.summary()
Model: "cred_model_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_2 (Dense)              multiple                  3000      
_________________________________________________________________
dense_3 (Dense)              multiple                  101       
=================================================================
Total params: 3,101
Trainable params: 3,101
Non-trainable params: 0
_________________________________________________________________
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值