Como lidar com dados hierárquicos / aninhados no aprendizado de máquina

29

Vou explicar meu problema com um exemplo. Suponha que você queira prever a renda de um indivíduo, com alguns atributos: {Idade, Sexo, País, Região, Cidade}. Você tem um conjunto de dados de treinamento como esse

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

Agora, suponha que eu queira prever a renda de uma nova pessoa que mora na Cidade 7. Meu conjunto de treinamento tem três amostras impressionantes com pessoas na Cidade 7 (suponha que isso seja muito), então provavelmente posso usar a renda média na Cidade 7 para prever a renda desse novo indivíduo.

Agora, suponha que eu queira prever a renda de uma nova pessoa que mora na Cidade 2. Meu conjunto de treinamento possui apenas 1 amostra com a Cidade 2; portanto, a renda média na Cidade 2 provavelmente não é um preditor confiável. Mas provavelmente posso usar a renda média na Região 1.

Extrapolando um pouco essa ideia, posso transformar meu conjunto de dados de treinamento como

    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

Portanto, o objetivo é combinar de alguma forma o CityIncome, o RegionIncome e o CountryIncome, usando o número de amostras de treinamento de cada um para dar peso / credibilidade a cada valor. (Idealmente, ainda incluindo informações de idade e sexo.)

Quais são as dicas para resolver esse tipo de problema? Prefiro usar modelos baseados em árvores, como floresta aleatória ou aumento de gradiente, mas estou tendo problemas para obter um bom desempenho.

ATUALIZAR

Para qualquer pessoa disposta a dar uma facada nesse problema, geramos dados de amostra para testar sua solução proposta aqui .

Ben
fonte
7
Modelos bayesianos hierárquicos são muito naturais para explorar a estrutura, conforme descrito em seus dados. Confira o exemplo clássico de modelagem de contaminação por radônio mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs
Dê uma olhada neste desafio do tutorial de introdução do Kaggle : kaggle.com/c/titanic . Ele lida com um problema semelhante, que é prever se uma pessoa sobreviveu ao desastre do Titanic, devido a vários atributos sobre a pessoa, como sexo, tipo de ticket etc. etc.
Vihari Piratla
6
@VihariPiratla Obrigado pela contribuição, mas estou familiarizado com o conjunto de dados e o desafio do Titanic, e não vejo como ele se relaciona com o problema de dados aninhados sobre o qual perguntei.
Ben
Usar a regularização L2 / L1 para esses modelos, por exemplo, regressão logística / SVM que a executa, deve ajudar (bayes hierárquicos do homem pobre). você penaliza efetivamente os coeficientes, portanto, a menos que um coeficiente significativamente (ou seja, em muitos dados) melhore o erro, ele será definido como próximo de zero. e você usar validação cruzada para decidir nível de penalização
seanv507
Deseja também prever a renda de uma pessoa que mora na cidade 9?
jan-GLX

Respostas:

14

Estou pensando nesse problema há algum tempo, com inspirações das seguintes perguntas neste site.

Deixe-me apresentar primeiro os modelos de efeitos mistos para dados hierárquicos / aninhados e começar com um modelo simples de dois níveis (amostras aninhadas nas cidades). Para a ésima amostra da i- ésima cidade, escrevemos o resultado y i j em função das covariáveis (uma lista de variáveis ​​incluindo sexo e idade), que é a interceptação aleatória de cada cidade, . Se assumirmos que e seguem distribuições normais com média 0 e variâncias ejEuyEuj y i j = f ( x i j ) + u i + ϵ i j ,xEuj

yEuj=f(xEuj)+vocêEu+ϵEuj,
j=1,, n i u ivocêEuj=1,...,nEuvocêEu σ 2 u σ 2 u i u i = σ 2 uϵEujσvocê2σ2, a estimativa empírica bayesiana (EB) de é onde ,Se tratarmos Como a estimativa OLS (mínimo quadrado mínimo) de , então o EB estimativa é uma soma ponderada de 0 e a estimativa OLS, e o peso é uma função crescente do tamanho da amostra . A previsão final é em quevocêEu
você^Eu=σvocê2σvocê2+σ2/nEu(y¯Eu.-f(x¯Eu.)),
y¯Eu.=1nEuEunEuyEuj( ˉ y i.-f( ˉ x i.))Uini f (xij)+ u i, f (xij)f(x¯Eu.)=1nEuEunEuf(xEuj).(y¯Eu.-f(x¯Eu.))vocêEunEu
f^(xEuj)+você^Eu,
f^(xEuj) é a estimativa do efeito fixo de regressão linear ou método de aprendizado de máquina, como floresta aleatória. Isso pode ser facilmente estendido a qualquer nível de dados, por exemplo, amostras aninhadas em cidades, regiões e países. Além dos métodos baseados em árvore, existe um método baseado no SVM .

Para o método baseado em floresta aleatória, você pode tentar MixRF()em nosso pacote R MixRFno CRAN.

Randel
fonte
Você poderia explicar por que a interceptação pode variar com , mas possui um único conjunto de parâmetros para todos os ? É uma suposição simplificadora para evitar ajustes excessivos ou tornar o problema tratável? EufEu
User20160
@ user20160 Sim, chamamos parte como parte de efeitos fixos e como efeito aleatório. Também podemos ter algumas inclinações aleatórias como mas devemos limitar o número de inclinações aleatórias, pois isso introduziria um grande número de componentes de variação em a matriz de covariância dos efeitos aleatórios, se não for estruturada. fvocêEuxEujvocêEu,
Randel
6

Dado que você tem apenas duas variáveis ​​e aninhamento direto, eu repetiria os comentários de outros que mencionam um modelo hierárquico de Bayes. Você mencionou uma preferência por métodos baseados em árvore, mas há uma razão específica para isso? Com um número mínimo de preditores, acho que a linearidade geralmente é uma suposição válida que funciona bem, e qualquer erro de especificação do modelo pode ser facilmente verificado através de gráficos residuais.

Se você tivesse um grande número de preditores, o exemplo de RF baseado na abordagem EM mencionada por @Randel certamente seria uma opção. Uma outra opção que ainda não vi é usar o reforço baseado em modelo (disponível no pacote mboost no R ). Essencialmente, essa abordagem permite estimar a forma funcional de seus efeitos fixos usando vários aprendizes básicos (lineares e não lineares), e as estimativas de efeitos aleatórios são aproximadas usando uma penalidade baseada em crista para todos os níveis desse fator em particular. Este artigo é um ótimo tutorial (os alunos da base de efeitos aleatórios são discutidos na página 11).

Analisei seus dados de amostra, mas parece que ele possui apenas as variáveis ​​de efeitos aleatórios de Cidade, Região e País. Nesse caso, seria útil calcular as estimativas empíricas de Bayes para esses fatores, independentemente de quaisquer preditores. Isso pode realmente ser um bom exercício para começar em geral, como talvez os níveis mais altos (país, por exemplo), tenham uma variação mínima explicada no resultado e, portanto, provavelmente não valeria a pena adicioná-los ao seu modelo.

dmartin
fonte
1
+1 para a introdução do mboostpacote.
Randel 06/07
Os dados reais com os quais estou trabalhando têm muito mais do que duas variáveis ​​que adicionam muita confusão do mundo real que não é captada pelo meu exemplo simples (por exemplo, não linearidade, dependência de código, valores ausentes, valores categóricos, etc.) . Na minha experiência, os alunos baseados em árvores fazem o melhor trabalho para lidar com toda a bagunça do mundo real, e é por isso que eu me inclino a usá-los. (Há uma razão pela qual o XGBoost vence quase todas as competições de dados estruturados no Kaggle.) mboostParece interessante - vou dar uma olhada. Obrigado
Ben
1
Entendo, concordou que as árvores certamente podem ser úteis nessa situação. Nesse caso, seguir a sugestão de @ Randel seria uma boa opção. O Mboost também possui um aprendiz da base de árvores, o que pode ser útil em combinação com os alunos da base de efeitos aleatórios.
dmartin
3

Isso é mais um comentário ou sugestão do que uma resposta, mas acho que você faz uma pergunta importante aqui. Como alguém que trabalha exclusivamente com dados multiníveis, posso dizer que descobri muito pouco sobre aprendizado de máquina com dados multiníveis. No entanto, Dan Martin, recém-doutorado em psicologia quantitativa na Universidade da Virgínia, fez sua dissertação sobre o uso de árvores de regressão com dados em vários níveis. Abaixo está um link para um pacote R que ele escreveu para alguns desses propósitos:

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

Além disso, você pode encontrar sua dissertação aqui:

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

Erik Ruzek
fonte
2
Obrigado pela referência, Erik! Um aspecto a ter em mente com a minha dissertação é que ela avaliou apenas o desempenho dos métodos florestais "fora da caixa" quando expostos a estruturas de dados em vários níveis. Os métodos mencionados pelo @Randel são discutidos no Capítulo 3 como uma revisão da literatura, mas o estudo de simulação investigou principalmente o algoritmo original de Breiman e as árvores / florestas de inferência condicional.
dmartin
1

A função RFcluster()do pacote gamclass para R "adapta florestas aleatórias para funcionar (ainda que desajeitadamente e ineficientemente) com dados de resultados categóricos agrupados". O exemplo a seguir é da página de ajuda para 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)

Isso retorna uma precisão OOB (onde os "sacos" são sacos de alto-falantes, não sacos de amostras de alto-falantes individuais), que minha máquina fornece como 0,57.

John Maindonald
fonte
0

Você pode dar uma olhada no metboost : Miller PJ et al. metboost: análise de regressão exploratória com dados hierarquicamente agrupados.arXiv: 1702.03994

Citação do resumo: Propomos uma extensão para as árvores de decisão de decisão aprimoradas denominadas metboost para dados agrupados hierarquicamente. Ele funciona restringindo a estrutura de cada árvore a ser a mesma entre os grupos, mas permitindo que o nó terminal signifique diferir. Isso permite que preditores e pontos de divisão levem a diferentes previsões dentro de cada grupo e aproximam efeitos específicos de grupos não lineares. É importante ressaltar que o metboost permanece computacionalmente viável para milhares de observações e centenas de preditores que podem conter valores ausentes.

É implementado no pacote R mvtboost

Koen Pouwels
fonte
1
forneça referências em vez de links apenas (especialmente para o seu primeiro link), como links podem morrer
Antoine