一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python 基于卡方值分箱算法的實(shí)現(xiàn)示例

python 基于卡方值分箱算法的實(shí)現(xiàn)示例

2020-07-17 23:17wyzwyzwyzo Python

這篇文章主要介紹了python 基于卡方值分箱算法的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

原理很簡單,初始分20箱或更多,先確保每箱中都含有0,1標(biāo)簽,對(duì)不包含0,1標(biāo)簽的箱向前合并,計(jì)算各箱卡方值,對(duì)卡方值最小的箱向后合并,代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import pandas as pd
import numpy as np
import scipy
from scipy import stats
def chi_bin(DF,var,target,binnum=5,maxcut=20):
  '''
  DF:data
  var:variable
  target:target / label
  binnum: the number of bins output
  maxcut: initial bins number
  '''
  
  data=DF[[var,target]]
  #equifrequent cut the var into maxcut bins
  data["cut"],breaks=pd.qcut(data[var],q=maxcut,duplicates="drop",retbins=True)
  #count 1,0 in each bin
  count_1=data.loc[data[target]==1].groupby("cut")[target].count()
  count_0=data.loc[data[target]==0].groupby("cut")[target].count()
  #get bins value: min,max,count 0,count 1
  bins_value=[*zip(breaks[:maxcut-1],breaks[1:],count_0,count_1)]
  #define woe
  def woe_value(bins_value):
    df_woe=pd.DataFrame(bins_value)
    df_woe.columns=["min","max","count_0","count_1"]
    df_woe["total"]=df_woe.count_1+df_woe.count_0
    df_woe["bad_rate"]=df_woe.count_1/df_woe.total
    df_woe["woe"]=np.log((df_woe.count_0/df_woe.count_0.sum())/(df_woe.count_1/df_woe.count_1.sum()))
    return df_woe
  #define iv
  def iv_value(df_woe):
    rate=(df_woe.count_0/df_woe.count_0.sum())-(df_woe.count_1/df_woe.count_1.sum())
    iv=np.sum(rate * df_woe.woe)
    return iv
  #make sure every bin contain 1 and 0
  ##first bin merge backwards
  for i in range(len(bins_value)):
    if 0 in bins_value[0][2:]:
      bins_value[0:2]=[(
        bins_value[0][0],
        bins_value[1][1],
        bins_value[0][2]+bins_value[1][2],
        bins_value[0][3]+bins_value[1][3])]
      continue
  ##bins merge forwards
    if 0 in bins_value[i][2:]:
      bins_value[i-1:i+1]=[(
        bins_value[i-1][0],
        bins_value[i][1],
        bins_value[i-1][2]+bins_value[i][2],
        bins_value[i-1][3]+bins_value[i][3])]
      break
    else:
      break
  
  #calculate chi-square merge the minimum chisquare   
  while len(bins_value)>binnum:
    chi_squares=[]
    for i in range(len(bins_value)-1):
      a=bins_value[i][2:]
      b=bins_value[i+1][2:]
      chi_square=scipy.stats.chi2_contingency([a,b])[0]
      chi_squares.append(chi_square)
  #merge the minimum chisquare backwards
    i = chi_squares.index(min(chi_squares))
               
    bins_value[i:i+2]=[(
      bins_value[i][0],
      bins_value[i+1][1],
      bins_value[i][2]+bins_value[i+1][2],
      bins_value[i][3]+bins_value[i+1][3])]
    
    df_woe=woe_value(bins_value)
    
  #print bin number and iv
    print("箱數(shù):{},iv:{:.6f}".format(len(bins_value),iv_value(df_woe)))
  #return bins and woe information
  return woe_value(bins_value)

以下是效果:

初始分成10箱,目標(biāo)為3箱

?
1
chi_bin(data,"age","SeriousDlqin2yrs",binnum=3,maxcut=10)

箱數(shù):8,iv:0.184862
箱數(shù):7,iv:0.184128
箱數(shù):6,iv:0.179518
箱數(shù):5,iv:0.176980
箱數(shù):4,iv:0.172406
箱數(shù):3,iv:0.160015
min max count_0 count_1 total bad_rate woe
0 0.0 52.0 70293 7077 77370 0.091470 -0.266233
1 52.0 61.0 29318 1774 31092 0.057056 0.242909
2 61.0 72.0 26332 865 27197 0.031805 0.853755

到此這篇關(guān)于python 基于卡方值分箱算法的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)python 卡方值分箱算法內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/wyzwyzwyzo/article/details/107354019

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 猫扑俩性 | 欧美一区二区三区gg高清影视 | 亚洲国产在线2o20 | a级毛片毛片免费观看永久 a级黄色片免费 | yin娃sao货调教情趣用品店 | 日本中文字幕在线精品 | 天天射夜夜爽 | 白丝女榨干蹂躏我 | 欧美视频一级 | 亚洲精品国产A久久久久久 亚洲精品福利一区二区在线观看 | 亚洲一区二区三区免费视频 | 91久久精品青青草原伊人 | 精品久久久久久久久久久 | 韩国三级大全 | jj视频免费观看 | aaaa黄色片 | 草草在线免费视频 | china国产bbw| 欧美同性猛男videos | 青草视频在线观看免费资源 | 教练你好大轻点漫 | 国产一区精品 | 美女脱了内裤打开腿让人羞羞软件 | 给我视频免费看 | 免费一区二区视频 | 丰满的闺蜜2中文字幕 | 国产欧美一区二区精品久久久 | 5g影院天天影院天天爽影院网站 | 欧美透逼视频 | 2022最新a精品视频在线观看 | 日本h片在线 | yy6080欧美三级理论 | 黑人女性猛交xxxxxⅹxx | 亚洲一欧洲中文字幕在线 | 日韩欧美一区二区三区视频 | 精品一区二区三区色花堂 | 国产精品高清视亚洲一区二区 | 麻豆天美精东果冻传媒在线 | 国产hd老太婆 | 青青久久久国产线免观 | 暖暖中国免费观看高清完整版 |