一 案例说明
生活中存在异常检测案例,比如检测恶意刷单、黄牛订单、信用卡欺诈、电力窃电、设备故障等。此次以信用卡欺诈案例进行分析.本质上可以将其作为二分类问题进行处理,即存在两种结果,被欺诈或未被欺诈.
数据集及完整代码地址https://github.com/RenDong3/Python_Note
二 数据预处理
1 读取数据
- pandas读取CSV文件导入数据, Class属性作为label 代表是否存在欺诈现象,0代表正常数据即未被欺诈,1代表异常数据
- 其余columns属性可以作为特征进行处理
2 特征工程
- 存在问题
- 以信用卡欺诈为例,这些数据样本所占的比例通常是整体样本中很少一部分,欺诈比例一般在 0.1% 以内。所以如柱状图显示数据正负样本存在严重的不均衡问题
- Amount属性数据波动范围大
- 解决方案:
- 过抽样和欠抽样解决样本不均衡
- 过抽样
* 也叫上采样、over-sampling)即增加分类中少量样本的数量,简单方法就是复制少数类样本形成多条记录,缺点是样本特征少导致过拟合。
* 改进的过抽样:通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本。如SMOTE算法(Synthetic Minority Oversampling Technique即合成少数类过采样技术)。 - 欠抽样
* (也叫下采样、under-sample)即减少分类中多数样本的数量,简单方法就是随机去掉一些多数类样本减小规模,缺点丢失多数类样本中的重要信息。
总体上,过抽样和欠抽样更适合大数据分布不均衡的情况。
- 过抽样
- 关于Python解决数据样本不均衡的更多方法可以参考https://www.cnblogs.com/keye/p/11152018.html
- 标准化解决数据波动范围大
- 代码演示
- 下采样
- 下采样
- 上采样
- ** 标准化**
三 模型训练
1 数据划分
- 一般对数据进行train,test划分,并且在train中进行val的自我验证
- “交叉验证法”(cross validation)
- 先将数据集D划分为k个大小相似的互斥子集D = D1 υ D2 υ D3…υ Dk,Di∩Dj = Φ(i ≠ j)
- 每个子集Di通过分层采样得到(如上所述,为了保证正负样本的比例与数据集D的比例相同),
- 然后用k-1个子集的并集作为训练集,余下的子集作为测试集;这样就获得k组训练/测试集,从而进行k次训练和测试,最终返回的是这k个测试结果的均值。
- 通常把交叉验证法称为“K折交叉验证法”,k最常用的取值是10,此时称为10折交叉验证。下图为10折交叉验证的示意图。
- ** 代码演示**
2 评估指标
- 对于二分类问题常用的评价指标是准确率(precision)与召回率(Recall)。通常以关注的类为正类,其他类为负类
- 分类器在测试数据集上的预测或正确或不正确,4种情况出现的总数分布记为:
- TP-----将正类预测为正类数
- FN------将正类预测为负类数
- FP------将负类预测为正类数
- TN------将负类预测为负类数
可以这样理解,FN即False Negative,Negative表示预测为负类,False表示预测错误,那么情况就属于将正类预测为负类
准确率
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP
召回率
P r e c i s i o n = T P T P + F N Precision = \frac{TP}{TP+FN} Precision=TP+FNTP
混淆矩阵
- ** 代码演示**
3 参数调优
正则化惩罚系数
-
当训练一个模型时,仅依靠当前的训练数据集是不够的,为了实现更好的泛化能力,往往需要加入先验项,而加入正则项相当于加入了一种先验。
-
在算法中使用正则化的目的是防止模型出现过拟合
-
L1范数
- 通过上式得出,L1范数就是向量各元素的绝对值之和,也被称为是“稀疏规则算子”(Lassoregularization)
- 稀疏化有利于特征选择和模型可解释性
-
L2范数
- L2范数就是欧几里得距离,公式:
- 2范数有很多名称,有人把它的回归叫“岭回归”(Ridge Regression),也有人叫它“权值衰减”(Weight Decay)
- 以L2范数作为正则项可以得到稠密解,即每个特征对应的参数w都很小,接近于0但是不为0
- L2范数作为正则化项,可以防止模型为了迎合训练集而过于复杂造成过拟合的情况,从而提高模型的泛化能力
- L2范数就是欧几里得距离,公式:
-
L1范数和L2范数的区别
-
如图,蓝色圆圈表示问题可能的解范围,橘色圆圈表示正则项可能的解范围。而整个目标函数(原问题+正则项)有解当且仅当两个解范围相切。
-
从图看出,由于L2范数解范围是圆,所以相切的点有很大可能不在坐标轴上,而由于L1范数是菱形(顶点是凸出来的),其相切的点更可能在坐标轴上,而坐标轴上的点有一个特点,其只有一个坐标分量不为0,其他坐标分量为0,即稀疏的。
-
所以有如下结论,L1范数可以导致稀疏解,L2范数导致稠密解。
-
** 代码演示**
四 总结
- 这里使用Xmind思维导图软件对Python异常检测案例进行简单总结