Метод случайного леса в скоринге

16
Случайный лес представляет собой ансамбль (комитет) решающих деревьев классификации или регрессии, которые строятся по бутстреп- выборкам из исходного обучающего множества (метод бэггинга Лео Бреймана). При этом для разбиения узла в каждом дереве исполь- зуется фиксированный набор не всех, а лишь случайно отобранных признаков (метод случайных подпространств Хо). Для выбора наи- лучшего из этих признаков используется либо критерий Джини, либо критерий прироста информации. Дерево строится до полного исчерпания подвыборки. Каждое дерево комитета относит класси- фицируемый объект к одному из классов, и побеждает класс, за который проголосовало наибольшее число деревьев. Математически алгоритм случайного леса можно описать сле- дующим образом. Для i = 1, 2, …, N (где N — количество деревьев в ансамбле): — извлекаем бутстреп-выборку B, то есть случайную подвыборку (того же объема, что и исходная обучающая выборка) с возвраще- нием из обучающей выборки; — по бутстреп-выборке B строим полное дерево T i , рекурсивно повторяя следующие шаги для каждого терминального узла, пока не будет достигнуто минимальное количество наблюдений в нем: • из первоначального набора M предикторов случайно выбираем m предикторов; • из m предикторов выбираем предиктор, который обеспечивает наилучшее расщепление; • расщепляем узел на два узла-потомка. Метод случайного леса в скоринге А.В. ГруздеВ, исследовательская компания «Гевисста», директор Метод случайного леса (random forest) часто называют «усовер- шенствованной реализацией» метода деревьев решений, ведь теперь для получения более точного прогноза и классификации используется уже не одно дерево, а комитет деревьев. Метод быстро набрал популярность в силу сравнительной простоты настройки и запуска процедуры анализа. В данной статье мы рассмотрим важнейшие этапы построения прогнозной модели с помощью метода случайного леса на базе программного пакета R. 28 Риск-менеджмент в кредитной организации № 1 (13) \ 2014 Анализ и оценка

description

Statistical methods

Transcript of Метод случайного леса в скоринге

Page 1: Метод случайного леса в скоринге

Случайный лес представляет собой ансамбль (комитет) решающих деревьев классификации или регрессии, которые строятся по бутстреп-выборкам из исходного обучающего множества (метод бэггинга Лео Бреймана). При этом для разбиения узла в каждом дереве исполь-зуется фиксированный набор не всех, а лишь случайно отобранных признаков (метод случайных подпространств Хо). Для выбора наи-лучшего из этих признаков используется либо критерий Джини, либо критерий прироста информации. Дерево строится до полного исчерпания подвыборки. Каждое дерево комитета относит класси-фицируемый объект к одному из классов, и побеждает класс, за который проголосовало наибольшее число деревьев.

Математически алгоритм случайного леса можно описать сле-дующим образом. Для i = 1, 2, …, N (где N — количество деревьев в ансамбле):

— извлекаем бутстреп-выборку B, то есть случайную подвыборку (того же объема, что и исходная обучающая выборка) с возвраще-нием из обучающей выборки;

— по бутстреп-выборке B строим полное дерево Ti, рекурсивно повторяя следующие шаги для каждого терминального узла, пока не будет достигнуто минимальное количество наблюдений в нем:

• из первоначального набора M предикторов случайно выбираем m предикторов;

• из m предикторов выбираем предиктор, который обеспечивает наилучшее расщепление;

• расщепляем узел на два узла-потомка.

Метод случайного леса в скоринге

А.В. ГруздеВ,

исследовательская

компания «Гевисста»,

директор

Метод случайного леса (random forest) часто называют «усовер-шенствованной реализацией» метода деревьев решений, ведь теперь для получения более точного прогноза и классификации используется уже не одно дерево, а комитет деревьев. Метод быстро набрал популярность в силу сравнительной простоты настройки и запуска процедуры анализа. В данной статье мы рассмотрим важнейшие этапы построения прогнозной модели с помощью метода случайного леса на базе программного пакета R.

28

Риск-менеджмент в кредитной организации № 1 (13) \ 2014

Анализ и оценка

Page 2: Метод случайного леса в скоринге

В результате получаем ансамбль деревьев решений }{ 1.

N

i iT

=

Далее происходит агрегация прогнозов по всем деревьям и выда-ется итоговый результат (для классификации — класс, за который проголосовало большинство деревьев; для регрессии — значение, усредненное по всем деревьям).

Оценка качества случайного леса производится с помощью метода OOB (out-of-bag observations, или «наблюдения, не попавшие в вы -бо рку»). Каждая бутстреп-выборка не содержит примерно 37% наблю-дений исходной обучающей выборки. Это обусловлено тем, что, поскольку выборка с возвращением, некоторые наблюдения попа-дают в нее несколько раз, а некоторые не попадут в нее вообще. Наблюдения, не попавшие в выборку, используются для оценки ошибки прогноза.

Например, классифицируем наблюдение x. Для классификации используются только деревья решений, которые строились по бутстреп-выборкам, не содержащим x (out-of-bag-выборкам), и затем проводится голосование деревьев.

В итоге доля наблюдений обучающей выборки, ошибочно клас-сифицированных деревьями, построенными по out-of-bag-выборкам, является оценкой качества случайного леса (ошибкой out-of-bag, или OOB-ошибкой).

На практике оценка ошибки out-of-bag имеет высокую точность, когда количество деревьев достаточно велико. Поэтому необходимо настраивать точность модели, увеличивая количество деревьев, пока ошибка out-of-bag не перестанет уменьшаться. Следует отме-тить, что если при увеличении числа деревьев происходит значи-тельное уменьшение точности прогноза, это может говорить о пло-хом качестве выборки, о присутствии значительного шума. Подоб-ное явление часто наблюдается на небольших выборках.

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

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

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

Удобство метода случай-

ного леса заключается

в том, что в настройке

нуждаются всего два

параметра: количество

деревьев в ансамбле

и количество случайно

отбираемых перемен-

ных.

29

www.reglament.net

ошибка out-of-bag \ индекс Джини \ бутстреп-выборка

Метод случайного леса в скоринге

Page 3: Метод случайного леса в скоринге

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

Для определения количества случайно отбираемых переменных Л. Брейман предложил последовательно брать три значения, при-веденные в таблице.

для классификации для регрессии

Число переменных по умолчанию, деленное пополам 0,5m M= 0,5( / 3)m M=

Число переменных по умолчанию m M= / 3m M=

Удвоенное число переменных по умолчанию 2m M= 2( / 3)m M=

Таблица

Значения для определения количества случайно отбираемых переменных

Примечание: m — случайно отбираемое число переменных, M — общее число переменных в наборе.

Затем необходимо выбрать наилучшее m с точки зрения получен-ных результатов. Например, для набора из 100 переменных (M) необ-ходимо протестировать m = 5, 10, 20.

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

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

Сначала строим лес и рассчитываем оценку ошибки out-of-bag. Затем в out-of-bag-выборках для каждого дерева осуществляем слу-чайную перестановку значений предиктора xi. Потом рассчитываем оценку ошибки out-of-bag в OOB-выборках с перестановленными значениями предиктора xi. В итоге вычисляем разность между ошиб-ками out-of-bag до и после перестановки значений предиктора xi, усредненную по всем деревьям.

Логическое объяснение данного алгоритма состоит в следующем: случайно переставляя значения предиктора xi, мы разрушаем вза-

30

Риск-менеджмент в кредитной организации № 1 (13) \ 2014

Анализ и оценка

Page 4: Метод случайного леса в скоринге

имосвязь между предиктором и целевой переменной y. При исполь-зовании перестановленных значений предиктора (вместе с непере-становленными значениями остальных предикторов) для прогно-зирования отклика по данным out-of-bag прогностическая точность (т.е. число правильно классифицированных наблюдений) существенно уменьшается, если между исходным предиктором и целевой пере-менной была зависимость.

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

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

Историческая выборка — данные о 6424 клиентах, которым было разослано предложение приобрести новую банковскую карту.

Независимые переменные:— наличие ипотечного кредита (mortgage);— наличие полиса страхования жизни (life_ins);— наличие кредитной карты (cre_card);— наличие дебетовой карты (deb_card);— наличие сервиса «Мобильный банк» (mob_bank);— наличие текущего счета в банке (curr_acc);— наличие интернет-доступа к счету (internet);— наличие кредита в банке (perloan);— наличие сберегательного счета в банке (savings);— пользование банкоматом в течение последней недели (atm_

user);— достижение лимита по овердрафту в течение последнего года

(odrftlim);— возраст, в годах (age);— срок пользования услугами банка (cus_leng).Зависимая переменная — отсутствие/наличие у клиента готов-

ности приобрести новую банковскую карту (Accept_Cashcard). При-нимает значение 0 — отсутствие готовности (неперспективный кли-ент) или 1 — наличие готовности (перспективный клиент).

31

www.reglament.net

ошибка out-of-bag \ индекс Джини \ бутстреп-выборка

Метод случайного леса в скоринге

Page 5: Метод случайного леса в скоринге

Данные о 6424 клиентах содержатся в учебном файле forest.csv.

Запустите программу R. Теперь мы должны прочитать учебный файл forest.csv, указав путь к нему:> read.csv2(“C:/data/forest.csv”)

Результату операции присвоим имя data, чтобы начать работу с данными в R:> data <- read.csv2(“C:/data/forest.csv”)

Зададим типы переменных для анализа:> data$mortgage <-as.factor(data$mortgage)data$life_ins <-as.factor(data$life_ins)data$cre_card <-as.factor(data$cre_card)data$deb_card <-as.factor(data$deb_card)data$mob_bank <-as.factor(data$mob_bank)data$curr_acc <-as.factor(data$curr_acc)data$internet <-as.factor(data$internet)data$perloan <-as.factor(data$perloan)data$savings <-as.factor(data$savings)data$atm_user <-as.factor(data$atm_user)data$odrftlim <-as.factor(data$odrftlim)data$age <-as.numeric(data$age)data$cus_leng <-as.factor(data$cus_leng)data$Accept_Cashcard <-as.factor(data$Accept_Cashcard)

Для отображения структуры данных выбираем команду:> str(data)

Протокол расчетов 1

Структура данных

Получаем информацию о данных.

Теперь необходимо указать тип переменных, которые будут исполь-зованы для анализа. Для количественных переменных нужно вос-пользоваться функцией as.numeric, а для категориальных — функ-цией as.factor.

Проверим, как теперь выглядят переменные.

‘data.frame’: 6424 obs. of 14 variables: $ mortgage : Factor w/ 2 levels “0”,“1”: 1 2 2 2 2 2 1 2 2 1 ... $ life_ins : Factor w/ 2 levels “0”,“1”: 1 2 2 2 2 2 2 2 2 2 ... $ cre_card : Factor w/ 2 levels “0”,“1”: 1 1 1 1 2 1 2 2 2 2 ...

32

Риск-менеджмент в кредитной организации № 1 (13) \ 2014

Анализ и оценка

Page 6: Метод случайного леса в скоринге

Протокол расчетов 1 показывает, что переменная age является количественной, а все остальные переменные являются категори-альными (факторами).

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

Разбиваем данные так, чтобы на обучающую выборку приходилось 70% наблюдений, а на тестовую — 30%:>ind <- sample(2,nrow(data),replace=TRUE,prob=c(0.7,0.3))train <- data[ind==1,]test <- data[ind==2,]

Посмотрим на обучающую выборку:>str(train)

Посмотрим на тестовую выборку:>str(test)

Протокол расчетов 2

Структура обучающей выборки (фрагмент)

Протокол расчетов 3

Структура тестовой выборки (фрагмент)

'data.frame': 4476 obs. of 14 variables: $ mortgage : Factor w/ 2 levels “0”,“1”: 1 2 2 2 2 2 1 2 1 2 ... $ life_ins : Factor w/ 2 levels “0”,“1”: 1 2 2 2 2 2 2 2 2 2 .... . . . . . . .

$ deb_card : Factor w/ 2 levels “0”,“1”: 1 1 2 2 2 2 2 2 1 1 ... $ mob_bank : Factor w/ 2 levels “0”,“1”: 1 1 1 1 1 1 2 1 1 1 ... $ curr_acc : Factor w/ 2 levels “0”,“1”: 1 2 1 1 2 2 1 2 2 2 ... $ internet : Factor w/ 2 levels “0”,“1”: 1 1 1 1 1 1 1 2 1 2 ... $ perloan : Factor w/ 2 levels “0”,“1”: 1 1 1 1 1 1 1 1 1 1 ... $ savings : Factor w/ 2 levels “0”,“1”: 1 1 1 1 1 1 1 2 1 1 ... $ atm_user : Factor w/ 2 levels “0”,“1”: 1 2 2 2 1 1 2 2 1 1 ... $ odrftlim : Factor w/ 2 levels “0”,“1”: 1 2 1 2 1 2 2 2 2 2 ... $ age : num 18 18 18 18 18 18 18 18 18 18 ... $ cus_leng : Factor w/ 3 levels “1”,“2”,“3”: 1 2 1 3 2 2 2 2 2 2 ... $ Accept_Cashcard: Factor w/ 2 levels “0”,“1”: 1 2 2 1 2 2 1 2 2 2 ...

Убедимся, что разбиение было выполнено.

'data.frame': 1948 obs. of 14 variables: $ mortgage : Factor w/ 2 levels “0”,“1”: 2 2 2 2 2 2 2 1 2 2 ... $ life_ins : Factor w/ 2 levels “0”,“1”: 2 2 2 2 2 2 2 2 2 2 .... . . . . . . .

33

www.reglament.net

ошибка out-of-bag \ индекс Джини \ бутстреп-выборка

Метод случайного леса в скоринге

Page 7: Метод случайного леса в скоринге

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

Загрузим пакет randomForest, воспользовавшись следующей командой:> library(randomForest)

Построим на обучающей выборке модель случайного леса по всем исходным предикторам, изменив при этом пороговое значение для подгонки модели:> model.train<-randomForest(Accept_Cashcard ~., data=train)

Выведем результаты прогнозов, полученные с помощью модели на обучающей выборке:> table(predict(model.train),train$Accept_Cashcard)

Построение модели случайного лесаЧтобы построить модель дерева решений, необходимо задать команду:randomForest(formula, data=, ntree=, mtry=), где:

formula= Задает формулу в формате:Зависимая переменная ~ Предиктор1 + Предиктор2 + Предиктор3 + др.Если в качестве предикторов будут использоваться все имеющиеся независимые переменные, можно задать формулу Зависимая переменная ~

data= Задает набор данных для анализаntree= Задает количество деревьев в ансамбле. Значение по умолчанию 500mtry= Задает количество переменных (признаков), случайно отбираемых

при разбиении.Значение по умолчанию различно для классификации и регрессии. Для классификации m M= , для регрессии / 3m N=

do.trace= 'TRUE' — выводит для каждого дерева в ансамбле оценку прогностической точности и результаты классификации. Также можно задать конкретное значение.Например, do.trace=100 обозначает, что по каждым построенным 100 деревьям будут выводиться оценка точности и результаты классификации

Протокол расчетов 4

Результаты прогнозов модели на обучающей выборкеCall:roc.default(response = data$default, predictor = predict(model2, type = “prob”)[, 1], ci = TRUE)

Data: predict(model2, type = “prob”)[, 1] in 517 controls (data$default 0) > 183 cases (data$default 1).Area under the curve: 0.869995% CI: 0.8374-0.9024 (DeLong)

34

Риск-менеджмент в кредитной организации № 1 (13) \ 2014

Анализ и оценка

Page 8: Метод случайного леса в скоринге

Параметр Number of trees показывает количество деревьев в ансамбле.No. of variables tried at each split показывает количе-

ство переменных, рассматриваемых в качестве кандидатов при каждом разбиении.

OOB estimate of error rate — это прогностическая точность модели.

Confusion matrix — матрица ошибок, допущенных при класси-фикации.

Согласно матрице ошибок (рис. 1), из 2587 неперспективных кли-ентов классификатор правильно выявил 2206, а 381 неперспективный клиент ошибочно отнесен к перспективным. Поэтому ошибка про-гноза для неперспективных клиентов составила 381 / 2587 = 0,147,

Выведем информацию о модели, построенной на обучающей выборке:> print(model.train)

Протокол расчетов 5

Оценка прогностической точности модели, построенной на обучающей выборкеCall: randomForest(formula = Accept_Cashcard ~ ., data = train) Type of random forest: classification Number of trees: 500No. of variables tried at each split: 3

OOB estimate of error rate: 18.5%Confusion matrix: 0 1 class.error0 2206 381 0.14727481 447 1442 0.2366331

Рисунок 1

Структура матрицы ошибок

Спрогнозированные категории

Процентыневерныхпрогнозов

по категориямНеверно спрогнозированные

наблюдения

Фактическиекатегории

35

www.reglament.net

ошибка out-of-bag \ индекс Джини \ бутстреп-выборка

Метод случайного леса в скоринге

Page 9: Метод случайного леса в скоринге

или 14,7%. Из 1889 перспективных клиентов классификатор правильно выявил 1442, а 447 перспективных клиентов ошибочно отнесены к неперспективным. Поэтому ошибка прогноза для перспективных клиентов составила 447 / 1889 = 0,236, или 23,6%.

Построим на тестовой выборке модель случайного леса по всем исходным предикторам, изменив при этом пороговое значение для подгонки модели:> model.test<-randomForest(Accept_Cashcard ~., data=test)

Выведем результаты прогнозов, полученные с помощью модели на тестовой выборке:> table(predict(model.test),test$Accept_Cashcard)

Выведем информацию о модели, построенной на тестовой выборке:> print(model.test)

Протокол расчетов 6

Результаты прогнозов модели на тестовой выборке

Протокол расчетов 7

Оценка прогностической точности модели, построенной на тестовой выборкеCall: randomForest(formula = Accept_Cashcard ~ ., data = test) Type of random forest: classification Number of trees: 500No. of variables tried at each split: 3

OOB estimate of error rate: 16.94%Confusion matrix: 0 1 class.error0 923 144 0.13495781 186 695 0.2111237

0 10 923 1861 144 695

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

36

Риск-менеджмент в кредитной организации № 1 (13) \ 2014

Анализ и оценка

Page 10: Метод случайного леса в скоринге

Попытаемся повысить прогностическую точность модели, построенной на обучающей выборке, за счет использования большего количества деревьев в ансамбле:> model2.train<-randomForest(Accept_Cashcard ~., data=train, ntree=1500)

Выведем информацию по новой модели:> print(model2.train)

Зависимость ошибки прогноза от количества деревьев можно вывести в табличном виде:> model2.train<-randomForest(Accept_Cashcard ~., data=train, ntree=1500, do.trace=100)

Протокол расчетов 8

Оценка прогностической точности модели, построенной на обучающей выборке (ntree=1500)

Протокол расчетов 9

Пошаговая оценка прогностической точности модели (1 шаг = 100 деревьев)

Call: randomForest(formula = Accept_Cashcard ~ ., data = train, ntree = 1500) Type of random forest: classification Number of trees: 1500No. of variables tried at each split: 3

OOB estimate of error rate: 18.23%Confusion matrix: 0 1 class.error0 2206 381 0.14727481 435 1454 0.2302806

ntree OOB 1 2 100: 18.45% 14.80% 23.45% 200: 18.61% 14.92% 23.66% 300: 18.61% 14.80% 23.82% 400: 18.48% 14.69% 23.66% 500: 18.59% 14.69% 23.93% 600: 18.43% 14.80% 23.40% 700: 18.28% 14.61% 23.29% 800: 18.32% 14.73% 23.24% 900: 18.41% 14.84% 23.29% 1000: 18.54% 15.00% 23.40% 1100: 18.45% 14.84% 23.40% 1200: 18.50% 14.92% 23.40% 1300: 18.43% 14.88% 23.29% 1400: 18.45% 14.92% 23.29% 1500: 18.57% 15.08% 23.35%

37

www.reglament.net

ошибка out-of-bag \ индекс Джини \ бутстреп-выборка

Метод случайного леса в скоринге

Page 11: Метод случайного леса в скоринге

Рисунок 2 показывает зависимость ошибок прогнозов (OOB-оши б- ки и ошибок прогнозов по категориям) от количества деревьев. На нем видно, как по мере роста количества деревьев ошибка прогноза зна-чительно уменьшается, выравнивается, на каком-то участке стано-вится постоянной, а затем начинает незначительно возрастать. Это в целом позволяет сделать вывод о том, что прогностическая способ-ность увеличивается по мере построения определенного числа дере-вьев, а при превышении данного числа она может уменьшаться.

Повысить качество модели можно также за счет выбора опти-мального числа переменных, рассматриваемых в качестве канди-датов при каждом разбиении.

Теперь выведем график зависимости прогностической точности модели от количества деревьев в ансамбле:> plot(model2.train)

Оценим прогностическую точность в зависимости от числа переменных для разбиения (рис. 3):> tuneRF(x=train[, -14], y=train$Accept_Cashcard, trace=FALSE)

Рисунок 2

График зависимости прогностической точности от количества деревьев в ансамбле

Протокол расчетов 10

Зависимость прогностической точности от количества переменных для разбиения0.02517986 0.05 -0.09592326 0.05

0,28

0,26

0,24

0,22

0,20

0,18

0,16

0,140 500 1000 1500

Err

or

Trees

38

Риск-менеджмент в кредитной организации № 1 (13) \ 2014

Анализ и оценка

Page 12: Метод случайного леса в скоринге

Наименьшее значение OOB-ошибки наблюдается для mtry=2. Заметим, что оно отличается от значения mtry=3, автоматически выбранного в ходе расчетов.

Попробуем повысить качество модели за счет увеличения коли-чества деревьев в ансамбле и оптимального числа предикторов для разбиения. Согласно протоколу расчетов 9 наименьшая OOB-ошибка наблюдается для ntree=700. А согласно протоколу расчетов 10 наи-меньшая OOB-ошибка наблюдается для mtry=2. Используем эту информацию.

Построим на обучающей выборке модель, использовав 700 деревьев в ансамбле и задав количество предикторов для разбиения, равное 2:> model3.train<-randomForest(Accept_Cashcard ~., data=train, ntree=700, mtry=2)

Выведем информацию по новой модели:> print(model3.train)

Рисунок 3

График зависимости прогностической точности от количества переменных для разбиения

Протокол расчетов 11

Оценка прогностической точности модели, построенной на обучающей выборке (ntree=700, mtry=2)

mtry OOBError2.OOB 2 0.18163543.OOB 3 0.18632716.OOB 6 0.2042002

Call: randomForest(formula = Accept_Cashcard ~ ., data = train, ntree

0,205

0,200

0,195

0,190

0,185

2 3 6

OO

B e

rror

mtry

39

www.reglament.net

ошибка out-of-bag \ индекс Джини \ бутстреп-выборка

Метод случайного леса в скоринге

Page 13: Метод случайного леса в скоринге

По сравнению с исходной данная модель обладает большей про-гностической способностью. OOB-ошибка незначительно уменьши-лась: с 18,5 до 18,1%.

= 700, mtry = 2) Type of random forest: classification Number of trees: 700No. of variables tried at each split: 2

OOB estimate of error rate: 18.16%Confusion matrix: 0 1 class.error0 2212 375 0.14495551 438 1451 0.2318687

Теперь построим на тестовой выборке модель с теми же параметрами:> model3.test<-randomForest(Accept_Cashcard ~., data=test, ntree=700, mtry=2)

Выведем информацию по новой модели:> print(model3.test)

Теперь проанализируем важность предикторов с точки зрения влияния на зависимую переменную:> importance(model3.train)

Протокол расчетов 12

Оценка прогностической точности модели, построенной на тестовой выборке (ntree=700, mtry=2)Call: randomForest(formula = Accept_Cashcard ~ ., data = test, ntree = 700, mtry = 2) Type of random forest: classification Number of trees: 700No. of variables tried at each split: 2

OOB estimate of error rate: 16.74%Confusion matrix: 0 1 class.error0 924 143 0.13402061 183 698 0.2077185

OOB-ошибка на тестовой выборке меньше, чем OOB-ошибка на обучающей выборке (16,74 и 18,16%). Поэтому можно сделать вывод, что модель не является переобученной.

40

Риск-менеджмент в кредитной организации № 1 (13) \ 2014

Анализ и оценка

Page 14: Метод случайного леса в скоринге

В протоколе для каждого предиктора приводится MeanDecreaseGini — среднее уменьшение индекса Джини. Чем выше уменьшение индекса Джини для независимой переменной, тем больше она влияет на распределение классов в зависимой переменной. В нашем примере наиболее значимыми предикторами оказались срок пользования услугами банка, возраст и пользование банкоматом в течение послед-ней недели.

Теперь графически покажем динамику уменьшения индекса Джини по предикторам (рис. 4):> varImpPlot(model3.train)

Протокол расчетов 13

Важность переменных MeanDecreaseGinimortgage 42.65514life_ins 21.84210cre_card 96.58084deb_card 12.50597mob_bank 36.09066curr_acc 60.19040internet 13.02134perloan 10.54343savings 14.98404atm_user 184.94247odrftlim 85.91273age 193.70217cus_leng 315.58970

Рисунок 4

Динамика уменьшения индекса Джини по предикторам

cus_lengage

atm_usercre_cardodrftlimcurr_acc

mortgagemob_bank

life_inssavings

internetdeb_card

perloan

0 50 100 150 200 250 300MeanDecreaseGini

41

www.reglament.net

ошибка out-of-bag \ индекс Джини \ бутстреп-выборка

Метод случайного леса в скоринге

Page 15: Метод случайного леса в скоринге

На рис. 5 показана разница в прогнозе для каждого наблюдения. Разница определяется как доля голосов, поданных за правильный класс, минус максимальная доля голосов, поданных за другие классы. Например, возьмем наблюдение x, принадлежащее классу K. Из 100 деревьев 80 верно проголосовало за класс K, а остальные 20 деревьев проголосовали за класс L. По правилу большинства для наблюдения x верно спрогнозирован класс K. Разброс равен (80 – 20) / 100 = 0,4. Нетрудно догадаться, что положительные значения по вертикальной оси означают корректные прогнозы, а отрицательные значения — ошибочные.

Графически представим результаты прогноза модели, построенной на обучающей выборке (рис. 5):> plot(margin(model3.train,train$Accept_Cashcard))

Посмотрим на результаты прогноза модели:> predict(model3.train, type=“prob”)

Рисунок 5

График спрогнозированных значений для модели, построенной на обучающей выборке (ntree=700, mtry=2)

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

Протокол расчетов 14

Спрогнозированные вероятности по наблюдениям (фрагмент) 0 11 0.044776119 0.9552238812 0.618110236 0.381889764

1,0

0,5

0

–0,5

–1,00

X

1000 2000 3000 4000Index

42

Риск-менеджмент в кредитной организации № 1 (13) \ 2014

Анализ и оценка

Page 16: Метод случайного леса в скоринге

ВыводыВ настоящей статье мы применили метод случайного леса для оценки готовности клиента воспользоваться банковской картой. Также данный метод можно успешно применять для прогноза дефолта заемщиков. Главным достоинством метода является не только точность получаемых моделей, но и сравнительная легкость настройки. Необходимо определить два параметра: число деревьев и количество предикторов для разбиения, при которых наблюдается наименьшая ошибка прогноза. Здесь же заметим, что метод уже включает в себя механизм валидации (вычисление OOB-ошибки). Вместе с тем случайный лес не должен рассматриваться как альте р - натива логистической регрессии. Построение скоринговой карты с помощью случайного леса не совсем удобно, хотя и может быть реализуемо на основе значений важности, вычисляемых для каж-дого предиктора. Важно другое: метод случайного леса позволяет выявить сложные нелинейные взаимосвязи между независимыми переменными, которые упускаются из вида при применении логи-стической регрессии. Таким образом, результаты метода могут быть использованы для ревизии профиля риска, уже построенного классическим способом.

Результату операции присвоим имя result, чтобы можно было работать с вычисленными вероятностями:> result <- predict(model3.train, type=“prob”)

Для удобства интерпретации можно округлить вычисленные вероятности до второго знака после запятой:> round(result, digits=2)

Протокол расчетов 15

Округленные спрогнозированные вероятности по наблюдениям (фрагмент) 0 11 0.04 0.962 0.62 0.383 0.05 0.95. . . . . . . .

3 0.047058824 0.952941176. . . . . . . . . . . . . . .

43

www.reglament.net

ошибка out-of-bag \ индекс Джини \ бутстреп-выборка

Метод случайного леса в скоринге