评分卡模型转评分
评分卡最终一般都是以分数的形式输出,而不是直接使用逻辑回归模型进行计算。例如对于一个客户最终在逻辑回归模型中的结果是在0-1之间的概率值,而最终的评分卡一般是会将逻辑回归模型的结果转化为对客户的打分分数便于理解和查看,评分越高代表客户的质量越好。
评分卡的分数主要由逻辑回归模型的线性部分转换得来
Socre=offset+factor∗(WX+b)Socre=offset+factor∗(WX+b)Socre=offset+factor∗(WX+b)
其中,offset、factor是待确定参数。而确定offset、factor一般通过设置d、B、k、S四个参数,来间接得到offset和factor
d、B、k、S四个参数的意义如下:
- 假设odds为d时,评分为B
备注:odds是坏、好概率比,即odds=p1−p\text{odds}=\dfrac{p}{1-p}odds=1−pp - odds每缩小k倍时,分数提升S分 ,在设置好d、B、k、S后,就可求得offset和factor. d、B、k、S和offset、factor的关系如下:
factor=−Sln(k)offset=B+Sln(k)∗ln(d)\text{factor} =-\dfrac{S}{\ln(k)} \\[10pt] \text{offset} = B+ \dfrac{S}{\ln(k)} *\ln(d)factor=−ln(k)Soffset=B+ln(k)S∗ln(d)
在确定了offset和factor后,就可以计算模型的基础分和特征分
由于:
Socre=offset+factor∗(WX+b)=offset+factor∗b+∑ifactor∗(wixi)\begin{aligned} \text{Socre}& = \text{offset} + \text{factor}*(WX+b) \\& =\text{offset} +\text{factor}*b+ \sum\limits _{i} \text{factor}*(w_ix_i) \end{aligned}Socre=offset+factor∗(WX+b)=offset+factor∗b+i∑factor∗(wixi)
即可得到基础分BaseScoreBaseScoreBaseScore和每个特征分FetureScoreiFetureScore_iFetureScorei为:
BaseScore=offset+factor∗bFetureScorei=factor∗(wixi)\text{BaseScore} = \text{offset} +\text{factor}*b \\ \text{FetureScore}_i =\text{factor}*(w_ix_i)BaseScore=offset+factor∗bFetureScorei=factor∗(wixi)
模型转评分实例
假设我们已得到逻辑回归模型如下:
p=11+e−(2∗x1+0.5∗x2+6)p = \dfrac{1}{ 1+e ^{-(2*x_1+0.5*x_2+6)}}p=1+e−(2∗x1+0.5∗x2+6)1
其中,x1x_1x1有两种取值,x2x_2x2有三种取值,x1,x2x_1,x_2x1,x2的woe值如下:
现在需要将模型转成评分卡,具体过程如下:
一、设置odd相关参数
设置odd相关参数如下:
d=50,B=600,k=2,S=20
它的意义为:
(1) odds每降低2倍(例如从50:1缩小到25:1),分数提升20分
(2) 当 odds=50:1时,分数是600分
备注:这套d、B、k、S设置是比较常用的设置
二、计算factor和offset
利用B,d,S,k参数计算factor和offset
factor=−Sln(k)=−20ln(2)=−28.8539offset=B−factor∗ln(d)=600+28.8539∗ln(50)=712.8771\text{factor} =-\dfrac{S}{\ln(k)}=-\dfrac{20}{\ln(2)}=-28.8539 \\[10pt] \begin{aligned}\text{offset} =& B - \text{factor}*\ln(d) \\=&600+28.8539*\ln(50) =712.8771 \end{aligned}factor=−ln(k)S=−ln(2)20=−28.8539offset==B−factor∗ln(d)600+28.8539∗ln(50)=712.8771
三、计算BaseScore和FetureScore
- 计算基础分
由基础分的公式,可以算得:
BaseScore=offset+factor∗b=712.8771−28.8539∗6=539.7537\begin{aligned} \text{BaseScore} =& \text{offset} +\text{factor}*b \\=&712.8771-28.8539*6=539.7537 \end{aligned}BaseScore==offset+factor∗b712.8771−28.8539∗6=539.7537 - 计算特征得分
由特征分公式FetureScorei=factor∗(Wi∗xi)=factor∗(Wi∗woei)\small \text{FetureScore}_i =\text{factor}*(W_i*x_i)=\text{factor}*(W_i*woe_i)FetureScorei=factor∗(Wi∗xi)=factor∗(Wi∗woei)算得各个特征得分如下:
四、最终的评分卡表
综合上面计算的基础分和特征得分,就可得到最后的评分卡如下
模型转评分代码实现
importnumpyasnpimportpandasaspd features=['x1','x2']# 模型的变量w=np.array([2,0.5])# 模型的权重b=6# 模型的阈值df=pd.DataFrame({'feature':['x1','x1','x2','x2','x2'],# 变量名'value':['女','男','已婚','未婚','离异'],# 变量取值'woe':[-0.1,0.8,-0.2,0.5,1.2]# 变量取值对应的woe})foriinrange(len(features)):# 将模型权重拼接到每个变量中feature=features[i]# 当前变量名df.loc[df['feature']==feature,'w']=w[i]# 变量的权重d=50# 当odds为50:1时,B=600# 分数为600k=2# odds每缩小2倍S=20# 分数提升20分factor=-S/(np.log(k))# 计算factoroffset=B-factor*np.log(d)# 计算offsetdf['score']=factor*df['w']*df['woe']# 计算特征得分baseScore=offset+factor*b# 计算基础分print('\n特征得分:\n',df)# 打印特征得分print('\n基础分:',baseScore)# 打印基础分参考文章:
https://www.bbbdata.com/text/67