关于给定响应变量的最佳分箱


11

我正在寻找相对于给定响应(目标)二进制变量并以最大间隔数为参数的连续变量的最佳合并方法(离散化)。

示例:我对“身高”(数字连续)和“ has_back_pains”(二进制)变量的人有一组观察。我想将高低离散化为最多3个间隔(组),以不同比例的背部疼痛患者来做,这样算法就可以最大程度地使各组之间的差异最大化(例如,在给定限制的情况下,每个间隔至少有x个观察值)。

解决此问题的明显方法是使用决策树(一个简单的单变量模型),但我在R中找不到任何将“最大分支数”作为参数的函数-它们全部将变量除分成2块(<= x和> x)。SAS矿工具有“最大分支”参数,但我正在寻找非商业解决方案。

我的一些变量只有几个唯一值(可以视为离散变量),但我想将它们离散化为较小的间隔。

与我的问题最接近的解决方案是在R中的smbinning包中实现的(依赖于party包中的ctree函数),但是它有两个缺点:无法设置间隔数(但是,您可以通过更改间隔找到解决方法p参数),并且当数据向量的唯一值少于10个时无效。无论如何,您可以在此处看到示例输出(Cutpoint和Odds列至关重要):

Cutpoint CntRec CntGood CntBad CntCumRec CntCumGood CntCumBad PctRec BadRate   Odds  LnOdds     WoE     IV
1   <= 272   9081     169   8912      9081        169      8912 0.1874  0.9814 0.0190 -3.9653 -0.6527 0.0596
2   <= 311   8541     246   8295     17622        415     17207 0.1762  0.9712 0.0297 -3.5181 -0.2055 0.0068
3   <= 335   2986     163   2823     20608        578     20030 0.0616  0.9454 0.0577 -2.8518  0.4608 0.0163
4  Missing  27852    1125  26727     48460       1703     46757 0.5747  0.9596 0.0421 -3.1679  0.1447 0.0129
5    Total  48460    1703  46757        NA         NA        NA 1.0000  0.9649 0.0364 -3.3126  0.0000 0.0956

哦,我完全意识到合并会导致信息丢失,并且有更好的方法,但是我将使用它进行数据可视化并将这些变量视为一个因素。


SPSS具有最佳合并命令。谷歌SPSS Algorithms Optimal Binning
ttnphns 2015年

您是否看到过这篇文章stackoverflow.com/questions/7018954/…它提到了信息值的使用,但是不清楚IV = 1的含义,或者没有解释如何获得该信息
亚当,

Answers:


6

这里读这本书(Nagarajan,2103 [1])时,我偶然发现了以下宝贵信息:

  • 使用有关数据的先验知识。为每个变量定义间隔的边界,以对应于明显不同的现实情况,例如特定污染物的浓度(不存在,危险,致死)或年龄段(儿童,成人,老年人)。

  • 在学习网络结构之前使用启发式方法。例如:斯特吉斯(Strurges),弗里德曼(Freedman-Diaconis)或斯科特(Scott)规则(Venables和Ripley,2002年)。

  • 选择间隔的数量及其边界以平衡准确性和信息丢失(Kohavi和Sahami,1996),一次又一次在学习网络结构之前是一个变量。Hartemink(2001)中提出了一种考虑变量对的类似方法。

  • 反复进行学习和离散化,直到没有任何改善为止(Friedman和Goldszmidt,1996)。

这些策略代表了原始数据离散表示的准确性与转换的计算效率之间的不同权衡。

如果您想证明您要使用的装箱方法合理,而不仅仅是直接使用软件包,则会提供此信息。

[1]:Nagarajan R.(2013),
R中的贝叶斯网络,及其在系统生物学
Springer中的应用


3

尝试使用R的信息包 。https : //cran.r-project.org/web/packages/Information/Information.pdf https://cran.r-project.org/web/packages/Information/vignettes/Information-vignette .html

信息包具有计算WoE和IV的功能(箱数是一个灵活的参数,默认值为10),并且是一种方便的工具,可用于数据探查并因此用于分箱。但是,输出不包含赔率;并且不可能将零指定为单独的箱(对于我的任务,零通常是其本身有效的箱);从Information程序包中获得类似smbinning的输出将是很好的。但是,关于信息包的好用但仍不可用的功能,其他有关WoE和IV的R包(woe,klaR)并没有像信息包那样有用。 2-3次尝试后无法运行它们。对于离散化/合并的任务,“信息”和“合并”程序包可以很好地协同工作,

对于实际的装箱,我使用了data.table而不是cut()函数。请参阅下面我的帖子的链接,它在初始问题的最底部包含通用代码:https : //stackoverflow.com/questions/34939845/binning-variables-in-a-dataframe-with-input-bin-data-来自另一个数据帧

希望能帮助到你。


@ kjetil,kjetil b halvorsen,您是对的。信息包具有用于计算WoE和IV的功能(箱数是一个灵活的参数,默认值为10),并且是一种方便的工具,可用于数据探查并因此进行装箱。但是,输出不包含赔率。而且不可能将零指定为单独的bin(对于我的任务,零通常是其本身有效的bin)。WoE和IV的其他R包(woe,klaR)没有像Information包那样有用。因此,Information和smbinning软件包可以很好地结合在一起使用。
Aktan'9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.