Algoritmos para seleção automática de modelo

193

Eu gostaria de implementar um algoritmo para seleção automática de modelo. Estou pensando em fazer regressão gradual, mas qualquer coisa serve (porém, deve ser baseada em regressões lineares).

Meu problema é que não consigo encontrar uma metodologia ou uma implementação de código aberto (estou trabalhando em java). A metodologia que tenho em mente seria algo como:

  1. calcular a matriz de correlação de todos os fatores
  2. escolha os fatores que têm uma baixa correlação entre si
  3. remova os fatores que têm um status t baixo
  4. adicione outros fatores (ainda com base no baixo fator de correlação encontrado em 2.).
  5. reiterar várias vezes até que algum critério (por exemplo, AIC) esteja acima de um determinado limite ou não consiga ou não consigamos encontrar um valor maior.

Sei que existe uma implementação R para isso (stepAIC), mas acho o código bastante difícil de entender. Também não consegui encontrar artigos descrevendo a regressão gradual.

S4M
fonte
72
Francamente, acho que essa é uma ideia desastrosa , quase garantida para levar a muitas conclusões falsas.
gung
4
@gung: embora eu concorde que seguir cegamente o resultado de uma seleção de modelo seja uma má ideia, acho que pode ser útil como ponto de partida de uma análise. No meu caso, tenho várias centenas de fatores disponíveis e gostaria de escolher os 5 a 10 mais relevantes. Não vejo como eu poderia fazer isso sem a seleção automática de modelo (que será posteriormente alterada manualmente).
S4M
12
Todos os procedimentos de seleção de modelos estão sujeitos aos problemas que discuto na minha resposta abaixo. Além disso, quanto maior o número de fatores possíveis que você deseja pesquisar, mais extremos esses problemas se tornam e o aumento não é linear. Embora existam algumas abordagens melhores (discutidas por @Zach), que devem ser usadas em conjunto com a validação cruzada (discutida por @JackTanner), a seleção com base em t, re AIC não está entre elas. Além disso, com centenas de fatores, a quantidade de dados necessária pode facilmente chegar aos milhões. Infelizmente, você tem uma tarefa muito difícil à sua frente.
gung
7
Qual é o objetivo de fazer a seleção de modelos? É para um modelo preditivo / de previsão ou você está procurando as variáveis ​​importantes? Também qual é o tamanho do conjunto de dados que você está usando - quantas obsevações e quantas variáveis?
probabilityislogic
6
Visões interessantes aqui, mas acho que a visão negativa em relação aos procedimentos de seleção de modelo algorítmico é um pouco datada. Tomemos, por exemplo, o trabalho recente de David Hendry no campo da econometria, particularmente seu trabalho no software PcGive e nos métodos de saturação. Uma palestra com uma visão geral de sua abordagem pode ser encontrada aqui . Como o @MichaelChernick apontou (e Hendry faria também!), O conhecimento do assunto é (imensamente) importante. É por isso que há valor nos especialistas em assuntos - deixar os algoritmos agirem sozinhos é o erro.
Graeme Walsh

Respostas:

333

Eu acho que essa abordagem está errada, mas talvez seja mais útil se eu explicar o porquê. É desejável conhecer o melhor modelo, com algumas informações sobre um grande número de variáveis. Além disso, é uma situação em que as pessoas parecem se encontrar regularmente. Além disso, muitos livros (e cursos) sobre regressão abrangem métodos de seleção passo a passo, o que implica que eles devem ser legítimos. Infelizmente, porém, eles não são, e o emparelhamento dessa situação e objetivo é bastante difícil de navegar com êxito. A seguir, é apresentada uma lista de problemas com os procedimentos automatizados de seleção de modelos por etapas (atribuídos a Frank Harrell e copiados daqui ):

  1. Ele produz valores ao quadrado R que são muito tendenciosos para serem altos.
  2. Os testes F e qui-quadrado, citados ao lado de cada variável na impressão, não têm a distribuição reivindicada.
  3. O método gera intervalos de confiança para efeitos e valores previstos que são falsamente estreitos; veja Altman e Andersen (1989).
  4. Ele produz valores de p que não têm o significado apropriado, e a correção adequada para eles é um problema difícil.
  5. Ele fornece coeficientes de regressão enviesados ​​que precisam de retração (os coeficientes para as demais variáveis ​​são muito grandes; ver Tibshirani [1996]).
  6. Tem problemas graves na presença de colinearidade.
  7. Baseia-se em métodos (por exemplo, testes F para modelos aninhados) destinados a serem utilizados para testar hipóteses pré-especificadas.
  8. Aumentar o tamanho da amostra não ajuda muito; ver Derksen e Keselman (1992).
  9. Isso nos permite não pensar no problema.
  10. Ele usa muito papel.

A questão é: o que há de tão ruim nesses procedimentos / por que esses problemas ocorrem? A maioria das pessoas que fez um curso básico de regressão está familiarizada com o conceito de regressão à média , então é isso que eu uso para explicar essas questões. (Embora isso possa parecer fora de tópico a princípio, aceite comigo, eu prometo que é relevante.)

Imagine um treinador de atletismo no primeiro dia de testes. Trinta crianças aparecem. Essas crianças têm algum nível subjacente de capacidade intrínseca à qual nem o treinador, nem ninguém mais, tem acesso direto. Como resultado, o treinador faz a única coisa que ele pode fazer, ou seja, fazer todos correrem 100m. Presumivelmente, os tempos são uma medida de sua capacidade intrínseca e são tomados como tal. No entanto, eles são probabilísticos; alguma proporção de quão bem alguém se sai é baseada em sua capacidade real e outra é aleatória. Imagine que a verdadeira situação é a seguinte:

set.seed(59)
intrinsic_ability = runif(30, min=9, max=10)
time = 31 - 2*intrinsic_ability + rnorm(30, mean=0, sd=.5)

Os resultados da primeira corrida são exibidos na figura a seguir, juntamente com os comentários do treinador para as crianças.

primeira corrida

Observe que a divisão das crianças pelo tempo de corrida deixa sobreposições em sua capacidade intrínseca - esse fato é crucial. Depois de elogiar alguns e gritar com outros (como os treinadores costumam fazer), ele os faz correr novamente. Aqui estão os resultados da segunda corrida com as reações do treinador (simuladas a partir do mesmo modelo acima):

segunda corrida

Observe que sua capacidade intrínseca é idêntica, mas os tempos mudaram em relação à primeira corrida. Do ponto de vista do treinador, aqueles que ele gritava tendem a melhorar e aqueles que ele elogiava costumavam piorar (eu adaptei este exemplo concreto da citação de Kahneman listada na página da wiki), embora na verdade a regressão à média seja uma matemática simples conseqüência do fato de o treinador selecionar atletas para a equipe com base em uma medida parcialmente aleatória.

Agora, o que isso tem a ver com técnicas de seleção de modelo automatizadas (por exemplo, passo a passo)? O desenvolvimento e a confirmação de um modelo baseado no mesmo conjunto de dados às vezes é chamado de dragagem de dados. Embora exista alguma relação subjacente entre as variáveis, e espera-se que relações mais fortes produzam pontuações mais fortes (por exemplo, estatísticas t mais altas), essas são variáveis ​​aleatórias e os valores realizados contêm erros. Portanto, quando você seleciona variáveis ​​com base em valores realizados mais altos (ou mais baixos), eles podem ser assim devido ao seu valor verdadeiro subjacente, erro ou ambos. Se você proceder dessa maneira, ficará tão surpreso quanto o treinador ficou após a segunda corrida. Isso é verdade se você seleciona variáveis ​​com base em estatísticas t altas ou intercorrelações baixas. É verdade que usar o AIC é melhor do que usar valores-p, porque penaliza o modelo por complexidade, mas o AIC é uma variável aleatória (se você executar um estudo várias vezes e se encaixar no mesmo modelo, o AIC se movimentará exatamente como todo o resto). Infelizmente,

Espero que isto seja útil.

gung
fonte
43
Explicação fenomenal da dragagem de dados.
precisa
17
Esta é uma resposta muito bem pensada, embora eu discorde completamente da idéia de que aic é uma melhoria em relação aos valores de p (ou bic ou similar), no contexto da seleção linear de modelos. qualquer penalidade como aic, que tem a forma é equivalente a definir o valor-p como (entrada e saída). aic basicamente diz como escolher o valor-p. 2L+kpPr(χ12>k)
probabilityislogic
7
Meu comentário foi sobre o uso de aic para algoritmo stepwise ou similar. Meu comentário também foi muito breve. Nota é o número de variáveis, é penalidade ( para aic para bic) e é negativo duas vezes a probabilidade maximizada de log. Aic e bic são conceitualmente diferentes, mas não operacionalmente, dos valores de p ao fazer a seleção de estilo de "subconjunto" sem encolher os coeficientes diferentes de zero. pk2logN2L
probabilityislogic
9
@gung - se você considerar a diferença entre dois modelos com um parâmetro diferente, obtém . Agora, o primeiro termo é a estatística da razão de verossimilhança na qual o valor-p é baseado. Portanto, estamos adicionando o parâmetro extra se a estatística da razão de verossimilhança for maior que algum ponto de corte. É o mesmo que a abordagem de valor-p está fazendo. Existe apenas uma diferença conceitual aqui(2L1+2p0+2)(2L0+2p0)=2(L1L0)+2
probabilityislogic
2
Para uma ilustração de por que a AIC não resolve o problema, consulte: Mundry, R. (2011). Problemas na inferência estatística baseada na teoria da informação - um comentário da perspectiva de um frequentista. Ecologia Comportamental e Sociobiologia, 65 (1), 57-68.
Jank
70

Confira o pacote de sinal de intercalação em R. Isso o ajudará a validar cruzadamente modelos de regressão passo a passo (use method='lmStepAIC'ou method='glmStepAIC') e pode ajudar a entender como esses tipos de modelos tendem a ter desempenho preditivo ruim. Além disso, você pode usar a findCorrelationfunção no cursor para identificar e eliminar variáveis ​​colineares, e a rfefunção no cursor para eliminar variáveis ​​com uma estatística t baixa (uso rfeControl=rfeControl(functions=lmFuncs)).

No entanto, como mencionado nas respostas anteriores, é provável que esses métodos de seleção de variáveis ​​causem problemas, principalmente se você os fizer iterativamente. Certifique-se de avaliar seu desempenho em um conjunto de testes COMPLETAMENTE realizado. Nem olhe para o conjunto de testes até estar satisfeito com seu algoritmo!

Por fim, pode ser melhor (e mais simples) usar o modelo preditivo com a seleção de recursos "embutidos", como regressão de crista, laço ou rede elástica. Especificamente, tente o method=glmnetargumento para acento circunflexo e compare a precisão com validação cruzada desse modelo com o method=lmStepAICargumento. Meu palpite é que o primeiro oferecerá uma precisão fora da amostra muito maior e você não precisa se preocupar em implementar e validar seu algoritmo de seleção de variável personalizado.

Zach
fonte
11
Penalidades como o duplo pareto são melhores do que cordões e laços do ponto de vista estatístico, pois não diminuem os coeficientes claramente diferentes de zero. Infelizmente, eles sempre levam a uma penalidade não convexa, portanto são piores do ponto de vista computacional. Eu acho que uma penalidade baseada na distribuição Cauchy seria boa . log(λ2+β2)
probabilityislogic
2
@probabilityislogic Você conhece alguma boa implementação da penalidade de duplo pareto, em um idioma como rou python? Eu adoraria experimentar.
Zach
11
Pelo que entendi, a seleção de modelos pela AIC e a validação cruzada de deixar um fora é essencialmente a mesma coisa (equivalência assintótica, ver Stone, 1977) ; portanto, a AIC e alguns tipos de validação cruzada provavelmente levarão a resultados muito semelhantes. resultados. No entanto, eu não usei o pacote de sinal de intercalação e, pelas chamadas do método, parece que o AIC é realmente usado em alguns casos.
fileunderwater
38

Concordo plenamente com os problemas descritos pelo @gung. Dito isto, realisticamente falando, a seleção de modelos é um problema real que precisa de uma solução real. Aqui está algo que eu usaria na prática.

  1. Divida seus dados em conjuntos de treinamento, validação e teste.
  2. Treine modelos em seu conjunto de treinamento.
  3. Avalie o desempenho do modelo no conjunto de validação usando uma métrica como o RMSE de previsão e escolha o modelo com o menor erro de previsão.
  4. Crie novos modelos conforme necessário, repita as etapas 2-3.
  5. Relate o desempenho do modelo no conjunto de testes.

Para um exemplo do uso desse método no mundo real, acredito que ele foi usado na competição do Prêmio Netflix.

Jack Tanner
fonte
15
A divisão de dados não é confiável, a menos que . n>20000
precisa
5
@Frank: Por que você acha que N precisa ser tão alto?
Rolando2
14
Por causa da baixa precisão. Se você dividir novamente, poderá obter resultados muito diferentes. É por isso que as pessoas fazem 100 repetições de 10 vezes a validação cruzada ou a inicialização.
precisa saber é o seguinte
10
@FrankHarrell De que depende esse número n> 20000? É baseado no comentário do pôster original sobre ter " várias centenas de fatores "? Ou é independente de qualquer aspecto dos dados?
Darren Cozinhe
33
O tipo de configuração em que eu testava a divisão de dados era n = 17000, com uma fração de 0,3 tendo um evento e tendo cerca de 50 parâmetros examinados ou ajustados em um modelo logístico binário. Eu usei uma divisão aleatória 1: 1. A área ROC validada na amostra de teste mudou substancialmente quando eu re-dividi os dados e recomeçou. Procure em Estudos de métodos usados ​​no texto em biostat.mc.vanderbilt.edu/rms, para estudos de simulação e artigos relacionados, fornecendo mais informações.
precisa
15

Para responder à pergunta, existem várias opções: 1) todo o subconjunto pelo AIC / BIC 2) passo a passo pelo valor p 3) passo a passo pelo AIC / BIC 4) regularização como o LASSO (pode ser baseado no AIC / BIC ou no CV 5) algoritmo genético (GA) 6) outros? 7) uso de seleção não automática, orientada pela teoria ("conhecimento do assunto")

A próxima pergunta seria qual método é melhor. Este artigo (doi: 10.1016 / j.amc.2013.05.016) indica que "toda regressão possível" deu os mesmos resultados ao novo método proposto e, passo a passo, é pior. Um GA simples está entre eles. Este artigo (DOI: 10.1080 / 10618600.1998.10474784) compara a regressão penalizada (Bridge, Lasso etc.) com "trancos e barrancos" (parece um algoritmo de pesquisa exaustivo, mas mais rápido) e também descobriu que "o modelo de ponte concorda com o melhor modelo de a seleção de subconjuntos pelo método dos trancos e barrancos ”. Este artigo (doi: 10.1186 / 1471-2105-15-88) mostra que o GA é melhor que o LASSO. Este artigo (DOI: 10.1198 / jcgs.2009.06164) propôs um método - essencialmente uma abordagem de todos os subconjuntos (com base no BIC), mas reduz de forma inteligente o tempo de computação. Eles demonstram que esse método é melhor que o LASSO. Curiosamente, este artigo (DOI: 10.1111 / j.1461-0248.2009.01361.

Então, no geral, os resultados são variados, mas tive a impressão de que o GA parece muito bom, embora por etapas possa não ser tão ruim e rápido.

Quanto a 7), o uso de seleção não automática, orientada pela teoria ("conhecimento do assunto"). É demorado e não é necessariamente melhor que o método automático. De fato, na literatura de séries temporais, está bem estabelecido que o método automatizado (especialmente software comercial) supera os especialistas humanos "por uma margem substancial" (doi: 10.1016 / S0169-2070 (01) 00119-4, página 561, por exemplo, selecionando várias suavizações exponenciais) e modelos ARIMA).

heran_xp
fonte
6
Esteja ciente de que você pode obter desempenho diferente nos estudos de simulação de diferentes algoritmos de seleção, alterando o processo de geração de dados para favorecer (mesmo que não intencionalmente) uma rotina específica. A questão de qual abordagem será mais rápida ou mais lenta é distinta, mas potencialmente ainda importante.
gung
2
De fato, os exemplos no artigo original de Tibshirani sobre o LASSO ilustram bem o argumento de @ gung. O mesmo vale para estudos comparativos de diferentes métodos em dados reais. BTW, sua última referência está correta? O artigo de Clements & Hendry com o DOI que você dá não afirma que os métodos automatizados superam os especialistas em seres humanos, nem usa as palavras "por uma margem substancial". (Seria bom se você deu referências completas.)
Scortchi
Encontrado: Goodrich (2001), "Software comercial na competição M3", Int. J. Forecast., 17, pp 560-565. Está na mesma coleção de "Comentários sobre a competição M3" que o artigo de Clements & Hendry, motivo pelo qual o DOI pesquisando no Google me enviou para lá.
Scortchi
De qualquer forma, não está claro que o comentário de Goodrich tenha algo a ver com a experiência no assunto .
Scortchi
11
@ Scortchi, pode ficar mais claro no artigo a partir da página 581 sobre essa edição da revista. Está mais relacionado à "Competição M2", na qual os métodos automáticos de previsão foram comparados com especialistas humanos convidados (incluindo alguns grandes nomes da literatura de séries temporais) que conheciam o contexto econômico / da indústria e poderiam até solicitar informações adicionais às empresas que forneciam os dados.
heran_xp
6

Aqui está uma resposta fora do campo esquerdo - em vez de usar regressão linear, use uma árvore de regressão (pacote rpart). Isso é adequado para a seleção automática de modelo, porque com um pouco de trabalho você pode automatizar a seleção de cp, o parâmetro usado para evitar o excesso de ajuste.

JenSCDC
fonte
3

modelo linear pode ser otimizado através da implementação de algoritmo genético na maneira de escolher as variáveis ​​independentes mais valiosas. As variáveis ​​são representadas como genes no algoritmo, e o melhor cromossomo (conjunto de genes) é então selecionado após operadores de crossover, mutação etc. É baseado na seleção natural - então a melhor 'geração' pode sobreviver, em outras palavras, o algoritmo otimiza a função de estimativa que depende do modelo específico.

marshmallow
fonte
2
Isso selecionaria as "melhores" variáveis ​​nos dados , não necessariamente as melhores variáveis ​​no processo / população de geração de dados, pois ele só tem acesso aos dados. Não é realmente tão diferente do método passo a passo que o OP queria.
gung
0

Nós temos uma função no pacote de estatísticas básicas do R, chamada step (), que faz a seleção para frente, para trás ou para trás dos modelos com base na menor AIC. Isso também funciona para variáveis ​​fatoriais. Isso não serve o objetivo aqui?

Praveen
fonte
-51

Vejo que minha pergunta gerou muito interesse e um debate interessante sobre a validade da abordagem de seleção automática de modelo. Embora eu concorde que tomar como certo o resultado de uma seleção automática é arriscado, ele pode ser usado como ponto de partida. Então, aqui está como eu o implementei para o meu problema específico, que é encontrar os melhores n fatores para explicar uma determinada variável

  1. faça todas as variáveis ​​de regressão versus fatores individuais
  2. classifique a regressão por um determinado critério (digamos AIC)
  3. remova os fatores que têm um status t baixo: eles são inúteis para explicar nossa variável
  4. com a ordem dada em 2., tente adicionar os fatores um a um ao modelo e mantenha-os quando eles melhorarem nosso critério. itere para todos os fatores.

Novamente, isso é muito difícil, pode haver maneiras de melhorar a metodologia, mas esse é o meu ponto de partida. Estou postando esta resposta esperando que possa ser útil para outra pessoa. Comentários são bem-vindos!

S4M
fonte
47
(1) Não testemunhei nenhum "debate" neste tópico: todas as respostas e comentários apresentam a mesma mensagem básica. (2) Sua implementação parece ser uma versão ad hoc da regressão gradual . Concordo que pode ser útil como ponto de partida, desde que não seja aceito automaticamente como um fim em si mesmo.
whuber
28
você realmente aceitou sua própria resposta que se opõe a todos os argumentos apresentados pela comunidade. Não é surpreendente ver os negativos aqui ...
Jank
23
Acredito que é a primeira vez que vejo tantos votos negativos. @ SAM Por que você simplesmente não aceita algumas das outras excelentes respostas e exclui sua "resposta"?
Marcel
A resposta mais prejudicada desta SE já foi?
mkt
2
Parece que você respondeu à pergunta importante de @probabilityislogic dizendo seu objetivo "encontrar os melhores n fatores para explicar uma determinada variável". A construção de modelos para explicar (entender a causalidade) precisa ser feita de maneira mais intencional e geralmente muito mais intensa do que a construção de modelos para prever.
Rolando2