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 .