数据资源
https://gitee.com/pingfanrenbiji/resource/tree/master/%E9%87%91%E8%9E%8D%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/%E7%AC%AC%E4%B8%89%E7%AB%A0%E7%AC%AC%E4%B8%89%E9%A2%98
导入代码库
import pandas as pd import numpy as np
导入样本
loan_history=pd.read_excel('loan_history.xlsx') newuser=pad.read_excel('newuser.xlsx')
查看数据维度(行列量)
loan_history.shape newuser.shape (12000, 18) (3000, 17) newuser相对loan_history少了sample这个特征
数据集信息探索
loan_history.describe()
比如 target列count是12000 就说明 loan_history 这个表格有12000行数据的target值个数汇总是12000 count、mean、std(标准差)、min、25%、50%、75%都是基于当前指标(特征、自变量)对应的一列数据来计算的
观察数据集字段信息
loan_history.info() object表示字符串类型的值
分析特征变量
- 将变量名转换成列表形式 便于后续进行循环操作
var_all = loan_history.columns.tolist() var_all 这个是样本表全量列名 后续需要由其整理出入模指标(特征、自变量) sample 上面也说到了 loan_history中有、newuser中没有 所以不将此特征入模 并且这个字段是字符型 为了简化代码 不做定性变量处理 故删除这个指标 uid 是关联字段 也不入模 target 预测指标 因变量 也不入模型
所以将这3个特征变量从全量特征中删除 留下的都是需要入模(进行模型训练)的指标 var_all.remove('sample') var_all.remove('uid') var_all.remove('target')
判断各列是否有空值
for col in var_all: x=loan_history[col].isnull().sum() if x != 0: print(col,x) 循环遍历var_all这个数组中的所有的入模型特征变量 获取当前变量在这个表格中对应的所有的这列数据 通过isnull()函数判断是否为空 若为空 则sum() 统计+1 如果未打印出结果则说明此处无空值
建立模型
导入机器学习库
# 导入训练、测试数据集划分类 from sklearn.model_selection import train_test_split # 导入岭回归包中的逻辑回归类 from sklearn.linear_model import LogisticRegression # 导入统计包中的f1值、精确率(precision 模型判断正例中有多少实际也为正例的)、召回率(recall 实际正例中有多少被模型判断为正例的),roc曲线、auc面积相关类 from sklearn.metrics import confusion_matrix,f1_score, precision_score,recall_score,roc_auc_score
分割训练集和测试集
train,test=train_test_split(loan_history,test_size=0.4,random_state=2020) 训练、测试数据分割 第一个参数是 原数据(贷款历史) 第二个参数是 测试数据所占的比例 一般是30%-40%合适 第三个参数是 随机种子 这是固定的随机种子 即每次分割之后的数据都是一致的 得到: train是训练数据集 test是测试数据集
对训练和测试集合分别剥离出自变量、因变量
# 得到训练集的所有的自变量数据 X_train=tarin(var_all) # 得到训练集的因变量数据 即实际是否还款 y_train=train('target') # 得到测试数据集的所有自变量数据 X_test=test[var_all] # 得到测试数据集的因变量数据 即实际是否还款 y_test=test['target']
开始模型训练
- 创建逻辑回归模型实例
model = LogisticRegression()
- 调用模型训练算法git 传入 训练数据集中的自变量数据、和训练数据集中的因变量数据
lgr=model.fit(X_train,y_train) 模型训练真正想要做的事情: 假如 是这样的数据 小明的各种实际信息(姓名、手机号、借口记录) 结果是否还款 很多人这样的数据就会构成很大的数据集集 把这个数据集进行训练 得出一个公式 这个公式是根据这些数据训练出来的 而预测就是 有了一个新的客户 小红 ,有他的基本信息 但没有贷款记录 根据他的基本信息 代入这个公式 得出一个结果 即是否贷款给他