炼数成金 门户 大数据 Python 查看内容

用Python作信用卡欺诈预测

2017-5-30 21:36| 发布者: 炼数成金_小数| 查看: 15098| 评论: 0|来自: 中山大学数学学院

摘要: 是一个典型的分类问题,欺诈分类的比例比较小,直接使用分类模型容易忽略。在实际应用场景下往往是保证一定准确率的情况下尽量提高召回率。一个典型案例是汽车制造行业,一旦发生一例汽车安全故障,同批次的车辆需要 ...

Python 模型 基础 数据分析 Hadoop

一、项目简介
Credit Card Fraud Detection
https://www.kaggle.com/dalpozz/creditcardfraud
是一个典型的分类问题,欺诈分类的比例比较小,直接使用分类模型容易忽略。在实际应用场景下往往是保证一定准确率的情况下尽量提高召回率。一个典型案例是汽车制造行业,一旦发生一例汽车安全故障,同批次的车辆需要全部召回,造成了巨大的经济损失。

二、数据印象
2.1. 简单数据分析
数据规模:中度规模(对于mac而言)。数据共284807条,后期算法选择需要注意复杂度。

数据特征:V1~V28是PCA的结果,而且进行了规范化,可以做一些统计上的特征学习;Amount字段和Time字段可以进行额外的统计学和bucket统计。
数据质量:无缺失值,数据规整,享受啊。
经验:时间字段较好可以处理为月份、小时和日期,直接的秒数字段往往无意义。

2.2. 探索性数据分析

三、数据预处理
数据已经十分规整了,所以先直接使用基础模型来预测下数据。


L1规划化
L1规范化的模型

L2规范化
L2规范化的模型
Baseline基础模型:采用线性模型,利用L1的稀疏性,precision和recall均可以达到0.85左右,roc_auc可以达到0.79左右。
基础模型结果

由上图可见:
precision较大时波动波动比较大。recall大于0.8后,准确率下滑严重。
AUC面积是0.97,后来根据参考文献3知,AUC大于0.92时之后比较难修正。
Baseline模型的评价metric:
收集更多的数据,不适合这个场景。
改变评价标准:
使用混淆矩阵计算准确度和回收度。
F1score
Kappa
ROC curves - sensitivity/specificity ratio

数据采样处理
- 收集等多数据:不适合这个场景。- 过采样Over-sampling:当数据集较少时,主动添加少类别的数据;
 SMOT算法通过插值来实现。不适合本数据集。容易过拟合,运算时间长。- 欠采样Under-sampling:
 当数据集足够大时,删除大类别的数据;集成方法`EasyEnsemble/BalanceCascade`
 通过将反例放在不同学习器中使用,从全局看不会丢失重要信息。
本案例数据量中等:选用欠采样+EasyEnsemble的方式进行数据处理。

使用im-balanced生成测试数据。
http://contrib.scikit-learn.org/imbalanced-learn/auto_examples/index.html

from imblearn.ensemble import EasyEnsemblen_subsets = X.size * 2 / 
(us_X.size) - 1ee = EasyEnsemble(n_subsets=n_subsets)sample_X, 
sample_y = ee.fit_sample(X, y)

四、模型印象
模型:
选用easy_ensemble模型来优化。
具体实现代码见在线脚本

核心adboost代码如下:


结果如下:

easy_ensembel
对比普通的adboost数据
对比图
由上图可知,easy_ensemble提升了平滑度,但是AUC未有提升。

五、特征选择和特征学习
L1模型进行了嵌入式的特征选择,效果优于L2模型。在寻找解释性时会有帮助。
根据数据的统计特征,可以学习一些统计变量。
统计学习
增加如下的特征。


六、分析结果
使用SNE分析(常用于非线性可视化分析)来观看一次under_sample的结果。
https://bindog.github.io/blog/2016/06/04/from-sne-to-tsne-to-largevis/

如下图所示
SNE图
由上图可知两种类别的数据是可以区分的,但是部分数据融合在一起,当追求recall较大时,将会误判大量数据。

七、迭代问题
可以优化的方向:
可以通过学习新的特征,将数据在新维度上拉开距离
在计算机能力允许的情况下,设置合适的round轮次来调参。

八、表述模型
根据模型的SNE图和数据性可知,数据质量是比较好的。
easy_ensemble模型本身使用了adboost和bagging,每棵tree的复杂度不高,降低了bias;通过bagging,降低了variance。最终得到了较好的P-R图和AUC值。
通过LR模型的稀疏性特征值,可以制作出一个解释性报告。

参考
GBM vs xgboost vs lightGBM
https://www.kaggle.com/nschneider/gbm-vs-xgboost-vs-lightgbm

imbalanced-learn
http://contrib.scikit-learn.org/imbalanced-learn/index.html

Exploratory Undersampling for Class-Imbalance Learning
https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tsmcb09.pdf

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-5-23 01:54 , Processed in 0.160128 second(s), 27 queries .