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+AOAACAssVUEAAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAABGsAAADAAARrAAAAwAAEawAAAMAATrbuAHC1od0aKqpXiAK83XXgVLpeWLRTmw6dLbHe2dFBT/+tsSI71FGgt7tSMsyatfqAPvjukCSpb5taeqJ3qOoFVJKTo4OOJWVqzrcHtfin4+V0RLYzsk+Yxg5so0AfT+0/cU4T5v6on/adKrF+UNcQjR3YRsE1qyojO0exu+I1KWadks5nS5KG3t1UD3ZvrNA6vnIwSbuPpOiVTzZow77T5XVIdq1jqwZ66qE71Sq0tmr4e2vE5E+0YMVmW3fL7vRtFqC/t6whX08XHU/N1qy449pzOtNqbacGPvpb0wA19POUi6ODTqRma+G2U9p47LzV+m7Bvnrh7kbadOy8nv/q17I8DLtwX6sa+kd4LflWctWxlCxN/+6IdiWkW61tWdtLj3Wtpzq+HnJ1clBixiV9ueuMFm5JsFrfo7GfXu3XWOsPn9O4/+0ty8OwuUHtamnoHXXlV8lFh5Oz9MbXB7TjRNo1t2tZx1sfDWutY2ezde+MjUXtPZr465HO9VTbx11Ojg6KP5et+RtO6MudZ8ryMGAHCNawK/3b1dZrg1tqwifbtflQioZFBOvTpzur4/OrdSo12+o2749urxo+Hhr33206mpQpPy83uTk7Fj2empWjaSv269CZDF3Oy1ePFjX0n6FtdS7zkr77ueL+kBvYuZHeGt1VY2b+oA37TmvUPWFa9mp/tRo1XydTioeY2xvX0Ifj79akmHX6cuMRBVT10H+iIvTRhF7qPelzSVLnsFr6bN0Bbdx/Wtnmy3ri3lb6csoAhUct0JHT1/4lVNFV8nDV/sOnteirzYp55SFbd8cudQ32VdQddfXOj8e093Sm+jYLUPTfQjVs4S4lX8gpVt+8RhXtTEjXvE0nlWm+rO4h1fRy7xCN+2JfsTBevYqrRnWqo59PZZTX4djUnaF+evrOBnrzm0PanZCh+1rV0PRBzXT/B1uVlHGpWP3F3Dwt2XZKh1OyZM7NV/NaVTTx7kYyX87X5zssvxzX8HbTE90aaGd8xf9c3900QBP7hGjKil+180SaBrWrpTkPtVTfdzcqMd1c4nZV3Jz07/uaaPPRVPlXcbN4LO1iruauPapjKVm6nF+gLiHV9Er/xjqflau4gyUPFOHmx1QQ2JXRPUL06U/HtGDdUR06k6lJC3coKd2soRENrNZ3bRKgzo0D9MD0dfpxf5JOnsvWjqOp2nAgpahm/S/JWrXzlA4nZup4SpbeX3NI+xPS1b5RtfI6LJt48t5W+mTNfn20eq8OnEzV07PXKjE1SyP6hFmtDw+trlNnL2jGsp06kZShLb8mavaXu9Q2JLCoZuibqzVnxW7tPpKiQ6fO68n3vldmds7/s3fncVFVjRvAnxlg2PddVlncENcU3HHL3G1zSbPEXJKMcMksszSLyqx+ubwtvva+Kr5qaanlkqaYK6IC4goIssOwDjAw7L8/sNGBAakuzjg+38+Hj8yZc+eeex1mnjnn3DN48gnPh3RU2u3I6et4b8MB/HQsFnX19ZpujlZ6roczjtzMw8FrUqQVVWDDH3dQUF6F8f5OautvPHUHOzpsQesAACAASURBVC9l4VZuGbJkCmy7kIHEPDkGeNmo1NMTi/DOKF9sOZeO7JLmw5AumdbXFb/E52JfXA7uFJRj3dEkFJRV4tme7dTWv5lThqM38pCSX45smQKHr0lxPqUQPdwsVerpiUX4YGJn/OuPFGQW6/65nDnAA/tisrDnYiaS8+QI//UW8kqrMLWva4vbrX66C/bHZCMuvekIwYXkIhy/e67TCyuw/Vw6EnLL0NvDqq0Oo01FRETAxcVF081QsWzZMgQFBcHR0RH+/v5N7j916hSmTZuGjh07wtnZGf3798e2bdvavF0M1qQ1DPTE6O5pjcirOSrlkVdz0MdbfQge3csVMSmFeHVUR8StG4+oj8fgoxd6wtSw+cGYQZ0d4O1kjnP3hW9dY6AvRk9fR/x+OVWl/NjlVAR2Uf+me+5aFpxsTDEmwAsAYGthhOeHdMSR6DvN7kdioAcjiR6KSnX/zZf+OX2xCB0czHCxUS/opTQZ/JzNW/04xgZilCpqVMpmB7ohp7QSv93U3b/r++mLRejkZI6olEKV8qiUIvi7WrTqMTo4mqGbiyUuN/r/eHVIe2QXK3AwPlew9morfT0RurQzx9nEApXys0kF6O7efAie0tcVduaG+CYyuVX7CfCygaedKS7eUT+FSZOqqpqOFD0K+6urq8O0adMwdepUtfdfuHABfn5++O9//4tz585h9uzZeOONN/DDDz8Isv/mMFiT1rAxl0BfT4y8RkOY0hIFHCyN1G7jaW+KgA728HOzwqyNZ/DW9ssY5u+M9bP7qtQzNzbAnX89g6zvnseOsMF4J+Iyfo/PUfuYusDOomFeX26x6vQZaXE5HK1N1G4TdTMbL31yEN+/+RRKDryOjF2vQiQS4ZV1h5vdz/sz+0OuqMavUa17c6HHm6WxPvTEIhSVV6uUF5VXw8bEoFWPMdHfEfZmhjh63wfj3m6WCPK1w5cnHp/noZWJAfTFIhTKVc9lobwatqaSFrc9EBKIU0sH4T8v98Key1n46b55vwHtrTGisz0+OZLYJu3WNtYmDe87BXLVsFcgr4Kdmfrz6OtohgXDvLDsh3jUtTAwZWaojwvvDkXMquHY9GIPfPzrTZxuFOA1YezYsVi0aBFWrFgBb29vjBo1CjKZDKGhofDx8YGrqyvGjBmDmJgYAA09vyEhIZDL5bCysoKVlRXCw8MBAP7+/li/fn2Tx1+6dKnytr+/P8LDwxESEgJ3d3fMmTMHqampsLKywr59+zBp0iQ4OzsjICAAJ06caPVxrF27FvPmzYOPj4/a+xcvXowVK1YgMDAQnp6emD17NsaPH4/9+/cr64SHh6Nfv37YsWMH/P394eLiggULFqCqqgqbN2+Gn58f2rdvj7fffht1dXWtahfnWJPWqW80hC4SidDca5dIJEJ9fT3mfXMepRUNbzBvbb+EH5YEwd7CUBnSyxTVGPrebzA11MegLo5YPbUH0vLlOHVD2paHonmNTpwIIjQ3Q6GTuw3WzR+Kj3dE4eilVDjZmOKjVwZhw8IReGXdkSb1Qyb2xOwx/hi7fA9Kyx9ujwfpGFGTp6pag7xtMHeAB9YcSYS0tOE5Z2GkjzdH+OCj3xJRVlnbtu3URo1PXCvO5dztsTCR6KFrO3OEDPVClqwCh65KYWmsj3fHdsTK/TeajAjousaviyKoP48GeiKsneyPzw4nIrOo5ZE6eVUNnt14HiYSPQR622Lp6A7ILFIgKrmwxe0eht27d+Oll17CoUOHUF9fjylTpsDCwgK7du2CtbU1duzYgQkTJiA6OhoBAQEIDw/HBx98oAzbpqamf2l/mzZtwpIlSxAZGanyHr9mzRqsXr0a69atw9q1axEcHIz4+HiYmZkJerx/Ki0tRbt2qqO2aWlpOHjwIHbt2oXs7GzMnDkTUqkUDg4O2Lt3LxISEjBr1iwEBARg4sSJD9wHg7WWMDIyUn4C1AbLly9/6PssLK1CTW1dk95pe3ND5DVzAYlUVoGcogplqAaAhOyGC5dcbE2Vwbq+HkiRlgEArqYXo0M7C7wxrovOBuv8kgrU1NY16Z22tzKGtFj9RaBLJ/fFxYQcfLHnEgDg6p18lG+sxu+fTcH7/z2DjPwyZd2QiT3x3sz+mLTyJ1xM0P3hYhKGrKIGtXX1sG7UO21tbNCkF7uxQd42eGukDz45mqSyIkh7WxPYmUmwdlIXZZlI1PDvbyGBCI6IRYYOzhMuLq9GTV09bMxUz6WNiQEK5S1/0M2++3p6O08OG1MJXhnoiUNXpfC2N4W9uSHWT+uurCu+ey7PLBuMad9FI62wQtgD0bCi8ob3nca90zamEhSouZjW3twQPo5m+ODpLvjg6YbnnFgkglgsQuyq4ViwLQZnkxqCc309kH73fN3KKYOXvSnmDPHUimDt7u6ODz/8EABw8uRJxMfHIykpCcbGxgCAFStW4PDhw9i1axdCQ0NhYWEBkUgER0fHv7W//v37IzQ0VHk7NbVhmuKCBQswevRoAMDKlSuxc+dOxMfHo1+/fv/k8NQ6fPgwTp48iSNHVDuKamtrsXHjRlhaWqJLly4YPnw4zpw5gxs3bkAikaBjx44ICAjA6dOnGawfJWFhYZpugsZV19Yh7k4Rhvg5Yf/Fe8s/DfFzwi+X0tVuE5WYj/FPuMHUUB/yyoYeFm/HhrmaGfnyZvclFgGG+ro7E6q6pg4xibkY1ssDe0/fG9Id3tMDP59RP8RrYqiP2kbjmrW1DbdFfyYVNFwU+e6L/TBp5c9cZo/+kpq6eiRIy9DbzQp/JN0LF73dLPHH7ebDxhAfWyy7G6ob17uVW4bZEbEqZcH93GFmqI+vIpORo2Z1DF1QU1ePmzmlCPC0xvGb91aZ6NveGidutn7VCbFIBIlew2vh9exSTPsuWuX++UPaw9xIH2uPJCJLBz+g1NTW43pWKfr52OK3a/c6Wvr52ODYtaYdL9KSSkz66qxK2dQAN/TztkXojtgWL/YUiwCJlrzv9OjRQ/l7XFwcysvLm0ypUCgUSElJEWR/PXv2VFvu5+en/N3Z2RkAkJcn/HUS58+fx5w5c/DJJ5+gd+/eKve5urrC0vLeBbwODg7w8fGBRCJRKWttuxisSat8/dstbJwTgJiUQkQl5uHloT5wsjLCf07cBgBseCUAAPDa5oa1gfeeT8PiCX74anZffPrzVViaSPDhC72wPzod+aUNb6hh4zrjUnIhUvPKINEXY0S3dni+nyeWR1zWzEE+JF/9dBn/XvIULt7KwbnrWZgzphucbU2x+eAVAMDmxaMAQDnN49eoZGwKHYE5Y7vh6KVUONuYYu28IbicmKtcni/s2d54/6UBCF57GEmZRcoe8YrKGpRwOghMjSXwdrMH0BBY3Jyt0a2DC4pKypGeo30XLWnCj7HZeGukD27lluFqdinGd3WErakEB+5etLxsZMOb+ydHkwA0rEv91kgffHMmFVeySpS93TW19SitrIGipg53GvWillXWQE8kalKua/53IQPvj++Ea9mluJJRgmd6OsPOzBB7Yxo+8L43riMAYNUvtwAAz/duhyyZAmkFDeelh5slpge44se7S+0pquuQnK86olWqqIGeWNSkXJdsPZOK8Oe64mpGCWLSijG5jysczA2xK7qhg+ejZxvC39t7rqGmrh5JUtVOm0J5Fapq61TK5w5pjysZMmQUVkCiL8agDnYY18MZ4Xf/LzTt/qkcdXV1cHBwwKFDh5rUMzdv+aJisVjcZPpmTU3TaUTNTR0xMLg34vJnB07jx/unzp07h8mTJ2P58uWYPXt2i234sx36+vpNymprWzfVjMGatMrPF9JhbWqIsPFd4GhphJuZMkz74hQyChpe1F1tVac2yCtr8OzaSIRP74XfVo6ErLwKhy5nYvWPV5R1TI30sXZmbzhbG0NRVYvEnFKEbI7CT1FpD/XYHrYf/0iAjbkR3prWF042prh2pwCTVv6MNGlDSHZzUH3B3H7sOsxNJJg/vgc+fmUwZOVV+CMuHe9sOaWsM298d0gM9LD97bEq2247eg1zP/+t7Q9Ky/Xq4oHfNt8b7lz56jisfHUctu0/j7nvbddgy7RHZGIBLIz0Mb2PC2xMJbhTUI7lB24o50w7NBqSH9fVEfp6YoQMbo+Qwe2V5bEZMiz+6fpDbbu2OXYjD5bGBpjV3wN2ZhIk58kRtjte2Uvv2GhtZT2xCK8FecHZ0gi1dfXIKK7AxsgU7L38eI88Hb6aC0sTA8wNag97c0Mk5pbh1W0xyL7b++xspf7i+ZaYSPTw7vjOcLQ0RGV1HVLy5Xh7zzUcuqJ9F813794dUqkUYrEYnp6eautIJBK1wdLOzg45OfeOSaFQICEhAd26qV/W9WE7c+YMpkyZgmXLlmHBggUPZZ8M1qR1vj+RhO9PJKm9b9InTa8Yvp1TisnrTjb7eGt+jMeaH+MFa9+j5Ntfr+DbX6+ovW/Ush+blP1rfyz+tT9WTe0GnV7eIljbdNGpS4kw7vmappuh9fbH52J/M0u5NQ7Lfyc8f3rs9t9q16Noz+WsJl/u8qcFO+JUbu+MzsTO6Oa/eVWdD37Vjh7WtrbrQgZ2NfMNlLP+fanFbTcdT8am46or0nx5NAlfHlX/PqZtgoKCEBgYiBdeeAGrVq2Cr68vpFIpjh07hqCgIPTv3x/u7u5QKBQ4ceIEunXrBmNjY5iYmGDw4MHYvn07Ro8eDTs7O6xbt05tj3VbSE5ORllZGbKzs1FdXY0rVxre6zp16gSJRIJTp05hypQpmD17NiZPnozc3IbXHD09PdjZtd33WDBYExERET2mRCIRdu/ejTVr1iA0NBR5eXlwcHBAQEAApk2bBgAICAhAcHAwZs+ejcLCQixbtgzLly9HWFgY0tLSMH36dJiammLx4sXIzn4432i8cOFCnDlzRnl78ODBABrmjHt4eGDHjh0oLy/H+vXrVZYEdHNzQ3x823W2iYqLi//yZJbw8HCNrBpBD5/PG82vYUytV5bzeA+1Cirn8emNbGv9g6drugk6o0zNChL098gfsKoJ/TVnlvZ9cCUSjHZcnkpERERE9IhjsCYiIiIirREWFgYXFxe1P9q+PDHnWBMRERGR1nj77bexcOFCtfc9aAlATWOwJiIiIiKtYW9vD3t7e00342/hVBAiIiIiIgEwWBMRERERCYDBmoiIiIhIAAzWREREREQCYLAmIiIiIhIAgzURERERkQAYrImIiIiIBMBgTUREREQkAAZrIiIiIiIBMFgTEREREQmAwZqIiIiISAAM1kREREREAmCwJiIiIiISAIM1EREREZEAGKyJiIiIiATAYE1EREREJAAGayIiIiIiATBYExEREREJgMGaiIiIiEgADNZERERERAJgsCYiIiIiEgCDNRERERGRABisiYiIiIgEwGBNRERERCQABmsiIiIiIgEwWBMRERERCYDBmoiIiIhIAPqabgBpN08fR003QScY+7tqugk6w8AgUNNN0Blnt0Rougk6w8R/gKaboDPMrc013QSiv4091kREREREAmCwJiIiIiISAIM1EREREZEAGKyJiIiIiATAYE1EREREJAAGayIiIiIiATBYExEREREJgMGaiIiIiEgADNZERERERAJgsCYiIiIiEgCDNRERERGRABisiYiIiIgEwGBNRERERCQABmsiIiIiIgEwWBMRERERCYDBmoiIiIhIAAzWREREREQCYLAmIiIiIhIAgzURERERkQAYrImIiIiIBMBgTUREREQkAAZrIiIiIiIBMFgTEREREQmAwZqIiIiISAAM1kREREREAmCwJiIiIiISAIM1EREREZEAGKyJiIiIiATAYE1EREREJAAGayIiIiIiATBYExEREREJgMGaiIiIiEgA+ppuAFFjz/VuhxmBbrAzM0RynhyfH01CbLpMbd1e7pYIGeoFdxsTGBmIkSOrxL7YbGyPSlepZyrRw/yg9hjeyR6WxgbILanEpshkHLuR9zAOSWMmdXfCtCdcYGMqwZ2CcqyPTMGVzBK1dQf72GBiNyf4OphBoi/GnYJybIvKwJnkQmUdPbEIM/q64qku9rAzM0R6UQW+PnUHF+4UP6xD0pgJ/o6Y3LMdbE0luFNYjk2n7iA+q1Rt3YHeNhjf1RE+9qaQ6ImRWliOiIuZOJdSpLb+UF9brHiqA86nFOGdX2625WE8Mgb08sYbM0egV2c3tHOwwpyV27D9QJSmm6V1gof74LUxneFoaYybmTK8E3EZ5xOaf10z0BNj8UQ/TB7gCScrY+SVKLDx4E18ezQBADBtYHtsmBvYZLt2s3ehsrquzY5D02YM9MC8Yd5wsDBEQk4pVu+9juj7XvvuF+hji50L+zUpH/7hCdyWygEAU/u545k+LujgZA6xSIRrmTKsO3gLF5PVvwaQ7mCwJq0ysrM9Fo/0wSeHExGbLsNzvdvh/6Z2w+RvLiC3pLJJ/fKqWuyMzsRtaRkU1XXo7maJ5aM7QFFTix8vZQFoCIPrX+iOUkU1lu+9DmlpJRzMDVFdq7tvEgAwrIMdXg9qj8+PJyM+swSTujvh06e7YOZ/L0NaWtWkfg9XS1xOl2Hz2TSUKGowspM91kzohNAfrirD+JwB7niyswM+PZqE1MJy9PWwxocTOmHB/+KRmCd/2If40AT52iJkkCf+72QKrmaVYoK/I8LHd0ZwRCykZU3PZfd2FojJkGHL+XSUKmowvKMdVo3piMU/XWsSxp0tDDFvoEezH3geV2YmhrielIUdv0Rh8+qZmm6OVpoU4I6PpvfG0q0XEZWQh+Dhvti1ZAj6Lz+IzIJytdt8t6A/XGxMsGhLNG7nlsLBwghGEj2VOvLKGjyx5IBKmS6H6nE9nfHeM35494eriE4uxIsDPfCf+X0xMjwSWUWKZrcb8VEkZOXVytsFZffeowJ9bPFLTDYuJV9DRXUtZgd5Yev8AIxZewp3dPi1kjgVhLTMCwFu+OVKDn6OzcadgnJ89lsS8ssq8Vyvdmrr38wpw9HrUiTnlyNLpsChq7k4n1yIHm6WyjoTujvBxsQAi3dfRVyGDNkyBeIyZLierb63UVdM7t0Oh65L8Ut8LlILK/B/J1JQKK/CpO7Oaut/FZmCiOhM3MgpQ2axAv85n44EaRkGedso6zzZ2QE7ojNwPqUI2bJK7LuSg/MpRZjyhPr/H13xXA9nHLmZh4PXpEgrqsCGP+6goLwK4/2d1NbfeOoOdl7Kwq3cMmTJFNh2IQOJeXIM8LJRqacnFuGdUb7Yci4d2SXNv4E/jo6cvo73NhzAT8diUVdfr+nmaKUFT3XE/04nY1vkbSRkleCtbZeQW6xA8DBftfWDujphiJ8jpqyLROS1HKTny3EpuQBnbkpV6tXX10MqU6j86LJXgrzwY1QGdp5Lw+3cMry/5xqkJZWYMcCzxe0KyiqRV3rvp+6+p+kb22Kw9dQdXMssQbJUjnd2x0NeWYMhnezb9mDaSEREBFxcXDTdDBXLli1DUFAQHB0d4e/vr+nmKLHHmrSGvliETs7m2H5edRpHVHIRurlaNrOVqg6OZujmaolvT91Rlg3pYIe4DBmWjvLFkA52kFVU49iNPGw5k4raOt18w9YXi9DB0Qw7L2aqlEenFqNrO/NWP46JgR5KK2uUtw30RKiqUe25qqypg387i3/WYC2mLxahg4MZdsdkqZRfSpPBz7n159LYQIxSRY1K2exAN+SUVuK3m3no4aq755CEZ6AnRndPG2w4qDp1KPJqNvr42qndZmxvV8SkFGLBU50wZWB7VFTV4vcrWVjzwxXI7/s7N5boIfbzCdATixCfVoTwPfGIT9XNKQwGeiJ0dbPEtyeSVcpP3cxD7/bWLW57YPEgSPTFSMwtw4YjiTiXVNBsXYmeGIb6epBVVDdbR1OqqqogkUgeuf3V1dVh2rRpuH79Oo4fPy5Ay4TBHmvSGlYmBtAXi1AoVx1aL5RXwdas5T/CXxb2w5llg7E1uDd+vJSJvZfvhSAXK2MM7+wAfT0R3th1BV+fTMGzvdrhtaFebXIc2sDSuOFcFpWrvogXllfDxqR1L2hPd3eCvbkhjly/N1/zQmoxnu/VDm7WxhABeMLdEoN9bGFr+vBelB82S2N96Kk5l0Xl1bAxMWjVY0z0d4S9mSGO3rp3Lnu7WSLI1w5fNnpDJ2oNW3ND6OuJkddopEMqU8DR0kjtNh72ZgjwtYefuxVe/uo0lm27iGHdnLFhToCyTmJOCV7ffAEzvvwDczadRWVVLQ6uGAEvR7M2PR5NsTaVQF9PjPxS1amG+aWVsDM3VLuNtESBd3ZfwfwtlzB/y0UkS8sQERKIvt42ausDwOKxHSGvqsGx+FxB2/93jB07FosWLcKKFSvg7e2NUaNGQSaTITQ0FD4+PnB1dcWYMWMQExMDADh16hRCQkIgl8thZWUFKysrhIeHAwD8/f2xfv36Jo+/dOlS5W1/f3+Eh4cjJCQE7u7umDNnDlJTU2FlZYV9+/Zh0qRJcHZ2RkBAAE6cONHq41i7di3mzZsHHx8ftff/2ct+9OhR9OnTB87Ozpg6dSpkMhn27duHXr16wd3dHXPnzkVFRcVfPY3NYo81aZ0mfcgi4EEjwXO3xsBYogd/Fwu8NswLmcUN00IAQCQCiuRV+PDXW6irb5g+YmVigLARPvi/32+3yTFoi8anTQSgvukZbmKIry1eHeyJVb8mIPe+N5yvTiTjzZE+2PpST9QDyCpW4NA1KUb7OQja7keCSM1zVY1B3jaYO8ADa44kKue2Wxjp480RPvjot0SUVda2bTtJpzV+bRSJRM2+XopFDX//c/91DqV3e06Xbb2EPW8Ohb3FJeSVKHAxqQAX7+t5vZCYj5NrnsKckR2wfPvltjoMjWt6HpuvmyyVI1l6b5705TvFcLUxwZyhXrhwu+kFj7OGtMcLA9wxY2MUyiprmtyvCbt378ZLL72EQ4cOob6+HlOmTIGFhQV27doFa2tr7NixAxMmTEB0dDQCAgIQHh6ODz74QBm2TU1N/9L+Nm3ahCVLliAyMhL1953sNWvWYPXq1Vi3bh3Wrl2L4OBgxMfHw8xMmA9ylZWV2LBhA7777jtUVVVh5syZeOmll2BoaIitW7eisLAQL774IjZv3oyFCxcKsk+dDNZffPEFFArdnhPW1pYvX/7Q91lcXo2auvomvZ82JpImvdiNZd2dA3g7Tw4bUwnmDvZUBuuCsirU1NWrzH9LyS+HsUQPViYGKC7XvqG5f0pW0XAuG/eoWpsYNOl5bWyIry3eecoXHx5OVFkRpOFxa/DO/puQ6IlgYWyA/LIqzB/kgWxZ0wtLdYWsoga1dfWwbnwujR98Lgd52+CtkT745GiSyoog7W1NYGcmwdpJXZRlf76R/xYSiOCIWGQU8zWMmldQWoma2jo4NOqdtrcwhLSZ+fq5MgWyiyqUoRoAErIaLpp1tTVp0vsNAHX19YhNKYSXY+unPT1KiuRVqKmtg72Fau+0rZlhk17slsSmFmF8z6bXmswa0h6Lx3TEy99EIS5Ne1ZPcnd3x4cffggAOHnyJOLj45GUlARjY2MAwIoVK3D48GHs2rULoaGhsLCwgEgkgqOj49/aX//+/REaGqq8nZqaCgBYsGABRo8eDQBYuXIldu7cifj4ePTr13TVlb+jpqYGn332GXx9G647eO6557Bp0yYkJibC1tYWADBmzBicPn2awbolCoVCI8GQ/pmaunrczC5FgJc1fr95b8i8b3trnLjZ+mXxxKKG+Yd/isuQYZSf493e2gbuNsaoqKrVyVANNJzLhNwyPOFhhcjEe71PT3hY4WRi8/MAh3awxdtP+eKjw4kt1quqrUd+WRX0xCIM9rXFiVv5grZfm9TU1SNBWobeblb4I+neB43ebpb4Q03v1J+G+Nhi2d1Q3bjerdwyzI6IVSkL7ucOM0N9fBWZjBw1K+AQ3a+6tg5xdwoR1NUJ+6PvXZcypKsTfonOULtNVEIeJvRxg6mhvnJOtY9TQ2BOz29+pYoubla4lq49oVBI1bX1uJouw8COdjgYm60sH9jRDofjclr9OF1cLCFt9Hc7O6g9Fo3piFnfXNC6ZfZ69Oih/D0uLg7l5eVNplQoFAqkpKQIsr+ePXuqLffz81P+7uzccGF9Xp5wy+AaGhoqQzUAODg4wNHRURmq/yy7deuWYPvUyWBNj64dUelYNbEzrmWVIi5dhmd7tYO9uSH23J0z/f74Tg3/Hmi4YGfyEy7IKlYg9e7SUj3dLTE90A17Lt2bY73nUhaef8IFi5/0wQ8XM+FsZYS5g9vjx0uZ0GW7L2XhndG+uJFThqtZJZjYzQm2phLsu/tm8fZTDS82Hx1OBAAM62iHFU/5YtMfdxCXUaLs7a6uq1dedNfZyQz2ZhIk5slhb2aIWf3cIIYI/7uo2+fyx9hsvDXSB7dyy3A1uxTjuzrC1lSCA1cbzuWykQ1vSJ8cTQLQsC71WyN98M2ZVFzJKlH2dtfU1qO0sgaKmjrcKVSd01dWWQM9kahJ+ePK1FgCb7eGFRTEIhHcnK3RrYMLikrKkZ6jXSFFUzYdvoV/zQvE5eQCXEjMx8tDfeBkZYzvjzf8TW+6ux71gm/PAwD2nEvFkol+WD8nAJ/8FA9LEwk+mtEL+y6kKXtnl07qiou385GcUwpzYwPMfbIj/NyssPS/0Zo5yIdgc2QyPp/RE3GpxbiYUoQZAzzgaGmEiDMNvarrpjeE0MV3PwwHD2mPjMJyJOSUwUBPhKefcMWobk6Y9++LysecO8wLS8Z2Qti2GKRI5bC/O19bUV3b5CJmTbh/KkddXR0cHBxw6NChJvXMzVseqRCLxSpTO4CGXuKW9nc/A4N7I4Giu8N2jR/vn9DXV425IpFIbVldnXDLSTJYk1Y5eiMPliYGCB7gATszCW7nyfHGzivKHjynRsOeeiIRFg7zohExPAAAIABJREFUgrOlEWrr6pFRXIGNJ5JVgnVuaSUW7riCsJHe2P7KEyiQV+FAXDb+fTr1oR7bw3Y8IR8WxvqYGeAKW1MJUgrKseyn68o5046NLsyZ2M0J+npivD7UC6/fd2FnTLoMoT9cBQBI9MV4ZYAHnC2NUFFdi/MpRVhzSPfnCUcmFsDCSB/T+9z7sp3lB24o50w7NLq4dlxXR+jriREyuD1CBrdXlsdmyLD4p+sPte2Pql5dPPDb5ntDxytfHYeVr47Dtv3nMfe97Rpsmfb4OSoNNmYSLJ7gB0crY9zIkGHqupPIuNvR4GJrolJfXlmDZz45gY9f7I1j74+CTF6Fg5czsHp3nLKOpYkBvpjVFw6WRiipqEZ8ahHGfXQMl5v5shRd8EtMNqxMJVj4pC/sLQ2RkF2KWd9cQGZRw4dcF2tjlfoGemK8PbELnCyNoKiuRUJOKV7+5gIir99btnDmQE9I9MXYOKu3yrY/RqVjyY44aJPu3btDKpVCLBbD09NTbR2JRILa2qav83Z2dsjJudezr1AokJCQgG7durVVc7UegzVpnR8vZSm/3KWx+dtVh8//F52B/zUz7Hm/q1klmP3fGEHa9yj5OS4HPzcznPlnWG7utjpxGSWY+RieRwDYH5+L/c1c0d84LP+d8PzpMd2+kPavOnUpEcY9X9N0M7Telt+TsOX3JLX3TQxvugRZUk4pnlsb2ezjrdgRgxU7Hr+/8e2nU7G9mc6WqRvOqdz+5vhtfHO85b/Xgau1Z/m3BwkKCkJgYCBeeOEFrFq1Cr6+vpBKpTh27BiCgoLQv39/uLu7Q6FQ4MSJE+jWrRuMjY1hYmKCwYMHY/v27Rg9ejTs7Oywbt06tT3WbSE5ORllZWXIzs5GdXU1rly5AgDo1KnTQ10+sDEGayIiIqLHlEgkwu7du7FmzRqEhoYiLy8PDg4OCAgIwLRp0wAAAQEBCA4OxuzZs1FYWIhly5Zh+fLlCAsLQ1paGqZPnw5TU1MsXrwY2dnZD9ijMBYuXIgzZ84obw8ePBhAw5xxDw+Ph9IGdUTFxcV/eTJLeHi4Vl8cqO3te5SM2PD49Vy0BWPj1q13TA9mYMDl94VydkuEppugM0z8B2i6CTrD3Fo3VyDRlLjVgzTdhMcK36GIiIiIiATAYE1EREREWiMsLAwuLi5qf8LCwjTdvBZxjjURERERaY2333672S9sedASgJrGYE1EREREWsPe3h729vaabsbfwqkgREREREQCYLAmIiIiIhIAgzURERERkQAYrImIiIiIBMBgTUREREQkAAZrIiIiIiIBMFgTEREREQmAwZqIiIiISAAM1kREREREAmCwJiIiIiISAIM1EREREZEAGKyJiIiIiATAYE1EREREJAAGayIiIiIiATBYExEREREJgMGaiIiIiEgADNZERERERAJgsCYiIiIiEgCDNRERERGRABisiYiIiIgEwGBNRERERCQABmsiIiIiIgEwWBMRERERCYDBmoiIiIhIAAzWREREREQCYLAmIiIiIhIAgzURERERkQD0Nd0A0m550jJNN0EnWFoZa7oJOsPIiC9bQjHxH6DpJuiM8vgzmm6Czih399d0E4j+NvZYExEREREJgMGaiIiIiEgADNZERERERAJgsCYiIiIiEgCDNRERERGRABisiYiIiIgEwGBNRERERCQABmsiIiIiIgEwWBMRERERCYDBmoiIiIhIAAzWREREREQCYLAmIiIiIhIAgzURERERkQAYrImIiIiIBMBgTUREREQkAAZrIiIiIiIBMFgTEREREQmAwZqIiIiISAAM1kREREREAtD/OxsZGRkhPDxc6LYIJi0tTdNNICIiIqLHzN8K1mFhYUK3Q1DaHPqJiIiISDdxKggRERERkQAYrImIiIiIBMBgTUREREQkAAZrIiIiIiIBMFgTEREREQmAwZqIiIiISAAM1kREREREAmCwJiIiIiISAIM1EREREZEAGKyJiIiIiATAYE1EREREJAAGayIiIiIiAehrugFEjc0Y6IF5w7zhYGGIhJxSrN57HdHJhWrrBvrYYufCfk3Kh394ArelcgDA1H7ueKaPCzo4mUMsEuFapgzrDt7CxeSiNj0ObTC5jwteHuABOzMJbufJ8emhRMSkFT9wu57ultj8ci/cyS/Hs5uilOXe9qZ4dagXOjubw9XGGP86kYyvI1Pa8hC0xrO92mFGgCtszQyRkifHF8duIzZDprZuTzdLLAhqDw9bExjqi5FTUon9sdmIuJChtv6TXezxwcQuOJ1UgMU/XG3Lw9AKwcN98NqYznC0NMbNTBneibiM8wl5zdY30BNj8UQ/TB7gCScrY+SVKLDx4E18ezQBADBtYHtsmBvYZLt2s3ehsrquzY7jUTGglzfemDkCvTq7oZ2DFeas3IbtB6IevOFjZO7oLgh7ujucrE1wPa0Ib/77LM5cz1Fb99vXg/Di8I5NyuWKathN2dLqOqSbGKxJq4zr6Yz3nvHDuz9cRXRyIV4c6IH/zO+LkeGRyCpSNLvdiI8iISuvVt4uKKtU/h7oY4tfYrJxKfkaKqprMTvIC1vnB2DM2lO4kydvw6PRrFF+DnhzdAd89OstxKQWY0pfV2ya0R1PbzyPHFlls9uZG+ljzdN+uJBSBAdzQ5X7jAzEyCquwO83pHhtmHdbH4LWGNHZHotGeOPTI4mIyyjBs73a4Ysp/pj6XTRyS5qey4rqWuy+mImkPDkU1XXo7mqBt57qAEVNHfZczlKp287KCAuHerfqA48umBTgjo+m98bSrRcRlZCH4OG+2LVkCPovP4jMgnK123y3oD9cbEywaEs0bueWwsHCCEYSPZU68soaPLHkgEoZQ3UDMxNDXE/Kwo5forB59UxNN0frPDfQG5+90h+hX5/G2Rs5mDfaDz+vHINer+1Gen5Zk/pLNp/Fu1tVP5gc/3giTt8XxFtT51ESERGBN998E5mZmZpuCgAgPj4eX375Jc6fP4+CggK4urpi5syZeO211yAWa3YyBqeCkFZ5JcgLP0ZlYOe5NNzOLcP7e65BWlKJGQM8W9yuoKwSeaX3furq7933xrYYbD11B9cyS5AsleOd3fGQV9ZgSCf7tj0YDXuxvzv2x2Zj76UspOSX4+ODCcgrq8LkPq4tbrdqYmfsj8tGXHrT3thrWaX4/LckHIrPhaK6tq2arnWm9XXFL/G52BeXgzsF5Vh3NAkFZZV4tmc7tfVv5pTh6I08pOSXI1umwOFrUpxPKUQPN0uVenpiET6Y2Bn/+iMFmcXNf3DUJQue6oj/nU7GtsjbSMgqwVvbLiG3WIHgYb5q6wd1dcIQP0dMWReJyGs5SM+X41JyAc7clKrUq6+vh1SmUPmhBkdOX8d7Gw7gp2OxqKuvf/AGj5nXJ/pj2/EEfH/0Jm5lFGPRd2eQU1SOOaO7qK1fUl6F3OIK5Y+XkwW8nC3x/W83/lIdbVFVVfXI7S82Nha2trb4+uuvcf78eSxfvhyffvopvvjiCwFa+M8wWJPWMNAToaubJU7dUh0SPnUzD73bW7e47YHFg3Bh9QhEhASin49ti3UlemIY6utBVlHdYr1Hmb6eCJ2dzXEuSXUKzbnbhejeKNzdb3IfF9iaSfDdycdjekdr6ItF6ORkjqgU1XMZlVIEf1eLVj1GB0czdHOxxOVGvdKvDmmP7GIFDsbnCtZebWagJ0Z3TxuciFfttYu8mo0+vnZqtxnb2xUxKYVY8FQnxH85ERc+HYfwGb1gaqg64Gos0UPs5xMQ/+VE7Fg0GP4eLb9mEAGAgb4YPb3t8XuM6jStY7EZCOzk2KrHmPVkZ1xLLcT5m83/HbemzsMyduxYLFq0CCtWrIC3tzdGjRoFmUyG0NBQ+Pj4wNXVFWPGjEFMTAwA4NSpUwgJCYFcLoeVlRWsrKwQHh4OAPD398f69eubPP7SpUuVt/39/REeHo6QkBC4u7tjzpw5SE1NhZWVFfbt24dJkybB2dkZAQEBOHHiRKuO4cUXX8Snn36KQYMGwdPTE88++yyCg4Oxf/9+ZZ2IiAi4uLjg6NGj6NOnD5ydnTF16lTIZDLs27cPvXr1gru7O+bOnYuKiop/elqVGKxJa1ibSqCvJ0Z+qerQen5pJewaTUn4k7REgXd2X8H8LZcwf8tFJEvLEBESiL7eNs3uZ/HYjpBX1eCYDocZaxMD6OuJUSBX7RkoLKuCnZlE7TY+DqaYH+SFt/dcU+nxf9xZmRhAXyxCoVz1g1ihvBq2purP5Z8OhATi1NJB+M/LvbDnchZ+islW3hfQ3hojOtvjkyOJbdJubWRrbgh9PTHySlR7k6UyBRwtjdRu42FvhgBfe/i5W+Hlr05j2baLGNbNGRvmBCjrJOaU4PXNFzDjyz8wZ9NZVFbV4uCKEfByNGvT46FHn52FEfT1xMgtVg1W0uJyOFqbPHB7CxMJnhng1WJPdGvqPGy7d+9GfX09Dh06hK+//hpTpkxBdnY2du3ahT/++AP9+/fHhAkTkJOTg4CAAISHh8PExAS3bt3CrVu3sHDhwr+0v02bNqFDhw6IjIzEypUrleVr1qzBvHnzcPr0afTs2RPBwcEoK2s6/aY1SktLYWVlpVJWWVmJDRs24LvvvsO+ffsQGxuLl156CTt27MDWrVuxfft2HDlyBJs3b/5b+1SHc6zb0BdffAGF4tEcjly+fLnG9t14pFIkar5uslSOZOm9edKX7xTD1cYEc4Z64cLtphc8zhrSHi8McMeMjVEoq6wRqslaq8mor0hNGRpGCz59vis+P5L42ExJ+MvUncsHbDJ3eyxMJHro2s4cIUO9kCWrwKGrUlga6+PdsR2xcv8NlCp0/3nYWNO/cZHa5yUAiEVAPeox91/nUHp3lGnZ1kvY8+ZQ2FtcQl6JAheTCnAxqUC5zYXEfJxc8xTmjOyA5dsvt9VhkE5RfQKKIEJ9K6bNTAvyhZ5YhB2RzX9Abk2dh83d3R0ffvghAODkyZOIj49HUlISjI2NAQArVqzA4cOHsWvXLoSGhsLCwgIikQiOjq3rxW+sf//+CA0NVd5OTU0FACxYsACjR48GAKxcuRI7d+5EfHw8+vVruihBS2JjY7Fjxw58++23KuU1NTX47LPP4OvbMNXsueeew6ZNm5CYmAhb24bR7TFjxuD06dN/+cNCcxis25BCodBoQH3UFMmrUFNbB3sL1d5pWzPDJr3YLYlNLcJ4NXNfZw1pj8VjOuLlb6IQp+MXihWVV6Omtq5J77SNqaRJLzYA2JsbwtvBDKsmdcaqSZ0BAGKRCGKxCJdWDsVrEXE4p+aDyuOguLwaNXX1sDEzUCm3MTFAoZpzeb/su/N8b+fJYWMqwSsDPXHoqhTe9qawNzfE+mndlXXFdz9Anlk2GNO+i0ZaoXBDk9qioLQSNbV1cGjUO21vYQhpifoPdLkyBbKLKpShGgASskoAAK62Jk16vwGgrr4esSmF8HI0F7D1pIvySxSoqa2Do5Vq77S9lTGkxQ/+G5w1shN+PpeCorLm36NaU+dh69Gjh/L3uLg4lJeXw8fHR6WOQqFASoow0wJ79uypttzPz0/5u7OzMwAgL6/5FYLUSUxMxJQpU/Dqq69i4sSJKvcZGhoqQzUAODg4wNHRURmq/yy7devWX9pnSxisSWtU19bjaroMAzva4WDsvSHzgR3tcDiu9VdSd3GxhLTRSg2zg9pj0ZiOmPXNhcdimb2a2nrcyC5FoLcNjl6/d5FXPy8bHLshbVJfWlKJZzeeVymb3McVgd42WLTzymPdi11TV4+bOaUI8LTG8Zv5yvK+7a1x4r7bDyIWiSDRa5h9dz27FNO+i1a5f/6Q9jA30sfaI4nI0tHzXV1bh7g7hQjq6oT90enK8iFdnfBLtPqlCKMS8jChjxtMDfUhvzvK5OPUEJjT85tf1aeLmxWupev2B2j656pr6hBzOw/Derhi79lkZfnw7i74+VzLofIJX3t097LD0n+f/Ud1NMHU1FT5e11dHRwcHHDo0KEm9czNW/5wKhaLm/Ts19Q0HYW7f3/3MzC412Ehujs83ZqRgj8lJCRg/PjxeOaZZ/D+++83uV9fXzXmikQitWV1dcKtIMRgTVplc2QyPp/RE3GpxbiYUoQZAzzgaGmEiDMNw0brpjd8yl4cEQsACB7SHhmF5UjIKYOBnghPP+GKUd2cMO/fF5WPOXeYF5aM7YSwbTFIkcphf3e+tqK6VqeH4bedTcOHz/jhamYJYtOK8XwfV9ibS/BDdMNySWuebrjifcVP11FTV48kqWpIKZRXobqmTqVcX08Eb/uGF0iJvhh2ZhJ0dDJDeVUt0nWwh/VP/7uQgffHd8K17FJcySjBMz2dYWdmiL0xDUvnvTeuYb3aVb809Ho837sdsmQKpBU0nJMebpaYHuCKH+8utaeorkNyvurScqWKGuiJRU3Kdc2mw7fwr3mBuJxcgAuJ+Xh5qA+crIzx/fGGYfJNd9ejXvBtwwe9PedSsWSiH9bPCcAnP8XD0kSCj2b0wr4LacqRrKWTuuLi7Xwk55TC3NgAc5/sCD83Kyz9b7T6RjxmTI0l8HZrWAVJLBLBzdka3Tq4oKikHOk5ut/R8CBf7YvHv98YiouJUpy7kYM5T3WBs40pNh++DgDY/MZQAMArX6peWBc8qjMSM4tx6mp2k8f8K3U0rXv37pBKpRCLxfD09FRbRyKRoLa26UpQdnZ2yMm51/GlUCiQkJCAbt26tVVzlW7evIkJEyZg0qRJyosptQGDNWmVX2KyYWUqwcInfWFvaYiE7FLM+uYCMosaAoqLtbFKfQM9Md6e2AVOlkZQVNciIacUL39zAZH39dLOHOgJib4YG2f1Vtn2x6h0LNkR1/YHpSFHrklhaWKAOYM9YW9uiCRpGUIi4pTTE5yauVisJQ7mhtj96r2LxtxtTfB8H1dEpxThlf/o7lzWYzfyYGlsgFn9G75sJzlPjrDd8ci5OzLiaKF6LvXEIrwW5AVnSyPU1tUjo7gCGyNTsLfRGtaPo5+j0mBjJsHiCX5wtDLGjQwZpq47iYy7a1i72KoOycsra/DMJyfw8Yu9cez9UZDJq3DwcgZW7773t2tpYoAvZvWFg6URSiqqEZ9ahHEfHcPlZr5Y6nHTq4sHftt8b37rylfHYeWr47Bt/3nMfW+7BlumHX48fRs25oZ46/lecLIxwbXUQkxafQhpeQ0X0bnZNb0I1szYAM8P9EH4rkvNPm5r6miDoKAgBAYG4oUXXsCqVavg6+sLqVSKY8eOISgoCP3794e7uzsUCgVOnDiBbt26wdjYGCYmJhg8eDC2b9+O0aNHw87ODuvWrVPbYy20GzduYMKECRg0aBAWL16M3Nx7ixH83XngQmGwJq2z/XQqtp9OVXvf1A3nVG5/c/w2vjl+u8XHG7j6uGBte9Tsjs7E7mj1C/o/KAh/HZnS5FsVs4oV6P7e74K171Gy53JWky93+dOCRh/QdkZnYmcz5705H/wq3Bw/bbfl9yRs+T1J7X0Tw5v+vSbllOK5tZHNPt6KHTFYsSNGqObpnFOXEmHc8zVNN0OrfXvoOr49dF3tfaNWHGhSVlZRDfupLX+DYmvqaAORSITdu3djzZo1CA0NRV5eHhwcHBAQEIBp06YBAAICAhAcHIzZs2ejsLAQy5Ytw/LlyxEWFoa0tDRMnz4dpqamWLx4MbKz2753/ueff0ZeXh727t2LvXv3qtxXXKzZKWCi4uJinVtYKzw8XCsuGtSWdvwT3Vee0nQTdIKllfGDK1GrGBmxP0AoSTfYgy6U8vgzmm6C7nD313QLdErO1qmabsJjhetYExEREREJgMGaiIiIiLRGWFgYXFxc1P6EhYVpunkt4pgqEREREWmNt99+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+rUKURGRuLatWuwsrJCcHAwevfuLX99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tfLuAj336JmovLtAL5kfHFDeXaCXTIj6rby7QC/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 }