您的位置 首页 > 德语词汇

toad是什么意思,傻瓜式评分卡建模库Toad使用

大家好,今天小编来为大家解答以下的问题,关于toad是什么意思,傻瓜式评分卡建模库Toad使用这个很多人还不知道,现在让我们一起来看看吧!

?信贷评分卡中常用的两个库有scorecardpy和Toad。其中scorecardpy是由谢士晨博士开发,Toad是由厚本金融风控团队内部孵化产生的标准评分卡库。本文以Toad官方指导教程为例,讲解如何运用Toad库进行傻瓜式的评分卡开发。

toad是什么意思,傻瓜式评分卡建模库Toad使用

参考自Toad库中的BasicTutorialforToad.

Toad遵循信用风险记分卡模型开发的一般流程:(1)EDA(2)特征的选择与WOE分箱的结合(3)模型选择(4)模型验证(5)评分卡转换

本文使用的数据是著名的德国信用卡数据集。数据预处理包括:(1)将target从'good'/'bad'替换为0,1;(2)划分训练集测试集;(3)增加一列表示训练和测试的特征。训练集将用于建模,而测试集将仅用于验证。

importpandasaspd\nimportnumpyasnp\nfromsklearn.linear_modelimportLogisticRegression\nfromsklearn.model_selectionimporttrain_test_split\nimporttoad\n\ndata=pd.read_csv('germancredit.csv')\ndata.replace({'good':0,'bad':1},inplace=True)\n\nprint(data.shape)#1000dataand20features\ndata.head()

?划分训练集和测试集:

Xtr,Xts,Ytr,Yts=train_test_split(data.drop('creditability',axis=1),data['creditability'],test_size=0.25,random_state=450)\ndata_tr=pd.concat([Xtr,Ytr],axis=1)\n#增加一列区分训练/测试的特征\ndata_tr['type']='train'\ndata_ts=pd.concat([Xts,Yts],axis=1)\ndata_ts['type']='test'一、EDA数据处理

?Toad支持常用的特征EDA分析,包括检测缺失值和特征分布。

toad.detector.detect():返回每个特性的EDA报告,包括数据类型、分布、缺失率和惟一值。

toad.detector.detect(data_tr).head(10)二、特征选择,WOE转换

?Toad可以用来过滤大量的特征,如高缺失率、低iv和高度相关的特征。它还可以使用各种分箱技巧进行分箱和实现WOE转化。

toad.selection.select():用于根据缺失百分比、iv(20箱)和多重共线性(带有VIF和/或自相关)来过滤特征。

?下面以缺失率大于0.5.IV值小于0.05或者相关性大于0.7(保留较高的特征)来进行特征筛选。

selected_data,drop_lst=toad.selection.select(data_tr,target='creditability',empty=0.5,iv=0.05,corr=0.7,return_drop=True,exclude=['type'])\n\nselected_test=data_ts[selected_data.columns]\n\nprint(selected_data.shape)\ndrop_lst

?可以看到,8个特征由于IV值过低被剔除。

toad.quality(dataframe,target):返回每个特征的质量,包括iv、基尼系数和熵。可以帮助我们发现更有用的潜在信息。

quality=toad.quality(data,'creditability')\nquality.head(6)分箱

第一步:分箱

toad.transform.Combiner():可以用来对数值型和类别型变量进行分箱,支持决策树分箱、卡方分箱、最优分箱等。该行代码生成一个Combiner类,这个类有以下方法:combiner().fit(data,y='target',method='chi',min_samples=None,n_bins=None):分箱,支持卡方、决策树、等频和等宽。combiner().set_rules(dict):设置箱号。combiner().transform(data):将特征的值转化为分箱的箱号。

#初始化一个combiner类\ncombiner=toad.transform.Combiner()\n\n#训练数据并指定分箱方法,其它参数可选\ncombiner.fit(selected_data,y='creditability',method='chi',min_samples=0.05,exclude='type')\n\n#以字典形式保存分箱结果\nbins=combiner.export()\n\n#查看每个特征的分箱结果\nprint('status.of.existing.checking.account:',bins['status.of.existing.checking.account'])\nprint('credit.amount:',bins['credit.amount'])\nprint('duration.in.month:',bins['duration.in.month'])

第二步:WOE分箱可视化

toad.plot.badrate_plot(data,target='target',x=None,by=None):画出不同数据集的每一箱的bad_rate图。这里可以是训练集测试集,也可以不同月份的对比。by后面是纵轴。x是需要对比的维度,比如训练集测试集、不同的月份。toad.plot.proportion_plot(datacol):画出一个特征每一箱的比例。

#根据bad_rate图调整分箱\n\n#比如查看duration.in.month这个变量的分箱情况\nadj_bin={'duration.in.month':[9,12,18,33]}\n\nc2=toad.transform.Combiner()\nc2.set_rules(adj_bin)\n\ndata_=pd.concat([data_tr,data_ts],axis=0)\ntemp_data=c2.transform(data_[['duration.in.month','creditability','type']])\n\nfromtoad.plotimportbadrate_plot,proportion_plot\nbadrate_plot(temp_data,target='creditability',x='type',by='duration.in.month')\nproportion_plot(temp_data['duration.in.month'])

?第一张图是训练集和测试集下每一箱对应的坏样本率,第二张图是每一箱的占比情况。可以看到第一张图中的第一箱和第二箱的bad_rate存在倒挂,说明bad_rate不单调,需要进行调整。可以尝试将第一箱和第二箱进行合并。

#假定将第一箱、第二箱合并\nadj_bin={'duration.in.month':[9,18,33]}\nc2.set_rules(adj_bin)\n\ntemp_data=c2.transform(data_[['duration.in.month','creditability','type']])\nbadrate_plot(temp_data,target='creditability',x='type',by='duration.in.month')\n\nadj_bin={'duration.in.month':[9,18,33],'foreign.worker':[['no'],['yes']]}

?调整之后可以看到分箱的bad_rate大致呈现单调的趋势。

toad.transform.WOETransformer():对分箱后的数据进行WOE转化WOETransformer().fit_transform(data,y_true,exclude=None):

#设置分箱号\ncombiner.set_rules(adj_bin)\n\n#将特征的值转化为分箱的箱号。\nbinned_data=combiner.transform(selected_data)\n\n#计算WOE\ntranser=toad.transform.WOETransformer()\n\n#对WOE的值进行转化,映射到原数据集上。对训练集用fit_transform,测试集用transform.\ndata_tr_woe=transer.fit_transform(binned_data,binned_data['creditability'],exclude=['creditability','type'])\ndata_ts_woe=transer.transform(combiner.transform(selected_test))模型选择

toad.selection.stepwise():可以通过向前、向后、双向选择来进行特征选择,使用AIC/BIC/KS/AUC作为选择标准。

final_data=toad.selection.stepwise(data_tr_woe.drop('type',axis=1),target='creditability',direction='both',criterion='aic')\n\nfinal_test=data_ts_woe[final_data.columns]\nprint(final_data.shape)\nprint(final_data.columns)

?可以看到经过模型选择,15个特征减少为8个特征。

Xtr=final_data.drop('creditability',axis=1)\nYtr=final_data['creditability']\nXts=final_test.drop('creditability',axis=1)\nYts=final_test['creditability']\n\nlr=LogisticRegression()\nlr.fit(Xtr,Ytr)模型评估和验证常用的评估指标如KS、F1、AUC

fromtoad.metricsimportKS,F1,AUC\n\nEYtr_proba=lr.predict_proba(Xtr)[:,1]\nEYtr=lr.predict(Xtr)\n\nprint('Trainingerror')\nprint('F1:',F1(EYtr_proba,Ytr))\nprint('KS:',KS(EYtr_proba,Ytr))\nprint('AUC:',AUC(EYtr_proba,Ytr))\n\nEYts_proba=lr.predict_proba(Xts)[:,1]\nEYts=lr.predict(Xts)\n\nprint('\\nTesterror')\nprint('F1:',F1(EYts_proba,Yts))\nprint('KS:',KS(EYts_proba,Yts))\nprint('AUC:',AUC(EYts_proba,Yts))PSI比较训练集和测试集各变量的稳定性。

psi=toad.metrics.PSI(final_data,final_test)\npsi.sort_values(0,ascending=False)#FurthertunetheunstablefeatureifanyKS

tr_bucket=toad.metrics.KS_bucket(EYtr_proba,Ytr,bucket=10,method='quantile')\ntr_bucket分数转换

card=toad.scorecard.ScoreCard(combiner=combiner,transer=transer,C=0.1)\ncard.fit(Xtr,Ytr)\ncard.export(to_frame=True,).head(10)

?可以输出每个变量的得分情况。

?以下参考自Acompletetutorial,对基础版中未提到的部分进行补充。

combiner=toad.transform.Combiner()\ncombiner.fit(data_tr2,y='creditability',method='chi',min_samples=0.05)\ncombiner.export()使用bin_plot()画图对分箱进行调整?使用bin_plot对样本集分箱进行调整,使用bad_rate验证分箱在测试集或者跨时间验证集上的稳定性。

fromtoad.plotimportbin_plot\n\ntransformed=combiner.transform(data_tr2,labels=True)\n#传给bin_plot的数据必须是分箱转化之后的\nbin_plot(transformed,x='duration.in.month',target='creditability')

?柱形图表示每一箱的占比,折线图表示每一箱的坏样本率。一般折线图要呈现出单调的趋势。?再看一个对类别型变量分箱进行调整的例子。对类别型变量进行分箱的时候,易出现某个类别只有好样本/坏样本,这样对计算WOE值造成问题,所以需要将只有好/坏样本的箱进行合并。

#分箱合并\nc2.set_rules({'purpose':[['domesticappliances','retraining','car(used)'],['radio/television'],['furniture/equipment','repairs','business','car(new)'],['education','others']]})\nbin_plot(c2.transform(data_tr2[['purpose','creditability']],labels=True),x='purpose',target='creditability')

总结:Toad库的出现使得评分卡建模越来越傻瓜式,技术是通用的,但是背后的业务理解需要在实践中不断加深理解。评分卡建模的代码基本可以固化成一套,接下来就是根据业务理解去调整模型。总之,任何脱离业务的模型都是空中楼阁,只有带来实际价值才是王道。

github主页:https://github.com/amphibian-dev/toad文档:https://toad.readthedocs.io中文文档:https://toad.readthedocs.io/en/dev/tutorial_chinese.html演示:https://toad.readthedocs.io/en/latest/tutorial.htmlwhl下载地址:https://pypi.org/simple/toad/

【简介】:某创业公司策略分析师,积极上进,努力提升。乾坤未定,你我都是黑马。

【转载说明】:转载请说明出处,谢谢合作!~

toad是什么意思和傻瓜式评分卡建模库Toad使用的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023