Analyse exploratoire#

Imports et lecture des données#

Imports#

1import matplotlib.pyplot as plt
2import mplfinance as mpl
3import pandas as pd
4from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
5
6from src.utils import init_notebook
1init_notebook()

Lecture des données#

1data_folder = "data/raw_data"
1stock_name = "AAPL"
1df = pd.read_csv(
2    f"{data_folder}/{stock_name}.csv", parse_dates=["Date"], index_col="Date"
3)
4print(f"{df.shape = }")
df.shape = (756, 6)
1df.columns
Index(['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'], dtype='object')
1df.index
DatetimeIndex(['2019-01-02', '2019-01-03', '2019-01-04', '2019-01-07',
               '2019-01-08', '2019-01-09', '2019-01-10', '2019-01-11',
               '2019-01-14', '2019-01-15',
               ...
               '2021-12-16', '2021-12-17', '2021-12-20', '2021-12-21',
               '2021-12-22', '2021-12-23', '2021-12-27', '2021-12-28',
               '2021-12-29', '2021-12-30'],
              dtype='datetime64[ns]', name='Date', length=756, freq=None)

Présentation#

Plan de la présentation

1) Introduction

  • présentation du jeu de données

  • définition de la problématique

2) Décomposition : tendance

  • différents modèles (régressions, moyennes mobiles, B-splines)

  • retrait de la tendance

3) Décomposition : saisonnalité

  • affichage graphique (seasonal plot, periodogram)

  • retrait de la saisonnalité

4) Prédiction

  • différents modèles (ARMA / ARIMA, Prophet)

  • comparaison des prédictions

5) Conclusion

  • réponse à la problématique

Analyse exploratoire#

Jeu de données#

Cours de l’action Apple de janvier 2019 à janvier 2022 (3 ans)

  • 756 dates (weekends et jours fériés exclus) => données journalières

  • 6 valeurs par date : Open, High, Low, Close, Adj. Close et Volume

  • nous n’étudierons que le cours de fermeture Close

Affichage des données#

Candlestick chart (graphique en bougie)#

1df_3_mois = df[df.index < pd.Timestamp("2019-03-01")]
1mpl.plot(
2    df_3_mois, type="candle", title=f"Cours de l'action {stock_name}", style="yahoo"
3)
../_images/b9aae34e21de2e3972783e5deb5a8d25fb6e556cecfa948caf2300be490a32ea.png
1mpl.plot(
2    df_3_mois,
3    type="candle",
4    mav=(3, 6, 9),
5    title=f"Cours de l'action {stock_name}",
6    style="yahoo",
7)
../_images/caaa1d2ac83738be00be1317f5b7c14b45d65f966226c9cf8d371f485ce7bbd1.png

Line plot#

1df["Close"].plot(title=f"Cours de l'action {stock_name}", ylabel="Price")
<Axes: title={'center': "Cours de l'action AAPL"}, xlabel='Date', ylabel='Price'>
../_images/c1ac9e0d9f9025f53f352c464be6fc15c42a7674d049455c63fbc1811493e7ac.png
1df["Close"].plot(title=f"Cours de l'action {stock_name}", ylabel="Price", style=".")
<Axes: title={'center': "Cours de l'action AAPL"}, xlabel='Date', ylabel='Price'>
../_images/04135238179e3ac4f90d1df4f2629125b31f6641cd5361e4b239526bc157785e.png

Auto-corrélation (ACF et PACF)#

Auto-corrélation (ACF)#

1lag = len(df_3_mois) - 1
2_ = plot_acf(df_3_mois["Close"], lags=lag)
../_images/cfee80d82d2f055200e580c4f63aa5c8893ef29c3c26b18fca37560e08f27946.png

Auto-corrélation partielle (PACF)#

1lag = len(df_3_mois) // 2 - 1
2_ = plot_pacf(df_3_mois["Close"], lags=lag)
../_images/b2f2948039dc54f871e27350a88a6c712e3564f43592cd35c805eed83da76a7e.png

Lag plot#

1lag = 1
2plt.title(f"Lag plot ({lag = })")
3pd.plotting.lag_plot(df["Close"], lag=lag)
<Axes: title={'center': 'Lag plot (lag = 1)'}, xlabel='y(t)', ylabel='y(t + 1)'>
../_images/503f7bf69cb7ce70da584fb172c75d60f9687074f35655c110bcec4d653bd7e5.png
1lag = 10
2plt.title(f"Lag plot ({lag = })")
3pd.plotting.lag_plot(df["Close"], lag=lag)
<Axes: title={'center': 'Lag plot (lag = 10)'}, xlabel='y(t)', ylabel='y(t + 10)'>
../_images/5244d6d2d6762ff0ba441b2c6190874fba1c8a04675a55a60f8bb78a16f074af.png

Problématique#

Nous cherchons à prédire le cours boursier d’Apple à horizon 2 mois.

Objectifs :

  • prédiction à 60 jours pour pouvoir spéculer

  • avoir un intervalle de confiance (pour ne pas prendre trop de risque)