Apprentissage incrémental pour le modèle de série chronologique LOESS

9

Je travaille actuellement sur certaines données de séries chronologiques, je sais que je peux utiliser le modèle LOESS / ARIMA.

Les données sont écrites dans un vecteur dont la longueur est de 1000, qui est une file d'attente, mise à jour toutes les 15 minutes,

Ainsi, les anciennes données apparaîtront pendant que les nouvelles données pousseront dans le vecteur.

Je peux réexécuter le modèle entier sur un planificateur, par exemple recycler le modèle toutes les 15 minutes, c'est-à-dire utiliser la valeur entière de 1000 pour entraîner le modèle LOESS, mais il est très inefficace, car chaque fois qu'une seule valeur est insérée tandis qu'une autre 999 vlaues toujours la même que la dernière fois.

Alors, comment puis-je obtenir de meilleures performances?

Merci beaucoup

Zhang
la source
3
Qu'est-ce qu'un "modèle LOESS / ARIMA"? Voulez-vous dire une tendance temporelle non linéaire avec des erreurs ARIMA où la tendance non linéaire est estimée en utilisant LOESS?
Rob Hyndman
désolé, je veux dire modèle LOESS ou ARIMA. Par exemple, j'utilise LOESS pour trouver les résidus comme: résidus (loess (x ~ time)). car les données x sont vectorielles avec 1000 valeurs, qui sont mises à jour toutes les 15 minutes. Comment puis-je obtenir efficacement les résidus, mais pas réexécuter le jeu de données entier comme entrée à chaque fois? comme une seule valeur est mise à jour à chaque fois, les 999 autres valeurs sont toujours les mêmes que la dernière fois.
zhang
une méthode possible, peut-être utiliser les 1000 premières valeurs pour prédire les 1000 valeurs suivantes (bien que LOESS ne prenne en charge que la prévision de 4 valeurs), puis calculer le résiduel comme la différence entre la valeur réelle et la valeur de prédiction correspondante, puis recycler le modèle toutes les 1000 valeurs ce n'est pas le modèle LOESS d'origine que je veux du tout :-(
zhang

Réponses:

1

Permettez-moi de reformuler cela en quelque chose de plus familier pour moi. L'ARIMA est un analogue de l'approximation PID. Je suis intégrale. MA est P. l'AR peut être exprimé sous forme d'équations de différence qui sont le terme D. LOESS est un raccord analogique aux moindres carrés (grand frère high-tech vraiment).

Donc, si je voulais améliorer un modèle de second ordre (PID), que pourrait-on faire?

  • Tout d'abord, je pouvais utiliser un filtre de Kalman pour mettre à jour le modèle avec une seule nouvelle information.
  • Je pourrais aussi regarder quelque chose qui s'appelle "arbres boostés par gradient". En utilisant un analogue d'entre eux, je ferais un deuxième modèle ARIMA dont les entrées sont à la fois les entrées brutes alimentées au premier, augmentées des erreurs du premier.
  • J'envisagerais de regarder le PDF des erreurs pour plusieurs modes. Si je pouvais regrouper les erreurs, je souhaiterais peut-être diviser les modèles ou utiliser un modèle de mélange pour séparer les entrées en sous-modèles. Les sous-modèles pourraient mieux gérer la phénoménologie locale qu'un modèle à grande échelle.

L'une des questions que je n'ai pas posée est "que signifie la performance?". Si nous n'avons pas une mesure de bonté clairement indiquée, il n'y a aucun moyen de dire si une méthode candidate "s'améliore". Il semble que vous souhaitiez une meilleure modélisation, un temps de calcul plus court et une utilisation plus efficace des informations. Avoir des éphémérides sur les données réelles peut également informer cela. Si vous modélisez le vent, vous pouvez savoir où chercher des modèles d'augmentation ou trouver des transformations utiles pour vos données.

EngrStudent
la source
1

Il s'agit d'une question différente selon que vous utilisez un loess ou un modèle ARIMA. Je vais répondre à la question du loess pour l'instant, car je soupçonne qu'il y a peu d'efficacité possible dans le cas ARIMA, à part peut-être d'avoir un bon ensemble de valeurs de départ.

Un modèle de loess fonctionne en ajustant une régression pondérée à différents sous-ensembles de données. Seule une partie des données est utilisée pour chaque ajustement. Ainsi, chaque fois que vous réinstallez le modèle après avoir déposé un point de données à une extrémité et ajouté un autre à l'extrémité opposée, vous n'avez techniquement besoin que d'ajuster les régressions locales qui utilisent le premier et le dernier point. Toutes les régressions locales intermédiaires seront les mêmes. Le nombre exact de ces régressions locales non impactées dépendra de votre paramètre de lissage dans le loess.

Vous pouvez pirater le package que vous utilisez pour adapter votre modèle afin qu'il puisse prendre la plupart des régressions locales d'un ajustement précédent et ne s'adapter qu'à celles qui sont nécessaires au début et à la fin des données.

Cependant, il me semble que cela ne valait la peine de le faire que si le coût en temps de programmation supplémentaire était considérablement inférieur au coût en temps informatique de simplement ajuster le modèle à partir de zéro toutes les 15 minutes. Avec seulement 1000 points de données, ce n'est sûrement pas si important de monter le modèle à partir de zéro à chaque fois.

Peter Ellis
la source