Часть 1 из серии статей о моделях машинного / глубокого обучения на практике

Большой! Итак, вы завершили конвейер машинного обучения (ML), надеюсь, выбрали параметры настройки для каждой модели с помощью процедуры тщательной проверки и сошлись на том, что, по вашему мнению, является окончательной моделью для каждой стратегии. Что дальше? В первой части этой серии я расскажу о некоторых показателях и графиках за пределами области под кривой ROC, которые могут быть полезны в достижении целей нашего проекта. Иногда, как исследователям данных, наше туннельное видение данных и моделирования или, по крайней мере, такое восприятие нас другими людьми может ограничить нашу потенциальную эффективность как коммуникаторов и разработчиков стратегии. Элементы, которые я продемонстрирую в этих статьях, помогут вам увидеть проблемы, над которыми вы работаете, глазами вашего соавтора, и предоставят вам конкретные способы решения их проблем и целей в вашей работе по машинному обучению. В частности, в этой статье мы:

  1. Обсудите, почему важна объединяющая структура для изучения важности переменных в машинном обучении!
  2. Отобразите код R для создания графика переменной важности с использованием результатов группы моделей машинного обучения.

Важность переменной важности

Надеюсь, вы уже понимаете, насколько важно пробовать разные подходы при решении задачи прогнозирования. Подбор моделей различной сложности (например, как линейных, так и нелинейных) позволяет определить наиболее экономную модель, обеспечивающую хорошие характеристики прогнозирования данных, с которыми мы работаем. Однако оборотной стороной преимуществ, связанных с применением различных моделей, может быть очевидная трудность сравнения результатов этих расходящихся стратегий. А как насчет предикторов, которые использовались для соответствия моделям - как их оценить, чтобы определить, что было важным? Как специалист по данным, я призываю вас найти эксперта в предметной области, который, хотя вы можете предложить модель, которая достаточно хорошо предсказывает, не будет интересоваться тем, что происходит под капотом! Ваша окончательная модель может иметь прямую интерпретацию коэффициентов параметров, например, для линейной модели, но это не всегда так для более сложных нелинейных стратегий. К счастью, хотя модели имеют разные стратегии параметризации и оптимизации, относительная важность переменных является объединяющей концепцией, которая позволяет проводить сравнения функций в разных моделях. Более подробную информацию о том, как вычисляется важность для различных моделей, можно найти в Applied Predictive Modeling (http://appliedpredictivemodeling.com) Макса Куна и Кьелла Джонсона, и они могут быть реализованы в пакете каретки в R.

В основном унификация достигается таким образом: хотя важность переменной определяется по-разному для каждой модели, единственной наиболее важной переменной для каждой стратегии присваивается оценка 100, например, `` 100 процентов '', так что их можно наиболее точно описать. оценка важности как относительная. Затем следующей важной переменной присваивается относительное значение от 0 до 100, где ее близость к 100 указывает, насколько она близка по важности к первой переменной. Это происходит для всех предикторов, за исключением случая относительно небольшого числа моделей, которые выполняют свой собственный выбор переменных с помощью процедуры подбора модели. Для этих моделей важность переменной равна нулю для любой функции, не включенной в модель.

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

Данные

В этой статье я буду использовать результаты 7 моделей машинного обучения, используемых для анализа данных немецкой кредитной классификации, доступных в пакете R. Он состоит из 1000 наблюдений за людьми, определенными как имеющие хороший (n = 700) или плохой (n = 300) балл. Существует 61 прогнозирующий фактор, который покрывает множество факторов, которые могут иметь отношение к кредитам, такие как характеристики кредита, банковская информация, демографические данные, занятость и т. Д. Данные были разделены на 70% - 30% обучающий - тестовый разбиение, сохраняя 70% Хорошая частота кредитования в обоих. Обратите внимание, что при вычислении важности переменной используются только данные из обучающего набора, который был разделен на 5 наборов CV, повторенных 5 раз, для определения оптимальных параметров настройки. Моделирование было выполнено с использованием пакета Caret в R. Подходящие модели были следующими:

* Линейный дискриминантный анализ (LDA)
* Частичные наименьшие квадраты (PLS)
* Поддержка векторных машин (SVM, с радиальной функцией ядра)
* Нейронная сеть (NN)
* Рекурсивный Разбиение (Rpart, одно дерево)
* Случайные леса (RF)
* Машины с градиентным усилением (GBM)

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

В R меры важности переменных могут быть извлечены из объектов модели курсора с помощью функции varImp (). Здесь, однако, мы возьмем код из файла .csv, содержащего 10 самых важных переменных из каждой модели вместе с их значением важности, так что вы можете присоединиться к коду здесь, в R, если у вас есть такой файл. из другого источника.

require(tidyverse)
require(ggplot2)
require(ggrepel)
varImp_all <- read_csv('varImp.csv')
varImp_all
## # A tibble: 70 x 3
##    model imp_vars                   Importance
##    <chr> <chr>                           <dbl>
##  1 lda   CheckingAccountStatus.lt.0      100  
##  2 lda   CheckingAccountStatus.none       87.8
##  3 lda   InstallmentRatePercentage        54.3
##  4 lda   Duration                         49.9
##  5 lda   CreditHistory.Critical           47.4
##  6 lda   Telephone                        42.2
##  7 lda   SavingsAccountBonds.lt.100       38.7
##  8 lda   OtherInstallmentPlans.None       38.3
##  9 lda   Age                              36.5
## 10 lda   Housing.Own                      34.8
## # … with 60 more rows

На следующих этапах данные обрабатываются для достижения трех измерений, отображаемых на графике:

  1. Количество моделей, в которых данная функция появилась в топ-10
  2. Средний рейтинг функции по моделям
  3. Среднее значение относительной важности функции по моделям
# Variable importance figure
# create rankings for important variables in each model
varImp_all$rank <- sequence(rle(as.character(varImp_all$model))$lengths)
# compute average importance and ranking for all variables
varImpSummary <- aggregate(varImp_all[,3:4], list(varImp_all$imp_vars), mean)
colnames(varImpSummary) <- c('var','avg_imp','avg_rank')
varImpSummary <- varImpSummary %>%
  mutate(avg_imp = round(avg_imp,2),
         avg_rank = round(avg_rank,2))
# count frequency of important variable across models
varImpTable <- data.frame(table(varImp_all$imp_vars))
varImpOrder <- varImpTable[order(varImpTable$Freq, decreasing = T),]
colnames(varImpOrder) <- c("var", "num_models")
varImp_dat <- merge(varImpSummary,varImpOrder)
varImp_dat <- varImp_dat[order(varImp_dat$avg_imp, decreasing = TRUE),]

Ниже приведен код ggplot2. Вероятно, самая сложная часть - это указать размер и цвет в одной легенде. Кроме того, мы меняем обычное направление оси Y на противоположное, чтобы рейтинг единицы был на вершине. Это создаст золотую середину на графике в правом верхнем углу, где будут собираться функции с наивысшим рейтингом по нескольким моделям. Точно так же нижний левый будет представлять наименее важные переменные.

p <- ggplot(varImp_dat, aes(x = num_models, y = avg_rank)) + 
  geom_point(aes(color = avg_imp, size = avg_imp)) + 
  scale_size_continuous(range = c(1,30)) +
  scale_color_gradient(low = "yellow", high = "hotpink", na.value = NA, guide = 'legend') +
  guides(color=guide_legend(reverse = TRUE), size = guide_legend(reverse = TRUE)) +
  scale_y_continuous(trans = "reverse") + 
  labs(title = "Variable Importance Across Models", 
       x = "Number of Models Where Variable Appeared in Top 10", 
       y = "Average Ranking", color = "Average\nImportance", size = "Average\nImportance")

В этом разделе кода графика помечаются предикторы. Функция geom_label_repel () из пакета ggrepel может помочь стратегически позиционировать метки (т. Е. Не поверх друг друга).

p <- p + geom_label_repel(aes(label = var),
                          box.padding   = 0.35, 
                          point.padding = 0.5,
                          segment.size = 0.5,
                          size = 6,
                          segment.color = 'grey50')

И, наконец, некоторые корректировки темы:

p <- p + 
  theme(plot.title = element_text(color="black",face="bold",size=18,hjust=0),
        axis.title = element_text(color="black",face="bold",size=12),
        legend.title = element_text(color="black",face="bold",size=12),
        legend.position = "right",
        axis.text=element_text(size=12))

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

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