[J'ai d'abord posté cette question sur Stack Overflow ici mais je n'ai reçu aucune réponse, alors j'ai pensé essayer ici. Toutes mes excuses si la rediffusion n'est pas autorisée.]
J'ai essayé d'utiliser cette implémentation de l'algorithme Holt-Winters pour la prévision de séries chronologiques en Python, mais j'ai rencontré un barrage routier ... en gros, pour certaines séries d'entrées (positives), il prévoit parfois des nombres négatifs, ce qui devrait clairement pas le cas. Même si les prévisions ne sont pas négatives, elles sont parfois extrêmement imprécises - des ordres de grandeur supérieurs / inférieurs à ce qu'ils devraient être. Donner à l'algorithme plus de périodes de données avec lesquelles travailler ne semble pas aider et, en fait, aggrave souvent les prévisions.
Les données que j'utilise ont les caractéristiques suivantes, ce qui pourrait être un problème:
Très fréquemment échantillonné (un point de données toutes les 15 minutes, par opposition aux données mensuelles comme l'exemple utilise) - mais d'après ce que j'ai lu, l'algorithme Holt-Winters ne devrait pas avoir de problème avec cela. Peut-être que cela indique un problème avec la mise en œuvre?
A plusieurs périodicités - il y a des pics quotidiens (c'est-à-dire tous les 96 points de données) ainsi qu'un cycle hebdomadaire de données de week-end étant nettement inférieur aux données de semaine - par exemple, les jours de semaine peuvent culminer autour de 4000 mais les week-ends culminent à 1000 - mais même lorsque je ne donne que les données de la semaine, je rencontre le problème des nombres négatifs.
Y a-t-il quelque chose qui me manque avec l'implémentation ou mon utilisation de l'algorithme Holt-Winters en général? Je ne suis pas un statisticien, j'utilise donc les valeurs «par défaut» d'alpha, bêta et gamma indiquées dans le lien ci-dessus - est-ce susceptible d'être le problème? Quelle est la meilleure façon de calculer ces valeurs?
Ou ... y a-t-il un meilleur algorithme à utiliser ici que Holt-Winters? En fin de compte, je veux juste créer des prévisions raisonnables à partir de données historiques ici. J'ai essayé le lissage exponentiel simple et double mais (pour autant que je sache), ni l'un ni l'autre ne prend en charge la périodicité des données.
J'ai également envisagé d'utiliser le package de prévisions R à la place via rpy2 - cela me donnerait-il de meilleurs résultats? J'imagine que je devrais encore calculer les paramètres et ainsi de suite, donc ce ne serait une bonne idée que si mon problème actuel réside dans la mise en œuvre de l'algorithme ...?
Toute aide / entrée serait grandement appréciée!
la source
Le problème peut être que Holt-Winters est un modèle spécifique et peut ne pas s'appliquer à vos données. Le modèle HW suppose entre autres les éléments suivants. a) une et une seule tendance b) aucun changement de niveau dans les données, c'est-à-dire aucun changement d'interception 3) que les paramètres saisonniers ne varient pas dans le temps 4) pas de valeurs aberrantes 5) pas de structure autorégressive ou de structure de modèle adaptative 6) erreurs de modèle qui ont une variance constante Et bien sûr 7) que l'histoire cause l'avenir, c'est-à-dire pas d'incorporation de prix / promotions, événements, etc. comme variables d'aide
D'après votre description, il me semble qu'une approche à fréquences mixtes pourrait être nécessaire. J'ai vu des problèmes de séries chronologiques où les effets sur l'heure et les effets sur le jour de la semaine ont des termes d'interaction importants. Vous essayez de forcer vos données dans une structure insuffisante, c'est-à-dire non généralisée. L'estimation des paramètres et le choix à partir d'un petit ensemble de modèles ne remplacent pas l'identification du modèle. Vous voudrez peut-être lire un article sur les différentes approches de la modélisation automatique sur www.autobox.com/pdfs/catchword.pdf. En termes d'approche plus générale, je suggère que vous envisagiez un modèle ARMAX, autrement connu sous le nom de fonction de transfert, qui assouplit les hypothèses susmentionnées.
la source