Comment sélectionner rapidement des variables importantes dans un très grand ensemble de données?

9

J'ai un ensemble de données avec environ 2 000 variables binaires / 200 000 lignes et j'essaie de prédire une seule variable dépendante binaire. Mon objectif principal à ce stade n'est pas d'obtenir l'exactitude des prévisions, mais plutôt d'identifier lesquelles de ces variables sont des prédicteurs importants. J'aimerais ramener le nombre de variables dans mon modèle final à environ 100.

Existe-t-il un moyen relativement rapide d'obtenir les variables les plus importantes? randomForest semble prendre beaucoup de temps.

Je n'ai pas à utiliser les 200 000 observations, donc l'échantillonnage est une option sur la table.

DevX
la source
Par prédicteurs «importants» plutôt que «précis», voulez-vous dire que vous voulez trouver ceux qui sont les meilleurs candidats pour expliquer le résultat et vous aider à construire une théorie? Si c'est le cas, 100 variables explicatives est un très grand nombre - prohibitif. L'élaboration d'une théorie et une véritable explication (plutôt qu'une simple prédiction) exigeraient probablement que vous réduisiez le nombre de X à 10 ou 15.
rolando2
2
@ rolando2 Dans certaines applications, 100 n'est pas du tout grand. Par exemple, la littérature sur l'accessibilité au haut débit à grande vitesse indique environ 150 variables (sur plusieurs centaines analysées) et toutes sont raisonnables: elles se rapportent à la facilité d'ingénierie (terrain, type de roche, climat, etc.), à l'économie (SES, etc.), à la démographie, à la géométrie de l'infrastructure de transport locale, à la politique (fiscalité et climat des affaires), etc. Je pense que de nombreux modèles économiques peuvent également inclure plusieurs centaines de variables théoriquement importantes.
whuber
@whuber - Je réfléchis à votre propos ... Seriez-vous d'accord pour dire qu'il faut un analyste exceptionnellement dévoué, talentueux et aguerri pour trier les rôles causaux (plutôt que simplement prédictifs) joués par tant de variables?
rolando2
@rolando Sure. 2000 variables, c'est beaucoup de travail!
whuber

Réponses:

6

Vous pouvez commencer avec un simple filtre univarié et utiliser la validation croisée pour décider des variables à conserver. La sbffonction dans le caretpackage pour R est vraiment utile. Vous pouvez en savoir plus ici , à partir de la page 19.

Zach
la source
Merci. Je viens de lire le document et cela semble être une approche solide. Cependant, je rencontre des problèmes de mémoire sur mon système de mémoire 64 bits 4 Mo.
DevX
1
@DevX: Si vous avez trop de données, vous pouvez essayer de prendre un échantillon et de choisir des variables en fonction de l'échantillon?
Zach
13

Cela ressemble à un problème approprié pour le lasso et les amis qui effectuent un rétrécissement et une sélection variable. Les éléments de l'apprentissage statistique décrivent le lasso et le filet élastique pour la régression et, ce qui est plus pertinent pour ce problème, la régression logistique.

Les auteurs du livre ont mis à disposition une implémentation efficace du lasso et du filet élastique sous la forme d'un package R appelé glmnet . J'ai déjà utilisé ce package pour l'analyse de données binaires avec des matrices de données d'environ 250 000 lignes, bien qu'un peu moins de colonnes, mais exécutant en fait des régressions de toutes les colonnes par rapport à toutes les autres colonnes. Si la matrice de données est également clairsemée, la mise en œuvre peut également en profiter, et je pense que la méthode peut réellement fonctionner pour l'ensemble de données OPs. Voici quelques commentaires sur le lasso:

  • 1
  • La sélection du paramètre de réglage se fait souvent par validation croisée, mais même sans l'étape de validation croisée, la méthode peut être en mesure de donner une bonne séquence de variables sélectionnées indexées par le paramètre de pénalité.
  • En revanche, pour la sélection des variables, le lasso peut être instable dans la sélection des variables, en particulier si elles sont quelque peu corrélées. La pénalité nette élastique plus générale a été inventée pour améliorer cette instabilité, mais elle ne résout pas complètement le problème. Le lasso adaptatif est une autre idée pour améliorer la sélection des variables pour le lasso.
  • La sélection de la stabilité est une méthode générale suggérée par Meinshausen et Bühlmann pour obtenir une plus grande stabilité des variables sélectionnées avec des méthodes comme le lasso. Il nécessite un certain nombre d'ajustements à des sous-échantillons de l'ensemble de données et, en tant que tel, est beaucoup plus exigeant en termes de calcul.
  • Une façon raisonnable de penser le lasso est une méthode pour générer un ensemble unidimensionnel de «bons» modèles allant d'un modèle à variable unique à un modèle plus compliqué (n'incluant pas nécessairement toutes les variables) paramétré par le paramètre de pénalité. En revanche, les filtres univariés produisent uniquement une sélection ou un ordre des bons modèles à variable unique.

Pour Python, il existe une implémentation dans scikit-learn de méthodes telles que le lasso et le filet élastique.

NRH
la source
Comme notion supplémentaire, si le nombre de prédicteurs potentiels montent en flèche, comme dans GWAS, vous pouvez faire quelque chose comme dans cet article pour présélectionner: l' analyse des associations à l'échelle du génome par lasso régression logistique pénalisée
Nick Sabbe
@NickSabbe, merci pour cette référence. C'est très utile. Dans le contexte du GWAS, et probablement aussi dans d'autres contextes avec un grand nombre de prédicteurs corrélés, j'ai entendu Sylvia Richardson recommander la sélection du modèle bayésien sur la base, par exemple, de quelques comparaisons avec la sélection de stabilité. Les calculs MCMC étaient cependant très exigeants.
NRH
Je pense qu'il vaut la peine de souligner le lasso adaptatif car il est facile à implémenter (presque seulement deux appels au lieu d'un glmnetdans R). Une autre option est Thresholding the Lasso, qui est également assez simple à implémenter. Voir la section 2.9 de springer.com/gp/book/9783642201912 .
Benjamin Christoffersen
2

Vous pouvez faire un test d'association de régression logistique / khi carré pour chaque variable et ne conserver que celles qui ont une valeur p inférieure à une certaine valeur, par exemple .2.

Glen
la source
4
Pour avoir une idée de la façon dont cette recommandation pourrait se concrétiser, considérons un cas où il existe 100 (par exemple) des prédicteurs importants (fortement corrélés avec la variable dépendante) et les autres sont complètement indépendants de la variable dépendante et les uns des autres. La conservation de ceux avec des valeurs de p inférieures à 0,2 garantit que vous vous retrouverez avec environ 100 + 0,2 * (2000-100) = 480 variables, dont 380 sans valeur. Pour les petits ensembles de données, cette approche est parfois utilisée comme un écran initial rapide, mais elle ne peut vraiment pas être sérieusement considérée ici.
whuber
Bon point @whuber. Vous devrez régler votre niveau alpha beaucoup plus bas pour conserver environ 100, mais vous risquez alors de manquer des variables qui peuvent uniquement affecter les ajustements pour les autres. Cependant, passer de 2000 à 480 pourrait être plus facile à gérer en exécutant quelque chose comme des forêts aléatoires.
Glen
Vous avez raison, un tel dépistage a du mérite - s'il fonctionne correctement. 480 est une réduction, mais la possibilité de corrélations élevées entre les 2 000 variables d'origine pose d'autres problèmes. Cela peut entraîner le non-maintien d'une ou de la totalité des 100 variables correctes, comme l'illustrent certaines des réponses à une question connexe .
whuber