Группировка категорий и сегментация признаков в логистической регрессии (пример)

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Исходный код)
 
(15 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
'''Группировка категорий и сегментация признаков''' — методы, позволяющие упростить и одновременно улучшить регрессионную модель. В частности, группировка категорий позволяет понять взаимосвязь значений признаков и использовать линейные модели для нелинейных зависимостей.
+
'''Группировка категорий ''' — метод снижения числа признаков, полученных с помощью бинаризации номинальных шкал в модели логистической регрессии.
 +
 
 +
'''Сегментация признака''' - разбиение множества значений признака на некоторые семейства таким образом, чтобы учесть нелинейные зависимости значений признака в обобщенно - линейной модели.
== Постановка задачи ==
== Постановка задачи ==
-
Дана задача кредитного скоринга. Регрессионная модель - [[Логистическая регрессия (пример) |логистическая регрессия]]. Требуется найти множество активных признаков. Затем сегментировать линейные признаки, сгруппировать номинальные и ординарные. При этом надо применить как новые алгоритмы, так и классические. Сравнить оба подхода, вычислить статистическую значимость производных признаков.
+
Задана регрессионная модель - [[Логистическая регрессия |логистическая регрессия]].
-
== Описание данных ==
+
-
Используются реальные данные (GERMAN_UIC) о выдаче или не выдаче банком кредитов. Всего приведены 24 признака для 1000 человек и информация о том, выдан ли впоследствии кредит. Формально данные можно представить следующим образом:
+
-
Набор данных: <tex>\mathbf{x}\in\mathbb{R}^{n},\ y\in\mathbb{R}</tex>
+
Набор данных: <tex>\mathbf{x}\in\mathbb{R}^{n},\ y\in\{0, 1\}</tex>
<tex>\mathbf{D} = \{(\mathbf{x}^{1},y^{1}),\ldots,(\mathbf{x}^{i},y^{i}),\ldots,(\mathbf{x}^{m},y^{m})\}</tex>
<tex>\mathbf{D} = \{(\mathbf{x}^{1},y^{1}),\ldots,(\mathbf{x}^{i},y^{i}),\ldots,(\mathbf{x}^{m},y^{m})\}</tex>
Строка 18: Строка 18:
<tex>\{1,\ldots,m\} = \mathbf{L}\cup\mathbf{T}</tex> - разбиение на обучающую и контрольную выборки.
<tex>\{1,\ldots,m\} = \mathbf{L}\cup\mathbf{T}</tex> - разбиение на обучающую и контрольную выборки.
<tex>\{1,\ldots,n\} = \mathbf{F}</tex> - индексы признаков.
<tex>\{1,\ldots,n\} = \mathbf{F}</tex> - индексы признаков.
 +
 +
Требуется:
 +
 +
1) Сегментировать линейные признаки.
 +
 +
2) Категоризовать номинальные признаки.
 +
 +
При этом надо применить как новые алгоритмы, так и классические, приведенные в книге Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. Сравнить оба подхода.
 +
== Описание алгоритмов ==
== Описание алгоритмов ==
-
=== Поиск активных признаков ===
+
 
-
Сначала находится множество активных признаков. Для этого решается задача максимизации правдоподобия, или эквивалентно - минимизация его логарифма, взятого с противополжным знаком
+
До выполнения алгоритмов сегментации и категоризации предполагается из начальных данных выбрать набор признаков для построения регрессионной модели. Принято называть такие признаки активными. Для этого решается задача максимизации правдоподобия на контрольной выборке, или эквивалентно - минимизация его логарифма, взятого с противоположным знаком
<tex>-\ln(P(\mathbf{y}|\mathbf{x})) = - \sum_{i\subseteq\mathbf{L}}(y^{i}\ln(\sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle)) + (1 - y^{i})\ln(1 - \sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle))) = S_{\mathbf{L},\mathbf{A}}(\mathbf{w})</tex>
<tex>-\ln(P(\mathbf{y}|\mathbf{x})) = - \sum_{i\subseteq\mathbf{L}}(y^{i}\ln(\sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle)) + (1 - y^{i})\ln(1 - \sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle))) = S_{\mathbf{L},\mathbf{A}}(\mathbf{w})</tex>
-
Здесь под строкой <tex>\mathbf{x}^{i}</tex> подразумевается строка из условия, но с удаленными координатами, номера которых не входят во множество индексов <tex>A</tex>. Вектор <tex>\mathbf{w}</tex> соответствующей длины. Множество активных признаков - <tex>\mathbf{A}\subseteq\mathbf{F} </tex>. Тогда задача нахождения множества активных признаков и соответствующего им вектора весов записывается в виде
+
Здесь под строкой <tex>\mathbf{x}^{i}</tex> подразумевается строка из условия, но с удаленными координатами, номера которых не входят во множество индексов <tex>A</tex>. Вектор <tex>\mathbf{w}</tex> соответствующей длины. Текущее множество активных признаков - <tex>\mathbf{A}\subseteq\mathbf{F} </tex>. Тогда задача нахождения множества активных признаков и соответствующего им вектора весов записывается в виде
<tex>\mathbf{w}_{\mathbf{A}} = \underset{\mathbf{w}}{\operatorname{argmin}}(S_{\mathbf{L},\mathbf{A}}(\mathbf{w}))</tex>
<tex>\mathbf{w}_{\mathbf{A}} = \underset{\mathbf{w}}{\operatorname{argmin}}(S_{\mathbf{L},\mathbf{A}}(\mathbf{w}))</tex>
Строка 30: Строка 39:
<tex>\mathbf{A} = \underset{\mathbf{A}^{*}\in2^{\mathbf{F}}}{\operatorname{argmin}}(S_{\mathbf{T},\mathbf{A}^{*}}(\mathbf{w}__{\mathbf{A}^{*}}))</tex>
<tex>\mathbf{A} = \underset{\mathbf{A}^{*}\in2^{\mathbf{F}}}{\operatorname{argmin}}(S_{\mathbf{T},\mathbf{A}^{*}}(\mathbf{w}__{\mathbf{A}^{*}}))</tex>
-
Для решения задачи поиска множества активных признаков предлагается следующий подход. Все линейные признаки заведомо считаются активными. В данном случае их всего 3, и впоследствии они будут сегментированы. Далее используется простой жадный алгоритм, удаляющий на каждом шаге признак, без которого значение правдоподобия наиболее оптимально. В логистической регрессии добавляется постоянный признак, а вектор весов находится с помощью алгоритма [[Алгоритм Ньютона-Рафсона|Ньютона - Рафсона]]. В данном эксперименте считается, что удаленными должны быть около половины всех признаков.
+
На первом шаге все номинальные признаки считаются активными. Затем используется простой жадный алгоритм, удаляющий на каждом шаге признак, без которого значение правдоподобия на контрольной выборке наиболее оптимально. Вектор весов находится с помощью алгоритма [[Алгоритм Ньютона-Рафсона|Ньютона - Рафсона]]. В данном эксперименте считается, что активными должны получится около половины признаков.
-
=== Сегментация линейных признаков ===
+
=== Сегментация линейного признака ===
-
Пусть значения линейного признака <tex>\mathbf{x}_{i}</tex> характеризуются числами из отрезка <tex>[a_{i},b_{i}]</tex>. Вводится разбиение отрезка <tex>[a_{i},b_{i}]</tex>, на <tex>k</tex> отрезков одинаковой длины <tex>a_{i} = x_{1} < x_{2} < \ldots < x_{n_{k}} = b_{i}</tex>. Строится кусочно - линейная функция <tex>f(x) = a x+ b + c_1|x-x_1| + c_2|x-x_2| + \ldots +c_n|x-x_n|</tex>. Значения признака - значение функции в соответствующей точке отрезка <tex>[a_{i},b_{i}]</tex>. Коэффициенты <tex>f(x)</tex> подобираются так, чтобы <tex>f(x_{2m - 1}) = 0,\ f(x_{2m}) = 1</tex> где <tex>m\in\mathbb N</tex>. На каждом шаге алгоритма случайным образом изменяется значение <tex>x_{i}</tex>, но так, чтобы не изменить порядок чисел разбиения. Коэффициенты <tex>f(x)</tex> изменяются соответсвующим образом. Если для новой функции <tex>f(x)</tex> значение <tex>S_{\mathbf{L},\mathbf{A}}(\mathbf{w})</tex> уменьшается, то сохраняется изменение <tex>x_{i}</tex>. Алгоритм заканчивает работу по достижении первого минимума.
+
Пусть линейный признак <tex>\mathbf{x}_{j}</tex> принимают значения из отрезка <tex>[a_{j},b_{j}]</tex>. Вводится начальное разбиение отрезка <tex>[a_{j},b_{j}]</tex>, на <tex>k</tex> отрезков одинаковой длины <tex>a_{j} = x_{1} < x_{2} < \ldots < x_{n_{k}} = b_{j}</tex>. Строится кусочно - линейная функция <tex>f(x) = a x+ b + c_1|x-x_1| + c_2|x-x_2| + \ldots +c_n|x-x_n_k|</tex>. На каждом шаге алгоритма случайным образом изменяется значение <tex>x_{i}</tex>, где индекс <tex>i</tex> - случайное число из <tex>1 ,\ldots, n_{k}</tex>. Коэффициенты <tex>f(x)</tex> при этом всегда изменяются так, чтобы <tex>f(x_{2m - 1}) = 0,\ f(x_{2m}) = 1</tex> где <tex>m\in\mathbb N</tex>. Для <tex>\mathbf{x}_{j}</tex> и построенной <tex>f(x)</tex> строится признак <tex>\mathbf{j}</tex>: значения нового признака - значение функции в соответствующей точке отрезка <tex>[a_{j},b_{j}]</tex>. Если для новой функции <tex>f(x)</tex> значение <tex>S_{\mathbf{L},\mathbf{A}^{*}}(\mathbf{w})</tex> уменьшается, то сохраняется изменение <tex>x_{i}</tex>. Здесь <tex>\mathbf{A}^{*} = \mathbf{A}\cup\mathbf{j}</tex>. Алгоритм заканчивает работу по достижении первого минимума.
=== Группировка категорий ===
=== Группировка категорий ===
-
Пусть номинальный признак <tex>\mathbf{x}_{i}</tex> характеризуются числами из множества категорий <tex>\tex\{1,\ldots,c\}</tex>. Ему в соответствие ставится множество <tex>\Gamma</tex> такое, что <tex>1 \le |\Gamma| \le c</tex>. Требуется найти такую сюръективную функцию <tex>h_{\Gamma}:\{1,\ldots,c\}\to\Gamma</tex> и соответствующее ей множество <tex>\Gamma = \{1,\ldots,c^{*}\}</tex>, которая минимизирует функцию <tex>S_{\mathbf{T},\mathbf{A}</tex> при замене для <tex>\mathbf{x}_{i}</tex>: <tex>\tex\{1,\ldots,c\}</tex> на <tex>\tex\{h_{\Gamma}(1),\ldots,h_{\Gamma}(c)\}</tex>. В данном случае признаков и категорий достаточно мало, поэтому эффективен полный перебор.
+
Пусть номинальный признак <tex>\mathbf{x}_{i}</tex> принимает значения из множества категорий <tex>\tex\{1,\ldots,c\}</tex>. Ему в соответствие ставится множество <tex>\Gamma</tex> такое, что <tex>1 \le |\Gamma| \le c</tex>. Требуется найти такую сюръективную функцию <tex>h_{\Gamma}:\{1,\ldots,c\}\to\Gamma</tex> и соответствующее ей множество <tex>\Gamma = \{1,\ldots,c^{*}\}</tex>, которая минимизирует функцию <tex>S_{\mathbf{T},\mathbf{A}^{*}(\mathbf{w})</tex>. Здесь <tex>\mathbf{A}^{*} = \mathbf{A}\cup\mathbf{j}</tex>, а <tex>\mathbf{j}</tex> - номинальный признак, принимающий значения из <tex>\tex\{h_{\Gamma}(1),\ldots,h_{\Gamma}(c)\}</tex>. В данном случае признаков и категорий достаточно мало, поэтому эффективен полный перебор.
-
== Вычислительный эксперимент ==
+
-
=== Выполнение алгоритма ===
+
 
 +
Также предлагается один из классических методов группировки категорий, описанный в книге Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. Для этого сначала для каждого значения номинального признака считается его <tex>WOE</tex> (Weight of evidence) по формуле: <tex>WOE = 100* \ln(\frac{Distr Good}{Distr Bad})</tex>, где <tex>Distr Good</tex> , например, - отношение числа людей, которым выдали кредит, имевших данное значение номинального признака, к общему числу людей, которым выдали кредит. <tex>Distr Bad</tex> - отношение числа людей, которым не выдали кредит, имевших данное значение номинального признака, к общему числу людей, которым не выдали кредит. Теперь пусть некоторый номинальный признак под номером <tex>j</tex> принимает значения <tex>\tex\{1,\ldots,n_{j}\}</tex>. Для него нужно рассчитать <tex>IV</tex>(Information Value) по формуле: <tex> IV = \sum_{i = 1}^{n_j}(Distr Good_{i} - Distr Bad_{i})* \ln(\frac{Distr Good_{i}}{Distr Bad_{i}})</tex>. Для признаков с самыми большими значениями <tex>IV</tex> в одну группу объединяются категории с близкими значениями <tex>WOE</tex>. При таком подходе важно задать условия близости значений <tex>WOE</tex> и количество группируемых категорий.
 +
== Вычислительный эксперимент ==
 +
Показана работа алгоритма на реальных данных.
 +
=== Описание данных ===
 +
Используются реальные данные ([http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/ GERMAN_UIC]) о выдаче или не выдаче банком кредитов. Всего приведены 24 признака для 1000 человек и информация о том, выдан ли впоследствии кредит.
=== Визуализация результатов ===
=== Визуализация результатов ===
-
Результат выполнения алгоритма поиска множества активных признаков. Линейные признаки для удобства перенесены в начало.
+
На первом шаге из данных выбраны активные признаки, используемые в дальнейшем в регрессионной модели. Всего было выбрано 5 номинальных признаков.
 +
 
 +
==== Пример группировки номинальных признаков ====
 +
 
 +
Ко множеству активных признаков добавляется один номинальный признак. Его категории группируется двумя способами. Результаты группировки сравниваются.
 +
 
 +
===== [http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D1%80%D0%B8%D0%B2%D0%B0%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA ROC] - кривая =====
 +
 
 +
[[Изображение:Last_grouping.png]]
 +
 
 +
===== Исследование свойств алгоритма =====
 +
Численное сравнение.
 +
 
{| class="wikitable"
{| class="wikitable"
|-
|-
-
! Активные признаки.
+
!
-
 
+
! New grouping
 +
! Classical grouping
|-
|-
-
|1,2,3,4,5,6,9,10,16,20
+
| S(w)
 +
| 147.0040
 +
| 149.1568
 +
|-
 +
| [http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D1%80%D0%B8%D0%B2%D0%B0%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA AUC]
 +
| 0.91343
 +
| 0.91001
 +
|}
 +
Видно, что по обоим параметрам переборная группировка несколько превосходит классическую. Тем не менее небольшие отклонения в значениях связаны с тем, что достаточно большой вклад в оба параметра дают активные признаки. Тем самым значение одного группируемого признака в модели снижается. Также ясно, что классический метод дает достаточно хорошую группировку при минимальной вычислительной сложности.
 +
 +
==== Пример сегментации линейного признака ====
 +
 +
Как и ранее выбираются активные номинальные признаки. Потом к ним добавляется линейный признак и находится сначала оптимальное число сегментов, а затем и сама оптимальная сегментация. Поиск оптимумов основывается на минимизации <tex>S(w)</tex> на контроле. Затем производится эксперимент, в котором множество активных признаков пусто. Результаты заносятся в таблицу.
 +
 +
===== [http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D1%80%D0%B8%D0%B2%D0%B0%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA ROC] - кривая =====
 +
На графиках изображено сравнение двух методов сегментации. В первом случае сегментация производится для модели вместе с активными признаками. Во втором случае сегментация признака производится без активных признаков, а затем сегментированный признак прибавляется ко множеству активных признаков.
 +
 +
[[Изображение:Last_Segmentation.png]]
 +
 +
===== Оптимальная сегментация =====
 +
 +
Перебором дискретных значений длины шага получается, что при начальной длине шага сегментации равной 2.0 в среднем получается наименьшее значение <tex>S(w)</tex>. Результат имеет наглядную интерпретацию. Малая длина шага сегментации дает большую независимость значений признака, там самым можно получить лучшее значение <tex>S(w)</tex> на контроле. Однако очень малый начальный шаг сегментации часто создает случаи, когда алгоритм сходится не к самому оптимальному решению. Это связано с тем, что небольшие изменения длины такого шага практически не изменяют <tex>S(w)</tex> на контроле и тем самым заставляют его остановить поиск раньше времени.
 +
 +
==== Описание результатов ====
 +
Численные данные.
 +
{| class="wikitable"
 +
|-
 +
!
 +
! Segmentation
 +
! Segmentation w/o active
 +
|-
 +
| [http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D1%80%D0%B8%D0%B2%D0%B0%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA AUC]
 +
| 0.89215
 +
| 0.88382
|}
|}
-
=== Исследование свойств алгоритма ===
 
 +
Оптимально сегментированный линейный признак улучшает регрессионную модель. С точки зрения значения <tex>S(w)</tex> на контроле, при пустом множестве активных признаков значение хуже. Однако с точки зрения AUC модели практически неотличимы. Можно сделать вывод о том, что сегментация линейного признака без участия активных признаков оправдана.
== Исходный код ==
== Исходный код ==
-
 
+
* Исходный код [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/Group774/Zhivotovskiy2010Category Matlab]
== Смотри также ==
== Смотри также ==
Строка 63: Строка 122:
* Siddiqi N. Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. John Wiley & Sons, Inc. 2006
* Siddiqi N. Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. John Wiley & Sons, Inc. 2006
* Bishop C. Pattern Recognition And Machine Learning. Springer. 2006.
* Bishop C. Pattern Recognition And Machine Learning. Springer. 2006.
-
{{Задание|Никита Животовский|В.В. Стрижов|?}}
+
* D. W. Hosmer, S. Lemeshow. Applied logistic regression. Wiley, New York, 2000.
 +
{{ЗаданиеВыполнено|Никита Животовский|В.В. Стрижов|24.11.2010||strijov}}
[[Категория:Учебные материалы]]
[[Категория:Учебные материалы]]

Текущая версия

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

Сегментация признака - разбиение множества значений признака на некоторые семейства таким образом, чтобы учесть нелинейные зависимости значений признака в обобщенно - линейной модели.

Содержание

Постановка задачи

Задана регрессионная модель - логистическая регрессия.

Набор данных: \mathbf{x}\in\mathbb{R}^{n},\ y\in\{0, 1\}

\mathbf{D} = \{(\mathbf{x}^{1},y^{1}),\ldots,(\mathbf{x}^{i},y^{i}),\ldots,(\mathbf{x}^{m},y^{m})\}

Целевая переменная: \mathbf{y} = (y^{1},\ldots,y^{m})^{T}

Модель: P(y^{i}|\mathbf{x}^i) = (\sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle))^{y^{i}}(1 - \sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle))^{1 - y^{i}}\ где \sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle) = \frac{1}{1 + \exp(-\langle\mathbf{w},\mathbf{x}^{i}\rangle)}

Индексы: \{1,\ldots,m\} = \mathbf{L}\cup\mathbf{T} - разбиение на обучающую и контрольную выборки. \{1,\ldots,n\} = \mathbf{F} - индексы признаков.

Требуется:

1) Сегментировать линейные признаки.

2) Категоризовать номинальные признаки.

При этом надо применить как новые алгоритмы, так и классические, приведенные в книге Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. Сравнить оба подхода.

Описание алгоритмов

До выполнения алгоритмов сегментации и категоризации предполагается из начальных данных выбрать набор признаков для построения регрессионной модели. Принято называть такие признаки активными. Для этого решается задача максимизации правдоподобия на контрольной выборке, или эквивалентно - минимизация его логарифма, взятого с противоположным знаком

-\ln(P(\mathbf{y}|\mathbf{x})) = - \sum_{i\subseteq\mathbf{L}}(y^{i}\ln(\sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle)) + (1 - y^{i})\ln(1 - \sigma(\langle\mathbf{w},\mathbf{x}^{i}\rangle))) = S_{\mathbf{L},\mathbf{A}}(\mathbf{w})

Здесь под строкой \mathbf{x}^{i} подразумевается строка из условия, но с удаленными координатами, номера которых не входят во множество индексов A. Вектор \mathbf{w} соответствующей длины. Текущее множество активных признаков - \mathbf{A}\subseteq\mathbf{F} . Тогда задача нахождения множества активных признаков и соответствующего им вектора весов записывается в виде

\mathbf{w}_{\mathbf{A}} = \underset{\mathbf{w}}{\operatorname{argmin}}(S_{\mathbf{L},\mathbf{A}}(\mathbf{w}))

\mathbf{A} = \underset{\mathbf{A}^{*}\in2^{\mathbf{F}}}{\operatorname{argmin}}(S_{\mathbf{T},\mathbf{A}^{*}}(\mathbf{w}__{\mathbf{A}^{*}}))

На первом шаге все номинальные признаки считаются активными. Затем используется простой жадный алгоритм, удаляющий на каждом шаге признак, без которого значение правдоподобия на контрольной выборке наиболее оптимально. Вектор весов находится с помощью алгоритма Ньютона - Рафсона. В данном эксперименте считается, что активными должны получится около половины признаков.

Сегментация линейного признака

Пусть линейный признак \mathbf{x}_{j} принимают значения из отрезка [a_{j},b_{j}]. Вводится начальное разбиение отрезка [a_{j},b_{j}], на k отрезков одинаковой длины a_{j} = x_{1} < x_{2} < \ldots < x_{n_{k}} = b_{j}. Строится кусочно - линейная функция f(x) = a x+ b + c_1|x-x_1| + c_2|x-x_2| + \ldots +c_n|x-x_n_k|. На каждом шаге алгоритма случайным образом изменяется значение x_{i}, где индекс i - случайное число из 1 ,\ldots, n_{k}. Коэффициенты f(x) при этом всегда изменяются так, чтобы f(x_{2m - 1}) = 0,\ f(x_{2m}) = 1 где m\in\mathbb N. Для \mathbf{x}_{j} и построенной f(x) строится признак \mathbf{j}: значения нового признака - значение функции в соответствующей точке отрезка [a_{j},b_{j}]. Если для новой функции f(x) значение S_{\mathbf{L},\mathbf{A}^{*}}(\mathbf{w}) уменьшается, то сохраняется изменение x_{i}. Здесь \mathbf{A}^{*} = \mathbf{A}\cup\mathbf{j}. Алгоритм заканчивает работу по достижении первого минимума.

Группировка категорий

Пусть номинальный признак \mathbf{x}_{i} принимает значения из множества категорий \tex\{1,\ldots,c\}. Ему в соответствие ставится множество \Gamma такое, что 1 \le |\Gamma| \le c. Требуется найти такую сюръективную функцию h_{\Gamma}:\{1,\ldots,c\}\to\Gamma и соответствующее ей множество \Gamma = \{1,\ldots,c^{*}\}, которая минимизирует функцию S_{\mathbf{T},\mathbf{A}^{*}(\mathbf{w}). Здесь \mathbf{A}^{*} = \mathbf{A}\cup\mathbf{j}, а \mathbf{j} - номинальный признак, принимающий значения из \tex\{h_{\Gamma}(1),\ldots,h_{\Gamma}(c)\}. В данном случае признаков и категорий достаточно мало, поэтому эффективен полный перебор.


Также предлагается один из классических методов группировки категорий, описанный в книге Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. Для этого сначала для каждого значения номинального признака считается его WOE (Weight of evidence) по формуле: WOE = 100* \ln(\frac{Distr Good}{Distr Bad}), где Distr Good , например, - отношение числа людей, которым выдали кредит, имевших данное значение номинального признака, к общему числу людей, которым выдали кредит. Distr Bad - отношение числа людей, которым не выдали кредит, имевших данное значение номинального признака, к общему числу людей, которым не выдали кредит. Теперь пусть некоторый номинальный признак под номером j принимает значения \tex\{1,\ldots,n_{j}\}. Для него нужно рассчитать IV(Information Value) по формуле:  IV = \sum_{i = 1}^{n_j}(Distr Good_{i} - Distr Bad_{i})* \ln(\frac{Distr Good_{i}}{Distr Bad_{i}}). Для признаков с самыми большими значениями IV в одну группу объединяются категории с близкими значениями WOE. При таком подходе важно задать условия близости значений WOE и количество группируемых категорий.

Вычислительный эксперимент

Показана работа алгоритма на реальных данных.

Описание данных

Используются реальные данные (GERMAN_UIC) о выдаче или не выдаче банком кредитов. Всего приведены 24 признака для 1000 человек и информация о том, выдан ли впоследствии кредит.

Визуализация результатов

На первом шаге из данных выбраны активные признаки, используемые в дальнейшем в регрессионной модели. Всего было выбрано 5 номинальных признаков.

Пример группировки номинальных признаков

Ко множеству активных признаков добавляется один номинальный признак. Его категории группируется двумя способами. Результаты группировки сравниваются.

ROC - кривая

Изображение:Last_grouping.png

Исследование свойств алгоритма

Численное сравнение.

New grouping Classical grouping
S(w) 147.0040 149.1568
AUC 0.91343 0.91001

Видно, что по обоим параметрам переборная группировка несколько превосходит классическую. Тем не менее небольшие отклонения в значениях связаны с тем, что достаточно большой вклад в оба параметра дают активные признаки. Тем самым значение одного группируемого признака в модели снижается. Также ясно, что классический метод дает достаточно хорошую группировку при минимальной вычислительной сложности.

Пример сегментации линейного признака

Как и ранее выбираются активные номинальные признаки. Потом к ним добавляется линейный признак и находится сначала оптимальное число сегментов, а затем и сама оптимальная сегментация. Поиск оптимумов основывается на минимизации S(w) на контроле. Затем производится эксперимент, в котором множество активных признаков пусто. Результаты заносятся в таблицу.

ROC - кривая

На графиках изображено сравнение двух методов сегментации. В первом случае сегментация производится для модели вместе с активными признаками. Во втором случае сегментация признака производится без активных признаков, а затем сегментированный признак прибавляется ко множеству активных признаков.

Изображение:Last_Segmentation.png

Оптимальная сегментация

Перебором дискретных значений длины шага получается, что при начальной длине шага сегментации равной 2.0 в среднем получается наименьшее значение S(w). Результат имеет наглядную интерпретацию. Малая длина шага сегментации дает большую независимость значений признака, там самым можно получить лучшее значение S(w) на контроле. Однако очень малый начальный шаг сегментации часто создает случаи, когда алгоритм сходится не к самому оптимальному решению. Это связано с тем, что небольшие изменения длины такого шага практически не изменяют S(w) на контроле и тем самым заставляют его остановить поиск раньше времени.

Описание результатов

Численные данные.

Segmentation Segmentation w/o active
AUC 0.89215 0.88382

Оптимально сегментированный линейный признак улучшает регрессионную модель. С точки зрения значения S(w) на контроле, при пустом множестве активных признаков значение хуже. Однако с точки зрения AUC модели практически неотличимы. Можно сделать вывод о том, что сегментация линейного признака без участия активных признаков оправдана.

Исходный код

  • Исходный код Matlab

Смотри также

  1. Машинное обучение (курс лекций, К.В.Воронцов)
  2. Логистическая регрессия (пример)
  3. Логистическая функция
  4. Регрессионный анализ
  5. Алгоритм Ньютона-Рафсона
  6. Метод наименьших квадратов

Литература

  • Siddiqi N. Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. John Wiley & Sons, Inc. 2006
  • Bishop C. Pattern Recognition And Machine Learning. Springer. 2006.
  • D. W. Hosmer, S. Lemeshow. Applied logistic regression. Wiley, New York, 2000.
Данная статья была создана в рамках учебного задания.
Студент: Участник:Никита Животовский
Преподаватель: В.В. Стрижов
Срок: 24.11.2010


В настоящее время задание завершено и проверено. Данная страница может свободно правиться другими участниками проекта MachineLearning.ru.

См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе.

Личные инструменты