Я ищу оптимальный метод биннинга (дискретизации) непрерывной переменной по отношению к заданной ответной (целевой) двоичной переменной и с максимальным количеством интервалов в качестве параметра.
пример: у меня есть набор наблюдений за людьми с переменными "высота" (цифра непрерывная) и "has_back_pains" (бинарная). Я хочу разделить высоту на 3 интервала (группы) не более, с разной долей людей с болями в спине, чтобы алгоритм максимизировал разницу между группами (например, с учетом таких ограничений, что каждый интервал имеет как минимум x наблюдений).
Очевидным решением этой проблемы было бы использование деревьев решений (простая модель с одной переменной), но я не могу найти ни одной функции в R, которая имела бы «максимальное количество ветвей» в качестве параметра - все они делят переменную в 2 группы (<= х и> х). SAS майнер имеет параметр "максимальная ветвь", но я ищу некоммерческое решение.
некоторые из моих переменных имеют только несколько уникальных значений (и могут рассматриваться как дискретные переменные), но я хочу также разделить их на меньшее количество интервалов.
Наиболее близкое решение моей проблемы реализовано в пакете smbinning в R (который опирается на функцию ctree из пакета party), но у него есть два недостатка: невозможно установить количество интервалов (однако вы можете найти способ обойти его, изменив параметр 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 Algorithms Optimal Binning
.Ответы:
Читая эту книгу здесь (Нагараджан, 2103 [1]), я натолкнулся на эту ценную информацию, которую я бесстыдно цитирую здесь:
Используя предварительные знания о данных. Границы интервалов определены для каждой переменной, чтобы соответствовать значительно отличающимся сценариям реального мира, таким как концентрация конкретного загрязнителя (отсутствует, опасно, смертельно) или возрастные классы (ребенок, взрослый, пожилой).
Использование эвристики перед изучением структуры сети. Вот некоторые примеры: правила Стерджеса, Фридмана-Диакониса или Скотта (Venables and Ripley, 2002).
Выбор количества интервалов и их границ для баланса точности и потери информации (Kohavi and Sahami, 1996), снова по одной переменной за раз и до того, как будет изучена структура сети. Аналогичный подход с учетом пар переменных представлен в Hartemink (2001).
Итеративное выполнение обучения и дискретизации до тех пор, пока не будет сделано никаких улучшений (Friedman and Goldszmidt, 1996).
Эти стратегии представляют различные компромиссы между точностью дискретного представления исходных данных и вычислительной эффективностью преобразования.
Эта информация предоставляется, если вы хотите обосновать метод биннинга, который вы хотите использовать, а не просто использовать пакет напрямую.
[1]: Нагараджан Р. (2013),
Байесовские сети в R, с приложениями в системной биологии
Springer
источник
Попробуйте информационный пакет для 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) и является удобным инструментом для исследования данных и, следовательно, для биннинга. Вывод не содержит шансов, хотя; и невозможно определить ноль в качестве отдельного бина (для моих задач ноль часто является допустимым бином самостоятельно); и было бы неплохо получить выходные данные из информационного пакета, которые были бы такими же, как у smbinning. Однако, как говорится о приятных, но все еще недоступных функциях информационного пакета, другие R-пакеты для WoE и IV (woe, klaR) не производили впечатление столь же полезных инструментов, как информационный пакет, на самом деле я не удалось запустить их после 2-3 попыток. Для задачи dscretisation / binning пакеты Information и smbinning могут прекрасно работать вместе,
Для реального биннинга я использовал data.table вместо функции cut (). См. Ссылку на мой пост ниже, он содержит общий код в самом низу исходного вопроса: /programming/34939845/binning-variables-in-a-dataframe-with-input-bin-data- из-другой-dataframe
Надеюсь, поможет.
источник