ml-finance-python
python scripts for finance machine learning
git clone https://9o.is/git/ml-finance-python.git
feature_engineering.ipynb
(152185B)
1 {
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "# How to transform data into factors"
8 ]
9 },
10 {
11 "cell_type": "markdown",
12 "metadata": {},
13 "source": [
14 "Based on a conceptual understanding of key factor categories, their rationale and popular metrics, a key task is to identify new factors that may better capture the risks embodied by the return drivers laid out previously, or to find new ones. \n",
15 "\n",
16 "In either case, it will be important to compare the performance of innovative factors to that of known factors to identify incremental signal gains."
17 ]
18 },
19 {
20 "cell_type": "markdown",
21 "metadata": {},
22 "source": [
23 "We create the dataset here and store it in our [data](../../data) folder to facilitate reuse in later chapters."
24 ]
25 },
26 {
27 "cell_type": "markdown",
28 "metadata": {},
29 "source": [
30 "## Imports & Settings"
31 ]
32 },
33 {
34 "cell_type": "code",
35 "execution_count": 1,
36 "metadata": {
37 "ExecuteTime": {
38 "end_time": "2018-12-25T20:11:21.811956Z",
39 "start_time": "2018-12-25T20:11:21.625862Z"
40 }
41 },
42 "outputs": [],
43 "source": [
44 "%matplotlib inline\n",
45 "\n",
46 "import warnings\n",
47 "from datetime import datetime\n",
48 "import os\n",
49 "from pathlib import Path\n",
50 "import quandl\n",
51 "import numpy as np\n",
52 "import matplotlib.pyplot as plt\n",
53 "import seaborn as sns\n",
54 "import pandas as pd\n",
55 "import pandas_datareader.data as web\n",
56 "from pandas_datareader.famafrench import get_available_datasets\n",
57 "from pyfinance.ols import PandasRollingOLS\n",
58 "from sklearn.feature_selection import mutual_info_classif"
59 ]
60 },
61 {
62 "cell_type": "code",
63 "execution_count": 2,
64 "metadata": {
65 "ExecuteTime": {
66 "end_time": "2018-12-25T20:11:22.962072Z",
67 "start_time": "2018-12-25T20:11:22.955098Z"
68 }
69 },
70 "outputs": [],
71 "source": [
72 "warnings.filterwarnings('ignore')\n",
73 "plt.style.use('fivethirtyeight')\n",
74 "idx = pd.IndexSlice"
75 ]
76 },
77 {
78 "cell_type": "markdown",
79 "metadata": {},
80 "source": [
81 "## Get Data"
82 ]
83 },
84 {
85 "cell_type": "markdown",
86 "metadata": {},
87 "source": [
88 "The `assets.h5` store can be generated using the the notebook [create_datasets](../../data/create_datasets.ipynb) in the [data](../../data) directory in the root directory of this repo for instruction to download the following dataset."
89 ]
90 },
91 {
92 "cell_type": "markdown",
93 "metadata": {},
94 "source": [
95 "We load the Quandl stock price datasets covering the US equity markets 2000-18 using `pd.IndexSlice` to perform a slice operation on the `pd.MultiIndex`, select the adjusted close price and unpivot the column to convert the DataFrame to wide format with tickers in the columns and timestamps in the rows:"
96 ]
97 },
98 {
99 "cell_type": "markdown",
100 "metadata": {},
101 "source": [
102 "Set data store location:"
103 ]
104 },
105 {
106 "cell_type": "code",
107 "execution_count": 3,
108 "metadata": {},
109 "outputs": [],
110 "source": [
111 "DATA_STORE = '../../data/assets.h5'"
112 ]
113 },
114 {
115 "cell_type": "code",
116 "execution_count": 4,
117 "metadata": {
118 "ExecuteTime": {
119 "end_time": "2018-12-25T20:20:58.388579Z",
120 "start_time": "2018-12-25T20:20:54.763191Z"
121 }
122 },
123 "outputs": [],
124 "source": [
125 "with pd.HDFStore(DATA_STORE) as store:\n",
126 " prices = store['quandl/wiki/prices'].loc[idx['2000':'2018', :], 'adj_close'].unstack('ticker')\n",
127 " stocks = store['us_equities/stocks'].loc[:, ['marketcap', 'ipoyear', 'sector']]"
128 ]
129 },
130 {
131 "cell_type": "markdown",
132 "metadata": {},
133 "source": [
134 "### Keep data with stock info"
135 ]
136 },
137 {
138 "cell_type": "markdown",
139 "metadata": {},
140 "source": [
141 "Remove `stocks` duplicates and align index names for later joining."
142 ]
143 },
144 {
145 "cell_type": "code",
146 "execution_count": 5,
147 "metadata": {
148 "ExecuteTime": {
149 "end_time": "2018-12-25T20:21:04.224845Z",
150 "start_time": "2018-12-25T20:21:04.213399Z"
151 }
152 },
153 "outputs": [],
154 "source": [
155 "stocks = stocks[~stocks.index.duplicated()]\n",
156 "stocks.index.name = 'ticker'"
157 ]
158 },
159 {
160 "cell_type": "markdown",
161 "metadata": {},
162 "source": [
163 "Get tickers with both price information and metdata"
164 ]
165 },
166 {
167 "cell_type": "code",
168 "execution_count": 6,
169 "metadata": {},
170 "outputs": [],
171 "source": [
172 "shared = prices.columns.intersection(stocks.index)"
173 ]
174 },
175 {
176 "cell_type": "code",
177 "execution_count": 7,
178 "metadata": {},
179 "outputs": [
180 {
181 "name": "stdout",
182 "output_type": "stream",
183 "text": [
184 "<class 'pandas.core.frame.DataFrame'>\n",
185 "Index: 2289 entries, A to ZUMZ\n",
186 "Data columns (total 3 columns):\n",
187 "marketcap 2287 non-null object\n",
188 "ipoyear 1002 non-null float64\n",
189 "sector 2248 non-null object\n",
190 "dtypes: float64(1), object(2)\n",
191 "memory usage: 71.5+ KB\n"
192 ]
193 }
194 ],
195 "source": [
196 "stocks = stocks.loc[shared, :]\n",
197 "stocks.info()"
198 ]
199 },
200 {
201 "cell_type": "code",
202 "execution_count": 8,
203 "metadata": {
204 "ExecuteTime": {
205 "end_time": "2018-12-25T20:21:04.314576Z",
206 "start_time": "2018-12-25T20:21:04.227610Z"
207 },
208 "scrolled": true
209 },
210 "outputs": [
211 {
212 "name": "stdout",
213 "output_type": "stream",
214 "text": [
215 "<class 'pandas.core.frame.DataFrame'>\n",
216 "DatetimeIndex: 4706 entries, 2000-01-03 to 2018-03-27\n",
217 "Columns: 2289 entries, A to ZUMZ\n",
218 "dtypes: float64(2289)\n",
219 "memory usage: 82.2 MB\n"
220 ]
221 }
222 ],
223 "source": [
224 "prices = prices.loc[:, shared]\n",
225 "prices.info()"
226 ]
227 },
228 {
229 "cell_type": "code",
230 "execution_count": 9,
231 "metadata": {},
232 "outputs": [],
233 "source": [
234 "assert prices.shape[1] == stocks.shape[0]"
235 ]
236 },
237 {
238 "cell_type": "markdown",
239 "metadata": {},
240 "source": [
241 "## Create monthly return series"
242 ]
243 },
244 {
245 "cell_type": "markdown",
246 "metadata": {},
247 "source": [
248 "To reduce training time and experiment with strategies for longer time horizons, we convert the business-daily data to month-end frequency using the available adjusted close price:"
249 ]
250 },
251 {
252 "cell_type": "code",
253 "execution_count": 10,
254 "metadata": {
255 "ExecuteTime": {
256 "end_time": "2018-12-25T20:21:04.347475Z",
257 "start_time": "2018-12-25T20:21:04.315535Z"
258 }
259 },
260 "outputs": [],
261 "source": [
262 "monthly_prices = prices.resample('M').last()"
263 ]
264 },
265 {
266 "cell_type": "markdown",
267 "metadata": {},
268 "source": [
269 "To capture time series dynamics that reflect, for example, momentum patterns, we compute historical returns using the method `.pct_change(n_periods)`, that is, returns over various monthly periods as identified by lags.\n",
270 "\n",
271 "We then convert the wide result back to long format with the `.stack()` method, use `.pipe()` to apply the `.clip()` method to the resulting `DataFrame`, and winsorize returns at the [1%, 99%] levels; that is, we cap outliers at these percentiles.\n",
272 "\n",
273 "Finally, we normalize returns using the geometric average. After using `.swaplevel()` to change the order of the `MultiIndex` levels, we obtain compounded monthly returns for six periods ranging from 1 to 12 months:"
274 ]
275 },
276 {
277 "cell_type": "code",
278 "execution_count": 11,
279 "metadata": {
280 "ExecuteTime": {
281 "end_time": "2018-12-25T20:21:11.219537Z",
282 "start_time": "2018-12-25T20:21:04.349860Z"
283 }
284 },
285 "outputs": [
286 {
287 "name": "stdout",
288 "output_type": "stream",
289 "text": [
290 "<class 'pandas.core.frame.DataFrame'>\n",
291 "MultiIndex: 381505 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
292 "Data columns (total 6 columns):\n",
293 "return_1m 381505 non-null float64\n",
294 "return_2m 381505 non-null float64\n",
295 "return_3m 381505 non-null float64\n",
296 "return_6m 381505 non-null float64\n",
297 "return_9m 381505 non-null float64\n",
298 "return_12m 381505 non-null float64\n",
299 "dtypes: float64(6)\n",
300 "memory usage: 18.9+ MB\n"
301 ]
302 }
303 ],
304 "source": [
305 "outlier_cutoff = 0.01\n",
306 "data = pd.DataFrame()\n",
307 "lags = [1, 2, 3, 6, 9, 12]\n",
308 "for lag in lags:\n",
309 " data[f'return_{lag}m'] = (monthly_prices\n",
310 " .pct_change(lag)\n",
311 " .stack()\n",
312 " .pipe(lambda x: x.clip(lower=x.quantile(outlier_cutoff),\n",
313 " upper=x.quantile(1-outlier_cutoff)))\n",
314 " .add(1)\n",
315 " .pow(1/lag)\n",
316 " .sub(1)\n",
317 " )\n",
318 "data = data.swaplevel().dropna()\n",
319 "data.info()"
320 ]
321 },
322 {
323 "cell_type": "markdown",
324 "metadata": {},
325 "source": [
326 "## Drop stocks with less than 10 yrs of returns"
327 ]
328 },
329 {
330 "cell_type": "code",
331 "execution_count": 12,
332 "metadata": {
333 "ExecuteTime": {
334 "end_time": "2018-12-25T20:21:14.273535Z",
335 "start_time": "2018-12-25T20:21:11.221231Z"
336 }
337 },
338 "outputs": [
339 {
340 "name": "stdout",
341 "output_type": "stream",
342 "text": [
343 "<class 'pandas.core.frame.DataFrame'>\n",
344 "MultiIndex: 345502 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
345 "Data columns (total 6 columns):\n",
346 "return_1m 345502 non-null float64\n",
347 "return_2m 345502 non-null float64\n",
348 "return_3m 345502 non-null float64\n",
349 "return_6m 345502 non-null float64\n",
350 "return_9m 345502 non-null float64\n",
351 "return_12m 345502 non-null float64\n",
352 "dtypes: float64(6)\n",
353 "memory usage: 17.2+ MB\n"
354 ]
355 }
356 ],
357 "source": [
358 "min_obs = 120\n",
359 "nobs = data.groupby(level='ticker').size()\n",
360 "keep = nobs[nobs>min_obs].index\n",
361 "\n",
362 "data = data.loc[idx[keep,:], :]\n",
363 "data.info()"
364 ]
365 },
366 {
367 "cell_type": "code",
368 "execution_count": 13,
369 "metadata": {
370 "ExecuteTime": {
371 "end_time": "2018-12-25T20:21:14.409888Z",
372 "start_time": "2018-12-25T20:21:14.274835Z"
373 }
374 },
375 "outputs": [
376 {
377 "data": {
378 "text/html": [
379 "<div>\n",
380 "<style scoped>\n",
381 " .dataframe tbody tr th:only-of-type {\n",
382 " vertical-align: middle;\n",
383 " }\n",
384 "\n",
385 " .dataframe tbody tr th {\n",
386 " vertical-align: top;\n",
387 " }\n",
388 "\n",
389 " .dataframe thead th {\n",
390 " text-align: right;\n",
391 " }\n",
392 "</style>\n",
393 "<table border=\"1\" class=\"dataframe\">\n",
394 " <thead>\n",
395 " <tr style=\"text-align: right;\">\n",
396 " <th></th>\n",
397 " <th>return_1m</th>\n",
398 " <th>return_2m</th>\n",
399 " <th>return_3m</th>\n",
400 " <th>return_6m</th>\n",
401 " <th>return_9m</th>\n",
402 " <th>return_12m</th>\n",
403 " </tr>\n",
404 " </thead>\n",
405 " <tbody>\n",
406 " <tr>\n",
407 " <th>count</th>\n",
408 " <td>345502.000000</td>\n",
409 " <td>345502.000000</td>\n",
410 " <td>345502.000000</td>\n",
411 " <td>345502.000000</td>\n",
412 " <td>345502.000000</td>\n",
413 " <td>345502.000000</td>\n",
414 " </tr>\n",
415 " <tr>\n",
416 " <th>mean</th>\n",
417 " <td>0.012353</td>\n",
418 " <td>0.009353</td>\n",
419 " <td>0.008338</td>\n",
420 " <td>0.007200</td>\n",
421 " <td>0.006731</td>\n",
422 " <td>0.006475</td>\n",
423 " </tr>\n",
424 " <tr>\n",
425 " <th>std</th>\n",
426 " <td>0.113467</td>\n",
427 " <td>0.080550</td>\n",
428 " <td>0.066075</td>\n",
429 " <td>0.048059</td>\n",
430 " <td>0.039555</td>\n",
431 " <td>0.034491</td>\n",
432 " </tr>\n",
433 " <tr>\n",
434 " <th>min</th>\n",
435 " <td>-0.327398</td>\n",
436 " <td>-0.253506</td>\n",
437 " <td>-0.212981</td>\n",
438 " <td>-0.160337</td>\n",
439 " <td>-0.130775</td>\n",
440 " <td>-0.112947</td>\n",
441 " </tr>\n",
442 " <tr>\n",
443 " <th>25%</th>\n",
444 " <td>-0.046028</td>\n",
445 " <td>-0.030347</td>\n",
446 " <td>-0.023647</td>\n",
447 " <td>-0.014607</td>\n",
448 " <td>-0.010836</td>\n",
449 " <td>-0.008764</td>\n",
450 " </tr>\n",
451 " <tr>\n",
452 " <th>50%</th>\n",
453 " <td>0.009524</td>\n",
454 " <td>0.009820</td>\n",
455 " <td>0.009832</td>\n",
456 " <td>0.009467</td>\n",
457 " <td>0.009105</td>\n",
458 " <td>0.008852</td>\n",
459 " </tr>\n",
460 " <tr>\n",
461 " <th>75%</th>\n",
462 " <td>0.065875</td>\n",
463 " <td>0.049190</td>\n",
464 " <td>0.042032</td>\n",
465 " <td>0.031989</td>\n",
466 " <td>0.027203</td>\n",
467 " <td>0.024636</td>\n",
468 " </tr>\n",
469 " <tr>\n",
470 " <th>max</th>\n",
471 " <td>0.428725</td>\n",
472 " <td>0.279875</td>\n",
473 " <td>0.220522</td>\n",
474 " <td>0.153314</td>\n",
475 " <td>0.123776</td>\n",
476 " <td>0.105675</td>\n",
477 " </tr>\n",
478 " </tbody>\n",
479 "</table>\n",
480 "</div>"
481 ],
482 "text/plain": [
483 " return_1m return_2m return_3m return_6m \\\n",
484 "count 345502.000000 345502.000000 345502.000000 345502.000000 \n",
485 "mean 0.012353 0.009353 0.008338 0.007200 \n",
486 "std 0.113467 0.080550 0.066075 0.048059 \n",
487 "min -0.327398 -0.253506 -0.212981 -0.160337 \n",
488 "25% -0.046028 -0.030347 -0.023647 -0.014607 \n",
489 "50% 0.009524 0.009820 0.009832 0.009467 \n",
490 "75% 0.065875 0.049190 0.042032 0.031989 \n",
491 "max 0.428725 0.279875 0.220522 0.153314 \n",
492 "\n",
493 " return_9m return_12m \n",
494 "count 345502.000000 345502.000000 \n",
495 "mean 0.006731 0.006475 \n",
496 "std 0.039555 0.034491 \n",
497 "min -0.130775 -0.112947 \n",
498 "25% -0.010836 -0.008764 \n",
499 "50% 0.009105 0.008852 \n",
500 "75% 0.027203 0.024636 \n",
501 "max 0.123776 0.105675 "
502 ]
503 },
504 "execution_count": 13,
505 "metadata": {},
506 "output_type": "execute_result"
507 }
508 ],
509 "source": [
510 "data.describe()"
511 ]
512 },
513 {
514 "cell_type": "code",
515 "execution_count": 14,
516 "metadata": {
517 "ExecuteTime": {
518 "end_time": "2018-12-25T20:21:16.941421Z",
519 "start_time": "2018-12-25T20:21:14.411226Z"
520 }
521 },
522 "outputs": [
523 {
524 "data": {
525 "image/png": "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DgoKCpLZbFZsbKzCwsLk7u4uDw8Pde7cWQsWLFCvXr1UrVo1vf322+W2lvS7776r7t27y8HBQStWrNB//vMfffTRRxZTQWyBYA278/6q/Xp/1X6rj/V8YUWxtgsXc+V3f+l/QfF6am5VcdsPyb3l47buht17f+XPen/lz1Yf6/nsZ8XaZn+5S7O/3GWlutBtD9+678dluxO1bLf1U+q/h+WS7luzOyFDD32805C+3WyWbD2lJVutj8xfKwjPWXus2F9VPJ1mVvMXvzesfzezBT+d0IKfTlh97IGrptXM/eGo5v5wc67oYzKZtGTJEk2ZMkVjxoxRSkqK/P39FR4ergceeECSFB4ermHDhumRRx5Ramqqnn32WU2aNEljx45VfHy8HnzwQXl6emrcuHE6c6Z8zgqvWbNGb731lnJyctS0aVMtWrRId911V7k8d2lMaWlpN7zoTnR09C01H7g8jtdeX9PAhz61dRcqhvg9tu5BxRHYwNY9qDDa3tXO1l2oMNLT7XMu7c0ow07nJd+sdr3UydZduKWwjjUAAABgAII1AAAA7MbYsWNVs2ZNq7exY8faunulYo41AAAA7MZzzz1X4h9sudYSgLZGsAYAAIDd8PPzk5+fn6278acwFQQAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwAMEaAAAAMADBGgAAADAAwRoAAAAwgJOtO3AzcHNzU3R0dJk+R3x8fJnu/8+q5ONt6y5UCBdyGti6CxVH4hFb96DCcHZub+suVBhubvw6NUpenoutuwD8afwkuA5jx44t8+co6+AOAACAssVUEAAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARr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7nD313QLdErO1qmabsJjhetYExEREREJgMGaiIiIiLRGWFgYXFxc1P6EhYVpunkt4pgqEREREWmNt99+u9kvbHnQEoCaxmBNRERERFrD3t4e9vb2mm7G38KpIEREREREAmCwJiIiIiISAIM1EREREZEAGKyJiIiIiATAYE1EREREJAAGayIiIiIiATBYExEREREJgMGaiIiIiEgADNZERERERAJgsCYiIiIiEgCDNRERERGRABisiYiIiIgEwGBNRERERCQABmsiIiIiIgEwWBMRERERCYDBmoiIiIhIAAzWREREREQCYLAmIiIiIhIAgzURERERkQAYrImIiIiIBMBgTUREREQkAAZrIiIiIiIBMFgTEREREQmAwZqIiIiISAAM1kREREREAmCwJiIiIiISAIM1EREREZEAGKyJiIiIiASgr+kGtAUjIyOEh4druhlIS0vTdBP+sdKiUk03QSeIxCJNN0Fn1NZKNN0EnWFuba7pJuiMcnd/TTdBd6TFa7oFOmaqphvwWNHJYB0WFqbpJgCAVoR7IiIiIno4OBWEiIiIiEgADNZERERERAJgsCYiIiIiEgCDNRERERGRABisiYiIiIgEwGBNRERERCQABmsiIiIiIgEwWBMRERERCYDBmoiIiIhIAAzWREREREQCYLAmIiIiIhIAgzURERERkQAYrImIiIiIBMBgTUREREQkAAZrIiIiIiIBMFgTEREREQmAwZqIiIiISAAM1kREREREAmCwJiIiIiISAIM1EREREZEAGKyJiIiIiATAYE1EREREJAAGayIiIiIiATBYExEREREJgMGaiIiIiEgADNZERERERAJgsCYiIiIiEgCDNRERERGRABisiYiIiIgEwGBNRERERCQABmsiIiIiIgHoa7oBRI0FD/fBa2M6w9HSGDczZXgn4jLOJ+Q1W99AT4zFE/0weYAnnKyMkVeiwMaDN/Ht0QQAwLSB7bFhbmCT7drN3oXK6ro2Ow5tNGOAB+YO9YKDhSEScsrwwc/XEJ1cpLZugLcNdr7Wr0n58PBIJEvlbd1UrTOlrytmDfKEvZkESVI5Pjl4C5dTix+4XU8PK3wf3Bsp+eV4ev05ZfmTfg6YPbg93GyMoa8nRlpBObaeTcX+mOy2PAytMGOgB+YN8777PCzF6r3XEZ1cqLZuoI8tdi5U8zz88ARu330eTu3n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PGjZiunMmTPk5ubSvn37Ou37Wmwxy4tMJpNl5uajjz7Cx8eHHj161EvfYNvZXc/XX3/NqFGjmDFjBhMnTqz3/ptytvXNVrPcv38/w4YNY/jw4ZYbABuarWZ5pYvFcXFxcb33LcbSGmsxRP/+/QkLC2P06NFs2LCBI0eOsH37dubPn88333wDVK6LKyoqYuPGjfz222+Wdczh4eF8+OGHbN68mX379vH000/Xy/7H/v7+DB48mOeee45t27axf/9+Jk2ahJubG4MGDarz/q/GFrMEWLJkCXv27GHfvn288sorLF68mJdfftlqKUhds9XsDh06xO7du8nOzqakpITdu3eze/duyy/ZzZs3M3LkSMaOHcvDDz9Mbm4uubm5HD9+vF7GB00324Zgi1nu27ePoUOH0rdvX6ZOnWo5By+/h6Ih2GKWKSkpJCYmsnfvXrKysli/fj1TpkwhJCQEPz+/Ou9f6pYKazGEyWTigw8+4O677yY6OpqQkBDGjh3LwYMHLTOYoaGhREZGEhUVRadOnfj73/8OQExMDOHh4YwZM4YRI0YQFhZWbzMGb775JnfccQePPPIIgwYNoqioiM8++wwnJ6d66b86tprlhg0biIiIYMCAAXz++eckJiYyZMiQeun7IlvNbvLkyYSHhxMfH09OTg7h4eGEh4eTnZ0NQGJiIufOnWPp0qUEBgZavgYMGFAv44Omm21DsMUsV69eTX5+vmVrzcu/GpItZtmyZUvefvtt7rvvPkJDQ5k5cyb33XcfH374YZ33LXXPVFBQYOwiQBERERGRm5BmrEVEREREDKDCWpqsmJgYvL29q/2KiYlp6OHZFGV545Rd3VG2xlGWxlGWNzctBZEmKz8/3/LvtK/UunVr3N3d63lEtktZ3jhlV3eUrXGUpXGU5c1NhbWIiIiIiAG0FERERERExAAqrEVEREREDKDCWkRERETEACqsRUREREQMoMJaRERERMQA/w91J5qMoPc7hAAAAABJRU5ErkJggg==\n",
526 "text/plain": [
527 "<Figure size 720x720 with 4 Axes>"
528 ]
529 },
530 "metadata": {},
531 "output_type": "display_data"
532 }
533 ],
534 "source": [
535 "# cmap = sns.diverging_palette(10, 220, as_cmap=True)\n",
536 "sns.clustermap(data.corr('spearman'), annot=True, center=0, cmap='Blues');"
537 ]
538 },
539 {
540 "cell_type": "markdown",
541 "metadata": {},
542 "source": [
543 "We are left with 1,775 tickers."
544 ]
545 },
546 {
547 "cell_type": "code",
548 "execution_count": 15,
549 "metadata": {
550 "ExecuteTime": {
551 "end_time": "2018-12-25T20:21:16.963520Z",
552 "start_time": "2018-12-25T20:21:16.942416Z"
553 }
554 },
555 "outputs": [
556 {
557 "data": {
558 "text/plain": [
559 "1756"
560 ]
561 },
562 "execution_count": 15,
563 "metadata": {},
564 "output_type": "execute_result"
565 }
566 ],
567 "source": [
568 "data.index.get_level_values('ticker').nunique()"
569 ]
570 },
571 {
572 "cell_type": "markdown",
573 "metadata": {},
574 "source": [
575 "## Rolling Factor Betas"
576 ]
577 },
578 {
579 "cell_type": "markdown",
580 "metadata": {},
581 "source": [
582 "We will introduce the Fama—French data to estimate the exposure of assets to common risk factors using linear regression in [Chapter 8, Time Series Models]([](../../08_time_series_models))."
583 ]
584 },
585 {
586 "cell_type": "markdown",
587 "metadata": {},
588 "source": [
589 "The five Fama—French factors, namely market risk, size, value, operating profitability, and investment have been shown empirically to explain asset returns and are commonly used to assess the risk/return profile of portfolios. Hence, it is natural to include past factor exposures as financial features in models that aim to predict future returns."
590 ]
591 },
592 {
593 "cell_type": "markdown",
594 "metadata": {},
595 "source": [
596 "We can access the historical factor returns using the `pandas-datareader` and estimate historical exposures using the `PandasRollingOLS` rolling linear regression functionality in the `pyfinance` library as follows:"
597 ]
598 },
599 {
600 "cell_type": "markdown",
601 "metadata": {},
602 "source": [
603 "Use Fama-French research factors to estimate the factor exposures of the stock in the dataset to the 5 factors market risk, size, value, operating profitability and investment."
604 ]
605 },
606 {
607 "cell_type": "code",
608 "execution_count": 16,
609 "metadata": {
610 "ExecuteTime": {
611 "end_time": "2018-12-25T20:21:17.055928Z",
612 "start_time": "2018-12-25T20:21:16.964925Z"
613 },
614 "scrolled": false
615 },
616 "outputs": [
617 {
618 "name": "stdout",
619 "output_type": "stream",
620 "text": [
621 "<class 'pandas.core.frame.DataFrame'>\n",
622 "DatetimeIndex: 230 entries, 2000-01-31 to 2019-02-28\n",
623 "Freq: M\n",
624 "Data columns (total 5 columns):\n",
625 "Mkt-RF 230 non-null float64\n",
626 "SMB 230 non-null float64\n",
627 "HML 230 non-null float64\n",
628 "RMW 230 non-null float64\n",
629 "CMA 230 non-null float64\n",
630 "dtypes: float64(5)\n",
631 "memory usage: 10.8 KB\n"
632 ]
633 }
634 ],
635 "source": [
636 "factors = ['Mkt-RF', 'SMB', 'HML', 'RMW', 'CMA']\n",
637 "factor_data = web.DataReader('F-F_Research_Data_5_Factors_2x3', 'famafrench', start='2000')[0].drop('RF', axis=1)\n",
638 "factor_data.index = factor_data.index.to_timestamp()\n",
639 "factor_data = factor_data.resample('M').last().div(100)\n",
640 "factor_data.index.name = 'date'\n",
641 "factor_data.info()"
642 ]
643 },
644 {
645 "cell_type": "code",
646 "execution_count": 17,
647 "metadata": {
648 "ExecuteTime": {
649 "end_time": "2018-12-25T20:21:17.331194Z",
650 "start_time": "2018-12-25T20:21:17.056929Z"
651 },
652 "scrolled": true
653 },
654 "outputs": [
655 {
656 "name": "stdout",
657 "output_type": "stream",
658 "text": [
659 "<class 'pandas.core.frame.DataFrame'>\n",
660 "MultiIndex: 345502 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
661 "Data columns (total 6 columns):\n",
662 "Mkt-RF 345502 non-null float64\n",
663 "SMB 345502 non-null float64\n",
664 "HML 345502 non-null float64\n",
665 "RMW 345502 non-null float64\n",
666 "CMA 345502 non-null float64\n",
667 "return_1m 345502 non-null float64\n",
668 "dtypes: float64(6)\n",
669 "memory usage: 17.2+ MB\n"
670 ]
671 }
672 ],
673 "source": [
674 "factor_data = factor_data.join(data['return_1m']).sort_index()\n",
675 "factor_data.info()"
676 ]
677 },
678 {
679 "cell_type": "code",
680 "execution_count": 18,
681 "metadata": {
682 "ExecuteTime": {
683 "end_time": "2018-12-25T20:21:19.844785Z",
684 "start_time": "2018-12-25T20:21:17.332666Z"
685 }
686 },
687 "outputs": [],
688 "source": [
689 "T = 24\n",
690 "betas = (factor_data\n",
691 " .groupby(level='ticker', group_keys=False)\n",
692 " .apply(lambda x: PandasRollingOLS(window=min(T, x.shape[0]-1), y=x.return_1m, x=x.drop('return_1m', axis=1)).beta))"
693 ]
694 },
695 {
696 "cell_type": "code",
697 "execution_count": 19,
698 "metadata": {
699 "ExecuteTime": {
700 "end_time": "2018-12-25T20:21:20.017589Z",
701 "start_time": "2018-12-25T20:21:19.845761Z"
702 }
703 },
704 "outputs": [
705 {
706 "data": {
707 "text/html": [
708 "<div>\n",
709 "<style scoped>\n",
710 " .dataframe tbody tr th:only-of-type {\n",
711 " vertical-align: middle;\n",
712 " }\n",
713 "\n",
714 " .dataframe tbody tr th {\n",
715 " vertical-align: top;\n",
716 " }\n",
717 "\n",
718 " .dataframe thead th {\n",
719 " text-align: right;\n",
720 " }\n",
721 "</style>\n",
722 "<table border=\"1\" class=\"dataframe\">\n",
723 " <thead>\n",
724 " <tr style=\"text-align: right;\">\n",
725 " <th></th>\n",
726 " <th>Mkt-RF</th>\n",
727 " <th>SMB</th>\n",
728 " <th>HML</th>\n",
729 " <th>RMW</th>\n",
730 " <th>CMA</th>\n",
731 " <th>total</th>\n",
732 " </tr>\n",
733 " </thead>\n",
734 " <tbody>\n",
735 " <tr>\n",
736 " <th>count</th>\n",
737 " <td>305114.000000</td>\n",
738 " <td>305114.000000</td>\n",
739 " <td>305114.000000</td>\n",
740 " <td>305114.000000</td>\n",
741 " <td>305114.000000</td>\n",
742 " <td>305114.000000</td>\n",
743 " </tr>\n",
744 " <tr>\n",
745 " <th>mean</th>\n",
746 " <td>0.979211</td>\n",
747 " <td>0.624869</td>\n",
748 " <td>0.128957</td>\n",
749 " <td>-0.061538</td>\n",
750 " <td>0.017315</td>\n",
751 " <td>1.688816</td>\n",
752 " </tr>\n",
753 " <tr>\n",
754 " <th>std</th>\n",
755 " <td>0.911302</td>\n",
756 " <td>1.250830</td>\n",
757 " <td>1.569375</td>\n",
758 " <td>1.995244</td>\n",
759 " <td>2.182142</td>\n",
760 " <td>3.591829</td>\n",
761 " </tr>\n",
762 " <tr>\n",
763 " <th>min</th>\n",
764 " <td>-9.250214</td>\n",
765 " <td>-10.248056</td>\n",
766 " <td>-15.383714</td>\n",
767 " <td>-26.090632</td>\n",
768 " <td>-18.445731</td>\n",
769 " <td>-37.529387</td>\n",
770 " </tr>\n",
771 " <tr>\n",
772 " <th>25%</th>\n",
773 " <td>0.461364</td>\n",
774 " <td>-0.117809</td>\n",
775 " <td>-0.691242</td>\n",
776 " <td>-0.998343</td>\n",
777 " <td>-1.086057</td>\n",
778 " <td>-0.141855</td>\n",
779 " </tr>\n",
780 " <tr>\n",
781 " <th>50%</th>\n",
782 " <td>0.929989</td>\n",
783 " <td>0.542886</td>\n",
784 " <td>0.103899</td>\n",
785 " <td>0.047608</td>\n",
786 " <td>0.043913</td>\n",
787 " <td>1.637183</td>\n",
788 " </tr>\n",
789 " <tr>\n",
790 " <th>75%</th>\n",
791 " <td>1.446082</td>\n",
792 " <td>1.301350</td>\n",
793 " <td>0.930312</td>\n",
794 " <td>0.986083</td>\n",
795 " <td>1.144610</td>\n",
796 " <td>3.517309</td>\n",
797 " </tr>\n",
798 " <tr>\n",
799 " <th>max</th>\n",
800 " <td>10.428027</td>\n",
801 " <td>10.351943</td>\n",
802 " <td>13.129851</td>\n",
803 " <td>18.378405</td>\n",
804 " <td>16.423135</td>\n",
805 " <td>35.902406</td>\n",
806 " </tr>\n",
807 " </tbody>\n",
808 "</table>\n",
809 "</div>"
810 ],
811 "text/plain": [
812 " Mkt-RF SMB HML RMW \\\n",
813 "count 305114.000000 305114.000000 305114.000000 305114.000000 \n",
814 "mean 0.979211 0.624869 0.128957 -0.061538 \n",
815 "std 0.911302 1.250830 1.569375 1.995244 \n",
816 "min -9.250214 -10.248056 -15.383714 -26.090632 \n",
817 "25% 0.461364 -0.117809 -0.691242 -0.998343 \n",
818 "50% 0.929989 0.542886 0.103899 0.047608 \n",
819 "75% 1.446082 1.301350 0.930312 0.986083 \n",
820 "max 10.428027 10.351943 13.129851 18.378405 \n",
821 "\n",
822 " CMA total \n",
823 "count 305114.000000 305114.000000 \n",
824 "mean 0.017315 1.688816 \n",
825 "std 2.182142 3.591829 \n",
826 "min -18.445731 -37.529387 \n",
827 "25% -1.086057 -0.141855 \n",
828 "50% 0.043913 1.637183 \n",
829 "75% 1.144610 3.517309 \n",
830 "max 16.423135 35.902406 "
831 ]
832 },
833 "execution_count": 19,
834 "metadata": {},
835 "output_type": "execute_result"
836 }
837 ],
838 "source": [
839 "betas.describe().join(betas.sum(1).describe().to_frame('total'))"
840 ]
841 },
842 {
843 "cell_type": "code",
844 "execution_count": 20,
845 "metadata": {
846 "ExecuteTime": {
847 "end_time": "2018-12-25T20:21:20.301123Z",
848 "start_time": "2018-12-25T20:21:20.018625Z"
849 }
850 },
851 "outputs": [
852 {
853 "data": {
854 "image/png": "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iIiISEN06tQJc+bMQX5+vtJreXl5mDNnDjp16qR2e3z8DxEREZGGGDduHLZv344mTZogJCQELi4uAIDLly/j559/hkwmw9ixY9Vuj0GSiIiISENYWVlh7969GDt2LGbOnAmZTAagZG5k+/btER4ejurVq6vdHoMkERERkQapXbs2YmNjIZVKce3aNchkMjg5OUEsFr9xWwySRERERBpILBajcePGb9UGb7YhIiIiIkEYJImIiIhIEAZJIiIiIhKEQZKIiIiIBGGQJCIiIiJBGCSJiIiISBAGSSIiIiIShEGSiIiIiARhkCQiIiIiQRgkiYiIiEgQBkkiIiIiEoRBkoiIiIgEYZAkIiIiIkEYJImIiIhIEAZJIiIiIhKEQZKIiIiIBGGQJCIiIiJBdMq7A1Sx6dy4Wd5doOf027cp7y7Qczsk5uXdBXpJ94i15d0Fesn84IDy7gK9xM2y2jttnyOSRERERCQIgyQRERERCcIgSURERESCMEgSERERkSAMkkREREQkCIMkEREREQnCIElEREREgjBIEhEREZEgDJJEREREJAiDJBEREREJwiBJRERERIIwSBIRERGRIAySRERERCQIgyQRERERCcIgSURERESCMEgSERERkSAMkkREREQkCIMkEREREQnCIElEREREgjBIEhEREZEgDJJEREREJAiDJBEREREJwiBJRERERILoCFnJwMAAc+fOfeP1bt68KeTtiIiIiKgCEhQkx4wZI+jNhIRPIiIiIqqYeGmbiIiIiARhkCQiIiIiQRgkiYiIiEgQBkkiIiIiEoRBkoiIiIgEYZAkIiIiIkEYJImIiIhIEAZJIiIiIhKEQZKIiIiIBGGQJCIiIiJBGCSJiIiISBAGSSIiIiIShEGSiIiIiARhkCQiIiIiQRgkiYiIiEgQBkkiIiIiEkSnvDtA9KZkMhlWbNqILQf248Hjx6jv7IKJQ4fCuVbtUte5+vdNrNi4ARevXcft+/cwrE9fhPbrr1Dnw9BhuPPPP0rrejdujGWTppT5dlQVMpkMP0ZHIS5+Fx48egRPNzdMHhEGZweHUte5euMGlketw4WrV3D77l2EBgVjePAghTopZ89gbVwsLly5gvtZWfhu7Dj06NT5HW9N5RIbG4uoqChkZmbC0dERY8eORaNGjUqtf+rUKURGRuLatWuwsrJCcHAwevfuLX99zZo1SEhIQEZGBnR1deHp6YkRI0bA2dlZZXuzZ8/G1q1bMXr0aAQHB5f59mkCL3sb9GvVCHVrWsGqmgnmbTuAPanp5d2tKufAzt8QvzkWudlZsLV3wMCQ4XCt76my7sljiUiI34mMv67i6dMnsKllD//+H6Nxi1byOon79+LnyO+V1l21LR56enrvbDsqIo5IUqXzy7atiNqxHRM++xwx8+bDwswMoTNn4HF+fqnrFBQWwsaqOkYMGADb6tYq68TMW4ADP6+W/2xYEA6RSIROrVq/q02pEv5v00as3RyHicNHYv3SZbAwEyNk4gQ8zssrdZ2CwkLYWFsjbPAnsK1RQ2WdvPx8ONs7YELocBjo67+r7lda+/btQ3h4OD755BPExMTAy8sLo0aNwt27d1XWv337NkaPHg0vLy/ExMRgyJAh+P7773Hw4EF5nVOnTqF3795YvXo1VqxYAW1tbYwYMQK5ublK7R04cADnz5+HlZXVO9tGTWCop4vr97OwbE8iCp4+Le/uVEm/H0lAzMrl6N5vAGYuXQHneu4InzYRmffvqax/6ewZ1GvQEF/NmI3vlq5Agw+aYfGsb3Hp3FmFenr6BlgSvUnhR9NCJMAgSZWMTCZDzK6d+CSwJzq0aAnn2vb4bmQYHufnY3fi0VLXq+/sgq8GD8FHPr4w0Fd9oFuYmcHS3Fz+k3j6TxgbGqJjy1Yq61PJ/ojethWf9e2Hjj4+cHGog9lfj8fj/HzsSjhU6nr1XV0xLmQYurZrB0N9A5V1fJs1x+hPP0MnH1+IRKJ3tQmVVkxMDLp3747AwEDUqVMH48ePh6WlJeLi4lTW37x5M6ysrDB+/HjUqVMHgYGB6NatG6Kjo+V1li1bBn9/fzg7O8PZ2RkzZ85ETk4O0tLSFNq6c+cOIiIiMHv2bOjo8MLW20i+koFVB3/HkQt/QSaTlXd3qqQ9WzfDu0Mn+HXpCtva9hgUGgaxhQSHdu1QWT/oixHo3ncAnFzdYG1ji8CBg1DH2QWnThxTqCcSAWILC4UfTcQgSZXK7fv3kCmVomWDBvIyA319NHZ3R+qlS2X2PjKZDNsOHkRX3zYw5GhYqW7dvYvM7Gy0atJUXmagr48mnp5Iu3ChHHtWtT19+hTp6elo0aKFQnmLFi1w5swZleucPXtWqX7Lli1x4cIFFBUVqVwnLy8Pz549Q7Vq1eRlRUVFmDx5Mj777DPUqVPnLbeE6N0qevoUN65ehmfjpgrl9Rs1wZWL6p+j8vPzYWxiolD25MkTjBn8MUYH90fE9Mm48deVMunz+1JYWCj/9//+9z/MmTMHU6dOxfHjx9+oHQZJqlQyc6QAAImZWKFcYiZGllRaZu9zIi0Nt+/fQ2D7DmXWZlWUlZ0NAJCYmyuUS8TmyMzJLo8uaQSpVIri4mJYvDICYmFhgczMTJXrZGVlqaxfXFwMaSnHTnh4OOrWrQtPz3/nkq1cuRJmZmYKcyuJKqqHD3JLvgyJFc9RZubmyFXzHHVgx2/IyfwHrdt1lJfVsKuFz78chy+nzcTwCZOhp6eHWeO+xN3bt8q0/+/ClStX0KJFC9SsWRM+Pj5IT09H+/btsXz5cqxduxbdu3fHzp071W6v0l+TiIyMREFBQXl3o8qZOHFieXcBALDr6BHM+mmlfHnpxMkAoHSpUwYZyvLq55YD++Hh7Aw3jrgo2HnoIGYuXiRf/uG7WQCAVz96mUwGkVIplTWl40Am+89pAKrql2bhwoVITU3FqlWroK2tDaBkDuXOnTvx66+/vkWvid6/Nz1WXjiZdBQb/u8nDJ8wGZbW/86vd6nnDpd67grLU0YOw/4d2xD8xciy6/g7MGXKFFhbW2PGjBnYvHkz+vTpg3bt2mHp0qUAgPHjx2PRokXo1q2bWu1V+iBZUFBQYUIPlb22HzSDp0td+fKTopLJ6JnSHNSwtJSXZ+fmwuKVUUqhsnOlOJxyEhM/G1om7VUlfi1awsvVTb785PnNAZk5OahRvbq8PDtXqjRKSWVHLBZDW1sbWVlZCuU5OTmQSCQq15FIJCrra2trQyxWPHYiIiKwb98+rFy5EnZ2dvLylJQUZGZmokuXLvKy4uJiLF26FOvXr0d8fPzbbhpRmTKtZgYtLS2l0ccHUqnSKOWrTiYdxcqI+QgZO0Hhjm1VtLS1UcfFFfdu337rPr9rKSkp2Lp1K7y8vNCqVSvUrl0bn3/+ObS0Si5Sh4SEoEMH9a/GVfogSVWbsaEhjA0N5csymQyWYjF+T0tDfWcXAEDhkyc4ffEixrzy+BihfktIgJ6ODrp4e5dJe1WJsZERjI2M5MsymQyWFhY48ecp1Hd1BVCyP/48dw5ffc4g/q7o6urCzc0NycnJCif85ORktGvXTuU6np6eOHz4sEJZcnIy3N3dFW6YCQ8Pl4dIh1ce4dSnTx+0b99eoSwsLAydO3dGjx493m6jiN4BHV1dODjXxbnTp9DMp428/NzpU/igtU+p6yUfPYyfFi5AyFfj0czb97XvI5PJ8PeNa6hVx7FM+v0uZWdno2bNmgAAU1NTGBsbw/ylL/5isRiPHj1Suz0GSapURCIRBnbthlVbNqOOrR3sbWri57g4GBkY4EOffw/2kG+no76LC0YNDAJQcnPCX7dK5q48efoUWVIp0q9fh5GBAWo/P6CAkpPB1oMH0Lm1t0KAJdVEIhGCegTi5w3rUadWLdjb2eGnX3+FkYEBuvr9G2g+n/A16ru64ctPPwPwfH/czABQEjwzs7OR/tdVGBkYoratLYCSx//c/F/Jt3uZTIY79+8j/a+rMDOthpovjX5qqoEDB2LatGnw8PBAgwYNsHnzZvzzzz/o1asXAGDatGkAgJkzZwIAevXqhU2bNiEiIgI9e/ZEWloaduzYgdmzZ8vbnD9/PuLj4xEeHg5TU1P5fEsjIyMYGRnBwsJCaZ6ljo4OJBKJUugk9Rjq6cLWwgxAyfFU3cwUzjUs8SC/APdz1f9lTqXrEtgLKyPmw7GuG1zcPZAQvxPS7Cy0+6g7AGBl+DwAwLBx3wAoeVzQyvB56P/ZMLjW94L0+VxwHV0dmJiW3Hi2NWYdnNzqoYaNLfLz8rBv+1b8ff0aBo8YXQ5b+ObK8kkYDJJU6QzpEYiCJ08wd9VPePD4MTxdXPDj1GkKwe/ve3dh/dKl7/s5Oej/9dh/X797F3H796GJuwdWz/xOXp5y/hxu3rmD2aO+fD8bUwV82rcfCp88wewfluHBw4fwdHPDyrnzFEYu/75zB9YvPW/wflYW+gwPfen1/yE2fheaenlhzfcRAIDzly/j0/Hj5HWWR63D8qh18O/YEbPHjX8PW1axderUCbm5uVi9ejUyMzPh5OSExYsXy0caXn2epK2tLRYvXoyFCxciLi4OVlZWGDdunMIIY2xsLAAgNDRUYd2hQ4di2LBh73iLNJOrTXUsGhIoX/7Urzk+9WuOPakXMW/bwf9Yk9TVoo0fHj18gO0bYiDNzoadgwPGzpgjn/OY9c99hfqH4neguLgYMT8tR8xPy+Xlbp5emDR/IQAg7/EjrFkSidycHBgaG8PeyQmTFkTC6aWpPxVZSEiI/JmXBQUFGD16NAyf/w598uTJG7Ulkkql7+3BVXPnzi3z+Yzvok36l97Nin8HmqbQNjUt7y7Qc4USzv+sSLpHrC3vLtBL5gcHlHcX6CVultUUlocPH67WesuXL399JXBEkoiIiEhjqBsQ1cXnSBIRERGRIByRJCIiItIQ48erN8d8wYIFatVjkCQiIiLSED///DPs7Ozg4OBQ6h8leJO7uhkkiYiIiDREQEAA9uzZA3t7ewQHByMgIAAGBgaC2+McSSIiIiIN8csvv+DixYvo1q0bli5dCldXV3z11Vc4ffq0oPYYJImIiIg0iLm5Ob744gskJSVh27ZtEIlECAwMROvWrZGXl/dGbTFIEhEREWkoFxcXeHp6wt7eHhkZGSguLn6j9RkkiYiIiDRMUlIShg0bBldXV2zYsAGfffYZ0tPTYfqGf/yCN9sQERERaYiIiAjExMTg8ePH6N+/PxISElC3bl3B7TFIEhEREWmIWbNmwc7ODl27dkV+fj5WrVqlsh6fI0lEREREClq1agWRSITLly+XWofPkSQiIiIiJbt27VJZXlRUhIKCApiYmLxRe7zZhoiIiEhDHDlyBFu3blUoi4yMhK2tLezt7dGrVy9IpVK122OQJCIiItIQCxcuxO3bt+XLp06dwsyZM9GvXz/MmDED586dQ0REhNrtMUgSERERaYiLFy/C29tbvrxt2zY0b94cS5YswciRIzF//nzs3r1b7fYYJImIiIg0RG5uLiwtLeXLycnJaN++vXy5UaNGuHPnjtrtMUgSERERaQhra2tcv34dAFBYWIgzZ86gWbNm8tcfPXoEPT09tdtjkCQiIiLSEB07dsT06dNx5MgRTJ8+HUZGRmjZsqX89fPnz8PR0VHt9hgkiYiIiDTEpEmToK+vjx49eiAmJgaLFy9WGIGMjo6Gn5+f2u3xOZJEREREGkIikWD37t3Izc2FiYkJtLW1FV5fu3YtjI2N1W6PQZKIiIhIw5iZmaksNzc3f6N2eGmbiIiIiARhkCQiIiIiQRgkiYiIiEgQBkkiIiIiEoRBkoiIiIgEYZAkIiIiIkEYJImIiIhIEAZJIiIiIhKEQZKIiIiIBGGQJCIiIiJBGCSJiIiISBAGSSIiIiIShEGSiIiIiARhkCQiIiIiQRgkiYiIiEgQBkkiIiIiEoRBkoiIiIgEYZAkIiIiIkF0yrsDVLGdNxGXdxfoOVdJtfLuAj336JmovLtAL5kfHFDeXaCXTIj6rby7QC/5bUzwO23/vQZJAwMDzJ07t0zbvHnzZpm2R0RERETqea9BcsyYMWXeZlkHUyIiIiJSD+dIEhEREZEgDJJEREREJAiDJBEREREJwiBJRERERIIwSBIRERGRIAySRERERCQIgyQRERERCcIgSURERESCMEgSERERkSAMkkREREQkCIMkEREREQnCIElEREREgjBIEhEREZEgDJJEREREJAiDJBEREREJwiBJRERERIIwSBIRERGRIAySRERERCQIgyQRERERCcIgSURERESCMEgSERERkSAMkkREREQkCIMkEREREQnCIElEREREgjBIEhEREZEgDJJEREREJAiDJBEREREJwiBJRERERIIwSBIRERGRIAySRERERCQIgyQRERERCcIgSURERESCMEgSERERkSAMkkREREQkCIMkEREREQnCIElEREREgjBIEhEREZEgDJJEREREJAiDJBEREREJolPeHSB6U/t3/IZdcRshzc6Crb0Dgr8YAbf6Xirrnkw6igPxO5Dx11U8ffIEtrXtEdB/IJq0bC2vk3z0MHbEbsC9/91GcVExrG1t8WFgb/h27Py+NqnSiI2NRVRUFDIzM+Ho6IixY8eiUaNGpdY/deoUIiMjce3aNVhZWSE4OBi9e/eWv75mzRokJCQgIyMDurq68PT0xIgRI+Ds7AwAKCoqwvLly3H8+HHcunULxsbGaNq0KcLCwlCjRo13vr0V3ba4TdgQFYWsrEzUcXTEyDHj4PUf+yP1z1NYvmghrl+7BktLK/QPHoSAXv/uj+LiYvzy80rs370bWVmZkEgs0aHLhxgyNAQ6OiW/Lto2a6Ky7R69++DL8d+U7QZWcgd2/ob4zbHIfX6uGhgyHK71PVXWPXksEQnxO0vOVU+fwKaWPfz7f4zGLVrJ6yTu34ufI79XWnfVtnjo6em9s+3QJF72NujXqhHq1rSCVTUTzNt2AHtS08u7WxUagyRVKieOJCBqxTIMGTkarh6eOLDzNyyY8g0W/LQGltWtlepfPHsGHg0aoe/gT2FsWg3HDh1A5HfTMWXBQnn4NKlWDT0GBMGmVm1oa2vj9B+/4+fI71HNzAwNm7V435tYYe3btw/h4eH45ptv0LBhQ8TGxmLUqFGIjY1VGepu376N0aNHw9/fH9999x1S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\n",
855 "text/plain": [
856 "<Figure size 720x720 with 4 Axes>"
857 ]
858 },
859 "metadata": {},
860 "output_type": "display_data"
861 }
862 ],
863 "source": [
864 "cmap = sns.diverging_palette(10, 220, as_cmap=True)\n",
865 "sns.clustermap(betas.corr(), annot=True, cmap=cmap, center=0);"
866 ]
867 },
868 {
869 "cell_type": "code",
870 "execution_count": 21,
871 "metadata": {
872 "ExecuteTime": {
873 "end_time": "2018-12-25T20:21:22.393396Z",
874 "start_time": "2018-12-25T20:21:20.304774Z"
875 },
876 "scrolled": true
877 },
878 "outputs": [
879 {
880 "name": "stdout",
881 "output_type": "stream",
882 "text": [
883 "<class 'pandas.core.frame.DataFrame'>\n",
884 "MultiIndex: 345502 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
885 "Data columns (total 11 columns):\n",
886 "return_1m 345502 non-null float64\n",
887 "return_2m 345502 non-null float64\n",
888 "return_3m 345502 non-null float64\n",
889 "return_6m 345502 non-null float64\n",
890 "return_9m 345502 non-null float64\n",
891 "return_12m 345502 non-null float64\n",
892 "Mkt-RF 303358 non-null float64\n",
893 "SMB 303358 non-null float64\n",
894 "HML 303358 non-null float64\n",
895 "RMW 303358 non-null float64\n",
896 "CMA 303358 non-null float64\n",
897 "dtypes: float64(11)\n",
898 "memory usage: 40.3+ MB\n"
899 ]
900 }
901 ],
902 "source": [
903 "data = (data\n",
904 " .join(betas\n",
905 " .groupby(level='ticker')\n",
906 " .shift()))\n",
907 "data.info()"
908 ]
909 },
910 {
911 "cell_type": "markdown",
912 "metadata": {},
913 "source": [
914 "### Impute mean for missing factor betas"
915 ]
916 },
917 {
918 "cell_type": "code",
919 "execution_count": 22,
920 "metadata": {
921 "ExecuteTime": {
922 "end_time": "2018-12-25T20:21:26.128936Z",
923 "start_time": "2018-12-25T20:21:22.394788Z"
924 }
925 },
926 "outputs": [
927 {
928 "name": "stdout",
929 "output_type": "stream",
930 "text": [
931 "<class 'pandas.core.frame.DataFrame'>\n",
932 "MultiIndex: 345502 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
933 "Data columns (total 11 columns):\n",
934 "return_1m 345502 non-null float64\n",
935 "return_2m 345502 non-null float64\n",
936 "return_3m 345502 non-null float64\n",
937 "return_6m 345502 non-null float64\n",
938 "return_9m 345502 non-null float64\n",
939 "return_12m 345502 non-null float64\n",
940 "Mkt-RF 345502 non-null float64\n",
941 "SMB 345502 non-null float64\n",
942 "HML 345502 non-null float64\n",
943 "RMW 345502 non-null float64\n",
944 "CMA 345502 non-null float64\n",
945 "dtypes: float64(11)\n",
946 "memory usage: 40.3+ MB\n"
947 ]
948 }
949 ],
950 "source": [
951 "data.loc[:, factors] = data.groupby('ticker')[factors].apply(lambda x: x.fillna(x.mean()))\n",
952 "data.info()"
953 ]
954 },
955 {
956 "cell_type": "markdown",
957 "metadata": {},
958 "source": [
959 "## Momentum factors"
960 ]
961 },
962 {
963 "cell_type": "markdown",
964 "metadata": {},
965 "source": [
966 "We can use these results to compute momentum factors based on the difference between returns over longer periods and the most recent monthly return, as well as for the difference between 3 and 12 month returns as follows:"
967 ]
968 },
969 {
970 "cell_type": "code",
971 "execution_count": 23,
972 "metadata": {
973 "ExecuteTime": {
974 "end_time": "2018-12-25T20:21:26.148656Z",
975 "start_time": "2018-12-25T20:21:26.129919Z"
976 }
977 },
978 "outputs": [],
979 "source": [
980 "for lag in [2,3,6,9,12]:\n",
981 " data[f'momentum_{lag}'] = data[f'return_{lag}m'].sub(data.return_1m)\n",
982 "data[f'momentum_3_12'] = data[f'return_12m'].sub(data.return_3m)"
983 ]
984 },
985 {
986 "cell_type": "markdown",
987 "metadata": {},
988 "source": [
989 "## Date Indicators"
990 ]
991 },
992 {
993 "cell_type": "code",
994 "execution_count": 24,
995 "metadata": {
996 "ExecuteTime": {
997 "end_time": "2018-12-25T20:21:26.178157Z",
998 "start_time": "2018-12-25T20:21:26.149989Z"
999 }
1000 },
1001 "outputs": [],
1002 "source": [
1003 "dates = data.index.get_level_values('date')\n",
1004 "data['year'] = dates.year\n",
1005 "data['month'] = dates.month"
1006 ]
1007 },
1008 {
1009 "cell_type": "markdown",
1010 "metadata": {},
1011 "source": [
1012 "## Lagged returns"
1013 ]
1014 },
1015 {
1016 "cell_type": "markdown",
1017 "metadata": {},
1018 "source": [
1019 "To use lagged values as input variables or features associated with the current observations, we use the .shift() method to move historical returns up to the current period:"
1020 ]
1021 },
1022 {
1023 "cell_type": "code",
1024 "execution_count": 25,
1025 "metadata": {
1026 "ExecuteTime": {
1027 "end_time": "2018-12-25T20:21:26.572552Z",
1028 "start_time": "2018-12-25T20:21:26.179228Z"
1029 }
1030 },
1031 "outputs": [
1032 {
1033 "name": "stdout",
1034 "output_type": "stream",
1035 "text": [
1036 "<class 'pandas.core.frame.DataFrame'>\n",
1037 "MultiIndex: 345502 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
1038 "Data columns (total 25 columns):\n",
1039 "return_1m 345502 non-null float64\n",
1040 "return_2m 345502 non-null float64\n",
1041 "return_3m 345502 non-null float64\n",
1042 "return_6m 345502 non-null float64\n",
1043 "return_9m 345502 non-null float64\n",
1044 "return_12m 345502 non-null float64\n",
1045 "Mkt-RF 345502 non-null float64\n",
1046 "SMB 345502 non-null float64\n",
1047 "HML 345502 non-null float64\n",
1048 "RMW 345502 non-null float64\n",
1049 "CMA 345502 non-null float64\n",
1050 "momentum_2 345502 non-null float64\n",
1051 "momentum_3 345502 non-null float64\n",
1052 "momentum_6 345502 non-null float64\n",
1053 "momentum_9 345502 non-null float64\n",
1054 "momentum_12 345502 non-null float64\n",
1055 "momentum_3_12 345502 non-null float64\n",
1056 "year 345502 non-null int64\n",
1057 "month 345502 non-null int64\n",
1058 "return_1m_t-1 343746 non-null float64\n",
1059 "return_1m_t-2 341990 non-null float64\n",
1060 "return_1m_t-3 340234 non-null float64\n",
1061 "return_1m_t-4 338478 non-null float64\n",
1062 "return_1m_t-5 336722 non-null float64\n",
1063 "return_1m_t-6 334966 non-null float64\n",
1064 "dtypes: float64(23), int64(2)\n",
1065 "memory usage: 77.2+ MB\n"
1066 ]
1067 }
1068 ],
1069 "source": [
1070 "for t in range(1, 7):\n",
1071 " data[f'return_1m_t-{t}'] = data.groupby(level='ticker').return_1m.shift(t)\n",
1072 "data.info()"
1073 ]
1074 },
1075 {
1076 "cell_type": "markdown",
1077 "metadata": {},
1078 "source": [
1079 "## Target: Holding Period Returns"
1080 ]
1081 },
1082 {
1083 "cell_type": "markdown",
1084 "metadata": {},
1085 "source": [
1086 "Similarly, to compute returns for various holding periods, we use the normalized period returns computed previously and shift them back to align them with the current financial features"
1087 ]
1088 },
1089 {
1090 "cell_type": "code",
1091 "execution_count": 26,
1092 "metadata": {
1093 "ExecuteTime": {
1094 "end_time": "2018-12-25T20:21:26.803930Z",
1095 "start_time": "2018-12-25T20:21:26.573662Z"
1096 }
1097 },
1098 "outputs": [],
1099 "source": [
1100 "for t in [1,2,3,6,12]:\n",
1101 " data[f'target_{t}m'] = data.groupby(level='ticker')[f'return_{t}m'].shift(-t)"
1102 ]
1103 },
1104 {
1105 "cell_type": "code",
1106 "execution_count": 27,
1107 "metadata": {
1108 "ExecuteTime": {
1109 "end_time": "2018-12-25T20:21:27.100683Z",
1110 "start_time": "2018-12-25T20:21:26.804811Z"
1111 }
1112 },
1113 "outputs": [
1114 {
1115 "data": {
1116 "text/html": [
1117 "<div>\n",
1118 "<style scoped>\n",
1119 " .dataframe tbody tr th:only-of-type {\n",
1120 " vertical-align: middle;\n",
1121 " }\n",
1122 "\n",
1123 " .dataframe tbody tr th {\n",
1124 " vertical-align: top;\n",
1125 " }\n",
1126 "\n",
1127 " .dataframe thead th {\n",
1128 " text-align: right;\n",
1129 " }\n",
1130 "</style>\n",
1131 "<table border=\"1\" class=\"dataframe\">\n",
1132 " <thead>\n",
1133 " <tr style=\"text-align: right;\">\n",
1134 " <th></th>\n",
1135 " <th></th>\n",
1136 " <th>target_1m</th>\n",
1137 " <th>target_2m</th>\n",
1138 " <th>target_3m</th>\n",
1139 " <th>return_1m</th>\n",
1140 " <th>return_2m</th>\n",
1141 " <th>return_3m</th>\n",
1142 " <th>return_1m_t-1</th>\n",
1143 " <th>return_1m_t-2</th>\n",
1144 " <th>return_1m_t-3</th>\n",
1145 " </tr>\n",
1146 " <tr>\n",
1147 " <th>ticker</th>\n",
1148 " <th>date</th>\n",
1149 " <th></th>\n",
1150 " <th></th>\n",
1151 " <th></th>\n",
1152 " <th></th>\n",
1153 " <th></th>\n",
1154 " <th></th>\n",
1155 " <th></th>\n",
1156 " <th></th>\n",
1157 " <th></th>\n",
1158 " </tr>\n",
1159 " </thead>\n",
1160 " <tbody>\n",
1161 " <tr>\n",
1162 " <th rowspan=\"10\" valign=\"top\">A</th>\n",
1163 " <th>2001-04-30</th>\n",
1164 " <td>-0.140220</td>\n",
1165 " <td>-0.087246</td>\n",
1166 " <td>-0.098192</td>\n",
1167 " <td>0.269444</td>\n",
1168 " <td>0.040966</td>\n",
1169 " <td>-0.105747</td>\n",
1170 " <td>-0.146389</td>\n",
1171 " <td>-0.327398</td>\n",
1172 " <td>-0.003653</td>\n",
1173 " </tr>\n",
1174 " <tr>\n",
1175 " <th>2001-05-31</th>\n",
1176 " <td>-0.031008</td>\n",
1177 " <td>-0.076414</td>\n",
1178 " <td>-0.075527</td>\n",
1179 " <td>-0.140220</td>\n",
1180 " <td>0.044721</td>\n",
1181 " <td>-0.023317</td>\n",
1182 " <td>0.269444</td>\n",
1183 " <td>-0.146389</td>\n",
1184 " <td>-0.327398</td>\n",
1185 " </tr>\n",
1186 " <tr>\n",
1187 " <th>2001-06-30</th>\n",
1188 " <td>-0.119692</td>\n",
1189 " <td>-0.097014</td>\n",
1190 " <td>-0.155847</td>\n",
1191 " <td>-0.031008</td>\n",
1192 " <td>-0.087246</td>\n",
1193 " <td>0.018842</td>\n",
1194 " <td>-0.140220</td>\n",
1195 " <td>0.269444</td>\n",
1196 " <td>-0.146389</td>\n",
1197 " </tr>\n",
1198 " <tr>\n",
1199 " <th>2001-07-31</th>\n",
1200 " <td>-0.073750</td>\n",
1201 " <td>-0.173364</td>\n",
1202 " <td>-0.080114</td>\n",
1203 " <td>-0.119692</td>\n",
1204 " <td>-0.076414</td>\n",
1205 " <td>-0.098192</td>\n",
1206 " <td>-0.031008</td>\n",
1207 " <td>-0.140220</td>\n",
1208 " <td>0.269444</td>\n",
1209 " </tr>\n",
1210 " <tr>\n",
1211 " <th>2001-08-31</th>\n",
1212 " <td>-0.262264</td>\n",
1213 " <td>-0.083279</td>\n",
1214 " <td>0.009593</td>\n",
1215 " <td>-0.073750</td>\n",
1216 " <td>-0.097014</td>\n",
1217 " <td>-0.075527</td>\n",
1218 " <td>-0.119692</td>\n",
1219 " <td>-0.031008</td>\n",
1220 " <td>-0.140220</td>\n",
1221 " </tr>\n",
1222 " <tr>\n",
1223 " <th>2001-09-30</th>\n",
1224 " <td>0.139130</td>\n",
1225 " <td>0.181052</td>\n",
1226 " <td>0.134010</td>\n",
1227 " <td>-0.262264</td>\n",
1228 " <td>-0.173364</td>\n",
1229 " <td>-0.155847</td>\n",
1230 " <td>-0.073750</td>\n",
1231 " <td>-0.119692</td>\n",
1232 " <td>-0.031008</td>\n",
1233 " </tr>\n",
1234 " <tr>\n",
1235 " <th>2001-10-31</th>\n",
1236 " <td>0.224517</td>\n",
1237 " <td>0.131458</td>\n",
1238 " <td>0.108697</td>\n",
1239 " <td>0.139130</td>\n",
1240 " <td>-0.083279</td>\n",
1241 " <td>-0.080114</td>\n",
1242 " <td>-0.262264</td>\n",
1243 " <td>-0.073750</td>\n",
1244 " <td>-0.119692</td>\n",
1245 " </tr>\n",
1246 " <tr>\n",
1247 " <th>2001-11-30</th>\n",
1248 " <td>0.045471</td>\n",
1249 " <td>0.054962</td>\n",
1250 " <td>0.045340</td>\n",
1251 " <td>0.224517</td>\n",
1252 " <td>0.181052</td>\n",
1253 " <td>0.009593</td>\n",
1254 " <td>0.139130</td>\n",
1255 " <td>-0.262264</td>\n",
1256 " <td>-0.073750</td>\n",
1257 " </tr>\n",
1258 " <tr>\n",
1259 " <th>2001-12-31</th>\n",
1260 " <td>0.064539</td>\n",
1261 " <td>0.045275</td>\n",
1262 " <td>0.070347</td>\n",
1263 " <td>0.045471</td>\n",
1264 " <td>0.131458</td>\n",
1265 " <td>0.134010</td>\n",
1266 " <td>0.224517</td>\n",
1267 " <td>0.139130</td>\n",
1268 " <td>-0.262264</td>\n",
1269 " </tr>\n",
1270 " <tr>\n",
1271 " <th>2002-01-31</th>\n",
1272 " <td>0.026359</td>\n",
1273 " <td>0.073264</td>\n",
1274 " <td>-0.003306</td>\n",
1275 " <td>0.064539</td>\n",
1276 " <td>0.054962</td>\n",
1277 " <td>0.108697</td>\n",
1278 " <td>0.045471</td>\n",
1279 " <td>0.224517</td>\n",
1280 " <td>0.139130</td>\n",
1281 " </tr>\n",
1282 " </tbody>\n",
1283 "</table>\n",
1284 "</div>"
1285 ],
1286 "text/plain": [
1287 " target_1m target_2m target_3m return_1m return_2m \\\n",
1288 "ticker date \n",
1289 "A 2001-04-30 -0.140220 -0.087246 -0.098192 0.269444 0.040966 \n",
1290 " 2001-05-31 -0.031008 -0.076414 -0.075527 -0.140220 0.044721 \n",
1291 " 2001-06-30 -0.119692 -0.097014 -0.155847 -0.031008 -0.087246 \n",
1292 " 2001-07-31 -0.073750 -0.173364 -0.080114 -0.119692 -0.076414 \n",
1293 " 2001-08-31 -0.262264 -0.083279 0.009593 -0.073750 -0.097014 \n",
1294 " 2001-09-30 0.139130 0.181052 0.134010 -0.262264 -0.173364 \n",
1295 " 2001-10-31 0.224517 0.131458 0.108697 0.139130 -0.083279 \n",
1296 " 2001-11-30 0.045471 0.054962 0.045340 0.224517 0.181052 \n",
1297 " 2001-12-31 0.064539 0.045275 0.070347 0.045471 0.131458 \n",
1298 " 2002-01-31 0.026359 0.073264 -0.003306 0.064539 0.054962 \n",
1299 "\n",
1300 " return_3m return_1m_t-1 return_1m_t-2 return_1m_t-3 \n",
1301 "ticker date \n",
1302 "A 2001-04-30 -0.105747 -0.146389 -0.327398 -0.003653 \n",
1303 " 2001-05-31 -0.023317 0.269444 -0.146389 -0.327398 \n",
1304 " 2001-06-30 0.018842 -0.140220 0.269444 -0.146389 \n",
1305 " 2001-07-31 -0.098192 -0.031008 -0.140220 0.269444 \n",
1306 " 2001-08-31 -0.075527 -0.119692 -0.031008 -0.140220 \n",
1307 " 2001-09-30 -0.155847 -0.073750 -0.119692 -0.031008 \n",
1308 " 2001-10-31 -0.080114 -0.262264 -0.073750 -0.119692 \n",
1309 " 2001-11-30 0.009593 0.139130 -0.262264 -0.073750 \n",
1310 " 2001-12-31 0.134010 0.224517 0.139130 -0.262264 \n",
1311 " 2002-01-31 0.108697 0.045471 0.224517 0.139130 "
1312 ]
1313 },
1314 "execution_count": 27,
1315 "metadata": {},
1316 "output_type": "execute_result"
1317 }
1318 ],
1319 "source": [
1320 "cols = ['target_1m',\n",
1321 " 'target_2m',\n",
1322 " 'target_3m', 'return_1m',\n",
1323 " 'return_2m',\n",
1324 " 'return_3m',\n",
1325 " 'return_1m_t-1',\n",
1326 " 'return_1m_t-2',\n",
1327 " 'return_1m_t-3']\n",
1328 "\n",
1329 "data[cols].dropna().sort_index().head(10)"
1330 ]
1331 },
1332 {
1333 "cell_type": "code",
1334 "execution_count": 28,
1335 "metadata": {
1336 "ExecuteTime": {
1337 "end_time": "2018-12-25T20:21:27.239829Z",
1338 "start_time": "2018-12-25T20:21:27.101668Z"
1339 }
1340 },
1341 "outputs": [
1342 {
1343 "name": "stdout",
1344 "output_type": "stream",
1345 "text": [
1346 "<class 'pandas.core.frame.DataFrame'>\n",
1347 "MultiIndex: 345502 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
1348 "Data columns (total 30 columns):\n",
1349 "return_1m 345502 non-null float64\n",
1350 "return_2m 345502 non-null float64\n",
1351 "return_3m 345502 non-null float64\n",
1352 "return_6m 345502 non-null float64\n",
1353 "return_9m 345502 non-null float64\n",
1354 "return_12m 345502 non-null float64\n",
1355 "Mkt-RF 345502 non-null float64\n",
1356 "SMB 345502 non-null float64\n",
1357 "HML 345502 non-null float64\n",
1358 "RMW 345502 non-null float64\n",
1359 "CMA 345502 non-null float64\n",
1360 "momentum_2 345502 non-null float64\n",
1361 "momentum_3 345502 non-null float64\n",
1362 "momentum_6 345502 non-null float64\n",
1363 "momentum_9 345502 non-null float64\n",
1364 "momentum_12 345502 non-null float64\n",
1365 "momentum_3_12 345502 non-null float64\n",
1366 "year 345502 non-null int64\n",
1367 "month 345502 non-null int64\n",
1368 "return_1m_t-1 343746 non-null float64\n",
1369 "return_1m_t-2 341990 non-null float64\n",
1370 "return_1m_t-3 340234 non-null float64\n",
1371 "return_1m_t-4 338478 non-null float64\n",
1372 "return_1m_t-5 336722 non-null float64\n",
1373 "return_1m_t-6 334966 non-null float64\n",
1374 "target_1m 343746 non-null float64\n",
1375 "target_2m 341990 non-null float64\n",
1376 "target_3m 340234 non-null float64\n",
1377 "target_6m 334966 non-null float64\n",
1378 "target_12m 324430 non-null float64\n",
1379 "dtypes: float64(28), int64(2)\n",
1380 "memory usage: 90.5+ MB\n"
1381 ]
1382 }
1383 ],
1384 "source": [
1385 "data.info()"
1386 ]
1387 },
1388 {
1389 "cell_type": "markdown",
1390 "metadata": {},
1391 "source": [
1392 "## Create age proxy"
1393 ]
1394 },
1395 {
1396 "cell_type": "markdown",
1397 "metadata": {},
1398 "source": [
1399 "We use quintiles of IPO year as a proxy for company age."
1400 ]
1401 },
1402 {
1403 "cell_type": "code",
1404 "execution_count": 29,
1405 "metadata": {
1406 "ExecuteTime": {
1407 "end_time": "2018-12-25T20:21:27.286036Z",
1408 "start_time": "2018-12-25T20:21:27.241312Z"
1409 }
1410 },
1411 "outputs": [],
1412 "source": [
1413 "data = (data\n",
1414 " .join(pd.qcut(stocks.ipoyear, q=5, labels=list(range(1, 6)))\n",
1415 " .astype(float)\n",
1416 " .fillna(0)\n",
1417 " .astype(int)\n",
1418 " .to_frame('age')))\n",
1419 "data.age = data.age.fillna(-1)"
1420 ]
1421 },
1422 {
1423 "cell_type": "markdown",
1424 "metadata": {},
1425 "source": [
1426 "## Create dynamic size proxy"
1427 ]
1428 },
1429 {
1430 "cell_type": "markdown",
1431 "metadata": {},
1432 "source": [
1433 "We use the marketcap information from the NASDAQ ticker info to create a size proxy."
1434 ]
1435 },
1436 {
1437 "cell_type": "code",
1438 "execution_count": 30,
1439 "metadata": {
1440 "ExecuteTime": {
1441 "end_time": "2018-12-25T20:23:14.190943Z",
1442 "start_time": "2018-12-25T20:23:14.184872Z"
1443 }
1444 },
1445 "outputs": [
1446 {
1447 "name": "stdout",
1448 "output_type": "stream",
1449 "text": [
1450 "<class 'pandas.core.frame.DataFrame'>\n",
1451 "Index: 2289 entries, A to ZUMZ\n",
1452 "Data columns (total 3 columns):\n",
1453 "marketcap 2287 non-null object\n",
1454 "ipoyear 1002 non-null float64\n",
1455 "sector 2248 non-null object\n",
1456 "dtypes: float64(1), object(2)\n",
1457 "memory usage: 151.5+ KB\n"
1458 ]
1459 }
1460 ],
1461 "source": [
1462 "stocks.info()"
1463 ]
1464 },
1465 {
1466 "cell_type": "markdown",
1467 "metadata": {},
1468 "source": [
1469 "Market cap information is tied to currrent prices. We create an adjustment factor to have the values reflect lower historical prices for each individual stock:"
1470 ]
1471 },
1472 {
1473 "cell_type": "code",
1474 "execution_count": 37,
1475 "metadata": {
1476 "ExecuteTime": {
1477 "end_time": "2018-12-25T20:21:27.302005Z",
1478 "start_time": "2018-12-25T20:21:04.281Z"
1479 }
1480 },
1481 "outputs": [
1482 {
1483 "name": "stdout",
1484 "output_type": "stream",
1485 "text": [
1486 "<class 'pandas.core.frame.DataFrame'>\n",
1487 "DatetimeIndex: 207 entries, 2018-03-31 to 2001-01-31\n",
1488 "Freq: -1M\n",
1489 "Columns: 1756 entries, A to UFS\n",
1490 "dtypes: float64(1756)\n",
1491 "memory usage: 2.8 MB\n"
1492 ]
1493 }
1494 ],
1495 "source": [
1496 "size_factor = (monthly_prices\n",
1497 " .loc[data.index.get_level_values('date').unique(),\n",
1498 " data.index.get_level_values('ticker').unique()]\n",
1499 " .sort_index(ascending=False)\n",
1500 " .pct_change()\n",
1501 " .fillna(0)\n",
1502 " .add(1)\n",
1503 " .cumprod())\n",
1504 "size_factor.info()"
1505 ]
1506 },
1507 {
1508 "cell_type": "code",
1509 "execution_count": 38,
1510 "metadata": {
1511 "ExecuteTime": {
1512 "end_time": "2018-12-25T20:21:27.302756Z",
1513 "start_time": "2018-12-25T20:21:04.283Z"
1514 }
1515 },
1516 "outputs": [],
1517 "source": [
1518 "msize = (size_factor\n",
1519 " .mul(stocks\n",
1520 " .loc[size_factor.columns, 'marketcap'])).dropna(axis=1, how='all')"
1521 ]
1522 },
1523 {
1524 "cell_type": "markdown",
1525 "metadata": {},
1526 "source": [
1527 "### Create Size indicator as deciles per period"
1528 ]
1529 },
1530 {
1531 "cell_type": "markdown",
1532 "metadata": {},
1533 "source": [
1534 "Compute size deciles per month:"
1535 ]
1536 },
1537 {
1538 "cell_type": "code",
1539 "execution_count": 39,
1540 "metadata": {
1541 "ExecuteTime": {
1542 "end_time": "2018-12-25T20:21:27.303512Z",
1543 "start_time": "2018-12-25T20:21:04.284Z"
1544 }
1545 },
1546 "outputs": [],
1547 "source": [
1548 "data['msize'] = (msize\n",
1549 " .apply(lambda x: pd.qcut(x, q=10, labels=list(range(1, 11)))\n",
1550 " .astype(int), axis=1)\n",
1551 " .stack()\n",
1552 " .swaplevel())\n",
1553 "data.msize = data.msize.fillna(-1)"
1554 ]
1555 },
1556 {
1557 "cell_type": "markdown",
1558 "metadata": {},
1559 "source": [
1560 "## Combine data"
1561 ]
1562 },
1563 {
1564 "cell_type": "code",
1565 "execution_count": 40,
1566 "metadata": {
1567 "ExecuteTime": {
1568 "end_time": "2018-12-25T20:21:27.304218Z",
1569 "start_time": "2018-12-25T20:21:04.286Z"
1570 }
1571 },
1572 "outputs": [],
1573 "source": [
1574 "data = data.join(stocks[['sector']])\n",
1575 "data.sector = data.sector.fillna('Unknown')"
1576 ]
1577 },
1578 {
1579 "cell_type": "code",
1580 "execution_count": 41,
1581 "metadata": {
1582 "ExecuteTime": {
1583 "end_time": "2018-12-25T20:21:27.305025Z",
1584 "start_time": "2018-12-25T20:21:04.290Z"
1585 },
1586 "scrolled": true
1587 },
1588 "outputs": [
1589 {
1590 "name": "stdout",
1591 "output_type": "stream",
1592 "text": [
1593 "<class 'pandas.core.frame.DataFrame'>\n",
1594 "MultiIndex: 345502 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
1595 "Data columns (total 33 columns):\n",
1596 "return_1m 345502 non-null float64\n",
1597 "return_2m 345502 non-null float64\n",
1598 "return_3m 345502 non-null float64\n",
1599 "return_6m 345502 non-null float64\n",
1600 "return_9m 345502 non-null float64\n",
1601 "return_12m 345502 non-null float64\n",
1602 "Mkt-RF 345502 non-null float64\n",
1603 "SMB 345502 non-null float64\n",
1604 "HML 345502 non-null float64\n",
1605 "RMW 345502 non-null float64\n",
1606 "CMA 345502 non-null float64\n",
1607 "momentum_2 345502 non-null float64\n",
1608 "momentum_3 345502 non-null float64\n",
1609 "momentum_6 345502 non-null float64\n",
1610 "momentum_9 345502 non-null float64\n",
1611 "momentum_12 345502 non-null float64\n",
1612 "momentum_3_12 345502 non-null float64\n",
1613 "year 345502 non-null int64\n",
1614 "month 345502 non-null int64\n",
1615 "return_1m_t-1 343746 non-null float64\n",
1616 "return_1m_t-2 341990 non-null float64\n",
1617 "return_1m_t-3 340234 non-null float64\n",
1618 "return_1m_t-4 338478 non-null float64\n",
1619 "return_1m_t-5 336722 non-null float64\n",
1620 "return_1m_t-6 334966 non-null float64\n",
1621 "target_1m 343746 non-null float64\n",
1622 "target_2m 341990 non-null float64\n",
1623 "target_3m 340234 non-null float64\n",
1624 "target_6m 334966 non-null float64\n",
1625 "target_12m 324430 non-null float64\n",
1626 "age 345502 non-null int64\n",
1627 "msize 345502 non-null float64\n",
1628 "sector 345502 non-null object\n",
1629 "dtypes: float64(29), int64(3), object(1)\n",
1630 "memory usage: 98.4+ MB\n"
1631 ]
1632 }
1633 ],
1634 "source": [
1635 "data.info()"
1636 ]
1637 },
1638 {
1639 "cell_type": "markdown",
1640 "metadata": {},
1641 "source": [
1642 "## Store data"
1643 ]
1644 },
1645 {
1646 "cell_type": "markdown",
1647 "metadata": {},
1648 "source": [
1649 "We will use the data again in several later chapters, starting in [Chapter 6 on Linear Models](../../06_machine_learning_process/02_mutual_information/mutual_information.ipynb)."
1650 ]
1651 },
1652 {
1653 "cell_type": "code",
1654 "execution_count": 42,
1655 "metadata": {},
1656 "outputs": [
1657 {
1658 "name": "stdout",
1659 "output_type": "stream",
1660 "text": [
1661 "<class 'pandas.io.pytables.HDFStore'>\n",
1662 "File path: ../../data/assets.h5\n",
1663 "/engineered_features frame (shape->[343746,33]) \n",
1664 "/fred/assets frame (shape->[4826,5]) \n",
1665 "/quandl/wiki/prices frame (shape->[15389314,12])\n",
1666 "/quandl/wiki/stocks frame (shape->[1,2]) \n",
1667 "/sp500/prices frame (shape->[37721,5]) \n",
1668 "/sp500/stocks frame (shape->[1,7]) \n",
1669 "/us_equities/stocks frame (shape->[1,6]) \n"
1670 ]
1671 }
1672 ],
1673 "source": [
1674 "with pd.HDFStore(DATA_STORE) as store:\n",
1675 " store.put('engineered_features', data.sort_index().loc[idx[:, :datetime(2018, 3, 1)], :])\n",
1676 " print(store.info())"
1677 ]
1678 },
1679 {
1680 "cell_type": "markdown",
1681 "metadata": {},
1682 "source": [
1683 "## Create Dummy variables"
1684 ]
1685 },
1686 {
1687 "cell_type": "markdown",
1688 "metadata": {},
1689 "source": [
1690 "For most models, we need to encode categorical variables as 'dummies' (one-hot encoding):"
1691 ]
1692 },
1693 {
1694 "cell_type": "code",
1695 "execution_count": 43,
1696 "metadata": {
1697 "ExecuteTime": {
1698 "end_time": "2018-12-25T20:21:27.306385Z",
1699 "start_time": "2018-12-25T20:21:04.294Z"
1700 },
1701 "scrolled": false
1702 },
1703 "outputs": [
1704 {
1705 "name": "stdout",
1706 "output_type": "stream",
1707 "text": [
1708 "<class 'pandas.core.frame.DataFrame'>\n",
1709 "MultiIndex: 345502 entries, (A, 2001-01-31 00:00:00) to (ZUMZ, 2018-03-31 00:00:00)\n",
1710 "Data columns (total 88 columns):\n",
1711 "return_1m 345502 non-null float64\n",
1712 "return_2m 345502 non-null float64\n",
1713 "return_3m 345502 non-null float64\n",
1714 "return_6m 345502 non-null float64\n",
1715 "return_9m 345502 non-null float64\n",
1716 "return_12m 345502 non-null float64\n",
1717 "Mkt-RF 345502 non-null float64\n",
1718 "SMB 345502 non-null float64\n",
1719 "HML 345502 non-null float64\n",
1720 "RMW 345502 non-null float64\n",
1721 "CMA 345502 non-null float64\n",
1722 "momentum_2 345502 non-null float64\n",
1723 "momentum_3 345502 non-null float64\n",
1724 "momentum_6 345502 non-null float64\n",
1725 "momentum_9 345502 non-null float64\n",
1726 "momentum_12 345502 non-null float64\n",
1727 "momentum_3_12 345502 non-null float64\n",
1728 "return_1m_t-1 343746 non-null float64\n",
1729 "return_1m_t-2 341990 non-null float64\n",
1730 "return_1m_t-3 340234 non-null float64\n",
1731 "return_1m_t-4 338478 non-null float64\n",
1732 "return_1m_t-5 336722 non-null float64\n",
1733 "return_1m_t-6 334966 non-null float64\n",
1734 "target_1m 343746 non-null float64\n",
1735 "target_2m 341990 non-null float64\n",
1736 "target_3m 340234 non-null float64\n",
1737 "target_6m 334966 non-null float64\n",
1738 "target_12m 324430 non-null float64\n",
1739 "year_2001 345502 non-null uint8\n",
1740 "year_2002 345502 non-null uint8\n",
1741 "year_2003 345502 non-null uint8\n",
1742 "year_2004 345502 non-null uint8\n",
1743 "year_2005 345502 non-null uint8\n",
1744 "year_2006 345502 non-null uint8\n",
1745 "year_2007 345502 non-null uint8\n",
1746 "year_2008 345502 non-null uint8\n",
1747 "year_2009 345502 non-null uint8\n",
1748 "year_2010 345502 non-null uint8\n",
1749 "year_2011 345502 non-null uint8\n",
1750 "year_2012 345502 non-null uint8\n",
1751 "year_2013 345502 non-null uint8\n",
1752 "year_2014 345502 non-null uint8\n",
1753 "year_2015 345502 non-null uint8\n",
1754 "year_2016 345502 non-null uint8\n",
1755 "year_2017 345502 non-null uint8\n",
1756 "year_2018 345502 non-null uint8\n",
1757 "month_1 345502 non-null uint8\n",
1758 "month_2 345502 non-null uint8\n",
1759 "month_3 345502 non-null uint8\n",
1760 "month_4 345502 non-null uint8\n",
1761 "month_5 345502 non-null uint8\n",
1762 "month_6 345502 non-null uint8\n",
1763 "month_7 345502 non-null uint8\n",
1764 "month_8 345502 non-null uint8\n",
1765 "month_9 345502 non-null uint8\n",
1766 "month_10 345502 non-null uint8\n",
1767 "month_11 345502 non-null uint8\n",
1768 "month_12 345502 non-null uint8\n",
1769 "msize_-1 345502 non-null uint8\n",
1770 "msize_1 345502 non-null uint8\n",
1771 "msize_2 345502 non-null uint8\n",
1772 "msize_3 345502 non-null uint8\n",
1773 "msize_4 345502 non-null uint8\n",
1774 "msize_5 345502 non-null uint8\n",
1775 "msize_6 345502 non-null uint8\n",
1776 "msize_7 345502 non-null uint8\n",
1777 "msize_8 345502 non-null uint8\n",
1778 "msize_9 345502 non-null uint8\n",
1779 "msize_10 345502 non-null uint8\n",
1780 "age_0 345502 non-null uint8\n",
1781 "age_1 345502 non-null uint8\n",
1782 "age_2 345502 non-null uint8\n",
1783 "age_3 345502 non-null uint8\n",
1784 "age_4 345502 non-null uint8\n",
1785 "age_5 345502 non-null uint8\n",
1786 "Basic Industries 345502 non-null uint8\n",
1787 "Capital Goods 345502 non-null uint8\n",
1788 "Consumer Durables 345502 non-null uint8\n",
1789 "Consumer Non-Durables 345502 non-null uint8\n",
1790 "Consumer Services 345502 non-null uint8\n",
1791 "Energy 345502 non-null uint8\n",
1792 "Finance 345502 non-null uint8\n",
1793 "Health Care 345502 non-null uint8\n",
1794 "Miscellaneous 345502 non-null uint8\n",
1795 "Public Utilities 345502 non-null uint8\n",
1796 "Technology 345502 non-null uint8\n",
1797 "Transportation 345502 non-null uint8\n",
1798 "Unknown 345502 non-null uint8\n",
1799 "dtypes: float64(28), uint8(60)\n",
1800 "memory usage: 94.9+ MB\n"
1801 ]
1802 }
1803 ],
1804 "source": [
1805 "dummy_data = pd.get_dummies(data,\n",
1806 " columns=['year','month', 'msize', 'age', 'sector'],\n",
1807 " prefix=['year','month', 'msize', 'age', ''],\n",
1808 " prefix_sep=['_', '_', '_', '_', ''])\n",
1809 "dummy_data = dummy_data.rename(columns={c:c.replace('.0', '') for c in dummy_data.columns})\n",
1810 "dummy_data.info()"
1811 ]
1812 }
1813 ],
1814 "metadata": {
1815 "kernelspec": {
1816 "display_name": "Python 3",
1817 "language": "python",
1818 "name": "python3"
1819 },
1820 "language_info": {
1821 "codemirror_mode": {
1822 "name": "ipython",
1823 "version": 3
1824 },
1825 "file_extension": ".py",
1826 "mimetype": "text/x-python",
1827 "name": "python",
1828 "nbconvert_exporter": "python",
1829 "pygments_lexer": "ipython3",
1830 "version": "3.6.8"
1831 },
1832 "toc": {
1833 "base_numbering": 1,
1834 "nav_menu": {},
1835 "number_sections": true,
1836 "sideBar": true,
1837 "skip_h1_title": true,
1838 "title_cell": "Table of Contents",
1839 "title_sidebar": "Contents",
1840 "toc_cell": false,
1841 "toc_position": {
1842 "height": "calc(100% - 180px)",
1843 "left": "10px",
1844 "top": "150px",
1845 "width": "230.355px"
1846 },
1847 "toc_section_display": true,
1848 "toc_window_display": true
1849 }
1850 },
1851 "nbformat": 4,
1852 "nbformat_minor": 2
1853 }