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

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

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

服務器之家 - 腳本之家 - Python - python 基于卡方值分箱算法的實現示例

python 基于卡方值分箱算法的實現示例

2020-07-17 23:17wyzwyzwyzo Python

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

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

?
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("箱數:{},iv:{:.6f}".format(len(bins_value),iv_value(df_woe)))
  #return bins and woe information
  return woe_value(bins_value)

以下是效果:

初始分成10箱,目標為3箱

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

箱數:8,iv:0.184862
箱數:7,iv:0.184128
箱數:6,iv:0.179518
箱數:5,iv:0.176980
箱數:4,iv:0.172406
箱數: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

到此這篇關于python 基于卡方值分箱算法的實現示例的文章就介紹到這了,更多相關python 卡方值分箱算法內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 韩国甜性涩爱在线播放 | 免费观看视频高清在线 | 国产一区二区免费福利片 | 嫩草影院精品视频在线观看 | 日本xxoo动图网站欧美 | 99久热只有精品视频免费看 | 美女18隐私羞羞视频网站 | 久久婷婷丁香五月色综合啪免费 | 免费看a片毛片 | www.俺去| 无遮免费网站在线入口 | 国产精品自在欧美一区 | 污书屋| avidolz性教师 | 歪歪视频在线播放无遮挡 | 日韩欧美在线一区二区三区 | 热久久最新视频 | 小货SAO边洗澡边CAO你动漫 | 午夜免费啪视频观看视频 | 亚洲国产精品二区久久 | 97色蜜桃 | 99在线播放视频 | 美女视频在线观看视频 | 无限资源在线观看完整版免费下载 | 男人操女生 | 香蕉久草在线 | 美国美女hd18| 日本中文字幕在线视频 | 国产精品网页 | 大好硬好深好爽想要视频 | 天堂伊人 | 天天噜| 波多野结衣中文字幕乱七八糟 | 国产盗摄美女嘘嘘视频 | 女人与zzzooooxxx | 国产精品原创视频 | 精品国产福利在线观看一区 | 婷婷色在线观看 | 免费观看一级一片 | 亚洲国产精品综合久久一线 | 国产亚洲精品美女2020久久 |