Comment gérer les prévisions de séries chronologiques en ligne?

9

J'ai été confronté au problème suivant. J'ai une sorte de système en temps réel et à chaque période, je lis sa valeur actuelle, créant une série temporelle (comme 1, 12, 2, 3, 5, 9, 1, ...). Je voudrais connaître les méthodes (statistiques et apprentissage automatique) pour prévoir la prochaine valeur de manière en ligne (c'est-à-dire chaque fois qu'une nouvelle valeur est lue). J'ai essayé ARIMA de R et SMOreg de Weka, ils donnent de bonnes prédictions, mais ils sont un peu lents car chaque fois qu'une nouvelle valeur arrive, je dois refaire les calculs.

PS Ce serait formidable aussi si la méthode avait un intervalle de confiance.

Fernando
la source

Réponses:

4

Dans votre système en temps réel, les temps d'observation sont-ils inhomogènes et les données non stationnaires? Si vous voulez quelque chose de simple et rapide, je suggère d'utiliser les opérateurs de type EMA non homogènes:

Opérateurs sur des séries chronologiques non homogènes

Ils mettent à jour l'EMA ( ) à chaque nouvelle observation selon,valeur

valeur+=α(nouvelles données-valeur),α=1-exp(-Δtτ)

avec un paramètre de lissage / réglage. C'est un moyen simple d'estimer une attente.τ

On peut également créer une simple estimation médiane en ligne via la mise à jour

sg=sgn(nouvelles données-med)med+=ϵ(sg-med)

En pratique, vous voulez petit (ou en décomposition avec plus d'observations). Idéalement, devrait dépendre de la façon dont les mises à jour sont déséquilibrées; c'est-à-dire si fait égal à la médiane, alors devrait être uniforme sur . Vous pouvez ensuite l'étendre à une structure de type arbre binaire équilibré en profondeur pour obtenir quantiles uniformément espacés.ϵϵmedsg{-1,1}2+1-1

La combinaison de ce qui précède devrait vous donner une distribution en ligne décente de vos données. L'arbre est difficile à obtenir correctement, j'ai des implémentations des deux en C ++ si cela vous intéresse. J'utilise beaucoup les deux en pratique (données financières en temps réel) et ils ont bien fonctionné.

muratoa
la source
Salut Murat! J'ai créé un lien hypertexte vers l'article que vous avez publié et centré vos équations. Consultez l'historique des publications si vous souhaitez voir comment procéder pour référence future. Il y a aussi quelques boutons utiles en haut de la zone de texte qui apparaissent lorsque vous écrivez une réponse qui fera beaucoup de choses automatiquement pour vous (par exemple, saisir des images, des liens, des caractères gras / italiques et plus). (+1, btw)
Macro
3

Vous devez d'abord effectuer une intégration temporelle de vos données. Par exemple, prenez comme première entrée [1, 12, 2, 3] et la sortie correspondante [5], et comme deuxième entrée, vous prenez [12, 2, 3, 5] et la sortie correspondante [9]. (Il s'agit de l'incorporation avec le délai 4, mais vous pouvez choisir une autre valeur qui convient mieux.)

Vous avez maintenant un problème de prédiction valide. À ces données, vous pouvez appliquer des processus gaussiens en ligne . Il s'agit d'une méthode d'apprentissage automatique qui fait exactement ce que vous décrivez et fournit des intervalles de confiance.

Si votre modèle n'est pas stationnaire, vous pouvez essayer l'extension non stationnaire, le traqueur récursif des moindres carrés du noyau . Soit dit en passant, ce document comprend le code Matlab pour les cas fixes et non stationnaires.

Ces méthodes sont relativement rapides: leur complexité de calcul est quadratique en termes de nombre de données que vous stockez en mémoire (qui est généralement une petite partie représentative de toutes les données traitées). Pour des méthodes plus rapides, je recommande par exemple la méthode des moindres carrés moyens du noyau, mais leur précision est moindre.

Steven
la source
La procédure que vous avez recommandée fait-elle rapport lorsque des changements de niveau ou des changements de tendance temporelle se produisent? Détecte-t-il des changements de paramètres ou des changements de variance dans le temps? Fait-il la distinction entre la mémoire auto-régressive saisonnière et les mannequins saisonniers?
IrishStat
@IrishStat Je pense que votre question est rhétorique. Si un modèle peut avoir une récursivité simple pour mettre à jour le modèle, il ne peut pas avoir toutes les complexités que vous décrivez. Parfois, il est plus important d'obtenir une réponse correcte plutôt qu'une réponse rapide qui est mauvaise. C'est pourquoi dans ma réponse, j'ai dit de ne le faire que si le modèle correspond bien aux données!
Michael R. Chernick
1
@IrishStat Ces méthodes sont "non paramétriques", ce qui signifie qu'elles ne supposent aucun modèle spécifique des données (elles "ajustent" simplement les données). Ils ne signalent pas les changements de tendance. Cependant, ils signalent une erreur de prédiction, donc si vous voulez trouver des changements de tendance, vous pouvez probablement simplement regarder lorsque l'erreur de prédiction est suffisamment importante.
Steven
Je ne connais pas les processus gaussiens clairsemés en ligne, mais à la lecture de l'article lié, je ne pense pas qu'il soit tout à fait correct de les qualifier de "non paramétriques" car ils utilisent des processus gaussiens pour les distributions antérieures et impliquent un certain nombre de paramètres dans leur "Kalman". -filtre-like "recursiona. Il semble qu'une certaine structure du modèle doive être implicite dans la formulation. Je pense toujours que les commentaires d'IrishStat s'appliquent.
Michael R. Chernick
3

Le filtre de Kalman est un algorithme récursif. Il prend la nouvelle observation et la combine avec la prédiction précédente. Ce serait bien d'utiliser mais seulement si c'est un modèle approprié pour vos données. Je ne sais pas à quel point il est facile de mettre à jour l'intervalle de prédiction.

Michael R. Chernick
la source
0

Je ne sais pas si vous avez essayé cela, mais dans R lorsque vous utilisez la fonction Arima, vous pouvez spécifier le modèle comme entrée. Donc, si initialement vous avez trouvé un modèle arima, disons Arima (1,2,1) avec les composants de lissage respectifs, vous pouvez ensuite corriger le modèle dans les itérations ultérieures afin qu'il n'essaye pas de réaménager un modèle. Si vos données sont stationnaires dans ce cas, les prévisions peuvent être suffisamment bonnes pour vous - et beaucoup plus rapides.

J'espère que cela t'aides..

Roark
la source