Généralités sur les séries temporelles

Définition d’une série temporelle

Une série temporelle est une séquence de données qui est enregistrée et organisée dans l’ordre chronologique. Elle est généralement collectée à des intervalles réguliers, tels que toutes les heures, tous les jours, tous les mois, etc. Chaque observation dans une série temporelle est associée à un moment spécifique dans le temps.

Les séries temporelles sont couramment utilisées dans de nombreux domaines, tels que l’économie, les sciences sociales, la météorologie, la finance et l’analyse des données. Elles permettent d’analyser et de modéliser le comportement d’une variable au fil du temps, en identifiant les tendances, les motifs saisonniers, les cycles ou les événements spécifiques.

L’analyse des séries temporelles comprend souvent des méthodes telles que la visualisation graphique des données, la détection des valeurs aberrantes, la modélisation des tendances et des composantes saisonnières, ainsi que la prévision des valeurs futures. Ces techniques sont utilisées pour extraire des informations utiles à partir des données temporelles et pour prendre des décisions éclairées basées sur les modèles identifiés dans la série temporelle.

Exemples de séries temporelles

Voici quelques exemples courants de séries temporelles :

  • Données météorologiques : Les mesures quotidiennes de température, d’humidité, de précipitations, de vent, etc., enregistrées à des intervalles réguliers sur une période de temps donnée.

  • Données financières : Les cours de clôture des actions ou des indices boursiers, les taux de change des devises, les prix des matières premières, enregistrés quotidiennement, hebdomadairement ou mensuellement.

  • Données de vente : Les ventes quotidiennes, hebdomadaires ou mensuelles d’un produit ou d’un service spécifique dans un magasin ou en ligne.

  • Données de trafic : Le nombre de véhicules traversant un point spécifique d’une autoroute à des intervalles réguliers pendant la journée.

  • Données démographiques : La population d’une ville, d’un pays ou d’une région enregistrée chaque année ou à des intervalles réguliers.

  • Données de consommation énergétique : La consommation d’électricité ou de carburant enregistrée chaque heure, chaque jour ou chaque mois.

  • Données de santé : Les mesures quotidiennes de la pression artérielle d’un patient, les niveaux de glucose dans le sang, les relevés de fréquence cardiaque, etc.

Ces exemples illustrent comment une série temporelle peut représenter différentes variables et être collectée à différents intervalles en fonction du contexte spécifique.

Caractéristiques principales d’une série temporelle

Les principales caractéristiques d’une série temporelle sont les suivantes :

  • Ordre chronologique : Les observations dans une série temporelle sont enregistrées dans un ordre séquentiel, généralement de manière régulière, en fonction du temps. L’ordre des observations est essentiel pour analyser et modéliser correctement la série temporelle.

  • Dépendance temporelle : Les observations d’une série temporelle sont généralement interdépendantes, ce qui signifie que la valeur d’une observation est influencée par les observations précédentes ou futures. Cette dépendance temporelle est une caractéristique clé des séries temporelles.

  • Tendance : La tendance représente la direction générale dans laquelle la série temporelle évolue sur une période de temps prolongée. Elle peut être ascendante (croissante), descendante (décroissante) ou stable. La tendance peut être linéaire ou non linéaire.

  • Saisonnalité : La saisonnalité se réfère aux variations cycliques régulières qui se produisent dans la série temporelle à des intervalles de temps fixes, tels que des modèles saisonniers hebdomadaires, mensuels ou annuels. Les motifs saisonniers peuvent être dus à des facteurs tels que les variations climatiques, les comportements d’achat saisonniers, etc.

  • Variabilité : La variabilité fait référence à l’amplitude des fluctuations et des écarts dans la série temporelle. Une série temporelle peut avoir une variabilité élevée avec des fluctuations importantes, ou une variabilité faible avec des valeurs plus constantes.

  • Bruit : Le bruit représente les variations aléatoires et non systématiques présentes dans la série temporelle. Il peut être dû à des facteurs imprévisibles, des erreurs de mesure ou d’autres influences aléatoires. Le bruit peut rendre l’analyse et la modélisation de la série temporelle plus complexes.

  • Stationnarité : La stationnarité se réfère à une propriété souhaitable d’une série temporelle, où les propriétés statistiques de la série ne varient pas avec le temps. La stationnarité facilite l’analyse et la modélisation des séries temporelles car elle permet d’appliquer des méthodes et des modèles qui reposent sur des hypothèses stationnaires.

Ces caractéristiques aident à comprendre le comportement et les modèles sous-jacents d’une série temporelle, et elles sont prises en compte lors de l’analyse, de la modélisation et de la prévision des données temporelles.

Les objets ts dans R

Dans R, il existe plusieurs classes pour représenter des objets de série chronologique. Parmi ces classes, ts est l’un des principaux formats principalement en raison de sa simplicité et de la large adoption de cette classe par les principaux packages de R pour l’analyse des séries temporelles.

# Chargement de la série sur la consommation totale mensuelle de gas naturel aux USA
data(USgas)

# Affichage des données
USgas
##         Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct
## 2000 2510.5 2330.7 2050.6 1783.3 1632.9 1513.1 1525.6 1653.1 1475.0 1567.8
## 2001 2677.0 2309.5 2246.6 1807.2 1522.4 1444.4 1598.1 1669.2 1494.1 1649.1
## 2002 2487.6 2242.4 2258.4 1881.0 1611.5 1591.4 1748.4 1725.7 1542.2 1645.9
## 2003 2700.5 2500.3 2197.9 1743.5 1514.7 1368.4 1600.5 1651.6 1428.6 1553.2
## 2004 2675.8 2511.1 2100.9 1745.2 1573.0 1483.7 1584.9 1578.0 1482.2 1557.2
## 2005 2561.9 2243.0 2205.8 1724.9 1522.6 1534.1 1686.6 1695.1 1422.5 1428.2
## 2006 2165.3 2144.4 2126.4 1681.0 1526.3 1550.9 1758.7 1751.7 1462.1 1644.2
## 2007 2475.6 2567.0 2128.8 1810.1 1559.1 1555.2 1659.9 1896.1 1590.5 1627.8
## 2008 2734.0 2503.4 2278.2 1823.9 1576.4 1604.2 1708.6 1682.9 1460.9 1635.8
## 2009 2729.7 2332.5 2170.7 1741.3 1504.0 1527.8 1658.0 1736.5 1575.0 1666.5
## 2010 2809.8 2481.0 2142.9 1691.8 1617.3 1649.5 1825.8 1878.9 1637.5 1664.9
## 2011 2888.6 2452.4 2230.5 1825.0 1667.4 1657.3 1890.5 1891.8 1655.6 1744.5
## 2012 2756.2 2500.7 2127.8 1953.1 1873.8 1868.4 2069.8 2008.8 1807.2 1901.1
## 2013 2878.8 2567.2 2521.1 1967.5 1752.5 1742.9 1926.3 1927.4 1767.0 1866.8
## 2014 3204.1 2741.2 2557.9 1961.7 1810.2 1745.4 1881.0 1933.1 1809.3 1912.8
## 2015 3115.0 2925.2 2591.3 2007.9 1858.1 1899.9 2067.7 2052.7 1901.3 1987.3
## 2016 3091.7 2652.3 2356.3 2083.8 1965.8 2000.7 2186.6 2208.4 1947.8 1925.2
## 2017 2914.2 2340.6 2523.7 1932.5 1892.5 1910.9 2142.1 2094.3 1920.9 2032.0
## 2018 3335.0 2705.9 2792.6 2346.3 2050.9 2058.7 2344.6 2307.7 2151.5 2279.1
## 2019 3399.9 2999.2 2899.9 2201.1 2121.0 2115.2 2407.5 2437.2 2215.6 2472.3
##         Nov    Dec
## 2000 1908.5 2587.5
## 2001 1701.0 2120.2
## 2002 1913.6 2378.9
## 2003 1753.6 2263.7
## 2004 1782.8 2327.7
## 2005 1663.4 2326.4
## 2006 1765.4 2122.8
## 2007 1834.5 2399.2
## 2008 1868.9 2399.7
## 2009 1776.2 2491.9
## 2010 1973.3 2714.1
## 2011 2031.9 2541.9
## 2012 2167.8 2503.9
## 2013 2316.9 2920.8
## 2014 2357.5 2679.2
## 2015 2249.1 2588.2
## 2016 2159.4 2866.3
## 2017 2357.7 3084.5
## 2018 2709.9 2993.1
## 2019
class(USgas)
## [1] "ts"

USgas est bel et bien un objet time serie (“ts”).

plot.ts(
  USgas,
  main = "Consommation totale mensuelle de Gas naturel aux USA entre 2000 et 2019",
  ylab = "Milliard de pieds cubes"
)

# Nombre d'observations
length(USgas)
## [1] 238

La fonction ts_info() du package TSstudio fournit un résumé des caractéristiques de la série temporelle :

ts_info(USgas)
##  The USgas series is a ts object with 1 variable and 238 observations
##  Frequency: 12 
##  Start time: 2000 1 
##  End time: 2019 10

Il existe une hypothèse pour créer des modèles de séries chronologiques. Les données doivent être stationnaires. Les données stationnaires existent lorsque leur moyenne et leur variance ne changent pas en fonction du temps. Si vous décomposez une série chronologique et observez une tendance, une composante saisonnière ou les deux, vous disposez de données non stationnaires. Vous pouvez les transformer en données stationnaires afin de répondre à l’hypothèse requise.

Création d’un objet ts

my_ts <- ts(
  data = 1:60, # Valeurs de la série
  start = c(2010, 1), # Le temps de la première observation
  end = c(2014, 12), # Le temps de la dernière observation
  frequency = 12 # La fréquence de la série
)

my_ts
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2010   1   2   3   4   5   6   7   8   9  10  11  12
## 2011  13  14  15  16  17  18  19  20  21  22  23  24
## 2012  25  26  27  28  29  30  31  32  33  34  35  36
## 2013  37  38  39  40  41  42  43  44  45  46  47  48
## 2014  49  50  51  52  53  54  55  56  57  58  59  60
# Caractéristiques de l'objet my_ts
ts_info(my_ts)
##  The my_ts series is a ts object with 1 variable and 60 observations
##  Frequency: 12 
##  Start time: 2010 1 
##  End time: 2014 12

EN réalité, il est fort probable que les données brutes ne soient pas au format ts et certaines étapes de prétraitement peuvent être nécessaires avant de les transformer en objet ts. Dans l’exemple ci-dessous, nous allons voir comment transformer en un objet ts une dataframe présentant un horodatage au format date :

# Chargement du jeu de données US_indicators (package TSstudio)
data(US_indicators)

# Affichage
head(US_indicators)
##         Date Vehicle Sales Unemployment Rate
## 1 1976-01-31         885.2               8.8
## 2 1976-02-29         994.7               8.7
## 3 1976-03-31        1243.6               8.1
## 4 1976-04-30        1191.2               7.4
## 5 1976-05-31        1203.2               6.8
## 6 1976-06-30        1254.7               8.0
# Structure du jeu de données
str(US_indicators)
## 'data.frame':    528 obs. of  3 variables:
##  $ Date             : Date, format: "1976-01-31" "1976-02-29" ...
##  $ Vehicle Sales    : num  885 995 1244 1191 1203 ...
##  $ Unemployment Rate: num  8.8 8.7 8.1 7.4 6.8 8 7.8 7.6 7.4 7.2 ...

L’ensemble de données US_indicators est une dataframe comportant deux séries : les ventes mensuelles totales de véhicules et le taux de chômage aux États-Unis. De plus, les données incluent l’horodatage des deux séries au format date.

Supposons que nous voulons convertir la variable Vehicle Sales en un objet ts :

  • 1) Extraction :
# Extraction
vehicle_sales <- US_indicators %>%
  select(Date, `Vehicle Sales`) %>%
  arrange(Date)

head(vehicle_sales)
##         Date Vehicle Sales
## 1 1976-01-31         885.2
## 2 1976-02-29         994.7
## 3 1976-03-31        1243.6
## 4 1976-04-30        1191.2
## 5 1976-05-31        1203.2
## 6 1976-06-30        1254.7

Avant de convertir une dataframe (ou un tibble) en un objet ts, il faut arranger la variable indiquant le temps dans l’ordre chronologique. C’est ce qui a été effectué avec la fonction arrange().

  • 2) Définition des arguments start (ou end) et frequency de l’objet ts
point_depart <- c(year(min(vehicle_sales$Date)), month(min(vehicle_sales$Date)))
print(point_depart) # La série a commencer en Janvier 1976
## [1] 1976    1
frequence <- 12 # Il s'agit s'une série au pas mensuel donc la fréquence est 12

vehicle_sales_ts <- ts(
  data = vehicle_sales$`Vehicle Sales`,
  start = point_depart,
  frequency = frequence
)

ts_info(vehicle_sales_ts)
##  The vehicle_sales_ts series is a ts object with 1 variable and 528 observations
##  Frequency: 12 
##  Start time: 1976 1 
##  End time: 2019 12
head(vehicle_sales_ts)
##         Jan    Feb    Mar    Apr    May    Jun
## 1976  885.2  994.7 1243.6 1191.2 1203.2 1254.7

Il est également possible de convertir toute la dataframe US_indicators en un objet mts (Multivariate Time Serie) c’est-à-dire un objet ts avec au moins 2 variables. Le processus est le même que précédemment :

US_indicators_ts <- US_indicators %>%
  arrange(Date) %>%
  select(-Date)

US_indicators_ts <- ts(
  data = US_indicators_ts[, names(US_indicators_ts)],
  start = point_depart,
  frequency = frequence
)

ts_info(US_indicators_ts)
##  The US_indicators_ts series is a mts object with 2 variables and 528 observations
##  Frequency: 12 
##  Start time: 1976 1 
##  End time: 2019 12
head(US_indicators_ts)
##          Vehicle Sales Unemployment Rate
## Jan 1976         885.2               8.8
## Feb 1976         994.7               8.7
## Mar 1976        1243.6               8.1
## Apr 1976        1191.2               7.4
## May 1976        1203.2               6.8
## Jun 1976        1254.7               8.0

Manipulation des objets ts

Sous-ensemble d’un objet ts en fonction d’une plage de temps

L’une des manipulations courantes appliquée sur une série temporelle est l’extraction d’un sous-ensemble de cette série afin d’effectuer l’analyse des données sur une période précise. Cette opération peut être réalisée grâce à la fonction window() du package stats :

# Extraction des données sur la Consommation totale mensuelle 
  # de Gas naturel aux USA entre Janvier 2010 et Avril 2015
window(USgas, start = c(2010, 1), end = c(2015, 4))
##         Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct
## 2010 2809.8 2481.0 2142.9 1691.8 1617.3 1649.5 1825.8 1878.9 1637.5 1664.9
## 2011 2888.6 2452.4 2230.5 1825.0 1667.4 1657.3 1890.5 1891.8 1655.6 1744.5
## 2012 2756.2 2500.7 2127.8 1953.1 1873.8 1868.4 2069.8 2008.8 1807.2 1901.1
## 2013 2878.8 2567.2 2521.1 1967.5 1752.5 1742.9 1926.3 1927.4 1767.0 1866.8
## 2014 3204.1 2741.2 2557.9 1961.7 1810.2 1745.4 1881.0 1933.1 1809.3 1912.8
## 2015 3115.0 2925.2 2591.3 2007.9                                          
##         Nov    Dec
## 2010 1973.3 2714.1
## 2011 2031.9 2541.9
## 2012 2167.8 2503.9
## 2013 2316.9 2920.8
## 2014 2357.5 2679.2
## 2015

Les séries chronologiques peuvent contenir de grandes observations couvrant de nombreuses années. Vous voudrez peut-être travailler sur une partie spécifique de la série chronologique ; par exemple, trouver les ventes des 3 premiers mois, ou les ventes des 3 derniers mois, ou les ventes entre 2007 et 2009, etc. Cette section explorera différentes manières d’obtenir les données ou sous-ensembles requis ou souhaités à partir de la série chronologique.

# Un autre exemple : cours de l'action d'une entreprise 
  # dans la fourchette de 2 500 à 4 000 à partir de 2011
my_vector = sample(2500:4000, 72, replace=T)
my_series = ts(my_vector, start=c(2011,1), end=c(2016,12), frequency = 12)  
my_series
##       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
## 2011 3860 3445 2962 2702 3991 3825 3461 3014 3324 3898 3385 3034
## 2012 2731 2993 2647 3476 3476 3274 3292 3481 2677 3123 3352 2741
## 2013 3477 3957 3794 3077 3702 3372 3142 3881 2863 3862 3996 3484
## 2014 3262 3682 3480 3189 3225 2539 3025 2797 2702 2611 3815 3395
## 2015 3289 2929 2527 3205 2554 3702 3659 3144 3004 3254 2553 3235
## 2016 3339 3464 3041 3077 3001 3886 3954 3536 3184 3577 3396 2514
first(my_series) # fonction de dplyr
## [1] 3860
last(my_series) # fonction de dplyr
## [1] 2514

Aggrégation d’objets ts

Par exemple, utilisons la fonction d’agrégation aggregate () du package stats pour transformer la série USgas d’une fréquence trimestrielle en une fréquence annuelle :

# Consommation annuelle de Gas naturel aux USA entre 2000 et 2018
USgas_year <- aggregate(USgas, nfrequency = 1, FUN = "sum")
USgas_year
## Time Series:
## Start = 2000 
## End = 2018 
## Frequency = 1 
##  [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3

Création des séries retardées (lags) et des séries avancées (leads) à partir d’objets ts

  • Lags : Les Lags représentent un décalage dans la série de n pas en arrière, par rapport à la série d’origine.

  • Leads : Les Leads représentent un décalage dans la série de n pas en avant, par rapport à la série d’origine.

La figure ci-dessous présente un example de lag et de lead d’une série temporelle :

La fonction lag() du package stats peut être utilisée pour créer à la fois des lags et des leads d’un objet ts.

USgas_year_lag1 <- stats::lag(USgas_year, k = -1)
USgas_year_lag1
## Time Series:
## Start = 2001 
## End = 2019 
## Frequency = 1 
##  [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3
USgas_year_lag3 <- stats::lag(USgas_year, k = -3)
USgas_year_lag3
## Time Series:
## Start = 2003 
## End = 2021 
## Frequency = 1 
##  [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3
USgas_year_lead1 <- stats::lag(USgas_year, k = 1)
USgas_year_lead1
## Time Series:
## Start = 1999 
## End = 2017 
## Frequency = 1 
##  [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3
USgas_year_lead3 <- stats::lag(USgas_year, k = 3)
USgas_year_lead3
## Time Series:
## Start = 1997 
## End = 2015 
## Frequency = 1 
##  [1] 22538.6 22238.8 23027.0 22276.5 22402.5 22014.5 21699.2 23103.8 23276.9
## [10] 22910.1 24086.8 24477.4 25538.6 26155.2 26593.4 27243.7 27444.3 27145.9
## [19] 30075.3

Visualisation d’objets ts

Pour une visualisation rapide d’objets ts, nous pouvons utiliser la fonction plot.ts() du package stats :

plot.ts(
  vehicle_sales_ts,
  main = "Ventes mensuelles totales de véhicules aux États-Unis",
  xlab = "Temps",
  ylab = "Milliers de véhicules"
)

De la même manière, nous pouvons visualiser des objets mts :

plot.ts(
  US_indicators_ts,
  plot.type = "multiple",
  main = "Ventes mensuelles totales de véhicules aux USA VS Taux de chômage",
  xlab = "Temps"
)

Utilisez l’argument plot.type = "multiple lorsque les séries ne sont pas à la même échelle. Dans le cas contraire (séries à la même échelle), vous pouvez utiliser plot.type = "single afin de tracer les séries dans un même graphique.

Une autre option pour visualiser les séries temporelles est l’utilisation de la fonction dygraph du packages dygraphs :

dygraph(
  vehicle_sales_ts,
  main = "Ventes totales mensuelles de véhicules aux USA",
  xlab = "Temps",
  ylab = "Milliers de véhicules"
)

Comme vous le constatez, le résultat est un graphique interactif ce qui est beaucoup plus adapté aux applications web.

Vous pouvez aussi ajouter un sélecteur de période à votre graphique en utilisant la fonction dyRangeSelector() :

dygraph(
  vehicle_sales_ts,
  main = "Ventes totales mensuelles de véhicules aux USA",
  xlab = "Temps",
  ylab = "Milliers de véhicules"
) %>%
  dyRangeSelector()

Toujours avec a fonction dygraph(), vous pouvez visualiser les objets mts :

dygraph(
  US_indicators_ts,
  main = "Ventes totales mensuelles de véhicules aux USA VS Taux de chômage"
) %>%
  dyAxis("y", label = "Ventes de voitures") %>%
  dyAxis("y2", label = "Taux de chômage") %>%
  dySeries("Vehicle Sales", axis = "y", color = "green") %>%
  dySeries("Unemployment Rate", axis = "y2", color = "red") %>%
  dyLegend(width = 400) %>%
  dyRangeSelector()

En jetant un rapide coup d’œil au graphique, vous pouvez voir que, généralement, le chômage augmente lorsque les ventes de véhicules diminuent. Bien qu’il ne s’agisse pas d’une preuve concluante de la relation entre les deux, cela vous fournit un chemin directionnel lors du démarrage de l’analyse.

La fonction ts_plot() permet aussi de visualiser de manière interactive une série temporelle mais cette fois-ci en utilisant en backend le package Plotly :

ts_plot(
  vehicle_sales_ts,
  title = "Ventes totales mensuelles de véhicules aux USA",
  Xtitle = "Temps",
  Ytitle = "Milliers de véhicules",
  slider = TRUE
)
ts_plot(
  US_indicators_ts,
  title = "Ventes totales mensuelles de véhicules aux USA VS Taux de chômage",
  Xtitle = "temps",
  type = "multiple"
)
cycle(AirPassengers)
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1949   1   2   3   4   5   6   7   8   9  10  11  12
## 1950   1   2   3   4   5   6   7   8   9  10  11  12
## 1951   1   2   3   4   5   6   7   8   9  10  11  12
## 1952   1   2   3   4   5   6   7   8   9  10  11  12
## 1953   1   2   3   4   5   6   7   8   9  10  11  12
## 1954   1   2   3   4   5   6   7   8   9  10  11  12
## 1955   1   2   3   4   5   6   7   8   9  10  11  12
## 1956   1   2   3   4   5   6   7   8   9  10  11  12
## 1957   1   2   3   4   5   6   7   8   9  10  11  12
## 1958   1   2   3   4   5   6   7   8   9  10  11  12
## 1959   1   2   3   4   5   6   7   8   9  10  11  12
## 1960   1   2   3   4   5   6   7   8   9  10  11  12
boxplot(AirPassengers~cycle(AirPassengers), xlab = "month", main = "Box plot to see month wise pattern") 

Décomposition d’une série temporelle

La décomposition d’une série temporelle est un processus qui vise à séparer les différentes composantes d’une série temporelle, notamment la tendance, la saisonnalité et les résidus (ou les fluctuations irrégulières). Cela permet d’analyser et de modéliser chaque composante séparément, ce qui facilite la compréhension des motifs et des structures présents dans la série temporelle.

La décomposition peut être réalisée en utilisant différentes approches, mais l’une des plus courantes est la décomposition additive. Selon cette approche, une série temporelle est considérée comme la somme de sa tendance, de sa saisonnalité et des résidus. Formellement, la décomposition additive peut être exprimée comme suit :

Y(t) = Tendance(t) + Saisonnalité(t) + Résidus(t)

La décomposition d’une série temporelle permet de mieux comprendre la structure sous-jacente des données et d’analyser chaque composante séparément. Cela facilite l’identification des tendances, des motifs saisonniers et des fluctuations aléatoires, et peut être utilisé comme point de départ pour la modélisation et la prévision des séries temporelles.

# Chargement du jeu de données sur les venstes mensuelles de véhicules aux USA
data(USVSales) # package TSstudio

# Informations sur la série
ts_info(USVSales)
##  The USVSales series is a ts object with 1 variable and 528 observations
##  Frequency: 12 
##  Start time: 1976 1 
##  End time: 2019 12
# Visualisation de la série
dygraph(
  USVSales,
  main = "Ventes totales mensuelles de véhicules aux USA",
  xlab = "Temps",
  ylab = "Milliers de véhicules"
)
usv_decompose <- stats::decompose(USVSales)

str(usv_decompose)
## List of 6
##  $ x       : Time-Series [1:528] from 1976 to 2020: 885 995 1244 1191 1203 ...
##  $ seasonal: Time-Series [1:528] from 1976 to 2020: -225.2 -102.4 143 34.5 147.9 ...
##  $ trend   : Time-Series [1:528] from 1976 to 2020: NA NA NA NA NA ...
##  $ random  : Time-Series [1:528] from 1976 to 2020: NA NA NA NA NA ...
##  $ figure  : num [1:12] -225.2 -102.4 143 34.5 147.9 ...
##  $ type    : chr "additive"
##  - attr(*, "class")= chr "decomposed.ts"

La fonction decompose() du package stats appliquée sur une série temporelle retourne une liste de 6 objets :

# Visualisation des composantes
plot(usv_decompose)

Autre exemple :

autoplot(AirPassengers) # fonction du package forecast

L’ensemble de données AirPassenger a également une composante saisonnière très forte avec des pics chaque été. La période saisonnière, ici, est également annuelle.

air_decompose <- decompose(AirPassengers, type = "multiplicative")
autoplot(air_decompose, main = "Decomposition of the AirPassengers series")

Le processus de décomposition semble avoir séparé une très belle composante saisonnière et identifié une tendance plutôt linéaire.