python-pour-finance/09-Python-Finance-Fondamentaux/.ipynb_checkpoints/03-CAPM-Capital-Asset-Prici...

936 lines
167 KiB
Plaintext
Raw Permalink Normal View History

2023-08-21 15:12:19 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CAPM - Capital Asset Pricing Model \n",
"\n",
"Watch the video for the full overview.\n",
"\n",
"Portfolio Returns:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## $r_p(t) = \\sum\\limits_{i}^{n}w_i r_i(t)$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Market Weights:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## $ w_i = \\frac{MarketCap_i}{\\sum_{j}^{n}{MarketCap_j}} $\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### CAPM of a portfolio"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## $ r_p(t) = \\beta_pr_m(t) + \\sum\\limits_{i}^{n}w_i \\alpha_i(t)$"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Model CAPM as a simple linear regression"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy import stats"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on function linregress in module scipy.stats._stats_mstats_common:\n",
"\n",
"linregress(x, y=None)\n",
" Calculate a linear least-squares regression for two sets of measurements.\n",
" \n",
" Parameters\n",
" ----------\n",
" x, y : array_like\n",
" Two sets of measurements. Both arrays should have the same length.\n",
" If only x is given (and y=None), then it must be a two-dimensional\n",
" array where one dimension has length 2. The two sets of measurements\n",
" are then found by splitting the array along the length-2 dimension.\n",
" \n",
" Returns\n",
" -------\n",
" slope : float\n",
" slope of the regression line\n",
" intercept : float\n",
" intercept of the regression line\n",
" rvalue : float\n",
" correlation coefficient\n",
" pvalue : float\n",
" two-sided p-value for a hypothesis test whose null hypothesis is\n",
" that the slope is zero.\n",
" stderr : float\n",
" Standard error of the estimated gradient.\n",
" \n",
" See also\n",
" --------\n",
" :func:`scipy.optimize.curve_fit` : Use non-linear\n",
" least squares to fit a function to data.\n",
" :func:`scipy.optimize.leastsq` : Minimize the sum of\n",
" squares of a set of equations.\n",
" \n",
" Examples\n",
" --------\n",
" >>> import matplotlib.pyplot as plt\n",
" >>> from scipy import stats\n",
" >>> np.random.seed(12345678)\n",
" >>> x = np.random.random(10)\n",
" >>> y = np.random.random(10)\n",
" >>> slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)\n",
" \n",
" To get coefficient of determination (r_squared)\n",
" \n",
" >>> print(\"r-squared:\", r_value**2)\n",
" ('r-squared:', 0.080402268539028335)\n",
" \n",
" Plot the data along with the fitted line\n",
" \n",
" >>> plt.plot(x, y, 'o', label='original data')\n",
" >>> plt.plot(x, intercept + slope*x, 'r', label='fitted line')\n",
" >>> plt.legend()\n",
" >>> plt.show()\n",
"\n"
]
}
],
"source": [
"help(stats.linregress)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"import pandas_datareader as web"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"spy_etf = web.DataReader('SPY','google')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"DatetimeIndex: 1897 entries, 2010-01-04 to 2017-07-18\n",
"Data columns (total 5 columns):\n",
"Open 1879 non-null float64\n",
"High 1879 non-null float64\n",
"Low 1879 non-null float64\n",
"Close 1897 non-null float64\n",
"Volume 1897 non-null int64\n",
"dtypes: float64(4), int64(1)\n",
"memory usage: 88.9 KB\n"
]
}
],
"source": [
"spy_etf.info()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"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>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2010-01-04</th>\n",
" <td>112.37</td>\n",
" <td>113.39</td>\n",
" <td>111.51</td>\n",
" <td>113.33</td>\n",
" <td>118944541</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-05</th>\n",
" <td>113.26</td>\n",
" <td>113.68</td>\n",
" <td>112.85</td>\n",
" <td>113.63</td>\n",
" <td>111579866</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-06</th>\n",
" <td>113.52</td>\n",
" <td>113.99</td>\n",
" <td>113.43</td>\n",
" <td>113.71</td>\n",
" <td>116074402</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-07</th>\n",
" <td>113.50</td>\n",
" <td>114.33</td>\n",
" <td>113.18</td>\n",
" <td>114.19</td>\n",
" <td>131091048</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-08</th>\n",
" <td>113.89</td>\n",
" <td>114.62</td>\n",
" <td>113.66</td>\n",
" <td>114.57</td>\n",
" <td>126402764</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Open High Low Close Volume\n",
"Date \n",
"2010-01-04 112.37 113.39 111.51 113.33 118944541\n",
"2010-01-05 113.26 113.68 112.85 113.63 111579866\n",
"2010-01-06 113.52 113.99 113.43 113.71 116074402\n",
"2010-01-07 113.50 114.33 113.18 114.19 131091048\n",
"2010-01-08 113.89 114.62 113.66 114.57 126402764"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy_etf.head()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"start = pd.to_datetime('2010-01-04')\n",
"end = pd.to_datetime('2017-07-18')"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"aapl = web.DataReader('AAPL','google',start,end)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"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>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2010-01-04</th>\n",
" <td>30.49</td>\n",
" <td>30.64</td>\n",
" <td>30.34</td>\n",
" <td>30.57</td>\n",
" <td>123432050</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-05</th>\n",
" <td>30.66</td>\n",
" <td>30.80</td>\n",
" <td>30.46</td>\n",
" <td>30.63</td>\n",
" <td>150476004</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-06</th>\n",
" <td>30.63</td>\n",
" <td>30.75</td>\n",
" <td>30.11</td>\n",
" <td>30.14</td>\n",
" <td>138039594</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-07</th>\n",
" <td>30.25</td>\n",
" <td>30.29</td>\n",
" <td>29.86</td>\n",
" <td>30.08</td>\n",
" <td>119282324</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-08</th>\n",
" <td>30.04</td>\n",
" <td>30.29</td>\n",
" <td>29.87</td>\n",
" <td>30.28</td>\n",
" <td>111969081</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Open High Low Close Volume\n",
"Date \n",
"2010-01-04 30.49 30.64 30.34 30.57 123432050\n",
"2010-01-05 30.66 30.80 30.46 30.63 150476004\n",
"2010-01-06 30.63 30.75 30.11 30.14 138039594\n",
"2010-01-07 30.25 30.29 29.86 30.08 119282324\n",
"2010-01-08 30.04 30.29 29.87 30.28 111969081"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aapl.head()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1c4e9221cf8>"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAloAAAHDCAYAAAD82rT8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VFX+x/H3TQ9JCCX03psoClgogiKIbV1WV1F0wa5r\n2/1tEcuuvexa111RsVcsiAUVC4oFpEiTjnQINQkhpNf7++PM5c5kJskkmVQ+r+eZ5957bjuJwnw5\n5Xss27YRERERkdALq+sKiIiIiDRWCrREREREaogCLREREZEaokBLREREpIYo0BIRERGpIQq0RERE\nRGqIAi0RERGRGqJAS0RERKSGKNASERERqSERdV0BgKSkJLtr1651XQ0RERGRCi1btizVtu1WwVxb\nLwKtrl27snTp0rquhoiIiEiFLMvaEey16joUERERqSEKtERERERqiAItERERkRpSL8ZoBVJYWEhy\ncjJ5eXl1XZVGISYmho4dOxIZGVnXVRERETlq1NtAKzk5mYSEBLp27YplWXVdnQbNtm3S0tJITk6m\nW7dudV0dERGRo0aFXYeWZXWyLGueZVnrLMtaa1nWrZ7yeyzL2m1Z1krP52yve263LGuzZVkbLcs6\nsyoVy8vLo2XLlgqyQsCyLFq2bKnWQRERkVoWTItWEfAX27aXW5aVACyzLOtrz7knbdt+zPtiy7L6\nAxOBAUB7YK5lWb1t2y6ubOUUZIWOfpciIiK1r8IWLdu299q2vdyznwmsBzqUc8v5wDu2befbtr0N\n2AycGIrKioiIiDQklZp1aFlWV+B4YLGn6GbLslZZlvWyZVnNPWUdgF1etyUTIDCzLOtay7KWWpa1\nNCUlpdIVry0fffQRlmWxYcMGn/KnnnqKmJgYMjIyjpR99913JCYmMmjQIPr168e99957pPzcc8+t\n1XqLiIhI3Qs60LIsKx74APiTbduHgWeB7sAgYC/weGVebNv2dNu2h9i2PaRVq6Cy2NeJGTNmMGLE\nCGbMmOFXPnToUGbNmuVTPnLkSFauXMnSpUt58803Wb58eW1WV0REROqRoGYdWpYViQmy3rJtexaA\nbdv7vc6/AHzqOdwNdPK6vaOnrMrunb2WdXsOV+cRfvq3b8rd5w0o95qsrCzmz5/PvHnzOO+88460\nUG3ZsoWsrCymTZvGgw8+yBVXXOF3b1xcHIMHD2bz5s20bt06pHUXERGRhiGYWYcW8BKw3rbtJ7zK\n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\nq9IoxMTE0LFjzfVBi4i
"text/plain": [
"<matplotlib.figure.Figure at 0x1c4e910cdd8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"aapl['Close'].plot(label='AAPL',figsize=(10,8))\n",
"spy_etf['Close'].plot(label='SPY Index')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Compare Cumulative Return"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"aapl['Cumulative'] = aapl['Close']/aapl['Close'].iloc[0]\n",
"spy_etf['Cumulative'] = spy_etf['Close']/spy_etf['Close'].iloc[0]"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x1c4e97460b8>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nMdMkSdIR5f+1AN4GcHy
"text/plain": [
"<matplotlib.figure.Figure at 0x1c4e9634ef0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"aapl['Cumulative'].plot(label='AAPL',figsize=(10,8))\n",
"spy_etf['Cumulative'].plot(label='SPY Index')\n",
"plt.legend()\n",
"plt.title('Cumulative Return')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get Daily Return"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"aapl['Daily Return'] = aapl['Close'].pct_change(1)\n",
"spy_etf['Daily Return'] = spy_etf['Close'].pct_change(1)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x1c4ea1ec518>"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nT85uEg4DM9ZEORcKvpP
"text/plain": [
"<matplotlib.figure.Figure at 0x1c4ea187e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(aapl['Daily Return'],spy_etf['Daily Return'],alpha=0.3)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1c4ea1a4908>"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n0LZt23Y0M5tLtasT9H8
"text/plain": [
"<matplotlib.figure.Figure at 0x1c4ea212e48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"aapl['Daily Return'].hist(bins=100)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1c4e97c9cc0>"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nfPiaUlWDr5zcCfwn4Pu
"text/plain": [
"<matplotlib.figure.Figure at 0x1c4e963a7f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"spy_etf['Daily Return'].hist(bins=100)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"beta,alpha,r_value,p_value,std_err = stats.linregress(aapl['Daily Return'].iloc[1:],spy_etf['Daily Return'].iloc[1:])"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.19423150396392763"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"beta"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.00026461336993233316"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alpha"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.33143080741409325"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r_value"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## What if our stock was completely related to SP500?"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Date\n",
"2010-01-04 NaN\n",
"2010-01-05 0.002647\n",
"2010-01-06 0.000704\n",
"2010-01-07 0.004221\n",
"2010-01-08 0.003328\n",
"Name: Daily Return, dtype: float64"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy_etf['Daily Return'].head()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [],
"source": [
"noise = np.random.normal(0,0.001,len(spy_etf['Daily Return'].iloc[1:]))"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.00089285, 0.00056301, -0.00022182, ..., -0.00075069,\n",
" -0.00017751, -0.00034175])"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"noise"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Date\n",
"2010-01-05 0.003540\n",
"2010-01-06 0.001267\n",
"2010-01-07 0.003999\n",
"2010-01-08 0.003744\n",
"2010-01-11 0.002430\n",
"2010-01-12 -0.008178\n",
"2010-01-13 0.006244\n",
"2010-01-14 0.003002\n",
"2010-01-15 -0.010593\n",
"2010-01-19 0.012289\n",
"2010-01-20 -0.010683\n",
"2010-01-21 -0.019239\n",
"2010-01-22 -0.022449\n",
"2010-01-25 0.003428\n",
"2010-01-26 -0.003510\n",
"2010-01-27 0.004741\n",
"2010-01-28 -0.011874\n",
"2010-01-29 -0.010649\n",
"2010-02-01 0.015995\n",
"2010-02-02 0.011317\n",
"2010-02-03 -0.006852\n",
"2010-02-04 -0.029828\n",
"2010-02-05 0.000845\n",
"2010-02-08 -0.007362\n",
"2010-02-09 0.010399\n",
"2010-02-10 -0.000745\n",
"2010-02-11 0.008745\n",
"2010-02-12 -0.001782\n",
"2010-02-16 0.016414\n",
"2010-02-17 0.003658\n",
" ... \n",
"2017-06-06 -0.001963\n",
"2017-06-07 0.003158\n",
"2017-06-08 -0.000087\n",
"2017-06-09 -0.000582\n",
"2017-06-12 -0.001564\n",
"2017-06-13 0.006079\n",
"2017-06-14 -0.002911\n",
"2017-06-15 -0.001163\n",
"2017-06-16 -0.004836\n",
"2017-06-19 0.008102\n",
"2017-06-20 -0.008464\n",
"2017-06-21 -0.000669\n",
"2017-06-22 -0.000532\n",
"2017-06-23 0.002970\n",
"2017-06-26 0.001098\n",
"2017-06-27 -0.009717\n",
"2017-06-28 0.008961\n",
"2017-06-29 -0.010516\n",
"2017-06-30 0.001965\n",
"2017-07-03 0.001218\n",
"2017-07-05 0.003210\n",
"2017-07-06 -0.008497\n",
"2017-07-07 0.005798\n",
"2017-07-10 0.000335\n",
"2017-07-11 -0.001653\n",
"2017-07-12 0.008218\n",
"2017-07-13 0.003311\n",
"2017-07-14 0.003913\n",
"2017-07-17 -0.000300\n",
"2017-07-18 0.000188\n",
"Name: Daily Return, Length: 1896, dtype: float64"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spy_etf['Daily Return'].iloc[1:] + noise"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"beta,alpha,r_value,p_value,std_err = stats.linregress(spy_etf['Daily Return'].iloc[1:]+noise,spy_etf['Daily Return'].iloc[1:])"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9902145894162997"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"beta"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.4861814214210613e-05"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alpha"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like our understanding is correct!"
]
}
],
"metadata": {
"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
}