数据资源

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 pdimport numpy as np

导入样本

loan_history=pd.read_excel('loan_history.xlsx')newuser=pad.read_excel('newuser.xlsx')

查看数据维度(行列量)

loan_history.shapenewuser.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)

模型训练真正想要做的事情:

假如 是这样的数据

小明的各种实际信息(姓名、手机号、借口记录)    结果是否还款

很多人这样的数据就会构成很大的数据集集

把这个数据集进行训练 得出一个公式

这个公式是根据这些数据训练出来的

而预测就是 有了一个新的客户 小红 ,有他的基本信息 但没有贷款记录 

根据他的基本信息 代入这个公式 得出一个结果 即是否贷款给他

测试模型

既然已经训练出来一个模型(公式)了 那么我要验证下这个公式的准确性根据准确性来判断这个模型是否合理,若不合理 我调整训练参数再进行训练得到新的模型
y_pred = lgr.predict_proba(X_test)[:,1]

调用逻辑回归的预测的函数 将X_test测试数据作为参数 得到每个测试数据和对应的预测结果的概率  预测结果有0,1区分(具体0,1代表什么含义根据业务来定义 比如0表示未还款,1=表示已还款)

比如0.01539811 表示 这个人还款的概率为 0.01539811

设置一个阈值是0.22 那么 0.01539811<0.22 就认为0.01539811这个概率表示不还款 

[:,1]表示筛选数据表的所有行 选择第二列数据 即获取预测结果为已还款的数据


这个是每条测试数据对应的还款的概率 假设设置一个阈值为0.22 即大于表示还款,小于表示不还款 那么第一个 0.0117612<0.22就表示0.0117612为不还款

上面显示进行训练数据的训练得到一个模型然后让模型去预测测试数据得到一个预测结果然后再拿着实际的数据和预测数据进行比对 画roc曲线、计算ks、计算auc面积等就是为了验证预测结果和实际结果的差别
from sklearn.metrics import roc_curve,auc

# 计算ks和auc

def ks_perf(actuals,predictions):    fpr,tpr,threshold = roc_curve(actuals,predictions)    auc_ = auc(fpr,tpr)    ks_ = max(tpr-fpr)    print(auc_,ks_)

actuals是实际的是否还款即因变量数据predictions 是模型预测的是否还款因变量数据

roc曲线
根据fpr和tpr可以计算auc面积( 横轴是fpr纵轴是tpr 曲线(roc曲线)和x轴之间的面积)

ks值
根据2个数据集可以画roc曲线 得到 fpr(真正例率tpr,假正例率fpr,阈值threshold)

横轴是阈值threshold 纵轴是fpr和tpr 同一个阈值 tpr rate - fpr rate 值即是ks曲线

Ks指标越大 模型的风险区分能力越强

ROC曲线上的每一个点代表一个阈值ROC曲线坐标系(0,0) 阈值最大(1,1)阈值最小从这两张图也可以看得出来

调用这个ks_perf函数 传入测试数据集(实际数据)、模型预测结果集 计算auc和ks值


ROC的值越大越好 取值范围是0.5-1之间

Ks值 0.2-0.3基本可用 ,0.3以上可用

将预测结果放入数据表中

根据上一步的流程来判断模型预测的结果怎么样 看来模型预测效果还不错

那么就把这个预测结果放入数据表中

test['prob'] = y_pred

# 获取指定列的数据test_oos = test[['uid', 'prob', 'target']]# 生成excel文件test_oos.to_excel('score_oos.xlsx', index = False)index=False 不生成表格每行数据最前面的序号列

计算f1

上面是根据测试数据集对应的自变量的还款概率多少来计算ks和auc

这里根据测试数据集对应的因变量 target(实际和预测)来计算f1

因为y_pred这一列数据为测试数据集根据模型预测产生的还款概率数据

那么设置一个阈值 比如0.22 大于该值表示还款 设置为1小于该值表示不还款设置为0

那么根据y_pred就可以产生一个预测的traget
# 设置一个0.22阈值 来计算f1值 调整阈值大小 目的是为了得到一个最大的f1值test_oss['target_new'] = test_oos['prob'].map(lambda x: 1 if x > 0.22 else 0)# 实际因变量和预测的因变量f1_score(test_oss['target'],test_oss['target_new'])

对推断集进行预测

和上面的过程一致 不就细说了

# 获取推断数据集newuser中的所有的自变量特征数据x_inference = newuser[var_all]# 调用逻辑回归的预测函数 获取还款概率y_inference = lgr.predict_proba(x_inference)[:, 1]newuser['prob'] = y_inferenceresult = newuser[['uid', 'prob']]# 设置一个阈值 将还款概率转换为0(不还款),1(还款)即二分类问题 result['pred_label'] = result['prob'].map(lambda x: 1 if x > 0.22 else 0)result = result[['uid', 'pred_label']]result.to_excel('newuser_prob.xlsx', index = False)

机器学习预测信贷风险相关推荐

  1. 计算机书籍-机器学习预测分析

    书名:Python机器学习 预测分析核心算法 作者:[美] Michael Bowles(鲍尔斯) 出版社:人民邮电出版社 品牌:异步图书

  2. 机器学习预测农民是否可以得到贷款

    通过最佳实践帮助您实现上述案例效果 Step1:数据导入MaxCompute 1.1 创建需要上传的本地数据 贷款预测表:(今年申请贷款者) 字段名 含义 类型 描述 id 数据唯一标识符 strin ...

  3. ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍

    ML之预测:玩转2018世界杯-采用机器学习预测小组赛.十六比赛.四决赛.半决赛.决赛以及世界杯总冠军的各个队伍 导读       机器学习预测.玩转2018世界杯-采用机器学习预测小组赛.十六比赛. ...

  4. 使用机器学习预测天气_使用机器学习的二手车价格预测

    使用机器学习预测天气 You can reach all Python scripts relative to this on my GitHub page. If you are intereste ...

  5. 知乎 开源机器学习_使用开源数据和机器学习预测海洋温度

    知乎 开源机器学习 In this tutorial, we're going to show you how to take open source data from the National O ...

  6. 使用机器学习预测天气_如何使用机器学习预测着陆

    使用机器学习预测天气 Based on every NFL play from 2009–2017 根据2009-2017年每场NFL比赛 Ah, yes. The times, they are c ...

  7. 使用机器学习预测天气_如何使用机器学习根据文章标题预测喜欢和分享

    使用机器学习预测天气 by Flavio H. Freitas Flavio H.Freitas着 如何使用机器学习根据文章标题预测喜欢和分享 (How to predict likes and sh ...

  8. python机器学习预测_使用Python和机器学习预测未来的股市趋势

    python机器学习预测 Note from Towards Data Science's editors: While we allow independent authors to publish ...

  9. 《Python机器学习——预测分析核心算法》——2.4 基于因素变量的实数值预测:鲍鱼的年龄...

    本节书摘来异步社区<Python机器学习--预测分析核心算法>一书中的第2章,第2.4节,作者:[美]Michael Bowles(鲍尔斯),更多章节内容可以访问云栖社区"异步社 ...

最新文章

  1. springboot获取getBean方法以及ApplicationContext空指针问题解决
  2. html hr线的样式
  3. SDN控制器ONOS架构—Vecloud
  4. 亚马逊智能语音助手Alexa大举招聘 放出400个职位
  5. Linux压缩那些事
  6. 【转】c++ http下载文件
  7. AD20更改PCB 2D视图的背景环境颜色
  8. ajax返回功能,jquery – 记得ajax在点击返回按钮时添加的数据
  9. 数据库基础:select基本查询语句
  10. NTP服务器配置(CentOS环境)
  11. 锁定计算机程序到任务栏,程序图标不能锁定到任务栏?这样做so easy啦!
  12. 谷歌gmail注册入口_如何更改,恢复,重设Gmail,Google云端硬盘,Android,Chrome的Google帐户密码?...
  13. Mybatis异常:Invalid bound statement (not found): com.xxx.mapper.xxxMapper.selectByExample
  14. 免费天气预报API接口
  15. 语音动画设置 android,Anroid Studio第七期 - 语音动画
  16. Leech for mac(轻量级mac下载工具)
  17. Python列表练习——用户管理
  18. 云主机创建网络失败:Unable to create the network. No tenant network is available for allocation.
  19. 【深度学习】一个用于styleGAN图像处理的编码器
  20. 寄存器、缓存、内存之间的关系和区别

热门文章

  1. 中imshow函数用法_5 OpenCV几个函数操作实例
  2. 笔试算法题(26):顺时针打印矩阵 求数组中数对差的最大值
  3. Python自动化部署环境
  4. 日志分析——从概念到应用
  5. linux图形环境小记
  6. 创建永远隐藏的隐藏帐号
  7. 生活等级测试(娱乐性质)
  8. MAT分析android内存泄漏
  9. Archiva 2.2.3 安装运行的时候出现协议版本错误
  10. Wireshark数据包分析之数据包信息解读