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?
la source
Réponses:
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 commeW=K*exp(-timeElapsed/T)
, oùK
est une constante de mise à l'échelle etT
est la constante de temps pour la fonction de décroissance.W
fonctionne comme cas-poids.Au meilleur de notre connaissance, de nombreuses fonctions de
caret
permettre enweight
tant que paramètre, qui est une colonne de cas-poids à fournir à l' observation correspondante (ayant ainsi la même longueur que #rows).la source
caret::train
estweights
.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.
la source