Analyse croisée des séries chronologiques

37

J'utilise le paquet caret dans R pour créer des modèles prédictifs de classification et de régression. Caret fournit une interface unifiée permettant de régler les hyper-paramètres de modèle par validation croisée ou initialisation. Par exemple, si vous construisez un modèle simple de classification 'voisins les plus proches', combien de voisins devez-vous utiliser? 2? dix? 100? Caret vous aide à répondre à cette question en rééchantillonnant vos données, en essayant différents paramètres, puis en agrégeant les résultats pour déterminer lequel offre la meilleure précision prédictive.

J'aime cette approche car elle fournit une méthodologie robuste pour choisir les hyper-paramètres du modèle. Une fois que vous avez choisi les hyper-paramètres finaux, elle fournit une estimation croisée de la "qualité" du modèle, en utilisant la précision des modèles de classification. et RMSE pour les modèles de régression.

Je souhaite maintenant créer un modèle de régression pour certaines données chronologiques, en utilisant probablement une forêt aléatoire. Quelle est la bonne technique pour évaluer la précision prédictive de mon modèle, compte tenu de la nature des données? Si les forêts aléatoires ne s'appliquent pas vraiment aux données chronologiques, quel est le meilleur moyen de créer un modèle d'ensemble précis pour l'analyse des séries chronologiques?

Zach
la source
J'ai trouvé la question vraiment intéressante. Est-il possible de marquer une question pour la suivre?
Mariana Soffer
1
@mariana soffer Cliquez sur l'icône "Étoile" sous les flèches haut / bas.
Zach
4
Caret prend désormais en charge la validation croisée des séries chronologiques
r-bloggers.com/time-series-cross-validation-5
1
@Zach This 'un ancien post, mais je me demande si vous avez de nouvelles idées? Êtes-vous au courant de travaux récents sur la validation de modèles séquentiels?
HoraceT

Réponses:

10

La technique "classique" de validation croisée des temps k est basée sur le fait que chaque échantillon de l'ensemble de données disponibles est utilisé (k-1) fois pour former un modèle et un temps pour le tester. Comme il est très important de valider des modèles de séries chronologiques sur des données "futures", cette approche ne contribuera pas à la stabilité du modèle.

Une propriété importante de nombreuses séries chronologiques (la plupart?) Est la corrélation entre les valeurs adjacentes. Comme l'a souligné IrishStat, si vous utilisez les lectures précédentes comme variables indépendantes de votre candidat au modèle, cette corrélation (ou manque d'indépendance) joue un rôle important et constitue une autre raison pour laquelle la validation croisée à k-times n'est pas une bonne idée.

Une façon de surmonter ce problème consiste à "suréchantillonner" les données et à les décorréler. Si le processus de décorrélation est réussi, l’utilisation de la validation croisée sur les séries chronologiques devient alors moins problématique. Cependant, cela ne résoudra pas le problème de la validation du modèle à l'aide de données futures.

Des clarifications

en validant le modèle sur des données futures, je veux dire la construction du modèle, l'attente de nouvelles données qui n'étaient pas disponibles pendant la construction, les tests, le réglage précis, etc. et la validation sur ces nouvelles données.

en suréchantillonnant les données, je veux dire la collecte de données chronologiques à une fréquence beaucoup plus élevée que nécessaire. Par exemple: échantillonnage des cours boursiers toutes les 5 secondes, lorsque les modifications horaires vous intéressent vraiment. Ici, quand je dis "échantillonnage", je ne veux pas dire "interpoler", "estimer", etc. Si les données ne peuvent pas être mesurées à une fréquence plus élevée, cette technique n'a pas de sens.

Boris Gorelik
la source
Quelle est la manière "classique" de valider un modèle sur des données futures? Que voulez-vous dire par «suréchantillonnage»? Merci!
Zach
TppT
@ bgbg Je suis confronté à un problème très similaire et vient de trouver votre message. Pouvez-vous citer des références sur le suréchantillonnage et la décorrélation des données de séries chronologiques? Je pense que si la mémoire dans la série chronologique est suffisamment courte (pourrait montrer qu’il s’agit d’un arima), on pourrait simplement prendre des échantillons "non chevauchants" et procéder à la validation croisée habituelle. Toute pensée appréciée.
HoraceT
9

http://robjhyndman.com/researchtips/crossvalidation/ contient une astuce rapide pour la validation croisée de séries chronologiques. En ce qui concerne l’utilisation de forêts aléatoires pour les données de séries chronologiques, il n’est pas sûr, bien que cela semble un choix étrange étant donné que le modèle est ajusté à l’aide d’échantillons bootstrap. Il existe bien sûr des méthodes classiques de séries chronologiques (par exemple ARIMA), de même que des techniques de ML telles que Neural Nets (exemple, exemple pdf ). Certains experts en séries chronologiques peuvent peut-être commenter le fonctionnement des techniques ML par rapport aux algorithmes spécifiques à une série chronologique.

B_Miner
la source
2
Cela frappe presque le clou sur la tête. J'essaie de comprendre comment appliquer les techniques d'apprentissage automatique à l'analyse de séries chronologiques.
Zach
J'ai déjà utilisé avec succès des forêts aléatoires pour la prévision. Départ: biomedcentral.com/1471-2105/15/276
captain_ahab
6

Voici un exemple de code pour la validation croisée de modèles de séries chronologiques. J'ai développé ce code dans mon blog , en intégrant le paquetage foreach pour accélérer les choses et en permettant un éventuel terme xreg dans la validation croisée.

Voici une copie du code du blog de Rob Hyndman:

library(fpp) # To load the data set a10
plot(a10, ylab="$ million", xlab="Year", main="Antidiabetic drug sales")
plot(log(a10), ylab="", xlab="Year", main="Log Antidiabetic drug sales")

k <- 60 # minimum data length for fitting a model
n <- length(a10)
mae1 <- mae2 <- mae3 <- matrix(NA,n-k,12)
st <- tsp(a10)[1]+(k-2)/12

for(i in 1:(n-k))
{
  xshort <- window(a10, end=st + i/12)
  xnext <- window(a10, start=st + (i+1)/12, end=st + (i+12)/12)
  fit1 <- tslm(xshort ~ trend + season, lambda=0)
  fcast1 <- forecast(fit1, h=12)
  fit2 <- Arima(xshort, order=c(3,0,1), seasonal=list(order=c(0,1,1), period=12), 
      include.drift=TRUE, lambda=0, method="ML")
  fcast2 <- forecast(fit2, h=12)
  fit3 <- ets(xshort,model="MMM",damped=TRUE)
  fcast3 <- forecast(fit3, h=12)
  mae1[i,1:length(xnext)] <- abs(fcast1[['mean']]-xnext)
  mae2[i,1:length(xnext)] <- abs(fcast2[['mean']]-xnext)
  mae3[i,1:length(xnext)] <- abs(fcast3[['mean']]-xnext)
}

plot(1:12, colMeans(mae1,na.rm=TRUE), type="l", col=2, xlab="horizon", ylab="MAE",
     ylim=c(0.65,1.05))
lines(1:12, colMeans(mae2,na.rm=TRUE), type="l",col=3)
lines(1:12, colMeans(mae3,na.rm=TRUE), type="l",col=4)
legend("topleft",legend=c("LM","ARIMA","ETS"),col=2:4,lty=1)

Résultats

Zach
la source
Salut Zach. J'ai implémenté une version légèrement différente du code de Hyndman afin de détecter le nombre approprié de termes pour un modèle de régression avec une série chronologique. Malheureusement, le graphique d'erreur CV a montré plusieurs minima locaux, ce qui m'a amené à me demander comment sélectionner correctement le nombre de termes. Le problème complet est décrit ici . Avez-vous déjà fait face à quelque chose de similaire?
jroberayalas
5

Si vous disposez de données chronologiques, vous pourriez avoir un "problème de degrés de liberté". Par exemple, si vous avez 4 observations effectuées à des intervalles d'une heure et que vous décidez ensuite d'utiliser 241 observations à des intervalles d'une minute, vous avez 241 observations mais elles ne sont pas nécessairement indépendantes. Lorsque vous soumettez ces 241 valeurs / mesures à un package analytique, le package peut s'attendre à ce qu'il s'agisse de 241 valeurs indépendantes au fur et à mesure de l'exécution de sa magie particulière. Si vous disposez de données chronologiques, vous devrez peut-être mettre à jour vos analyses. Je ne connais pas le programme auquel vous faites référence, mais il est raisonnable de penser de ma part (je pourrais me tromper!) Que ses tests (tests F / tests T, etc.) ne s'appliquent probablement pas à votre problématique.

IrishStat
la source