Оптимальное биннинг по отношению к заданной переменной отклика

11

Я ищу оптимальный метод биннинга (дискретизации) непрерывной переменной по отношению к заданной ответной (целевой) двоичной переменной и с максимальным количеством интервалов в качестве параметра.

пример: у меня есть набор наблюдений за людьми с переменными "высота" (цифра непрерывная) и "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

О, я полностью осознаю, что биннинг приводит к потере информации и что существуют лучшие методы, но я собираюсь использовать его для визуализации данных и рассматривать эти переменные как фактор.

Dominix
источник
SPSS имеет команду оптимального биннинга. Google SPSS Algorithms Optimal Binning.
ttnphns
Вы видели этот пост stackoverflow.com/questions/7018954/… Там упоминается использование информационного значения, но не ясно, что это значит под IV = 1, или не объясняется, как это получить
Адам

Ответы:

6

Читая эту книгу здесь (Нагараджан, 2103 [1]), я натолкнулся на эту ценную информацию, которую я бесстыдно цитирую здесь:

  • Используя предварительные знания о данных. Границы интервалов определены для каждой переменной, чтобы соответствовать значительно отличающимся сценариям реального мира, таким как концентрация конкретного загрязнителя (отсутствует, опасно, смертельно) или возрастные классы (ребенок, взрослый, пожилой).

  • Использование эвристики перед изучением структуры сети. Вот некоторые примеры: правила Стерджеса, Фридмана-Диакониса или Скотта (Venables and Ripley, 2002).

  • Выбор количества интервалов и их границ для баланса точности и потери информации (Kohavi and Sahami, 1996), снова по одной переменной за раз и до того, как будет изучена структура сети. Аналогичный подход с учетом пар переменных представлен в Hartemink (2001).

  • Итеративное выполнение обучения и дискретизации до тех пор, пока не будет сделано никаких улучшений (Friedman and Goldszmidt, 1996).

Эти стратегии представляют различные компромиссы между точностью дискретного представления исходных данных и вычислительной эффективностью преобразования.

Эта информация предоставляется, если вы хотите обосновать метод биннинга, который вы хотите использовать, а не просто использовать пакет напрямую.

[1]: Нагараджан Р. (2013),
Байесовские сети в R, с приложениями в системной биологии
Springer

KarthikS
источник
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) и является удобным инструментом для исследования данных и, следовательно, для биннинга. Вывод не содержит шансов, хотя; и невозможно определить ноль в качестве отдельного бина (для моих задач ноль часто является допустимым бином самостоятельно); и было бы неплохо получить выходные данные из информационного пакета, которые были бы такими же, как у 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

Надеюсь, поможет.

Aktan
источник
@ kjetil, kjetil b halvorsen, вы правы. Информационный пакет имеет функции для расчета WoE и IV (количество бинов является гибким параметром, по умолчанию 10) и является удобным инструментом для исследования данных и, следовательно, для биннинга. Вывод не содержит шансов, хотя. И невозможно указать ноль в качестве отдельного бина (для моих задач ноль часто является самостоятельным допустимым бином). Другие R-пакеты для WoE и IV (woe, klaR) не производили впечатление столь же полезных инструментов, как информационный пакет. Таким образом, информация и пакет могут прекрасно сочетаться друг с другом.
Актан