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

709 lines
90 KiB
Plaintext
Raw Normal View History

2023-08-21 15:12:19 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"___\n",
"\n",
"<a href='http://www.pieriandata.com'> <img src='../Pierian_Data_Logo.png' /></a>\n",
"___\n",
"<center>*Copyright Pierian Data 2017*</center>\n",
"<center>*For more information, visit us at www.pieriandata.com*</center>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction to Statsmodels\n",
"\n",
"Statsmodels is a Python module that provides classes and functions for the estimation of many different statistical models, as well as for conducting statistical tests, and statistical data exploration. An extensive list of result statistics are available for each estimator. The results are tested against existing statistical packages to ensure that they are correct. The package is released under the open source Modified BSD (3-clause) license. The online documentation is hosted at statsmodels.org.\n",
"\n",
"The reason we will cover it for use in this course, is that you may find it very useful later on when discussing time series data (typical of quantitative financial analysis).\n",
"\n",
"Let's walk through a very simple example of using statsmodels!"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"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": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# You can safely ignore the warning:\n",
"# Please use the pandas.tseries module instead. from pandas.core import datetools\n",
"import statsmodels.api as sm"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = sm.datasets.macrodata.load_pandas().data"
]
},
{
"cell_type": "code",
"execution_count": 20,
"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": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\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": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"index = pd.Index(sm.tsa.datetools.dates_from_range('1959Q1', '2009Q3'))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.index = index"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\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": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x21b98304860>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nDcStb/Xd41u9XWN4v4u
"text/plain": [
"<matplotlib.figure.Figure at 0x21b9829e320>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df['realgdp'].plot()\n",
"plt.ylabel(\"REAL GDP\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using Statsmodels to get the trend\n",
"The Hodrick-Prescott filter separates a time-series y_t into a trend τ_t and a cyclical component ζt\n",
"\n",
"$y_t = \\tau_t + \\zeta_t$\n",
"\n",
"The components are determined by minimizing the following quadratic loss function\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": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Tuple unpacking\n",
"gdp_cycle, gdp_trend = sm.tsa.filters.hpfilter(df.realgdp)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"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",
"1960-06-30 23.040242\n",
"1960-09-30 -1.355312\n",
"1960-12-31 -67.462365\n",
"1961-03-31 -81.367438\n",
"1961-06-30 -60.167890\n",
"1961-09-30 -46.369224\n",
"1961-12-31 -20.695339\n",
"1962-03-31 -2.162153\n",
"1962-06-30 -4.718648\n",
"1962-09-30 -13.556457\n",
"1962-12-31 -44.369262\n",
"1963-03-31 -43.320274\n",
"1963-06-30 -44.546971\n",
"1963-09-30 -26.298758\n",
"1963-12-31 -44.261196\n",
"1964-03-31 -14.434412\n",
"1964-06-30 -20.266867\n",
"1964-09-30 -19.137001\n",
"1964-12-31 -54.824590\n",
"1965-03-31 -15.962445\n",
"1965-06-30 -13.740115\n",
"1965-09-30 13.254828\n",
"1965-12-31 56.030402\n",
"1966-03-31 103.074337\n",
"1966-06-30 72.175348\n",
" ... \n",
"2002-06-30 -95.260035\n",
"2002-09-30 -114.798768\n",
"2002-12-31 -190.025905\n",
"2003-03-31 -221.225647\n",
"2003-06-30 -207.139428\n",
"2003-09-30 -89.685415\n",
"2003-12-31 -61.895316\n",
"2004-03-31 -56.628782\n",
"2004-06-30 -49.616781\n",
"2004-09-30 -38.362890\n",
"2004-12-31 -8.956672\n",
"2005-03-31 39.070285\n",
"2005-06-30 18.652990\n",
"2005-09-30 42.798035\n",
"2005-12-31 39.627354\n",
"2006-03-31 141.269129\n",
"2006-06-30 125.653779\n",
"2006-09-30 70.676428\n",
"2006-12-31 110.887665\n",
"2007-03-31 99.564908\n",
"2007-06-30 157.161271\n",
"2007-09-30 231.874638\n",
"2007-12-31 263.554667\n",
"2008-03-31 204.422097\n",
"2008-06-30 221.373942\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": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdp_cycle"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.series.Series"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(gdp_cycle)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df[\"trend\"] = gdp_trend"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x21b98541080>"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nfzFehjGGU6dO4edXwOf
"text/plain": [
"<matplotlib.figure.Figure at 0x21b9856ac18>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[['trend','realgdp']].plot()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x21b98785390>"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nhPy9fE6DBg34+OOPadS
"text/plain": [
"<matplotlib.figure.Figure at 0x21b98971d68>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[['trend','realgdp']][\"2000-03-31\":].plot(figsize=(12,8))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Great job!"
]
}
],
"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.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}