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

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

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

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

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箱

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 基于卡方值分箱算法的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)python 卡方值分箱算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中的Function定義方法

    Python中的Function定義方法

    Python中,函數(shù)是可被重用的程序段。對于函數(shù)的定義,可以使用def關(guān)鍵字。
    2009-09-09
  • Python3內(nèi)置json模塊編碼解碼方法詳解

    Python3內(nèi)置json模塊編碼解碼方法詳解

    Python3中我們利用內(nèi)置模塊json解碼和編碼JSON對象。json模塊提供了四個功能:dumps、dump、loads、load本文詳細(xì)講解了Python3內(nèi)置json模塊的詳細(xì)使用方法
    2021-10-10
  • Python實現(xiàn)Web指紋識別實例

    Python實現(xiàn)Web指紋識別實例

    這篇文章主要來帶大家探索Web指紋識別:了解主流識別方式,從標(biāo)題到指紋讀取網(wǎng)站信息的簡單方法,揭秘Web指紋識別 關(guān)鍵字、哈希和URL的魔力
    2023-10-10
  • 關(guān)于vscode?默認(rèn)添加python項目的源目錄路徑到執(zhí)行環(huán)境的問題

    關(guān)于vscode?默認(rèn)添加python項目的源目錄路徑到執(zhí)行環(huán)境的問題

    這篇文章主要介紹了vscode?默認(rèn)添加python項目的源目錄路徑到執(zhí)行環(huán)境,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • python標(biāo)準(zhǔn)庫模塊之json庫的基礎(chǔ)用法

    python標(biāo)準(zhǔn)庫模塊之json庫的基礎(chǔ)用法

    json庫是處理JSON格式的Python標(biāo)準(zhǔn)庫,json庫主要包括兩類函數(shù),操作函數(shù)和解析函數(shù),下面這篇文章主要給大家介紹了關(guān)于python標(biāo)準(zhǔn)庫模塊之json庫的基礎(chǔ)用法,需要的朋友可以參考下
    2022-06-06
  • Python使用scipy進(jìn)行曲線擬合的方法實例

    Python使用scipy進(jìn)行曲線擬合的方法實例

    這篇文章主要給大家介紹了關(guān)于Python使用scipy進(jìn)行曲線擬合的相關(guān)資料,Scipy優(yōu)化和擬合采用的是optimize模塊,該模塊提供了函數(shù)最小值(標(biāo)量或多維)、曲線擬合和尋找等式的根的有用算法,需要的朋友可以參考下
    2022-05-05
  • Python實現(xiàn)一個轉(zhuǎn)存純真IP數(shù)據(jù)庫的腳本分享

    Python實現(xiàn)一個轉(zhuǎn)存純真IP數(shù)據(jù)庫的腳本分享

    工作中我們常需要使用純真IP數(shù)據(jù)庫內(nèi)的數(shù)據(jù)做分析,下面這篇文章主要給大家介紹了利用Python如何實現(xiàn)一個轉(zhuǎn)存純真IP數(shù)據(jù)庫的相關(guān)資料,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 使用OpenCV實現(xiàn)仿射變換—縮放功能

    使用OpenCV實現(xiàn)仿射變換—縮放功能

    這篇文章主要介紹了使用OpenCV實現(xiàn)仿射變換—縮放功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • python中tkinter的應(yīng)用:修改字體的實例講解

    python中tkinter的應(yīng)用:修改字體的實例講解

    今天小編就為大家分享一篇python中tkinter的應(yīng)用:修改字體的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python利用手勢識別實現(xiàn)貪吃蛇游戲

    Python利用手勢識別實現(xiàn)貪吃蛇游戲

    想必大家都玩過貪吃蛇的游戲吧:通過操縱蛇的移動方向能夠讓蛇吃到隨機(jī)出現(xiàn)的食物,吃到的食物越多,蛇就會變得越長。本文將使用手勢識別來完成貪吃蛇這個簡單的游戲,感興趣的可以了解一下
    2022-04-04

最新評論

双流县| 镇宁| 桃园县| 囊谦县| 龙川县| 中超| 锡林郭勒盟| 常山县| 通许县| 杭锦后旗| 泽州县| 南汇区| 泽州县| 象州县| 景洪市| 岑巩县| 建平县| 介休市| 铅山县| 冀州市| 西乡县| 东乌珠穆沁旗| 民权县| 锦州市| 江陵县| 隆化县| 皮山县| 宝坻区| 花莲市| 普宁市| 泾阳县| 哈巴河县| 雷波县| 绥阳县| 中江县| 昂仁县| 延庆县| 寿阳县| 库车县| 甘孜县| 黄梅县|