最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python自動(dòng)分箱,計(jì)算woe,iv的實(shí)例代碼

 更新時(shí)間:2019年11月22日 09:55:32   作者:kidxu  
今天小編就為大家分享一篇python自動(dòng)分箱,計(jì)算woe,iv的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

筆者之前用R開發(fā)評(píng)分卡時(shí),需要進(jìn)行分箱計(jì)算woe及iv值,采用的R包是smbinning,它可以自動(dòng)進(jìn)行分箱。近期換用python開發(fā), 也想實(shí)現(xiàn)自動(dòng)分箱功能,找到了一個(gè)woe包,地址https://pypi.org/project/woe/,可以直接 pip install woe安裝。

由于此woe包官網(wǎng)介紹及給的例子不是很好理解,關(guān)于每個(gè)函數(shù)的使用也沒有很詳細(xì)的說明,經(jīng)過一番仔細(xì)探究后以此文記錄一下該woe包的使用及其計(jì)算原理。

例子

官方給的例子不是很好理解,以下是我寫的一個(gè)使用示例。以此例來說明各主要函數(shù)的使用方法。計(jì)算woe的各相關(guān)函數(shù)主要在feature_process.py中定義。

import woe.feature_process as fp
import woe.eval as eval
 
#%% woe分箱, iv and transform
data_woe = data #用于存儲(chǔ)所有數(shù)據(jù)的woe值
civ_list = []
n_positive = sum(data['target'])
n_negtive = len(data) - n_positive
for column in list(data.columns[1:]):
 if data[column].dtypes == 'object':
 civ = fp.proc_woe_discrete(data, column, n_positive, n_negtive, 0.05*len(data), alpha=0.05)
 else:  
 civ = fp.proc_woe_continuous(data, column, n_positive, n_negtive, 0.05*len(data), alpha=0.05)
 civ_list.append(civ)
 data_woe[column] = fp.woe_trans(data[column], civ)
 
civ_df = eval.eval_feature_detail(civ_list,'output_feature_detail_0315.csv')
#刪除iv值過小的變量
iv_thre = 0.001
iv = civ_df[['var_name','iv']].drop_duplicates()
x_columns = iv.var_name[iv.iv > iv_thre]

計(jì)算分箱,woe,iv

核心函數(shù)主要是freature_process.proc_woe_discrete()與freature_process.proc_woe_continuous(),分別用于計(jì)算連續(xù)變量與離散變量的woe。它們的輸入形式相同:

proc_woe_discrete(df,var,global_bt,global_gt,min_sample,alpha=0.01)

proc_woe_continuous(df,var,global_bt,global_gt,min_sample,alpha=0.01)

輸入:

df: DataFrame,要計(jì)算woe的數(shù)據(jù),必須包含'target'變量,且變量取值為{0,1}

var:要計(jì)算woe的變量名

global_bt:全局變量bad total。df的正樣本數(shù)量

global_gt:全局變量good total。df的負(fù)樣本數(shù)量

min_sample:指定每個(gè)bin中最小樣本量,一般設(shè)為樣本總量的5%。

alpha:用于自動(dòng)計(jì)算分箱時(shí)的一個(gè)標(biāo)準(zhǔn),默認(rèn)0.01.如果iv_劃分>iv_不劃分*(1+alpha)則劃分。

輸出:一個(gè)自定義的InfoValue類的object,包含了分箱的一切結(jié)果信息。

該類定義見以下一段代碼。

class InfoValue(object):
 '''
 InfoValue Class
 '''
 def __init__(self):
 self.var_name = []
 self.split_list = []
 self.iv = 0
 self.woe_list = []
 self.iv_list = []
 self.is_discrete = 0
 self.sub_total_sample_num = []
 self.positive_sample_num = []
 self.negative_sample_num = []
 self.sub_total_num_percentage = []
 self.positive_rate_in_sub_total = []
 self.negative_rate_in_sub_total = []
 
 def init(self,civ):
 self.var_name = civ.var_name
 self.split_list = civ.split_list
 self.iv = civ.iv
 self.woe_list = civ.woe_list
 self.iv_list = civ.iv_list
 self.is_discrete = civ.is_discrete
 self.sub_total_sample_num = civ.sub_total_sample_num
 self.positive_sample_num = civ.positive_sample_num
 self.negative_sample_num = civ.negative_sample_num
 self.sub_total_num_percentage = civ.sub_total_num_percentage
 self.positive_rate_in_sub_total = civ.positive_rate_in_sub_total
 self.negative_rate_in_sub_total = civ.negative_rate_in_sub_total

打印分箱結(jié)果

eval.eval_feature_detail(Info_Value_list,out_path=False)

輸入:

Info_Value_list:存儲(chǔ)各變量分箱結(jié)果(proc_woe_continuous/discrete的返回值)的List.

out_path:指定的分箱結(jié)果存儲(chǔ)路徑,輸出為csv文件

輸出:

各變量分箱結(jié)果的DataFrame。各列分別包含如下信息:

var_name 變量名
split_list 劃分區(qū)間
sub_total_sample_num 該區(qū)間總樣本數(shù)
positive_sample_num 該區(qū)間正樣本數(shù)
negative_sample_num 該區(qū)間負(fù)樣本數(shù)
sub_total_num_percentage 該區(qū)間總占比
positive_rate_in_sub_total 該區(qū)間正樣本占總正樣本比例
woe_list woe
iv_list 該區(qū)間iv
iv

該變量iv(各區(qū)間iv之和)

輸出結(jié)果一個(gè)示例(截取部分):

woe轉(zhuǎn)換

得到分箱及woe,iv結(jié)果后,對原數(shù)據(jù)進(jìn)行woe轉(zhuǎn)換,主要用以下函數(shù)

woe_trans(dvar,civ): replace the var value with the given woe value

輸入:

dvar: 要轉(zhuǎn)換的變量,Series

civ: proc_woe_discrete或proc_woe_discrete輸出的分箱woe結(jié)果,自定義的InfoValue類

輸出:

var: woe轉(zhuǎn)換后的變量,Series

分箱原理

該包中對變量進(jìn)行分箱的原理類似于二叉決策樹,只是決定如何劃分的目標(biāo)函數(shù)是iv值。

1)連續(xù)變量分箱

首先簡要描述分箱主要思想:

1.初始化數(shù)據(jù)集D =D0為全量數(shù)據(jù)。轉(zhuǎn)步驟2

2.對于D,將數(shù)據(jù)按從小到大排序并按數(shù)量等分為10份,記錄各劃分點(diǎn)。計(jì)算不進(jìn)行仍何劃分時(shí)的iv0,轉(zhuǎn)步驟3.

3.遍歷各劃分點(diǎn),計(jì)算利用各點(diǎn)進(jìn)行二分時(shí)的iv。

如果最大iv>iv0*(1+alpha)(用戶給定,默認(rèn)0.01): 則進(jìn)行劃分,且最大iv對應(yīng)的即確定為此次劃分點(diǎn)。它將D劃分為左右兩個(gè)結(jié)點(diǎn),數(shù)據(jù)集分別為DL, DR.轉(zhuǎn)步驟4.

否則:停止。

4.分別令D=DL,D=DR,重復(fù)步驟2.

為了便于理解,上面簡化了一些條件。實(shí)際劃分時(shí)還設(shè)計(jì)到一些限制條件,如不滿足會(huì)進(jìn)行區(qū)間合并。

主要限制條件有以下2個(gè):

a.每個(gè)bin的數(shù)量占比>min_sample(用戶給定)

b.每個(gè)bin的target取值個(gè)數(shù)>1,即每個(gè)bin必須同時(shí)包含正負(fù)樣本。

2)連續(xù)變量分箱

對于離散變量分箱后續(xù)補(bǔ)充 to be continued...

以上這篇python自動(dòng)分箱,計(jì)算woe,iv的實(shí)例代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python爬蟲實(shí)例——爬取美團(tuán)美食數(shù)據(jù)

    Python爬蟲實(shí)例——爬取美團(tuán)美食數(shù)據(jù)

    這篇文章主要介紹了Python爬蟲如何爬取美團(tuán)美食數(shù)據(jù),文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python的psutil模塊詳解

    Python的psutil模塊詳解

    psutil是一個(gè)跨平臺(tái)庫,能夠輕松實(shí)現(xiàn)獲取系統(tǒng)運(yùn)行的進(jìn)程和系統(tǒng)利用率(包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等)信息,需要的朋友可以參考下
    2023-05-05
  • 如何使用Python發(fā)送HTML格式的郵件

    如何使用Python發(fā)送HTML格式的郵件

    這篇文章主要介紹了如何使用Python發(fā)送HTML格式的郵件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python?虛擬機(jī)字典dict內(nèi)存優(yōu)化方法解析

    Python?虛擬機(jī)字典dict內(nèi)存優(yōu)化方法解析

    這篇文章主要為大家介紹了Python?虛擬機(jī)字典dict內(nèi)存優(yōu)化方法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Python中的shutil標(biāo)準(zhǔn)庫用法解析

    Python中的shutil標(biāo)準(zhǔn)庫用法解析

    這篇文章主要介紹了Python中的shutil標(biāo)準(zhǔn)庫用法解析,shutil模塊提供了許多關(guān)于文件和文件集合的高級(jí)操作,特別提供了支持文件復(fù)制和刪除的功能,需要的朋友可以參考下
    2023-09-09
  • Python?Opencv基于透視變換的圖像矯正

    Python?Opencv基于透視變換的圖像矯正

    這篇文章主要為大家詳細(xì)介紹了Python?Opencv基于透視變換的圖像矯正,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 基于python實(shí)現(xiàn)坦克大戰(zhàn)游戲

    基于python實(shí)現(xiàn)坦克大戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)坦克大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • pandas創(chuàng)建新Dataframe并添加多行的實(shí)例

    pandas創(chuàng)建新Dataframe并添加多行的實(shí)例

    下面小編就為大家分享一篇pandas創(chuàng)建新Dataframe并添加多行的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python正則表達(dá)式中flags參數(shù)的實(shí)例詳解

    Python正則表達(dá)式中flags參數(shù)的實(shí)例詳解

    正則表達(dá)式是一個(gè)很強(qiáng)大的字符串處理工具,幾乎任何關(guān)于字符串的操作都可以使用正則表達(dá)式來完成,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式中flags參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Python Scrapy爬蟲框架使用示例淺析

    Python Scrapy爬蟲框架使用示例淺析

    Scrapy爬蟲框架可以實(shí)現(xiàn)多線程爬取目標(biāo)內(nèi)容,簡化代碼邏輯,提高開發(fā)效率,這篇文章主要介紹了Python Scrapy爬蟲框架的使用示例,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05

最新評(píng)論

昌吉市| 新化县| 惠水县| 普宁市| 旬阳县| 平陆县| 开化县| 赤壁市| 谷城县| 乐安县| 得荣县| 山丹县| 白银市| 普兰店市| 蓬莱市| 高密市| 淮阳县| 清远市| 西吉县| 田阳县| 兴化市| 朝阳区| 文昌市| 辽源市| 合作市| 阿克陶县| 汪清县| 温宿县| 渑池县| 饶河县| 牟定县| 张家港市| 丹凤县| 溧阳市| 新兴县| 五寨县| 双峰县| 札达县| 宝清县| 萍乡市| 防城港市|