Comment gérer les données hiérarchiques / imbriquées dans l'apprentissage automatique

29

Je vais expliquer mon problème avec un exemple. Supposons que vous souhaitiez prédire le revenu d'un individu en fonction de certains attributs: {âge, sexe, pays, région, ville}. Vous avez un ensemble de données de formation comme ça

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

Supposons maintenant que je veux prédire le revenu d'une nouvelle personne qui vit dans la ville 7. Mon ensemble de formation contient 3 échantillons avec des gens de la ville 7 (supposons que c'est beaucoup), donc je peux probablement utiliser le revenu moyen de la ville 7 pour prédire le revenu de cette nouvelle personne.

Supposons maintenant que je veuille prédire le revenu d'une nouvelle personne qui habite dans la ville 2. Mon ensemble de formation n'a qu'un seul échantillon avec la ville 2, donc le revenu moyen dans la ville 2 n'est probablement pas un prédicteur fiable. Mais je peux probablement utiliser le revenu moyen de la région 1.

En extrapolant un peu cette idée, je peux transformer mon jeu de données d'entraînement en

    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

Ainsi, l'objectif est de combiner en quelque sorte le CityIncome moyen, le RegionIncome et le CountryIncome tout en utilisant le nombre d'échantillons de formation pour chacun pour donner un poids / crédibilité à chaque valeur. (Idéalement, toujours avec des informations sur l'âge et le sexe.)

Quels sont les conseils pour résoudre ce type de problème? Je préfère utiliser des modèles basés sur des arbres comme la forêt aléatoire ou le renforcement du gradient, mais j'ai du mal à les faire fonctionner correctement.

MISE À JOUR

Pour tous ceux qui souhaitent essayer ce problème, j'ai généré des exemples de données pour tester la solution proposée ici .

Ben
la source
7
Les modèles bayésiens hiérarchiques sont très naturels pour exploiter la structure comme décrit dans vos données. Consultez l'exemple classique sur la modélisation de la contamination par le radon mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs
Jetez un œil à ce défi du didacticiel de mise en route de Kaggle : kaggle.com/c/titanic . Il traite d'un problème similaire, c'est-à-dire de prédire si une personne a survécu à la catastrophe du Titanic compte tenu de divers attributs sur la personne tels que le sexe, le type de ticket, etc. etc.
Vihari Piratla
6
@VihariPiratla Merci pour votre contribution, mais je connais l'ensemble de données et le défi du Titanic, et je ne vois pas en quoi il se rapporte au problème de données imbriquées que j'ai demandé.
Ben
L'utilisation de la régularisation L2 / L1 pour ces modèles, par exemple la régression logistique / SVM qui l'exécutent, devrait aider (bayes hiérarchiques pauvres de l'homme). en fait, vous pénalisez les coefficients, donc à moins qu'un coefficient de manière significative (c'est-à-dire sur beaucoup de données) n'améliore l'erreur, il sera réglé à près de zéro. et vous utilisez la validation croisée pour décider du niveau de pénalisation
seanv507
Voulez-vous également pouvoir prédire le revenu d'une personne qui habite dans la ville 9?
jan-

Réponses:

14

Je réfléchis à ce problème depuis un certain temps, avec des inspirations des questions suivantes sur ce site.

Permettez-moi d'abord de présenter les modèles à effets mixtes pour les données hiérarchiques / imbriquées et de partir d'un modèle simple à deux niveaux (échantillons imbriqués dans les villes). Pour le échantillon -ème dans la ville -ème, on écrit le résultat en fonction de covariables (une liste de variables , y compris le sexe et l' âge), où est l'ordonnée à l'origine aléatoire pour chaque ville, . Si nous supposons que et suivent des distributions normales avec une moyenne de 0 et des variances eti y i j x i j y i j = f ( x i j ) + u i + ϵ i j ,jjeyjejXjej

yjej=F(Xjej)+uje+ϵjej,
j=1,..., n i u i ε i j σ 2 u σ 2 u i u i = σ 2 uujej=1,,njeujeϵjejσu2σ2, l'estimation empirique bayésienne (EB) de est où ,Si nous traitons Comme l'estimation OLS (carré le plus petit) de , alors l'EB L'estimation est une somme pondérée de 0 et de l'OLS, et le poids est une fonction croissante de la taille de l'échantillon . La prédiction finale est oùuje
u^je=σu2σu2+σ2/nje(y¯je.-F(X¯je.)),
y¯je.=1njejenjeyjej( ˉ y i.-f( ˉ x i.))Uini f (xij)+ u i, f (xij)F(X¯je.)=1njejenjeF(Xjej).(y¯je.-F(X¯je.))ujenje
F^(Xjej)+u^je,
F^(Xjej) est l'estimation de l'effet fixe d'une régression linéaire ou d'une méthode d'apprentissage automatique comme la forêt aléatoire. Cela peut être facilement étendu à n'importe quel niveau de données, par exemple des échantillons imbriqués dans des villes, puis des régions, puis des pays. Outre les méthodes basées sur les arbres, il existe une méthode basée sur SVM .

Pour une méthode basée sur une forêt aléatoire, vous pouvez essayer MixRF()dans notre package R MixRFsur CRAN.

Randel
la source
Pourriez-vous expliquer pourquoi l'interception peut varier avec , mais a un seul ensemble de paramètres pour tout ? Est-ce une hypothèse simplificatrice pour éviter le sur-ajustement ou rendre le problème traitable? f ijeFje
user20160
@ user20160 Oui, nous appelons part comme partie à effets fixes et comme effet aléatoire. Nous pouvons également avoir des pentes aléatoires comme mais nous devrions limiter le nombre de pentes aléatoires car cela introduirait un grand nombre de composantes de variance dans la matrice de covariance des effets aléatoires si elle n'est pas structurée. u i xFujeXjejuje,
Randel
6

Étant donné que vous n'avez que deux variables et une imbrication simple, je ferais écho aux commentaires des autres mentionnant un modèle Bayes hiérarchique. Vous mentionnez une préférence pour les méthodes arborescentes, mais y a-t-il une raison particulière à cela? Avec un nombre minimal de prédicteurs, je trouve que la linéarité est souvent une hypothèse valable qui fonctionne bien, et toute mauvaise spécification du modèle pourrait facilement être vérifiée via des graphiques résiduels.

Si vous disposiez d'un grand nombre de prédicteurs, l'exemple RF basé sur l'approche EM mentionnée par @Randel serait certainement une option. Une autre option que je n'ai pas encore vue est d'utiliser le boost basé sur un modèle (disponible via le package mboost dans R ). Essentiellement, cette approche vous permet d'estimer la forme fonctionnelle de vos effets fixes en utilisant divers apprenants de base (linéaires et non linéaires), et les estimations des effets aléatoires sont approximées en utilisant une pénalité basée sur les crêtes pour tous les niveaux de ce facteur particulier. Ce document est un très bon tutoriel (les apprenants de base d'effets aléatoires sont discutés à la page 11).

J'ai jeté un coup d'œil à vos exemples de données, mais il semble qu'il ne comporte que les variables d'effets aléatoires de la ville, de la région et du pays. Dans ce cas, il serait seulement utile de calculer les estimations empiriques de Bayes pour ces facteurs, indépendamment de tout prédicteur. Cela pourrait en fait être un bon exercice pour commencer en général, car les niveaux plus élevés (Pays, par exemple), ont un écart minimal expliqué dans le résultat, et il ne serait donc probablement pas utile de les ajouter dans votre modèle.

dmartin
la source
1
+1 pour l'introduction du mboostpackage.
Randel
Les données réelles avec lesquelles je travaille ont beaucoup plus de deux variables qui ajoutent beaucoup de gâchis dans le monde réel qui ne sont pas repris par mon exemple simple (par exemple, non linéarité, codépendance, valeurs manquantes, valeurs catégorielles, etc.) . D'après mon expérience, les apprenants basés sur les arbres font le meilleur travail pour gérer tous les dégâts du monde réel, c'est pourquoi je penche pour leur utilisation. (Il y a une raison pour laquelle XGBoost remporte presque toutes les compétitions de données structurées sur Kaggle.) Cela mboostsemble intéressant - je vais y jeter un œil. Merci
Ben
1
Je vois, convenu que les arbres peuvent certainement être utiles dans cette situation. Dans ce cas, s'en tenir à la suggestion de @ Randel serait une bonne option. Mboost a également un apprenant de base d'arbre qui pourrait s'avérer utile en combinaison avec les apprenants de base d'effets aléatoires.
dmartin
3

Il s'agit davantage d'un commentaire ou d'une suggestion que d'une réponse, mais je pense que vous posez ici une question importante. En tant que personne travaillant exclusivement avec des données multiniveaux, je peux dire que j'ai très peu trouvé sur l'apprentissage automatique avec des données multiniveaux. Cependant, Dan Martin, récemment diplômé d'un doctorat en psychologie quantitative à l'Université de Virginie, a fait sa thèse sur l'utilisation des arbres de régression avec des données à plusieurs niveaux. Vous trouverez ci-dessous un lien vers un package R qu'il a écrit à certaines fins:

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

Vous trouverez également sa thèse ici:

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

Erik Ruzek
la source
2
Merci pour la référence, Erik! Une chose à garder à l'esprit avec ma thèse est qu'elle n'a évalué que la façon dont les méthodes forestières fonctionnent "prêtes à l'emploi" lorsqu'elles sont exposées à des structures de données à plusieurs niveaux. Les méthodes mentionnées par @Randel sont discutées dans le chapitre 3 comme une revue de la littérature, mais l'étude de simulation a étudié principalement l'algorithme original de Breiman et les arbres / forêts d'inférence conditionnelle.
dmartin
1

La fonction RFcluster()du package gamclass pour R "adapte les forêts aléatoires pour fonctionner (quoique maladroitement et inefficacement) avec des données de résultats catégorielles groupées". L'exemple suivant provient de la page d'aide de 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)

Cela renvoie une précision OOB (où les "sacs" sont des sacs de haut-parleurs, pas des sacs d'échantillons de haut-parleurs individuels), que ma machine donne comme 0,57.

John Maindonald
la source
0

Vous voudrez peut-être jeter un œil à metboost : Miller PJ et al. metboost: analyse de régression exploratoire avec des données hiérarchisées en cluster.arXiv: 1702.03994

Citation du résumé: Nous proposons une extension aux arbres de décision de décision boostée appelée metboost pour les données hiérarchisées en cluster. Cela fonctionne en contraignant la structure de chaque arbre à être la même entre les groupes, mais en permettant aux nœuds terminaux de différer. Cela permet aux prédicteurs et aux points de partage de conduire à des prédictions différentes au sein de chaque groupe, et se rapproche des effets spécifiques non linéaires du groupe. Surtout, metboost reste réalisable par calcul pour des milliers d'observations et des centaines de prédicteurs qui peuvent contenir des valeurs manquantes.

Il est implémenté dans le package R mvtboost

Koen Pouwels
la source
1
veuillez fournir des références au lieu de simplement des liens (en particulier pour votre premier lien), car les liens peuvent mourir
Antoine