python项目实战---异常检测

一 案例说明

生活中存在异常检测案例,比如检测恶意刷单、黄牛订单、信用卡欺诈、电力窃电、设备故障等。此次以信用卡欺诈案例进行分析.本质上可以将其作为二分类问题进行处理,即存在两种结果,被欺诈或未被欺诈.

数据集及完整代码地址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范数作为正则化项,可以防止模型为了迎合训练集而过于复杂造成过拟合的情况,从而提高模型的泛化能力
  • L1范数和L2范数的区别
    在这里插入图片描述

  • 如图,蓝色圆圈表示问题可能的解范围,橘色圆圈表示正则项可能的解范围。而整个目标函数(原问题+正则项)有解当且仅当两个解范围相切。

  • 从图看出,由于L2范数解范围是圆,所以相切的点有很大可能不在坐标轴上,而由于L1范数是菱形(顶点是凸出来的),其相切的点更可能在坐标轴上,而坐标轴上的点有一个特点,其只有一个坐标分量不为0,其他坐标分量为0,即稀疏的。

  • 所以有如下结论,L1范数可以导致稀疏解,L2范数导致稠密解。

  • ** 代码演示**
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

四 总结

  • 这里使用Xmind思维导图软件对Python异常检测案例进行简单总结
  • 在这里插入图片描述
reference
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值