一、建立新的信用指标评估体系

二、计算新的指标值

1、以年消费总额这个新指标为例

年消费总额 = transCnt_mean * transAmt_mean

把计算结果作为新特征,加入作为新列加入data

# 计算客户年消费总额。
trans_total = data['transCnt_mean']*data['transAmt_mean']# 将计算结果保留到小数点后六位。
trans_total =round(trans_total,6)# 将结果加在data数据集中的最后一列,并将此列命名为trans_total。
data['trans_total'] = trans_totalprint(data['trans_total'].head(20))

其他几个新指标做类似上述方法处理

三、构建风控模型

1、构建风控模型流程

2、分层采样

由于目标标签属于非平衡数据,数据集中违约客户远少于未违约的客户,为了更客观构建风控模型和评估效果,应该尽量使训练集和测试集中违约客户的比例一致,因此需要采用分层采样方法来划分训练集与测试集。

划分过程: 分层、随即划分、合并

可见,经过分层采样后,训练集与测试集中违约样本比例会保持一致。

from sklearn.model_selection import train_test_split# 筛选data中的Default列的值,赋予变量y
y = data['Default'].values# 筛选除去Default列的其他列的值,赋予变量x
x = data.drop(['Default'], axis=1).values# 使用train_test_split方法,将x,y划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.2,random_state=33,stratify=y)# 查看划分后的x_train与x_test的长度
len_x_train = len(x_train)
len_x_test = len(x_test)
print('x_train length: %d, x_test length: %d'%(len_x_train,len_x_test))# 查看分层采样后的训练集中违约客户人数的占比
train_ratio = y_train.sum()/len(y_train)
print(train_ratio)# 查看分层采样后的测试集中违约客户人数的占比
test_ratio = y_test.sum()/len(y_test)
print(test_ratio)

3、使用LogisticRegression建立风险评估模型

from sklearn.linear_model import LogisticRegression# 调用模型,新建模型对象
lr = LogisticRegression()# 带入训练集x_train, y_train进行训练
lr.fit(x_train,y_train)# 对训练好的lr模型调用predict方法,带入测试集x_test进行预测
y_predict = lr.predict(x_test)# 查看模型预测结果
print(y_predict[:10])
print(len(y_predict))

4、LogisticRegression风控模型效果评估

模型建立好后,需要对模型的效果进行评估,这里我们使用AUC值作为评价指标。

from sklearn.metrics import roc_auc_score
'''predict_prob 返回 n*k数组(i,j) 表示 预测 第i个样本为 第j类别的概率
'''
y_predict_proba = lr.predict_proba(x_test)# 查看概率估计前十行
print(y_predict_proba[:10])# 取目标分数为正类(1)的概率估计
y_predict = y_predict_proba[:,1]# 利用roc_auc_score查看模型效果
test_auc = roc_auc_score(y_test,y_predict)
print('逻辑回归模型 test_auc:',test_auc)

5、LogisticRegression参数优化

from sklearn.metrics import roc_auc_score
from sklearn.linear_model import LogisticRegression# 建立一个LogisticRegression对象,命名为lr
'''使用l1正则
'''
lr = LogisticRegression(C=0.6,class_weight='balanced',penalty='l1')# 对lr对象调用fit方法,带入训练集x_train, y_train进行训练
lr.fit(x_train,y_train)# 对训练好的lr模型调用predict_proba方法
y_predict = lr.predict_proba(x_test)[:,1]# 调用roc_auc_score方法
test_auc = roc_auc_score(y_test,y_predict)print('逻辑回归模型test auc:')
print(test_auc)

6、LogisticRegression 对数据进行标准化以提升逻辑回归模型

continuous_columns = ['age','cashTotalAmt','cashTotalCnt','monthCardLargeAmt','onlineTransAmt','onlineTransCnt','publicPayAmt','publicPayCnt','transTotalAmt','transTotalCnt','transCnt_non_null_months','transAmt_mean','transAmt_non_null_months','cashCnt_mean','cashCnt_non_null_months','cashAmt_mean','cashAmt_non_null_months','card_age', 'trans_total','total_withdraw', 'avg_per_withdraw','avg_per_online_spend', 'avg_per_public_spend', 'bad_record']# 对data中所有连续型的列进行Z-score标准化 important
data[continuous_columns]=data[continuous_columns].apply(lambda x:(x-x.mean())/x.std())# 查看标准化后的数据的均值和标准差,以cashAmt_mean为例
print('cashAmt_mean标准化后的均值:',data['cashAmt_mean'].mean())
print('cashAmt_mean标准化后的标准差:',data['cashAmt_mean'].std())# 查看标准化后对模型的效果提升
y = data['Default'].values
x = data.drop(['Default'], axis=1).values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2,random_state = 33,stratify=y)from sklearn.metrics import roc_auc_score
from sklearn.linear_model import LogisticRegressionlr = LogisticRegression(penalty='l1',C=0.6,class_weight='balanced')
lr.fit(x_train, y_train)# 查看模型预测结果
y_predict = lr.predict_proba(x_test)[:,1]
auc_score =roc_auc_score(y_test,y_predict)
print('score:',auc_score)

7、使用(对连续型特征数值)离散化提升LogisticRegression回归模型效果

# 这里 把 后来 提取的特征 也放进去 和原有特征一起离散化
continuous_columns = ['age','cashTotalAmt','cashTotalCnt','monthCardLargeAmt','onlineTransAmt','onlineTransCnt','publicPayAmt','publicPayCnt','transTotalAmt','transTotalCnt','transCnt_non_null_months','transAmt_mean','transAmt_non_null_months','cashCnt_mean','cashCnt_non_null_months','cashAmt_mean','cashAmt_non_null_months','card_age', 'trans_total', 'total_withdraw', 'avg_per_withdraw','avg_per_online_spend', 'avg_per_public_spend', 'bad_record']# 对data中数值连续型的列进行等频离散化,将每一列都离散为5个组。
data[continuous_columns] = data[continuous_columns].apply(lambda x : pd.qcut(x,5,duplicates='drop'))# 查看离散化后的数据
print(data.head())# 查看离散化后对模型的效果提升
# 先对各离散组进行One-Hot处理
data=pd.get_dummies(data)
#print(data.columns)
y = data['Default'].values
# 取出除标签外所有列
x = data.drop(['Default'], axis=1).values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2,random_state = 33,stratify=y)from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_scorelr = LogisticRegression(penalty='l1',C=0.6,class_weight='balanced')
lr.fit(x_train, y_train)# 查看模型预测结果
y_predict = lr.predict_proba(x_test)[:,1]
score_auc = roc_auc_score(y_test,y_predict)
print('score:',score_auc)

8、使用随机森林建立风险评估模型

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_scorerf_clf = RandomForestClassifier()
rf_clf.fit(x_train,y_train)
y_predict = rf_clf.predict_proba(x_test)[:,1]# 查看模型效果
test_auc = roc_auc_score(y_test,y_predict)
print ("AUC Score (Test): %f" % test_auc)

9、随机森林参数调优

n_estimators表示随机森林中决策树数目

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score# 尝试设置参数n_estimators
rf_clf1 =  RandomForestClassifier(n_estimators=100)
rf_clf1.fit(x_train, y_train)
y_predict1 = rf_clf1.predict_proba(x_test)[:,1]# 查看模型效果
test_auc = roc_auc_score(y_test,y_predict1)
print ("AUC Score (Test): %f" % test_auc)

10、随机森林参数调优

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
import matplotlib.pyplot as plt# 定义存储AUC分数的数组
scores_train=[]
scores_test=[]
# 定义存储n_estimators取值的数组
estimators=[]# 设置n_estimators在100-210中每隔20取一个数值
for i in range(100,210,20):estimators.append(i)rf = RandomForestClassifier(n_estimators=i, random_state=12)rf.fit(x_train,y_train)y_predict = rf.predict_proba(x_test)[:,1]scores_test.append(roc_auc_score(y_test,y_predict))# 查看我们使用的n_estimators取值
print("estimators =", estimators)# 查看以上模型中在测试集最好的评分
print("best_scores_test =",max(scores_test))# 画出n_estimators与AUC的图形
fig,ax = plt.subplots()# 设置x y坐标名称
ax.set_xlabel('estimators')
ax.set_ylabel('AUC分数')
plt.plot(estimators,scores_test, label='测试集')#显示汉语标注
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['font.family']=['sans-serif']# 设置图例
plt.legend(loc="lower right")
plt.show()

可以看到我们对n_estimators 在 100-210中每取一个值,n_estimators为180时评分最好,较之前略有提升。

11、使用网格搜索(GridSearchCV)进行随机森林参数优化

交叉验证

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_scorerf = RandomForestClassifier()# 设置需要调试的参数
tuned_parameters = {'n_estimators':[180,190],'criterion':['entropy','gini'],'max_depth':[8,10],'min_samples_split':[2,3]
}# 调用网格搜索函数
rf_clf = GridSearchCV(rf,tuned_parameters,cv=5,n_jobs=12,scoring='roc_auc')
rf_clf.fit(x_train, y_train)y_predict = rf_clf.predict_proba(x_test)[:,1]
test_auc = roc_auc_score(y_test,y_predict)
print ('随机森林模型test AUC:')
print (test_auc)

三、大数据实践——构建新特征指标与构建风控模型相关推荐

  1. 《大数据实践课》开创实践教学新模式:清华大数据能力提升项目特色课程系列报道之一

    2014年4月,清华大学顺应时代潮流成为全国第一批成立大数据研究机构的高等学府.四年来,清华-青岛数据科学研究院(以下简称:数据院)与研究生院共同设计组织实施了以大数据能力提升项目为主的大数据人才培养 ...

  2. 连载:阿里巴巴大数据实践—实时技术

    简介:相对于离线批处理技术,流式实时处理技术作为一个非常重要的技术补充,在阿里巴巴集团内被广泛使用. 前言: -更多关于数智化转型.数据中台内容请加入阿里云数据中台交流群-数智俱乐部 和关注官方微信公 ...

  3. 青春有你,成长同行——2022《大数据实践课》成果展示

    1 实践单位:中国广核新能源控股有限公司 项目名称:基于机器学习的风电机组传动链故障诊断 小组成员: 高  祥 机械系(组长) 李艳文 机械系 范祥祺 工物系 研究目标:随着风电机组运行年限的增加,机 ...

  4. 开放下载!《阿里巴巴大数据及AI实战》深度解析典型场景大数据实践

    来源:开发者社区 本文约2000字,建议阅读5分钟. 阿里经济体大数据及AI典型场景最佳实践全揭秘.2019不容错过的大数据实战手册--<阿里巴巴大数据及AI实战>现在可以免费下载阅读啦! ...

  5. 酷狗音乐的大数据实践

    2015-06-03 王劲 高可用架构 高可用架构 此文是根据酷狗音乐大数据架构师王劲在[QCON高可用架构群]中的分享内容整理而成,转发请注明出处. 王劲:目前就职酷狗音乐,大数据架构师,负责酷狗大 ...

  6. 连载:阿里巴巴大数据实践—数据建模综述

    简介:数据模型就是数据组织和存储方法,它强调从业务.数据存取和使用角度合理存储数据. 前言: -更多关于数智化转型.数据中台内容请加入阿里云数据中台交流群-数智俱乐部 和关注官方微信公总号(文末扫描二 ...

  7. 大数据打造你的变美频道——数加平台上小红唇的大数据实践

    在2017在线峰会--票选最美云上大数据暨大数据技术峰会上,来自小红唇的王洋分享了数加平台上小红唇的大数据实践.他对数据仓储解决方案和搜索引擎进行了详细介绍.通过算法平台应用的基于视频元信息的回归.近 ...

  8. “全息数字人”——健康医疗 大数据应用的新模式

    "全息数字人"--健康医疗大数据应用的新模式 金小桃,王光宇,黄安鹏 北京大学健康医疗大数据国家研究院,北京 100871: 中国卫生信息与健康医疗大数据学会,北京 100048: ...

  9. 大数据之路:阿里巴巴大数据实践,附339页PPT下载

    7份关于大数据的资料都整理好了,需要的自取,获取方式:转发+私信我回复:大数据 1.<大数据之路:阿里巴巴大数据实践> 2014年,马云提出,"人类正从IT时代走向DT时代&qu ...

最新文章

  1. 五分钟读懂TCP 协议
  2. 模拟PLC 的圆弧插补方式在VC中绘制圆弧
  3. oracle数据库 pc6,使用logdump 查看ogg的CSN
  4. 排序中减治法算法伪代码_【算法与数据结构】伪代码与流程图
  5. 到底有哪些副业适合程序员或产品经理?
  6. oracle上浮下浮分析函数_Oracle SQL高级编程——分析函数(窗口函数)全面讲解...
  7. element upload预览_vue+element上传图片并显示预览图
  8. Python中怎么读写图像
  9. Spring源码分析——资源访问利器Resource之接口和抽象类分析
  10. php date当天,php5中date()获得的时间不是当前时间的解决方法
  11. Leetcode 16. 最接近的三数之和(3Sum Closest)
  12. 了解如何通过Python使用SQLite数据库
  13. 将Javascript带到边缘设备
  14. 【干货】ArcGIS自动生成拓扑并导出拓扑错误
  15. C语言实战--解二元一次方程
  16. html自动触发双击事件,js主动触发单击事件
  17. 市场营销策划书大纲怎么写
  18. uni-app 常用内容
  19. 收藏夹吃灰系列(四):谁说Spring提供的@Scheduled定时不好用?师妹看了直呼叫好!
  20. 小米手环NFC 模拟门禁卡 不买东西最简解决方案(100字)

热门文章

  1. @Size、@Length、@Max、@Min注解的含义和区别
  2. 如何建立文献之间的引证关系
  3. leetcode:子集
  4. javaweb 加强的知识点
  5. 【ECS】Windows2016数据中心版配置IIS+ASP+sql server 2008 r2
  6. 设计立方体类(Cube)
  7. 苹果30亿美元收购Beats 预计第四财季完成
  8. 使用git出现node: command not found解决方法
  9. react antd组件selec 单选下拉框实现模糊搜索
  10. 测试计算机网络的连通性,计算机网络系统连通性测试