python-pour-finance/08-Analyse-Time-Series/1-Introduction-à-Statsmode...

637 lines
87 KiB
Plaintext
Raw Permalink Normal View History

2023-08-21 15:12:19 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction à Statsmodels\n",
"\n",
"Statsmodels est un module Python qui fournit des classes et des fonctions pour l'estimation de nombreux modèles statistiques différents, ainsi que pour la réalisation de tests statistiques et l'exploration de données statistiques. Une liste exhaustive de statistiques sur les résultats est disponible pour chaque estimateur. Les résultats sont testés par rapport aux progiciels statistiques existants pour s'assurer qu'ils sont corrects. Le paquet est publié sous la licence Open Source Modified BSD (3-clause). La documentation en ligne est hébergée sur statsmodels.org.\n",
"\n",
"La raison pour laquelle nous l'aborderons dans ce cours est qu'il pourrait vous être très utile plus tard lorsque vous discuterez des données de séries temporelles (typiques de l'analyse financière quantitative).\n",
"\n",
"Prenons un exemple très simple d'utilisation de statsmodels !"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import statsmodels.api as sm"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"df = sm.datasets.macrodata.load_pandas().data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"::\n",
" Number of Observations - 203\n",
"\n",
" Number of Variables - 14\n",
"\n",
" Variable name definitions::\n",
"\n",
" year - 1959q1 - 2009q3\n",
" quarter - 1-4\n",
" realgdp - Real gross domestic product (Bil. of chained 2005 US$,\n",
" seasonally adjusted annual rate)\n",
" realcons - Real personal consumption expenditures (Bil. of chained\n",
" 2005 US$, seasonally adjusted annual rate)\n",
" realinv - Real gross private domestic investment (Bil. of chained\n",
" 2005 US$, seasonally adjusted annual rate)\n",
" realgovt - Real federal consumption expenditures & gross investment\n",
" (Bil. of chained 2005 US$, seasonally adjusted annual rate)\n",
" realdpi - Real private disposable income (Bil. of chained 2005\n",
" US$, seasonally adjusted annual rate)\n",
" cpi - End of the quarter consumer price index for all urban\n",
" consumers: all items (1982-84 = 100, seasonally adjusted).\n",
" m1 - End of the quarter M1 nominal money stock (Seasonally\n",
" adjusted)\n",
" tbilrate - Quarterly monthly average of the monthly 3-month\n",
" treasury bill: secondary market rate\n",
" unemp - Seasonally adjusted unemployment rate (%)\n",
" pop - End of the quarter total population: all ages incl. armed\n",
" forces over seas\n",
" infl - Inflation rate (ln(cpi_{t}/cpi_{t-1}) * 400)\n",
" realint - Real interest rate (tbilrate - infl)\n",
"\n"
]
}
],
"source": [
"print(sm.datasets.macrodata.NOTE)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>year</th>\n",
" <th>quarter</th>\n",
" <th>realgdp</th>\n",
" <th>realcons</th>\n",
" <th>realinv</th>\n",
" <th>realgovt</th>\n",
" <th>realdpi</th>\n",
" <th>cpi</th>\n",
" <th>m1</th>\n",
" <th>tbilrate</th>\n",
" <th>unemp</th>\n",
" <th>pop</th>\n",
" <th>infl</th>\n",
" <th>realint</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1959.0</td>\n",
" <td>1.0</td>\n",
" <td>2710.349</td>\n",
" <td>1707.4</td>\n",
" <td>286.898</td>\n",
" <td>470.045</td>\n",
" <td>1886.9</td>\n",
" <td>28.98</td>\n",
" <td>139.7</td>\n",
" <td>2.82</td>\n",
" <td>5.8</td>\n",
" <td>177.146</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1959.0</td>\n",
" <td>2.0</td>\n",
" <td>2778.801</td>\n",
" <td>1733.7</td>\n",
" <td>310.859</td>\n",
" <td>481.301</td>\n",
" <td>1919.7</td>\n",
" <td>29.15</td>\n",
" <td>141.7</td>\n",
" <td>3.08</td>\n",
" <td>5.1</td>\n",
" <td>177.830</td>\n",
" <td>2.34</td>\n",
" <td>0.74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1959.0</td>\n",
" <td>3.0</td>\n",
" <td>2775.488</td>\n",
" <td>1751.8</td>\n",
" <td>289.226</td>\n",
" <td>491.260</td>\n",
" <td>1916.4</td>\n",
" <td>29.35</td>\n",
" <td>140.5</td>\n",
" <td>3.82</td>\n",
" <td>5.3</td>\n",
" <td>178.657</td>\n",
" <td>2.74</td>\n",
" <td>1.09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1959.0</td>\n",
" <td>4.0</td>\n",
" <td>2785.204</td>\n",
" <td>1753.7</td>\n",
" <td>299.356</td>\n",
" <td>484.052</td>\n",
" <td>1931.3</td>\n",
" <td>29.37</td>\n",
" <td>140.0</td>\n",
" <td>4.33</td>\n",
" <td>5.6</td>\n",
" <td>179.386</td>\n",
" <td>0.27</td>\n",
" <td>4.06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1960.0</td>\n",
" <td>1.0</td>\n",
" <td>2847.699</td>\n",
" <td>1770.5</td>\n",
" <td>331.722</td>\n",
" <td>462.199</td>\n",
" <td>1955.5</td>\n",
" <td>29.54</td>\n",
" <td>139.6</td>\n",
" <td>3.50</td>\n",
" <td>5.2</td>\n",
" <td>180.007</td>\n",
" <td>2.31</td>\n",
" <td>1.19</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" year quarter realgdp realcons realinv realgovt realdpi cpi \\\n",
"0 1959.0 1.0 2710.349 1707.4 286.898 470.045 1886.9 28.98 \n",
"1 1959.0 2.0 2778.801 1733.7 310.859 481.301 1919.7 29.15 \n",
"2 1959.0 3.0 2775.488 1751.8 289.226 491.260 1916.4 29.35 \n",
"3 1959.0 4.0 2785.204 1753.7 299.356 484.052 1931.3 29.37 \n",
"4 1960.0 1.0 2847.699 1770.5 331.722 462.199 1955.5 29.54 \n",
"\n",
" m1 tbilrate unemp pop infl realint \n",
"0 139.7 2.82 5.8 177.146 0.00 0.00 \n",
"1 141.7 3.08 5.1 177.830 2.34 0.74 \n",
"2 140.5 3.82 5.3 178.657 2.74 1.09 \n",
"3 140.0 4.33 5.6 179.386 0.27 4.06 \n",
"4 139.6 3.50 5.2 180.007 2.31 1.19 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"index = pd.Index(sm.tsa.datetools.dates_from_range('1959Q1', '2009Q3'))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"df.index = index"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>year</th>\n",
" <th>quarter</th>\n",
" <th>realgdp</th>\n",
" <th>realcons</th>\n",
" <th>realinv</th>\n",
" <th>realgovt</th>\n",
" <th>realdpi</th>\n",
" <th>cpi</th>\n",
" <th>m1</th>\n",
" <th>tbilrate</th>\n",
" <th>unemp</th>\n",
" <th>pop</th>\n",
" <th>infl</th>\n",
" <th>realint</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1959-03-31</th>\n",
" <td>1959.0</td>\n",
" <td>1.0</td>\n",
" <td>2710.349</td>\n",
" <td>1707.4</td>\n",
" <td>286.898</td>\n",
" <td>470.045</td>\n",
" <td>1886.9</td>\n",
" <td>28.98</td>\n",
" <td>139.7</td>\n",
" <td>2.82</td>\n",
" <td>5.8</td>\n",
" <td>177.146</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1959-06-30</th>\n",
" <td>1959.0</td>\n",
" <td>2.0</td>\n",
" <td>2778.801</td>\n",
" <td>1733.7</td>\n",
" <td>310.859</td>\n",
" <td>481.301</td>\n",
" <td>1919.7</td>\n",
" <td>29.15</td>\n",
" <td>141.7</td>\n",
" <td>3.08</td>\n",
" <td>5.1</td>\n",
" <td>177.830</td>\n",
" <td>2.34</td>\n",
" <td>0.74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1959-09-30</th>\n",
" <td>1959.0</td>\n",
" <td>3.0</td>\n",
" <td>2775.488</td>\n",
" <td>1751.8</td>\n",
" <td>289.226</td>\n",
" <td>491.260</td>\n",
" <td>1916.4</td>\n",
" <td>29.35</td>\n",
" <td>140.5</td>\n",
" <td>3.82</td>\n",
" <td>5.3</td>\n",
" <td>178.657</td>\n",
" <td>2.74</td>\n",
" <td>1.09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1959-12-31</th>\n",
" <td>1959.0</td>\n",
" <td>4.0</td>\n",
" <td>2785.204</td>\n",
" <td>1753.7</td>\n",
" <td>299.356</td>\n",
" <td>484.052</td>\n",
" <td>1931.3</td>\n",
" <td>29.37</td>\n",
" <td>140.0</td>\n",
" <td>4.33</td>\n",
" <td>5.6</td>\n",
" <td>179.386</td>\n",
" <td>0.27</td>\n",
" <td>4.06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1960-03-31</th>\n",
" <td>1960.0</td>\n",
" <td>1.0</td>\n",
" <td>2847.699</td>\n",
" <td>1770.5</td>\n",
" <td>331.722</td>\n",
" <td>462.199</td>\n",
" <td>1955.5</td>\n",
" <td>29.54</td>\n",
" <td>139.6</td>\n",
" <td>3.50</td>\n",
" <td>5.2</td>\n",
" <td>180.007</td>\n",
" <td>2.31</td>\n",
" <td>1.19</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" year quarter realgdp realcons realinv realgovt realdpi \\\n",
"1959-03-31 1959.0 1.0 2710.349 1707.4 286.898 470.045 1886.9 \n",
"1959-06-30 1959.0 2.0 2778.801 1733.7 310.859 481.301 1919.7 \n",
"1959-09-30 1959.0 3.0 2775.488 1751.8 289.226 491.260 1916.4 \n",
"1959-12-31 1959.0 4.0 2785.204 1753.7 299.356 484.052 1931.3 \n",
"1960-03-31 1960.0 1.0 2847.699 1770.5 331.722 462.199 1955.5 \n",
"\n",
" cpi m1 tbilrate unemp pop infl realint \n",
"1959-03-31 28.98 139.7 2.82 5.8 177.146 0.00 0.00 \n",
"1959-06-30 29.15 141.7 3.08 5.1 177.830 2.34 0.74 \n",
"1959-09-30 29.35 140.5 3.82 5.3 178.657 2.74 1.09 \n",
"1959-12-31 29.37 140.0 4.33 5.6 179.386 0.27 4.06 \n",
"1960-03-31 29.54 139.6 3.50 5.2 180.007 2.31 1.19 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'REAL GDP')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df['realgdp'].plot()\n",
"plt.ylabel(\"REAL GDP\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Utiliser Statsmodels pour obtenir la tendance\n",
"Le filtre Hodrick-Prescott sépare une série temporelle y_t en une composante de tendance τ_t et en une composante de cycle ζt\n",
"\n",
"$y_t = \\tau_t + \\zeta_t$\n",
"\n",
"Les composantes sont déterminées en minimisant la fonction de perte quadratique suivante:\n",
"\n",
"$\\min_{\\\\{ \\tau_{t}\\\\} }\\sum_{t}^{T}\\zeta_{t}^{2}+\\lambda\\sum_{t=1}^{T}\\left[\\left(\\tau_{t}-\\tau_{t-1}\\right)-\\left(\\tau_{t-1}-\\tau_{t-2}\\right)\\right]^{2}$"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# Décomposition du tuple\n",
"gdp_cycle, gdp_trend = sm.tsa.filters.hpfilter(df.realgdp)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1959-03-31 39.511915\n",
"1959-06-30 80.088532\n",
"1959-09-30 48.875455\n",
"1959-12-31 30.591933\n",
"1960-03-31 64.882667\n",
" ... \n",
"2008-09-30 102.018455\n",
"2008-12-31 -107.269472\n",
"2009-03-31 -349.047706\n",
"2009-06-30 -397.557073\n",
"2009-09-30 -333.115243\n",
"Name: realgdp, Length: 203, dtype: float64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdp_cycle"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.series.Series"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(gdp_cycle)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"df[\"trend\"] = gdp_trend"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1c1a790c90>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df[['trend','realgdp']].plot()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1c1a8de890>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df[['trend','realgdp']][\"2000-03-31\":].plot(figsize=(12,8))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bon Travail!"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}