Je travaille sur un petit projet où nous essayons de prévoir les prix des matières premières (pétrole, aluminium, étain, etc.) pour les 6 prochains mois. J'ai 12 variables de ce type à prévoir et j'ai des données d'avril 2008 à mai 2013.
Comment dois-je procéder pour la prédiction? J'ai fait ce qui suit:
- Données importées en tant que jeu de données Timeseries
- La saisonnalité de toutes les variables a tendance à varier avec la tendance, je vais donc utiliser un modèle multiplicatif.
- J'ai pris le log de la variable à convertir en modèle additif
- Pour chaque variable décomposé les données en utilisant STL
Je prévois d'utiliser le lissage exponentiel Holt Winters, ARIMA et le réseau neuronal pour prévoir. J'ai divisé les données en formation et tests (80, 20). Prévoir de choisir le modèle avec moins de MAE, MPE, MAPE et MASE.
Suis-je en train de bien faire?
Une autre question que j'avais était, avant de passer à ARIMA ou au réseau neuronal, dois-je lisser les données? Si oui, en utilisant quoi? Les données montrent à la fois la saisonnalité et la tendance.
ÉDITER:
Joindre le graphique et les données de la série temporelle
Year <- c(2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2009, 2009,
2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2010,
2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
2011, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
2012, 2012, 2013, 2013)
Month <- c(4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2)
Coil <- c(44000, 44500, 42000, 45000, 42500, 41000, 39000, 35000, 34000,
29700, 29700, 29000, 30000, 30000, 31000, 31000, 33500, 33500,
33000, 31500, 34000, 35000, 35000, 36000, 38500, 38500, 35500,
33500, 34500, 36000, 35500, 34500, 35500, 38500, 44500, 40700,
40500, 39100, 39100, 39100, 38600, 39500, 39500, 38500, 39500,
40000, 40000, 40500, 41000, 41000, 41000, 40500, 40000, 39300,
39300, 39300, 39300, 39300, 39800)
coil <- data.frame(Year = Year, Month = Month, Coil = Coil)
EDIT 2: Une question, pouvez-vous s'il vous plaît me dire si mes données ont une saisonnalité ou une tendance? Et donnez-moi aussi quelques conseils pour les identifier.
la source
Réponses:
Vous devez utiliser le package de prévision , qui prend en charge tous ces modèles (et plus) et facilite leur ajustement:
Je déconseille de lisser les données avant d'adapter votre modèle. Votre modèle va par nature essayer de lisser les données, donc le pré-lissage ne fait que compliquer les choses.
Modifier en fonction des nouvelles données:
Il semble que l'arima soit l'un des pires modèles que vous puissiez choisir pour cet ensemble d'entraînement et de test.
J'ai enregistré vos données dans un appel de fichier
coil.csv
, les ai chargées dans R et les ai divisées en un ensemble de formation et de test:Ensuite, j'adapte un tas de modèles de séries chronologiques: arima, lissage exponentiel, réseau neuronal, tbats, chauves-souris, décomposition saisonnière et séries chronologiques structurelles:
Ensuite, j'ai fait quelques prévisions et comparé à l'ensemble de test. J'ai inclus une prévision naïve qui prédit toujours une ligne horizontale plate:
Comme vous pouvez le voir, le modèle arima se trompe de tendance, mais j'aime un peu le look du "Basic Structural Model"
Enfin, j'ai mesuré la précision de chaque modèle sur l'ensemble de test:
Les métriques utilisées sont décrites dans Hyndman, RJ et Athanasopoulos, G. (2014) «Forecasting: Principles and Practice» , qui se trouvent également être les auteurs de l'ensemble de prévisions. Je vous recommande fortement de lire leur texte: il est disponible gratuitement en ligne. La série chronologique structurelle est le meilleur modèle selon plusieurs métriques, y compris MASE, qui est la métrique que j'ai tendance à préférer pour la sélection du modèle.
Une dernière question est: le modèle structurel a-t-il eu de la chance sur cet ensemble de test? Une façon d'évaluer cela consiste à examiner les erreurs des ensembles de formation. Les erreurs de l'ensemble de formation sont moins fiables que les erreurs de l'ensemble de test (car elles peuvent être trop ajustées), mais dans ce cas, le modèle structurel vient toujours en tête:
(Notez que le réseau de neurones est trop performant, performant sur l'ensemble d'entraînement et médiocrement sur l'ensemble de test)
Enfin, ce serait une bonne idée de contre-valider tous ces modèles, peut-être par une formation sur 2008-2009 / tests sur 2010, formation sur 2008-2010 / tests sur 2011, formation sur 2008-2011 / tests sur 2012, formation sur 2008-2012 / tests sur 2013 et moyenne des erreurs sur toutes ces périodes. Si vous souhaitez emprunter cette voie, j'ai un package partiellement complet pour les modèles de séries chronologiques à validation croisée sur github que j'aimerais que vous essayiez et que vous me fassiez part de vos commentaires / demandes de traction sur:
Edit 2: Voyons si je me souviens comment utiliser mon propre package!
Tout d'abord, installez et chargez le paquet depuis github (voir ci-dessus). Validez ensuite certains modèles (en utilisant l'ensemble de données complet):
(Notez que j'ai réduit la flexibilité du modèle de réseau neuronal, pour essayer de l'empêcher de sur-adapter)
Une fois que nous avons ajusté les modèles, nous pouvons les comparer par MAPE (cv.ts ne prend pas encore en charge MASE):
Aie. Il semblerait que notre prévision structurelle ait eu de la chance. À long terme, la prévision naïve fait les meilleures prévisions, moyennées sur un horizon de 12 mois (le modèle arima est toujours l'un des pires modèles). Comparons les modèles à chacun des 12 horizons de prévision et voyons si l'un d'eux a déjà battu le modèle naïf:
Fait révélateur, le modèle de lissage exponentiel sélectionne toujours le modèle naïf (la ligne orange et la ligne bleue se chevauchent à 100%). En d'autres termes, la prévision naïve des "prix des bobines du mois prochain sera la même que les prix des bobines de ce mois-ci" est plus précise (à presque tous les horizons de prévision) que 7 modèles de séries chronologiques extrêmement sophistiqués. Sauf si vous avez des informations secrètes que le marché des bobines ne connaît pas déjà, battre les prévisions de prix naïves des bobines sera extrêmement difficile .
Ce n'est jamais la réponse que quiconque veut entendre, mais si la précision des prévisions est votre objectif, vous devez utiliser le modèle le plus précis. Utilisez le modèle naïf.
la source
L'approche que vous avez adoptée est raisonnable. Si vous êtes nouveau dans la prévision, alors je recommanderais les livres suivants:
Le premier livre est un classique que je recommande fortement. Le deuxième livre est un livre open source auquel vous pouvez vous référer pour les méthodes de prévision et comment il est appliqué à l'aide de prévisions de
R
progiciels open source . Les deux livres fournissent un bon contexte sur les méthodes que j'ai utilisées. Si vous êtes sérieux au sujet de la prévision, alors je recommanderais les principes de prévision d'Armstrong, qui constituent une énorme quantité de recherches en prévision qu'un pratiquant pourrait trouver très utile.En venant à votre exemple spécifique sur la bobine, cela me rappelle un concept de prévisibilité que la plupart des manuels ignorent souvent. Certaines séries telles que la vôtre ne peuvent tout simplement pas être prévues car elles sont moins structurées car elles ne présentent pas de tendances ou de tendances saisonnières ou toute variation systématique. Dans ce cas, je classerais une série comme moins prévisible. Avant de s'aventurer dans les méthodes d'extrapolation, je regardais les données et poser la question, est ma série prévisible? Dans cet exemple spécifique, une simple extrapolation, comme marche aléatoire prévision qui utilise la dernière valeur de la prévision a été jugée plus précise .
Un autre commentaire sur le réseau de neurones: les réseaux de neurones sont connus pour échouer dans les compétitions empiriques . J'essaierais les méthodes statistiques traditionnelles pour les séries chronologiques avant d'essayer d'utiliser des réseaux de neurones pour des tâches de prévision de séries chronologiques.
J'ai essayé de modéliser vos données
R's forecast package
, j'espère que les commentaires sont explicites.En utilisant MAE sur les données de rétention, je choisirais ARIMA pour les prévisions à court terme (1 à 12 mois). à long terme, je compterais sur des prévisions de marche aléatoires. Veuillez noter qu'ARIMA a choisi un modèle de marche aléatoire avec dérive (0,1,0) + dérive qui a tendance à être beaucoup plus précis que le modèle de marche aléatoire pur dans ce type de problèmes spécifiquement à court terme. Voir le tableau ci-dessous. Ceci est basé sur la fonction de précision comme indiqué dans le code ci-dessus.
Réponses spécifiques à vos questions spécifiques: Une autre question que j'avais était, avant de passer à ARIMA ou au réseau neuronal, dois-je lisser les données? Si oui, en utilisant quoi?
Les données montrent à la fois la saisonnalité et la tendance.
Conseils pratiques pour améliorer la précision:
Combinez diverses méthodes de prévision: - Vous pouvez essayer d'utiliser des méthodes de non extrapolation telles que la prévision par analogie , la prévision par jugement ou d'autres techniques et les combiner avec vos méthodes statistiques pour fournir des prévisions précises. Voir cet article pour les avantages de la combinaison. J'ai essayé de combiner les 5 méthodes ci-dessus, mais les prévisions n'étaient pas précises en tant que méthodes individuelles, une des raisons possibles est que les prévisions individuelles sont similaires. Vous récoltez les avantages de la combinaison des prévisions lorsque vous combinez diverses méthodes telles que les prévisions statistiques et de jugement.
Détectez et comprenez les valeurs aberrantes: - Les données du monde réel sont remplies de valeurs aberrantes. Identifier et traiter de manière appropriée les valeurs aberrantes dans les séries chronologiques. Recommander la lecture de ce post . En regardant vos données de bobine, la baisse avant 2009 est-elle une valeur aberrante ??
Éditer
Les données semblent suivre un certain type de tendances macroéconomiques. Je suppose que la tendance à la baisse observée avant 2009 fait suite à l'effondrement de l'économie observé entre 2008 et 2009 et commence à reprendre après 2009. Si tel est le cas, j'éviterais tous ensemble d'utiliser des méthodes d'extrapolation et de me fier à une théorie solide sur la façon dont ces tendances économiques se comportent comme celle référencée par @GraemeWalsh.
J'espère que cela t'aides
la source