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:
- calculer la matrice de corrélation de tous les facteurs
- choisir les facteurs qui ont une faible corrélation entre eux
- supprimer les facteurs qui ont un t-stat bas
- ajouter d'autres facteurs (toujours basé sur le facteur de faible corrélation trouvé dans 2.).
- 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.
Réponses:
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 là ):
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:
Les résultats de la première course sont affichés dans la figure suivante avec les commentaires de l'entraîneur aux enfants.
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):
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.
la source
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'
oumethod='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 lafindCorrelation
fonction caret pour identifier et éliminer les variables colinéaires et larfe
fonction caret pour éliminer les variables avec une statistique t faible (utilisationrfeControl=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=glmnet
argument de caret et comparez l'exactitude validée par croisement de ce modèle à l'method=lmStepAIC
argument. 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é.la source
r
oupython
? J'adorerais l'essayer.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.
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.
la source
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).
la source
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.
la source
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.
la source
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?
la source
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.
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!
la source