评分卡生成

模型建立以后得到的log(odds)值是建模样本的好/坏比的对数,分值可以为负值,使得分值的可解读性很差,为了使得评分的结果更容易理解,更加具有实用性,我们希望看到评分卡的样子,通常对变量的特征值进行线性比例变换,并加上一个偏移量,公式如下:

Score = factor * log(odds) + offset
= factor (a * woe + b) offset

其中,比例因子factor和偏移量offset可以通过以下行业规则确定:

  • 好:坏 = 20:1 时,评分刻度为600;
  • 评分每增减20分,好坏比增加一倍。

    代码如下:

    def make_scorecard(formular,woe,basescore=600.0,base_odds=50.0/1.0,pdo=50.0):
    """
    一般行业规则,一般设定当odds为50时,score为600
    Odds翻倍时,score+20
    score = -(woe*b +a/n)*factor + offset/n
    factor = pdo/np.log(2)
    offset = basescore - factor*np.log(base_odds)
    
    basescore = float(600)
    base_odds = 50.0/1.0
    pdo = float(50)
     #计算所需要的参数
       """  
    
    a = formular[formular[u"参数"] == "Intercept"].ix[0,u"估计值"]
    formular = formular.iloc[1:,:]
    n = float(len(formular))
    factor = pdo/np.log(2)
    offset = basescore - factor*np.log(base_odds)
    
    #生成评分卡
    
    scorecard = pd.DataFrame()
    for i in formular[u"参数"]:
        woe_frame = woe[woe['var_name'] == i][['var_name','interval','min','max','PctRec','bad_rate','WOE']]
        beta_i = formular[formular[u"参数"] == i][u"估计值"].iloc[0]
        #woe_frame['score'] = woe_frame['WOE'].apply(lambda woe : offset/n - factor*(a/n-np.abs(beta_i)*woe))
        woe_frame['score'] = woe_frame['WOE'].apply(lambda woe : offset/n - factor*(a/n+beta_i*woe))
        scorecard = pd.concat((scorecard,woe_frame),axis=0)
    
    return scorecard

[1]参考资料:《SAS开发经典案例解析》(杨驰然)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值