Algorithmes pour la sélection automatique de modèles


193

J'aimerais implémenter un algorithme pour la sélection automatique de modèles. Je pense faire une régression par étapes, mais tout ira bien (il faut que cela soit basé sur des régressions linéaires).

Mon problème est que je suis incapable de trouver une méthodologie, ou une implémentation open source (je suis en java). La méthodologie à laquelle je pense serait quelque chose comme:

  1. calculer la matrice de corrélation de tous les facteurs
  2. choisir les facteurs qui ont une faible corrélation entre eux
  3. supprimer les facteurs qui ont un t-stat bas
  4. ajouter d'autres facteurs (toujours basé sur le facteur de faible corrélation trouvé dans 2.).
  5. réitérer plusieurs fois jusqu'à ce qu'un critère (par exemple, AIC) dépasse un certain seuil ou ne puisse pas ou ne puisse pas trouver une valeur plus grande.

Je me rends compte qu'il existe une implémentation R pour cela (stepAIC), mais je trouve le code assez difficile à comprendre. De plus, je n'ai pas pu trouver d'articles décrivant la régression par étapes.


72
Franchement, je pense que c’est une idée désastreuse , qui aboutira à peu près à de fausses conclusions.
gung

4
@gung: Bien que je convienne que le suivi aveugle du résultat d'une sélection de modèle est une mauvaise idée, je pense que cela peut être utile comme point de départ d'une analyse. Dans mon cas, j'ai plusieurs centaines de facteurs disponibles, et j'aimerais choisir les 5 à 10 les plus pertinents. Je ne vois pas comment je pourrais le faire sans la sélection automatique du modèle (qui sera ultérieurement modifié manuellement).
S4M

12
Toutes les procédures de sélection de modèles sont soumises aux problèmes décrits dans la réponse ci-dessous. En outre, plus le nombre de facteurs possibles sur lesquels vous souhaitez effectuer une recherche est grand, plus ces problèmes deviennent extrêmes et l'augmentation ne sera pas linéaire. Bien qu'il existe certaines meilleures approches (discutées par @Zach), qui devraient être utilisées conjointement avec la validation croisée (discutées par @JackTanner), la sélection basée sur t, r et AIC n'en font pas partie. De plus, avec des centaines de facteurs, la quantité de données nécessaire pourrait facilement atteindre des millions. Malheureusement, vous avez une tâche très difficile devant vous.
gung

7
Quel est le but de la sélection du modèle? S'agit-il d'un modèle prédictif / prévisionnel ou recherchez-vous les variables importantes? De plus, quelle est la taille de l'ensemble de données que vous utilisez - combien d'observations et combien de variables?
Probistislogic

6
Vues intéressantes ici, mais je pense que la vue négative à l’égard des procédures de sélection de modèles algorithmiques est un peu dépassée. Prenons, par exemple, les travaux récents de David Hendry dans le domaine de l'économétrie, en particulier ses travaux sur le logiciel PcGive et les méthodes de saturation. Une conférence donnant un aperçu de son approche peut être trouvée ici . Comme @MichaelChernick l'a souligné (et Hendry le ferait aussi!), La connaissance du sujet est (extrêmement) importante. C’est la raison pour laquelle les spécialistes en la matière ont de la valeur: laisser les algorithmes agir seuls est l’erreur.
Graeme Walsh

Réponses:


333

Je pense que cette approche est erronée, mais il sera peut-être plus utile d’expliquer pourquoi. Vouloir connaître le meilleur modèle étant donné certaines informations sur un grand nombre de variables est assez compréhensible. De plus, c'est une situation dans laquelle les gens semblent se retrouver régulièrement. En outre, de nombreux manuels (et cours) sur la régression couvrent les méthodes de sélection par étapes, ce qui implique qu'elles doivent être légitimes. Malheureusement, ils ne le sont pas et il est très difficile de concilier cette situation et cet objectif. Vous trouverez ci-dessous une liste de problèmes liés aux procédures automatisées de sélection de modèle pas à pas (attribuées à Frank Harrell et copiées à partir de ):

  1. Cela donne des valeurs de R au carré qui sont fortement biaisées pour être élevées.
  2. Les tests F et chi-carré cités à côté de chaque variable de l’impression ne présentent pas la distribution revendiquée.
  3. La méthode donne des intervalles de confiance pour les effets et des valeurs prédites faussement étroites; voir Altman et Andersen (1989).
  4. Cela donne des valeurs de p qui n’ont pas la signification voulue, et leur correction est un problème difficile.
  5. Il donne des coefficients de régression biaisés nécessitant un retrait (les coefficients pour les variables restantes sont trop grands; voir Tibshirani [1996]).
  6. Il a de graves problèmes en présence de colinéarité.
  7. Il repose sur des méthodes (tests F pour les modèles imbriqués, par exemple) destinées à être utilisées pour tester des hypothèses préalablement spécifiées.
  8. L'augmentation de la taille de l'échantillon n'aide pas beaucoup; voir Derksen et Keselman (1992).
  9. Cela nous permet de ne pas penser au problème.
  10. Il utilise beaucoup de papier.

La question est de savoir en quoi ces procédures sont si mauvaises / pourquoi ces problèmes se produisent-ils? La plupart des personnes ayant suivi un cours de base sur la régression connaissent bien le concept de régression sur la moyenne . C’est ce que j’utilise pour expliquer ces problèmes. (Bien que cela puisse sembler hors sujet au début, soyez patient, je vous promets que c'est pertinent.)

Imaginez un entraîneur de piste de lycée le premier jour des essais. Trente enfants se présentent. Ces enfants ont un niveau de capacité intrinsèque sous-jacent auquel ni l'entraîneur, ni personne d'autre, n'a un accès direct. En conséquence, l’entraîneur fait ce qu’il peut faire, c’est qu’ils courent tous au 100m. Les temps sont vraisemblablement une mesure de leur capacité intrinsèque et sont pris en tant que tels. Cependant, ils sont probabilistes; une partie de ce que fait une personne est basée sur ses capacités réelles et une autre proportion est aléatoire. Imaginez que la situation vraie soit la suivante:

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

Les résultats de la première course sont affichés dans la figure suivante avec les commentaires de l'entraîneur aux enfants.

première course

Notez que la partition des enfants en fonction de leurs temps de course laisse des chevauchements sur leurs capacités intrinsèques - ce fait est crucial. Après avoir loué certains joueurs et hurlé après d'autres (comme le font généralement les entraîneurs), il les fait courir à nouveau. Voici les résultats de la deuxième course avec les réactions de l'entraîneur (simulées à partir du même modèle ci-dessus):

deuxième course

Notez que leurs capacités intrinsèques sont identiques, mais que les temps changent par rapport à la première course. Du point de vue de l'entraîneur, ceux qu'il a criés ont tendance à s'améliorer et ceux qu'il a loués ont tendance à se dégrader (j'ai adapté cet exemple concret de la citation de Kahneman listée sur la page du wiki), bien que la régression vers la moyenne soit un simple calcul mathématique. conséquence du fait que l’entraîneur sélectionne des athlètes pour l’équipe sur la base d’une mesure partiellement aléatoire.

Maintenant, qu'est-ce que cela a à voir avec les techniques de sélection de modèles automatisées (par exemple, par étapes)? Développer et confirmer un modèle basé sur le même ensemble de données est parfois appelé dragage de données.. Bien qu'il existe une relation sous-jacente entre les variables, et que des relations plus fortes devraient générer des scores plus élevés (par exemple, des statistiques t plus élevées), il s'agit de variables aléatoires et les valeurs obtenues contiennent des erreurs. Ainsi, lorsque vous sélectionnez des variables basées sur des valeurs réalisées supérieures (ou inférieures), elles peuvent l'être en raison de leur valeur vraie sous-jacente, de leur erreur ou des deux. Si vous procédez de cette manière, vous serez aussi surpris que l’entraîneur l’était après la deuxième course. Cela est vrai que vous sélectionniez des variables basées sur des statistiques t élevées ou des intercorrélations faibles. Certes, l’utilisation de l’AIC est préférable à l’utilisation de valeurs p, car elle pénalise le modèle en termes de complexité, mais l’AIC est en soi une variable aléatoire (si vous exécutez une étude plusieurs fois et s’ajustez au même modèle, l’AIC rebondira comme tout le reste). Malheureusement,

J'espère que ceci est utile.


43
Explication phénoménale du dragage des données.
Frank Harrell

17
C'est une réponse très bien pensée, bien que je sois totalement en désaccord avec l'idée selon laquelle l'aic est une amélioration par rapport aux valeurs p (ou bic ou similaire), dans le contexte de la sélection d'un modèle linéaire. toute pénalité comme aic qui est de la forme équivaut à définir la valeur p sur (entrée et sortie). AIC vous dit en gros comment choisir la valeur p. P r ( χ 2 1 > k )2L+kpPr(χ12>k)
Probistislogic

7
Mon commentaire concernait l’utilisation de aic pour un algorithme pas à pas ou similaire. Mon commentaire était aussi trop bref. Remarque: est le nombre de variables, est la pénalité ( pour aic pour bic) et est négatif deux fois plus grand que la probabilité de log maximisée. Aic et bic diffèrent sur le plan conceptuel mais non opérationnel des valeurs p lors de la sélection de style "sous-ensemble" sans réduction des coefficients non nuls. k 2 log N - 2 Lpk2logN2L
probabilitéislogique

9
@gung - si vous prenez la différence entre deux modèles avec un paramètre différent, vous obtenez . Le premier terme est la statistique du rapport de probabilité sur laquelle est basée la valeur p. Nous ajoutons donc le paramètre supplémentaire si la statistique du rapport de probabilité est supérieure à une valeur limite. C'est la même chose que l'approche p-value. Il n'y a qu'une différence conceptuelle ici(2L1+2p0+2)(2L0+2p0)=2(L1L0)+2
probabilitéislogic

2
pour une illustration, pourquoi l'AIC ne résout pas le problème, voir: Mundry, R. (2011). Problèmes liés à l'inférence statistique fondée sur la théorie de l'information - un commentaire du point de vue d'un fréquentiste. Écologie comportementale et sociobiologie, 65 (1), 57-68.
Jank

70

Consultez le paquet caret en R. Il vous aidera à valider de manière croisée les modèles de régression pas à pas (utilisez method='lmStepAIC'ou method='glmStepAIC') et pourrait vous aider à comprendre en quoi ces types de modèles ont tendance à avoir de mauvaises performances prédictives. De plus, vous pouvez utiliser la findCorrelationfonction caret pour identifier et éliminer les variables colinéaires et la rfefonction caret pour éliminer les variables avec une statistique t faible (utilisation rfeControl=rfeControl(functions=lmFuncs)).

Toutefois, comme indiqué dans les réponses précédentes, ces méthodes de sélection de variables risquent de vous poser des problèmes, en particulier si vous les faites de manière itérative. Assurez-vous absolument d’évaluer votre performance sur un ensemble de test COMPLETE. Ne regardez même pas l'ensemble de tests tant que vous n'êtes pas satisfait de votre algorithme!

Enfin, il serait peut-être préférable (et plus simple) d'utiliser un modèle prédictif avec une sélection de fonctionnalités "intégrée", telle que la régression de crête, le lasso ou le réseau élastique. Spécifiquement, essayez l' method=glmnetargument de caret et comparez l'exactitude validée par croisement de ce modèle à l' method=lmStepAICargument. Mon hypothèse est que le premier système vous donnera une précision beaucoup plus élevée hors échantillon, et vous n'avez pas à vous soucier de la mise en œuvre et de la validation de votre algorithme de sélection de variable personnalisé.


1
log(λ2+β2)

2
@probabilityislogic Connaissez-vous de bonnes applications de la peine de double pareto, dans un langage similaire à rou python? J'adorerais l'essayer.
Zach

1
D'après ce que j'ai compris, la sélection de modèle par AIC et la validation croisée une seule fois sont essentiellement la même chose (équivalence asymptotique, voir Stone, 1977) , de sorte que la AIC et certains types de validation croisée sont susceptibles de conduire à des résultats très similaires. résultats. Cependant, je n'ai pas utilisé le paquet caret, et d'après les appels à la méthode, il semble que l'AIC soit effectivement utilisé dans certains cas.
Fileunderwater

38

Je suis entièrement d'accord avec les problèmes décrits par @gung. Cela dit, de manière réaliste, la sélection de modèles est un problème réel qui nécessite une solution réelle. Voici quelque chose que je voudrais utiliser dans la pratique.

  1. Divisez vos données en ensembles de formation, de validation et de test.
  2. Former des modèles sur votre ensemble de formation
  3. Mesurer les performances du modèle sur l'ensemble de validation à l'aide d'une métrique telle que RMSE de prédiction, puis choisir le modèle avec l'erreur de prédiction la plus faible.
  4. Concevez de nouveaux modèles si nécessaire, répétez les étapes 2-3.
  5. Indiquez les performances du modèle sur l'ensemble de tests.

Pour un exemple d'utilisation de cette méthode dans le monde réel, je pense qu'elle a été utilisée lors du concours du prix Netflix.


15
n>20000

5
@ Frank: Pourquoi pensez-vous que N doit être si haut?
rolando2

14
À cause de la faible précision. Si vous vous divisez à nouveau, vous pouvez obtenir des résultats très différents. C'est pourquoi les gens font 100 répétitions de validation croisée ou amorçage de 10 fois.
Frank Harrell

10
@FrankHarrell De quoi dépend ce chiffre n> 20000? Est-ce basé sur le commentaire de l'affiche originale à propos de " plusieurs centaines de facteurs "? Ou est-ce indépendant de tout aspect des données?
Darren Cook

33
Le type de paramètre sur lequel je teste le fractionnement des données était n = 17 000 avec une fraction de 0,3 ayant un événement et environ 50 paramètres examinés ou intégrés dans un modèle logistique binaire. J'ai utilisé une répartition aléatoire 1: 1. La zone ROC validée dans l'échantillon de test a changé de manière substantielle lorsque j'ai fractionné à nouveau les données et que j'ai recommencé. Regardez sous Études des méthodes utilisées dans le texte de biostat.mc.vanderbilt.edu/rms pour des études de simulation et des documents apparentés donnant davantage d'informations.
Frank Harrell

15

Pour répondre à la question, plusieurs options s'offrent à vous: 1) tout sous-ensemble par AIC / BIC 2) par étape par p-valeur 3) par étape par AIC / BIC 4) régularisation telle que LASSO (peut être basée sur AIC / BIC ou CV) 5) algorithme génétique (GA) 6) autres? 7) utilisation d'une sélection non automatique, orientée sur la théorie ("connaissance de la matière")

La prochaine question serait quelle méthode est la meilleure. Ce document (doi: 10.1016 / j.amc.2013.05.016) indique que «toutes les régressions possibles» ont donné les mêmes résultats à leur nouvelle méthode proposée et que la procédure par étapes est pire. Un simple GA est entre eux. Cet article (DOI: 10.1080 / 10618600.1998.10474784) compare la régression pénalisée (pont, lasso, etc.) à des «sauts et limites» (semble un algorithme de recherche exhaustif mais plus rapide) et indique également que «le modèle de pont est en accord avec le meilleur modèle de la sélection du sous-ensemble par la méthode des sauts et des limites ». Ce document (doi: 10.1186 / 1471-2105-15-88) montre que GA est meilleur que LASSO. Ce document (DOI: 10.1198 / jcgs.2009.06164) proposait une méthode - une approche essentiellement basée sur un sous-ensemble (basée sur BIC) mais qui réduisait intelligemment le temps de calcul. Ils démontrent que cette méthode est meilleure que LASSO. Fait intéressant, ce document (DOI: 10.1111 / j.1461-0248.2009.01361.

Donc dans l’ensemble, les résultats sont mitigés, mais j’ai eu l’impression que GA semble très bon, bien que pas à pas ne soit pas trop grave et qu’il soit rapide.

En ce qui concerne 7), l’utilisation de la sélection non automatique, orientée vers la théorie ("connaissance de la matière"). Cela prend du temps et ce n'est pas nécessairement mieux que la méthode automatique. En fait, dans la littérature chronologique, il est bien établi que la méthode automatisée (en particulier les logiciels commerciaux) surpasse les experts humains "de manière substantielle" (doi: 10.1016 / S0169-2070 (01) 00119-4, page 561, par exemple en sélectionnant divers lissages exponentiels et modèles ARIMA).


6
Sachez que vous pouvez obtenir des performances différentes dans les études de simulation de différents algorithmes de sélection en modifiant le processus de génération de données pour favoriser (même de manière non intentionnelle) une routine particulière. La question de savoir quelle approche sera la plus rapide ou la plus lente est distincte, mais potentiellement importante.
gung

2
En fait, les exemples de l' article original de Tibshirani sur LASSO illustrent bien le propos de @ gung. Il en va de même pour les études comparatives de différentes méthodes sur des données réelles. BTW, votre dernière référence est-elle correcte? Le document de Clements & Hendry avec le DOI que vous donnez ne prétend pas que les méthodes automatisées surpassent les experts humains, ni n'utilise les mots "de manière substantielle". (Ce serait bien si vous
donniez

Je l'ai trouvé: Goodrich (2001), "Logiciel commercial dans la concurrence M3", Int. J. Forecast., 17, pages 560-565. Il fait partie de la même collection "Commentaires sur le concours M3" que le papier Clements & Hendry, c'est pourquoi Googling the DOI m'a envoyé là-bas.
Scortchi

Quoi qu'il en soit, il n'est pas du tout clair que le commentaire de Goodrich ait quelque chose à voir avec une expertise en la matière .
Scortchi

1
@Scortchi, l’article commençant à la page 581 sur ce numéro de journal peut paraître plus clair. Il s’agit plus de "M2-Competition", dans lequel les méthodes de prévision automatiques ont été comparées à des experts humains invités (parmi lesquels de grands noms de la littérature chronologique) connaissant le contexte économique / industriel et pouvant même demander des informations supplémentaires à des sociétés fournissant des informations. les données.
heran_xp

6

Voici une réponse en dehors du champ gauche. Au lieu d'utiliser une régression linéaire, utilisez un arbre de régression (package rpart). Ceci convient à la sélection automatique de modèles car avec un peu de travail, vous pouvez automatiser la sélection de cp, paramètre utilisé pour éviter les surajustements.


3

modèle linéaire peut être optimisé en mettant en œuvre un algorithme génétique dans la manière de choisir les variables indépendantes les plus précieuses. Les variables sont représentées sous forme de gènes dans l'algorithme, et le meilleur chromosome (ensemble de gènes) est ensuite sélectionné après les opérateurs de croisement, de mutation, etc. Il est basé sur la sélection naturelle - alors la meilleure "génération" peut survivre, autrement dit, l'algorithme optimise la fonction d'estimation qui dépend du modèle particulier.


2
Cela sélectionnerait les "meilleures" variables dans les données , pas nécessairement les meilleures dans le processus / la population générant des données, car il n'a accès qu'aux données. Ce n’est pas vraiment si différent de la méthode pas à pas que l’OP souhaitait.
gung

0

Nous avons une fonction dans le package de statistiques de base R, appelée step (), qui permet la sélection en avant, en arrière ou par étapes de modèles basés sur l'AIC le plus bas. Cela fonctionne également pour les variables factorielles. Est-ce que cela ne sert pas le but ici?


-51

Je vois que ma question a suscité beaucoup d’intérêt et un débat intéressant sur la validité de la méthode de sélection automatique des modèles. Bien que je convienne que prendre pour acquis le résultat d'une sélection automatique comporte des risques, il peut être utilisé comme point de départ. Voici donc comment je l'ai implémenté pour mon problème particulier, qui consiste à trouver les n meilleurs facteurs pour expliquer une variable donnée.

  1. faire toutes les régressions variables vs facteurs individuels
  2. trier la régression selon un critère donné (par exemple AIC)
  3. supprimer les facteurs qui ont un t-stat bas: ils sont inutiles pour expliquer notre variable
  4. avec l'ordre donné en 2., essayez d'ajouter les facteurs un par un au modèle et de les conserver lorsqu'ils améliorent notre critère. itérer pour tous les facteurs.

Encore une fois, c'est très rude, il y a peut-être des moyens d'améliorer la méthodologie, mais c'est mon point de départ. Je publie cette réponse en espérant que cela pourra être utile à quelqu'un d'autre. Les commentaires sont les bienvenus!


47
(1) Je n'ai assisté à aucun "débat" dans ce fil: toutes les réponses et tous les commentaires présentent le même message de base. (2) Votre implémentation semble être une version ad hoc de la régression par étapes . Je conviens que cela peut être utile comme point de départ à condition que cela ne soit pas automatiquement accepté comme une fin en soi.
whuber

28
vous avez effectivement accepté votre propre réponse qui va à l'encontre de chaque argument avancé par la communauté. Pas étonnant de voir les négatifs ici ...
jank

23
Je crois que c'est la première fois que je vois autant de votes négatifs. @SAM, pourquoi n'acceptez-vous pas certaines des autres excellentes réponses et supprimez-vous votre "réponse"?
Marbel

La réponse de cette SE est-elle la plus défavorisée?
mardi

2
Vous semblez avoir répondu à la question importante de @probabilityislogic en indiquant votre objectif "trouver les n meilleurs facteurs pour expliquer une variable donnée". La construction de modèles pour expliquer (pour comprendre la causalité) doit être faite de manière plus intentionnelle et généralement beaucoup plus intensive que la construction de modèles à prédire.
rolando2
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.