欺诈检测中的代价敏感算法( 二 )


欺诈检测中的代价敏感算法

文章插图
 
然后,计算如果所有结果都为负类(即代价最大时),所产出的总代价是多少,并将成本节约定义为实际预测中降低代价的分数 。
欺诈检测中的代价敏感算法

文章插图
 
【欺诈检测中的代价敏感算法】为了评估模型,本文用了5倍交叉验证,并将数据分为5种不同的训练集(80%)和测试集(20%) 。后续部分呈现出的结果是指五个测试集的平均结果 。
逻辑回归模型
基础模型来自Sklearn库中的常规逻辑回归模型 。下图是预测概率和交易金额两者的分布图 。如果没有代价敏感分类,欺诈概率和交易金额之间就没有明显的关联 。
欺诈检测中的代价敏感算法

文章插图
 
逻辑回归模型下平均测试集表现相当好,F1-score为0.73,成本节约为0.48 。
欺诈检测中的代价敏感算法

文章插图
 

欺诈检测中的代价敏感算法

文章插图
 
人工神经网络模型
接下来,在Keras构建一个具有三个完全连接层(50、25和15个神经元)和两个dropout层的人工神经网络模型 。两个时期的模型用了50个神经元 。使用Keras的顺序模型API,其在Python中的实现如下所示:
from keras.modelsimport Sequentialfrom keras.layers import Dense, Dropoutdefann(indput_dim, dropout=0.2):model = Sequential([Dense(units=50, input_dim=indput_dim,activation='relu'),Dropout(dropout),Dense(units=25, activation='relu'),Dropout(dropout),Dense(15, activation='relu'),Dense(1, activation='sigmoid')])return modelclf =ann(indput_dim=X_train.shape[1], dropout=0.2)clf.compile(optimizer='adam', loss='binary_crossentropy')clf.fit(X_train, y_train, batch_size=50, epochs=2, verbose=1)clf.predict(X_test, verbose=1)下面是人工神经网络模型下预测的欺诈概率分布图 。与逻辑回归模型相似,欺诈概率与交易金额之间没有明显的关系 。
欺诈检测中的代价敏感算法

文章插图
 
在F1-score和成本节约方面,人工神经网络模型优于逻辑回归模型 。
欺诈检测中的代价敏感算法

文章插图
 

欺诈检测中的代价敏感算法

文章插图
 
代价敏感人工神经网络模型
情况变得有趣起来了 。代价敏感人工神经网络模型与常规人工神经网络模型相似,在代价敏感损失函数方面略有不同 。之前的两个模型都使用对数损失(“二元交叉熵”)作为损失函数:
欺诈检测中的代价敏感算法

文章插图
 
这个损失函数同样惩罚假负类和假正类 。现在让我们来看看代价敏感损失函数 。所有四种可能的结果(假正类、假负类、真正类和真负类)都纳入了考虑范围,每个结果都有一个特定的代价 。代价敏感损失函数如下:
欺诈检测中的代价敏感算法

文章插图
 
请记住,通过第一部分得知,真正类和假正类所产生的代价都很昂贵(阻止一笔交易所产生的固定管理代价) 。真负类没有产生代价(无交易行为),假负类的代价是交易金额(假定我们必须偿还所有金额) 。请注意,这四种结果所产生的代价,只有假负类的代价是基于实例的 。这样的话,交易金额越高,未识别出的欺诈交易的惩罚越高,正预测产生的管理代价也随之增加 。因此,损失函数应该训练一种模型,提高其在交易金额偏高时阻拦可疑交易的可能性 。交易金额从0美元到25691美元不等,平均为88美元,假设固定管理代价为3美元 。
我们在Python中分别预测了假正类、假负类、真正类和真负类的代价 。由于假负类的代价取决于实际情况,因此它们用与样本数相同的长度向量表示 。
cost_FP = 3cost_FN = data['Amount']cost_TP = 3cost_TN = 0在Keras中实现一个基于实例的损失函数是很困难的,因为Keras不允许将除了y_true和y_pred以外的参数传递给损失函数 。通过将损失函数包装到另一个函数中,可以将常变量传递给损失函数 。然而,假负类的代价取决于实例 。因此,本文使用的技巧是,将假负类的代价作为数字添加到y_true的逗号后,并在自定义损失函数中提取它们,同时将y_true四舍五入为原始整数值 。在Keras中,转换y_true的函数和自定义损失函数的实现如下所示:


推荐阅读