ML实操 - 贷款用户逾期情况分析

目录

任务描述

实现过程

基本思路

1. 数据集预览

2. 数据预处理

3. 特征工程

4. 模型选择

4.1 数据及划分及数据归一化

4.2 LR

4.3 SVM

4.4 决策树

4.5 Xgboost

4.6 LightGBM

5. 模型调参

6. 性能评估

7. 模型融合

遇到的问题

参考

More


任务描述

给定金融数据,预测贷款用户是否会逾期。(status是标签:0表示未逾期,1表示逾期。)

Misson1 - 构建逻辑回归模型进行预测
Misson2 - 构建SVM和决策树模型进行预测
Misson3 - 构建xgboost和lightgbm模型进行预测
Mission4 - 记录五个模型关于precision,rescore,f1,auc,roc的评分表格,画出auc和roc曲线图
Mission5 - 关于数据类型转换以及缺失值处理(尝试不同的填充看效果)以及你能借鉴的数据探索
Mission6 - 使用网格搜索对模型进行调优并采用五折交叉验证的方式进行模型评估
Mission7 - 用你目前评分最高的模型作为基准模型,和其他模型进行stacking融合,得到最终模型及评分
Mission8 - 分别用IV值和随机森林挑选特征,再构建模型,进行模型评估

 

实现过程

基本思路

主要分为以下若干步骤:
1)数据集预览
2)数据预处理:切分X,y;删除无用特征;字符型特征编码;缺失值填充 等
3)特征工程
4)模型选择:lr,svm,dt,xgboost,lightgbm 等
5)模型调参
6)性能评估
7)最终结果

 

1. 数据集预览

# 因为数据并非utf-8编码,要使用gbk编码读入,否则出错
data = pd.read_csv('./data/data.csv', index_col=0, encoding='gbk')

# 观察数据构成
# data.head()
print(data.shape)    # (4754, 89)

2. 数据预处理

X, y 划分

# 划分 X, y
y = data['status']
X = data.drop('status', axis=1)

特征处理

# 首先剔除一些明显无用的特征,如 id_name, custid, trade_no, bank_card_no,
# 这些优点类似一个人的唯一信息,如果加入模型训练且对最终模型生效的话,很可能就是出现了过拟合
X.drop(['id_name', 'custid', 'trade_no', 'bank_card_no'], axis=1, inplace=True)

# 数值型变量
X_num = X.select_dtypes('number').copy()
# student_feature
X_num.fillna({'student_feature': 0}, inplace=True)
# 其他数值型变量使用均值代替
X_num.fillna(X_num.mean(), inplace=True)

# 字符型变量
X_str = X.select_dtypes(exclude='number').copy()
X_str_dummy = pd.get_dummies(X_str['reg_preference_for_trad'])

# 合并
X_cl = pd.concat([X_num, X_str_dummy], axis=1, sort=False)
X_cl.shape

3. 特征工程

由于特征工程比较浩大,所以新开一文章用以记录。
详见:https://blog.youkuaiyun.com/l75326747/article/details/84326897

4. 模型选择

4.1 数据及划分及数据归一化

# 数据划分
from sklearn.model_selection import train_test_split
random_state = 1115
X_train, X_test, y_train, y_test = train_test_split(X_cl, y, test_size=0.3, random_state=random_state)

# 归一化
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
X_train_std = ss.fit_transform(X_train)
X_test_std = ss.transform(X_test)

4.2 LR

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=0.05, penalty='l1')
lr.fit(X_train_std, y_train)

4.3 SVM

from sklearn.svm import SVC
# 线性 SVM
linear_svc = SVC(kernel='linear', probability=True)
linear_svc.fit(X_train_std, y_train)
# 多项式 SVM
poly_svc = SVC(kernel='poly', probability=True)
poly_svc.fit(X_train_std, y_train)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值