Как работать с иерархическими / вложенными данными в машинном обучении

29

Я объясню мою проблему на примере. Предположим, вы хотите предсказать доход человека с учетом некоторых атрибутов: {Возраст, Пол, Страна, Регион, Город}. У вас есть тренировочный набор данных, как так

train <- data.frame(CountryID=c(1,1,1,1, 2,2,2,2, 3,3,3,3), 
             RegionID=c(1,1,1,2, 3,3,4,4, 5,5,5,5), 
             CityID=c(1,1,2,3, 4,5,6,6, 7,7,7,8), 
             Age=c(23,48,62,63, 25,41,45,19, 37,41,31,50), 
             Gender=factor(c("M","F","M","F", "M","F","M","F", "F","F","F","M")),
             Income=c(31,42,71,65, 50,51,101,38, 47,50,55,23))
train
   CountryID RegionID CityID Age Gender Income
1          1        1      1  23      M     31
2          1        1      1  48      F     42
3          1        1      2  62      M     71
4          1        2      3  63      F     65
5          2        3      4  25      M     50
6          2        3      5  41      F     51
7          2        4      6  45      M    101
8          2        4      6  19      F     38
9          3        5      7  37      F     47
10         3        5      7  41      F     50
11         3        5      7  31      F     55
12         3        5      8  50      M     23

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

Теперь предположим, что я хочу предсказать доход нового человека, который живет в Городе 2. В моем тренировочном наборе есть только 1 выборка с Городом 2, поэтому средний доход в Городе 2, вероятно, не является надежным предиктором. Но я, вероятно, могу использовать средний доход в Районе 1.

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

    Age Gender CountrySamples CountryIncome RegionSamples RegionIncome CitySamples CityIncome
 1:  23      M              4         52.25             3        48.00           2    36.5000
 2:  48      F              4         52.25             3        48.00           2    36.5000
 3:  62      M              4         52.25             3        48.00           1    71.0000
 4:  63      F              4         52.25             1        65.00           1    65.0000
 5:  25      M              4         60.00             2        50.50           1    50.0000
 6:  41      F              4         60.00             2        50.50           1    51.0000
 7:  45      M              4         60.00             2        69.50           2    69.5000
 8:  19      F              4         60.00             2        69.50           2    69.5000
 9:  37      F              4         43.75             4        43.75           3    50.6667
10:  41      F              4         43.75             4        43.75           3    50.6667
11:  31      F              4         43.75             4        43.75           3    50.6667
12:  50      M              4         43.75             4        43.75           1    23.0000

Таким образом, цель состоит в том, чтобы как-то объединить средние значения CityIncome, RegionIncome и CountryIncome, используя количество обучающих выборок для каждой, чтобы придать вес / достоверность каждому значению. (В идеале, включая информацию о возрасте и поле.)

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

ОБНОВИТЬ

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

Бен
источник
7
Иерархические байесовские модели очень естественны для использования структуры, как описано в ваших данных. Посмотрите на классический пример моделирования загрязнения радоном mc-stan.org/documentation/case-studies/radon.html
Владислав Довгальец
Взгляните на это учебное задание Kaggle для начинающих: kaggle.com/c/titanic . Он имеет дело с аналогичной проблемой, которая заключается в том, чтобы предсказать, пережил ли человек Титаническую катастрофу, учитывая различные атрибуты о человеке, такие как пол, тип билета и т. Д. В наилучших представленных решениях для этого используются передовые методы, такие как повышение градиента и иерархические байесовские модели. и т.д.
Вихари Пиратла
6
@VihariPiratla Спасибо за ввод, но я знаком с набором данных и задачами Титаника, и я не понимаю, как это связано с проблемой вложенных данных, о которой я спрашивал.
Бен
Использование регуляризации L2 / L1 для этих моделей, например, логистической регрессии / SVM, которая ее выполняет, должно помочь (иерархическая система Бедного человека). фактически вы штрафуете коэффициенты, поэтому, если коэффициент существенно (т.е. для большого количества данных) не исправляет ошибку, он будет установлен близким к нулю. и вы используете перекрестную проверку для определения уровня наказания
seanv507
Вы также хотите иметь возможность прогнозировать доход человека, который живет в городе 9?
jan-

Ответы:

14

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

Позвольте мне сначала представить модели смешанных эффектов для иерархических / вложенных данных и начать с простой двухуровневой модели (выборки, вложенные в города). Для выборки в i-м городе мы записываем результат y i j как функцию от ковариат (список переменных, включая пол и возраст), где - случайный перехват для каждого города, . Если предположить, что и следуют нормальным распределениям со средним 0 и дисперсиями иjiyij у я J = F ( х я J ) + U я + ε я J , U я J = 1 , ... , п я у я ε я J σ 2 U σ 2 U я U я = σ 2 Uxij

yij=f(xij)+ui+ϵij,
uij=1,,niuiϵijσu2σ2эмпирическая байесовская (EB) оценка равна где ,Если мы будем рассматривать Как оценку OLS (обычного наименьшего квадрата) , то EB оценка представляет собой взвешенную сумму 0 и оценку OLS, а вес является возрастающей функцией размера выборки . Окончательный прогноз: гдеUя
U^язнак равноσU2σU2+σ2/Nя(Y¯я,-е(Икс¯я,)),
Y¯я,знак равно1NяΣяNяYяJ( ˉ у я.-е( ˉ х я.))е(Икс¯я,)знак равно1NяΣяNяе(ИксяJ),(Y¯я,-е(Икс¯я,))н я е ( х я J ) + U я , е ( х я J )UяNя
е^(ИксяJ)+U^я,
е^(ИксяJ) - это оценка фиксированного эффекта от метода линейной регрессии или машинного обучения, такого как случайный лес. Это можно легко распространить на любой уровень данных, например, выборки, вложенные в города, а затем в регионы, а затем в страны. Помимо методов на основе дерева, существует метод, основанный на SVM .

Для метода на основе случайного леса, вы можете попробовать MixRF()в нашем пакете R MixRFна CRAN.

Randel
источник
Не могли бы вы объяснить, почему перехват может изменяться в зависимости от , но имеет один набор параметров для всех ? Это упрощающее предположение, чтобы избежать переоснащения или сделать проблему более понятной? ф яяея
user20160
@ user20160 Да, мы называем часть как часть с фиксированными эффектами, а как случайный эффект. У нас также может быть несколько случайных уклонов, таких как но следует ограничить количество случайных уклонов, поскольку это приведет к большому количеству компонентов дисперсии в ковариационная матрица случайных эффектов, если она неструктурирована. у я хеUяИксяJ'Uя,
Рандел
6

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

Если бы у вас было большое количество предикторов, пример RF, основанный на подходе EM, упомянутом @Randel, наверняка был бы вариантом. Еще один вариант, который я еще не видел, - это использование бустинга на основе моделей (доступно через пакет mboost в R ). По сути, этот подход позволяет вам оценить функциональную форму ваших фиксированных эффектов с использованием различных базовых обучающихся (линейных и нелинейных), а оценки случайных эффектов аппроксимируются с использованием штрафа на основе гребня для всех уровней в этом конкретном факторе. Этот документ является довольно хорошим учебником (ученики по случайным эффектам обсуждаются на странице 11).

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

dmartin
источник
1
+1 за представление mboostпакета.
Рандел
В реальных данных я работаю , имеют гораздо больше , чем две переменные , которые добавляют много реального беспорядок , который не подобран моим простого примером (например , нелинейность, созависимость, пропущенные значения, категориальные значения и т.д.) , По моему опыту, ученики, работающие на основе дерева, лучше всего справляются со всей реальной неразберихой, поэтому я склоняюсь к их использованию. (Есть причина, по которой XGBoost выигрывает почти все соревнования по структурированным данным на Kaggle.) mboostЗвучит интересно - я посмотрю. Спасибо
Бен
1
Я вижу, согласились, что деревья, безусловно, могут быть полезны в этой ситуации. В этом случае было бы неплохо придерживаться предложения @ Randel. У Mboost также есть ученик с древовидной базой, который может оказаться полезным в сочетании с учениками со случайными базовыми эффектами.
dmartin
3

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

https://github.com/dpmartin42/mleda/blob/master/README.md

Также вы можете найти его диссертацию здесь:

http://dpmartin42.github.io/about.html

Эрик Рузек
источник
2
Спасибо за ссылку, Эрик! Одна вещь, которую нужно иметь в виду в моей диссертации, заключается в том, что она оценивает только то, как лесные методы работают "из коробки" при воздействии многоуровневых структур данных. Методы, о которых упоминал @Randel, обсуждаются в главе 3 как обзор литературы, но при имитационном исследовании были изучены в основном оригинальный алгоритм Бреймана и деревья / леса условного вывода.
dmartin
1

Функция RFcluster()из пакета gamclass для R «адаптирует случайные леса для работы (хотя и неуклюже и неэффективно) с кластеризованными категориальными данными о результатах». Следующий пример со страницы справки для RFcluster:

 library(randomForest)
 library(gamclass)
 data(mlbench::Vowel)
 RFcluster(formula=Class ~., id = V1, data = Vowel, nfold = 15,
           tree=500, progress=TRUE, printit = TRUE, seed = 29)

Это возвращает точность OOB (где «сумки» - это сумки динамиков, а не сумки отдельных образцов динамиков), которые моя машина дает как 0,57.

Джон Майндональд
источник
0

Возможно, вы захотите взглянуть на metboost : Miller PJ et al. metboost: исследовательский регрессионный анализ с иерархически кластеризованными данными.arXiv: 1702.03994

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

Это реализовано в пакете R mvtboost

Коэн Пувельс
источник
1
пожалуйста, предоставьте ссылки, а не просто ссылки (особенно для вашей первой ссылки), так как ссылки могут умереть
Антуан