我正在寻找关于给定响应(目标)二进制变量和最大间隔数作为参数的连续变量的最佳分箱方法(离散化)。
示例:我对具有“身高”(数字连续)和“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
哦,我完全知道分箱会导致信息丢失,并且有更好的方法,但我将使用它进行数据可视化并将这些变量视为一个因素。