Python随笔scorecardpy笔记
⽬录
scorecardpy笔记
⾸次编辑:2020-08-06
编辑⼈:Cairne
简介
随着互联⽹在传统⾦融和电⼦商务领域的不断渗透,风控+互联⽹的融合也对传统的风控提出了新的要求和挑战。以评分卡为例,互联⽹形态下的评分卡需要⾯临更多维数据、更实时数据、更异常数据的挑战。因此,懂得互联⽹业务下的风控评分卡已经成为互联⽹风控从业⼈员的新要求。
以下内容翻译⾃参考2 ⽤于个⼈学习。
Python中信贷评分卡中常⽤的两个库有“scorecardpy”和“Toad”。其中scorecardpy是由谢⼠晨博⼠开发,该软件包是R软件包评分卡的python版本。它的⽬标是通过提供⼀些常见任务的功能,使传统信⽤风险计分卡模型的开发更加轻松有效。该包的功能及对应的函数如下:
· 数据划分(split_df)
· 变量选择(iv, var_filter)
· 变量按权重(woe)分箱(woebin,woebin_plot, woebin_adj, woebin_ply)
· 评分转换(scorecard, scorecard_ply)
· 模型评估(perf_eva,perf_psi)
在命令台中使⽤以下代码,从中下载scorecardpy的最新发布版本:
四年级数学计算题# python2
pip install scorecardpy
# python3
pip3 install scorecardpy
也可以使⽤以下指令从上下载scorecardpy的最新版本:
# python2
pip install git+git:///shichenxie/scorecardpy.git
# python3
pip3 install git+git:///shichenxie/scorecardpy.git劳动起源说
注意,以上安装需要Pandas版本⾼于(包括)0.25.0,否则下载会失败!
政治新闻手抄报
运⾏⽰例
以下实例向您展⽰了如何开发⼀个通⽤的信⽤风险评分卡项⽬:
# Traditional Credit Scoring Using Logistic Regression
# 基于逻辑回归的传统信⽤回归
import scorecardpy as sc
# data prepare ------
阳光依然灿烂
# 数据准备 -----
# load germancredit data
# 加载germancredit(德国信贷)数据
dat = sc.germancredit()
# filter variable via missing rate, iv, identical value rate
# 通过数据缺失率、IV值、相同值来过滤变量
# 通过数据缺失率、IV值、相同值来过滤变量
dt_s = sc.var_filter(dat, y="creditability")
# breaking dt into train and test
# 将DataFrame分成训练集和测试集
train, test = sc.split_df(dt_s,'creditability').values()
# woe binning ------
# 根据woe值进⾏分箱
bins = sc.woebin(dt_s, y="creditability")
# sc.woebin_plot(bins)
# binning adjustment
# 分箱调整
# # adjust breaks interactively
# # 有交互地进⾏重组调整
# breaks_adj = sc.woebin_adj(dt_s, "creditability", bins)
# # or specify breaks manually
# # 或者⼿动进⾏重组调整
breaks_adj ={
'ars':[26,35,40],
'uarantors':["none","co-applicant%,%guarantor"] }
bins_adj = sc.woebin(dt_s, y="creditability", breaks_list=breaks_adj) # converting train and test into woe values
# 将测试集和训练集转换为woe值
train_woe = sc.woebin_ply(train, bins_adj)
test_woe = sc.woebin_ply(test, bins_adj)
y_train = train_woe.loc[:,'creditability']
X_train = train_woe.loc[:,lumns !='creditability']
y_test = test_woe.loc[:,'creditability']
X_test = test_woe.loc[:,lumns !='creditability']
# logistic regression ------
# 逻辑回归 -----
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(penalty='l1', C=0.9, solver='saga', n_jobs=-1) lr.fit(X_train, y_train)
# lr.coef_
# lr.intercept_
# predicted proability
# 可能性预测
train_pred = lr.predict_proba(X_train)[:,1]
test_pred = lr.predict_proba(X_test)[:,1]
# performance ks & roc ------
# ks 和 roc 的性能表现 -----
train_perf = sc.perf_eva(y_train, train_pred, title ="train")
test_perf = sc.perf_eva(y_test, test_pred, title ="test")
# score ------
# 得分 -----
card = sc.scorecard(bins_adj, lr, lumns)
# credit score
# 信⽤得分
train_score = sc.scorecard_ply(train, card, print_step=0)
test_score = sc.scorecard_ply(test, card, print_step=0)
# psi
#
sc.perf_psi(
score ={'train':train_score,'test':test_score},
label ={'train':y_train,'test':y_test}
label ={'train':y_train,'test':y_test}
)
详细分析各函数
描述⼀组数据,该数据组使⽤⼀组属性来定义⼀个债务⼈的信⽤风险
参数⽆
返回值DataFrame
sc.var_fillter(…)
工业风(dt, y, x=None, iv_limit=0.02, missing_limit=0.95, identical_limit=0.95, var_rm=None, var_kp=None, return_rm_reason=Fal, positive=‘bad|1’)
描述此函数根据指定条件(例如信息值,丢失率,相同值率)过滤变量。
dt具有x(预测变量/特征)和y(响应/标签)变量的数据帧。
y y变量的名称。
X X变量的名称。默认值为None。如果X为None,则除y外的所有变量都计为X变量。
iv_limit被保留变量的iv值最⼩值,默认值为0.02。
missing_limit保留变量丢失值最⼤值,默认值为0.95。
identical_limit保留变量的重复率最⼤值(不计算空值),默认值为0.95。
var_rm强制删除的变量名称,默认值为NULL。
var_kp强制保留的变量名称,默认值为NULL。
return_rm_reason返回删除原因,默认值为Fal。
positive好类(正⾯类)的值,默认为“bad | 1”
返回值1DataFrame(具有y和选定的x变量的数据表)
返回值2Dict(上述DataFrame再附加删除原因),return_rm_reason=True时使⽤
sc.split_df(…)
(dt, y=None, ratio=0.7, ed=186)
描述将⼀个数据集分割为训练集和测试集。
dt数据帧
y y变量的名称,默认为NULL。 如果提供了输⼊数据,则将根据预测变量y进⾏拆分。
ratio⼀个数字值,它指⽰拆分的⼀部分占总数据数量的⽐例。默认值为0.7,必须⼩于1。
ed随机种⼦,默认值为186。
返回值Dict(包括训练集和测试集)
woebin(…)
(dt, y, x=None,
自制钥匙扣var_skip=None, breaks_list=None, special_values=None,stop_limit=0.1, count_distr_limit=0.05, bin_num_limit=8,
positive=“bad|1”, no_cores=None, print_step=0, method=“tree”,ignore_const_cols=True, ignore_datetime_cols=True,check_cate_num=True, replace_blank=True,save_breaks_list=None, **kwargs,
#min_perc_fine_bin=0.02, min_perc_coar_bin=0.05, max_num_bin=8)
描述
“ woebin”使⽤包括“树状分割”或“卡⽅合并”在内的⽅法为“数值”,“因⼦”和“分类变量”⽣成最佳分箱。如
果提供了breaks_list或special_values,woebin还可以⾃定义断点。
备注
默认的woe定义为。 如果您更喜欢,请将参数positive 设置为负值,例如“ 0”或“ good”。
二三事
如果在计算woe时存在零值,则零将被0.99取代以使woe不出现⽆穷值。
dt 具有x(预测变量/特征)和y(响应/标签)变量的数据帧。
y y变量的名称。
X X变量的名称。默认值为NULL。,如果X为NULL,则除y外的所有变量都计为X变量。
var_skip 跳过合并的变量名称, 默认为None。
breaks_list 断点列表,默认为None。 如果不是None,则变量分箱将基于提供的break_list 。
special_values 被放在单独分箱中的特殊值,默认为None。
count_distr_limit
分箱最⼩箱所占数据百分⽐,接受范围:0.01-0.2, 默认值为0.05。
stop_limit
当信息值增益⽐⼩于stop_limit时停⽌合并分割,或者当卡⽅的最⼩值⼩于"qchisq(1-stoplimit,1)"(Rlang中的卡⽅函数)时停⽌
合并。 接受范围:0-0.5,默认值为0.1。
bin_num_limit 合并的最⼤数量。
positive
正类的值,默认为“ bad | 1”。
no_cores
⽤于并⾏计算的CPU内核数, 默认值为None。 如果no_cores 为None,且x变量的长度⼩于10,则设置为1;如果x变量的
长度⼤于或等于10,则设置为全部CPU。
print_step
如果print_step>0,则按每次迭代打印变量名称。 如果print_step=0或no_cores>1,则不打印任何消息。⾮负整数。
简易早餐
默认值为1。
method 最佳分箱⽅法,应为“tree(树状分割)”或“ chimerge(卡⽅合并)”。 默认为“tree”。
ignore_const_cols 逻辑,⽤于忽略全为常量的列。 默认为True。ignore_datetime_cols 逻辑,⽤于忽略全为时间的列。 默认为True。
check_cate_num 逻辑,检查类别列中唯⼀值的数量是否⼤于50。如果有太多唯⼀值,可能使分箱过程变慢。 默认为True。
replace_blank 逻辑,⽤None替换空值,默认为True。save_breaks_list
保存断点列表的⽂件名。 默认为None。返回值
Dictionary(最佳或定制的数据帧分箱)。
woebin_ply(…)
(dt, bins, no_cores=None, print_step=0, replace_blank=True, **kwargs)
描述woebin_ply根据woebin⽣成的合并信息将原始输⼊数据转换为woe值。
df ⼀个数据帧(DataFrame)bins
从woebin⽣成的分箱信息。
ln Distr Good i Distr Bad i
ln Distr Bad i Distr Good i
描述woebin_ply根据woebin⽣成的合并信息将原始输⼊数据转换为woe值。
⽤于并⾏计算的CPU内核数, 默认值为None。 如果no_cores为None,且x变量的长度⼩于10,则设置为1;如果x变量的长度⼤于no_cores
或等于10,则设置为全部CPU。
如果print_step>0,则按每次迭代打印变量名称。 如果print_step=0或no_cores>1,则不打印任何消息。⾮负整数。 默认值为print_step
1。
replace_blank逻辑,⽤None替换空值,默认为True。
返回值DataFrame(存放每个变量woe值的数据帧)。
sc.perf_eva(…)
(label, pred, title=None, groupnum=None, plot_type=[“ks”, “roc”], show_plot=True, positive=“bad|1”, ed=186)描述perf_eva根据提供的标签和预测的概率值提供性能评估,如科尔莫⼽洛夫-斯⽶尔诺(ks)、ROC、提升和精度召回曲线。
label样本标签值,0代表好,1代表坏。
pred预测的概率或分数。
title plot 的标题,默认为performance。
groupnum计算KS时的组号,表⽰样本数量。默认值为NULL。
plot_type performance plot的类型,例如“ ks”,“ lift”,“ roc”,“pr”。 默认值为c(“ ks”,“ roc”)。
show_plot逻辑值, 表⽰是否显⽰plot。默认为TRUE。
positive好类(正⾯类)的值,默认为“bad | 1”
ed随机种⼦,默认值为186。
返回值Dict (ks, auc, gini 值, figure 对象)
sc.scorecard(…)
(bins, model, xcolumns, points0=600, odds0=1/19, pdo=50, bapoints_eq0=Fal)
描述scorecard根据woebin和LogisticRegression的结果创建记分卡sklearn.linear模型。
bins分箱由woebin函数所⽣成的信息。
model对象逻辑回归模型。
points0⽬标点,默认值为600。
odds0⽬标odds,默认值为1/19。odds=p/(1-p)。p是分箱中好样本的⽐例
pdo odds上升两倍后,总分数的上升值。
bapoints_eq0逻辑,如果为真,则基点将平均分配给每个变量。默认值为FALSE。
返回值DataFrame(评分卡的数据帧)
sc.scorecard_ply(…)
(dt, card, only_total_score=True, print_step=0, replace_blank_na=True, var_kp = None)
描述scorecard_ply使⽤scorecard的结果计算信⽤评分。
dt源数据
card由scorecard⽣成的评分卡
only_total_score逻辑,如果为真,则输出仅包括信⽤总分;如果为假则输出总分和每个变量的信⽤评分。默认值为TRUE。