最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

woe_iv原理和python代碼建模

2021-05-24 15:59 作者:python風控模型  | 我要投稿

?1.自變量進行篩選

IV的全稱是Information?Value,中文意思是信息價值,或者信息量。

我們在用邏輯回歸、決策樹等模型方法構建分類模型時,經常需要對自變量進行篩選。比如我們有200個候選自變量,通常情況下,不會直接把200個變量直接放到模型中去進行擬合訓練,而是會用一些方法,從這200個自變量中挑選一些出來,放進模型,形成入模變量列表。那么我們怎么去挑選入模變量呢?

挑選入模變量過程是個比較復雜的過程,需要考慮的因素很多,比如:變量的預測能力,變量之間的相關性,變量的簡單性(容易生成和使用),變量的強壯性(不容易被繞過),變量在業(yè)務上的可解釋性(被挑戰(zhàn)時可以解釋的通)等等。但是,其中最主要和最直接的衡量標準是變量的預測能力。

“變量的預測能力”這個說法很籠統,很主觀,非量化,在篩選變量的時候我們總不能說:“我覺得這個變量預測能力很強,所以他要進入模型”吧?我們需要一些具體的量化指標來衡量每自變量的預測能力,并根據這些量化指標的大小,來確定哪些變量進入模型。IV就是這樣一種指標,他可以用來衡量自變量的預測能力。類似的指標還有信息增益、基尼系數等等。

?

?

補充說明對數簡寫

?

?

?

?

?

?

np.log(a) np.log10(a) np.log2(a) : 計算各元素的自然對數、10、2為底的對數?

?

?

WOE(Weight?of?Evidence)

WOE的全稱是“Weight?of?Evidence”,即證據權重。

?因子數量/好客戶總數,必須進行加權處理

?

?

文件夾內數據


?結果:

預測有價值變量準確,但不完整,因為沒有進行分箱,造成損失

?

舉例說明

例如按年齡分組,一般進行分箱,我們都喜歡按照少年、青年、中年、老年幾大類進行分組,但效果真的不一定好:

?

woe的第三方包(pip install woe; pip install reportgen)

https://pypi.org/project/woe/

實例:

https://blog.csdn.net/KIDxu/article/details/88647080

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



計算分箱,woe,iv

核心函數主要是freature_process.proc_woe_discrete()與freature_process.proc_woe_continuous(),分別用于計算連續(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,要計算woe的數據,必須包含'target'變量,且變量取值為{0,1}

var:要計算woe的變量名

global_bt:全局變量bad total。df的正樣本數量

global_gt:全局變量good?total。df的負樣本數量

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

alpha:用于自動計算分箱時的一個標準,默認0.01.如果iv_劃分>iv_不劃分*(1+alpha)則劃分。

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

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

打印分箱結果

eval.eval_feature_detail(Info_Value_list,out_path=False)

輸入:

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

out_path:指定的分箱結果存儲路徑,輸出為csv文件

輸出:

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

? ?
var_name 變量名
split_list 劃分區(qū)間
sub_total_sample_num 該區(qū)間總樣本數
positive_sample_num 該區(qū)間正樣本數
negative_sample_num 該區(qū)間負樣本數
sub_total_num_percentage 該區(qū)間總占比
positive_rate_in_sub_total 該區(qū)間正樣本占總正樣本比例
woe_list woe
iv_list 該區(qū)間iv
iv
該變量iv(各區(qū)間iv之和)
輸出結果一個示例(截取部分):?

?

woe轉換

得到分箱及woe,iv結果后,對原數據進行woe轉換,主要用以下函數

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

輸入:

dvar: 要轉換的變量,Series

civ:?proc_woe_discrete或proc_woe_discrete輸出的分箱woe結果,自定義的InfoValue類

輸出:

var: woe轉換后的變量,Series

分箱原理

該包中對變量進行分箱的原理類似于二叉決策樹,只是決定如何劃分的目標函數是iv值。

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

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

-------------------------------------------------------

1.初始化數據集D =D0為全量數據。轉步驟2

2.對于D,將數據按從小到大排序并按數量等分為10份,記錄各劃分點。計算不進行仍何劃分時的iv0,轉步驟3.

3.遍歷各劃分點,計算利用各點進行二分時的iv。

如果最大iv>iv0*(1+alpha)(用戶給定,默認0.01):?則進行劃分,且最大iv對應的即確定為此次劃分點。它將D劃分為左右兩個結點,數據集分別為DL, DR.轉步驟4.

否則:停止。

4.分別令D=DL,D=DR,重復步驟2.

-------------------------------------------------------

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

主要限制條件有以下2個:

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

b.每個bin的target取值個數>1,即每個bin必須同時包含正負樣本。

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

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



woe_iv原理和python代碼建模的評論 (共 條)

分享到微博請遵守國家法律
浮梁县| 澄城县| 涟源市| 江川县| 洛川县| 仁怀市| 理塘县| 肥城市| 新津县| 文成县| 新蔡县| 五峰| 蒲江县| 宝清县| 金乡县| 易门县| 运城市| 闽侯县| 安陆市| 咸丰县| 苏尼特右旗| 静安区| 新巴尔虎左旗| 紫云| 武陟县| 延川县| 汾阳市| 迁西县| 乌兰县| 红河县| 彭阳县| 梧州市| 安福县| 西畴县| 普洱| 安吉县| 高尔夫| 华蓥市| 广州市| 乌兰县| 嵊泗县|