在上一篇转载的博客:从重采样到数据合成:如何处理机器学习中的不平衡分类问题?
http://www.cnblogs.com/huanjing/p/6789731.html讲述了不均衡样本处理方法
信用卡欺诈检测就是不平衡分类实例,问题处理思路:
1.查看数据分布,欺诈样本数相对正常样本数少于5%,确定为不平衡分类为题
2.采用随机欠采样方法对数据进行处理,建立随机欠采样数据集,并将其分为训练集和测试集
Under sample dataset
under_sample_data = data.iloc[under_sample_indices,:]
3.利用under sample dataset 建立训练随机欠采样模型,并选择合适的惩罚项系数
4.利用under sample dataset 中测试数据集测试随机欠采样模型,得到较高recall值
5.利用未处理过原始不平衡分类数据集中测试集测试随机欠采样模型,得到较高recall值,同时发现虽然将137个欺诈样本找出,但是同时将八千多个正常交易判定为欺诈样本,误差率较高,实际应用中会造成较大麻烦
6.利用原始不平衡分类数据集训练逻辑回归模型,选择合适的惩罚项系数,测试集中得到的recall值较低,但是误差率却不高
7.选择合适的逻辑回归阈值,逻辑回归算法中,默认概率大于0.5,则被判定为1,欺诈样本,概率小于0.5,则被判定为0,即正常样本,现在研究阈值对随机欠采样模型的影响
从结果可以看出,阈值越高,recall值越低,同时误杀率越低,不难想象,阈值越高,被判定为欺诈样本的“门槛”越高,因此相对recall值较低,阈值越低,则有宁可错杀一千不可放过一个的意思,显然是不太合适的
8.利用信息性过采样:合成少数类过采样技术(SMOTE)对数据集进行处理,构造过采样数据集
oversampler=SMOTE(random_state=0)
os_features,os_labels=oversampler.fit_sample(features_train,labels_train)
如图便是smote将少量数据生成多个数据的方法
9.对smote方法构造的数据集进行建模测试,发现其recall值较高,同时误杀较少