评分卡-教程

【答疑】如何将评分设置在0-100之间

作者 : 老饼 发表日期 : 2023-01-19 14:50:02 更新日期 : 2025-03-05 15:26:03
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



在构建评分卡时,往往希望能够将分数控制在一定的范围,以达到业务需求

本文讲解如何对构建好的评分卡进行分数设置、分数范围的设置,以及具体代码实现

通过本文,可以了解如何设置评分卡的评分,以及需要注意的相关事项





     01.评分卡-分数的控制     





本节讲解如何设置评分的参数,以及如何指定评分的范围




       评分卡-评分参数的设置方法      


评分卡在模型转评分时,主要由以下四个参数控制:
        # 模型odds为d         
      # 评分为B               
        # 分数提升S分        
          # odds每降k倍         
bbbrisk默认使用上述参数值来生成评分卡表,它是一般文献、软件中使用的默认参数
如果希望使用其它参数,可以在构建完评分卡后,将卡表以指定的参数来重新生成即可
具体代码示例如下:
import bbbrisk as br

#加载数据                                                                     
data = br.datasets.load_bloan()                                                # 加载数据
x    = data.iloc[:,:-1]                                                        # 变量数据
y    = data['is_bad']                                                          # 标签数据

# 构建评分卡
bin_sets   = br.bins.batch.autoBins(x, y,enum_var=['city','marital'])          # 自动分箱,如果有枚举变量,必须指出哪些是枚举变量
model,card = br.model.scoreCard(x,y,bin_sets,train_param={'random_state':0})   # 构建评分卡,为了使结果能重现,笔者设置了固定的随机种子 
card.build(d=50,B=100,k=2,S=10)                                                # 用指定参数来生成评分卡
score      = card.predict(x[card.var])                                         # 用评分卡进行评分
print('修改后的d,B,k,S=',card.d,',',card.B,',',card.k,',',card.S)              # 打印卡表所用的d,B,k,S
br.report.draw_score_disb(score,y,bin_step=10,figsize=(14, 4))                 # 分数分布
运行结果如下: 
  
 
从分数分布图可以看到,评分卡已经使用了新的参数来生成评分卡








     将评分设置在0-100之间-代码实现示例     


由于在国内的业务中,往往喜欢将评分设置在0-100之间
在bbbrisk中,可以使用build_with_range来设置评分的范围
 具体代码示例如下:
import bbbrisk as br

#加载数据                                                                     
data = br.datasets.load_bloan()                                                # 加载数据
x = data.iloc[:,:-1]                                                           # 变量数据
y = data['is_bad']                                                             # 标签数据

# 构建评分卡
bin_sets   = br.bins.batch.autoBins(x, y,enum_var=['city','marital'])          # 自动分箱,如果有枚举变量,必须指出哪些是枚举变量
model,card = br.model.scoreCard(x,y,bin_sets,train_param={'random_state':0})   # 构建评分卡,为了使结果能重现,笔者设置了固定的随机种子 
card.build_with_range(0.1,99.9,d=50,k=2)                                       # 用指定分数范围来生成评分卡
score      = card.predict(x[card.var])                                         # 用评分卡进行评分
print('当前的d,B,k,S=',card.d,',',card.B,',',card.k,',',card.S)                # 打印卡表所用的d,B,k,S
print('评分样本中的最小最大值:',min(score),',',max(score))                     # 打印样本数据中,评分的范围
运行结果如下: 
   
需要注意的是,由于计算过程会产生数值问题,最终结果可能不会严格地落在范围[a,b]中
 例如范围设为[0,100],但结果可能会出现[-0.000001,100.00001]的情况
因此,需要把范围稍微缩小一些,例如在这里取为[0.1,99.9],就是为了保障不超出范围边界







好了,以上就是如何在bbbrisk中设置分数的方法了~









 End 






联系老饼