本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
在构建评分卡时,往往希望能够将分数控制在一定的范围,以达到业务需求
本文讲解如何对构建好的评分卡进行分数设置、分数范围的设置,以及具体代码实现
通过本文,可以了解如何设置评分卡的评分,以及需要注意的相关事项
本节讲解如何设置评分的参数,以及如何指定评分的范围
评分卡-评分参数的设置方法
评分卡在模型转评分时,主要由以下四个参数控制:
# 模型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