1 数据分析与预处理
建立逻辑回归模型,对正常交易数据和异常交易数据进行分类。
1.1 数据读取与分析
从csv文件中读取数据:
在机器学习任务中,加载数据之后,首先应当观察数据是否存在问题,把问题处理掉之后,再考虑特征提取与建模任务。
查看数据集中的正负样本均衡情况:
数据不平衡会对结果造成影响:我们的任务目标就是找到异常数据,如果模型不重视异常数据,结果就没有意义。所以,首先要做的就是解决样本不平衡问题。
1.2 样本不平衡解决方案
造成数据标签不平衡的最根本原因是它们的个数相差悬殊,如果能让他们个数相差不大,或者比例接近,问题就解决了。
下采样
让正常样本减少到和异常样本数量一样少。
下采样存在的问题:即使原始数据很丰富,下采样之后,只利用了其中一小部分,可能会对结果造成影响。
过采样
让异常样本增加到和正常样本一样多。
可以对数据进行变换,假造一些异常数据,数据生成也是现阶段常见的一种套路。
过采样存在的问题:数据生成解决了异常样本数量的问题,但是异常数据毕竟是造出来的,也可能会对结果造成影响。
1.3 特征标准化
数据特征决定结果的上限,而模型调优只决定如何接近这个上限。
模型对数值是十分敏感的,它不像人类能够理解每一个指标的物理含义,可能会认为数值大的数据更重要。
特征标准化就是希望数据经过处理之后得到的每一个特征的数值都在较小范围内浮动。
2 下采样方案
下采样流程:
1)计算异常样本个数并取索引
2)在正常样本中抽取指定个数的样本
3)把所有样本索引拼接在一起
4)根据索引得到样本点
2.1 交叉验证
得到输入数据后,接下来划分数据集,使用训练集完成建模,使用测试集完成模型测试工作。
在模型训练过程中,也会涉及一些参数调整,所以,还需要一些验证集,帮助模型进行调参。
在训练集划分成很多份,这样做的目的在于,建模过程中,需要调整各种可能影响结果的参数,因此,需要知道每一种参数方案的效果,验证集就是在建模过程中评估参数用的。
交叉验证步骤:
1)把训练集切分成多份,例如将训练集分成10份
2)在验证每一次结果时,需要把整个过程分成10步,第一步用前9份当作训练集,得到一个结果
3)每次都依次用另外一份当验证集,其他部分当作训练集
4)经过10步之后,得到了10个结果,每个结果分别对应其中每一小份,组合在一起恰好包含原始训练集中的所有数据
5)再对最终得到的10个结果进行平均,得到最终模型评估结果
将数据集切分为训练集和测试集:
2.2 模型评估方法
对TP、TN、FP、FN四个关键词的理解:
TP:T表示模型预测正确,P表示被预测成正例,组合在一起就是将正例预测为正例
TN:T表示预测正确,N表示被预测成负例,即将负例预测为负例
FP:F表示预测错误,P表示预测为正例,即错将负例预测为正例
FN:F表示预测错误,N表示预测为负例,即错将正例预测为负例
常见的评估指标:
准确率(accuracy):表示在分类问题中,预测正确的占总体的百分比=预测正确 / 整体
召回率(recall):表示在实际正例中有多少预测正确,覆盖面的大小=预测正确的正例/所有实际的正例
精确度(precision):表示被预测为正例中实际为正例的比例=预测对的正例/所有预测为正例的
信用卡分类任务中,应当使用哪一个评估指标呢?
我们比较关注的是,在所有异常交易记录中,正确预测出来了多少,所以,比较重要的是召回率。
2.3 正则化惩罚
过拟合
建模的出发点是尽可能多地满足样本数据:
欠拟合:模型过于简单,没有满足大部分数据样本点
正常模型:可以满足大部分样本点
过拟合:模型过于复杂,在训练集上表现良好,在测试集上表现很差
对于同一算法来说,模型复杂度由其中要求解的参数控制,如果在训练集上得到的参数值忽高忽低,就很可能导致过拟合。
正则化惩罚是为了解决过拟合准备的,即惩罚数值较大的权重参数,让它们对结果的影响小一点。
在实际建模中,也需要进行这样的筛选,选择泛化能力强也就是稳定的权重参数。
L1和L2正则化惩罚项:
L1正则化中可以对|w|求累加和,但是只直接计算绝对值求累加和的话,1+0+0+0和0.25+0.25+0.25+0.25的结果是相同的,无法做出区分
L2正则化惩罚力度更大,对权重参数求平方和,目的是让大的更大,相对惩罚更多
α系数,表示正则化惩罚的粒度。以一种极端情况举例说明:如果α值比较大,意味着要非常严格地对待权重参数,此时正则化惩罚的结果会对整体目标函数产生较大影响。如果α值较小,意味着惩罚力度较小,不会对结果产生太大影响。
3 逻辑回归模型
3.1 参数对结果的影响
逻辑回归算法中,涉及的参数比较少,这里仅对正则化惩罚力度进行调参实验,为了对比分析交叉验证的效果,对不同验证集分别进行建模与评估分析。
3.2 混淆矩阵
下采样测试集中,异常样本和正常样本的比例基本均衡,但实际数据并非如此,相当于在测试时用理想情况代替真实情况,这样检测结果可能会偏高。所以,测试的时候需要使用原始数据的测试集,才更具代表性。
3.3 分类阈值对结果的影响
逻辑回归算法中,通过sigmoid函数将得分值转化成概率值,默认情况下是以0.5为界限来划分类别。
0.5是一个经验值,但并不是固定的,实践中可以自己指定该阈值的大小。 如果阈值设置得比较大,相当于要求变得严格,只有非常异常的样本,才能当做异常;如果阈值设置得比较小,相当于宁肯错杀不能放过,只要有一点异常就通通抓起来。
在sklearn中,即可以用.predict()得到0.5为默认阈值得分类结果,也可以用.predict_proba()函数得到其概率值,而不进行类比判断。
4 过采样方案
生成样本策略,最常用的是SMOTE算法:
1)对于少数类中每一个样本x,以欧式距离为标准,计算它到少数类样本集中所有样本的距离,经过排序,得到其近邻样本;
2)根据样本不平衡比例设置一个采样倍率N,对于每一个少数样本x,从其近邻开始依次选择N个样本;
3)对于每一个选出的近邻样本,分别与原样本按照如下公式构建新的样本数据:
学习资料:唐宇迪机器学习课程 第五章 信用卡欺诈检测项目
数据及代码 链接:https://pan.baidu.com/s/1lDVHpi_fnGdHvtSwOvXSMw 提取码:1gpt