平平无奇我真棒!!!
toad包里的scorecard能自动将概率转为评分卡,想学习toad的童靴,可以参见:toad使用教程。
概率转评分卡,并将评分转到希望的区间内(比如[300,1000]),主要是调整scorecard内的以下4个参数:
重点:scorecard支持评分卡card传入
step:
step1:先用scorecard拟合一次评分卡
(combiner传入训练好的 toad.Combiner 对象,transer传入先前训练的 toad.WOETransformer 对象)
from toad.scorecard import ScoreCard
card = ScoreCard(combiner=combiner,
transer=t,
C=0.1,
class_weight='balanced',
base_score=600,
base_odds=1,
pdo=220,
rate=2)
card.fit(x,y)
card1 = card.export(to_frame=True)
step2: 再将拟合出的评分卡四舍五入
# 自定义转card整数的函数,并包装成scordcard函数需要的字典格式
def dict_type(card1):
card1.score=card1.score.round()
card1.value.fillna('nan',inplace=True)
namelist=list(set(card1.name))
myvalue=[]
for var in namelist:
ind_loc=card1.name==var
value_dict = dict(zip(card1.value.loc[ind_loc],card1.score.loc[ind_loc]))
myvalue=myvalue+[value_dict]
big_dict = dict(zip(namelist,myvalue))
return big_dict
# card2是四舍五入的新卡
card2 = dict_type(card1)
# 重新拟合card
card = ScoreCard(combiner=combiner,
transer=t,
card = card2,
C=0.1,
class_weight='balanced',
base_score=600,
base_odds=1,
pdo=220,
rate=2)
# 将评分卡结果导出并保存
final_card = card.export(to_frame=True)
final_card.head()
final_card.to_csv('output//final_card.csv',index=None)
step3:对样本进行预测
final_score=pd.DataFrame(card.predict(data),index=data.index,columns=["score"])
final_score.to_excel("output//final_score.xlsx")
final_score.describe() #最终评分描述性统计预览
# 我的final_score评分卡就变为整数了。
score
count 52225.000000
mean 687.702020
std 99.094676
min 348.000000
25% 632.000000
50% 704.000000
75% 760.000000
max 988.000000