Je crée un outil de prévision interactif (en python) pour aider à la prévision qui se fait dans mon organisation. À ce jour, le processus de prévision a été largement conduit par l'homme, les prévisionnistes assimilant les données dans leurs réseaux neuronaux naturels et utilisant leur intuition acquise pour faire des prédictions. À partir d'une vérification de prévision à long terme et d'une étude de modélisation prédictive que j'ai faite, j'ai trouvé ce à quoi vous pourriez vous attendre; différents prévisionnistes présentent des biais différents, les effets de certains prédicteurs semblent être surestimés et d'autres importants semblent être ignorés et, en général, les performances de prévision sont médiocres par rapport à des modèles empiriques relativement simples.
Les prévisions continueront d'être manuelles, mais j'essaie de construire un outil utile pour fournir aux prévisionnistes une meilleure quantification des effets relatifs des prédicteurs. Il y a aussi des effets importants tels que les influences saisonnières qui sont souvent négligés que j'aimerais que l'outil souligne à l'utilisateur. Je m'attends à un certain degré de réaction et de scepticisme à l'égard du processus de modélisation de certains des prévisionnistes les plus «expérimentés» (dont beaucoup ont peu de connaissances formelles des statistiques), donc la communication est au moins aussi importante et les performances du modèle lui-même en termes de obtenir une amélioration mesurable de la précision des prévisions.
Les modèles que je développe ont une forte composante auto-régressive qui est parfois modifiée de manière significative par des événements qui apparaissent sous forme de valeurs mesurées dans certains prédicteurs qui sont, pendant les périodes non-événementielles, proches de zéro. Cela correspond au modèle mental utilisé par les prévisionnistes. L'élément clé est de pouvoir démontrer laquelle des mesures «d'événement» est la plus influente pour éloigner la prédiction de la valeur autorégressive pour une prévision donnée. J'imagine le processus de cette façon; le prévisionniste devine sa meilleure valeur, le modèle en suggère une autre et le prévisionniste demande pourquoi. Le modèle répond quelque chose comme "voir ici, cette valeur de ce prédicteur augmente la valeur de prévision en été. Si c'était l'hiver, cela se déplacerait dans l'autre sens. Je sais qu'il y a ces autres mesures,
Maintenant, imaginez que le modèle était une simple régression linéaire. On pourrait imaginer afficher l '«effet» relatif des prédicteurs basés sur les événements en multipliant la valeur par le modèle co-efficace et en affichant un simple graphique à barres. Toutes les barres des différents prédicteurs totalisent l'écart total par rapport à la valeur AR, et cela montre succinctement et clairement ceux qui, dans ce cas, ont une forte influence.
Le problème est que le processus en cours de prévision affiche un degré élevé de non-linéarité dans les prédicteurs, ou du moins, j'ai eu beaucoup plus de succès avec les algorithmes d'apprentissage automatique non linéaire à boîte noire (forêt aléatoire et GBM) qu'avec les GLM pour cet ensemble de données. Idéalement, je voudrais pouvoir changer de façon transparente le modèle en travaillant `` sous le capot '' sans que l'expérience utilisateur ne change, j'ai donc besoin d'un moyen générique pour démontrer de manière simple l'importance des différentes mesures sans utiliser une approche spécifique à l'algorithme. Mon approche actuelle consistera à quasi-linéariser les effets en mettant toutes les valeurs à zéro, sauf pour un prédicteur, à enregistrer l'écart prévu et à répéter pour tous les prédicteurs, en affichant les résultats dans le graphique à barres mentionné ci-dessus. En présence d'une forte non-linéarité, cela peut ne pas fonctionner aussi bien.
la source
Réponses:
Vous pouvez évaluer l'influence des prédicteurs sur les prévisions en estimant le gradient de la sortie par rapport aux prédicteurs. Cela peut être fait en estimant les dérivées partielles de la fonction de prédiction non linéaire par rapport à chacun des prédicteurs par différences finies.
Idéalement, vous le ferez sur les entrées de test réellement observées. Par exemple, vous pouvez faire la moyenne des valeurs absolues des gradients estimés sur toutes les entrées de test des 2 derniers jours. L'amplitude de ce gradient moyen peut être utilisée pour trier l'importance des prédicteurs. (Vous devrez faire attention à l'estimation du gradient pour utiliser les unités appropriées par la notation z ou une telle méthode.) Vous pouvez enregistrer ces gradients estimés par saison pour une analyse comparative.
Voir « Comment expliquer les décisions individuelles de classement », par David Baehrens et. Al. dans JMLR pour en savoir plus sur cette idée. L'article traite de la classification mais se généralise facilement à la régression également.
la source
Avez-vous essayé le module scikit-learn en python.
Vous pouvez "importance_ordinateur" pour les fonctionnalités de son randomForestClassifier
la source