Skip to content

Instantly share code, notes, and snippets.

@DBremen
Last active December 24, 2019 19:06
Show Gist options
  • Save DBremen/8377f9f496a29caba2baff208e2cd032 to your computer and use it in GitHub Desktop.
Save DBremen/8377f9f496a29caba2baff208e2cd032 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# Beta and expected return\nBeta = indicator on how a security has performed as compared to the market in the past\n<br>Beta > 1 = security performed better than market (in both directions up and down)"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "<h1 id=\"tocheading\">Table of Contents</h1>\n<div id=\"toc\"></div>"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%%javascript\n$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')",
"execution_count": 1,
"outputs": [
{
"data": {
"application/javascript": "$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')\n",
"text/plain": "<IPython.core.display.Javascript object>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import numpy as np\nimport pandas as pd\nimport pandas_datareader as pdr\nimport matplotlib.pyplot as plt\nimport matplotlib.ticker as mtick\nfrom pandas.plotting import register_matplotlib_converters\nregister_matplotlib_converters()\n#ax.yaxis.set_major_formatter(mtick.PercentFormatter())\npd.options.display.float_format = '${:,.2f}'.format\n%matplotlib inline\n#format DataFrame example\n#formatted = df.style.format({'EPS': '${:,.2f}', 'PE':'{:,.2f}', 'Exp_Ret': '{:,.2%}', 'Price': '${:,.2f}'})",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Get last business day of month for 5 years of data"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from datetime import datetime, timedelta\nfiveYearsAgo = (datetime.now() - timedelta(days=365*5)).date().isoformat()\nstocks = '^GSPC AAPL'.split()\ndata = pdr.get_data_yahoo(stocks, start=fiveYearsAgo)['Close']\ndata = data.resample('BM').last()\ndata.rename(columns={'^GSPC':'S&P500'},inplace=True)",
"execution_count": 49,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "data = data[1:]\ndata.info()",
"execution_count": 50,
"outputs": [
{
"output_type": "stream",
"text": "<class 'pandas.core.frame.DataFrame'>\nDatetimeIndex: 60 entries, 2015-01-30 to 2019-12-31\nFreq: BM\nData columns (total 2 columns):\nS&P500 60 non-null float64\nAAPL 60 non-null float64\ndtypes: float64(2)\nmemory usage: 1.4 KB\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Calculate MoM change"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "change = pd.DataFrame()\nfor column in data:\n if column not in change:\n change[column] = np.log(data[column]).diff()\n#skip the first row without change values\nchange = change[1:]\nchange.tail()",
"execution_count": 5,
"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>S&amp;P500</th>\n <th>AAPL</th>\n </tr>\n <tr>\n <th>Date</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>2019-08-30</td>\n <td>$-0.02</td>\n <td>$-0.02</td>\n </tr>\n <tr>\n <td>2019-09-30</td>\n <td>$0.02</td>\n <td>$0.07</td>\n </tr>\n <tr>\n <td>2019-10-31</td>\n <td>$0.02</td>\n <td>$0.10</td>\n </tr>\n <tr>\n <td>2019-11-29</td>\n <td>$0.03</td>\n <td>$0.07</td>\n </tr>\n <tr>\n <td>2019-12-31</td>\n <td>$0.03</td>\n <td>$0.06</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " S&P500 AAPL\nDate \n2019-08-30 $-0.02 $-0.02\n2019-09-30 $0.02 $0.07\n2019-10-31 $0.02 $0.10\n2019-11-29 $0.03 $0.07\n2019-12-31 $0.03 $0.06"
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Get beta value for Apple\nby building a linear regression against S&P500 and getting the slope of the regression line"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "from sklearn.linear_model import LinearRegression as lr\nmodel = lr()\nx = np.array(change['S&P500'])\ny = np.array(change['AAPL'])\nmodel.fit(x[:,np.newaxis],y);",
"execution_count": 6,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "xfit = np.linspace(x.min(), x.max(), 100)\nyfit = model.predict(xfit[:,np.newaxis])\nplt.scatter(x,y)\nplt.plot(xfit,yfit,c='r');\nplt.xlabel('S&P500')\nplt.ylabel('AAPL')",
"execution_count": 7,
"outputs": [
{
"data": {
"text/plain": "Text(0, 0.5, 'AAPL')"
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEGCAYAAAB7DNKzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3de5gU9Z3v8ffXYcTBGyheYADxgrioBHTUeDQqiqCbKKCiGKNoQMzJ8dlszoYVLzGuMQFD9piYNVFAFO8oEYIRBUU0atQwiIioyEUiDKggoiLD/Xf++NVAM3bXTM9Ud1V3f17PMw/dVdVV365h+tu/uznnEBERyWS3uAMQEZFkU6IQEZFQShQiIhJKiUJEREIpUYiISKgWcQcQtbZt27rOnTvHHYaISEGZM2fOGufcAen2FV2i6Ny5M9XV1XGHISJSUMzsn5n2qepJRERCKVGIiEioWBOFmZ1jZgvNbLGZjUiz//+a2btm9raZzTSzQ+KIU0SklMWWKMysDLgLOBfoBlxqZt3qHTYXqHLOdQcmAb/Jb5QiIhJnieJEYLFzbqlzbjPwGNAv9QDn3Czn3Ibg6etAhzzHKCJS8uJMFJXA8pTnK4JtmQwBnkm3w8yGmVm1mVWvXr06whBFRCTORGFptqWdytbMfgBUAaPT7XfOjXHOVTnnqg44IG03YBERaaI4x1GsADqmPO8ArKx/kJn1Bm4ETnfObcpTbCIiEoizRDEb6GJmh5rZ7sAgYGrqAWbWE7gHON8592kMMYqIlLzYEoVzbitwLTAdeA943Dm3wMxuNbPzg8NGA3sBT5jZW2Y2NcPpREQkR2KdwsM5Nw2YVm/bzSmPe+c9KBER2YVGZouISKiimxRQROI3ZW4No6cvZOW6Wtq3rmB436707xnW+12STIlCRCI1ZW4N1z85n9ot2wCoWVfL9U/OB1CyKFCqehKRSI2evnBHkqhTu2Ubo6cvjCkiaS4lChGJ1Mp1tVltl+RTohCRSLVvXZHVdkk+JQoRidTwvl2pKC/bZVtFeRnD+3aNKSJpLjVmi0ik6hqs1eupeChRiEjk+vesVGIoIqp6EhGRUEoUIiISSolCRERCKVGIiEgoJQoREQmlRCEiIqGUKEREJJQShYiIhFKiEBGRUEoUIiISSolCRERCKVGIiEgoJQoREQmlRCEiIqGUKEREJJQShYiIhFKiEBGRUEoUIiISSolCRERCac1sEcloytwaRk9fyMp1tbRvXcHwvl21FnaglO6NEoWIpDVlbg3XPzmf2i3bAKhZV8v1T84HiOwDsVA/bPNxb5JEiUJE0ho9feGOD8I6tVu2MXr6wkg+DAvtwzY1qe1mxjbndtkf5b1JGrVRiEhaK9fVZrU9W2GJKGnqklrNulocfCNJ1Inq3iSNEoWIpNW+dUVW27OV60QUpXRJLZ2o7k3SKFGISFrD+3alorxsl20V5WUM79s1kvPnOhFFqTHJK8p7kzRKFCKSVv+elYy84FgqW1dgQGXrCkZecGxkdfC5TkRRypS8ysxycm+SRo3ZIpJR/56VOfvwqztvIfR6Gt636y4N7+CTWjEnh1RKFCISm1wmoigVUlLLBSUKEUmrUMc45EqhJLVcUBuFiHxD/e6gdWMcpsytiTu04rV9O8ycCZdeCj/9adzR7CLWRGFm55jZQjNbbGYj0uw/zczeNLOtZnZRHDGKlKJCGuNQ8FauhF//Grp0gd69Yfp02HPPuKPaRWxVT2ZWBtwFnA2sAGab2VTn3Lsph30EXAn8LP8RisQvruqfQhrjUJC2boVnnoGxY+Hpp31p4owz4NZb4cILYY894o5wF3G2UZwILHbOLQUws8eAfsCOROGcWxbs2x5HgCJxinOKi/atK6hJkxSSOMahoCxdCuPHw333+ZLEQQfBf/4n/PCHvkSRUHFWPVUCy1Oerwi2Zc3MhplZtZlVr169OpLgROIWZ/VPIY1xSLxNm+Cxx3y10uGHw8iR0LMnTJ4My5f75wlOEhBvicLSbEs/gUoDnHNjgDEAVVVVTTqHSNLku/qnfjXXhcdXMuv91dSsq6XMbJckVYi9f/JejffuuzBuHDzwAHz2GRxyiK9auuoq6NAhd9fNgTgTxQqgY8rzDsDKmGIRSZx8Vv+kq+b685waLjy+kj/PqSmYGV4zyVs13tdfw+OP+wTx979DeTn07w9Dh/oSxW6F2dE0zqhnA13M7FAz2x0YBEyNMR6RRMln9U+maq5H31heFL2fclqN5xxUV8OPfgTt2vn2hrVrYfRoqKnxiaNPn4JNEhBjicI5t9XMrgWmA2XAeOfcAjO7Fah2zk01sxOAyUAb4Dwz+y/n3NFxxSyST/kcDZypOitX02nnuxooJ9V4n38Ojzziey7NmwcVFTBwIFx9NZxyCli62vXCFOvIbOfcNGBavW03pzyeja+SEilJ+RoNnKmaqyzNAj11xzdVHL25IqvGcw5eftlXLT3xBGzcCMcdB3/6kx8ot+++EUWcLIVbFhKRyGSq5rr0pI6RV3/F0Zur2dV4n3ziq5KOOgpOPx3+8hffKD1njv/50Y+KNkmA5noSEcKruaoO2S/SaqI4BvM1qRpv2zaYMcOXHqZO9YPkTj0VbrjBVzG1ahV5nEmdX8tchjrIQlVVVeWqq6vjDkNEMjhl1Atpq4EqW1fw6ogzY4iono8+8oPixo/34xzatoXBg33PpaOOytll61fJQX6nMjezOc65qnT7VPUkInmVyMF8mzfDk0/CuedC585+vEO3br4doqYGfvvbnCYJSPb8Wqp6EikRSanWSNTaDh984KuWJkyATz/1A+F+/nPf/tC5c15DSfL8WkoUIiWgoZ5G+UgiSUlU1NbCpEk+Qfztb1BWBuef76uW+vb1z2OQ5Pm1lChESkBD1Rq57q4a5wSHO7z1lk8ODz0EX3wBRxwBo0b59oeDD85PDCEyLbeahPm11EYhUgLCqjXyUTceW/37l1/CPffACSf4ifjGjYPvfQ9efNFXO113XSKSBPiEOfKCY6lsXYHhG/eTsia3ShQiJSCsWiMfdeN5rX93Dl57zSeFiRNhwwbo3h3uvBMuuwz22y/6a0YkqcutKlFIoiWmXjuPcvGe01VrlJcZX2/amnHK5ijrxvNS/75mDTz4oE8Q774Le+3lE8PVV0NVVVFNqZFvShSSWImo186zXLznusRTu2Xbjik52rQqZ/3Grayr3ZL2NdnUjTcmseWs/n37dnjhBZ8cJk/23VxPPhnuvRcuvtgnC2k2JQpJrLB67WJNFFG/5/qJZ5tzVJSX4Rxs2Z6+LFGZRSmmsYkt8i6xNTVw//0+IXz4oa9O+vGPYcgQOOaYpp1TMlKikMRKcr/yXIn6PWdKPPW31THIanR0Nomt2fXvW7f69aXHjYNp03xp4swz4Ve/ggEDErfOdDFRopDESnK/8lyJ+j1nm2CyvU6UiS1jFdaSJb7kcP/9sGqVX/Phuut86eHww7O+ThIUWtubusdKYiVyqocci/o9Z/rgb9OqPJLrZDp/tgmnrgqrZl0tDliz5gte/uUfWH3iqX68w+23w/HH+1lbP/oIfv3rgk4Sqe+1rrpuytyauEPLSCUKSaxETfWQJ1G/50yNyL847+hIrhNVI3VdFdaRq5cxaN4MBiyYRZuNX1HTph388pd+So3K4vi9F2LbmxKFJFpS+5XnUv1kUTcorSn3oaHE09x7G0liW7+eU1/6C5e8PZ3jVi5kU1kLZnQ5mce+1ZfXDunO0pvOa1aMSVOIbW9KFCIJE3UX2cYm25umzOfRN5azzTnKzLj0pI7c1v/YyM6/C+dg9mzfMP3oo9y+fj2L9u/IL88cypNH9+LzVn4RoMoibI8qxLY3JQqRhImjauKmKfN56PWPdjzf5tyO541JFo22di08/LBfZ3r+fL/4zyWX8LfT+nHN4t2p3bp9x6HF2h6V5DmdMlFjtkjCxFE18egby7PanhXn/NxKl10G7dvDv/0btGwJd98NK1fC+PGcdmU/Rl7YPZHzHEUtyXM6ZaIShUjCRFU1kU0XzG0ZVrrMtL0x1928YiVXLXmJKxY8z17Ll/k1pYcO9T89enzjdaXUHlVo71WJQiRhoqiayLado25qj3TbszGl+iOe+e/7uXnOM5y1+B+0cNuZ3ekY7Je/p+o/roaK5NbDS2ZKFCIJE0VPomzbOS49qeMubRSp2xtl2TIYP56T77yb/l+sZnWr1ow7cQATu/fhw/0qqWxRwatKEgVLiUIkgZpbNZFtO0ddg3VWvZ42b/YD4MaNg+eeA+C9zsdxc6+reeGIE9hSVt7gdaUwqDFbpAg1ZcT0bf2PZcnIf+V3l/Tg4H334OHXP+KUUS98c8Twe+/Bz37mB8BdfLF/fvPN8OGH3DjsN0zv+r92SRINXVeST4lCpAg1dSqQTNNLPPX3xTBhApx6KnTrBr//PZx2mp+c78MP4ZZb4JBDSnLalVKgqieRItTUdo76bRtHf7yYQW/PoNfol2DT19Cli5936Yor0i4h2tjrFtqkeKXOXBO6vyVZVVWVq66ujjsMkYJ06Iin2WvT1/R79yUGzZvOMZ8sYWOL3Xmm6ykM+OMt8J3vNHuluPo9ssCXOpI+lqDYmdkc51xVun0qUYiIHxT36qvc9dyd9Hr7JSq2buK9Azpzc+9rmHJ0L/Y++AAGnHZaJJcqxEnxSp0ShUgpW70aHnjA91x6/33ObrUnTx57Jg8d24f5Bx8BZpG3MRTipHilTo3ZIqVm+3aYMQMGDvQ9l372M2jTBsaPp/yTj2l571jW/kt3zCwn00tEtYaF5I9KFCIJk7OG3hUrYPx4//PPf8L++8O11/qV4o4+esdh/XvulfX1som5ECfFK3VKFCIJEvUU42zZAn/9q69aevZZX5ro3dv3XOrf30/Ol+eYS3FBqkKnXk8iCXLKqBfSTghY2bqCV0ec2fgTLVq0c53pTz7xs7ZedRX88Idw2GHRBUyEMUus1OtJpEA0q6F340b485996eHFF6GsDL77XT9b67nnQovc/Lmrcbr4KVGIJEiTphh/+22fHB56CD7/3JcYbrvNlyDat89htDtjK7QV2yQ76vUkkiCNngLjq6/8KnEnnQTf+hbccw/07csrd0/k1CH3cOhXPTjlgfe/OU9TnDFLwVKJQiREvqeaCG3odQ7eeMMniIkT4euvfW+lO+6Ayy9nykcbg0blTUAEDeFRxCxFoUmN2WZ2knPujRzE02xqzJaoJGaqibVrfbXS2LHwzjt+nelBg+Dqq32JIphSQ43K0hxhjdlNrXp6ohnx7GBm55jZQjNbbGYj0uxvaWYTg/1vmFnnKK4r0hhhU03k3PbtMGsWfP/7vp3hJz/xq8ONGQOrVvkeTd/+9i7zLmVqPE6XPESy0dRE0bxZwQAzKwPuAs4FugGXmlm3eocNAT53zh0B3AHc3tzrijRWLL15Vq2CUaPgyCPhzDPhmWdg2DCYNw/+8Q9fithnn7QvzdR4bJCXtgopXk1NFFEMvjgRWOycW+qc2ww8BvSrd0w/YELweBJwllkzp64UaaS8TTWxdasfFNe/P3TsCNdfDx06+OqmlSvhzjuhe/cGTzO8b9e03+Ac5KcUJEUrY2O2mT1F+oRgwP4RXLsSWJ7yfAVwUqZjnHNbzeyL4Npr6sU6DBgG0KlTpwhCE8nDVBPLlrHwV7+jzeMPc+CXa/hsrzZ8dvk1HHnDv/t1H7LUv2cl/z7xrbT7NKZBmiOs19Nvm7ivsTJ9+cn2GJxzY4Ax4Buzmx+aSI5682zatGOdaff88xyB8dKhxzHxrGHMPPxEyvdoycj1rejfwGky9caq1JgGyYGMicI595KZ9QQOBxY4596L+NorgI4pzzsAKzMcs8LMWgD7AmsjjkMko/49K6Pp4fTee35Q3AMPwJo10KkT9551Bfd2OYNV+xyw47Ct9dZlSJcQAIZPmseWbf47Uc26WoZPmue3a8K9Bml1veyFVT3dDPwAmAP8xsxGOufGRnjt2UAXMzsUqAEGAd+vd8xUYDDwGnAR8IIrtsmppHh9/TU88YTv1vr3v0N5OfTr56fU6N2bX934bNq63bpqokyT7e1m7EgSdbZsc/zXUwuYe3MfQGMaMol80sUSEVb1dAnQwzm3wcz2B54FIksUQZvDtcB0oAwY75xbYGa3AtXOuanAvcCDZrYYX5IYFNX1RXJmzhxfenjkEfjyS+jaFUaP9utMH3jgjsMamvoiU/fcTD7fsAWIsBRUhLS6XtOEJYqNzrkNAM65z8ws8uk+nHPTgGn1tt2c8ngjMDDq64pEbt06nxjGjYO5c/2Yh4EDfXfWU05Ju850Q9VEzWmAVvVKeprAsGnCEsXhZjY1eGz1nuOcOz+nkYkknXPwyiu+aumJJ/zsrT17wl13+YFyrVuHvryhxvJMJY5MWleUA6peCaMJDJsmLFHUH9MQRU8nkYKU+g29W4uN3L5+Lsc8OwkWLvQD4K680pcejjsuq/OGVROlK3FkUr6bccv5fpU6Va9kpsb+pgnt9ZRuu5l1xLcVpN0vknTZVstMmVvDjZPe4vhFc7hx3nTOXvwG5du38VmPE9j//vvhootgzz0jjzO1xBFWsqis9x5UvZKZJjBsmkbNHmtmbfFtBZfiB8FNzmVQIrmSdbXM8uWsGf5zps+eRocvV/NZxT7cd/z5TOzeh41HHMmrg3M72V5diSObCf9UvRJOjf3ZC+seuzcwAN9l9Uh8cjjMOdchT7GJRK5R1TJbtsBTT+1YZ/qHDl7p3INf9xrCc11OYkuZbwuwPH5Dz6bKJMnVK2pkL0xhJYpPgX8ANwGvOOecmQ3IT1giuRFaLfPBBzvXmf70U6ishJtuYuCmo5hj+37jNfn8hp5NlUlSq1fUyF64whLFDfi2iD8Bj5jZxPyEJFHQN7f06lfLtNyyiXM/+DtXLHgebp/n15k+7zzfMN23L5SVcfncGt5NwDf0bKpMkli9okb2whXWmH0HcIeZHYZvm5gCtDez64DJzrkP8hSjZEnf3DKrq5bpXLOIS+bNYMCCWey76WvWdzgERo6EwYOhXbtdXlN3z/7rqQU7BrW1bFHcqwjn4ouGGtkLV4ON2c65pcCvgF+ZWXfgd/iZWg/PcWzSRPrmlsGXX9J/9tOc/uQfafPuPDaVlfPSMafR6sfDOHXoRbBb+If/xi3bdzxeV7ulaJNvrr5oqJG9cDXqa5GZ9TCz2/FzL+2GTxaSUPrmlsI5eO01GDLElxSuuYY2Zdvh97+n5acf0+et5zl12MUNJolYV7vLs1y91+F9u1JRXrbLtqQ0sku4sF5PR+LbKC4FPgMm4tfYPiM/oUlT6ZsbfobWhx7yPZcWLIC99oLLLvMT8p1wQtopNVLVr3rJNI6hGJNvrr5oJLWRXRoWVvX0PvAycJ5zbjGAmf00L1FJsyS5e2RObd8OL7zgk8PkybB5M5x0kp9iY9AgnywaIV3Vi5F+Fa9iTL65/KKRxEZ2aVhYorgQX6KYZWbP4pcq1TKkBaDkvrnV1PgurffeCx9+CG3awDXX+J5Lxx6b9enSVb04+EayyEfyjaP3Wsl+0ZCMwno9TQYmm9meQH/gp8BBZvYnfK+nGXmKUZqg6L+5bd0K06b50sPTT/vSxBlnwG23wQUXwB57NPnUmapYHH4kdL4+tOPqvVZyXzSkQZbNOkBmth9+Ko9LnHO5nbugiaqqqlx1dXXcYUiuLFkC48fDfffBqlVw0EFw1VW+sfqIIyK5RDbTZeRSUuKQ0mBmc5xzVen2ZdUZ3Dm31jl3T1KThBSpjRvhscegd2+fDEaN8tN5T54My5f78Q8RJQlITu8c9V6TpGjUpIAisViwYOc602vXwiGHwK23+hJEh9xNOZaUqhf1XpOkUKKQZFm/Hh5/3PdUev11v870gAG+W+tZZzU43iEqSWjjUaOyJIUShcTPOaiu9snh0Ud9sjjqKPjv/4bLL4cDDog7wlgkpWQjokQh8fn8c3j4YZ8g3n7brzN9ySW+YTrDOtOlJgklGxElCskv5+Bvf/PJYdIk2LQJjj8e/vhHv870vt+czjtKxTKrbrG8DykMShSSHx9/DBMm+EFxixb5hDBkiP/Jcp3ppiqWWXVz/T6UhKS+4p4rWeK1bZsfFHfBBdCxI4wYAQcf7EdRr1wJd92VtyQBxTOxXy7fR10SqllXi2NnEpoyt6bZ55bCpRKFRO+f//SD4saPhxUrfGP0T37iey4ddVRsYRXLuIRcvg9NUS/pKFFINDZvhqlT/biHGcHsLmefDXfcAeefD7vvHm98FM+4hFy+j2JJphItVT1J87z/Pgwf7gfADRzoB8n9/Od+cr7p0+GiixKRJCA5I66bK5fvI1OyKbRkKtFSiUKyb7zcsMH3WBo7Fl55BVq02LnOdJ8+ft3pBCqWcQm5fB8a5CfpZDUpYCHQpIDZqd+DBvwHw8gLjv3mB8/cuT45PPwwfPkldOni2x2uuMI3UktRUK+n0hQ2KaBKFCWuwcbLL77wo6XHjoU334SWLX0V09ChcNppGhRXhDTIT+pToihxaRspnaPdO3Pgygf8vEu1tdC9O/zhD3450TZtQs+pb6QixUWJosSl9qDZb8MXXPDOTAbNm8ERa1f4pUMvv9wPimvEOtNQPIPaRGQnJYoSN/zsLjz1/x5kwJxn6LPodXbfvpW5Hf6FN6/9LccNv6bR60zXUT98keKjRFGqVqyA+++n/7330n/ZMr6o2JsHj/sus045j4sGn9PkD3X1wxcpPkoUpWTLlp3rTE+b5teZPussGDmSfQcMYEjLlgxp5iWKZVCbiOykAXelYMkSuOEG6NQJ+veHOXP8vEtLlsDzz8OgQb43UwSKZVCbiOykEkWx2rjRryk9dizMmuVXhvvud/2guHPP9YPkcqBYBrWJyE5KFMXmnXd81dKDD/p1pg89FG67Da68Eirz82GtfvgixUWJohisXw8TJ/rSwxtv+LmVBgzwpYdevfK2zrSIFCclikLlHMye7ZPDY4/5ZNGtm5+t9Qc/gLZt445QRIpELInCzPYDJgKdgWXAxc65z9Mc9yzwbeAV59z38hljYq1dCw895KuX5s+HVq18Y/TQofDtb2tKDRGJXFx1EiOAmc65LsDM4Hk6o4HL8xZVUm3f7hukL7sM2rf3iwDtsQfccw+sWuWXFz35ZCUJEcmJuKqe+gFnBI8nAC8C19U/yDk308zOqL+9ZHz8sV82dNw435W1dWvf7jBkCPToEXd0IlIi4koUBznnVgE451aZ2YHNOZmZDQOGAXTq1CmC8GK0bRs8+6xPDk895Z+ffjrccgtceCFUaOCaiORXzhKFmT0PpFuk4Maor+WcGwOMAb8eRdTnz4tly3auM11TAwceCP/xH770cOSRcUcnIiUsZ4nCOdc70z4z+8TM2gWliXbAp7mKI9E2bfLrTI8d60dIA5xzDtx5p18xrrw83vhERIiv6mkqMBgYFfz7l5jiiMd77/kG6AkTYM0aP7XGL34BV13lH4uIJEhciWIU8LiZDQE+AgYCmFkV8CPn3NDg+cvAUcBeZrYCGOKcmx5TzM2zYQM88YQvPbz6qp9Co18/3zjdu3di15kWEYklUTjnPgPOSrO9Ghia8vw7+YwrJ9580zdM160z3bUr/OY3MHiwb4cQEUk4jczOhXXr4JFHfIKYO9ePeRg40JceTj1V4x0KlJZ4lVKlRBEV53yV0tixvoqpttaPdbjrLvj+9/0YCClYWuJVSpkSRXOtXw933+1LDwsXwt57+2qloUPh+OPjjk4ioiVepZQpUTTTU2+votdNt/B+205Mv2g43X96Nef9ry5xhyUR0xKvUsqUKJphytwarn9mCa2uvofP9vRVSxXPLGFbRSt9yywyWuJVSpkWKmiGuuqIuiQBO6sjpLhoiVcpZSpRNIOqI0qHlniVUqZE0QyqjigtWuJVSpWqnppB1REiUgpUomiGQqyO0KAxEcmWEkUzFVJ1hAaNiUhTqOqphIQNGhMRyUSJooSol5aINIUSRQnJ1BtLvbREJIwSRQlRLy0RaQo1ZpeQQuylJSLxU6IoMYXUS0t2pa7NEhclCpECoK7NEie1UYgUAHVtljgpUYgUAHVtljgpUYgUAHVtljgpUYgUAHVtljipMVukAKhrs8RJiUKkQKhrs8RFVU8iIhJKiUJEREIpUYiISCglChERCaVEISIioZQoREQklBKFiIiEUqIQEZFQShQiIhJKiUJEREIpUYiISCglChERCaVEISIioZQoREQklBKFiIiEiiVRmNl+ZvacmS0K/m2T5pgeZvaamS0ws7fN7JI4YhURKXVxlShGADOdc12AmcHz+jYAVzjnjgbOAX5nZq3zGKOIiBDfCnf9gDOCxxOAF4HrUg9wzn2Q8nilmX0KHACsy0+IIqVlytwaLbUqacWVKA5yzq0CcM6tMrMDww42sxOB3YEl+QhOpNRMmVvD9U/Op3bLNgBq1tVy/ZPzAZQsJHdVT2b2vJm9k+anX5bnaQc8CFzlnNue4ZhhZlZtZtWrV6+OInyRkjJ6+sIdSaJO7ZZtjJ6+MKaIJElyVqJwzvXOtM/MPjGzdkFpoh3waYbj9gGeBm5yzr0ecq0xwBiAqqoq17zIRUrPynW1WW2X0hJXY/ZUYHDweDDwl/oHmNnuwGTgAefcE3mMTaTktG9dkdV2KS1xJYpRwNlmtgg4O3iOmVWZ2bjgmIuB04Arzeyt4KdHPOGKFLfhfbtSUV62y7aK8jKG9+0aU0SSJOZccdXUVFVVuerq6rjDECk46vVU2sxsjnOuKt2+uHo9iUjC9O9ZqcQgaWkKDxERCaVEISIioZQoREQklBKFiIiEUqIQEZFQShQiIhJKiUJEREIpUYiISCglChERCaVEISIioZQoREQklBKFiIiEKrrZY81sNfDPHF6iLbAmh+dvDsXWdEmOT7E1TZJjg+TFd4hz7oB0O4ouUeSamVVnmoo3boqt6ZIcn2JrmiTHBsmPL5WqnkREJJQShYiIhFKiyN6YuAMIodiaLsnxKbamSXJskPz4dlAbhYiIhFKJQkREQilRiIhIKCWKgJntZ2bPmdmi4N82GY571szWmQqyTgsAAAduSURBVNlf620/1MzeCF4/0cx2D7a3DJ4vDvZ3zmFsg4NjFpnZ4GDb3mb2VsrPGjP7XbDvSjNbnbJvaD5jC7a/aGYLU2I4MNge931rZWZPm9n7ZrbAzEalHN/k+2Zm5wTvd7GZjUizP+P7NrPrg+0LzaxvY8+Z69jM7Gwzm2Nm84N/z0x5Tdrfb57j62xmtSkx3J3ymuODuBeb2Z1mZnmO7bJ6f5/bzaxHsC+ye9dszjn9+Haa3wAjgscjgNszHHcWcB7w13rbHwcGBY/vBv538PjHwN3B40HAxFzEBuwHLA3+bRM8bpPmuDnAacHjK4H/yfV9C4sNeBGoSvOaWO8b0AroFRyzO/AycG5z7htQBiwBDgvOOQ/o1pj3DXQLjm8JHBqcp6wx58xDbD2B9sHjY4CalNek/f3mOb7OwDsZzvsP4GTAgGfqfsf5iq3eMccCS6O+d1H8qESxUz9gQvB4AtA/3UHOuZnAV6nbgm8hZwKT0rw+9byTgLOa8K2lMbH1BZ5zzq11zn0OPAecUy/OLsCB+A+9qEQSWwPnzft9c85tcM7NAnDObQbeBDpkef36TgQWO+eWBud8LIgxU8yp77sf8JhzbpNz7kNgcXC+xpwzp7E55+Y651YG2xcAe5hZyybEkJP4Mp3QzNoB+zjnXnP+k/kBMvzd5ym2S4FHm3D9nFOi2Okg59wqgODfbIp5+wPrnHNbg+crgMrgcSWwPDjvVuCL4PioY9txnTQx1LkU/00mtavbhWb2tplNMrOOWcYVVWz3BUXrn6f88STmvplZa3wpcmbK5qbct8b8jjK970yvbcw5cx1bqguBuc65TSnb0v1+8x3foWY218xeMrPvpBy/ooFz5iO2OpfwzUQRxb1rthZxXTgOZvY8cHCaXTc299RptrlG7Nt5gubH1pjrDAIuT3n+FPCoc26Tmf0I/43nzHqvyXVslznnasxsb+DPQXwPNPCafMWGmbXA//He6ZxbGmxu1H3L9loNHJNpe7ove03p896c2PxOs6OB24E+Kfsz/X7zGd8qoJNz7jMzOx6YEsTaqP9jOY7N7zQ7CdjgnHsnZX9U967ZSipROOd6Z9pnZp+YWTvn3KqgSPppFqdeA7Q2sxbBt4UOQF1RfAXQEVgRfOjsC6zNQWwrgDNSnnfA13HWneNbQAvn3JyUa36WcvxY/B/5N+QyNudcTfDvV2b2CL4Y/wAJuW/4QVGLnHO/S7lmo+5bhmullj5S/5/UP6b++w57bUPnzHVsmFkHYDJwhXNuSd0LQn6/eYsvKEFvCuKYY2ZLgCOD41OrE2O5d4FB1CtNRHjvmk1VTztNBep64wwG/tLYFwb/EWcBF6V5fep5LwJeqFf1E1Vs04E+ZtbGfO+ePsG2Ot+o/ww+POucD7yXZVzNis3MWphZ2yCWcuB7QN03qtjvm5ndhv+D/vfUFzTjvs0GupjvIbc7/sNhakjMqe97KjAo6D1zKNAF3xDbmHPmNLagau5p4Hrn3Kt1Bzfw+81nfAeYWVkQx2H4e7c0qI78ysy+HVTrXEEWf/dRxBbEtBswEN+2QbAtynvXfHG3piflB19fOBNYFPy7X7C9ChiXctzLwGqgFv8toW+w/TD8H+5i4AmgZbB9j+D54mD/YTmM7YfBdRYDV9U7x1LgqHrbRuIbH+fhE91R+YwN2BPfC+vtII7fA2VJuG/4b4UOnwTeCn6GNve+Af8KfIDvJXNjsO1W4PyG3je+Om0JsJCU3jnpztnEv4EmxQbcBHydcp/ewrcHZfz95jm+C1N+X28C56Wcswr/AbwE+B+C2SryFVuw7wzg9Xrni/TeNfdHU3iIiEgoVT2JiEgoJQoREQmlRCEiIqGUKEREJJQShYiIhFKiEGkEM7vR/CyybwdTKpxk3hgze9f8DKQn13vNsmD7PDObYWYHB9uznjHXMswcK5IPJTUyW6QpggTwPeA456ftaIufJfRU/OCto4EKYO80L+/lnFtjZr8GbgD+Ldh+mXOuut6xQ4DPnXNHmNkg/IjvS8ysG34Q19FAe+B5MzvSObct2ncqkp5KFCINawesccFEd865Nc7PlroZOAgod3622U9CzvE34IgGrpPtzLEieaFEIdKwGUBHM/vAzP5oZqcH2z8B9gHub8TMnt8D5qc8z2bG3KhmiBVpEiUKkQY459YDxwPD8NO3TDSzKwm+9QMbgDsAgkTy3ZSXzzKzt/AJZWSw7TLn3LHAd4Kfuhl9s505ViQv1EYh0ghBe8CLwItmNh/fntDWObfQzK4B/mxmv8DPHTQ85aW9nHNr6p0r2xlzGzM7qUjOqEQh0gAz62p+dcA6PfCTLJqZ9QqSyDDgJ8CbzrmvQ87VlBlzM80cK5IXKlGINGwv4A/BdNpb8Y3Jw4D7gDvNrBW++ula4D/N7CLn3KQM52qJn2K9HL/W8vP4NS0A7gUeNLPF+JLEIADn3AIzexx4N7j+/1GPJ8knzR4rIiKhVPUkIiKhlChERCSUEoWIiIRSohARkVBKFCIiEkqJQkREQilRiIhIqP8PmoNoPStcNoQAAAAASUVORK5CYII=\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "pd.options.display.float_format = '{:,.2f}'.format\ndf = pd.DataFrame({'Beta': model.coef_})\ndf.index = ['AAPL']\ndf",
"execution_count": 17,
"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>Beta</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>AAPL</td>\n <td>1.28</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " Beta\nAAPL 1.28"
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "percentages = np.array([-.01,.01])\npredictions = model.predict(percentages[1:,np.newaxis])\npd.options.display.float_format = '{:,.2%}'.format\npd.DataFrame({'S&P 500 movement':percentages,'AAPL movement':[-predictions[0],predictions[0]]})",
"execution_count": 42,
"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>S&amp;P 500 movement</th>\n <th>AAPL movement</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>0</td>\n <td>-1.00%</td>\n <td>-1.74%</td>\n </tr>\n <tr>\n <td>1</td>\n <td>1.00%</td>\n <td>1.74%</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " S&P 500 movement AAPL movement\n0 -1.00% -1.74%\n1 1.00% 1.74%"
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Easier way to get beta"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "covariance = np.cov(change.AAPL,change['S&P500'], ddof=1)\ncovariance",
"execution_count": 46,
"outputs": [
{
"data": {
"text/plain": "array([[0.00575908, 0.00152175],\n [0.00152175, 0.00119184]])"
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "#beta = covariance / variance\n'Beta: {:,.2f}'.format(covariance[0,1] / covariance[1,1])",
"execution_count": 48,
"outputs": [
{
"data": {
"text/plain": "'Beta: 1.28'"
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"_draft": {
"nbviewer_url": "https://gist.github.com/8377f9f496a29caba2baff208e2cd032"
},
"gist": {
"id": "8377f9f496a29caba2baff208e2cd032",
"data": {
"description": "Beta and expected return Linear Regression https://nbviewer.jupyter.org/gist/DBremen/8377f9f496a29caba2baff208e2cd032",
"public": true
}
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.7.4",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"base_numbering": 1,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment