Essayons de prédire les pics de consommations d’électricité quotidiens.
data = read.csv('data/pic-journalier-consommation-brute.csv', sep = ';', dec = '.') %>%
mutate(date = as.Date(date)) %>%
arrange(date)
data %>%
ggplot(aes(x = date, y = consommation)) +
geom_line(color = COLOR)## Time Series:
## Start = c(2012, 1)
## End = c(2012, 6)
## Frequency = 365
## consommation
## [1,] 59610
## [2,] 73263
## [3,] 76698
## [4,] 78337
## [5,] 78351
## [6,] 77587
## consommation
## Min. : 41463
## 1st Qu.: 52217
## Median : 56666
## Mean : 60466
## 3rd Qu.: 68987
## Max. :101867
La décomposition de la série temporelle est une étape cruciale pour comprendre ses composantes. Cela nous permet d’identifier les tendances, les saisons et les résidus. Voici la visualisation de la décomposition de notre série temporelle.
On remarque une saisonnalité principale annuelle.
Une fois que nous avons compris les composantes de notre série temporelle, nous pouvons procéder à l’entraînement d’un modèle prédictif. Ici, j’utilise la méthode de la moyenne mobile auto-régressive intégrée (ARIMA) pour ajuster notre modèle aux données historiques.
L’entraînement a durée 116 secondes.
## Series: ts_data
## ARIMA(5,0,1)(0,1,0)[365] with drift
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ma1 drift
## 0.4376 -0.0088 0.2378 0.1088 -0.1071 0.2492 -1.4874
## s.e. 0.0409 0.0308 0.0184 0.0203 0.0157 0.0381 0.8373
##
## sigma^2 = 26268463: log likelihood = -39713.02
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 2.107142 4901.335 3715.293 -0.1600935 6.207658 0.6850167
## ACF1
## Training set 0.01749187
Avec notre modèle ajusté, nous pouvons maintenant générer des prédictions pour l’avenir. Nous utilisons la fonction de prévision forecast pour générer une prévision de 365 jours.
Enfin, nous pouvons visualiser nos prédictions par rapport aux données réelles pour évaluer les performances de notre modèle.
p_data = read.csv('prediction-365.csv') %>%
mutate(date = (as.Date('2023-11-30') + 1:365)) %>%
rename(consommation = Point.Forecast)
data %>%
filter(date > '2023-01-01') %>%
ggplot(aes(x = date, y = consommation)) +
geom_line(linewidth = 1) +
geom_line(data = p_data, linewidth = 1, color = COLOR) +
geom_ribbon(data = p_data, aes(ymin = Lo.80, ymax = Hi.80), fill = COLOR, alpha = 0.3) +
geom_ribbon(data = p_data, aes(ymin = Lo.95, ymax = Hi.95), fill = COLOR, alpha = 0.1)