toad库进行分箱操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、toad是什么?

  • Toad 是专为工业界模型开发设计的Python工具包,特别针对评分卡的开发
  • Toad 的功能覆盖了建模全流程,从 EDA、特征工程、特征筛选 到 模型验证和评分卡转化
  • Toad 的主要功能极大简化了建模中最重要最费时的流程,即特征筛选和分箱。

二、使用步骤

1.初始的分箱结果

代码如下:

# - 通常使用双变量图(Bivar图 Bivariate graph)来评价分箱结果。注意,信贷风险分析中Bivar图,纵轴固定为负样本占比

import matplotlib.pyplot as plt
%matplotlib inline
from toad.plot import bin_plot

data = model_data.iloc[:5000,:]

#初始的分箱结果
def get_bins(data,target):
    # 为了节约时间,只选取5000条数据做实验
    data = data.iloc[:5000,:]
    # 初始化一个combiner类
    combiner = toad.transform.Combiner()
    # 训练数据并指定分箱方法,其它参数可选  # min_samples: 每箱至少包含样本量,可以是数字或者占比
    combiner.fit(data,y=target, method='chi', min_samples = 0.05)
    # 以字典形式保存分箱结果
    bins = combiner.export()
     #每个特征分箱原始个数,#每个特征分箱个数据值,正确的应该是len(v)+2,一般情况下这个值都会过大,所以直接携程len(v)
    nbins = []
    for v in bins.values():
        nbins.append(len(v))
    return nbins

nbins = get_bins(model_data, 'SeriousDlqin2yrs')

2.调整后的分箱结果

代码如下:


def get_new_bins(data,target,nbins):
    '''
    # 通过画出分箱图形调整分箱个数,并返回新的分箱
    '''
    #调整后特征分箱个数
    nbins = [4, 6, 3, 3, 2, 5, 4, 3, 2, 2]
    bins = {}
    for i,c in enumerate(data.columns[1:].to_list()):
        c2 = toad.transform.Combiner()
        c2.fit(data[[c,target]],y=target, method='chi',n_bins=nbins[i])
        bins.update(c2.export())
         #传给bin_plot的数据必须是分箱转化之后的
        transformed = c2.transform(data[[c,target]],labels=True)
        #上图中柱形图表示每一箱的占比,折线图表示每一箱的坏样本率。一般折线图要呈现出单调的趋势
        # - 可以通过调整箱数实现单调趋势
        bin_plot(transformed,x=c,target=target)
    return bins

new_bins = get_new_bins(data, 'SeriousDlqin2yrs', nbins)

#获取woe

def get_woe(data, new_bins, target ):
    # 使用toad计算woe
    X_train,X_test,Y_train,Y_test = train_test_split(data.drop(target,axis=1),data[target],test_size=0.25,random_state=450)

    data_train = pd.concat([X_train,Y_train],axis=1)
    #增加一列区分训练/测试的特征
    data_train['type'] = 'train'

    data_test = pd.concat([X_test,Y_test],axis=1)
    data_test['type'] = 'test'

    c2 = toad.transform.Combiner()
    #把新的分箱规则设置进去
    c2.set_rules(new_bins)

    data_ = pd.concat([data_train,data_test],axis = 0)
    
    #分成训练集测试集,根据图形观察是否需要调整分箱   
    for c in data_.columns[:-2]:
        #分箱
        temp_data = c2.transform(data_[[c,target,'type']])
        from toad.plot import badrate_plot, proportion_plot
        badrate_plot(temp_data, target = target, x = 'type', by = c) 
        #绘制每一箱占比情况图,根据情况继续调整分箱结果
        proportion_plot(temp_data[c])

    #将特征的值转化为分箱的箱号。
    binned_data = c2.transform(data_train)

    #计算WOE
    transer = toad.transform.WOETransformer()
    #对WOE的值进行转化,映射到原数据集上。对训练集用fit_transform,测试集用transform.
    data_tr_woe = transer.fit_transform(binned_data, binned_data[target], exclude=[target,'type'])
    return data_tr_woe


data_tr_woe = get_woe(data, new_bins, 'SeriousDlqin2yrs')  

    
    
    


总结

toad库的分箱更加简便

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunnuan01

一起学习,共同进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值