机器学习之交易欺诈检测

电商领域,交易欺诈的例子已多如牛毛,每年有非常多人受到欺诈带来的经济损害。作为电商企业,如何利用沉淀的订单数据,与机器学习相结合,提前检测交易是否有欺诈行为,从事前或事中就及时阻断交易动作,从而保障用户的使用安全,大幅度减少欺诈带来的损害是一直追求的目标。本文以简单数据特征为切入点,其目的是希望大家可直观了解核心思想,方便读者使用到自身的领域中,起到抛砖引玉效果(比如:电信、电购等)。业界所采用的方法会比文中所讲内容复杂的多。

一、特征元素选择

针对交易欺诈,本文从7个特征来表征,即4个原始数据特征及3个付款方式的编码特征。

4个原始数据特征包括:1.从第一笔交易时间与注册账号的时间差;2.购买次数;3.购买时间;4.付款方式添加时间与交易的时间差。

3个付款方式特征:1.信用卡(creditcard);2.支付宝(alipay);3.花呗(huabei)。

特征选择需要花费大量时间与精力,我们可以通过建设训练与评分流程,可利用逻辑回归、SVM、决策树确定相对特征的重要性。冗余的特征会降低模型的质量,高度相关特征可能会导致米线决策的不稳定,如果特征数据量大于数据点会出现过渡拟合问题,如果数据特征量太少会出现欠拟合问题。

二、功能实现

基础环境

本文基于python实现,所以读者需要具备python环境。

sklearn及pandas提供的类。

交易数据语料库,具体数据语料如下:

交易语料库

读取信息

通过分析结构化数据的工具集pandas获取csv文件内容

读取csv文件

具体效果可见交易语料库图。

变量处理

因为支付方式是变量,所以我们需要将其转换为数值,可通过调用pands.get_dummies(),将分类遍历转换为数值。

效果如下图:

变量转数值效果图

可见我们已经将信用卡、支付宝、花呗三个变量转换为数值添加到表中。

数据预处理

交易的基础数据处理完毕后,可对数据进行预处理操作,train_test_split函数用于将矩阵随机划分训练子集和测试子集,并返回划分好的训练集和测试集及标签。详情见下图:

数据预处理

上图中1.调用了df.drop方法,将lable列删除,获得特征集。2.获取lable标签即样本标签。3.X_train和X_text,比例是0.67与0.33,因为我们引入test_size为0.33。其大体含义为67%用于训练,33%用于测试。4.随机数种子为17。

调用参数:

train_data(第一个参数):所要划分的样本特征集;

train_target(第二个参数):所要划分的样本标签;

test_size(第三个参数):样本占比,测试集样本数目与原始数目之比;

random_state(第四个参数):是随机数的种子。

返回内容:

X_train:划分出的训练集数据;

X_test:划分出对的测试集数据;

y_train:划分出的训练集标签;

y_test:划分出的测试集标签

开始训练

利用X_train与y_train对模型参数进行拟合。最后通过predict方法获取返回预测结果(标签值)。

开始训练

输出结果

本文输出两块内容,一个是预测结果信息,一个是混淆矩阵

输出结果

上图输出结果,可理解为1笔被漏报,没有误报。我们将混淆矩阵加工后,会更清晰,见下图:

混淆加工

三、总结

本文通过简单的例子讲述了如何利用特征结合学习算法实现交易欺诈的异常检测,文章中所举例子非常简单,旨在通过简单例子了解实现原理和思想,为我们后续实际业务过程中所要解决的问题提前铺垫。在现实环境中,远比该举例复杂的多。

 
发布了35 篇原创文章 · 获赞 3 · 访问量 2908

猜你喜欢

转载自blog.csdn.net/a59a59/article/details/103537498
今日推荐