5.4 Méthodes d'évaluation des prévisions
Objectifs d'apprentissage
À la fin de cette section, vous devriez être capable de :
- 5.4.1 Expliquer la nature de l'erreur dans la prévision d'une série temporelle.
- 5.4.2 Calculer les mesures d'erreur courantes pour les modèles de séries temporelles.
- 5.4.3 Produire des intervalles de prédiction dans un exemple de prévision.
Une prévision de série temporelle prédit essentiellement les valeurs centrales pour les termes futurs de la série. Aux fins de prédiction, le modèle ne prend en compte que la tendance ainsi que toute variation cyclique ou saisonnière ayant pu être détectée dans les données connues. Bien que le bruit et les variations aléatoires influencent certainement les valeurs futures de la série temporelle, leurs effets précis ne peuvent pas être prédits (de par leur nature même). Ainsi, une valeur prévue constitue la meilleure estimation du modèle en l'absence de terme d'erreur. D'un autre côté, l'erreur affecte le degré de certitude que nous pouvons avoir quant aux prévisions du modèle. Dans cette section, nous nous concentrons sur la quantification de l'erreur de prévision à l'aide d'outils statistiques tels que les intervalles de prédiction.
Erreur de prévision
Supposons que vous disposiez d'un modèle pour une série temporelle donnée . Rappelez-vous, d'après Composantes de l'analyse de séries temporelles, que les résidus quantifient l'erreur entre la série temporelle et le modèle et servent d'estimation du bruit ou de la variation aléatoire.
Mieux le modèle est ajusté aux données observées, plus les valeurs de seront faibles. Cependant, même de très bons modèles peuvent s'avérer de piètres prédicteurs des valeurs futures de la série temporelle. Paradoxalement, plus un modèle s'ajuste bien aux données connues, moins il risque d'être performant pour prédire les données futures. Il existe un risque de surapprentissage. (Ce terme est défini en détail dans Notions de base de la prise de décision par apprentissage automatique, mais pour l'instant, nous n'avons pas besoin d'approfondir ce sujet.) Une technique courante pour éviter le surapprentissage consiste à construire le modèle en utilisant seulement une partie des données connues, puis l'exactitude du modèle peut être testée sur les données restantes qui ont été mises de côté.
Pour évaluer l'exactitude d'un modèle, nous devons poser la question complémentaire : À quelle distance les prédictions se situent-elles des valeurs réelles ? En d'autres termes, nous devons essayer de quantifier l'erreur totale. Il existe plusieurs mesures d'erreur (measures of error), ou mesures d'ajustement (measures of fit), c'est-à-dire les métriques utilisées pour évaluer dans quelle mesure les prédictions d'un modèle correspondent aux données observées. Nous n'aborderons ici que quelques-unes d'entre elles qui sont les plus utiles pour les séries temporelles. Dans chaque formule, désigne le terme de la série temporelle, et est l'erreur entre le terme réel et le terme prédit de la série.
- Erreur absolue moyenne (MAE) (mean absolute error (MAE)) : . Une mesure de l'ampleur moyenne des erreurs.
- Racine de l'erreur quadratique moyenne (RMSE) (root mean squared error (RMSE)) : . Une mesure de l'écart type des erreurs, pénalisant plus lourdement les erreurs importantes que la MAE.
- Erreur absolue moyenne en pourcentage (MAPE) (mean absolute percentage error (MAPE)) : . Une mesure des erreurs relatives moyennes — c'est-à-dire un pourcentage entre les valeurs prédites et les valeurs réelles (en moyenne).
- Erreur absolue moyenne en pourcentage symétrique (sMAPE) (symmetric mean absolute percentage error (sMAPE)) : . Semblable à la MAPE, une mesure des erreurs relatives moyennes, mais normalisée afin que les erreurs soient mesurées par rapport aux valeurs réelles ainsi qu'aux valeurs prédites.
Parmi ces mesures d'erreur, la MAE et la RMSE sont dépendantes de l'échelle (scale-dependent), ce qui signifie que l'erreur est directement proportionnelle aux données elles-mêmes. En d'autres termes, si tous les termes de la série temporelle et du modèle étaient multipliés par un facteur , alors la MAE et la RMSE seraient également toutes deux multipliées par . En revanche, la MAPE et la sMAPE ne dépendent pas de l'échelle. Ces mesures d'erreur sont souvent exprimées sous forme de pourcentages (en multipliant le résultat de la formule par 100 %). Toutefois, ni la MAPE ni la sMAPE ne doivent être utilisées pour des données mesurées sur une échelle contenant 0 et des nombres négatifs. Par exemple, il ne serait pas judicieux d'utiliser la MAPE ou la sMAPE comme mesure d'erreur pour un modèle de série temporelle de relevés de température en degrés Celsius. Pour toutes ces mesures d'erreur, des valeurs plus faibles indiquent une erreur moindre et donc une plus grande exactitude du modèle. Cela est particulièrement utile pour comparer deux modèles ou plus.
Exemple 5.9
Problème
Calculez la MAE, la RMSE, la MAPE et la sMAPE pour le modèle de lissage EMA de la série temporelle de l'indice S&P, présenté dans le Tableau 5.3.
Solution
La première étape consiste à déterminer les résidus, , et à prendre leurs valeurs absolues. Pour la RMSE, nous aurons besoin des résidus au carré, inclus dans le Tableau 5.7. Nous incluons également les termes et , qui servent respectivement à calculer la MAPE et la sMAPE. Remarquez que toutes les formules sont des moyennes d'une certaine forme, mais que la RMSE nécessite une étape supplémentaire consistant à extraire la racine carrée.
| Année | Indice S&P en fin d'année | Estimation EMA | Résidus abs. | |||
|---|---|---|---|---|---|---|
| 2013 | 1848.36 | 1848.36 | 0 | 0 | 0 | 0 |
| 2014 | 2058.9 | 1848.36 | 210.54 | 44327.09 | 0.102 | 0.108 |
| 2015 | 2043.94 | 2006.27 | 37.67 | 1419.03 | 0.018 | 0.019 |
| 2016 | 2238.83 | 2034.52 | 204.31 | 41742.58 | 0.091 | 0.096 |
| 2017 | 2673.61 | 2187.75 | 485.86 | 236059.94 | 0.182 | 0.2 |
| 2018 | 2506.85 | 2552.15 | 45.3 | 2052.09 | 0.018 | 0.018 |
| 2019 | 3230.78 | 2518.17 | 712.61 | 507813.01 | 0.221 | 0.248 |
| 2020 | 3756.07 | 3052.63 | 703.44 | 494827.83 | 0.187 | 0.207 |
| 2021 | 4766.18 | 3580.21 | 1185.97 | 1406524.84 | 0.249 | 0.284 |
| 2022 | 3839.5 | 4469.69 | 630.19 | 397139.44 | 0.164 | 0.152 |
| 2023 | 4769.83 | 3997.05 | 772.78 | 597188.93 | 0.162 | 0.176 |
| N/A | N/A | Moyenne : | 453.52 | 339008.62 | 0.127 | 0.137 |
. (Les valeurs prédites sont [en moyenne] éloignées d'environ 450 unités des valeurs réelles.)
. (Les erreurs entre les valeurs prédites et moyennes présentent un écart type d'environ 580 par rapport à l'erreur idéale de 0.)
. (Les valeurs prédites se situent [en moyenne] à environ 13 % de leurs valeurs réelles.)
. (En considérant à la fois les valeurs prédites et les valeurs réelles, leurs écarts relatifs sont en moyenne d'environ 14 % les uns par rapport aux autres.)
Ces résultats peuvent être utilisés pour comparer l'estimation EMA à une autre méthode d'estimation ou de prédiction afin de déterminer laquelle est la plus exacte. Plus les erreurs sont faibles, plus la méthode est exacte.
Intervalles de prédiction
Une prévision est souvent accompagnée d'un intervalle de prédiction (prediction interval) fournissant une plage de valeurs que la variable pourrait prendre avec un certain niveau de probabilité. Par exemple, si l'intervalle de prédiction d'une prévision est indiqué à 80 %, alors l'intervalle de prédiction contient une plage de valeurs qui devrait inclure la valeur future réelle avec une probabilité de 0,8. Les intervalles de prédiction ont été introduits dans Analyse de la variance (ANOVA) dans le contexte de la régression linéaire, nous n'entrerons donc pas ici dans les détails mathématiques. Le point essentiel est que nous recherchons une mesure de la marge d'erreur, (dépendant de ), telle que les observations futures des données se situeront dans l'intervalle avec une probabilité , où est un niveau de confiance choisi.
Ici, nous allons montrer comment utiliser Python pour obtenir des intervalles de prédiction.
La bibliothèque Python statsmodels.tsa.arima.model contient également des fonctions permettant de déterminer les intervalles de confiance. Notez que la commande get_forecast() est utilisée ici plutôt que forecast(), car la première offre davantage de fonctionnalités.
Code Python
### Please run all code from previous section before running this ###
# Set alpha to 0.2 for 80% confidence interval
forecast_steps = 24
forecast_results = results.get_forecast(steps=forecast_steps, alpha=0.2)
# Extract forecast values and confidence intervals
forecast_values = forecast_results.predicted_mean
confidence_intervals = forecast_results.conf_int()
# Plot the results
plt.figure(figsize=(10, 6))
# Plot original time series
plt.plot(df['Value'], label='Original Time Series')
# Plot fitted values
plt.plot(results.fittedvalues, color='red', label='Fitted Values')
# Plot forecasted values with confidence intervals
plt.plot(forecast_values, color='red', linestyle='dashed', label='Forecasted Values')
plt.fill_between(
range(len(df), len(df) + forecast_steps),
confidence_intervals.iloc[:, 0],
confidence_intervals.iloc[:, 1],
color='red', alpha=0.2,
label='80% Confidence Interval'
)
# Set labels and legend
plt.xlabel('Months')
plt.title('Monthly Consumption of Coal for Electricity Generation in the United States from 2016 to 2022')
plt.legend()
# Apply the formatter to the Y-axis
plt.gca().yaxis.set_major_formatter(FuncFormatter(y_format))
plt.show()
Le résultat obtenu ressemble à ceci :
Les données de prévision (courbe en pointillés) sont désormais entourées d'une région ombrée. Avec une probabilité de 80 %, toutes les observations futures devraient s'inscrire dans cette région ombrée. Bien entendu, plus nous essayons d'aller loin dans le futur, plus nos prévisions seront incertaines, ce qui se traduit par un intervalle de confiance de plus en plus large.
Jeux de données
Remarque : Les principaux jeux de données référencés dans le code du chapitre peuvent également être téléchargés ici.