Attribuer plus de poids aux observations plus récentes en régression

9

Comment attribuer plus de poids à des observations plus récentes dans R?

Je suppose que c'est une question ou un désir fréquemment posé, mais j'ai du mal à trouver exactement comment mettre en œuvre cela. J'ai essayé de chercher beaucoup pour cela, mais je ne peux pas trouver un bon exemple pratique.

Dans mon exemple, j'aurais un grand ensemble de données au fil du temps. Je veux dire appliquer une sorte de pondération exponentielle des lignes de données les plus récentes. J'aurais donc une sorte de fonction exponentielle disant que les observations en 2015 sont ___ plus importantes pour la formation du modèle que les observations en 2012.

Mes variables d'ensemble de données contiennent un mélange de valeurs catégorielles et numériques et ma cible est une valeur numérique - si cela importe.

Je voudrais tester / essayer cela en utilisant des modèles tels que GBM / Random Forest, idéalement dans le package CARET.

mise à jour-question

J'apprécie la réponse donnée ci-dessous sur la façon de décomposer de façon exponentielle le poids par la distance de date entre deux points.

Cependant, en ce qui concerne la formation de ce modèle au curseur, comment les poids prennent-ils en compte exactement? La valeur de poids dans chacune des lignes d'entraînement est la distance entre un point dans le futur et le moment où ce point s'est produit historiquement.

Les poids entrent-ils en jeu uniquement lors de la prédiction? Parce que s'ils entrent en jeu pendant l'entraînement, cela ne causerait-il pas toutes sortes de problèmes, car divers plis croisés auraient des poids variables, essayant de prédire quelque chose qui aurait pu se produire à un moment donné avant lui?

user3788557
la source
3
Closevote parce que l'interrogateur doit clarifier les problèmes statistiques. Il n'est pas clair pour moi que GBN ou RF sont appropriés ici. Suggérer de migrer vers CV.com
DWin
D'accord. J'ajouterai bientôt un exemple. Je vois juste ce genre de question partout sur Internet, mais aucun exemple concret de la façon de l'appliquer / le résoudre.
user3788557

Réponses:

5

Comment attribuer plus de poids à des observations plus récentes dans R?

Je suppose que vous avez un horodatage associé à chaque observation. Vous pouvez calculer une variable timeElapsed = modelingTime - observationTime. Maintenant, vous appliquez une fonction exponentielle simple comme W=K*exp(-timeElapsed/T), où Kest une constante de mise à l'échelle et Test la constante de temps pour la fonction de décroissance. Wfonctionne comme cas-poids.

Au meilleur de notre connaissance, de nombreuses fonctions de caretpermettre en weighttant que paramètre, qui est une colonne de cas-poids à fournir à l' observation correspondante (ayant ainsi la même longueur que #rows).

Ujjwal Kumar
la source
1
La fonction dans caret::trainest weights.
timcdlucas
Merci Ujjwal - mais quelle est la méthodologie pour déterminer «K» dans votre équation? des lignes directrices ou des meilleures pratiques? De plus, qu'entendez-vous par «période de temps» pour la fonction de désintégration?
user3788557
K n'est qu'une constante de mise à l'échelle et n'affectera pas beaucoup les résultats du modèle. Vous pouvez définir une valeur de sorte que la plage de valeurs de pondération soit peut-être proche de la plage 0-1. En ce qui concerne la "période de temps", elle est également appelée la constante de temps pour une fonction de décroissance exponentielle du 1er ordre OU la durée de vie moyenne. Vous pouvez le rechercher sur wikipedia.
Ujjwal Kumar
Veuillez voir ma mise à jour de mon message. Est-ce que cela fonctionnera correctement pendant la formation? Le modèle de formation aura-t-il un biais car les poids ne peuvent être appliqués que lorsqu'ils sont utilisés contre l'ensemble de test? Lorsque l'ensemble d'entraînement est mélangé au hasard, il peut être mauvais si des poids plus élevés sont utilisés pour prédire les prix dans le passé ou contre une période qui n'est pas proche dans le temps.
user3788557
Sans pondération, votre formation sur le modèle accorderait une importance égale aux données anciennes et nouvelles, mais avec les pondérations proposées, elle accordera plus d'importance aux données plus récentes, donc dans ce sens, elle est biaisée vers les observations plus récentes, mais c'est Ce que vous vouliez. Je ne comprends pas pourquoi "les pondérations ne peuvent être autorisées que pour les cas de test" . De plus, comment des poids plus élevés seraient-ils utilisés pour des valeurs plus anciennes lorsque l'ensemble d'entraînement est mélangé de manière aléatoire? lors de la modélisation de TimeTime est conservé pour tous les cas de formation. Les pondérations de cas PS ne s'appliquent pas lorsque vous utilisez simplement un modèle, elles ne s'appliquent qu'à la période de formation.
Ujjwal Kumar
0

Les données (pas l'analyste qui fait des hypothèses - des suppositions) peuvent souvent suggérer la forme du schéma de pondération. Cela se fait via GLS où les poids appropriés pour le modèle des moindres carrés pondérés sont obtenus à partir des différences statistiquement significatives trouvées dans la variance d'erreur. Jetez un œil à la détection des changements et des valeurs aberrantes au moyen d'ARIMA (procédure Tsay) et ici http://docplayer.net/12080848-Outliers-level-shifts-and-variance-changes-in-time-series.html . Si vous souhaitez publier des données, veuillez le faire ici et j'essaierai de vous aider davantage car j'ai un accès de routine à des logiciels qui pourraient vous éclairer.

Il existe une version R du logiciel que j'utilise.

Vous pourriez regarder Comment inclure des variables de contrôle dans une analyse d'intervention avec ARIMA? car il donne un exemple de la façon dont les pondérations sont identifiées et utilisées pour stabiliser la variance d'erreur, ce qui permet de croire / de ne pas croire / d'actualiser / de pondérer / de faire confiance à certaines valeurs antérieures.

IrishStat
la source