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


importkeras.backend as Kdefcreate_y_input(y_train, c_FN):y_str =pd.Series(y_train).reset_index(drop=True).Apply(lambda x: str(int(x)))c_FN_str = pd.Series(c_FN).reset_index(drop=True).apply(lambda x:'0'*(5-len(str(int(x)))) + str(int(x))return y_str + '.' + c_FN_strdefcustom_loss(c_FP, c_TP, c_TN):def loss_function(y_input, y_pred):y_true = K.round(y_input)c_FN = (y_input - y_true) * 1e5cost = y_true * K.log(y_pred) *c_FN +y_true * K.log(1 - y_pred)* c_TP) +(1 - y_true) * K.log(1 -y_pred) * c_FP +(1 - y_true) *K.log(y_pred) * c_TN)return - K.mean(cost, axis=-1)return loss_function然后用定义函数来创建y_input向量,训练代价敏感的人工神经网络模型并进行预测:
y_input =create_y_input(y_train, cost_FN_train).apply(float)clf = ann(indput_dim=X_train.shape[1], dropout=0.2)clf.compile(optimizer='adam', loss=custom_loss(cost_FP, cost_TP,cost_TN))clf.fit(X_train, y_input, batch_size=50, epochs=2, verbose=1)clf.predict(X_test, verbose=1)通过下面的分布图,可以看到代价敏感学习的效果 。随着交易金额的增加,预测结果总体向右扩展(欺诈概率更高) 。请注意,在这种情况下,由于问题的性质和损失函数的定义,“预测欺诈概率”是指“我们要把这笔交易认定为欺诈交易吗?”而不是“这笔交易是欺诈交易吗?”

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

文章插图
 
评估结果显示了代价敏感学习的预期效果 。成本节约增加了5%,F1-score也降低了类似的幅度 。代价敏感分类的结果是误分类的数量越多,误分类的总成本越低 。
欺诈检测中的代价敏感算法

文章插图
 

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

文章插图
 
代价分类模型
与具有自定义损失函数的代价敏感模型不同,代价分类模型根据预测概率计算预期成本 。预测合法和欺诈交易的预期代价计算如下:
欺诈检测中的代价敏感算法

文章插图
 
然后分类器会选择产生最低预期代价的预测结果 。
因此,本文使用了常规逻辑回归模型和人工神经网络模型来得到概率预测结果,并根据预期成本对预测进行了重新分类 。下图显示了逻辑回归模型下代价相关分类的效果 。预测概率的分布没有因为常规逻辑回归模型的分布而改变 。然而,对于代价相关的分类,随着交易金额的增加,该模型倾向于将欺诈概率较小的交易识别为欺诈性交易 。在图的右侧,我们看到,即使欺诈概率接近1,金额非常小的交易也会被预测为合法交易 。因为根据假定,真正类产生的管理代价为3美元 。
欺诈检测中的代价敏感算法

文章插图
 
根据预期成本对预测进行分类,可在成本节约方面获得更好的结果(而根据F1-score进行分类,结果明显较差) 。在人工神经网络模型下实现代价敏感损失函数的同时,代价分类人工神经网络模型能够将成本降低10% 。
欺诈检测中的代价敏感算法

文章插图
 

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

文章插图
 
  
结论
本文阐述了两种基于信用卡欺诈预测的代价敏感分类的基本方法 。
代价敏感训练模型需要自定义损失函数,而代价分类模型只需要每一类的概率和每一结果产生的代价来对交易进行分类 。在样例中,代价分类模型以大量误分类为代价,实现了较好的成本节约 。此外,代价分类模型更容易实现,因为它不需要训练自定义损失函数 。但是代价分类方法只适用于预测概率的模型,正好逻辑回归模型和人工神经网络模型很适合预测概率 。然而,欺诈检测中广泛采用基于决策树的模型,通常将预测结果直接分为不同类,使得代价分类方法行不通 。基于决策树模型的代价敏感方法在概念上与本文中介绍的方法相似,其实现更为复杂 。
 
留言 点赞 关注
我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”




推荐阅读