金融风控-- >客户流失预警模型-- >GBDT建模

前几篇博文中,我们对金融数据进行了分析,数据预处理和特征工程。这篇博文将利用金融数据训练出一个GBDT模型。

本篇博文的主要内容分为以下三个部分:

  • GBDT模型简介
  • 分类器性能指标
  • GBDT在流失预警模型中的应用

GBDT模型简介

有关GBDT模型的介绍,大家可以看我的另外两篇博文机器学习–>集成学习–>Bagging,Boosting,Stacking,机器学习–>集成学习–>GBDT,RandomForest里面关于GBDT的相关内容。

GBDT模型参数问题,这里我们以sklearn里面的GBDT为例来说,打开网址sklearn.ensemble.GradientBoostingClassifier。这里我们不关注GBDT里面的所有参数意义,只解释下在对金融数据建模调参时最常用的一些参数意义:

GBDT框架的参数

n_estimators: 分类树的个数,即K
learning_rate: 即每个弱学习器的权重缩减系数ν,也称作步长。较小的ν意味着需要更多
的弱学习器的迭代次数。参数n_estimators和learning_rate要一起调参。可以从一个小一点
的ν开始调参,默认是1
Subsample: (不放回)抽样率,推荐在[0.5, 0.8]之间,默认是1.0,即不使用子采样
init: 即初始化的时候的弱学习器,一般用在对数据有先验知识,或者之前做过一些拟合的
时候
loss: 即GBDT算法中的损失函数

弱分类树的参数

max_features: 划分时考虑的最大特征数
max_depth: 决策树最大深度
min_samples_split:内部节点再划分所需最小样本数。默认是2.如果样本量不大,不需要管
这个值。如果样本量数量级非常大,则推荐增大这个值
min_samples_leaf: 叶子节点最少样本数
min_weight_fraction_leaf:叶子节点最小的样本权重。默认是0,就是不考虑权重问题。
一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引
入样本权重,这时我们就要注意这个值了
max_leaf_nodes: 最大叶子节点数,通过限制最大叶子节点数,可以防止过拟合
min_impurity_split: 节点划分最小不纯度

有关更多GBDT的参数含义说明请参看我另外一篇博文
机器学习–>集成学习–>BGM调参

分类器性能指标简介

这里写图片描述

表示分类正确:

  • True Positive:本来是正样例,分类成正样例。
  • True Negative:本来是负样例,分类成负样例。

表示分类错误:

  • False Positive :本来是负样例,分类成正样例,通常叫误报。
  • False Negative:本来是正样例,分类成负样例,通常叫漏报。

准确度 这里写图片描述
真正类率(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占
所有正实例的比例。Sensitivity
负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例
占所有负实例的比例。1-Specificity
真负类率(True Negative Rate)TNR: TN/(FP+TN),代表分类器预测的负类中实际负实例
占所有负实例的比例,TNR=1-FPR。Specificity

真正类率(True Postive Rate)TPR就是查全率

分类器给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

AUC是图中曲线下方的面积,值越大,分类效果越佳
这里写图片描述

通常情况下AUC越大学习器的效果越好。,即若一个学习器的ROC曲线被另外一个学习器曲线完全包住,那么可以断言,后一个学习器的性能优于前者。如果发生交叉则难以比较,如果非要比较,比较合理的判断是比较ROC下的面积即AUC大小。

GBDT在流失预警模型中的应用

使用默认参数,在训练集上

from sklearn.model_selection import train_test_split
from sklearn import ensemble,cross_validation, metrics
X_train, X_test, y_train, y_test = train_test_split(modelData[allFeatures],modelData['CHURN_CUST_IND'], test_size=0.5,random_state=9)y_train.value_counts()#try 1: using default parameter
gbm0 = GradientBoostingClassifier(random_state=10)
gbm0.fit(X_train,y_train)
y_pred = gbm0.predict(X_test)
y_predprob = gbm0.predict_proba(X_test)[:,1]##输出所有样本属于0和1的概率,这里选择输出样本属于1的概率
print "Accuracy : %.4g" % metrics.accuracy_score(y_test, y_pred)
print "AUC Score (Testing): %f" % metrics.roc_auc_score(y_test, y_predprob)y_pred2 = gbm0.predict(X_train)
y_predprob2 = gbm0.predict_proba(X_train)[:,1]
print "Accuracy : %.4g" % metrics.accuracy_score(y_train, y_pred2)
print "AUC Score (Testing): %f" % metrics.roc_auc_score(y_train, y_predprob2)

这里写图片描述

都还不错。但是能不能更好点?

首先我们从步长(learning rate)和迭代次数(n_estimators)入手。一般来说,开始选择一个较小的步长来网格搜索最好的迭代次数。这里,我们将步长初始值设置为0.1,迭代次数的搜索范围是20~80

#tunning the number of estimators
param_test1 = {'n_estimators':range(20,81,10)}
gsearch1 = GridSearchCV(estimator = GradientBoostingClassifier(learning_rate=0.1, min_samples_split=300,min_samples_leaf=20,max_depth=8,max_features='sqrt', subsample=0.8,random_state=10),param_grid = param_test1, scoring='roc_auc',iid=False,cv=5)
gsearch1.fit(X_train,y_train)
gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_

这里写图片描述

最好的迭代次数是70,对应的score是85.10%。
好像比默认参数的效果差。。。。

找到了一个合适的迭代次数,现在我们开始对决策树进行调参。首先我们对决策树最大深度max_depth和内部节点再划分所需最小样本样min_samples_split进行网格搜索。搜索的范围分别是3~13和 100~800

#tunning the parameters of simple trees
param_test2 = {'max_depth':range(3,14,2), 'min_samples_split':range(100,801,200)}
gsearch2 = GridSearchCV(estimator = GradientBoostingClassifier(learning_rate=0.1, n_estimators=70, min_samples_leaf=20,max_features='sqrt', subsample=0.8, random_state=10),param_grid = param_test2, scoring='roc_auc',iid=False, cv=5)
gsearch2.fit(X_train,y_train)
gsearch2.grid_scores_, gsearch2.best_params_, gsearch2.best_score_

这里写图片描述

最佳的最大深度和最小样本数分别是9和500,对应的score是85.36%

由于决策树深度9是一个比较合理的值,我们把它定下来,对于内部节点再划分所需最小样本数min_samples_split,我们暂时不能一起定下来,因为这个还和决策树其他的参数存在关联。下面我们再对内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf一起调参。调整范围分别是4001000,以及60100。

param_test3 = {'min_samples_split':range(400,1001,100), 'min_samples_leaf':range(60,101,10)}
gsearch3 = GridSearchCV(estimator = GradientBoostingClassifier(learning_rate=0.1, n_estimators=70,max_depth=9,max_features='sqrt', subsample=0.8, random_state=10),param_grid = param_test3, scoring='roc_auc',iid=False, cv=5)
gsearch3.fit(X_train,y_train)
gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_

这里写图片描述

最佳的最小样本数和叶节点最小样本数分别是500和70,对应的score是85.54%

现在我们再对最大特征数max_features进行网格搜索, 范围从5 到25,最佳值是25.
BUT !
对于边界值,通常还要再放大范围。我们将范围扩大到30,最佳值是28.
再对子采样的比例进行网格搜索,范围从0.6到0.9, 最佳值是0.8.
现在我们基本已经得到我们所有调优的参数结果了。这时我们可以减半步长,最大迭代次数加倍来增加我们模型的泛化能力。再次拟合我们的模型,得到的最优步长是0.05,最大迭代次数是1000,在训练集和测试集上的表现是:

### tunning max_features
param_test4 = {'max_features':range(5,31,2)}
gsearch4 = GridSearchCV(estimator = GradientBoostingClassifier(learning_rate=0.1, n_estimators=70,max_depth=9, min_samples_leaf =70,min_samples_split =500, subsample=0.8, random_state=10),param_grid = param_test4, scoring='roc_auc',iid=False, cv=5)
gsearch4.fit(X_train,y_train)
gsearch4.grid_scores_, gsearch4.best_params_, gsearch4.best_score_## tunning subsample
param_test5 = {'subsample':[0.6,0.7,0.75,0.8,0.85,0.9]}
gsearch5 = GridSearchCV(estimator = GradientBoostingClassifier(learning_rate=0.1, n_estimators=70,max_depth=9, min_samples_leaf =70,min_samples_split =500, max_features=28, random_state=10),param_grid = param_test5, scoring='roc_auc',iid=False, cv=5)
gsearch5.fit(X_train,y_train)
gsearch5.grid_scores_, gsearch5.best_params_, gsearch5.best_score_# tunning the learning rate and
gbm2 = GridSearchCV(estimator = GradientBoostingClassifier(learning_rate=0.05, n_estimators=70,max_depth=9, min_samples_leaf =70,min_samples_split =1000, max_features=28, random_state=10,subsample=0.8),param_grid = param_test5, scoring='roc_auc',iid=False, cv=5)
gbm2.fit(X_train,y_train)y_pred1 = gbm2.predict(X_train)
y_predprob1= gbm2.predict_proba(X_train)[:,1]
print "Accuracy : %.4g" % metrics.accuracy_score(y_train, y_pred1)
print "AUC Score (Train): %f" % metrics.roc_auc_score(y_train, y_predprob1)y_pred2 = gbm2.predict(X_test)
y_predprob2= gbm2.predict_proba(X_test)[:,1]
print "Accuracy : %.4g" % metrics.accuracy_score(y_test, y_pred2)
print "AUC Score (Train): %f" % metrics.roc_auc_score(y_test, y_predprob2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32934.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金融风控实战——额度模型与风控策略

消费金融风控策略 变量分布的合理性:年龄为例,这期的用户大多集中在20-30之间,下一批用户年龄集中在30-40之间,导致变量分布不一致问题。机器学习模型都是基于独立同分布的假设的,会让模型失效,很多规则策略…

实时图计算如何进行风控决策管理?

在金融行业中,账户之间是复杂、多层的关系,那么,数据在高速地发生动态变化的时候,如何进行高效的关联关系计量,如欺诈判定、归因分析等——这种挑战就是典型的深数据或者图数据的挑战。 01 从数据角度看信用卡欺诈风险…

验证码在风控中的实际应用

前言:在业务场景中,企业的安全团队通常将验证码作为降低业务受损风险的方法,以减少撞库盗号、虚假注册、刷量作弊、信息盗窃、薅羊毛等风险事件发生的可能性。 今天将通过验证码在极验十周年特别活动的实际应用,探讨验证码在业务…

风控策略(下)

一、常用量化指标 首先,先了解下如何定义逾期。 过了最后还款日仍未还款,则为逾期。注意,一个客户只有一个账单日。如果想要获得最长免息还款期,则应该在上一个账单日的后一天进行消费。   还有,最重要的一点&#…

风控ML[10] | 风控建模中的自动分箱的方法有哪些

之前有位读者朋友说有空介绍一下自动分箱的方法,这个确实在我们实际建模过程前是需要解决的一个问题,简单来说就是把连续变量通过分箱的方式转换为类别变量。关于这个话题,我也借着这个主题来系统的梳理总结一下几点:为什么要分箱…

风控分析常用指标介绍

在信贷风控中,指标时反应业务变化最直观的手段,通过对指标的分析及时发现和定位业务开展过程中的问题,并及时采取相应的手段进行防控。本文列出工作中常关注的风险指标,介绍指标的定义及分析的方法,旨在精而不在全&…

全面了解风控策略体系

模型和策略的开发是一个系统工程,这其中需要有业务经验、统计理论、算法运用、和数据认知,是一个不断反思,不断积累经验的过程。沙滩上建不起摩天大楼。扎扎实实的基本功永远有价值,永远不会过时。 ——余旭鑫博士 说明 互联网…

金融风控实战——有监督分箱

卡方分箱 分箱的方法有很多,卡方分箱属于其中一种,属于有监督系列的。卡方分箱正是一种基于卡方检验的分箱方法,更具地说是基于上面提到的第二种应用,独立性检验,来实现核心分箱功能的。   卡方分箱算法简单来说&…

风控策略简介

【作者】:Labryant 【原创公众号】:风控猎人 【简介】:某创业公司策略分析师,积极上进,努力提升。乾坤未定,你我都是黑马。 【转载出处】:https://blog.csdn.net/lc434699300/article/details/1…

风控模型及特征的上线部署方法

序言: 作为年后的首篇实操干货文章,番茄风控一如既往向业内小伙伴输出相关的干货文章。有实操能落地,有数据可撸码,继续将会是番茄风控提供给各位小伙伴的业内标配内容。 近期,我们花费了时间容整理了目前业内各位小伙…

金融风控实战——社交网络分析

社交网络分析 上节课有同学希望能讲一些设备指纹的内容,所以这节课我们先讲一下设备指纹,作为反欺诈图谱的基础。 设备指纹 可以把手机设备理解成一个人,像人一样有身份证号和名字(设备序列号等),没有化…

风控数据测试概要

数据测试简介 简而言之,数据测试就是对数据的质量进行测试,查看该质量能不能被我方接受。在风控中,数据测试的主要目的是测试对方数据源是否可以较好地区分出我方申请用户的好坏,衡量质量的指标主要包括:Lift-Chart、A…

三分钟看懂大数据风控中用户行为数据的采集、分析及应用( 转 )

据统计,目前银行传统的风控模型对市场上70%的客户是有效的, 但是对另外30%的用户,其风控模型有效性将大打折扣。 大数据风控作为传统风控方式补充,主要利用行为数据来实施风险控制, 用户行为数据可以作为另外的30%客…

CAR-T药物|疗法适应症|市场销售-上市药品前景分析

对患有癌症的人来说,能够幸运地度过5年大关是一种成功,而能够成功地度过10年大关则是一种奇迹。Emily作为全球第一个接受CAR-T治疗成功的白血病儿童患者,至今已成功摆脱癌症11年之久。 ①CAR-T细胞治疗(Emily Whitehead治疗案例时…

股票数据分析查询接口,股票数据接口,沪深港股,股票api查询

一、接口介绍 查询历史数据的分析统计。本接口数据仅用于学习分析,不得用于对外展示!根据股票代码、日期获取股票历史数据及相关分析,返回日期、开盘价、收盘价、最高价、最低价、成交量、成交额、换手率、涨跌幅等,可绘制相应日…

微信AI助手

首先,感谢GitHub上的开源大佬!对微信AI助手项目我修改了少许部分,以实现在自己服务器上部署。这里是我的项目地址。 1、准备服务器 1.1 服务器密码及安全组规则修改 这里我是用的是腾讯云国内服务器,有条件的同学可以直接选择国…

Andrew Ng和OpenAI教你写prompt

课程地址: https://learn.deeplearning.ai/chatgpt-prompt-engb站搬运: https://www.bilibili.com/video/BV1No4y1t7Zn 教学人员:Lsa Fulford, Andrew NG LLM的两种样式 Base LLM:基于文本训练数据预测下一个词的概率&#xff0…

Android之输入银行卡号判断属于哪个银行

一&#xff1a;效果图&#xff1a; 二&#xff1a;实现步骤&#xff1a; 1.xml布局实现&#xff0c;两个edittext就行了 <LinearLayoutandroid:id"id/lin_yhkh"android:layout_width"fill_parent"android:layout_height"48dp"android:layou…

[项目管理-6]:软硬件项目管理 - 项目沟通管理(渠道、方法)

作者主页(文火冰糖的硅基工坊)&#xff1a;文火冰糖&#xff08;王文兵&#xff09;的博客_文火冰糖的硅基工坊_CSDN博客 本文网址&#xff1a;[项目管理-6]&#xff1a;软硬件项目管理 - 项目沟通管理 &#xff08;沟通渠道&#xff09;_文火冰糖的硅基工坊的博客-CSDN博客 目…

一键定制个性化语音,微软的AI语音落地实践

近日&#xff0c;微软与周迅AI语音红丹丹公益项目发起人鹿音苑文化传播公司、以及来自微软及各界的150名余志愿者&#xff0c;将创作的首批人工智能有声内容&#xff0c;包括鲁迅、老舍、萧红、朱自清等作家的一系列经典作品、红丹丹文化期刊&#xff0c;正式捐赠给北京市红丹丹…