一 案例分析
- 银行进行贷款按照利率获取利润,但存在贷款不归还现象,为保证银行获得最大的贷款利润,需要进行正确预测某人是否能够进行还款
- 该项目可以作为二分类问题,让TP即某人可以还款并且预测成功的概率,同时让FP即某人不会还款并且预测错误导致放款的概率越低越好,即Recall率越高越好
数据集及代码放在https://github.com/RenDong3/Python_Note
二 特征工程
- 在进行模型训练拟合之前需要对数据集特征属性进行调研,了解其每一个特征所表示的含义
- 首先进行数据清洗,去除大量无关特征
- 然后对特征进行处理,如将字符型转为数值型,缺失值填充等操作
2.1基本特征属性
- 读取shape、columns、head()、tial()等数据基本特征
-
索引读取数据
- loc:通过行标签索引数据
- iloc:通过行号索引行数据
-
ix:通过行标签或行号索引数据(基于loc和iloc的混合)
2.2 数据清洗
去除无效特征
-
去除明显无关特征
- 如本案例中 ‘id’、‘member_id’ 等特征可以作为明显无关特征
- 如本案例中 ‘id’、‘member_id’ 等特征可以作为明显无关特征
-
去除所有数据同属性的特征
- 如本案例中 ‘initial_list_status’ 除缺失值外其他所有数据都只含有__‘f’__ 这一个字符属性
-
pandas会将缺失值也作为一个属性,所以判别之前需要dropna()先去掉缺失值
- 如本案例中 ‘initial_list_status’ 除缺失值外其他所有数据都只含有__‘f’__ 这一个字符属性
2.3 特征处理
2.3.1 缺失值处理
-
使用sum()对数据每个特征属性缺失值总数进行统计
- 缺失值数量较少的特征可以进行缺失值填充或者丢弃少量缺失值
-
缺失值较多的特征可以直接丢弃
2.3.2 特征类型转换
-
使用dtypes对数据字符型特征进行筛选(pandas中字符类型表示为object)
-
在进行类型转换之前可以统计下字符型特征的具体属性,方便下一步的转换
-
类型转换
-
自主设置字典进行replace
- 如可以对数据中**‘emp_length’** 特征属性设置为0-10的数值进行对应replace原始字符属性
-
one-hot编码get_dummies()
- 通过one-hot编码可以通过prefix设置新的特征属性
- 不要忘记drop原始数据特征
-
rstrip去除字符串末尾指定字符如’%'
- 对于一些特殊特征属性如银行贷款利率,其数据带有‘%’等特殊字符,可以使用rstrip去除
- 对于一些特殊特征属性如银行贷款利率,其数据带有‘%’等特殊字符,可以使用rstrip去除
-
自主设置字典进行replace
-
进行特征工程后可以进行info查看处理后数据的基本信息
三 模型拟合
- 具体模型训练相关的评估指标在前一篇博客已经详细讲述过,请移步python项目实战—异常检测
- 推荐首先使用逻辑回归算法进行二分类,其次选用随机森林等算法
- 上述结果显示,单纯使用准确率precision作为评价指标,逻辑回归有很高的准确度
- 准确率很高并不能说明模型泛化性很好,因为案例仍可归类为异常检测类型问题,正负样本存在严重的不均衡问题,即全部预测为正样本也可以取得很高的准确率
- 可以选择召回率Recall或者map曲线进行模型评估
数据不平衡问题解决方案
-
正则化惩罚
- 引入正则化项,调节正负样本权重参数class_weight
- 如原始正负样本比例为1:6,则可以将权重设置为1:6,从未抵消影响
-
模型调整
- 选择其他模型进行拟合数据
- 集成融合不同模型拟合数据
-
减小特征数量
- 特征数量过多可能会导致模型过拟合,可以适当减少或者融合特征
-
参数调优
- 可以进行交叉验证、随机森林n_estimator等参数进行模型调优处理