Skip to content

Instantly share code, notes, and snippets.

@firmai
Last active October 14, 2022 09:31
Show Gist options
  • Save firmai/a4c9cc8667311204f41d5a4a702a0005 to your computer and use it in GitHub Desktop.
Save firmai/a4c9cc8667311204f41d5a4a702a0005 to your computer and use it in GitHub Desktop.
Decesion Tree Regression (HW2).ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/firmai/a4c9cc8667311204f41d5a4a702a0005/01_decision_trees.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "su65C3O5ZDur"
},
"source": [
"# How to use decision trees to predict equity returns and price moves"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mNQBuG5ZZDuw"
},
"source": [
"In this notebook, we illustrate how to use tree-based models to gain insight and make predictions. \n",
"\n",
"To demonstrate regression trees we predict returns, and for the classification case, we return to the example of positive and negative asset price moves."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9Gsz8G7AZDuy"
},
"source": [
"## Imports & Settings"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:25.352734Z",
"start_time": "2021-04-16T00:32:25.350697Z"
},
"id": "WKdqCz6ZZDu0"
},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:26.702500Z",
"start_time": "2021-04-16T00:32:25.552972Z"
},
"id": "ml-Oh0CMZDu3"
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import os, sys\n",
"from pathlib import Path\n",
"\n",
"import numpy as np\n",
"from scipy.stats import spearmanr\n",
"import pandas as pd\n",
"\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.ticker import FuncFormatter\n",
"from matplotlib import cm\n",
"import seaborn as sns\n",
"\n",
"from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor, export_graphviz, _tree\n",
"from sklearn.linear_model import LinearRegression, LogisticRegression\n",
"from sklearn.model_selection import train_test_split, GridSearchCV, learning_curve\n",
"from sklearn.metrics import roc_auc_score, roc_curve, mean_squared_error, make_scorer\n",
"import graphviz\n",
"\n",
"import statsmodels.api as sm"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:26.708683Z",
"start_time": "2021-04-16T00:32:26.703952Z"
},
"id": "zzFVDCnXZDu7"
},
"outputs": [],
"source": [
"sys.path.insert(1, os.path.join(sys.path[0], '..'))\n",
"\n",
"import numpy as np\n",
"np.random.seed(42)\n",
"\n",
"def format_time(t):\n",
" \"\"\"Return a formatted time string 'HH:MM:SS\n",
" based on a numeric time() value\"\"\"\n",
" m, s = divmod(t, 60)\n",
" h, m = divmod(m, 60)\n",
" return f'{h:0>2.0f}:{m:0>2.0f}:{s:0>2.0f}'\n",
"\n",
"# Don't pay too much attention to this piece of code yet\n",
"# .. we will look more into cross validation methods in the future.\n",
"class MultipleTimeSeriesCV:\n",
" \"\"\"Generates tuples of train_idx, test_idx pairs\n",
" Assumes the MultiIndex contains levels 'symbol' and 'date'\n",
" purges overlapping outcomes\"\"\"\n",
"\n",
" def __init__(self,\n",
" n_splits=3,\n",
" train_period_length=126,\n",
" test_period_length=21,\n",
" lookahead=None,\n",
" date_idx='date',\n",
" shuffle=False):\n",
" self.n_splits = n_splits\n",
" self.lookahead = lookahead\n",
" self.test_length = test_period_length\n",
" self.train_length = train_period_length\n",
" self.shuffle = shuffle\n",
" self.date_idx = date_idx\n",
"\n",
" def split(self, X, y=None, groups=None):\n",
" unique_dates = X.index.get_level_values(self.date_idx).unique()\n",
" days = sorted(unique_dates, reverse=True)\n",
" split_idx = []\n",
" for i in range(self.n_splits):\n",
" test_end_idx = i * self.test_length\n",
" test_start_idx = test_end_idx + self.test_length\n",
" train_end_idx = test_start_idx + self.lookahead - 1\n",
" train_start_idx = train_end_idx + self.train_length + self.lookahead - 1\n",
" split_idx.append([train_start_idx, train_end_idx,\n",
" test_start_idx, test_end_idx])\n",
"\n",
" dates = X.reset_index()[[self.date_idx]]\n",
" for train_start, train_end, test_start, test_end in split_idx:\n",
"\n",
" train_idx = dates[(dates[self.date_idx] > days[train_start])\n",
" & (dates[self.date_idx] <= days[train_end])].index\n",
" test_idx = dates[(dates[self.date_idx] > days[test_start])\n",
" & (dates[self.date_idx] <= days[test_end])].index\n",
" if self.shuffle:\n",
" np.random.shuffle(list(train_idx))\n",
" yield train_idx.to_numpy(), test_idx.to_numpy()\n",
"\n",
" def get_n_splits(self, X, y, groups=None):\n",
" return self.n_splits"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:26.721121Z",
"start_time": "2021-04-16T00:32:26.709927Z"
},
"id": "b8dIEObMZDu-"
},
"outputs": [],
"source": [
"sns.set_style('white')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:26.730830Z",
"start_time": "2021-04-16T00:32:26.722176Z"
},
"id": "SZ53r0TbZDu_"
},
"outputs": [],
"source": [
"results_path = Path('results', 'decision_trees')\n",
"if not results_path.exists():\n",
" results_path.mkdir(parents=True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QmnvurmdZDvB"
},
"source": [
"## Load Model Data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MhF6xQYfZDvD"
},
"source": [
"We use a simplified version of the data set constructed in Chapter 4, Alpha factor research. It consists of daily stock prices provided by Quandl for the 2010-2017 period and various engineered features. The details can be found in the notebook [data_prep](00_data_prep.ipynb) in the GitHub repo for this chapter."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "afnYWl7UZDvF"
},
"source": [
"The decision tree models in this chapter are not equipped to handle missing or categorical variables, so we will apply dummy encoding to the latter after dropping any of the former."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:30.995569Z",
"start_time": "2021-04-16T00:32:30.805133Z"
},
"scrolled": true,
"id": "U_g_q7HoZDvH"
},
"outputs": [],
"source": [
"data = pd.read_csv(\"https://open-data.s3.filebase.com/equities_monthly.csv\")"
]
},
{
"cell_type": "code",
"source": [
"data = data.set_index([\"ticker\",\"date\"])"
],
"metadata": {
"id": "FCmbwHLinZ1j"
},
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"source": [
"data.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 418
},
"id": "4gFErwwMnVlu",
"outputId": "d9773d44-37a5-455e-c0e1-9910a9022c3e"
},
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" atr bb_down bb_high bb_low bb_mid bb_up \\\n",
"ticker date \n",
"A 2006-12-31 -0.442397 0.072112 3.223450 3.137767 3.180609 0.013571 \n",
" 2007-01-31 -0.520562 0.016425 3.207382 3.111725 3.159553 0.079232 \n",
" 2007-02-28 -0.464587 0.008895 3.177726 3.111756 3.144741 0.057075 \n",
" 2007-03-31 -0.497099 0.099084 3.191225 3.078332 3.134779 0.013810 \n",
" 2007-04-30 -0.552364 0.007060 3.234956 3.189514 3.212235 0.038382 \n",
"\n",
" macd natr rsi sector ... \\\n",
"ticker date ... \n",
"A 2006-12-31 0.188915 2.037431 60.772801 Capital Goods ... \n",
" 2007-01-31 -0.366521 1.886539 35.388712 Capital Goods ... \n",
" 2007-02-28 -0.116034 2.141267 39.517738 Capital Goods ... \n",
" 2007-03-31 0.196264 1.886661 65.552439 Capital Goods ... \n",
" 2007-04-30 0.234341 1.630554 48.928443 Capital Goods ... \n",
"\n",
" RMW CMA momentum_3 momentum_6 momentum_3_6 \\\n",
"ticker date \n",
"A 2006-12-31 -1.374298 1.620554 -0.072978 -0.077871 -0.004893 \n",
" 2007-01-31 -1.418516 1.654243 0.046866 0.101630 0.054764 \n",
" 2007-02-28 -1.618912 1.469760 0.006869 0.005676 -0.001193 \n",
" 2007-03-31 -2.336146 0.682374 -0.072323 -0.056068 0.016255 \n",
" 2007-04-30 -2.304566 0.665849 0.003918 -0.026027 -0.029945 \n",
"\n",
" momentum_12 momentum_3_12 year month target \n",
"ticker date \n",
"A 2006-12-31 -0.090712 -0.017733 2006 12 -0.081779 \n",
" 2007-01-31 0.076960 0.030093 2007 1 -0.007812 \n",
" 2007-02-28 -0.002602 -0.009471 2007 2 0.061102 \n",
" 2007-03-31 -0.070101 0.002222 2007 3 0.020184 \n",
" 2007-04-30 -0.029424 -0.033342 2007 4 0.110562 \n",
"\n",
"[5 rows x 27 columns]"
],
"text/html": [
"\n",
" <div id=\"df-e45b18b2-fff9-48db-bbf9-f4c5053538c0\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>atr</th>\n",
" <th>bb_down</th>\n",
" <th>bb_high</th>\n",
" <th>bb_low</th>\n",
" <th>bb_mid</th>\n",
" <th>bb_up</th>\n",
" <th>macd</th>\n",
" <th>natr</th>\n",
" <th>rsi</th>\n",
" <th>sector</th>\n",
" <th>...</th>\n",
" <th>RMW</th>\n",
" <th>CMA</th>\n",
" <th>momentum_3</th>\n",
" <th>momentum_6</th>\n",
" <th>momentum_3_6</th>\n",
" <th>momentum_12</th>\n",
" <th>momentum_3_12</th>\n",
" <th>year</th>\n",
" <th>month</th>\n",
" <th>target</th>\n",
" </tr>\n",
" <tr>\n",
" <th>ticker</th>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">A</th>\n",
" <th>2006-12-31</th>\n",
" <td>-0.442397</td>\n",
" <td>0.072112</td>\n",
" <td>3.223450</td>\n",
" <td>3.137767</td>\n",
" <td>3.180609</td>\n",
" <td>0.013571</td>\n",
" <td>0.188915</td>\n",
" <td>2.037431</td>\n",
" <td>60.772801</td>\n",
" <td>Capital Goods</td>\n",
" <td>...</td>\n",
" <td>-1.374298</td>\n",
" <td>1.620554</td>\n",
" <td>-0.072978</td>\n",
" <td>-0.077871</td>\n",
" <td>-0.004893</td>\n",
" <td>-0.090712</td>\n",
" <td>-0.017733</td>\n",
" <td>2006</td>\n",
" <td>12</td>\n",
" <td>-0.081779</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007-01-31</th>\n",
" <td>-0.520562</td>\n",
" <td>0.016425</td>\n",
" <td>3.207382</td>\n",
" <td>3.111725</td>\n",
" <td>3.159553</td>\n",
" <td>0.079232</td>\n",
" <td>-0.366521</td>\n",
" <td>1.886539</td>\n",
" <td>35.388712</td>\n",
" <td>Capital Goods</td>\n",
" <td>...</td>\n",
" <td>-1.418516</td>\n",
" <td>1.654243</td>\n",
" <td>0.046866</td>\n",
" <td>0.101630</td>\n",
" <td>0.054764</td>\n",
" <td>0.076960</td>\n",
" <td>0.030093</td>\n",
" <td>2007</td>\n",
" <td>1</td>\n",
" <td>-0.007812</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007-02-28</th>\n",
" <td>-0.464587</td>\n",
" <td>0.008895</td>\n",
" <td>3.177726</td>\n",
" <td>3.111756</td>\n",
" <td>3.144741</td>\n",
" <td>0.057075</td>\n",
" <td>-0.116034</td>\n",
" <td>2.141267</td>\n",
" <td>39.517738</td>\n",
" <td>Capital Goods</td>\n",
" <td>...</td>\n",
" <td>-1.618912</td>\n",
" <td>1.469760</td>\n",
" <td>0.006869</td>\n",
" <td>0.005676</td>\n",
" <td>-0.001193</td>\n",
" <td>-0.002602</td>\n",
" <td>-0.009471</td>\n",
" <td>2007</td>\n",
" <td>2</td>\n",
" <td>0.061102</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007-03-31</th>\n",
" <td>-0.497099</td>\n",
" <td>0.099084</td>\n",
" <td>3.191225</td>\n",
" <td>3.078332</td>\n",
" <td>3.134779</td>\n",
" <td>0.013810</td>\n",
" <td>0.196264</td>\n",
" <td>1.886661</td>\n",
" <td>65.552439</td>\n",
" <td>Capital Goods</td>\n",
" <td>...</td>\n",
" <td>-2.336146</td>\n",
" <td>0.682374</td>\n",
" <td>-0.072323</td>\n",
" <td>-0.056068</td>\n",
" <td>0.016255</td>\n",
" <td>-0.070101</td>\n",
" <td>0.002222</td>\n",
" <td>2007</td>\n",
" <td>3</td>\n",
" <td>0.020184</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2007-04-30</th>\n",
" <td>-0.552364</td>\n",
" <td>0.007060</td>\n",
" <td>3.234956</td>\n",
" <td>3.189514</td>\n",
" <td>3.212235</td>\n",
" <td>0.038382</td>\n",
" <td>0.234341</td>\n",
" <td>1.630554</td>\n",
" <td>48.928443</td>\n",
" <td>Capital Goods</td>\n",
" <td>...</td>\n",
" <td>-2.304566</td>\n",
" <td>0.665849</td>\n",
" <td>0.003918</td>\n",
" <td>-0.026027</td>\n",
" <td>-0.029945</td>\n",
" <td>-0.029424</td>\n",
" <td>-0.033342</td>\n",
" <td>2007</td>\n",
" <td>4</td>\n",
" <td>0.110562</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 27 columns</p>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-e45b18b2-fff9-48db-bbf9-f4c5053538c0')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-e45b18b2-fff9-48db-bbf9-f4c5053538c0 button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-e45b18b2-fff9-48db-bbf9-f4c5053538c0');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
]
},
"metadata": {},
"execution_count": 8
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zMqnrU6YZDvJ"
},
"source": [
"## Simple Regression Tree with Time Series Data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lSuL8bbKZDvK"
},
"source": [
"Regression trees make predictions based on the mean outcome value for the training samples assigned to a given node and typically rely on the mean-squared error to select optimal rules during recursive binary splitting.\n",
"\n",
"Given a training set, the algorithm iterates over the predictors, $X_1, X_2, ..., X_p$, and possible cutpoints, $s_1, s_2, ..., s_N$, to find an optimal combination. The optimal rule splits the feature space into two regions, $\\{X\\mid X_i < s_j\\}$ and $\\{X\\mid X_i > s_j\\}$, with values for the $X_i$ feature either below or above the $s_j$ threshold so that predictions based on the training subsets maximize the reduction of the squared residuals relative to the current node."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hMTc4QxQZDvK"
},
"source": [
"### Generate two lags of monthly returns"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:38.965107Z",
"start_time": "2021-04-16T00:32:38.942472Z"
},
"scrolled": true,
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "-mnPEltXZDvL",
"outputId": "21412ce4-296b-4e33-d0ec-fbc263d0d779"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"MultiIndex: 77176 entries, ('A', '2007-01-31') to ('ZION', '2017-11-30')\n",
"Data columns (total 3 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 y 77176 non-null float64\n",
" 1 t-1 77176 non-null float64\n",
" 2 t-2 77176 non-null float64\n",
"dtypes: float64(3)\n",
"memory usage: 2.1+ MB\n"
]
}
],
"source": [
"X2 = data.loc[:, ['target', 'return_1m']]\n",
"X2.columns = ['y', 't-1']\n",
"X2['t-2'] = data.groupby(level='ticker').return_1m.shift()\n",
"X2 = X2.dropna()\n",
"X2.info()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:38.969598Z",
"start_time": "2021-04-16T00:32:38.966574Z"
},
"id": "oaK6FwziZDvM"
},
"outputs": [],
"source": [
"y2 = X2.y\n",
"X2 = X2.drop('y', axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "egeb6VtsZDvN"
},
"source": [
"### Explore Data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WhiVPIs7ZDvO"
},
"source": [
"Note the small spike where we clipped the data."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:39.517083Z",
"start_time": "2021-04-16T00:32:38.970753Z"
},
"colab": {
"base_uri": "https://localhost:8080/",
"height": 279
},
"id": "kzYKbveqZDvP",
"outputId": "5e2da0d1-07f8-4e0c-9af2-6be1d7b269fd"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"sns.distplot(y2)\n",
"sns.despine();"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ClGLEcZ3ZDvR"
},
"source": [
"### Configure Tree"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "P7cRADS_ZDvU"
},
"source": [
"Let's start with a simplified example to facilitate visualization and only use two months of lagged returns to predict the following month, in the vein of an AR(2) model from the last chapter:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:39.521903Z",
"start_time": "2021-04-16T00:32:39.518821Z"
},
"id": "Cinm1A8TZDvV"
},
"outputs": [],
"source": [
"reg_tree_t2 = DecisionTreeRegressor(criterion='mse',\n",
" splitter='best',\n",
" max_depth=6,\n",
" min_samples_split=2,\n",
" min_samples_leaf=50,\n",
" min_weight_fraction_leaf=0.0,\n",
" max_features=None,\n",
" random_state=42,\n",
" max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c4o82YPnZDvY"
},
"source": [
"### Train Decision Tree"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:46.840780Z",
"start_time": "2021-04-16T00:32:39.523207Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vcOh4asxZDva",
"outputId": "40964f44-f899-4324-f6ac-5faebddd9288"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"150 ms ± 4.35 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"reg_tree_t2.fit(X=X2, y=y2)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:46.944042Z",
"start_time": "2021-04-16T00:32:46.846638Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "1uiyb_oDZDvb",
"outputId": "2e7a7193-18df-4158-e9da-808753bb712a"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"DecisionTreeRegressor(criterion='mse', max_depth=6, min_samples_leaf=50,\n",
" random_state=42)"
]
},
"metadata": {},
"execution_count": 14
}
],
"source": [
"reg_tree_t2.fit(X=X2, y=y2)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lFsAzGNlZDvd"
},
"source": [
"### Visualize Tree"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "k2TqwCi-ZDve"
},
"source": [
"You can visualize the tree using the graphviz library (see GitHub for installation instructions) because sklearn can output a description of the tree using the .dot language used by that library. \n",
"\n",
"You can configure the output to include feature and class labels and limit the number of levels to keep the chart readable, as follows:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:46.993321Z",
"start_time": "2021-04-16T00:32:46.945531Z"
},
"colab": {
"base_uri": "https://localhost:8080/",
"height": 495
},
"id": "9DB_MIwFZDve",
"outputId": "4b3ada4f-22a6-4050-f3f2-223209c3e7a4"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<graphviz.files.Source at 0x7f2b18aa6150>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n -->\n<!-- Title: Tree Pages: 1 -->\n<svg width=\"608pt\" height=\"356pt\"\n viewBox=\"0.00 0.00 608.00 356.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 352)\">\n<title>Tree</title>\n<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-352 604,-352 604,4 -4,4\"/>\n<!-- 0 -->\n<g id=\"node1\" class=\"node\">\n<title>0</title>\n<path fill=\"#f1b991\" stroke=\"#000000\" d=\"M346,-348C346,-348 242,-348 242,-348 236,-348 230,-342 230,-336 230,-336 230,-292 230,-292 230,-286 236,-280 242,-280 242,-280 346,-280 346,-280 352,-280 358,-286 358,-292 358,-292 358,-336 358,-336 358,-342 352,-348 346,-348\"/>\n<text text-anchor=\"start\" x=\"257.5\" y=\"-332.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;2 ≤ &#45;0.267</text>\n<text text-anchor=\"start\" x=\"253.5\" y=\"-317.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.008</text>\n<text text-anchor=\"start\" x=\"238\" y=\"-302.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 77176</text>\n<text text-anchor=\"start\" x=\"254\" y=\"-287.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.01</text>\n</g>\n<!-- 1 -->\n<g id=\"node2\" class=\"node\">\n<title>1</title>\n<path fill=\"#eca470\" stroke=\"#000000\" d=\"M269,-244C269,-244 181,-244 181,-244 175,-244 169,-238 169,-232 169,-232 169,-188 169,-188 169,-182 175,-176 181,-176 181,-176 269,-176 269,-176 275,-176 281,-182 281,-188 281,-188 281,-232 281,-232 281,-238 275,-244 269,-244\"/>\n<text text-anchor=\"start\" x=\"188.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;1 ≤ &#45;0.137</text>\n<text text-anchor=\"start\" x=\"184.5\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.035</text>\n<text text-anchor=\"start\" x=\"177\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 722</text>\n<text text-anchor=\"start\" x=\"181\" y=\"-183.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.037</text>\n</g>\n<!-- 0&#45;&gt;1 -->\n<g id=\"edge1\" class=\"edge\">\n<title>0&#45;&gt;1</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M271.4068,-279.9465C265.6286,-271.2373 259.3425,-261.7626 253.3166,-252.6801\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"256.089,-250.5278 247.6439,-244.13 250.256,-254.3978 256.089,-250.5278\"/>\n<text text-anchor=\"middle\" x=\"242.6866\" y=\"-264.9336\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n</g>\n<!-- 18 -->\n<g id=\"node9\" class=\"node\">\n<title>18</title>\n<path fill=\"#f1b992\" stroke=\"#000000\" d=\"M415,-244C415,-244 311,-244 311,-244 305,-244 299,-238 299,-232 299,-232 299,-188 299,-188 299,-182 305,-176 311,-176 311,-176 415,-176 415,-176 421,-176 427,-182 427,-188 427,-188 427,-232 427,-232 427,-238 421,-244 415,-244\"/>\n<text text-anchor=\"start\" x=\"326.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;1 ≤ &#45;0.147</text>\n<text text-anchor=\"start\" x=\"322.5\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.008</text>\n<text text-anchor=\"start\" x=\"307\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 76454</text>\n<text text-anchor=\"start\" x=\"323\" y=\"-183.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.01</text>\n</g>\n<!-- 0&#45;&gt;18 -->\n<g id=\"edge8\" class=\"edge\">\n<title>0&#45;&gt;18</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M316.5932,-279.9465C322.3714,-271.2373 328.6575,-261.7626 334.6834,-252.6801\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"337.744,-254.3978 340.3561,-244.13 331.911,-250.5278 337.744,-254.3978\"/>\n<text text-anchor=\"middle\" x=\"345.3134\" y=\"-264.9336\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n</g>\n<!-- 2 -->\n<g id=\"node3\" class=\"node\">\n<title>2</title>\n<path fill=\"#e99659\" stroke=\"#000000\" d=\"M140,-140C140,-140 52,-140 52,-140 46,-140 40,-134 40,-128 40,-128 40,-84 40,-84 40,-78 46,-72 52,-72 52,-72 140,-72 140,-72 146,-72 152,-78 152,-84 152,-84 152,-128 152,-128 152,-134 146,-140 140,-140\"/>\n<text text-anchor=\"start\" x=\"59.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;1 ≤ &#45;0.228</text>\n<text text-anchor=\"start\" x=\"55.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.041</text>\n<text text-anchor=\"start\" x=\"48\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 217</text>\n<text text-anchor=\"start\" x=\"52\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.057</text>\n</g>\n<!-- 1&#45;&gt;2 -->\n<g id=\"edge2\" class=\"edge\">\n<title>1&#45;&gt;2</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M182.7606,-175.9465C171.0669,-166.519 158.2606,-156.1946 146.163,-146.4415\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"148.3162,-143.6816 138.3343,-140.13 143.9227,-149.1312 148.3162,-143.6816\"/>\n</g>\n<!-- 5 -->\n<g id=\"node6\" class=\"node\">\n<title>5</title>\n<path fill=\"#eeab7a\" stroke=\"#000000\" d=\"M270,-140C270,-140 182,-140 182,-140 176,-140 170,-134 170,-128 170,-128 170,-84 170,-84 170,-78 176,-72 182,-72 182,-72 270,-72 270,-72 276,-72 282,-78 282,-84 282,-84 282,-128 282,-128 282,-134 276,-140 270,-140\"/>\n<text text-anchor=\"start\" x=\"191.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;1 ≤ 0.321</text>\n<text text-anchor=\"start\" x=\"185.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.032</text>\n<text text-anchor=\"start\" x=\"178\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 505</text>\n<text text-anchor=\"start\" x=\"182\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.029</text>\n</g>\n<!-- 1&#45;&gt;5 -->\n<g id=\"edge5\" class=\"edge\">\n<title>1&#45;&gt;5</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M225.3274,-175.9465C225.406,-167.776 225.491,-158.9318 225.5734,-150.3697\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"229.0754,-150.1632 225.6718,-140.13 222.0757,-150.0958 229.0754,-150.1632\"/>\n</g>\n<!-- 3 -->\n<g id=\"node4\" class=\"node\">\n<title>3</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M42,-36C42,-36 12,-36 12,-36 6,-36 0,-30 0,-24 0,-24 0,-12 0,-12 0,-6 6,0 12,0 12,0 42,0 42,0 48,0 54,-6 54,-12 54,-12 54,-24 54,-24 54,-30 48,-36 42,-36\"/>\n<text text-anchor=\"middle\" x=\"27\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 2&#45;&gt;3 -->\n<g id=\"edge3\" class=\"edge\">\n<title>2&#45;&gt;3</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M69.3228,-71.9769C62.0807,-62.7406 54.3531,-52.8851 47.5097,-44.1573\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"50.1888,-41.9017 41.2641,-36.192 44.6802,-46.221 50.1888,-41.9017\"/>\n</g>\n<!-- 4 -->\n<g id=\"node5\" class=\"node\">\n<title>4</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M114,-36C114,-36 84,-36 84,-36 78,-36 72,-30 72,-24 72,-24 72,-12 72,-12 72,-6 78,0 84,0 84,0 114,0 114,0 120,0 126,-6 126,-12 126,-12 126,-24 126,-24 126,-30 120,-36 114,-36\"/>\n<text text-anchor=\"middle\" x=\"99\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 2&#45;&gt;4 -->\n<g id=\"edge4\" class=\"edge\">\n<title>2&#45;&gt;4</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M97.1599,-71.9769C97.4488,-63.5023 97.7555,-54.5065 98.0339,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"101.537,-46.3054 98.3798,-36.192 94.541,-46.0669 101.537,-46.3054\"/>\n</g>\n<!-- 6 -->\n<g id=\"node7\" class=\"node\">\n<title>6</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M210,-36C210,-36 180,-36 180,-36 174,-36 168,-30 168,-24 168,-24 168,-12 168,-12 168,-6 174,0 180,0 180,0 210,0 210,0 216,0 222,-6 222,-12 222,-12 222,-24 222,-24 222,-30 216,-36 210,-36\"/>\n<text text-anchor=\"middle\" x=\"195\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 5&#45;&gt;6 -->\n<g id=\"edge6\" class=\"edge\">\n<title>5&#45;&gt;6</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M214.0146,-71.9769C210.9621,-63.3119 207.7177,-54.102 204.7895,-45.7894\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"208.0323,-44.4609 201.4085,-36.192 201.43,-46.7868 208.0323,-44.4609\"/>\n</g>\n<!-- 17 -->\n<g id=\"node8\" class=\"node\">\n<title>17</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M282,-36C282,-36 252,-36 252,-36 246,-36 240,-30 240,-24 240,-24 240,-12 240,-12 240,-6 246,0 252,0 252,0 282,0 282,0 288,0 294,-6 294,-12 294,-12 294,-24 294,-24 294,-30 288,-36 282,-36\"/>\n<text text-anchor=\"middle\" x=\"267\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 5&#45;&gt;17 -->\n<g id=\"edge7\" class=\"edge\">\n<title>5&#45;&gt;17</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M241.8517,-71.9769C245.9331,-63.2167 250.2741,-53.8995 254.1802,-45.5157\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"257.4735,-46.7346 258.5242,-36.192 251.1284,-43.7783 257.4735,-46.7346\"/>\n</g>\n<!-- 19 -->\n<g id=\"node10\" class=\"node\">\n<title>19</title>\n<path fill=\"#f3c5a4\" stroke=\"#000000\" d=\"M410,-140C410,-140 314,-140 314,-140 308,-140 302,-134 302,-128 302,-128 302,-84 302,-84 302,-78 308,-72 314,-72 314,-72 410,-72 410,-72 416,-72 422,-78 422,-84 422,-84 422,-128 422,-128 422,-134 416,-140 410,-140\"/>\n<text text-anchor=\"start\" x=\"329.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;2 ≤ &#45;0.17</text>\n<text text-anchor=\"start\" x=\"321.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.023</text>\n<text text-anchor=\"start\" x=\"310\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 3243</text>\n<text text-anchor=\"start\" x=\"315.5\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = &#45;0.005</text>\n</g>\n<!-- 18&#45;&gt;19 -->\n<g id=\"edge9\" class=\"edge\">\n<title>18&#45;&gt;19</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M362.6726,-175.9465C362.594,-167.776 362.509,-158.9318 362.4266,-150.3697\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"365.9243,-150.0958 362.3282,-140.13 358.9246,-150.1632 365.9243,-150.0958\"/>\n</g>\n<!-- 42 -->\n<g id=\"node13\" class=\"node\">\n<title>42</title>\n<path fill=\"#f1b991\" stroke=\"#000000\" d=\"M556,-140C556,-140 452,-140 452,-140 446,-140 440,-134 440,-128 440,-128 440,-84 440,-84 440,-78 446,-72 452,-72 452,-72 556,-72 556,-72 562,-72 568,-78 568,-84 568,-84 568,-128 568,-128 568,-134 562,-140 556,-140\"/>\n<text text-anchor=\"start\" x=\"469.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;1 ≤ 0.118</text>\n<text text-anchor=\"start\" x=\"463.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.007</text>\n<text text-anchor=\"start\" x=\"448\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 73211</text>\n<text text-anchor=\"start\" x=\"464\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.01</text>\n</g>\n<!-- 18&#45;&gt;42 -->\n<g id=\"edge12\" class=\"edge\">\n<title>18&#45;&gt;42</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M409.1687,-175.9465C422.0719,-166.4293 436.2145,-155.9978 449.5483,-146.163\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"451.7575,-148.8826 457.7276,-140.13 447.6023,-143.2492 451.7575,-148.8826\"/>\n</g>\n<!-- 20 -->\n<g id=\"node11\" class=\"node\">\n<title>20</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M366,-36C366,-36 336,-36 336,-36 330,-36 324,-30 324,-24 324,-24 324,-12 324,-12 324,-6 330,0 336,0 336,0 366,0 366,0 372,0 378,-6 378,-12 378,-12 378,-24 378,-24 378,-30 372,-36 366,-36\"/>\n<text text-anchor=\"middle\" x=\"351\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 19&#45;&gt;20 -->\n<g id=\"edge10\" class=\"edge\">\n<title>19&#45;&gt;20</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M357.7471,-71.9769C356.6878,-63.5023 355.5633,-54.5065 354.5423,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"357.9874,-45.6806 353.274,-36.192 351.0415,-46.5489 357.9874,-45.6806\"/>\n</g>\n<!-- 27 -->\n<g id=\"node12\" class=\"node\">\n<title>27</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M438,-36C438,-36 408,-36 408,-36 402,-36 396,-30 396,-24 396,-24 396,-12 396,-12 396,-6 402,0 408,0 408,0 438,0 438,0 444,0 450,-6 450,-12 450,-12 450,-24 450,-24 450,-30 444,-36 438,-36\"/>\n<text text-anchor=\"middle\" x=\"423\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 19&#45;&gt;27 -->\n<g id=\"edge11\" class=\"edge\">\n<title>19&#45;&gt;27</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M385.5842,-71.9769C391.9206,-62.8358 398.6775,-53.0883 404.6809,-44.4276\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"407.5692,-46.4045 410.3897,-36.192 401.8162,-42.4166 407.5692,-46.4045\"/>\n</g>\n<!-- 43 -->\n<g id=\"node14\" class=\"node\">\n<title>43</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M516,-36C516,-36 486,-36 486,-36 480,-36 474,-30 474,-24 474,-24 474,-12 474,-12 474,-6 480,0 486,0 486,0 516,0 516,0 522,0 528,-6 528,-12 528,-12 528,-24 528,-24 528,-30 522,-36 516,-36\"/>\n<text text-anchor=\"middle\" x=\"501\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 42&#45;&gt;43 -->\n<g id=\"edge13\" class=\"edge\">\n<title>42&#45;&gt;43</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M502.8401,-71.9769C502.5512,-63.5023 502.2445,-54.5065 501.9661,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"505.459,-46.0669 501.6202,-36.192 498.463,-46.3054 505.459,-46.0669\"/>\n</g>\n<!-- 54 -->\n<g id=\"node15\" class=\"node\">\n<title>54</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M588,-36C588,-36 558,-36 558,-36 552,-36 546,-30 546,-24 546,-24 546,-12 546,-12 546,-6 552,0 558,0 558,0 588,0 588,0 594,0 600,-6 600,-12 600,-12 600,-24 600,-24 600,-30 594,-36 588,-36\"/>\n<text text-anchor=\"middle\" x=\"573\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 42&#45;&gt;54 -->\n<g id=\"edge14\" class=\"edge\">\n<title>42&#45;&gt;54</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M530.6772,-71.9769C537.9193,-62.7406 545.6469,-52.8851 552.4903,-44.1573\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"555.3198,-46.221 558.7359,-36.192 549.8112,-41.9017 555.3198,-46.221\"/>\n</g>\n</g>\n</svg>\n"
},
"metadata": {},
"execution_count": 15
}
],
"source": [
"out_file = results_path / 'reg_tree_t2.dot'\n",
"dot_data = export_graphviz(reg_tree_t2,\n",
" out_file=out_file.as_posix(),\n",
" feature_names=X2.columns,\n",
" max_depth=2,\n",
" filled=True,\n",
" rounded=True,\n",
" special_characters=True)\n",
"if out_file is not None:\n",
" dot_data = Path(out_file).read_text()\n",
"\n",
"graphviz.Source(dot_data)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FuFWhyOjZDvf"
},
"source": [
"### Compare with Linear Regression"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ocI5jngbZDvg"
},
"source": [
"The OLS summary below and a visualization of the first two levels of the decision tree above reveal the striking differences between the models. The OLS model provides three parameters for the intercepts and the two features in line with the linear assumption.\n",
"\n",
"In contrast, the regression tree chart above displays for each node of the first two levels the feature and threshold used to split the data (note that features can be used repeatedly), as well as the current value of the mean-squared error (MSE), the number of samples, and predicted value based on these training samples."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "arHLQ4L6ZDvg"
},
"source": [
"The tree chart also highlights the uneven distribution of samples across the nodes as the numbers vary between 31,000 and 65,000 samples after only two splits."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nbZtCbWPZDvg"
},
"source": [
"#### statsmodels OLS"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:47.020618Z",
"start_time": "2021-04-16T00:32:46.994715Z"
},
"scrolled": true,
"id": "T17M8HKhZDvh"
},
"outputs": [],
"source": [
"ols_model = sm.OLS(endog=y2, exog=sm.add_constant(X2))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:50.247927Z",
"start_time": "2021-04-16T00:32:47.021772Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "zQu9lEWqZDvh",
"outputId": "1d177d7f-ba36-49b2-e254-3ebaec5e624c"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"117 µs ± 4.53 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"ols_model.fit()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:50.306911Z",
"start_time": "2021-04-16T00:32:50.249060Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "c7DSZDEQZDvj",
"outputId": "72770407-1dd1-43a4-95fe-62dfa4039cd1"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: y R-squared: 0.001\n",
"Model: OLS Adj. R-squared: 0.001\n",
"Method: Least Squares F-statistic: 31.83\n",
"Date: Fri, 14 Oct 2022 Prob (F-statistic): 1.53e-14\n",
"Time: 09:09:19 Log-Likelihood: 75823.\n",
"No. Observations: 77176 AIC: -1.516e+05\n",
"Df Residuals: 77173 BIC: -1.516e+05\n",
"Df Model: 2 \n",
"Covariance Type: nonrobust \n",
"==============================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"const 0.0100 0.000 30.232 0.000 0.009 0.011\n",
"t-1 0.0227 0.004 6.322 0.000 0.016 0.030\n",
"t-2 -0.0179 0.004 -5.003 0.000 -0.025 -0.011\n",
"==============================================================================\n",
"Omnibus: 3351.598 Durbin-Watson: 1.995\n",
"Prob(Omnibus): 0.000 Jarque-Bera (JB): 10867.041\n",
"Skew: 0.102 Prob(JB): 0.00\n",
"Kurtosis: 4.827 Cond. No. 11.1\n",
"==============================================================================\n",
"\n",
"Notes:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n"
]
}
],
"source": [
"result = ols_model.fit()\n",
"print(result.summary())"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "965CzM_XZDvl"
},
"source": [
"#### sklearn Linear Regression"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:50.311548Z",
"start_time": "2021-04-16T00:32:50.309603Z"
},
"id": "WFu4cNK0ZDvm"
},
"outputs": [],
"source": [
"lin_reg = LinearRegression()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:52.560013Z",
"start_time": "2021-04-16T00:32:50.312750Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ZZ2e92JqZDvm",
"outputId": "a617eef2-f23a-438b-e264-b3b4de9841dc"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"5.1 ms ± 182 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"lin_reg.fit(X=X2,y=y2)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:52.647179Z",
"start_time": "2021-04-16T00:32:52.560943Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "AAEjWxLvZDvp",
"outputId": "6bdf344c-b85b-4ad2-96c7-646149b01caa"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LinearRegression()"
]
},
"metadata": {},
"execution_count": 21
}
],
"source": [
"lin_reg.fit(X=X2,y=y2)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:52.651998Z",
"start_time": "2021-04-16T00:32:52.648519Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "NXqXzDhRZDvq",
"outputId": "fce47608-3bf4-481e-9212-fbf0bbbe78f0"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.009971254720772652"
]
},
"metadata": {},
"execution_count": 22
}
],
"source": [
"lin_reg.intercept_"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:52.681349Z",
"start_time": "2021-04-16T00:32:52.653554Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "XUgMfvtqZDvr",
"outputId": "46380bc6-3109-4fc6-f475-10b71f12d8ca"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ 0.02269243, -0.01794206])"
]
},
"metadata": {},
"execution_count": 23
}
],
"source": [
"lin_reg.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "KsEOXjFsZDvr"
},
"source": [
"### Linear Regression vs Regression Tree Decision Surfaces"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "D8fs8ioyZDvr"
},
"source": [
"To further illustrate the different assumptions about the functional form of the relationships between the input variables and the output, we can visualize current return predictions as a function of the feature space, that is, as a function of the range of values for the lagged returns. The following figure shows the current period return as a function of returns one and two periods ago for linear regression and the regression tree:\n",
"\n",
"The linear-regression model result on the right side underlines the linearity of the relationship between lagged and current returns, whereas the regression tree chart on the left illustrates the non-linear relationship encoded in the recursive partitioning of the feature space."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:52.741131Z",
"start_time": "2021-04-16T00:32:52.716930Z"
},
"id": "XlI91MHSZDvs"
},
"outputs": [],
"source": [
"t1, t2 = np.meshgrid(np.linspace(X2['t-1'].quantile(.01), X2['t-1'].quantile(.99), 100),\n",
" np.linspace(X2['t-2'].quantile(.01), X2['t-2'].quantile(.99), 100))\n",
"X_data = np.c_[t1.ravel(), t2.ravel()]"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:53.406640Z",
"start_time": "2021-04-16T00:32:52.742829Z"
},
"scrolled": false,
"colab": {
"base_uri": "https://localhost:8080/",
"height": 373
},
"id": "x4zBIj_jZDvt",
"outputId": "b7a4e77b-9f87-4c9b-90ce-07ad1a111662"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 864x360 with 4 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"fig, axes = plt.subplots(ncols=2, figsize=(12,5))\n",
"\n",
"# Linear Regression\n",
"ret1 = lin_reg.predict(X_data).reshape(t1.shape)\n",
"surface1 = axes[0].contourf(t1, t2, ret1, cmap='Blues')\n",
"plt.colorbar(mappable=surface1, ax=axes[0])\n",
"\n",
"# Regression Tree\n",
"ret2 = reg_tree_t2.predict(X_data).reshape(t1.shape)\n",
"surface2 = axes[1].contourf(t1, t2, ret2, cmap='Blues')\n",
"plt.colorbar(mappable=surface2, ax=axes[1])\n",
"\n",
"# Format plots\n",
"titles = ['Linear Regression', 'Regression Tree']\n",
"for i, ax in enumerate(axes):\n",
" ax.set_xlabel('t-1')\n",
" ax.set_ylabel('t-2')\n",
" ax.set_title(titles[i])\n",
"\n",
"fig.suptitle('Decision Surfaces', fontsize=14)\n",
"sns.despine()\n",
"fig.tight_layout()\n",
"fig.subplots_adjust(top=.9);"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Vs0fZNmiZDvu"
},
"source": [
"## Simple Classification Tree with Time Series Data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zS0HJw_dZDvu"
},
"source": [
"A classification tree works just like the regression version, except that categorical nature of the outcome requires a different approach to making predictions and measuring the loss. While a regression tree predicts the response for an observation assigned to a leaf node using the mean outcome of the associated training samples, a classification tree instead uses the mode, that is, the most common class among the training samples in the relevant region. A classification tree can also generate probabilistic predictions based on relative class frequencies."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yM6HKy0eZDvu"
},
"source": [
"### Loss Functions"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "O9elgoq4ZDvv"
},
"source": [
"When growing a classification tree, we also use recursive binary splitting but, instead of evaluating the quality of a decision rule using the reduction of the mean-squared error, we can use the classification error rate, which is simply the fraction of the training samples in a given (leave) node that do not belong to the most common class."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0Al5e92sZDvv"
},
"source": [
"However, the alternative measures, Gini Index or Cross-Entropy, are preferred because they are more sensitive to node purity than the classification error rate. Node purity refers to the extent of the preponderance of a single class in a node. A node that only contains samples with outcomes belonging to a single class is pure and imply successful classification for this particular region of the feature space. "
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:53.411641Z",
"start_time": "2021-04-16T00:32:53.409446Z"
},
"id": "cmxjmgodZDvw"
},
"outputs": [],
"source": [
"def entropy(f):\n",
" return (-f*np.log2(f) - (1-f)*np.log2(1-f))/2"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:53.426940Z",
"start_time": "2021-04-16T00:32:53.414041Z"
},
"id": "s-NY0IORZDvw"
},
"outputs": [],
"source": [
"def gini(f):\n",
" return 2*f*(1-f)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:53.447019Z",
"start_time": "2021-04-16T00:32:53.443818Z"
},
"id": "CeNbTm4AZDvy"
},
"outputs": [],
"source": [
"def misclassification_rate(f):\n",
" return np.where(f<=.5, f, 1-f)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qRgl3LVPZDvz"
},
"source": [
"Both the Gini Impurity and the Cross-Entropy measure take on smaller values when the class proportions approach zero or one, that is, when the child nodes become pure as a result of the split and are highest when the class proportions are even or 0.5 in the binary case. \n",
"\n",
"The chart below visualizes the values assumed by these two measures and the misclassification error rates across the [0, 1] interval of proportions."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:32:53.721436Z",
"start_time": "2021-04-16T00:32:53.452115Z"
},
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
},
"id": "R2XpaOEsZDv0",
"outputId": "d2d7fa55-1107-48ef-d78d-9124a352cffe"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"x = np.linspace(0, 1, 10000)\n",
"(pd.DataFrame({'Gini': gini(x), \n",
" 'Entropy': entropy(x),\n",
" 'Misclassification Rate': misclassification_rate(x)}, index=x)\n",
" .plot(title='Classification Loss Functions', lw=2, style=['-', '--', ':']))\n",
"sns.despine()\n",
"plt.tight_layout();"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "a2FDpy9iZDv1"
},
"source": [
"#### Compare computation time"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SGT65YdOZDv3"
},
"source": [
"Gini is often preferred over entropy because it computes faster:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:08.588281Z",
"start_time": "2021-04-16T00:32:53.723873Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wMOMsrN6ZDv4",
"outputId": "d925c5ed-8928-426c-c138-5888dae2638f"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"23.8 µs ± 1.04 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"misclassification_rate(x)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:18.035051Z",
"start_time": "2021-04-16T00:33:08.589304Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "na3e9J9QZDv5",
"outputId": "a45a3594-eb36-4cab-e825-d8ad918b43c6"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"12.8 µs ± 312 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"gini(x)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:19.423307Z",
"start_time": "2021-04-16T00:33:18.036362Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "h2WKvDL9ZDv5",
"outputId": "3fd7b9e8-0310-42a5-94ff-4354102a88ef"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"366 µs ± 7.44 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"entropy(x)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xJL7p_gAZDv6"
},
"source": [
"### Configure Tree"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:19.427483Z",
"start_time": "2021-04-16T00:33:19.424763Z"
},
"id": "YQzjopLuZDv6"
},
"outputs": [],
"source": [
"clf_tree_t2 = DecisionTreeClassifier(criterion='gini',\n",
" splitter='best',\n",
" max_depth=5,\n",
" min_samples_split=1000,\n",
" min_samples_leaf=1,\n",
" min_weight_fraction_leaf=0.0,\n",
" max_features=None,\n",
" random_state=42,\n",
" max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0,\n",
" class_weight=None)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gZ7rEHS9ZDv7"
},
"source": [
"### Train Tree"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:19.460489Z",
"start_time": "2021-04-16T00:33:19.428704Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6cSy3mQUZDv7",
"outputId": "ca139a97-2f59-47a6-9b90-8e6b282ff38c"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1 43399\n",
"0 33777\n",
"Name: y, dtype: int64"
]
},
"metadata": {},
"execution_count": 34
}
],
"source": [
"y_binary = (y2>0).astype(int)\n",
"y_binary.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:26.269743Z",
"start_time": "2021-04-16T00:33:19.461996Z"
},
"scrolled": true,
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yqUk1DurZDv7",
"outputId": "94db9f51-f4db-4f49-9689-d00dc9ec5720"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"183 ms ± 48.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"clf_tree_t2.fit(X=X2, y=y_binary)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:26.363009Z",
"start_time": "2021-04-16T00:33:26.270887Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "zqyVpMOGZDv7",
"outputId": "f3258149-a562-4b23-b604-85c112789888"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"DecisionTreeClassifier(max_depth=5, min_samples_split=1000, random_state=42)"
]
},
"metadata": {},
"execution_count": 36
}
],
"source": [
"clf_tree_t2.fit(X=X2, y=y_binary)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "52pbXiC7ZDv7"
},
"source": [
"### Visualize Tree"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:26.404932Z",
"start_time": "2021-04-16T00:33:26.363983Z"
},
"colab": {
"base_uri": "https://localhost:8080/",
"height": 555
},
"id": "RiC-lAbfZDv7",
"outputId": "887faee7-ef26-4b4a-da26-c72dc7617ed8"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<graphviz.files.Source at 0x7f2b161c3850>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n -->\n<!-- Title: Tree Pages: 1 -->\n<svg width=\"658pt\" height=\"401pt\"\n viewBox=\"0.00 0.00 657.50 401.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 397)\">\n<title>Tree</title>\n<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-397 653.5,-397 653.5,4 -4,4\"/>\n<!-- 0 -->\n<g id=\"node1\" class=\"node\">\n<title>0</title>\n<path fill=\"#d3e9f9\" stroke=\"#000000\" d=\"M382.5,-393C382.5,-393 241.5,-393 241.5,-393 235.5,-393 229.5,-387 229.5,-381 229.5,-381 229.5,-322 229.5,-322 229.5,-316 235.5,-310 241.5,-310 241.5,-310 382.5,-310 382.5,-310 388.5,-310 394.5,-316 394.5,-322 394.5,-322 394.5,-381 394.5,-381 394.5,-387 388.5,-393 382.5,-393\"/>\n<text text-anchor=\"start\" x=\"275.5\" y=\"-377.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;1 ≤ &#45;0.146</text>\n<text text-anchor=\"start\" x=\"274\" y=\"-362.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.492</text>\n<text text-anchor=\"start\" x=\"256\" y=\"-347.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 77176</text>\n<text text-anchor=\"start\" x=\"237.5\" y=\"-332.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [33777, 43399]</text>\n<text text-anchor=\"start\" x=\"277.5\" y=\"-317.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 1 -->\n<g id=\"node2\" class=\"node\">\n<title>1</title>\n<path fill=\"#fef9f5\" stroke=\"#000000\" d=\"M287.5,-274C287.5,-274 162.5,-274 162.5,-274 156.5,-274 150.5,-268 150.5,-262 150.5,-262 150.5,-203 150.5,-203 150.5,-197 156.5,-191 162.5,-191 162.5,-191 287.5,-191 287.5,-191 293.5,-191 299.5,-197 299.5,-203 299.5,-203 299.5,-262 299.5,-262 299.5,-268 293.5,-274 287.5,-274\"/>\n<text text-anchor=\"start\" x=\"188.5\" y=\"-258.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;2 ≤ &#45;0.179</text>\n<text text-anchor=\"start\" x=\"195.5\" y=\"-243.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.5</text>\n<text text-anchor=\"start\" x=\"173\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 3459</text>\n<text text-anchor=\"start\" x=\"158.5\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [1775, 1684]</text>\n<text text-anchor=\"start\" x=\"181\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Down</text>\n</g>\n<!-- 0&#45;&gt;1 -->\n<g id=\"edge1\" class=\"edge\">\n<title>0&#45;&gt;1</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M281.5716,-309.8796C275.1189,-301.0534 268.243,-291.6485 261.5887,-282.5466\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"264.2856,-280.3051 255.5583,-274.2981 258.6347,-284.4364 264.2856,-280.3051\"/>\n<text text-anchor=\"middle\" x=\"251.7208\" y=\"-295.3018\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n</g>\n<!-- 10 -->\n<g id=\"node7\" class=\"node\">\n<title>10</title>\n<path fill=\"#d1e8f9\" stroke=\"#000000\" d=\"M470.5,-274C470.5,-274 329.5,-274 329.5,-274 323.5,-274 317.5,-268 317.5,-262 317.5,-262 317.5,-203 317.5,-203 317.5,-197 323.5,-191 329.5,-191 329.5,-191 470.5,-191 470.5,-191 476.5,-191 482.5,-197 482.5,-203 482.5,-203 482.5,-262 482.5,-262 482.5,-268 476.5,-274 470.5,-274\"/>\n<text text-anchor=\"start\" x=\"365.5\" y=\"-258.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;2 ≤ 0.181</text>\n<text text-anchor=\"start\" x=\"362\" y=\"-243.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.491</text>\n<text text-anchor=\"start\" x=\"344\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 73717</text>\n<text text-anchor=\"start\" x=\"325.5\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [32002, 41715]</text>\n<text text-anchor=\"start\" x=\"365.5\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 0&#45;&gt;10 -->\n<g id=\"edge6\" class=\"edge\">\n<title>0&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M342.7781,-309.8796C349.3051,-301.0534 356.2599,-291.6485 362.9908,-282.5466\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"365.9588,-284.4195 369.0905,-274.2981 360.3305,-280.2574 365.9588,-284.4195\"/>\n<text text-anchor=\"middle\" x=\"372.7932\" y=\"-295.3224\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n</g>\n<!-- 2 -->\n<g id=\"node3\" class=\"node\">\n<title>2</title>\n<path fill=\"#d6ebfa\" stroke=\"#000000\" d=\"M120,-147.5C120,-147.5 12,-147.5 12,-147.5 6,-147.5 0,-141.5 0,-135.5 0,-135.5 0,-91.5 0,-91.5 0,-85.5 6,-79.5 12,-79.5 12,-79.5 120,-79.5 120,-79.5 126,-79.5 132,-85.5 132,-91.5 132,-91.5 132,-135.5 132,-135.5 132,-141.5 126,-147.5 120,-147.5\"/>\n<text text-anchor=\"start\" x=\"28\" y=\"-132.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.493</text>\n<text text-anchor=\"start\" x=\"18\" y=\"-117.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 471</text>\n<text text-anchor=\"start\" x=\"8\" y=\"-102.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [208, 263]</text>\n<text text-anchor=\"start\" x=\"31.5\" y=\"-87.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 1&#45;&gt;2 -->\n<g id=\"edge2\" class=\"edge\">\n<title>1&#45;&gt;2</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M169.3895,-190.8796C153.2987,-178.8368 135.7685,-165.7167 119.7909,-153.7586\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"121.6962,-150.8129 111.593,-147.623 117.5018,-156.4171 121.6962,-150.8129\"/>\n</g>\n<!-- 3 -->\n<g id=\"node4\" class=\"node\">\n<title>3</title>\n<path fill=\"#fdf3ed\" stroke=\"#000000\" d=\"M287.5,-155C287.5,-155 162.5,-155 162.5,-155 156.5,-155 150.5,-149 150.5,-143 150.5,-143 150.5,-84 150.5,-84 150.5,-78 156.5,-72 162.5,-72 162.5,-72 287.5,-72 287.5,-72 293.5,-72 299.5,-78 299.5,-84 299.5,-84 299.5,-143 299.5,-143 299.5,-149 293.5,-155 287.5,-155\"/>\n<text text-anchor=\"start\" x=\"188.5\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;1 ≤ &#45;0.262</text>\n<text text-anchor=\"start\" x=\"187\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.499</text>\n<text text-anchor=\"start\" x=\"173\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 2988</text>\n<text text-anchor=\"start\" x=\"158.5\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [1567, 1421]</text>\n<text text-anchor=\"start\" x=\"181\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Down</text>\n</g>\n<!-- 1&#45;&gt;3 -->\n<g id=\"edge3\" class=\"edge\">\n<title>1&#45;&gt;3</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M225,-190.8796C225,-182.6838 225,-173.9891 225,-165.5013\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"228.5001,-165.298 225,-155.2981 221.5001,-165.2981 228.5001,-165.298\"/>\n</g>\n<!-- 4 -->\n<g id=\"node5\" class=\"node\">\n<title>4</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M212,-36C212,-36 182,-36 182,-36 176,-36 170,-30 170,-24 170,-24 170,-12 170,-12 170,-6 176,0 182,0 182,0 212,0 212,0 218,0 224,-6 224,-12 224,-12 224,-24 224,-24 224,-30 218,-36 212,-36\"/>\n<text text-anchor=\"middle\" x=\"197\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 3&#45;&gt;4 -->\n<g id=\"edge4\" class=\"edge\">\n<title>3&#45;&gt;4</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M212.8002,-71.8901C210.2305,-63.1253 207.5784,-54.0798 205.1981,-45.9615\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"208.5274,-44.8764 202.3552,-36.2651 201.8102,-46.8459 208.5274,-44.8764\"/>\n</g>\n<!-- 5 -->\n<g id=\"node6\" class=\"node\">\n<title>5</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M284,-36C284,-36 254,-36 254,-36 248,-36 242,-30 242,-24 242,-24 242,-12 242,-12 242,-6 248,0 254,0 254,0 284,0 284,0 290,0 296,-6 296,-12 296,-12 296,-24 296,-24 296,-30 290,-36 284,-36\"/>\n<text text-anchor=\"middle\" x=\"269\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 3&#45;&gt;5 -->\n<g id=\"edge5\" class=\"edge\">\n<title>3&#45;&gt;5</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M244.171,-71.8901C248.299,-62.9305 252.5621,-53.6777 256.3659,-45.4217\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"259.5789,-46.8121 260.5847,-36.2651 253.2212,-43.8829 259.5789,-46.8121\"/>\n</g>\n<!-- 11 -->\n<g id=\"node8\" class=\"node\">\n<title>11</title>\n<path fill=\"#d0e8f9\" stroke=\"#000000\" d=\"M470.5,-155C470.5,-155 329.5,-155 329.5,-155 323.5,-155 317.5,-149 317.5,-143 317.5,-143 317.5,-84 317.5,-84 317.5,-78 323.5,-72 329.5,-72 329.5,-72 470.5,-72 470.5,-72 476.5,-72 482.5,-78 482.5,-84 482.5,-84 482.5,-143 482.5,-143 482.5,-149 476.5,-155 470.5,-155\"/>\n<text text-anchor=\"start\" x=\"363.5\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;2 ≤ &#45;0.148</text>\n<text text-anchor=\"start\" x=\"362\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.491</text>\n<text text-anchor=\"start\" x=\"344\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 71340</text>\n<text text-anchor=\"start\" x=\"325.5\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [30833, 40507]</text>\n<text text-anchor=\"start\" x=\"365.5\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 10&#45;&gt;11 -->\n<g id=\"edge7\" class=\"edge\">\n<title>10&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M400,-190.8796C400,-182.6838 400,-173.9891 400,-165.5013\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"403.5001,-165.298 400,-155.2981 396.5001,-165.2981 403.5001,-165.298\"/>\n</g>\n<!-- 24 -->\n<g id=\"node11\" class=\"node\">\n<title>24</title>\n<path fill=\"#f9fcfe\" stroke=\"#000000\" d=\"M637.5,-155C637.5,-155 512.5,-155 512.5,-155 506.5,-155 500.5,-149 500.5,-143 500.5,-143 500.5,-84 500.5,-84 500.5,-78 506.5,-72 512.5,-72 512.5,-72 637.5,-72 637.5,-72 643.5,-72 649.5,-78 649.5,-84 649.5,-84 649.5,-143 649.5,-143 649.5,-149 643.5,-155 637.5,-155\"/>\n<text text-anchor=\"start\" x=\"540.5\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">t&#45;1 ≤ 0.144</text>\n<text text-anchor=\"start\" x=\"545.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.5</text>\n<text text-anchor=\"start\" x=\"523\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 2377</text>\n<text text-anchor=\"start\" x=\"508.5\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [1169, 1208]</text>\n<text text-anchor=\"start\" x=\"540.5\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 10&#45;&gt;24 -->\n<g id=\"edge10\" class=\"edge\">\n<title>10&#45;&gt;24</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M461.2065,-190.8796C475.4606,-181.1868 490.741,-170.7961 505.3307,-160.8752\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"507.5269,-163.6143 513.8281,-155.0969 503.5907,-157.8258 507.5269,-163.6143\"/>\n</g>\n<!-- 12 -->\n<g id=\"node9\" class=\"node\">\n<title>12</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M387,-36C387,-36 357,-36 357,-36 351,-36 345,-30 345,-24 345,-24 345,-12 345,-12 345,-6 351,0 357,0 357,0 387,0 387,0 393,0 399,-6 399,-12 399,-12 399,-24 399,-24 399,-30 393,-36 387,-36\"/>\n<text text-anchor=\"middle\" x=\"372\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 11&#45;&gt;12 -->\n<g id=\"edge8\" class=\"edge\">\n<title>11&#45;&gt;12</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M387.8002,-71.8901C385.2305,-63.1253 382.5784,-54.0798 380.1981,-45.9615\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"383.5274,-44.8764 377.3552,-36.2651 376.8102,-46.8459 383.5274,-44.8764\"/>\n</g>\n<!-- 17 -->\n<g id=\"node10\" class=\"node\">\n<title>17</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M459,-36C459,-36 429,-36 429,-36 423,-36 417,-30 417,-24 417,-24 417,-12 417,-12 417,-6 423,0 429,0 429,0 459,0 459,0 465,0 471,-6 471,-12 471,-12 471,-24 471,-24 471,-30 465,-36 459,-36\"/>\n<text text-anchor=\"middle\" x=\"444\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 11&#45;&gt;17 -->\n<g id=\"edge9\" class=\"edge\">\n<title>11&#45;&gt;17</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M419.171,-71.8901C423.299,-62.9305 427.5621,-53.6777 431.3659,-45.4217\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"434.5789,-46.8121 435.5847,-36.2651 428.2212,-43.8829 434.5789,-46.8121\"/>\n</g>\n<!-- 25 -->\n<g id=\"node12\" class=\"node\">\n<title>25</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M546,-36C546,-36 516,-36 516,-36 510,-36 504,-30 504,-24 504,-24 504,-12 504,-12 504,-6 510,0 516,0 516,0 546,0 546,0 552,0 558,-6 558,-12 558,-12 558,-24 558,-24 558,-30 552,-36 546,-36\"/>\n<text text-anchor=\"middle\" x=\"531\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 24&#45;&gt;25 -->\n<g id=\"edge11\" class=\"edge\">\n<title>24&#45;&gt;25</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M555.829,-71.8901C551.701,-62.9305 547.4379,-53.6777 543.6341,-45.4217\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"546.7788,-43.8829 539.4153,-36.2651 540.4211,-46.8121 546.7788,-43.8829\"/>\n</g>\n<!-- 30 -->\n<g id=\"node13\" class=\"node\">\n<title>30</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M618,-36C618,-36 588,-36 588,-36 582,-36 576,-30 576,-24 576,-24 576,-12 576,-12 576,-6 582,0 588,0 588,0 618,0 618,0 624,0 630,-6 630,-12 630,-12 630,-24 630,-24 630,-30 624,-36 618,-36\"/>\n<text text-anchor=\"middle\" x=\"603\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 24&#45;&gt;30 -->\n<g id=\"edge12\" class=\"edge\">\n<title>24&#45;&gt;30</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M587.1998,-71.8901C589.7695,-63.1253 592.4216,-54.0798 594.8019,-45.9615\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"598.1898,-46.8459 597.6448,-36.2651 591.4726,-44.8764 598.1898,-46.8459\"/>\n</g>\n</g>\n</svg>\n"
},
"metadata": {},
"execution_count": 37
}
],
"source": [
"out_file = results_path / 'clf_tree_t2.dot'\n",
"dot_data = export_graphviz(clf_tree_t2,\n",
" out_file=out_file.as_posix(),\n",
" feature_names=X2.columns,\n",
" class_names=['Down', 'Up'],\n",
" max_depth=2,\n",
" filled=True,\n",
" rounded=True,\n",
" special_characters=True)\n",
"if out_file is not None:\n",
" dot_data = Path(out_file).read_text()\n",
"\n",
"graphviz.Source(dot_data)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "M5M-76A7ZDv9"
},
"source": [
"### Compare with Logistic Regression"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Uy1vUnnlZDv9"
},
"source": [
"#### Statsmodels"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:26.431166Z",
"start_time": "2021-04-16T00:33:26.406282Z"
},
"id": "DBOt-zXeZDv9"
},
"outputs": [],
"source": [
"log_reg_sm = sm.Logit(endog=y_binary, exog=sm.add_constant(X2))"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:28.117793Z",
"start_time": "2021-04-16T00:33:26.432422Z"
},
"scrolled": false,
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "apv6nmAtZDv-",
"outputId": "e0cb226f-3a6c-47c7-c01f-285db9c004bf"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"104 ms ± 39.7 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"log_reg_sm.fit(disp=False)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:28.199185Z",
"start_time": "2021-04-16T00:33:28.119038Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "-egRlB08ZDv_",
"outputId": "dd0e0444-94b3-4ab4-85a6-8dc6090a22d3"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Optimization terminated successfully.\n",
" Current function value: 0.685278\n",
" Iterations 4\n"
]
}
],
"source": [
"log_result = log_reg_sm.fit()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:28.452764Z",
"start_time": "2021-04-16T00:33:28.200353Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "nVEXhbs8ZDv_",
"outputId": "f6df0219-c4d8-4924-95ee-d512e923d4a0"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" Logit Regression Results \n",
"==============================================================================\n",
"Dep. Variable: y No. Observations: 77176\n",
"Model: Logit Df Residuals: 77173\n",
"Method: MLE Df Model: 2\n",
"Date: Fri, 14 Oct 2022 Pseudo R-squ.: 0.0001127\n",
"Time: 09:10:41 Log-Likelihood: -52887.\n",
"converged: True LL-Null: -52893.\n",
"Covariance Type: nonrobust LLR p-value: 0.002584\n",
"==============================================================================\n",
" coef std err z P>|z| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"const 0.2485 0.007 33.873 0.000 0.234 0.263\n",
"t-1 0.2712 0.080 3.394 0.001 0.115 0.428\n",
"t-2 -0.0560 0.080 -0.701 0.483 -0.212 0.100\n",
"==============================================================================\n"
]
}
],
"source": [
"print(log_result.summary())"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Dcv0InzeZDwA"
},
"source": [
"#### sklearn"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:28.458948Z",
"start_time": "2021-04-16T00:33:28.455385Z"
},
"id": "2axW9sP4ZDwA"
},
"outputs": [],
"source": [
"log_reg_sk = LogisticRegression()"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:33.909359Z",
"start_time": "2021-04-16T00:33:28.461195Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "DUUbh3P8ZDwA",
"outputId": "f33cc68d-3b48-49f3-84e2-32d11aa6376d"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"190 ms ± 1.87 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
]
}
],
"source": [
"%%timeit\n",
"log_reg_sk.fit(X=X2, y=y_binary)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:34.057197Z",
"start_time": "2021-04-16T00:33:33.910465Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "xoeUzJORZDwA",
"outputId": "9a19ba3a-2dc1-4eee-933a-97e9627fea49"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"LogisticRegression()"
]
},
"metadata": {},
"execution_count": 44
}
],
"source": [
"log_reg_sk.fit(X=X2, y=y_binary)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:34.066180Z",
"start_time": "2021-04-16T00:33:34.058359Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "NgwRYAPHZDwB",
"outputId": "220f0ef1-38ca-4d88-e571-3d620d4029a8"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[ 0.26951533, -0.05558622]])"
]
},
"metadata": {},
"execution_count": 45
}
],
"source": [
"log_reg_sk.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TtKbAUDcZDwB"
},
"source": [
"### Decision Surfaces: Classifier Tree vs. Logistic Regression "
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:34.454616Z",
"start_time": "2021-04-16T00:33:34.072296Z"
},
"colab": {
"base_uri": "https://localhost:8080/",
"height": 373
},
"id": "AxGe_fpPZDwB",
"outputId": "a2e423e7-e53f-48ca-b81c-6266f3932e2a"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 864x360 with 4 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"fig, axes = plt.subplots(ncols=2, figsize=(12,5))\n",
"\n",
"# Linear Regression\n",
"ret1 = log_reg_sk.predict_proba(X_data)[:, 1].reshape(t1.shape)\n",
"surface1 = axes[0].contourf(t1, t2, ret1, cmap='Blues')\n",
"plt.colorbar(mappable=surface1, ax=axes[0])\n",
"\n",
"# Regression Tree\n",
"ret2 = clf_tree_t2.predict_proba(X_data)[:, 1].reshape(t1.shape)\n",
"surface2 = axes[1].contourf(t1, t2, ret2, cmap='Blues')\n",
"plt.colorbar(mappable=surface2, ax=axes[1])\n",
"\n",
"# Format plots\n",
"titles = ['Logistic Regression', 'Classification Tree']\n",
"for i, ax in enumerate(axes):\n",
" ax.set_xlabel('t-1')\n",
" ax.set_ylabel('t-2')\n",
" ax.set_title(titles[i])\n",
"\n",
"fig.suptitle('Decision Surfaces', fontsize=20)\n",
"sns.despine()\n",
"fig.tight_layout()\n",
"fig.subplots_adjust(top=.9);"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "P6U7fhuJZDwC"
},
"source": [
"## Regression Tree with all Features"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rPZEVW_CZDwC"
},
"source": [
"We now train, visualize, and evaluate a regression tree with up to 5 consecutive splits using 80% of the samples for training to predict the remaining 20%.\n",
"\n",
"We are taking a shortcut here to simplify the illustration and use the built-in train_test_split, which does not protect against lookahead bias, as our custom iterator. The tree configuration implies up to $2^5=32$ leaf nodes that, on average in the balanced case, would contain over 4,300 of the training samples."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GBFo4fFbZDwC"
},
"source": [
"### Train-Test Split"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:34.491936Z",
"start_time": "2021-04-16T00:33:34.455838Z"
},
"id": "MId6OaARZDwD"
},
"outputs": [],
"source": [
"X = pd.get_dummies(data.drop('target', axis=1))\n",
"y = data.target"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:34.529344Z",
"start_time": "2021-04-16T00:33:34.493349Z"
},
"id": "aRfJc-R7ZDwD"
},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zDYRzxvlZDwD"
},
"source": [
"### Configure Tree"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5Lk2Lkz_ZDwE"
},
"source": [
"The output after training the model displays all the DecisionTreeClassifier parameters that we will address in more detail in the next section when we discuss parameter-tuning. "
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:34.532666Z",
"start_time": "2021-04-16T00:33:34.530505Z"
},
"id": "Yj8yMMqSZDwE"
},
"outputs": [],
"source": [
"regression_tree = DecisionTreeRegressor(criterion='mse',\n",
" splitter='best',\n",
" max_depth=5,\n",
" min_samples_split=2,\n",
" min_samples_leaf=1,\n",
" min_weight_fraction_leaf=0.0,\n",
" max_features=None,\n",
" random_state=42,\n",
" max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lcWykdcXZDwF"
},
"source": [
"### Train Model"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:35.266789Z",
"start_time": "2021-04-16T00:33:34.534056Z"
},
"scrolled": false,
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "VXBR5dpcZDwF",
"outputId": "5f16a936-4cee-4a33-ce9a-2b0b7e437088"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"DecisionTreeRegressor(criterion='mse', max_depth=5, random_state=42)"
]
},
"metadata": {},
"execution_count": 50
}
],
"source": [
"regression_tree.fit(X=X_train, y=y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8FM090j3ZDwG"
},
"source": [
"### Visualize Tree"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JCKjr5ueZDwG"
},
"source": [
"The result shows that the model uses a variety of different features and indicates the split rules for both continuous and categorical (dummy) variables. "
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:35.332234Z",
"start_time": "2021-04-16T00:33:35.267941Z"
},
"colab": {
"base_uri": "https://localhost:8080/",
"height": 634
},
"id": "XIlriA5rZDwG",
"outputId": "c2fe4ae5-0675-43df-ca2b-5b5a7e6ce9c7"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<graphviz.files.Source at 0x7f2b2541b990>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n -->\n<!-- Title: Tree Pages: 1 -->\n<svg width=\"1171pt\" height=\"460pt\"\n viewBox=\"0.00 0.00 1171.00 460.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 456)\">\n<title>Tree</title>\n<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-456 1167,-456 1167,4 -4,4\"/>\n<!-- 0 -->\n<g id=\"node1\" class=\"node\">\n<title>0</title>\n<path fill=\"#f6d3b9\" stroke=\"#000000\" d=\"M608,-452C608,-452 504,-452 504,-452 498,-452 492,-446 492,-440 492,-440 492,-396 492,-396 492,-390 498,-384 504,-384 504,-384 608,-384 608,-384 614,-384 620,-390 620,-396 620,-396 620,-440 620,-440 620,-446 614,-452 608,-452\"/>\n<text text-anchor=\"start\" x=\"518\" y=\"-436.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 3.5</text>\n<text text-anchor=\"start\" x=\"515.5\" y=\"-421.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.008</text>\n<text text-anchor=\"start\" x=\"500\" y=\"-406.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 62230</text>\n<text text-anchor=\"start\" x=\"516\" y=\"-391.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.01</text>\n</g>\n<!-- 1 -->\n<g id=\"node2\" class=\"node\">\n<title>1</title>\n<path fill=\"#f5d0b4\" stroke=\"#000000\" d=\"M494,-348C494,-348 356,-348 356,-348 350,-348 344,-342 344,-336 344,-336 344,-292 344,-292 344,-286 350,-280 356,-280 356,-280 494,-280 494,-280 500,-280 506,-286 506,-292 506,-292 506,-336 506,-336 506,-342 500,-348 494,-348\"/>\n<text text-anchor=\"start\" x=\"352\" y=\"-332.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">momentum_6 ≤ &#45;0.225</text>\n<text text-anchor=\"start\" x=\"384.5\" y=\"-317.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.008</text>\n<text text-anchor=\"start\" x=\"369\" y=\"-302.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 15600</text>\n<text text-anchor=\"start\" x=\"381\" y=\"-287.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.021</text>\n</g>\n<!-- 0&#45;&gt;1 -->\n<g id=\"edge1\" class=\"edge\">\n<title>0&#45;&gt;1</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M513.1057,-383.9465C501.2307,-374.519 488.2259,-364.1946 475.9407,-354.4415\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"477.9989,-351.6066 467.9907,-348.13 473.6464,-357.089 477.9989,-351.6066\"/>\n<text text-anchor=\"middle\" x=\"470.8442\" y=\"-369.2666\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n</g>\n<!-- 32 -->\n<g id=\"node17\" class=\"node\">\n<title>32</title>\n<path fill=\"#f6d4bb\" stroke=\"#000000\" d=\"M759,-348C759,-348 655,-348 655,-348 649,-348 643,-342 643,-336 643,-336 643,-292 643,-292 643,-286 649,-280 655,-280 655,-280 759,-280 759,-280 765,-280 771,-286 771,-292 771,-292 771,-336 771,-336 771,-342 765,-348 759,-348\"/>\n<text text-anchor=\"start\" x=\"672.5\" y=\"-332.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">atr ≤ 0.029</text>\n<text text-anchor=\"start\" x=\"666.5\" y=\"-317.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.008</text>\n<text text-anchor=\"start\" x=\"651\" y=\"-302.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 46630</text>\n<text text-anchor=\"start\" x=\"663\" y=\"-287.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.006</text>\n</g>\n<!-- 0&#45;&gt;32 -->\n<g id=\"edge16\" class=\"edge\">\n<title>0&#45;&gt;32</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M605.443,-383.9465C619.3917,-374.3395 634.6929,-363.8009 649.0903,-353.8848\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"651.1955,-356.6848 657.4459,-348.13 647.2249,-350.9198 651.1955,-356.6848\"/>\n<text text-anchor=\"middle\" x=\"652.9144\" y=\"-369.0159\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n</g>\n<!-- 2 -->\n<g id=\"node3\" class=\"node\">\n<title>2</title>\n<path fill=\"#f0b68c\" stroke=\"#000000\" d=\"M272,-244C272,-244 184,-244 184,-244 178,-244 172,-238 172,-232 172,-232 172,-188 172,-188 172,-182 178,-176 184,-176 184,-176 272,-176 272,-176 278,-176 284,-182 284,-188 284,-188 284,-232 284,-232 284,-238 278,-244 272,-244\"/>\n<text text-anchor=\"start\" x=\"190\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 2.5</text>\n<text text-anchor=\"start\" x=\"187.5\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.028</text>\n<text text-anchor=\"start\" x=\"180\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 259</text>\n<text text-anchor=\"start\" x=\"184\" y=\"-183.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.112</text>\n</g>\n<!-- 1&#45;&gt;2 -->\n<g id=\"edge2\" class=\"edge\">\n<title>1&#45;&gt;2</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M360.4948,-279.9465C338.8937,-268.5428 314.8063,-255.8267 293.1558,-244.3969\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"294.5179,-241.1583 284.0405,-239.5848 291.2498,-247.3486 294.5179,-241.1583\"/>\n</g>\n<!-- 17 -->\n<g id=\"node10\" class=\"node\">\n<title>17</title>\n<path fill=\"#f5d0b5\" stroke=\"#000000\" d=\"M486.5,-244C486.5,-244 363.5,-244 363.5,-244 357.5,-244 351.5,-238 351.5,-232 351.5,-232 351.5,-188 351.5,-188 351.5,-182 357.5,-176 363.5,-176 363.5,-176 486.5,-176 486.5,-176 492.5,-176 498.5,-182 498.5,-188 498.5,-188 498.5,-232 498.5,-232 498.5,-238 492.5,-244 486.5,-244\"/>\n<text text-anchor=\"start\" x=\"359.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">return_12m ≤ &#45;0.045</text>\n<text text-anchor=\"start\" x=\"384.5\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.007</text>\n<text text-anchor=\"start\" x=\"369\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 15341</text>\n<text text-anchor=\"start\" x=\"385\" y=\"-183.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.02</text>\n</g>\n<!-- 1&#45;&gt;17 -->\n<g id=\"edge9\" class=\"edge\">\n<title>1&#45;&gt;17</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M425,-279.9465C425,-271.776 425,-262.9318 425,-254.3697\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"428.5001,-254.13 425,-244.13 421.5001,-254.13 428.5001,-254.13\"/>\n</g>\n<!-- 3 -->\n<g id=\"node4\" class=\"node\">\n<title>3</title>\n<path fill=\"#f5ccb0\" stroke=\"#000000\" d=\"M142,-140C142,-140 54,-140 54,-140 48,-140 42,-134 42,-128 42,-128 42,-84 42,-84 42,-78 48,-72 54,-72 54,-72 142,-72 142,-72 148,-72 154,-78 154,-84 154,-84 154,-128 154,-128 154,-134 148,-140 142,-140\"/>\n<text text-anchor=\"start\" x=\"63.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">atr ≤ 0.666</text>\n<text text-anchor=\"start\" x=\"57.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.022</text>\n<text text-anchor=\"start\" x=\"50\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 130</text>\n<text text-anchor=\"start\" x=\"54\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.032</text>\n</g>\n<!-- 2&#45;&gt;3 -->\n<g id=\"edge3\" class=\"edge\">\n<title>2&#45;&gt;3</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M185.4331,-175.9465C173.6488,-166.519 160.7432,-156.1946 148.5519,-146.4415\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"150.6577,-143.6439 140.6625,-140.13 146.2848,-149.11 150.6577,-143.6439\"/>\n</g>\n<!-- 10 -->\n<g id=\"node7\" class=\"node\">\n<title>10</title>\n<path fill=\"#eb9f68\" stroke=\"#000000\" d=\"M272,-140C272,-140 184,-140 184,-140 178,-140 172,-134 172,-128 172,-128 172,-84 172,-84 172,-78 178,-72 184,-72 184,-72 272,-72 272,-72 278,-72 284,-78 284,-84 284,-84 284,-128 284,-128 284,-134 278,-140 272,-140\"/>\n<text text-anchor=\"start\" x=\"183.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2002.5</text>\n<text text-anchor=\"start\" x=\"191.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.02</text>\n<text text-anchor=\"start\" x=\"180\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 129</text>\n<text text-anchor=\"start\" x=\"184\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.193</text>\n</g>\n<!-- 2&#45;&gt;10 -->\n<g id=\"edge6\" class=\"edge\">\n<title>2&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M228,-175.9465C228,-167.776 228,-158.9318 228,-150.3697\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"231.5001,-150.13 228,-140.13 224.5001,-150.13 231.5001,-150.13\"/>\n</g>\n<!-- 4 -->\n<g id=\"node5\" class=\"node\">\n<title>4</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M42,-36C42,-36 12,-36 12,-36 6,-36 0,-30 0,-24 0,-24 0,-12 0,-12 0,-6 6,0 12,0 12,0 42,0 42,0 48,0 54,-6 54,-12 54,-12 54,-24 54,-24 54,-30 48,-36 42,-36\"/>\n<text text-anchor=\"middle\" x=\"27\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 3&#45;&gt;4 -->\n<g id=\"edge4\" class=\"edge\">\n<title>3&#45;&gt;4</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M70.5495,-71.9769C63.0975,-62.7406 55.1459,-52.8851 48.1042,-44.1573\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"50.6809,-41.777 41.6776,-36.192 45.2329,-46.1725 50.6809,-41.777\"/>\n</g>\n<!-- 7 -->\n<g id=\"node6\" class=\"node\">\n<title>7</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M114,-36C114,-36 84,-36 84,-36 78,-36 72,-30 72,-24 72,-24 72,-12 72,-12 72,-6 78,0 84,0 84,0 114,0 114,0 120,0 126,-6 126,-12 126,-12 126,-24 126,-24 126,-30 120,-36 114,-36\"/>\n<text text-anchor=\"middle\" x=\"99\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 3&#45;&gt;7 -->\n<g id=\"edge5\" class=\"edge\">\n<title>3&#45;&gt;7</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M98.3866,-71.9769C98.4829,-63.5023 98.5852,-54.5065 98.678,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"102.1793,-46.2311 98.7933,-36.192 95.1798,-46.1515 102.1793,-46.2311\"/>\n</g>\n<!-- 11 -->\n<g id=\"node8\" class=\"node\">\n<title>11</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M201,-36C201,-36 171,-36 171,-36 165,-36 159,-30 159,-24 159,-24 159,-12 159,-12 159,-6 165,0 171,0 171,0 201,0 201,0 207,0 213,-6 213,-12 213,-12 213,-24 213,-24 213,-30 207,-36 201,-36\"/>\n<text text-anchor=\"middle\" x=\"186\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 10&#45;&gt;11 -->\n<g id=\"edge7\" class=\"edge\">\n<title>10&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M211.7617,-71.9769C207.5352,-63.1215 203.0371,-53.6969 199.0022,-45.2427\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"202.1486,-43.7092 194.6825,-36.192 195.8312,-46.7243 202.1486,-43.7092\"/>\n</g>\n<!-- 14 -->\n<g id=\"node9\" class=\"node\">\n<title>14</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M273,-36C273,-36 243,-36 243,-36 237,-36 231,-30 231,-24 231,-24 231,-12 231,-12 231,-6 237,0 243,0 243,0 273,0 273,0 279,0 285,-6 285,-12 285,-12 285,-24 285,-24 285,-30 279,-36 273,-36\"/>\n<text text-anchor=\"middle\" x=\"258\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 10&#45;&gt;14 -->\n<g id=\"edge8\" class=\"edge\">\n<title>10&#45;&gt;14</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M239.5988,-71.9769C242.5528,-63.3119 245.6925,-54.102 248.5263,-45.7894\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"251.8842,-46.7864 251.7982,-36.192 245.2586,-44.5277 251.8842,-46.7864\"/>\n</g>\n<!-- 18 -->\n<g id=\"node11\" class=\"node\">\n<title>18</title>\n<path fill=\"#f3c7a7\" stroke=\"#000000\" d=\"M402,-140C402,-140 314,-140 314,-140 308,-140 302,-134 302,-128 302,-128 302,-84 302,-84 302,-78 308,-72 314,-72 314,-72 402,-72 402,-72 408,-72 414,-78 414,-84 414,-84 414,-128 414,-128 414,-134 408,-140 402,-140\"/>\n<text text-anchor=\"start\" x=\"320\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 1.5</text>\n<text text-anchor=\"start\" x=\"321.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.03</text>\n<text text-anchor=\"start\" x=\"310\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 863</text>\n<text text-anchor=\"start\" x=\"314\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.052</text>\n</g>\n<!-- 17&#45;&gt;18 -->\n<g id=\"edge10\" class=\"edge\">\n<title>17&#45;&gt;18</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M403.0617,-175.9465C397.451,-167.2373 391.3471,-157.7626 385.4958,-148.6801\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"388.3457,-146.641 379.9876,-140.13 382.4611,-150.4321 388.3457,-146.641\"/>\n</g>\n<!-- 25 -->\n<g id=\"node14\" class=\"node\">\n<title>25</title>\n<path fill=\"#f5d0b6\" stroke=\"#000000\" d=\"M548,-140C548,-140 444,-140 444,-140 438,-140 432,-134 432,-128 432,-128 432,-84 432,-84 432,-78 438,-72 444,-72 444,-72 548,-72 548,-72 554,-72 560,-78 560,-84 560,-84 560,-128 560,-128 560,-134 554,-140 548,-140\"/>\n<text text-anchor=\"start\" x=\"451.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2009.5</text>\n<text text-anchor=\"start\" x=\"455.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.006</text>\n<text text-anchor=\"start\" x=\"440\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 14478</text>\n<text text-anchor=\"start\" x=\"452\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.018</text>\n</g>\n<!-- 17&#45;&gt;25 -->\n<g id=\"edge13\" class=\"edge\">\n<title>17&#45;&gt;25</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M448.2481,-175.9465C454.255,-167.1475 460.7955,-157.5672 467.0543,-148.3993\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"469.952,-150.3623 472.6997,-140.13 464.1707,-146.4155 469.952,-150.3623\"/>\n</g>\n<!-- 19 -->\n<g id=\"node12\" class=\"node\">\n<title>19</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M352,-36C352,-36 322,-36 322,-36 316,-36 310,-30 310,-24 310,-24 310,-12 310,-12 310,-6 316,0 322,0 322,0 352,0 352,0 358,0 364,-6 364,-12 364,-12 364,-24 364,-24 364,-30 358,-36 352,-36\"/>\n<text text-anchor=\"middle\" x=\"337\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 18&#45;&gt;19 -->\n<g id=\"edge11\" class=\"edge\">\n<title>18&#45;&gt;19</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M349.8809,-71.9769C347.8358,-63.4071 345.6635,-54.3043 343.697,-46.0638\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"347.0669,-45.1064 341.3413,-36.192 340.2581,-46.7313 347.0669,-45.1064\"/>\n</g>\n<!-- 22 -->\n<g id=\"node13\" class=\"node\">\n<title>22</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M424,-36C424,-36 394,-36 394,-36 388,-36 382,-30 382,-24 382,-24 382,-12 382,-12 382,-6 388,0 394,0 394,0 424,0 424,0 430,0 436,-6 436,-12 436,-12 436,-24 436,-24 436,-30 430,-36 424,-36\"/>\n<text text-anchor=\"middle\" x=\"409\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 18&#45;&gt;22 -->\n<g id=\"edge12\" class=\"edge\">\n<title>18&#45;&gt;22</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M377.7179,-71.9769C382.9052,-63.0262 388.4295,-53.4941 393.3695,-44.9703\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"396.4709,-46.599 398.4569,-36.192 390.4144,-43.089 396.4709,-46.599\"/>\n</g>\n<!-- 26 -->\n<g id=\"node15\" class=\"node\">\n<title>26</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M500,-36C500,-36 470,-36 470,-36 464,-36 458,-30 458,-24 458,-24 458,-12 458,-12 458,-6 464,0 470,0 470,0 500,0 500,0 506,0 512,-6 512,-12 512,-12 512,-24 512,-24 512,-30 506,-36 500,-36\"/>\n<text text-anchor=\"middle\" x=\"485\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 25&#45;&gt;26 -->\n<g id=\"edge14\" class=\"edge\">\n<title>25&#45;&gt;26</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M491.7471,-71.9769C490.6878,-63.5023 489.5633,-54.5065 488.5423,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"491.9874,-45.6806 487.274,-36.192 485.0415,-46.5489 491.9874,-45.6806\"/>\n</g>\n<!-- 29 -->\n<g id=\"node16\" class=\"node\">\n<title>29</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M572,-36C572,-36 542,-36 542,-36 536,-36 530,-30 530,-24 530,-24 530,-12 530,-12 530,-6 536,0 542,0 542,0 572,0 572,0 578,0 584,-6 584,-12 584,-12 584,-24 584,-24 584,-30 578,-36 572,-36\"/>\n<text text-anchor=\"middle\" x=\"557\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 25&#45;&gt;29 -->\n<g id=\"edge15\" class=\"edge\">\n<title>25&#45;&gt;29</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M519.5842,-71.9769C525.9206,-62.8358 532.6775,-53.0883 538.6809,-44.4276\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"541.5692,-46.4045 544.3897,-36.192 535.8162,-42.4166 541.5692,-46.4045\"/>\n</g>\n<!-- 33 -->\n<g id=\"node18\" class=\"node\">\n<title>33</title>\n<path fill=\"#f6d2b8\" stroke=\"#000000\" d=\"M759,-244C759,-244 655,-244 655,-244 649,-244 643,-238 643,-232 643,-232 643,-188 643,-188 643,-182 649,-176 655,-176 655,-176 759,-176 759,-176 765,-176 771,-182 771,-188 771,-188 771,-232 771,-232 771,-238 765,-244 759,-244\"/>\n<text text-anchor=\"start\" x=\"662.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2002.5</text>\n<text text-anchor=\"start\" x=\"666.5\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.009</text>\n<text text-anchor=\"start\" x=\"651\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 24132</text>\n<text text-anchor=\"start\" x=\"663\" y=\"-183.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.013</text>\n</g>\n<!-- 32&#45;&gt;33 -->\n<g id=\"edge17\" class=\"edge\">\n<title>32&#45;&gt;33</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M707,-279.9465C707,-271.776 707,-262.9318 707,-254.3697\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"710.5001,-254.13 707,-244.13 703.5001,-254.13 710.5001,-254.13\"/>\n</g>\n<!-- 48 -->\n<g id=\"node25\" class=\"node\">\n<title>48</title>\n<path fill=\"#f7d6be\" stroke=\"#000000\" d=\"M974,-244C974,-244 870,-244 870,-244 864,-244 858,-238 858,-232 858,-232 858,-188 858,-188 858,-182 864,-176 870,-176 870,-176 974,-176 974,-176 980,-176 986,-182 986,-188 986,-188 986,-232 986,-232 986,-238 980,-244 974,-244\"/>\n<text text-anchor=\"start\" x=\"877.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2008.5</text>\n<text text-anchor=\"start\" x=\"881.5\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.008</text>\n<text text-anchor=\"start\" x=\"866\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 22498</text>\n<text text-anchor=\"start\" x=\"875.5\" y=\"-183.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = &#45;0.002</text>\n</g>\n<!-- 32&#45;&gt;48 -->\n<g id=\"edge24\" class=\"edge\">\n<title>32&#45;&gt;48</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M771.2159,-282.9374C795.5707,-271.1565 823.484,-257.6543 848.6204,-245.4953\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"850.2657,-248.5874 857.7438,-241.0821 847.2175,-242.2859 850.2657,-248.5874\"/>\n</g>\n<!-- 34 -->\n<g id=\"node19\" class=\"node\">\n<title>34</title>\n<path fill=\"#f7dbc6\" stroke=\"#000000\" d=\"M686,-140C686,-140 590,-140 590,-140 584,-140 578,-134 578,-128 578,-128 578,-84 578,-84 578,-78 584,-72 590,-72 590,-72 686,-72 686,-72 692,-72 698,-78 698,-84 698,-84 698,-128 698,-128 698,-134 692,-140 686,-140\"/>\n<text text-anchor=\"start\" x=\"600\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 8.5</text>\n<text text-anchor=\"start\" x=\"597.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.014</text>\n<text text-anchor=\"start\" x=\"586\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 1587</text>\n<text text-anchor=\"start\" x=\"591.5\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = &#45;0.018</text>\n</g>\n<!-- 33&#45;&gt;34 -->\n<g id=\"edge18\" class=\"edge\">\n<title>33&#45;&gt;34</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M684.4068,-175.9465C678.6286,-167.2373 672.3425,-157.7626 666.3166,-148.6801\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"669.089,-146.5278 660.6439,-140.13 663.256,-150.3978 669.089,-146.5278\"/>\n</g>\n<!-- 41 -->\n<g id=\"node22\" class=\"node\">\n<title>41</title>\n<path fill=\"#f6d1b7\" stroke=\"#000000\" d=\"M832,-140C832,-140 728,-140 728,-140 722,-140 716,-134 716,-128 716,-128 716,-84 716,-84 716,-78 722,-72 728,-72 728,-72 832,-72 832,-72 838,-72 844,-78 844,-84 844,-84 844,-128 844,-128 844,-134 838,-140 832,-140\"/>\n<text text-anchor=\"start\" x=\"735.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2003.5</text>\n<text text-anchor=\"start\" x=\"739.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.008</text>\n<text text-anchor=\"start\" x=\"724\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 22545</text>\n<text text-anchor=\"start\" x=\"736\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.015</text>\n</g>\n<!-- 33&#45;&gt;41 -->\n<g id=\"edge21\" class=\"edge\">\n<title>33&#45;&gt;41</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M730.9029,-175.9465C737.0791,-167.1475 743.8038,-157.5672 750.239,-148.3993\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"753.1629,-150.3258 756.0434,-140.13 747.4334,-146.3041 753.1629,-150.3258\"/>\n</g>\n<!-- 35 -->\n<g id=\"node20\" class=\"node\">\n<title>35</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M646,-36C646,-36 616,-36 616,-36 610,-36 604,-30 604,-24 604,-24 604,-12 604,-12 604,-6 610,0 616,0 616,0 646,0 646,0 652,0 658,-6 658,-12 658,-12 658,-24 658,-24 658,-30 652,-36 646,-36\"/>\n<text text-anchor=\"middle\" x=\"631\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 34&#45;&gt;35 -->\n<g id=\"edge19\" class=\"edge\">\n<title>34&#45;&gt;35</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M635.2936,-71.9769C634.6195,-63.5023 633.9039,-54.5065 633.2542,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"636.7291,-45.8829 632.4471,-36.192 629.7511,-46.438 636.7291,-45.8829\"/>\n</g>\n<!-- 38 -->\n<g id=\"node21\" class=\"node\">\n<title>38</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M718,-36C718,-36 688,-36 688,-36 682,-36 676,-30 676,-24 676,-24 676,-12 676,-12 676,-6 682,0 688,0 688,0 718,0 718,0 724,0 730,-6 730,-12 730,-12 730,-24 730,-24 730,-30 724,-36 718,-36\"/>\n<text text-anchor=\"middle\" x=\"703\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 34&#45;&gt;38 -->\n<g id=\"edge20\" class=\"edge\">\n<title>34&#45;&gt;38</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M663.1307,-71.9769C669.8826,-62.8358 677.0825,-53.0883 683.4796,-44.4276\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"686.4367,-46.3151 689.5628,-36.192 680.8061,-42.1561 686.4367,-46.3151\"/>\n</g>\n<!-- 42 -->\n<g id=\"node23\" class=\"node\">\n<title>42</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M791,-36C791,-36 761,-36 761,-36 755,-36 749,-30 749,-24 749,-24 749,-12 749,-12 749,-6 755,0 761,0 761,0 791,0 791,0 797,0 803,-6 803,-12 803,-12 803,-24 803,-24 803,-30 797,-36 791,-36\"/>\n<text text-anchor=\"middle\" x=\"776\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 41&#45;&gt;42 -->\n<g id=\"edge22\" class=\"edge\">\n<title>41&#45;&gt;42</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M778.4535,-71.9769C778.0683,-63.5023 777.6594,-54.5065 777.2881,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"780.7775,-46.0227 776.8269,-36.192 773.7847,-46.3406 780.7775,-46.0227\"/>\n</g>\n<!-- 45 -->\n<g id=\"node24\" class=\"node\">\n<title>45</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M863,-36C863,-36 833,-36 833,-36 827,-36 821,-30 821,-24 821,-24 821,-12 821,-12 821,-6 827,0 833,0 833,0 863,0 863,0 869,0 875,-6 875,-12 875,-12 875,-24 875,-24 875,-30 869,-36 863,-36\"/>\n<text text-anchor=\"middle\" x=\"848\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 41&#45;&gt;45 -->\n<g id=\"edge23\" class=\"edge\">\n<title>41&#45;&gt;45</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M806.2906,-71.9769C813.4277,-62.7406 821.0433,-52.8851 827.7875,-44.1573\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"830.5976,-46.2449 833.9426,-36.192 825.0586,-41.9647 830.5976,-46.2449\"/>\n</g>\n<!-- 49 -->\n<g id=\"node26\" class=\"node\">\n<title>49</title>\n<path fill=\"#f8dcc8\" stroke=\"#000000\" d=\"M970,-140C970,-140 874,-140 874,-140 868,-140 862,-134 862,-128 862,-128 862,-84 862,-84 862,-78 868,-72 874,-72 874,-72 970,-72 970,-72 976,-72 982,-78 982,-84 982,-84 982,-128 982,-128 982,-134 976,-140 970,-140\"/>\n<text text-anchor=\"start\" x=\"877.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2007.5</text>\n<text text-anchor=\"start\" x=\"881.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.013</text>\n<text text-anchor=\"start\" x=\"870\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 6081</text>\n<text text-anchor=\"start\" x=\"875.5\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = &#45;0.023</text>\n</g>\n<!-- 48&#45;&gt;49 -->\n<g id=\"edge25\" class=\"edge\">\n<title>48&#45;&gt;49</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M922,-175.9465C922,-167.776 922,-158.9318 922,-150.3697\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"925.5001,-150.13 922,-140.13 918.5001,-150.13 925.5001,-150.13\"/>\n</g>\n<!-- 56 -->\n<g id=\"node29\" class=\"node\">\n<title>56</title>\n<path fill=\"#f6d4bb\" stroke=\"#000000\" d=\"M1116,-140C1116,-140 1012,-140 1012,-140 1006,-140 1000,-134 1000,-128 1000,-128 1000,-84 1000,-84 1000,-78 1006,-72 1012,-72 1012,-72 1116,-72 1116,-72 1122,-72 1128,-78 1128,-84 1128,-84 1128,-128 1128,-128 1128,-134 1122,-140 1116,-140\"/>\n<text text-anchor=\"start\" x=\"1008\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">bb_down ≤ 0.038</text>\n<text text-anchor=\"start\" x=\"1023.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.006</text>\n<text text-anchor=\"start\" x=\"1008\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 16417</text>\n<text text-anchor=\"start\" x=\"1020\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.006</text>\n</g>\n<!-- 48&#45;&gt;56 -->\n<g id=\"edge28\" class=\"edge\">\n<title>48&#45;&gt;56</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M968.4961,-175.9465C981.4908,-166.4293 995.7337,-155.9978 1009.1621,-146.163\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1011.3998,-148.8624 1017.3994,-140.13 1007.2637,-143.2151 1011.3998,-148.8624\"/>\n</g>\n<!-- 50 -->\n<g id=\"node27\" class=\"node\">\n<title>50</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M935,-36C935,-36 905,-36 905,-36 899,-36 893,-30 893,-24 893,-24 893,-12 893,-12 893,-6 899,0 905,0 905,0 935,0 935,0 941,0 947,-6 947,-12 947,-12 947,-24 947,-24 947,-30 941,-36 935,-36\"/>\n<text text-anchor=\"middle\" x=\"920\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 49&#45;&gt;50 -->\n<g id=\"edge26\" class=\"edge\">\n<title>49&#45;&gt;50</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M921.2267,-71.9769C921.0341,-63.5023 920.8297,-54.5065 920.6441,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"924.1399,-46.1098 920.4135,-36.192 917.1417,-46.2689 924.1399,-46.1098\"/>\n</g>\n<!-- 53 -->\n<g id=\"node28\" class=\"node\">\n<title>53</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M1007,-36C1007,-36 977,-36 977,-36 971,-36 965,-30 965,-24 965,-24 965,-12 965,-12 965,-6 971,0 977,0 977,0 1007,0 1007,0 1013,0 1019,-6 1019,-12 1019,-12 1019,-24 1019,-24 1019,-30 1013,-36 1007,-36\"/>\n<text text-anchor=\"middle\" x=\"992\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 49&#45;&gt;53 -->\n<g id=\"edge27\" class=\"edge\">\n<title>49&#45;&gt;53</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M949.0638,-71.9769C956.4109,-62.7406 964.2505,-52.8851 971.1931,-44.1573\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"974.043,-46.1968 977.5291,-36.192 968.5647,-41.8391 974.043,-46.1968\"/>\n</g>\n<!-- 57 -->\n<g id=\"node30\" class=\"node\">\n<title>57</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M1079,-36C1079,-36 1049,-36 1049,-36 1043,-36 1037,-30 1037,-24 1037,-24 1037,-12 1037,-12 1037,-6 1043,0 1049,0 1049,0 1079,0 1079,0 1085,0 1091,-6 1091,-12 1091,-12 1091,-24 1091,-24 1091,-30 1085,-36 1079,-36\"/>\n<text text-anchor=\"middle\" x=\"1064\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 56&#45;&gt;57 -->\n<g id=\"edge29\" class=\"edge\">\n<title>56&#45;&gt;57</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1064,-71.9769C1064,-63.5023 1064,-54.5065 1064,-46.3388\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1067.5001,-46.1919 1064,-36.192 1060.5001,-46.192 1067.5001,-46.1919\"/>\n</g>\n<!-- 60 -->\n<g id=\"node31\" class=\"node\">\n<title>60</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M1151,-36C1151,-36 1121,-36 1121,-36 1115,-36 1109,-30 1109,-24 1109,-24 1109,-12 1109,-12 1109,-6 1115,0 1121,0 1121,0 1151,0 1151,0 1157,0 1163,-6 1163,-12 1163,-12 1163,-24 1163,-24 1163,-30 1157,-36 1151,-36\"/>\n<text text-anchor=\"middle\" x=\"1136\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 56&#45;&gt;60 -->\n<g id=\"edge30\" class=\"edge\">\n<title>56&#45;&gt;60</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1091.8371,-71.9769C1099.3941,-62.7406 1107.4576,-52.8851 1114.5986,-44.1573\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1117.4921,-46.1479 1121.1157,-36.192 1112.0744,-41.7152 1117.4921,-46.1479\"/>\n</g>\n</g>\n</svg>\n"
},
"metadata": {},
"execution_count": 51
}
],
"source": [
"out_file = results_path / 'reg_tree.dot'\n",
"dot_data = export_graphviz(regression_tree,\n",
" out_file=out_file.as_posix(),\n",
" feature_names=X_train.columns,\n",
" max_depth=3,\n",
" filled=True,\n",
" rounded=True,\n",
" special_characters=True)\n",
"if out_file is not None:\n",
" dot_data = Path(out_file).read_text()\n",
"\n",
"graphviz.Source(dot_data)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "kimQ7QYiZDwH"
},
"source": [
"### Evaluate Test Set"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:35.355228Z",
"start_time": "2021-04-16T00:33:35.333642Z"
},
"id": "nDCYUa3vZDwI"
},
"outputs": [],
"source": [
"y_pred = regression_tree.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:35.363324Z",
"start_time": "2021-04-16T00:33:35.358601Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Qdfmha5mZDwJ",
"outputId": "a472a9d4-fa7a-4ab5-f74d-aa83edd21a04"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.08659823080682821"
]
},
"metadata": {},
"execution_count": 53
}
],
"source": [
"np.sqrt(mean_squared_error(y_pred=y_pred, y_true=y_test))"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:35.379470Z",
"start_time": "2021-04-16T00:33:35.365615Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "educlMgkZDwL",
"outputId": "b2043fdb-13bf-43f4-be73-09fc8b098227"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"18.95 (p-value=0.00%)\n"
]
}
],
"source": [
"r, p = spearmanr(y_pred, y_test)\n",
"print(f'{r*100:.2f} (p-value={p:.2%})')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2HPpWFYjZDwM"
},
"source": [
"## Classification Tree with all Features"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OW2XC4rBZDwN"
},
"source": [
"We will now train, visualize, and evaluate a classification tree with up to 5 consecutive splits using 80% of the samples for training to predict the remaining 20%. We are taking a shortcut here to simplify the illustration and use the built-in train_test_split, which does not protect against lookahead bias, as our custom iterator. The tree configuration implies up to $2^5=32$ leaf nodes that, on average in the balanced case, would contain over 4,300 of the training samples."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4s2bXgPiZDwO"
},
"source": [
"### Train-Test Split"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:35.391198Z",
"start_time": "2021-04-16T00:33:35.380409Z"
},
"scrolled": true,
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "jyuyf81OZDwO",
"outputId": "2761b409-3e20-4545-e7dc-3e6698a4733f"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1 43733\n",
"0 34055\n",
"Name: target, dtype: int64"
]
},
"metadata": {},
"execution_count": 55
}
],
"source": [
"y_binary = (y>0).astype(int)\n",
"y_binary.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:35.421858Z",
"start_time": "2021-04-16T00:33:35.392557Z"
},
"id": "q3riNoiJZDwP"
},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y_binary, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:35.425897Z",
"start_time": "2021-04-16T00:33:35.423388Z"
},
"id": "QdoF0Pl1ZDwP"
},
"outputs": [],
"source": [
"clf = DecisionTreeClassifier(criterion='gini',\n",
" max_depth=5,\n",
" random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.216311Z",
"start_time": "2021-04-16T00:33:35.427617Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "3bRtiGpdZDwQ",
"outputId": "a91c0a43-d4a7-4211-cb47-24d287f3d707"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"DecisionTreeClassifier(max_depth=5, random_state=42)"
]
},
"metadata": {},
"execution_count": 58
}
],
"source": [
"clf.fit(X=X_train, y=y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NJVtIeWbZDwR"
},
"source": [
"### Plot Tree"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.260644Z",
"start_time": "2021-04-16T00:33:36.219967Z"
},
"scrolled": false,
"colab": {
"base_uri": "https://localhost:8080/",
"height": 734
},
"id": "z_6xrpF1ZDwR",
"outputId": "f726b54e-d9c5-4bec-a4d5-16e97628caf3"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<graphviz.files.Source at 0x7f2b159a5ed0>"
],
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n -->\n<!-- Title: Tree Pages: 1 -->\n<svg width=\"1293pt\" height=\"520pt\"\n viewBox=\"0.00 0.00 1293.00 520.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 516)\">\n<title>Tree</title>\n<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-516 1289,-516 1289,4 -4,4\"/>\n<!-- 0 -->\n<g id=\"node1\" class=\"node\">\n<title>0</title>\n<path fill=\"#d4eaf9\" stroke=\"#000000\" d=\"M701,-512C701,-512 560,-512 560,-512 554,-512 548,-506 548,-500 548,-500 548,-441 548,-441 548,-435 554,-429 560,-429 560,-429 701,-429 701,-429 707,-429 713,-435 713,-441 713,-441 713,-500 713,-500 713,-506 707,-512 701,-512\"/>\n<text text-anchor=\"start\" x=\"592.5\" y=\"-496.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 3.5</text>\n<text text-anchor=\"start\" x=\"592.5\" y=\"-481.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.492</text>\n<text text-anchor=\"start\" x=\"574.5\" y=\"-466.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 62230</text>\n<text text-anchor=\"start\" x=\"556\" y=\"-451.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [27286, 34944]</text>\n<text text-anchor=\"start\" x=\"596\" y=\"-436.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 1 -->\n<g id=\"node2\" class=\"node\">\n<title>1</title>\n<path fill=\"#b7dbf5\" stroke=\"#000000\" d=\"M534,-393C534,-393 409,-393 409,-393 403,-393 397,-387 397,-381 397,-381 397,-322 397,-322 397,-316 403,-310 409,-310 409,-310 534,-310 534,-310 540,-310 546,-316 546,-322 546,-322 546,-381 546,-381 546,-387 540,-393 534,-393\"/>\n<text text-anchor=\"start\" x=\"427\" y=\"-377.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2008.5</text>\n<text text-anchor=\"start\" x=\"433.5\" y=\"-362.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.475</text>\n<text text-anchor=\"start\" x=\"415.5\" y=\"-347.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 15600</text>\n<text text-anchor=\"start\" x=\"405\" y=\"-332.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [6053, 9547]</text>\n<text text-anchor=\"start\" x=\"437\" y=\"-317.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 0&#45;&gt;1 -->\n<g id=\"edge1\" class=\"edge\">\n<title>0&#45;&gt;1</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M574.8895,-428.8796C562.0597,-419.2774 548.3148,-408.9903 535.1714,-399.1534\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"537.1823,-396.2868 527.0791,-393.0969 532.9879,-401.891 537.1823,-396.2868\"/>\n<text text-anchor=\"middle\" x=\"530.6395\" y=\"-414.1421\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n</g>\n<!-- 32 -->\n<g id=\"node17\" class=\"node\">\n<title>32</title>\n<path fill=\"#dfeffb\" stroke=\"#000000\" d=\"M856,-393C856,-393 715,-393 715,-393 709,-393 703,-387 703,-381 703,-381 703,-322 703,-322 703,-316 709,-310 715,-310 715,-310 856,-310 856,-310 862,-310 868,-316 868,-322 868,-322 868,-381 868,-381 868,-387 862,-393 856,-393\"/>\n<text text-anchor=\"start\" x=\"741\" y=\"-377.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2002.5</text>\n<text text-anchor=\"start\" x=\"747.5\" y=\"-362.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.496</text>\n<text text-anchor=\"start\" x=\"729.5\" y=\"-347.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 46630</text>\n<text text-anchor=\"start\" x=\"711\" y=\"-332.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [21233, 25397]</text>\n<text text-anchor=\"start\" x=\"751\" y=\"-317.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 0&#45;&gt;32 -->\n<g id=\"edge16\" class=\"edge\">\n<title>0&#45;&gt;32</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M684.7115,-428.8796C697.1006,-419.368 710.3649,-409.1843 723.0676,-399.432\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"725.5186,-401.9628 731.3191,-393.0969 721.2558,-396.4105 725.5186,-401.9628\"/>\n<text text-anchor=\"middle\" x=\"728.0624\" y=\"-414.1839\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n</g>\n<!-- 2 -->\n<g id=\"node3\" class=\"node\">\n<title>2</title>\n<path fill=\"#d8ecfa\" stroke=\"#000000\" d=\"M296,-274C296,-274 171,-274 171,-274 165,-274 159,-268 159,-262 159,-262 159,-203 159,-203 159,-197 165,-191 171,-191 171,-191 296,-191 296,-191 302,-191 308,-197 308,-203 308,-203 308,-262 308,-262 308,-268 302,-274 296,-274\"/>\n<text text-anchor=\"start\" x=\"170\" y=\"-258.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">return_12m ≤ 0.032</text>\n<text text-anchor=\"start\" x=\"195.5\" y=\"-243.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.494</text>\n<text text-anchor=\"start\" x=\"181.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 6335</text>\n<text text-anchor=\"start\" x=\"167\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [2826, 3509]</text>\n<text text-anchor=\"start\" x=\"199\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 1&#45;&gt;2 -->\n<g id=\"edge2\" class=\"edge\">\n<title>1&#45;&gt;2</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M396.8483,-314.1742C371.6056,-301.5528 343.2561,-287.378 317.3485,-274.4243\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"318.8052,-271.2395 308.2957,-269.8978 315.6747,-277.5005 318.8052,-271.2395\"/>\n</g>\n<!-- 17 -->\n<g id=\"node10\" class=\"node\">\n<title>17</title>\n<path fill=\"#a3d1f3\" stroke=\"#000000\" d=\"M534,-274C534,-274 409,-274 409,-274 403,-274 397,-268 397,-262 397,-262 397,-203 397,-203 397,-197 403,-191 409,-191 409,-191 534,-191 534,-191 540,-191 546,-197 546,-203 546,-203 546,-262 546,-262 546,-268 540,-274 534,-274\"/>\n<text text-anchor=\"start\" x=\"433.5\" y=\"-258.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 2.5</text>\n<text text-anchor=\"start\" x=\"433.5\" y=\"-243.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.454</text>\n<text text-anchor=\"start\" x=\"419.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 9265</text>\n<text text-anchor=\"start\" x=\"405\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [3227, 6038]</text>\n<text text-anchor=\"start\" x=\"437\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 1&#45;&gt;17 -->\n<g id=\"edge9\" class=\"edge\">\n<title>1&#45;&gt;17</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M471.5,-309.8796C471.5,-301.6838 471.5,-292.9891 471.5,-284.5013\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"475.0001,-284.298 471.5,-274.2981 468.0001,-284.2981 475.0001,-284.298\"/>\n</g>\n<!-- 3 -->\n<g id=\"node4\" class=\"node\">\n<title>3</title>\n<path fill=\"#cee7f9\" stroke=\"#000000\" d=\"M137,-155C137,-155 12,-155 12,-155 6,-155 0,-149 0,-143 0,-143 0,-84 0,-84 0,-78 6,-72 12,-72 12,-72 137,-72 137,-72 143,-72 149,-78 149,-84 149,-84 149,-143 149,-143 149,-149 143,-155 137,-155\"/>\n<text text-anchor=\"start\" x=\"36.5\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 1.5</text>\n<text text-anchor=\"start\" x=\"41\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.49</text>\n<text text-anchor=\"start\" x=\"22.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 5396</text>\n<text text-anchor=\"start\" x=\"8\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [2320, 3076]</text>\n<text text-anchor=\"start\" x=\"40\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 2&#45;&gt;3 -->\n<g id=\"edge3\" class=\"edge\">\n<title>2&#45;&gt;3</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M177.8895,-190.8796C165.0597,-181.2774 151.3148,-170.9903 138.1714,-161.1534\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"140.1823,-158.2868 130.0791,-155.0969 135.9879,-163.891 140.1823,-158.2868\"/>\n</g>\n<!-- 10 -->\n<g id=\"node7\" class=\"node\">\n<title>10</title>\n<path fill=\"#fbede2\" stroke=\"#000000\" d=\"M287.5,-155C287.5,-155 179.5,-155 179.5,-155 173.5,-155 167.5,-149 167.5,-143 167.5,-143 167.5,-84 167.5,-84 167.5,-78 173.5,-72 179.5,-72 179.5,-72 287.5,-72 287.5,-72 293.5,-72 299.5,-78 299.5,-84 299.5,-84 299.5,-143 299.5,-143 299.5,-149 293.5,-155 287.5,-155\"/>\n<text text-anchor=\"start\" x=\"195.5\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 2.5</text>\n<text text-anchor=\"start\" x=\"195.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.497</text>\n<text text-anchor=\"start\" x=\"185.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 939</text>\n<text text-anchor=\"start\" x=\"175.5\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [506, 433]</text>\n<text text-anchor=\"start\" x=\"189.5\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Down</text>\n</g>\n<!-- 2&#45;&gt;10 -->\n<g id=\"edge6\" class=\"edge\">\n<title>2&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M233.5,-190.8796C233.5,-182.6838 233.5,-173.9891 233.5,-165.5013\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"237.0001,-165.298 233.5,-155.2981 230.0001,-165.2981 237.0001,-165.298\"/>\n</g>\n<!-- 4 -->\n<g id=\"node5\" class=\"node\">\n<title>4</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M53.5,-36C53.5,-36 23.5,-36 23.5,-36 17.5,-36 11.5,-30 11.5,-24 11.5,-24 11.5,-12 11.5,-12 11.5,-6 17.5,0 23.5,0 23.5,0 53.5,0 53.5,0 59.5,0 65.5,-6 65.5,-12 65.5,-12 65.5,-24 65.5,-24 65.5,-30 59.5,-36 53.5,-36\"/>\n<text text-anchor=\"middle\" x=\"38.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 3&#45;&gt;4 -->\n<g id=\"edge4\" class=\"edge\">\n<title>3&#45;&gt;4</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M58.8146,-71.8901C55.4739,-63.0279 52.025,-53.8788 48.9386,-45.6913\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"52.1877,-44.3878 45.3853,-36.2651 45.6376,-46.8569 52.1877,-44.3878\"/>\n</g>\n<!-- 7 -->\n<g id=\"node6\" class=\"node\">\n<title>7</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M125.5,-36C125.5,-36 95.5,-36 95.5,-36 89.5,-36 83.5,-30 83.5,-24 83.5,-24 83.5,-12 83.5,-12 83.5,-6 89.5,0 95.5,0 95.5,0 125.5,0 125.5,0 131.5,0 137.5,-6 137.5,-12 137.5,-12 137.5,-24 137.5,-24 137.5,-30 131.5,-36 125.5,-36\"/>\n<text text-anchor=\"middle\" x=\"110.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 3&#45;&gt;7 -->\n<g id=\"edge5\" class=\"edge\">\n<title>3&#45;&gt;7</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M90.1854,-71.8901C93.5261,-63.0279 96.975,-53.8788 100.0614,-45.6913\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"103.3624,-46.8569 103.6147,-36.2651 96.8123,-44.3878 103.3624,-46.8569\"/>\n</g>\n<!-- 11 -->\n<g id=\"node8\" class=\"node\">\n<title>11</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M207.5,-36C207.5,-36 177.5,-36 177.5,-36 171.5,-36 165.5,-30 165.5,-24 165.5,-24 165.5,-12 165.5,-12 165.5,-6 171.5,0 177.5,0 177.5,0 207.5,0 207.5,0 213.5,0 219.5,-6 219.5,-12 219.5,-12 219.5,-24 219.5,-24 219.5,-30 213.5,-36 207.5,-36\"/>\n<text text-anchor=\"middle\" x=\"192.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 10&#45;&gt;11 -->\n<g id=\"edge7\" class=\"edge\">\n<title>10&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M215.6361,-71.8901C211.8314,-63.0279 207.9035,-53.8788 204.3884,-45.6913\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"207.5028,-44.0733 200.3416,-36.2651 201.0705,-46.8348 207.5028,-44.0733\"/>\n</g>\n<!-- 14 -->\n<g id=\"node9\" class=\"node\">\n<title>14</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M279.5,-36C279.5,-36 249.5,-36 249.5,-36 243.5,-36 237.5,-30 237.5,-24 237.5,-24 237.5,-12 237.5,-12 237.5,-6 243.5,0 249.5,0 249.5,0 279.5,0 279.5,0 285.5,0 291.5,-6 291.5,-12 291.5,-12 291.5,-24 291.5,-24 291.5,-30 285.5,-36 279.5,-36\"/>\n<text text-anchor=\"middle\" x=\"264.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 10&#45;&gt;14 -->\n<g id=\"edge8\" class=\"edge\">\n<title>10&#45;&gt;14</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M247.0069,-71.8901C249.852,-63.1253 252.7882,-54.0798 255.4235,-45.9615\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"258.8125,-46.8572 258.571,-36.2651 252.1545,-44.6959 258.8125,-46.8572\"/>\n</g>\n<!-- 18 -->\n<g id=\"node11\" class=\"node\">\n<title>18</title>\n<path fill=\"#96cbf1\" stroke=\"#000000\" d=\"M455,-155C455,-155 330,-155 330,-155 324,-155 318,-149 318,-143 318,-143 318,-84 318,-84 318,-78 324,-72 330,-72 330,-72 455,-72 455,-72 461,-72 467,-78 467,-84 467,-84 467,-143 467,-143 467,-149 461,-155 455,-155\"/>\n<text text-anchor=\"start\" x=\"348\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2009.5</text>\n<text text-anchor=\"start\" x=\"354.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.435</text>\n<text text-anchor=\"start\" x=\"340.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 6210</text>\n<text text-anchor=\"start\" x=\"326\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [1983, 4227]</text>\n<text text-anchor=\"start\" x=\"358\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 17&#45;&gt;18 -->\n<g id=\"edge10\" class=\"edge\">\n<title>17&#45;&gt;18</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M443.8696,-190.8796C438.07,-182.1434 431.8941,-172.8404 425.9092,-163.8253\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"428.6951,-161.6935 420.2483,-155.2981 422.8632,-165.5652 428.6951,-161.6935\"/>\n</g>\n<!-- 25 -->\n<g id=\"node14\" class=\"node\">\n<title>25</title>\n<path fill=\"#c1e0f7\" stroke=\"#000000\" d=\"M622,-155C622,-155 497,-155 497,-155 491,-155 485,-149 485,-143 485,-143 485,-84 485,-84 485,-78 491,-72 497,-72 497,-72 622,-72 622,-72 628,-72 634,-78 634,-84 634,-84 634,-143 634,-143 634,-149 628,-155 622,-155\"/>\n<text text-anchor=\"start\" x=\"515\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2011.5</text>\n<text text-anchor=\"start\" x=\"521.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.483</text>\n<text text-anchor=\"start\" x=\"507.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 3055</text>\n<text text-anchor=\"start\" x=\"493\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [1244, 1811]</text>\n<text text-anchor=\"start\" x=\"525\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 17&#45;&gt;25 -->\n<g id=\"edge13\" class=\"edge\">\n<title>17&#45;&gt;25</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M502.2781,-190.8796C508.8051,-182.0534 515.7599,-172.6485 522.4908,-163.5466\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"525.4588,-165.4195 528.5905,-155.2981 519.8305,-161.2574 525.4588,-165.4195\"/>\n</g>\n<!-- 19 -->\n<g id=\"node12\" class=\"node\">\n<title>19</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M370.5,-36C370.5,-36 340.5,-36 340.5,-36 334.5,-36 328.5,-30 328.5,-24 328.5,-24 328.5,-12 328.5,-12 328.5,-6 334.5,0 340.5,0 340.5,0 370.5,0 370.5,0 376.5,0 382.5,-6 382.5,-12 382.5,-12 382.5,-24 382.5,-24 382.5,-30 376.5,-36 370.5,-36\"/>\n<text text-anchor=\"middle\" x=\"355.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 18&#45;&gt;19 -->\n<g id=\"edge11\" class=\"edge\">\n<title>18&#45;&gt;19</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M376.3789,-71.8901C372.9454,-63.0279 369.4007,-53.8788 366.2285,-45.6913\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"369.4529,-44.3253 362.5765,-36.2651 362.9257,-46.8542 369.4529,-44.3253\"/>\n</g>\n<!-- 22 -->\n<g id=\"node13\" class=\"node\">\n<title>22</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M442.5,-36C442.5,-36 412.5,-36 412.5,-36 406.5,-36 400.5,-30 400.5,-24 400.5,-24 400.5,-12 400.5,-12 400.5,-6 406.5,0 412.5,0 412.5,0 442.5,0 442.5,0 448.5,0 454.5,-6 454.5,-12 454.5,-12 454.5,-24 454.5,-24 454.5,-30 448.5,-36 442.5,-36\"/>\n<text text-anchor=\"middle\" x=\"427.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 18&#45;&gt;22 -->\n<g id=\"edge12\" class=\"edge\">\n<title>18&#45;&gt;22</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M407.7497,-71.8901C410.9976,-63.0279 414.3507,-53.8788 417.3514,-45.6913\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"420.6511,-46.8588 420.806,-36.2651 414.0786,-44.45 420.6511,-46.8588\"/>\n</g>\n<!-- 26 -->\n<g id=\"node15\" class=\"node\">\n<title>26</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M523.5,-36C523.5,-36 493.5,-36 493.5,-36 487.5,-36 481.5,-30 481.5,-24 481.5,-24 481.5,-12 481.5,-12 481.5,-6 487.5,0 493.5,0 493.5,0 523.5,0 523.5,0 529.5,0 535.5,-6 535.5,-12 535.5,-12 535.5,-24 535.5,-24 535.5,-30 529.5,-36 523.5,-36\"/>\n<text text-anchor=\"middle\" x=\"508.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 25&#45;&gt;26 -->\n<g id=\"edge14\" class=\"edge\">\n<title>25&#45;&gt;26</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M537.279,-71.8901C532.4423,-62.8331 527.4456,-53.4765 523.0005,-45.1528\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"526.0522,-43.4373 518.2541,-36.2651 519.8775,-46.7348 526.0522,-43.4373\"/>\n</g>\n<!-- 29 -->\n<g id=\"node16\" class=\"node\">\n<title>29</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M595.5,-36C595.5,-36 565.5,-36 565.5,-36 559.5,-36 553.5,-30 553.5,-24 553.5,-24 553.5,-12 553.5,-12 553.5,-6 559.5,0 565.5,0 565.5,0 595.5,0 595.5,0 601.5,0 607.5,-6 607.5,-12 607.5,-12 607.5,-24 607.5,-24 607.5,-30 601.5,-36 595.5,-36\"/>\n<text text-anchor=\"middle\" x=\"580.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 25&#45;&gt;29 -->\n<g id=\"edge15\" class=\"edge\">\n<title>25&#45;&gt;29</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M568.6498,-71.8901C570.5557,-63.2227 572.522,-54.2808 574.2918,-46.2325\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"577.7542,-46.7835 576.4836,-36.2651 570.9175,-45.2801 577.7542,-46.7835\"/>\n</g>\n<!-- 33 -->\n<g id=\"node18\" class=\"node\">\n<title>33</title>\n<path fill=\"#f6d5bd\" stroke=\"#000000\" d=\"M848,-274C848,-274 723,-274 723,-274 717,-274 711,-268 711,-262 711,-262 711,-203 711,-203 711,-197 717,-191 723,-191 723,-191 848,-191 848,-191 854,-191 860,-197 860,-203 860,-203 860,-262 860,-262 860,-268 854,-274 848,-274\"/>\n<text text-anchor=\"start\" x=\"747.5\" y=\"-258.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 8.5</text>\n<text text-anchor=\"start\" x=\"752\" y=\"-243.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.48</text>\n<text text-anchor=\"start\" x=\"733.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 2516</text>\n<text text-anchor=\"start\" x=\"719\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [1508, 1008]</text>\n<text text-anchor=\"start\" x=\"741.5\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Down</text>\n</g>\n<!-- 32&#45;&gt;33 -->\n<g id=\"edge17\" class=\"edge\">\n<title>32&#45;&gt;33</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M785.5,-309.8796C785.5,-301.6838 785.5,-292.9891 785.5,-284.5013\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"789.0001,-284.298 785.5,-274.2981 782.0001,-284.2981 789.0001,-284.298\"/>\n</g>\n<!-- 48 -->\n<g id=\"node25\" class=\"node\">\n<title>48</title>\n<path fill=\"#d9ecfa\" stroke=\"#000000\" d=\"M1098,-274C1098,-274 957,-274 957,-274 951,-274 945,-268 945,-262 945,-262 945,-203 945,-203 945,-197 951,-191 957,-191 957,-191 1098,-191 1098,-191 1104,-191 1110,-197 1110,-203 1110,-203 1110,-262 1110,-262 1110,-268 1104,-274 1098,-274\"/>\n<text text-anchor=\"start\" x=\"983\" y=\"-258.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2006.5</text>\n<text text-anchor=\"start\" x=\"989.5\" y=\"-243.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.494</text>\n<text text-anchor=\"start\" x=\"971.5\" y=\"-228.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 44114</text>\n<text text-anchor=\"start\" x=\"953\" y=\"-213.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [19725, 24389]</text>\n<text text-anchor=\"start\" x=\"993\" y=\"-198.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 32&#45;&gt;48 -->\n<g id=\"edge24\" class=\"edge\">\n<title>32&#45;&gt;48</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M868.1058,-310.8798C889.8881,-300.1687 913.5223,-288.5469 935.7548,-277.6144\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"937.4266,-280.6926 944.8559,-273.1391 934.3377,-274.411 937.4266,-280.6926\"/>\n</g>\n<!-- 34 -->\n<g id=\"node19\" class=\"node\">\n<title>34</title>\n<path fill=\"#f1b991\" stroke=\"#000000\" d=\"M772.5,-155C772.5,-155 664.5,-155 664.5,-155 658.5,-155 652.5,-149 652.5,-143 652.5,-143 652.5,-84 652.5,-84 652.5,-78 658.5,-72 664.5,-72 664.5,-72 772.5,-72 772.5,-72 778.5,-72 784.5,-78 784.5,-84 784.5,-84 784.5,-143 784.5,-143 784.5,-149 778.5,-155 772.5,-155\"/>\n<text text-anchor=\"start\" x=\"680.5\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 4.5</text>\n<text text-anchor=\"start\" x=\"680.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.426</text>\n<text text-anchor=\"start\" x=\"666.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 1398</text>\n<text text-anchor=\"start\" x=\"660.5\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [968, 430]</text>\n<text text-anchor=\"start\" x=\"674.5\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Down</text>\n</g>\n<!-- 33&#45;&gt;34 -->\n<g id=\"edge18\" class=\"edge\">\n<title>33&#45;&gt;34</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M762.0667,-190.8796C757.1987,-182.2335 752.0181,-173.0322 746.9914,-164.1042\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"749.9893,-162.2947 742.0334,-155.2981 743.8897,-165.729 749.9893,-162.2947\"/>\n</g>\n<!-- 41 -->\n<g id=\"node22\" class=\"node\">\n<title>41</title>\n<path fill=\"#f2f9fd\" stroke=\"#000000\" d=\"M922.5,-155C922.5,-155 814.5,-155 814.5,-155 808.5,-155 802.5,-149 802.5,-143 802.5,-143 802.5,-84 802.5,-84 802.5,-78 808.5,-72 814.5,-72 814.5,-72 922.5,-72 922.5,-72 928.5,-72 934.5,-78 934.5,-84 934.5,-84 934.5,-143 934.5,-143 934.5,-149 928.5,-155 922.5,-155\"/>\n<text text-anchor=\"start\" x=\"826\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 10.5</text>\n<text text-anchor=\"start\" x=\"830.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.499</text>\n<text text-anchor=\"start\" x=\"816.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 1118</text>\n<text text-anchor=\"start\" x=\"810.5\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [540, 578]</text>\n<text text-anchor=\"start\" x=\"834\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 33&#45;&gt;41 -->\n<g id=\"edge21\" class=\"edge\">\n<title>33&#45;&gt;41</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M814.5294,-190.8796C820.6855,-182.0534 827.2451,-172.6485 833.5936,-163.5466\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"836.4967,-165.5024 839.3467,-155.2981 830.7552,-161.4978 836.4967,-165.5024\"/>\n</g>\n<!-- 35 -->\n<g id=\"node20\" class=\"node\">\n<title>35</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M672.5,-36C672.5,-36 642.5,-36 642.5,-36 636.5,-36 630.5,-30 630.5,-24 630.5,-24 630.5,-12 630.5,-12 630.5,-6 636.5,0 642.5,0 642.5,0 672.5,0 672.5,0 678.5,0 684.5,-6 684.5,-12 684.5,-12 684.5,-24 684.5,-24 684.5,-30 678.5,-36 672.5,-36\"/>\n<text text-anchor=\"middle\" x=\"657.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 34&#45;&gt;35 -->\n<g id=\"edge19\" class=\"edge\">\n<title>34&#45;&gt;35</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M691.922,-71.8901C686.0747,-62.7357 680.0318,-53.2752 674.6724,-44.8847\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"677.4994,-42.8086 669.1667,-36.2651 671.6001,-46.5767 677.4994,-42.8086\"/>\n</g>\n<!-- 38 -->\n<g id=\"node21\" class=\"node\">\n<title>38</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M744.5,-36C744.5,-36 714.5,-36 714.5,-36 708.5,-36 702.5,-30 702.5,-24 702.5,-24 702.5,-12 702.5,-12 702.5,-6 708.5,0 714.5,0 714.5,0 744.5,0 744.5,0 750.5,0 756.5,-6 756.5,-12 756.5,-12 756.5,-24 756.5,-24 756.5,-30 750.5,-36 744.5,-36\"/>\n<text text-anchor=\"middle\" x=\"729.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 34&#45;&gt;38 -->\n<g id=\"edge20\" class=\"edge\">\n<title>34&#45;&gt;38</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M723.2928,-71.8901C724.2911,-63.2227 725.3211,-54.2808 726.2481,-46.2325\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"729.7288,-46.5999 727.3962,-36.2651 722.7748,-45.7989 729.7288,-46.5999\"/>\n</g>\n<!-- 42 -->\n<g id=\"node23\" class=\"node\">\n<title>42</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M818.5,-36C818.5,-36 788.5,-36 788.5,-36 782.5,-36 776.5,-30 776.5,-24 776.5,-24 776.5,-12 776.5,-12 776.5,-6 782.5,0 788.5,0 788.5,0 818.5,0 818.5,0 824.5,0 830.5,-6 830.5,-12 830.5,-12 830.5,-24 830.5,-24 830.5,-30 824.5,-36 818.5,-36\"/>\n<text text-anchor=\"middle\" x=\"803.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 41&#45;&gt;42 -->\n<g id=\"edge22\" class=\"edge\">\n<title>41&#45;&gt;42</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M840.1791,-71.8901C833.8821,-62.6384 827.3723,-53.0739 821.6165,-44.6173\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"824.4518,-42.5626 815.9317,-36.2651 818.665,-46.5013 824.4518,-42.5626\"/>\n</g>\n<!-- 45 -->\n<g id=\"node24\" class=\"node\">\n<title>45</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M890.5,-36C890.5,-36 860.5,-36 860.5,-36 854.5,-36 848.5,-30 848.5,-24 848.5,-24 848.5,-12 848.5,-12 848.5,-6 854.5,0 860.5,0 860.5,0 890.5,0 890.5,0 896.5,0 902.5,-6 902.5,-12 902.5,-12 902.5,-24 902.5,-24 902.5,-30 896.5,-36 890.5,-36\"/>\n<text text-anchor=\"middle\" x=\"875.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 41&#45;&gt;45 -->\n<g id=\"edge23\" class=\"edge\">\n<title>41&#45;&gt;45</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M871.5499,-71.8901C872.1781,-63.3201 872.8259,-54.4817 873.4107,-46.5041\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"876.9207,-46.4942 874.1612,-36.2651 869.9394,-45.9825 876.9207,-46.4942\"/>\n</g>\n<!-- 49 -->\n<g id=\"node26\" class=\"node\">\n<title>49</title>\n<path fill=\"#b3d9f5\" stroke=\"#000000\" d=\"M1090,-155C1090,-155 965,-155 965,-155 959,-155 953,-149 953,-143 953,-143 953,-84 953,-84 953,-78 959,-72 965,-72 965,-72 1090,-72 1090,-72 1096,-72 1102,-78 1102,-84 1102,-84 1102,-143 1102,-143 1102,-149 1096,-155 1090,-155\"/>\n<text text-anchor=\"start\" x=\"989.5\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">month ≤ 8.5</text>\n<text text-anchor=\"start\" x=\"989.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.472</text>\n<text text-anchor=\"start\" x=\"971.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 10831</text>\n<text text-anchor=\"start\" x=\"961\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [4129, 6702]</text>\n<text text-anchor=\"start\" x=\"993\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 48&#45;&gt;49 -->\n<g id=\"edge25\" class=\"edge\">\n<title>48&#45;&gt;49</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1027.5,-190.8796C1027.5,-182.6838 1027.5,-173.9891 1027.5,-165.5013\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1031.0001,-165.298 1027.5,-155.2981 1024.0001,-165.2981 1031.0001,-165.298\"/>\n</g>\n<!-- 56 -->\n<g id=\"node29\" class=\"node\">\n<title>56</title>\n<path fill=\"#e8f3fc\" stroke=\"#000000\" d=\"M1273,-155C1273,-155 1132,-155 1132,-155 1126,-155 1120,-149 1120,-143 1120,-143 1120,-84 1120,-84 1120,-78 1126,-72 1132,-72 1132,-72 1273,-72 1273,-72 1279,-72 1285,-78 1285,-84 1285,-84 1285,-143 1285,-143 1285,-149 1279,-155 1273,-155\"/>\n<text text-anchor=\"start\" x=\"1158\" y=\"-139.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">year ≤ 2008.5</text>\n<text text-anchor=\"start\" x=\"1164.5\" y=\"-124.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.498</text>\n<text text-anchor=\"start\" x=\"1146.5\" y=\"-109.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 33283</text>\n<text text-anchor=\"start\" x=\"1128\" y=\"-94.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [15596, 17687]</text>\n<text text-anchor=\"start\" x=\"1168\" y=\"-79.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = Up</text>\n</g>\n<!-- 48&#45;&gt;56 -->\n<g id=\"edge28\" class=\"edge\">\n<title>48&#45;&gt;56</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1088.7065,-190.8796C1102.9606,-181.1868 1118.241,-170.7961 1132.8307,-160.8752\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1135.0269,-163.6143 1141.3281,-155.0969 1131.0907,-157.8258 1135.0269,-163.6143\"/>\n</g>\n<!-- 50 -->\n<g id=\"node27\" class=\"node\">\n<title>50</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M1003.5,-36C1003.5,-36 973.5,-36 973.5,-36 967.5,-36 961.5,-30 961.5,-24 961.5,-24 961.5,-12 961.5,-12 961.5,-6 967.5,0 973.5,0 973.5,0 1003.5,0 1003.5,0 1009.5,0 1015.5,-6 1015.5,-12 1015.5,-12 1015.5,-24 1015.5,-24 1015.5,-30 1009.5,-36 1003.5,-36\"/>\n<text text-anchor=\"middle\" x=\"988.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 49&#45;&gt;50 -->\n<g id=\"edge26\" class=\"edge\">\n<title>49&#45;&gt;50</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1010.5075,-71.8901C1006.8884,-63.0279 1003.1521,-53.8788 999.8085,-45.6913\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1002.98,-44.1996 995.959,-36.2651 996.4995,-46.8461 1002.98,-44.1996\"/>\n</g>\n<!-- 53 -->\n<g id=\"node28\" class=\"node\">\n<title>53</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M1075.5,-36C1075.5,-36 1045.5,-36 1045.5,-36 1039.5,-36 1033.5,-30 1033.5,-24 1033.5,-24 1033.5,-12 1033.5,-12 1033.5,-6 1039.5,0 1045.5,0 1045.5,0 1075.5,0 1075.5,0 1081.5,0 1087.5,-6 1087.5,-12 1087.5,-12 1087.5,-24 1087.5,-24 1087.5,-30 1081.5,-36 1075.5,-36\"/>\n<text text-anchor=\"middle\" x=\"1060.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 49&#45;&gt;53 -->\n<g id=\"edge27\" class=\"edge\">\n<title>49&#45;&gt;53</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1041.8783,-71.8901C1044.907,-63.1253 1048.0326,-54.0798 1050.8379,-45.9615\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1054.2305,-46.8599 1054.1885,-36.2651 1047.6144,-44.5736 1054.2305,-46.8599\"/>\n</g>\n<!-- 57 -->\n<g id=\"node30\" class=\"node\">\n<title>57</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M1181.5,-36C1181.5,-36 1151.5,-36 1151.5,-36 1145.5,-36 1139.5,-30 1139.5,-24 1139.5,-24 1139.5,-12 1139.5,-12 1139.5,-6 1145.5,0 1151.5,0 1151.5,0 1181.5,0 1181.5,0 1187.5,0 1193.5,-6 1193.5,-12 1193.5,-12 1193.5,-24 1193.5,-24 1193.5,-30 1187.5,-36 1181.5,-36\"/>\n<text text-anchor=\"middle\" x=\"1166.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 56&#45;&gt;57 -->\n<g id=\"edge29\" class=\"edge\">\n<title>56&#45;&gt;57</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1186.8146,-71.8901C1183.4739,-63.0279 1180.025,-53.8788 1176.9386,-45.6913\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1180.1877,-44.3878 1173.3853,-36.2651 1173.6376,-46.8569 1180.1877,-44.3878\"/>\n</g>\n<!-- 60 -->\n<g id=\"node31\" class=\"node\">\n<title>60</title>\n<path fill=\"#c0c0c0\" stroke=\"#000000\" d=\"M1253.5,-36C1253.5,-36 1223.5,-36 1223.5,-36 1217.5,-36 1211.5,-30 1211.5,-24 1211.5,-24 1211.5,-12 1211.5,-12 1211.5,-6 1217.5,0 1223.5,0 1223.5,0 1253.5,0 1253.5,0 1259.5,0 1265.5,-6 1265.5,-12 1265.5,-12 1265.5,-24 1265.5,-24 1265.5,-30 1259.5,-36 1253.5,-36\"/>\n<text text-anchor=\"middle\" x=\"1238.5\" y=\"-14.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">(...)</text>\n</g>\n<!-- 56&#45;&gt;60 -->\n<g id=\"edge30\" class=\"edge\">\n<title>56&#45;&gt;60</title>\n<path fill=\"none\" stroke=\"#000000\" d=\"M1218.1854,-71.8901C1221.5261,-63.0279 1224.975,-53.8788 1228.0614,-45.6913\"/>\n<polygon fill=\"#000000\" stroke=\"#000000\" points=\"1231.3624,-46.8569 1231.6147,-36.2651 1224.8123,-44.3878 1231.3624,-46.8569\"/>\n</g>\n</g>\n</svg>\n"
},
"metadata": {},
"execution_count": 59
}
],
"source": [
"out_file = results_path / 'clf_tree.dot'\n",
"dot_data = export_graphviz(clf,\n",
" out_file=out_file.as_posix(),\n",
" feature_names=X.columns,\n",
" class_names=['Down', 'Up'],\n",
" max_depth=3,\n",
" filled=True,\n",
" rounded=True,\n",
" special_characters=True)\n",
"if out_file is not None:\n",
" dot_data = Path(out_file).read_text()\n",
"\n",
"graphviz.Source(dot_data)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-0hmTMQoZDwS"
},
"source": [
"### Evaluate Test Set"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4jlpD99RZDwS"
},
"source": [
"To evaluate the predictive accuracy of our first classification tree, we will use our test set to generate predicted class probabilities. \n",
"\n",
"The `.predict_proba()` method produces one probability for each class. In the binary class, these probabilities are complementary and sum to 1, so we only need the value for the positive class. "
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.270863Z",
"start_time": "2021-04-16T00:33:36.262990Z"
},
"id": "eV1ZsGsKZDwS"
},
"outputs": [],
"source": [
"y_score = clf.predict_proba(X=X_test)[:, 1]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Bpr6yEe1ZDwT"
},
"source": [
"To evaluate the generalization error, we will use the area under the curve based on the receiver-operating characteristic that we introduced in Chapter 6, The Machine Learning Process. The result indicates a significant improvement above and beyond the baseline value of 0.5 for a random prediction:"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.283613Z",
"start_time": "2021-04-16T00:33:36.272140Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "oPQElmo4ZDwT",
"outputId": "c390cc55-f25a-4548-94f4-8c93183a7dd3"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.6162304070004103"
]
},
"metadata": {},
"execution_count": 61
}
],
"source": [
"roc_auc_score(y_score=y_score, y_true=y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_--mqdElZDwU"
},
"source": [
"### Print Decision Path"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "X8fEv6WEZDwU"
},
"source": [
"Inspired by https://stackoverflow.com/questions/20224526/how-to-extract-the-decision-rules-from-scikit-learn-decision-tree"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.294116Z",
"start_time": "2021-04-16T00:33:36.284877Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "84x4UWlJZDwU",
"outputId": "c94b2c21-c47d-4a73-d671-b6d20d1f3dcc"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Help on class Tree in module sklearn.tree._tree:\n",
"\n",
"class Tree(builtins.object)\n",
" | Array-based representation of a binary decision tree.\n",
" | \n",
" | The binary tree is represented as a number of parallel arrays. The i-th\n",
" | element of each array holds information about the node `i`. Node 0 is the\n",
" | tree's root. You can find a detailed description of all arrays in\n",
" | `_tree.pxd`. NOTE: Some of the arrays only apply to either leaves or split\n",
" | nodes, resp. In this case the values of nodes of the other type are\n",
" | arbitrary!\n",
" | \n",
" | Attributes\n",
" | ----------\n",
" | node_count : int\n",
" | The number of nodes (internal nodes + leaves) in the tree.\n",
" | \n",
" | capacity : int\n",
" | The current capacity (i.e., size) of the arrays, which is at least as\n",
" | great as `node_count`.\n",
" | \n",
" | max_depth : int\n",
" | The depth of the tree, i.e. the maximum depth of its leaves.\n",
" | \n",
" | children_left : array of int, shape [node_count]\n",
" | children_left[i] holds the node id of the left child of node i.\n",
" | For leaves, children_left[i] == TREE_LEAF. Otherwise,\n",
" | children_left[i] > i. This child handles the case where\n",
" | X[:, feature[i]] <= threshold[i].\n",
" | \n",
" | children_right : array of int, shape [node_count]\n",
" | children_right[i] holds the node id of the right child of node i.\n",
" | For leaves, children_right[i] == TREE_LEAF. Otherwise,\n",
" | children_right[i] > i. This child handles the case where\n",
" | X[:, feature[i]] > threshold[i].\n",
" | \n",
" | feature : array of int, shape [node_count]\n",
" | feature[i] holds the feature to split on, for the internal node i.\n",
" | \n",
" | threshold : array of double, shape [node_count]\n",
" | threshold[i] holds the threshold for the internal node i.\n",
" | \n",
" | value : array of double, shape [node_count, n_outputs, max_n_classes]\n",
" | Contains the constant prediction value of each node.\n",
" | \n",
" | impurity : array of double, shape [node_count]\n",
" | impurity[i] holds the impurity (i.e., the value of the splitting\n",
" | criterion) at node i.\n",
" | \n",
" | n_node_samples : array of int, shape [node_count]\n",
" | n_node_samples[i] holds the number of training samples reaching node i.\n",
" | \n",
" | weighted_n_node_samples : array of int, shape [node_count]\n",
" | weighted_n_node_samples[i] holds the weighted number of training samples\n",
" | reaching node i.\n",
" | \n",
" | Methods defined here:\n",
" | \n",
" | __getstate__(...)\n",
" | Getstate re-implementation, for pickling.\n",
" | \n",
" | __reduce__(...)\n",
" | Reduce re-implementation, for pickling.\n",
" | \n",
" | __setstate__(...)\n",
" | Setstate re-implementation, for unpickling.\n",
" | \n",
" | apply(...)\n",
" | Finds the terminal region (=leaf node) for each sample in X.\n",
" | \n",
" | compute_feature_importances(...)\n",
" | Computes the importance of each feature (aka variable).\n",
" | \n",
" | compute_partial_dependence(...)\n",
" | Partial dependence of the response on the ``target_feature`` set.\n",
" | \n",
" | For each sample in ``X`` a tree traversal is performed.\n",
" | Each traversal starts from the root with weight 1.0.\n",
" | \n",
" | At each non-leaf node that splits on a target feature, either\n",
" | the left child or the right child is visited based on the feature\n",
" | value of the current sample, and the weight is not modified.\n",
" | At each non-leaf node that splits on a complementary feature,\n",
" | both children are visited and the weight is multiplied by the fraction\n",
" | of training samples which went to each child.\n",
" | \n",
" | At each leaf, the value of the node is multiplied by the current\n",
" | weight (weights sum to 1 for all visited terminal nodes).\n",
" | \n",
" | Parameters\n",
" | ----------\n",
" | X : view on 2d ndarray, shape (n_samples, n_target_features)\n",
" | The grid points on which the partial dependence should be\n",
" | evaluated.\n",
" | target_features : view on 1d ndarray, shape (n_target_features)\n",
" | The set of target features for which the partial dependence\n",
" | should be evaluated.\n",
" | out : view on 1d ndarray, shape (n_samples)\n",
" | The value of the partial dependence function on each grid\n",
" | point.\n",
" | \n",
" | decision_path(...)\n",
" | Finds the decision path (=node) for each sample in X.\n",
" | \n",
" | predict(...)\n",
" | Predict target for X.\n",
" | \n",
" | ----------------------------------------------------------------------\n",
" | Static methods defined here:\n",
" | \n",
" | __new__(*args, **kwargs) from builtins.type\n",
" | Create and return a new object. See help(type) for accurate signature.\n",
" | \n",
" | ----------------------------------------------------------------------\n",
" | Data descriptors defined here:\n",
" | \n",
" | capacity\n",
" | \n",
" | children_left\n",
" | \n",
" | children_right\n",
" | \n",
" | feature\n",
" | \n",
" | impurity\n",
" | \n",
" | max_depth\n",
" | \n",
" | max_n_classes\n",
" | \n",
" | n_classes\n",
" | \n",
" | n_features\n",
" | \n",
" | n_leaves\n",
" | \n",
" | n_node_samples\n",
" | \n",
" | n_outputs\n",
" | \n",
" | node_count\n",
" | \n",
" | threshold\n",
" | \n",
" | value\n",
" | \n",
" | weighted_n_node_samples\n",
" | \n",
" | ----------------------------------------------------------------------\n",
" | Data and other attributes defined here:\n",
" | \n",
" | __pyx_vtable__ = <capsule object NULL>\n",
"\n"
]
}
],
"source": [
"from sklearn.tree._tree import Tree\n",
"help(Tree)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.302800Z",
"start_time": "2021-04-16T00:33:36.295041Z"
},
"id": "c5vTXcTwZDwV"
},
"outputs": [],
"source": [
"def tree_to_code(tree, feature_names):\n",
" if isinstance(tree, DecisionTreeClassifier):\n",
" model = 'clf'\n",
" elif isinstance(tree, DecisionTreeRegressor):\n",
" model = 'reg'\n",
" else:\n",
" raise ValueError('Need Regression or Classification Tree')\n",
" \n",
" tree_ = tree.tree_\n",
" feature_name = [\n",
" feature_names[i] if i != _tree.TREE_UNDEFINED else \"undefined!\"\n",
" for i in tree_.feature\n",
" ]\n",
" print(\"def tree({}):\".format(\", \".join(feature_names)))\n",
"\n",
" def recurse(node, depth):\n",
" indent = \" \" * depth\n",
" if tree_.feature[node] != _tree.TREE_UNDEFINED:\n",
" name = feature_name[node]\n",
" threshold = tree_.threshold[node]\n",
" print(indent, f'if {name} <= {threshold:.2%}')\n",
" recurse(tree_.children_left[node], depth + 1)\n",
" print(indent, f'else: # if {name} > {threshold:.2%}')\n",
" recurse(tree_.children_right[node], depth + 1)\n",
" else:\n",
" pred = tree_.value[node][0]\n",
" val = pred[1]/sum(pred) if model == 'clf' else pred[0]\n",
" print(indent, f'return {val:.2%}')\n",
" recurse(0, 1)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.322605Z",
"start_time": "2021-04-16T00:33:36.304005Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "s-KuRzTVZDwW",
"outputId": "6cfc838a-3658-4dc9-de72-e1355d93097c"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"def tree(t-1, t-2):\n",
" if t-1 <= -14.64%\n",
" if t-2 <= -17.93%\n",
" return 55.84%\n",
" else: # if t-2 > -17.93%\n",
" if t-1 <= -26.16%\n",
" return 41.08%\n",
" else: # if t-1 > -26.16%\n",
" if t-1 <= -26.14%\n",
" return 100.00%\n",
" else: # if t-1 > -26.14%\n",
" if t-1 <= -14.66%\n",
" return 49.09%\n",
" else: # if t-1 > -14.66%\n",
" return 0.00%\n",
" else: # if t-1 > -14.64%\n",
" if t-2 <= 18.14%\n",
" if t-2 <= -14.83%\n",
" if t-2 <= -14.85%\n",
" if t-1 <= -14.31%\n",
" return 77.78%\n",
" else: # if t-1 > -14.31%\n",
" return 52.24%\n",
" else: # if t-2 > -14.85%\n",
" return 0.00%\n",
" else: # if t-2 > -14.83%\n",
" if t-1 <= -6.59%\n",
" if t-2 <= -6.04%\n",
" return 58.58%\n",
" else: # if t-2 > -6.04%\n",
" return 53.78%\n",
" else: # if t-1 > -6.59%\n",
" if t-1 <= 2.68%\n",
" return 58.02%\n",
" else: # if t-1 > 2.68%\n",
" return 56.44%\n",
" else: # if t-2 > 18.14%\n",
" if t-1 <= 14.36%\n",
" if t-1 <= -4.91%\n",
" return 57.74%\n",
" else: # if t-1 > -4.91%\n",
" if t-1 <= -1.17%\n",
" return 45.69%\n",
" else: # if t-1 > -1.17%\n",
" return 52.47%\n",
" else: # if t-1 > 14.36%\n",
" return 41.73%\n"
]
}
],
"source": [
"tree_to_code(clf_tree_t2, X2.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cVIK-BGkZDwX"
},
"source": [
"## Overfitting, Regularization & Parameter Tuning"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BssQtPn0ZDwX"
},
"source": [
"Decision trees have a strong tendency to overfit, especially when a dataset has a large number of features relative to the number of samples. As discussed in previous chapters, overfitting increases the prediction error because the model does not only learn the signal contained in the training data, but also the noise.\n",
"There are several ways to address the risk of overfitting."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "X-fsFNPaZDwY"
},
"source": [
"Decision trees provide several regularization hyperparameters to limit the growth of a tree and the associated complexity. While every split increases the number of nodes, it also reduces the number of samples available per node to support a prediction. For each additional level, twice the number of samples is needed to populate the new nodes with the same sample density. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mv1DsvxJZDwY"
},
"source": [
"### Decision Tree Parameters"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WNN7fetVZDwZ"
},
"source": [
"The following table lists key parameters available for this purpose in the sklearn decision tree implementation. After introducing the most important parameters, we will illustrate how to use cross-validation to optimize the hyperparameter settings with respect to the bias-variance tradeoff and lower prediction errors:"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ONSoSPnAZDwZ"
},
"source": [
"| Parameter | Default | Options | Description |\n",
"|--------------------------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n",
"| criterion | gini | Regression: MSE, MAE Classification: Gini impurity, Cross Entropy | Metric to evaluate split quality. |\n",
"| splitter | best | best, random | How to choose the split at each node. Supported strategies are “best” to choose the best split and “random” to choose the best random split. |\n",
"| max_depth | None | int | Max # of levels in tree. Split nodes until max_depth is reached or all leaves are pure or all leaves contain less than min_samples_split samples. |\n",
"| max_features | None | None: max_features=n_features; int; float (fraction): int(max_features * n_features) auto, sqrt: max_features=sqrt(n_features). log2: max_features=log2(n_features). | # of features to consider when evaluating split |\n",
"| max_leaf_nodes | None | None: unlimited # of leaf nodes int | Continue to split nodes that reduce relative impurity the most until reaching max_leaf_nodes. |\n",
"| min_impurity_decrease | 0 | float | Split node if impurity decreases by at least this value. |\n",
"| min_samples_leaf | 1 | int; float (as percentage of N) | Minimum # of samples to be at a leaf node. A split will only be considered if there are at least min_samples_leaf training samples in each of the left and right branches. May smoothen the model, esp. for regression. |\n",
"| min_samples_split | 2 | int; float (as percentage of N) | The minimum number of samples required to split an internal node: |\n",
"| min_weight_fraction_leaf | 0 | NA | The minimum weighted fraction of the sum total of weights (of all the input samples) required to be at a leaf node. Samples have equal weight when sample_weight is not provided (in fit method). |\n",
"| class_weight | None | balanced: inversely proportional to class frequencies dict: {class_label: weight} list of dicts (for multi-output) | Weights associated with classes |"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wv07vR34ZDwZ"
},
"source": [
"The `max_depth` parameter imposes a hard limit on the number of consecutive splits and represents the most straightforward way to cap the growth of a tree.\n",
"\n",
"The m`in_samples_split` and `min_samples_leaf` parameters are alternative, data-driven ways to limit the growth of a tree. Rather than imposing a hard limit on the number of consecutive splits, these parameters control the minimum number of samples required to further split the data. The latter guarantees a certain number of samples per leaf, while the former can create very small leaves if a split results in a very uneven distribution. Small parameter values facilitate overfitting, while a high number may prevent the tree from learning the signal in the data. \n",
"\n",
"The default values are often quite low, and you should use cross-validation to explore a range of potential values. You can also use a float to indicate a percentage as opposed to an absolute number. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RUymy9VaZDwa"
},
"source": [
"### Cross-validation parameters"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.328359Z",
"start_time": "2021-04-16T00:33:36.323742Z"
},
"id": "2zX80RQeZDwb"
},
"outputs": [],
"source": [
"n_splits = 10\n",
"train_period_length = 60\n",
"test_period_length = 6\n",
"lookahead = 1\n",
"\n",
"cv = MultipleTimeSeriesCV(n_splits=n_splits,\n",
" train_period_length=train_period_length,\n",
" test_period_length=test_period_length,\n",
" lookahead=lookahead)"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.334074Z",
"start_time": "2021-04-16T00:33:36.329663Z"
},
"id": "ExDruCerZDwb"
},
"outputs": [],
"source": [
"max_depths = range(1, 16)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RKocRO8QZDwb"
},
"source": [
"### Finding the best trees using GridSearchCV"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3W0vg_3YZDwb"
},
"source": [
"scikit-learn provides a method to define ranges of values for multiple hyperparameters. It automates the process of cross-validating the various combinations of these parameter values to identify the optimal configuration. Let's walk through the process of automatically tuning your model."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WzwvPwWPZDwc"
},
"source": [
"#### Define parameter grid"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "kx8XKP6IZDwc"
},
"source": [
"The first step is to define a dictionary where the keywords name the hyperparameters, and the values list the parameter settings to be tested:"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.346973Z",
"start_time": "2021-04-16T00:33:36.335032Z"
},
"id": "TQyjkhhzZDwc"
},
"outputs": [],
"source": [
"param_grid = {'max_depth': [2, 3, 4, 5, 6, 7, 8, 10, 12, 15],\n",
" 'min_samples_leaf': [5, 25, 50, 100],\n",
" 'max_features': ['sqrt', 'auto']}"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vF1UJqRVZDwc"
},
"source": [
"#### Classification Tree"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IKLHcTjbZDwe"
},
"source": [
"Then, we instantiate a model object:"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.354743Z",
"start_time": "2021-04-16T00:33:36.348117Z"
},
"id": "p97Cb6ZiZDwe"
},
"outputs": [],
"source": [
"clf = DecisionTreeClassifier(random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yiZUlKNeZDwf"
},
"source": [
"Now we instantiate the GridSearchCV object, providing the estimator object and parameter grid, as well as a scoring method and cross-validation choice to the initialization method. We'll use an object of our custom OneStepTimeSeriesSplit class, initialized to use ten folds for the cv parameter, and set the scoring to the roc_auc metric. We can parallelize the search using the n_jobs parameter and automatically obtain a trained model that uses the optimal hyperparameters by setting `refit=True`."
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:36.363000Z",
"start_time": "2021-04-16T00:33:36.355848Z"
},
"id": "FzPz0zxJZDwf"
},
"outputs": [],
"source": [
"gridsearch_clf = GridSearchCV(estimator=clf,\n",
" param_grid=param_grid,\n",
" scoring='roc_auc',\n",
" n_jobs=-1,\n",
" cv=cv,\n",
" refit=True,\n",
" return_train_score=True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MK7s4jo5ZDwg"
},
"source": [
"With all settings in place, we can fit GridSearchCV just like any other model:"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:53.853282Z",
"start_time": "2021-04-16T00:33:36.364001Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "cnBsuzLKZDwg",
"outputId": "29cfa149-9eae-4c5e-f95f-0818109f36c1"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"GridSearchCV(cv=<__main__.MultipleTimeSeriesCV object at 0x7f2b15753450>,\n",
" estimator=DecisionTreeClassifier(random_state=42), n_jobs=-1,\n",
" param_grid={'max_depth': [2, 3, 4, 5, 6, 7, 8, 10, 12, 15],\n",
" 'max_features': ['sqrt', 'auto'],\n",
" 'min_samples_leaf': [5, 25, 50, 100]},\n",
" return_train_score=True, scoring='roc_auc')"
]
},
"metadata": {},
"execution_count": 70
}
],
"source": [
"gridsearch_clf.fit(X=X, y=y_binary)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "d6B9swt8ZDwh"
},
"source": [
"The training process produces some new attributes for our GridSearchCV object, most importantly the information about the optimal settings and the best cross-validation score (now using the proper setup that avoids lookahead bias).\n",
"\n",
"Setting `max_depth` to 10, `min_samples_leaf` to 750, and randomly selecting only a number corresponding to the square root of the total number of features when deciding on a split, produces the best results, with an AUC of 0.532:"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:53.857480Z",
"start_time": "2021-04-16T00:33:53.854544Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Xaz7n88kZDwh",
"outputId": "75c1331a-aaa1-4700-dd25-35a592bf3ea2"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'max_depth': 15, 'max_features': 'sqrt', 'min_samples_leaf': 50}"
]
},
"metadata": {},
"execution_count": 71
}
],
"source": [
"gridsearch_clf.best_params_"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:53.871480Z",
"start_time": "2021-04-16T00:33:53.858438Z"
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "pjgB02nGZDwi",
"outputId": "7ee78230-35cd-4a10-930c-96ea80572db9"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.5199693215653027"
]
},
"metadata": {},
"execution_count": 72
}
],
"source": [
"gridsearch_clf.best_score_"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "s966SYVBZDwj"
},
"source": [
"#### Define Custom IC score"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:53.880255Z",
"start_time": "2021-04-16T00:33:53.872541Z"
},
"id": "SR4z_pu5ZDwj"
},
"outputs": [],
"source": [
"def rank_correl(y, y_pred):\n",
" return spearmanr(y, y_pred)[0]\n",
"ic = make_scorer(rank_correl)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "M4r-sQpMZDwk"
},
"source": [
"#### Regression Tree"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:53.888614Z",
"start_time": "2021-04-16T00:33:53.881766Z"
},
"id": "27Umbp3WZDwk"
},
"outputs": [],
"source": [
"reg_tree = DecisionTreeRegressor(random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:33:53.896846Z",
"start_time": "2021-04-16T00:33:53.889580Z"
},
"id": "eC5p2I21ZDwk"
},
"outputs": [],
"source": [
"gridsearch_reg = GridSearchCV(estimator=reg_tree,\n",
" param_grid=param_grid,\n",
" scoring=ic,\n",
" n_jobs=-1,\n",
" cv=cv,\n",
" refit=True,\n",
" return_train_score=True)"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:33.328283Z",
"start_time": "2021-04-16T00:33:53.897801Z"
},
"id": "Z7YZ73s7ZDwl",
"outputId": "08499f8c-0b82-4b24-9943-4ab9f09f344d",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"GridSearchCV(cv=<__main__.MultipleTimeSeriesCV object at 0x7f2b15753450>,\n",
" estimator=DecisionTreeRegressor(random_state=42), n_jobs=-1,\n",
" param_grid={'max_depth': [2, 3, 4, 5, 6, 7, 8, 10, 12, 15],\n",
" 'max_features': ['sqrt', 'auto'],\n",
" 'min_samples_leaf': [5, 25, 50, 100]},\n",
" return_train_score=True, scoring=make_scorer(rank_correl))"
]
},
"metadata": {},
"execution_count": 76
}
],
"source": [
"gridsearch_reg.fit(X=X, y=y)"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:33.340010Z",
"start_time": "2021-04-16T00:34:33.333245Z"
},
"id": "x12D5jeuZDwl",
"outputId": "9cd40dcc-87bb-4721-a544-b93cd83fb501",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'max_depth': 10, 'max_features': 'sqrt', 'min_samples_leaf': 5}"
]
},
"metadata": {},
"execution_count": 77
}
],
"source": [
"gridsearch_reg.best_params_"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:33.351382Z",
"start_time": "2021-04-16T00:34:33.341496Z"
},
"id": "CghDOUptZDwl",
"outputId": "a00ec3a9-48be-46a0-b7bb-badf7f6fe002",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.04896325082800322"
]
},
"metadata": {},
"execution_count": 78
}
],
"source": [
"gridsearch_reg.best_score_"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:33.363598Z",
"start_time": "2021-04-16T00:34:33.352847Z"
},
"id": "aDHLVtlOZDwl",
"outputId": "a96713ae-b08f-42b3-fb7a-cf964a9a1ea6",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 143
}
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Regression Classification\n",
"max_depth 10 15\n",
"max_features sqrt sqrt\n",
"min_samples_leaf 5 50"
],
"text/html": [
"\n",
" <div id=\"df-be62d867-f8d3-4931-96d1-4bef06b7d765\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Regression</th>\n",
" <th>Classification</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>max_depth</th>\n",
" <td>10</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max_features</th>\n",
" <td>sqrt</td>\n",
" <td>sqrt</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min_samples_leaf</th>\n",
" <td>5</td>\n",
" <td>50</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-be62d867-f8d3-4931-96d1-4bef06b7d765')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-be62d867-f8d3-4931-96d1-4bef06b7d765 button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-be62d867-f8d3-4931-96d1-4bef06b7d765');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
]
},
"metadata": {},
"execution_count": 79
}
],
"source": [
"pd.DataFrame({'Regression': pd.Series(gridsearch_reg.best_params_),\n",
" 'Classification': pd.Series(gridsearch_clf.best_params_)})"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "aMqsdUhKZDwm"
},
"source": [
"### Classifier Cross-Validation"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "W8afUvm2ZDwm"
},
"source": [
"Cross-validation is the most important tool to obtain an unbiased estimate of the generalization error, which in turn permits an informed choice among the various configuration options. sklearn offers several tools to facilitate the process of cross-validating numerous parameter settings, namely the GridSearchCV convenience class that we will illustrate in the next section. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "K-muYhTPZDwn"
},
"source": [
"The following code illustrates how to run cross-validation more manually to obtain custom tree attributes, such as the total number of nodes or leaf nodes associated with certain hyperparameter settings. \n",
"\n",
"The following function accesses the internal `.tree_` attribute to retrieve information about the total node count, and how many of these nodes are leaf nodes:"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:33.369594Z",
"start_time": "2021-04-16T00:34:33.364452Z"
},
"id": "O-vkLpnpZDwn"
},
"outputs": [],
"source": [
"def get_leaves_count(tree):\n",
" t = tree.tree_\n",
" n = t.node_count\n",
" leaves = len([i for i in range(t.node_count) if t.children_left[i]== -1])\n",
" return leaves"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GP0fPPiTZDwn"
},
"source": [
"We can combine this information with the train and test scores to gain detailed knowledge about the model behavior throughout the cross-validation process, as follows:"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:46.896130Z",
"start_time": "2021-04-16T00:34:33.377385Z"
},
"scrolled": true,
"id": "jx_WuOJPZDwn",
"outputId": "4d791d7d-bfa6-437c-d751-60be3ea599ad",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 "
]
}
],
"source": [
"train_scores, val_scores, leaves = {}, {}, {}\n",
"for max_depth in max_depths:\n",
" print(max_depth, end=' ', flush=True)\n",
" clf = DecisionTreeClassifier(criterion='gini', \n",
" max_depth=max_depth,\n",
" min_samples_leaf=5,\n",
" max_features='sqrt',\n",
" random_state=42)\n",
" train_scores[max_depth], val_scores[max_depth], leaves[max_depth] = [], [], []\n",
" for train_idx, test_idx in cv.split(X):\n",
" X_train, y_train, = X.iloc[train_idx], y_binary.iloc[train_idx]\n",
" X_test, y_test = X.iloc[test_idx], y_binary.iloc[test_idx]\n",
" clf.fit(X=X_train, y=y_train)\n",
"\n",
" train_pred = clf.predict_proba(X=X_train)[:, 1]\n",
" train_score = roc_auc_score(y_score=train_pred, y_true=y_train)\n",
" train_scores[max_depth].append(train_score)\n",
"\n",
" test_pred = clf.predict_proba(X=X_test)[:, 1]\n",
" val_score = roc_auc_score(y_score=test_pred, y_true=y_test)\n",
" val_scores[max_depth].append(val_score) \n",
" leaves[max_depth].append(get_leaves_count(clf))\n",
" \n",
"clf_train_scores = pd.DataFrame(train_scores)\n",
"clf_valid_scores = pd.DataFrame(val_scores)\n",
"clf_leaves = pd.DataFrame(leaves)"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:46.906671Z",
"start_time": "2021-04-16T00:34:46.898503Z"
},
"id": "Sk_LpmFRZDwo"
},
"outputs": [],
"source": [
"clf_cv_data = pd.concat([pd.melt(clf_train_scores,\n",
" var_name='Max. Depth',\n",
" value_name='ROC AUC').assign(Data='Train'),\n",
" pd.melt(clf_valid_scores,\n",
" var_name='Max. Depth',\n",
" value_name='ROC AUC').assign(Data='Valid')])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Vq4tWo38ZDwo"
},
"source": [
"### Regression tree cross-validation"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iRhxlR1wZDwo"
},
"source": [
"#### Run cross-validation"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:58.712044Z",
"start_time": "2021-04-16T00:34:46.907862Z"
},
"id": "yzjFnePjZDwo",
"outputId": "4e6a4e89-48b3-4531-cb92-9c9317a61ecf",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 "
]
}
],
"source": [
"train_scores, val_scores, leaves = {}, {}, {}\n",
"for max_depth in max_depths:\n",
" print(max_depth, end=' ', flush=True)\n",
" reg_tree = DecisionTreeRegressor(max_depth=max_depth,\n",
" min_samples_leaf=50,\n",
" max_features= 'sqrt',\n",
" random_state=42)\n",
" train_scores[max_depth], val_scores[max_depth], leaves[max_depth] = [], [], []\n",
" for train_idx, test_idx in cv.split(X):\n",
" X_train, y_train, = X.iloc[train_idx], y.iloc[train_idx]\n",
" X_test, y_test = X.iloc[test_idx], y.iloc[test_idx]\n",
" reg_tree.fit(X=X_train, y=y_train)\n",
"\n",
" train_pred = reg_tree.predict(X=X_train)\n",
" train_score = spearmanr(train_pred, y_train)[0]\n",
" train_scores[max_depth].append(train_score)\n",
"\n",
" test_pred = reg_tree.predict(X=X_test)\n",
" val_score = spearmanr(test_pred, y_test)[0]\n",
" val_scores[max_depth].append(val_score)\n",
" leaves[max_depth].append(get_leaves_count(reg_tree))\n",
"\n",
"reg_train_scores = pd.DataFrame(train_scores)\n",
"reg_valid_scores = pd.DataFrame(val_scores)\n",
"reg_leaves = pd.DataFrame(leaves)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:34:58.719502Z",
"start_time": "2021-04-16T00:34:58.712895Z"
},
"id": "W17AybwRZDwp"
},
"outputs": [],
"source": [
"reg_cv_data = (pd.melt(reg_train_scores, var_name='Max. Depth',\n",
" value_name='IC').assign(Data='Train').append(\n",
" pd.melt(reg_valid_scores,\n",
" var_name='Max. Depth',\n",
" value_name='IC').assign(Data='Valid')))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6o43CQAeZDwp"
},
"source": [
"### Compare CV Results"
]
},
{
"cell_type": "markdown",
"source": [
"There is a problem in this piece of code, scroll down to find the solution. "
],
"metadata": {
"id": "TrrcqN3I0r0J"
}
},
{
"cell_type": "code",
"source": [
"fig, axes = plt.subplots(ncols=2, figsize=(14, 5))\n",
"\n",
"sns.lineplot(data=reg_cv_data,\n",
" x='Max. Depth', y='IC',\n",
" hue='Data', ci=95,\n",
" ax=axes[0], lw=2)\n",
"\n",
"axes[0].set_title('Regression Tree')\n",
"axes[0].axvline(x=reg_valid_scores.mean().idxmax(), ls='--', c='k', lw=1)\n",
"axes[0].axhline(y=0, ls='--', c='k', lw=1)\n",
"\n",
"sns.lineplot(data=clf_cv_data,\n",
" x='Max. Depth', y='ROC AUC',\n",
" hue='Data', ci=95,\n",
" ax=axes[1], lw=2)\n",
"\n",
"axes[1].set_title('Classification Tree')\n",
"axes[1].axvline(x=clf_valid_scores.mean().idxmax(), ls='--', c='k', lw=1)\n",
"axes[1].axhline(y=.5, ls='--', c='k', lw=1)\n",
"for ax in axes:\n",
" ax.set_xlim(min(param_grid['max_depth']),\n",
" max(param_grid['max_depth']))\n",
"\n",
"fig.suptitle(f'Train-Validation Scores', fontsize=14)\n",
"sns.despine()\n",
"fig.tight_layout()\n",
"fig.subplots_adjust(top=.91)"
],
"metadata": {
"id": "F2dzOzK0ydLZ",
"outputId": "8bbe2e3f-0b7b-476b-f3f7-4cf244b588d1",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 697
}
},
"execution_count": 95,
"outputs": [
{
"output_type": "error",
"ename": "ValueError",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-95-d48a31ad5f61>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Max. Depth'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'IC'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mhue\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Data'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mci\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m95\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m ax=axes[0], lw=2)\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Regression Tree'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/seaborn/_decorators.py\u001b[0m in \u001b[0;36minner_f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 44\u001b[0m )\n\u001b[1;32m 45\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 46\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 47\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0minner_f\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/seaborn/relational.py\u001b[0m in \u001b[0;36mlineplot\u001b[0;34m(x, y, hue, size, style, data, palette, hue_order, hue_norm, sizes, size_order, size_norm, dashes, markers, style_order, units, estimator, ci, n_boot, seed, sort, err_style, err_kws, legend, ax, **kwargs)\u001b[0m\n\u001b[1;32m 708\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_attach\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 709\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 710\u001b[0;31m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 711\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 712\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/seaborn/relational.py\u001b[0m in \u001b[0;36mplot\u001b[0;34m(self, ax, kws)\u001b[0m\n\u001b[1;32m 469\u001b[0m \u001b[0;31m# Loop over the semantic subsets and add to the plot\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 470\u001b[0m \u001b[0mgrouping_vars\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"hue\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"size\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"style\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 471\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0msub_vars\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msub_data\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miter_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrouping_vars\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfrom_comp_data\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 472\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 473\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/seaborn/_core.py\u001b[0m in \u001b[0;36miter_data\u001b[0;34m(self, grouping_vars, reverse, from_comp_data)\u001b[0m\n\u001b[1;32m 981\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 982\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfrom_comp_data\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 983\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcomp_data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 984\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 985\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/seaborn/_core.py\u001b[0m in \u001b[0;36mcomp_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1055\u001b[0m \u001b[0morig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_data\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdropna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1056\u001b[0m \u001b[0mcomp_col\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSeries\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1057\u001b[0;31m \u001b[0mcomp_col\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0morig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_numeric\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconvert_units\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0morig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1058\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1059\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_scale\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"log\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m__setitem__\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m 721\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 722\u001b[0m \u001b[0miloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"iloc\"\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 723\u001b[0;31m \u001b[0miloc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setitem_with_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 724\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 725\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_validate_key\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_setitem_with_indexer\u001b[0;34m(self, indexer, value, name)\u001b[0m\n\u001b[1;32m 1730\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setitem_with_indexer_split_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1731\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1732\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setitem_single_block\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1733\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_setitem_with_indexer_split_path\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_setitem_single_block\u001b[0;34m(self, indexer, value, name)\u001b[0m\n\u001b[1;32m 1957\u001b[0m \u001b[0;31m# setting for extensionarrays that store dicts. Need to decide\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1958\u001b[0m \u001b[0;31m# if it's worth supporting that.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1959\u001b[0;31m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_align_series\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSeries\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1960\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1961\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mABCDataFrame\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mname\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m\"iloc\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_align_series\u001b[0;34m(self, indexer, ser, multiindex_indexer)\u001b[0m\n\u001b[1;32m 2094\u001b[0m \u001b[0;31m# series, so need to broadcast (see GH5206)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2095\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msum_aligners\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mis_sequence\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2096\u001b[0;31m \u001b[0mser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_values\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2097\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2098\u001b[0m \u001b[0;31m# single indexer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/series.py\u001b[0m in \u001b[0;36mreindex\u001b[0;34m(self, index, **kwargs)\u001b[0m\n\u001b[1;32m 4578\u001b[0m )\n\u001b[1;32m 4579\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mreindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4580\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4581\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4582\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mdeprecate_nonkeyword_arguments\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mversion\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallowed_args\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"self\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"labels\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36mreindex\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 4817\u001b[0m \u001b[0;31m# perform the reindex on the axes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4818\u001b[0m return self._reindex_axes(\n\u001b[0;32m-> 4819\u001b[0;31m \u001b[0maxes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlimit\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4820\u001b[0m ).__finalize__(self, method=\"reindex\")\n\u001b[1;32m 4821\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_reindex_axes\u001b[0;34m(self, axes, level, limit, tolerance, method, fill_value, copy)\u001b[0m\n\u001b[1;32m 4841\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4842\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4843\u001b[0;31m \u001b[0mallow_dups\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4844\u001b[0m )\n\u001b[1;32m 4845\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_reindex_with_indexers\u001b[0;34m(self, reindexers, fill_value, copy, allow_dups)\u001b[0m\n\u001b[1;32m 4887\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4888\u001b[0m \u001b[0mallow_dups\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mallow_dups\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4889\u001b[0;31m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4890\u001b[0m )\n\u001b[1;32m 4891\u001b[0m \u001b[0;31m# If we've made a copy once, no need to make another one\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36mreindex_indexer\u001b[0;34m(self, new_axis, indexer, axis, fill_value, allow_dups, copy, consolidate, only_slice)\u001b[0m\n\u001b[1;32m 668\u001b[0m \u001b[0;31m# some axes don't allow reindexing with dups\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 669\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mallow_dups\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 670\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_can_reindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 671\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 672\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0maxis\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36m_validate_can_reindex\u001b[0;34m(self, indexer)\u001b[0m\n\u001b[1;32m 3783\u001b[0m \u001b[0;31m# trying to reindex on an axis with duplicates\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3784\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_index_as_unique\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3785\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"cannot reindex from a duplicate axis\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3786\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3787\u001b[0m def reindex(\n",
"\u001b[0;31mValueError\u001b[0m: cannot reindex from a duplicate axis"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1008x360 with 2 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"Notice there was a problem in this code above. Let me show you how I fixed it. I saw the error message \n",
"\n",
"```\n",
"ValueError: cannot reindex from a duplicate axis\n",
"```\n",
"\n",
"Then I googled it in quotes \"ValueError: cannot reindex from a duplicate axis\" with the piece of code \"sns.lineplot\", and I found this post. \n",
"![image.png](data:image/png;base64,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jAQgpmMEh9tAAARAAARAAARAAARAAARAAATSlwDEdPraHj0HARAAARAAARAAARAAARAAARCIkQDEdIzgcBsIgAAIgAAIgAAIgAAIgAAIgED6EoCYTl/bo+cgAAIgAAIgAAIgAAIgAAIgAAIxEoCYjhEcbgMBEAABEAABEAABEAABEAABEEhfAhDT6Wt79BwEQAAEQAAEQAAEQAAEQAAEQCBGAhDTMYLDbSAAAiAAAiAAAiAAAiAAAiAAAulLAGI6fW2PnoMACIAACIAACIAACIAACIAACMRIAGI6RnC4DQRAAARAAARAAARAAARAAARAIH0JQEynr+3RcxAAARAAARAAARAAARAAARAAgRgJQEzHCA63gQAIgAAIgAAIgAAIgAAIgAAIpC8BiOn0tT16DgIgAAIgAAIgAAIgAAIgAAIgECMBiOkYweE2EAABEAABEAABEAABEAABEACB9CUAMZ2+tkfPQQAEQAAEQAAEQAAEQAAEQAAEYiQAMR0jONwGAiAAAiAAAiAAAiAAAiAAAiCQvgQgptPX9ug5CIAACIAACIAACIAACIAACIBAjAQgpmMEh9tAAARAAARAAARAAARAAARAAATSlwDEdPraHj0HARAAARAAARAAARAAARAAARCIkQDEdIzgcBsIgAAIgAAIgAAIgAAIgAAIgED6EoCYTl/bo+cgAAIgAAIgAAIgAAIgAAIgAAIxEoCYjhEcbgMBEAABEAABEAABEAABEAABEEhfAhDT6Wt79BwEQAAEQAAEQAAEQAAEQAAEQCBGAhDTMYLDbSAAAiAAAiAAAiAAAiAAAiAAAulLAGI6fW2PnoMACIAACIAACIAACIAACIAACMRIAGI6RnC4DQRAAARAAARAAARAAARAAARAIH0JQEynr+3RcxAAARAAARAAARAAARAAARAAgRgJQEzHCA63gQAIgAAIgAAIgAAIgAAIgAAIpC8BiOn0tT16DgIgAAIgAAIgAAIgAAIgAAIgECMBiOkYweE2EAABEAABEAABEAABEAABEACB9CUAMZ2+tkfPQQAEQAAEQAAEQAAEQAAEQAAEYiQAMR0jONwGAiAAAiAAAiAAAiAAAiAAAiCQvgQgptPX9ug5CIAACIAACIAACIAACIAACIBAjAQgpmMEh9tAAARAAARAAARAAARAAARAAATSlwDEdPraHj0HARAAARAA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ARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUEIKazctjQaBAAARAAARAAARAAARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUEIKazctjQaBAAARAAARAAARAAARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUEIKazctjQaBAAARAAARAAARAAARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUEIKazctjQaBAAARAAARAAARAAARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUEIKazctjQaBAAARAAARAAARAAARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUEIKazctjQaBAAARAAARAAARAAARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUEIKazctjQaBAAARAAARAAARAAARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUEIKazctjQaBAAARAAARAAARAAARAAARAAgUwSgJjOJH3UDQIgAAIgAAIgAAIgAAIgAAIgkJUE/g/or5VbnLN+GQAAAABJRU5ErkJggg==)\n",
"https://github.com/mwaskom/seaborn/issues/2515\n",
"\n",
"After that, I realized I had to add `.reset_index()` behind the data.\n"
],
"metadata": {
"id": "dl4fZ5D2zv-Z"
}
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:00.042515Z",
"start_time": "2021-04-16T00:34:58.720596Z"
},
"scrolled": true,
"id": "zbK5aMThZDwq",
"outputId": "d248efc1-5ef2-49ca-f79a-16147661e97d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 373
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1008x360 with 2 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAFkCAYAAACzThFuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3xUVfr48c/UTCY9gTQICKhICRgIICoiiLKAiKBYsIsE3VV0xcL6RQVWsKxiQRex4e7qb1lFV9Sg7qoIriICKkhT6QkppGdmMvXe8/tjkoEAAQLpPO/XKy8yM7ecO/Diuc895zzHoJRSCCGEEEIIIYQQolkZm7sBQgghhBBCCCGEkARdCCGEEEIIIYRoESRBF0IIIYQQQgghWgBJ0IUQQgghhBBCiBZAEnQhhBBCCCGEEKIFkARdCCGEEEIIIYRoASRBF0II0ebNmDGDqVOnNnczDmvH8bRr6tSpzJgxo8HPLYQQQoiWx9zcDRBCCCFqdO/e/aifjx8/nieeeKLex/2///s/lFIn2izGjh1Leno68+bNO+yzlStXkpWVxaeffkqXLl2atF1HsmbNGm688UZWr15NfHx8o57rSHJycnj++ef5/vvvKS0tJTY2lp49e3LPPffQs2fPRj+/EEII0ZpJgi6EEKLF+N///hf6/auvvmLmzJm13rPZbLW29/v9WCyWYx43KirqpNp15ZVX8txzzzFz5kzsdnutz9577z0yMzPrnZw3RLta2rn8fj+33nornTp14rnnniMpKYn9+/fzzTffUFFR0Wjn9fl8WK3WRju+EEII0VRkiLsQQogWo3379qGfmoSy5rXX6yUzM5OPP/6YG2+8kT59+vCvf/2LsrIy7r33Xi644AL69OnDmDFjeO+992od99Dh3TfccAOzZs1i/vz5DBo0iMGDB/Pkk0+i6/oR2zVu3DgCgQCffPJJrfdLS0v58ssvmThx4nG141CHtsvtdjNjxgwyMjI499xzefnllw/bZ9myZVxxxRVkZGQwePBgpk2bRmFhIQC5ubnceOONAAwePJju3buHhscfei6fz8fcuXM599xzSU9P56qrrmLdunWhz9esWUP37t1ZvXo1EydOpG/fvkyYMIHNmzfXeT3bt29n7969PPLII/Tr148OHTqQkZHBnXfeyeDBg0PbORwOHn30Uc4//3zS09MZNWoUy5cvD33+n//8h7Fjx9K7d2+GDh3KwoULa/X+Dx8+nAULFvCnP/2JzMxM7rvvPgB++OEHrr/+evr27cuQIUN49NFHcTqdof3Wrl3LVVddRUZGBv379+fKK6/k119/PerfkRBCCNGUJEEXQgjRqsyfP59JkyaRnZ3NiBEj8Pl89OzZk0WLFpGdnc2NN97Io48+yurVq496nI8++giTycSSJUt4+OGH+dvf/lYrSTxYbGwsI0aMOCzhXrZsGTabjZEjR55wOw725JNP8s033/DCCy/w5ptvsmXLFtauXVtrG7/fz7Rp0/jwww9ZtGhR6MEAQEpKCgsWLAAgOzub//3vf/zf//3fEc/11FNP8cknnzBv3jw++OADzjzzTKZMmcL+/ftrbffMM88wffp03n//feLi4rjvvvvqHCofHx+P0Wjks88+IxAIHHEbpRRTpkxh7dq1zJs3j+XLlzNjxozQSIhNmzZx9913c/HFF/PRRx8xffp0XnnlFd56661ax1m8eDFdu3blvffe49577+WXX35h8uTJDB8+nGXLlvHiiy+ybds2HnroIQACgQC///3v6d+/P8uWLeOdd97hpptuwmQyHe2vRAghhGhSMsRdCCFEq3L99dfzu9/9rtZ7t912W+j3q6++mu+++46PP/64Vq/toU4//XTuvvtuALp06cK7777L6tWrufTSS4+4/cSJE7nlllvYtWtXaDj7e++9x5gxYwgPDyc8PPyE2lHD5XKxdOlS5s2bx5AhQwB4/PHHGTp0aK3trrzyytDvaWlpzJo1i9GjR1NQUEBycjIxMTFAMFk+eA76waqqqliyZAmPPfYYF154IQCzZ8/mu+++4+233+aPf/xjaNu7776bc845B4Df//73TJo0icLCQpKTkw87blJSEjNnzuQvf/kLCxcupFevXmRmZjJmzBjOOOMMAL799lt++uknsrOz6datW+g6aixevJgBAwYwbdo0IPh3s2fPHl599VVuuOGG0HYDBw5kypQpodcPPPAAo0aN4tZbbw29N2vWLC6//HJKSkowmUxUVlYybNgwOnXqBBA6vxBCCNFSSIIuhBCiVendu3et15qm8corr7B8+XL279+Pz+fD7/czcODAox7n0IJ0iYmJlJSUAPDyyy+zaNGi0GfZ2dkMHjyYjh078t5773HfffexYcMGfvvtNx5//PGTakeNnJwc/H4/GRkZofciIiI488wza223efPmUO9weXl56P28vLwjJs1HsnfvXvx+P/369Qu9ZzKZOPvss9mxY0etbQ/+nhITEwEoKSmp81zXXXcd48aNY82aNWzcuJEvvviCV199lblz53L55ZezZcsW2rdvX2dyvHPnzsMeSvTv358XX3wRp9NJZGQkcPi/g82bN7Nnz55a0xBqevr37t1LRkYGEyZMYPLkyQwePJjBgwczcuRIUlNTj/pdCSGEEE1JEnQhhBCtSnh4eK3Xr7/+OosXL+ahhx6ie/fu2O125s+fT2lp6VGPYzbXDoEGgyGU0F1zzTWMGjUq9FliYiIGg4EJEybwz3/+kz/+8Y8sXbqUs846i/T09JNqR31UVVUxefJkzj33XJ566ini4+MpKyvjuuuuw+/3N8g5DAZDrdcHf081n9U1V79GZGQkF110ERdddBH33HMPkydP5oUXXuDyyy9vkDbC4f8OdF1n4sSJ3HzzzYdtm5SUBARHJNx0002sWrWKL7/8kmeffZaXXnopNGJBCCGEaG4yB10IIUSr9sMPPzBs2DAuv/xyevToQadOndi9e/dJHTM2NpbOnTuHfmqS1CuuuIKSkhI+/fRTsrOzmThxYoO1Iy0tDYvFwk8//RR6r6qqit9++y30eufOnZSVlfHHP/6RAQMG0K1bt8MeANTM5T5aEt2pUycsFgs//PBD6D1N0/jpp58afNi3wWCga9euuFwuAHr27ElRUdFhPfU1unbtWqtdAOvXryc5OTnUe34kPXv2ZPv27bX+3mp+Dq7+f9ZZZ5GVlcU//vEPBg4cyAcffNAAVymEEEI0DEnQhRD1sm7dOkaOHNnczRAi5LTTTmP16tWsW7eOHTt2MGfOHHJzcxvlXMnJyZx//vnMnj2bQCDA2LFjG6wdERERXHHFFTz99NN88803/Pbbbzz00ENomhbaJjU1FavVyttvv01OTg5fffUVzz//fK3jdOjQAYPBwFdffUVpaWkoMT6Y3W7n2muv5emnn2blypXs2LGDWbNmUVJSwqRJk07gmwnaunUrd9xxB59++inbt29nz549vPvuu7z33ntcfPHFQLC6fN++fbnrrrv4+uuvycnJ4ZtvvuHzzz8H4NZbb2Xt2rUsWLCAXbt28eGHH/LGG2/Umt9/JFOmTGHjxo088sgjbNmyhT179rBixQoeeeQRIDiF4Omnn+aHH35g3759fPfdd/zyyy8yD100iAULFoRWE2gMY8aMYc2aNUBw6saf/vQnBgwYwJVXXtlocTkvL4+MjIxa/wcJIRqfDHEXohkMHz6c4uJiTCYTdrudIUOG8PDDDxMREdHcTTumzMxMPvvsswY95rp160LFnpRSuN3uWmtNZ2dnyzxRUac77riD3NxcpkyZgs1mY/z48YwdO7bOHtqTNXHiRFatWsWll14aKsjWUO148MEHcbvd3HnnndhsNq6//nrcbnfo8/j4eJ588knmz5/P22+/HVpG7eDkNSkpibvuuiu0bvvll1/OE088cdi57r//fgD+9Kc/UVlZSc+ePXn11VdD88xPRFJSEmlpabz00kvs27cPpRQpKSnceuutZGVlAWA0Gnn11Vd56qmnuP/++3G5XKSlpXHnnXcC0KtXL55//nkWLFjAokWLSEhIICsri+uvv/6o5z7rrLN46623eO6557j++uvRdZ20tDRGjBgBBIfE7969m7vvvpuysjLatWvH2LFjaxWaE+JoPvroIxYvXsyuXbuIiIjgrLPO4vbbbyczM7PRz52dnR36ff369XzzzTesXLkyFCsbIi4PHz6cxx57jHPPPRcIPhD88ccfT/q4B8vLy2PMmDGh11VVVYSHh4emz7z66qtN8n0K0ZIZVF1rpQghGs3BQbCoqIjJkyczbNiwWpWTG0IgEDhsnm1Ll5uby0UXXcTmzZuP2PbWeE1CCCFat8WLF/PKK68we/Zszj//fCwWC19//TVr167lwQcfZMGCBezZs4enn3660duybNkylixZwj//+c8GPe6hCXpT6N69O//5z3/o3LnzYZ9JvBenKhniLkQza9++Peeffz5bt24NvffTTz9xzTXXkJmZyWWXXRYa1gbBYZrXXXcdGRkZ3HzzzcyePTs0rC43N5fu3bvz7rvvcuGFF3LTTTcBsHTpUkaNGsWAAQOYPHky+/btA4K91fPmzWPw4MH069ePsWPH8uuvvwKwcuVKRo8eTUZGBkOGDOH1118HYM2aNVxwwQWh9uzYsYMbbrghtJTSF198EfpsxowZzJ49m6ysLDIyMpg4cSJ79+6t1/ezYMECpk2bxn333Ue/fv3497//jcPh4KGHHuL8889nyJAhPPvss7WG4NV1vUIIIUR9ORwOXnjhBR555BEuueQS7HY7FouF4cOH8+CDDx5xn2nTpnHeeefRv39/rrvuulq1JOqKr6WlpUydOpXMzEwGDhzIpEmTQrUkhg8fzrfffsu7777LzJkz+emnn8jIyOCFF144LC7n5+dz5513cs455zBo0CDmzJkDBFczuPHGGxk0aBCDBg1i+vTpVFZWAsERNXl5edx+++1kZGTw6quvhu4pAoEAAIWFhdx+++0MHDiQiy++mHfeeSd0zgULFnD33XfzwAMPkJGRwZgxY/j555/r9T2///77XHPNNcybN49BgwaxYMECfD4fTz75JBdeeCHnnnsujzzyCB6PJ7TPihUrGDduHJmZmVxzzTVs27atXucUokVSQogmN2zYMPXNN98opZTKz89Xl156qfrzn/+slFKqoKBADRw4UH311VdK0zT1v//9Tw0cOFCVlJQopZS66qqr1BNPPKG8Xq9au3atysjIUNOnT1dKKZWTk6POPPNMdf/99yuXy6Xcbrf673//q0aMGKG2b9+u/H6/eumll9TVV1+tlFJq1apVavz48aqiokLpuq62b9+uCgsLlVJKnXfeeWrt2rVKKaXKy8vVpk2blFJKfffdd2rIkCFKKaV8Pp8aMWKEWrhwofJ6verbb79VZ599ttqxY4dSSqkHH3xQDRw4UG3YsEH5/X517733qnvuueeo303NNfj9fqWUUi+88ILq2bOn+u9//6s0TVNut1v9/ve/Vw8//LByuVyquLhYXXHFFeqf//ynUkod9XqFEEKI+lq5cqXq0aNHKC4dyQsvvBCKxUop9e677yqHw6G8Xq967LHH1GWXXRb6rK74+vTTT6uHH35Y+Xw+5fP51Nq1a5Wu60qp2vcN7733nrrmmmtCxzs4LgcCATV27Fg1d+5c5XK5lMfjCZ1r9+7d6n//+5/yer2qpKRETZo0ST322GOh4xx8DqUOj8eTJk1Sjz76qPJ4PGrLli1q0KBB6ttvvw1df+/evdVXX32lAoGAevrpp9XEiROP+d2eeeaZavfu3aHr6tGjh/r73/+u/H6/crvdau7cuWrq1KmqrKxMORwONXXqVPX0008rpZTavHmzOuecc9RPP/2kAoGAev/999WwYcOU1+s95nmFaMmkB12IZvKHP/yBjIwMhg4dSnx8PNOmTQOCQ9cuuOAChg4ditFo5LzzzqN3796sXLmSvLw8fv75Z6ZNm4bVaiUzM5Phw4cfduy77roLu92OzWZjyZIlZGVl0a1bN8xmM7fffjtbt25l3759mM1mXC4XO3fuRClFt27dQvNPzWYz27dvx+l0EhMTQ69evQ47z4YNG6iqqiIrKwur1crgwYMZNmxYrblyI0aMoE+fPpjNZi677LJaIwWO19lnn82IESMwGo04nU5WrlzJQw89hN1uJyEhgZtvvjl0zqNdrxBCCFFf5eXlxMXF1Wu49ZVXXklkZCRWq5W77rqLbdu24XA4gLrjq9lspqioiLy8PCwWC5mZmYcte3gsGzduZP/+/TzwwAPY7XbCwsJCc7o7d+7Meeedh9VqJT4+nltuuYW1a9ce13Hz8/P54YcfuO+++wgLC6NHjx5MnDiRZcuWhbbp378/Q4cOxWQyMW7cuBPqzU5MTOSGG27AbDYTFhbGO++8w0MPPURsbCyRkZFMnTo1FO//9a9/cfXVV9O3b19MJhPjx48/bCUMIVojmdghRDN56aWXOPfcc/n++++ZPn06ZWVlREdHk5eXx6effsqKFStC2wYCAQYNGsT+/fuJiYmptf5vSkoK+fn5tY6dnJwc+j0vL4958+bx5JNPht5TSlFYWMjgwYO57rrrmDNnDvv27eOSSy7hwQcfJDIykhdeeIGFCxfyzDPP0L17d6ZPn05GRkat8+zfv5/k5GSMxgPP+lJTUyksLAy9bteuXeh3m81GVVVVvb+rQ68nEAhw/vnnh97TdZ2UlJRjXm+HDh3qfW4hhBCnttjYWMrKyo57TrSmaTz77LN8+umnlJaWhmJkWVkZUVFRdcbXyZMn8+KLL3LrrbcCcPXVV4eKKx6v/Px8UlNTj9jO4uJi5s6dy7p163C5XCiliI6OPq7j1tx/HLzUYWpqKps2bQq9PjTee73ees8jPzjel5aW4na7mTBhQug9pVRo2H9eXh4ffPABb731Vuhzv9/P/v37j/t8QrREkqAL0cwGDhzIhAkTePLJJ/nrX/9KSkoK48aN47HHHjts23379lFRUYHb7Q4l6Ycm50CtJ+4pKSncfvvtXHbZZUc8/4033siNN95ISUkJ99xzD6+99hr33HMPffr0YeHChfj9ft5++23uueceVq5cWWvfxMRECgoK0HU9dAOSn5/PaaeddqJfxxEdfD3JyclYrVa+++67Iwb9Y12vEEIIUR8ZGRlYrVY+//xzfve73x1z+48++ogvvviCxYsX07FjRxwOBwMGDEBV12WuK75GRkYyY8YMZsyYwa+//spNN91Eeno6gwcPPu621jy0P1JiPH/+fAwGAx999BGxsbF8/vnnofnpx5KYmEhFRQVOpzOUpOfn55OUlHTcbTseB8f7uLg4bDYb2dnZRzxPTby/4447GrQNQjQ3GeIuRAtw00038e2337Jt2zYuu+wyVqxYwddff42maXi9XtasWUNBQQEdOnSgd+/eocIpP/74Y62e9iO55ppreOWVV0IFahwOB5988gkQHAq3YcMG/H4/4eHhWK1WjEYjPp+PDz/8EIfDgcViISIiolYveY0+ffpgs9l47bXX8Pv9rFmzhi+//JLRo0c3/JdULTExkfPOO48nnngCp9OJruvs3buX77///pjXK4QQQtRXVFQU06ZNY86cOXz++ee43W78fj8rV67kqaeeOmx7l8uF1WolLi4Ot9vN/PnzQ58dLb6uWLGCPXv2oJQiKioKk8lU7yHuffr0oX379jzzzDNUVVXh9XpZv359qF12u52oqCgKCwt57bXXau3brl07cnJyjnjclJQUMjIymD9/Pl6vl23btrF06dJGfRhuNBqZOHEi8+bNo6SkBAgWqvv666+B4JKXS5YsYcOGDSilqKqq4quvvsLpdDZam4RoCpKgC9ECxMfHM27cOF566SVSUlL461//yqJFixg8eDBDhw7l9ddfDw3pevrpp/npp58YNGgQzz33HKNHj8ZqtdZ57IsvvpjbbruNe++9l379+nHppZeyatUqIBisZ86cycCBAxk2bBixsbFMnjwZCM6FHz58OP369WPJkiX85S9/OezYVquVl19+mVWrVnHOOecwe/ZsnnrqKbp169YI39IBTz31FH6/n9GjRzNgwACmTZtGUVHRMa9XCCGEOBG33norM2bM4K9//SuDBw/mwgsv5O2332bEiBGHbXv55ZeTmprKkCFDGDNmDGeffXatz+uKr3v27OGWW24hIyODq6++mmuvvZZzzjmnXu00mUy8/PLL7Nmzh2HDhnHBBReEHlLfeeedbNmyhczMTLKysrjkkktq7ZuVlcXChQvJzMwMVZY/2Pz589m3bx9Dhgzhzjvv5K677mr0Jdnuv/9+OnfuzFVXXUW/fv24+eab2bVrFwDp6en8+c9/Zs6cOQwYMIBL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iYgJOpHJTZs2Dfv27QMAVFVVoaSkJPi9L7/8EvPnz0d5eTnuvfdeHD9+HADw8ssvY8WKFQCAY8eOobS0FG63u8/3mZWVhSeffBKvv/46lFLw+XxYv3497r77bsyePRvbtm0DABw8eBALFizA4sWLceedd2LVqlXw+/3YsGEDPB4PysrK8NBDDwEAfD4fHn30UZSUlOC+++4Ldk6IiIjiCeM6UXxjgk5kcrNmzcKePXvQ3t6OY8eOYezYscHvDRs2DK+//jp27tyJZcuW4ZlnngEALFy4ECdOnMDf/vY3rFixAqtXr4bL5bqq+y0sLITP50NjYyPefvttpKamYvv27di+fTveeust1NbWApDOxGOPPYY9e/agtrYWH3zwAZYvXx4cuX/66acBADU1NViwYAGqqqqQmpqK999/f4AeISIiIvNgXCeKb3a9G0BE12bEiBGoq6vD7t27MW3atLDvtba24te//jVqampgsVjQ2dkJALBarfjd736HOXPmYP78+Rg3btw1teHAgQM4duxYMPi2traipqYGDocDN998MwoLCwEAJSUlOHz4MGbOnNntdxQUFGDkyJEAgFGjRqG+vv6a2kRERGRGjOtE8Y0JOlEMmD59On7/+99j69ataG5uDt7+7LPPYuLEifjjH/+Iuro6LFy4MPi9b775BklJSWhoaOjXfdbW1sJmsyErKwtKKTz66KOYMmVK2M8cPHgQFosl7LbL/x3gdDqDX9tsNrS3t/erXURERGbHuE4Uv7jEnSgGzJs3D0uXLkVRUVHY7a2trcHiMn/5y1/Cbn/qqafw2muvobm5Ge+9995V3V9TUxMef/xxLFiwABaLBcXFxXjzzTeDI/lff/012traAMhSuNraWvj9frz77rvBUX273R78eSIiIgphXCeKX5xBJ4oBeXl5YaPoAffffz8eeeQRbNq0KWyZ3Nq1a7FgwQLccMMNWLNmDRYuXIjx48fj5MmT2LZtG9asWdPtdwWKv3i9XthsNpSVlWHRokUAgHvuuQf19fWYO3culFLIyMjAn/70JwDAmDFj8OSTT6KmpgYTJ07Ej370IwDAT37yE8yZMwff+9738OCDD0biYSEiIjIlxnWi+GVRSim9G0FEsengwYPYsmULj14hIiKKAYzrRJHHJe5EREREREREBsAZdCIiIiIiIiID4Aw6ERERERERkQEwQSciIiIiIiIyACboRERERERERAbABJ2IiIiIiIjIAJigExERERERERkAE3QiIiIiIiIiA/h/QaeUK9qeF5wAAAAASUVORK5CYII=\n"
},
"metadata": {}
}
],
"source": [
"fig, axes = plt.subplots(ncols=2, figsize=(14, 5))\n",
"\n",
"sns.lineplot(data=reg_cv_data.reset_index(),\n",
" x='Max. Depth', y='IC',\n",
" hue='Data', ci=95,\n",
" ax=axes[0], lw=2)\n",
"\n",
"axes[0].set_title('Regression Tree')\n",
"axes[0].axvline(x=reg_valid_scores.mean().idxmax(), ls='--', c='k', lw=1)\n",
"axes[0].axhline(y=0, ls='--', c='k', lw=1)\n",
"\n",
"sns.lineplot(data=clf_cv_data.reset_index(),\n",
" x='Max. Depth', y='ROC AUC',\n",
" hue='Data', ci=95,\n",
" ax=axes[1], lw=2)\n",
"\n",
"axes[1].set_title('Classification Tree')\n",
"axes[1].axvline(x=clf_valid_scores.mean().idxmax(), ls='--', c='k', lw=1)\n",
"axes[1].axhline(y=.5, ls='--', c='k', lw=1)\n",
"for ax in axes:\n",
" ax.set_xlim(min(param_grid['max_depth']),\n",
" max(param_grid['max_depth']))\n",
"\n",
"fig.suptitle(f'Train-Validation Scores', fontsize=14)\n",
"sns.despine()\n",
"fig.tight_layout()\n",
"fig.subplots_adjust(top=.91)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "umXQR0xZZDwq"
},
"source": [
"### Learning Curves for best models"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oSl_QZv3ZDwq"
},
"source": [
"A learning curve is a useful tool that displays how the validation and training score evolve as the number of training samples evolves.\n",
"\n",
"The purpose of the learning curve is to find out whether and how much the model would benefit from using more data during training. It is also useful to diagnose whether the model's generalization error is more likely driven by bias or variance.\n",
"\n",
"If, for example, both the validation score and the training score converge to a similarly low value despite an increasing training set size, the error is more likely due to bias, and additional training data is unlikely to help."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lTbRwFxLZDwr"
},
"source": [
"#### Classifier"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:00.045677Z",
"start_time": "2021-04-16T00:35:00.043552Z"
},
"id": "86_rUBhXZDwr"
},
"outputs": [],
"source": [
"sizes = np.arange(.1, 1.01, .1)"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:01.724318Z",
"start_time": "2021-04-16T00:35:00.052073Z"
},
"id": "mfAybfqUZDwr"
},
"outputs": [],
"source": [
"train_sizes, train_scores, valid_scores = learning_curve(gridsearch_clf.best_estimator_,\n",
" X,\n",
" y_binary,\n",
" train_sizes=sizes,\n",
" cv=cv,\n",
" scoring='roc_auc',\n",
" n_jobs=-1,\n",
" shuffle=True,\n",
" random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:01.738102Z",
"start_time": "2021-04-16T00:35:01.725318Z"
},
"id": "L3tlE21wZDwr",
"outputId": "e1d619d2-3aee-424e-d7e8-3d94dfbfb5fd",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 200 entries, 0 to 99\n",
"Data columns (total 3 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Train Size 200 non-null int64 \n",
" 1 ROC AUC 200 non-null float64\n",
" 2 Data 200 non-null object \n",
"dtypes: float64(1), int64(1), object(1)\n",
"memory usage: 6.2+ KB\n"
]
}
],
"source": [
"clf_lc_data = pd.concat([\n",
" pd.melt(pd.DataFrame(train_scores.T, columns=train_sizes),\n",
" var_name='Train Size',\n",
" value_name='ROC AUC').assign(Data='Train'),\n",
" pd.melt(pd.DataFrame(valid_scores.T, columns=train_sizes),\n",
" var_name='Train Size',\n",
" value_name='ROC AUC').assign(Data='Valid')])\n",
"clf_lc_data.info()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Xsvn3n6OZDws"
},
"source": [
"#### Regression Tree"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:03.354249Z",
"start_time": "2021-04-16T00:35:01.739800Z"
},
"id": "YsCDfhZkZDws"
},
"outputs": [],
"source": [
"train_sizes, train_scores, valid_scores = learning_curve(gridsearch_reg.best_estimator_,\n",
" X, y,\n",
" train_sizes=sizes,\n",
" cv=cv,\n",
" scoring=ic,\n",
" n_jobs=-1,\n",
" shuffle=True,\n",
" random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:03.370414Z",
"start_time": "2021-04-16T00:35:03.355248Z"
},
"id": "ldF010knZDws",
"outputId": "59b3b6ea-a8d2-4309-8bdb-a0d561400195",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 200 entries, 0 to 99\n",
"Data columns (total 3 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Train Size 200 non-null int64 \n",
" 1 IC 200 non-null float64\n",
" 2 Data 200 non-null object \n",
"dtypes: float64(1), int64(1), object(1)\n",
"memory usage: 6.2+ KB\n"
]
}
],
"source": [
"reg_lc_data = pd.concat([\n",
" pd.melt(pd.DataFrame(train_scores.T,\n",
" columns=train_sizes),\n",
" var_name='Train Size',\n",
" value_name='IC').assign(Data='Train'),\n",
" pd.melt(pd.DataFrame(valid_scores.T,\n",
" columns=train_sizes),\n",
" var_name='Train Size',\n",
" value_name='IC').assign(Data='Valid')])\n",
"reg_lc_data.info()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YDJto6zaZDws"
},
"source": [
"#### Compare Learning Curves"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:04.388657Z",
"start_time": "2021-04-16T00:35:03.371672Z"
},
"id": "qMe-G5GDZDwt",
"outputId": "b6d2f4ec-e16b-4e64-a142-32c3040a52c4",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 373
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1008x360 with 2 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAFkCAYAAACzThFuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd5xU5bnA8d85Z/rMdrYhvdhBFwELIIpEFAQjSozGbgS9RuK1BCRKAsYWo+BFo8aC134NQRHBrhFbUASDBY0gbSm77LLL7s5OPefcP87M2Rl2acJWnu/ns5+dOfWd2XLmOc/7Pq9imqaJEEIIIYQQQgghWpXa2g0QQgghhBBCCCGEBOhCCCGEEEIIIUSbIAG6EEIIIYQQQgjRBkiALoQQQgghhBBCtAESoAshhBBCCCGEEG2ABOhCCCGEEEIIIUQbIAG6EEII0crmzJnDWWed1drNEEIIIUQrU2QedCGEEAeDqVOnUlVVxaOPPtraTWkkGAwSjUbJyclp9nOZpsm8efOYN28e//nPf1AUhe7duzN69GguuOACAoFAs7dBCCGEEE1ztHYDhBBCiI4qGo3icrn2uJ3f78fv97dAi+Dmm2/mrbfeYtKkSfz+978nNzeX1atX8+yzz5KXl8f48eN/0nH39rUKIYQQYtckQBdCCCGA1atX8+c//5nPP/8cj8fDiSeeyC233EJ+fj4AK1euZPbs2XzzzTfEYjEOO+wwfve731FSUmIf47DDDmP69Ol8+umnfPTRR1xwwQX4fD7efPNNrrnmGmbNmkVlZSUnnngif/rTn8jNzQWsLu5vvvkmr732GtCQ7T/ppJN4/PHHCYfDjBw5kunTp+P1egGor6/nj3/8I2+//TZer5dLL72U5cuXk5OTw913393ka1y8eDELFy5kzpw5nH766fbyLl26cMopp1BTU5N2/tTeBrtq43HHHcezzz5LLBZjwoQJfPTRR8yfPz/tvL/85S85+uijufXWWwH4xz/+wRNPPMHGjRvp3LkzF1xwAZdccgmqao28e/HFF5k7dy6bN2/G5/Nx9NFH8+ijj+JwyMcWIYQQHZuMQRdCCHHQKy8v51e/+hV9+/Zl3rx5zJ07l/r6ev7rv/4LwzAAqxv6uHHjeP755/n73//OEUccwcSJE6mqqko71oMPPsjw4cNZuHAhF154IQCbNm1i8eLFPPjggzz55JOsWrWK2bNn77ZNy5Yt44cffuCpp55i1qxZvP322zz99NP2+rvvvpvPP/+cBx98kP/93//lu+++Y9myZbs95sKFC+nRo0dacJ4qMzNzj+9Vqs8++4zvv/+exx9/nKeeeopx48bxzTffsGbNGnubjRs3smLFCsaNGwfASy+9xKxZs5g8eTKLFy9mypQpPPbYYzz//PMAfPXVV8ycOZNrr72WN954g//93/9l2LBh+9QuIYQQor2SW9FCCCEOei+88AKHH344N998s73snnvuYfDgwXz99df079+fE088MW2f2267jbfeeoslS5Zw9tln28tHjx7NhAkT0raNx+PcfffdZGRkAPCLX/yiUZZ5Z4FAgBkzZqBpGr179+aMM87g008/ZdKkSQSDQebPn88999zDkCFDALjjjjsYPnz4bo+5fv16evXqtec3ZC+53W7uuuuutK7tRx55JAsXLuT6668HGm4K9O/fH4C//vWv3HTTTZxxxhkAdO3alQ0bNvD8889z0UUXsWXLFrxeLyNGjLDHwx9++OEHrM1CCCFEWyYBuhBCiIPeN998w7Jly9K6qydt2LCB/v37U1lZyQMPPMDSpUupqKjAMAzC4TBbtmxJ2/7oo49udIzOnTvbwTlAQUEBlZWVu21Tnz590DQtbZ9///vfgJWVjsVidtAL4PP56Nu3726PeaDrwvbt27fRuPNx48bx3HPPpQXoY8eOBWD79u1s2bKFP/zhD8yYMcPeJx6P22076aST6Ny5M6eddhpDhw5l6NCh/OxnP5PidUIIIQ4KEqALIYQ46BmGwfDhw5kyZUqjdXl5eQBMmTKFyspKbrnlFg455BBcLheXXXYZsVgsbfvkGPFUTqcz7bmiKHsMlnceb703++xJjx49+PHHH/e4XVPnisfjjbbz+XyNlo0ZM4Z7772XFStW4HK5+PHHH+0eBsnhAjNmzGjyZghYPQdefvllPv/8cz755BMeffRR7r//fubNm0dhYeEe2y6EEEK0ZzIGXQghxEHvqKOOYvXq1XTu3Jnu3bunfSUzt1988QUXXXQRp5xyCn379sXv97Nt27ZWaW/Xrl1xOp189dVX9rJQKMQPP/yw2/3Gjh3LunXreOutt5pcnywSl5ub2+i1rVq1aq/aVlBQwAknnMDChQtZuHAhJSUldO3aFYBOnTpRUFDAhg0bGr3P3bt3t4/hcDg48cQTufHGG3n11VcJhUL885//3KvzCyGEEO2ZZNCFEEIcNOrq6hoFmhkZGVx44YW89NJL/Pd//zdXXXUVubm5bNy4kddff50pU6YQCATo2bMnr776Kscccwz19fXce++9jTLjLcXv9zN+/Hj+8pe/kJOTQ35+Pg8//DCGYaAoyi73O/PMM3n77be56aabmDRpEsOGDSMvL481a9bw7LPPcsYZZzB+/HhOOOEEHn/8cebNm8egQYN46623WL58OUVFRXvVvnHjxnH33XfjdDq5+uqr09ZNnjyZ22+/nczMTE4++WTi8TjffvstZWVlTJo0iffff58NGzYwaNAgsrKyWLp0KcFgkN69e+/XeyaEEEK0BxKgCyGEOGgsW7aMn//852nLRo0axf/8z//wwgsvcP/99/PrX/+aSCRCcXExQ4cOtcdY33nnndx2222MHz+egoICfvOb3zSq4N6SpkyZQigU4pprrsHn83HZZZdRUVGx27nIFUXh/vvv56WXXmLevHk8/vjjKIpCt27dGDNmjF3dfdiwYfzmN79h9uzZhEIhxo4dy4UXXsh77723V2372c9+xh//+Efq6uoYPXp02roJEybg9Xp54oknuO+++/B4PPTp04eLLroIsG6YvPPOO/z1r38lFArRrVs3/vSnPzFw4MCf+E4JIYQQ7YdiHuiKMUIIIYRocdFolFNPPZUrr7ySK664orWbI4QQQoifQDLoQgghRDv07bffsmbNGvr3708wGOSxxx4jGAw2ylgLIYQQov2QInFCiBYzffp0HnroodZuhhAdxty5c/n5z3/OpZdeSkVFBc8+++xejxMXQrQdI0aM4JNPPmmWYy9btoxRo0bZz5MzK5SUlPD0008327X5kUce4fe///0BP64QHZ10cRfiJxgxYgQVFRVomobD4aCkpIQZM2ZQXFy838f905/+xEknndTk+qVLl3LppZfa0zgVFBQwceJEzj333P06b3s2ffp0Fi5cCEAsFsM0TXsM7nHHHcfjjz/ems0TQgjRRrTWtRusApUPPPAAb7/9Njt27CAvL49TTz2Va665htzc3L06xoEybdo0AoEA06ZNO2DHXLp0KTfffDNLliw5YMdsyiOPPMKjjz4KWFM/xuNxPB4PAJ07d2bRokXNen4hWoJk0IX4iR55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qiorV67k3//+N7FYDK/Xi8vlSsvoJ5111lnMnz+fVatWEY1Guf/+++nfv7+dPW8O48aN4/333+fDDz9E13UikQhLly5l69ate3y9QgghOo6WvHafffbZFBUVcd1117FmzRoMw6CqqopHHnmkyQA6GAzi9/vx+/2sWbOGF154wV63q2tsNBrl1Vdfpba2FqfTid/vb/LauyfnnXce8+fP59NPP8UwDMrKylizZg3RaJRoNEpubi4Oh4MPPviAjz/+2N4vLy+P6upqamtrmzzumWeeyQcffMCnn35KLBbjySefxOVy7XOGf1+ccsoprFu3jldeeYVYLEYsFmPlypWsWbNmjz9vIVqTBOhC/ETJiq0DBgxg9uzZ3H333fa0JTfffDPdu3fnF7/4BQMGDOCyyy6zs9fr16/n8ssvp6SkhPPPP58LLrjALuQyceJEHn74YQYOHGhXX92Tc889l82bN/Pee+9xySWXMGLECK644gpKSkr4xS9+wcqVKwHo27cvt912GzfccAPDhg3D5/ORm5trzxnelD//+c/EYjFGjx7NoEGDmDx5st1N76uvvmLChAmUlJRwzTXX8Pvf/56uXbsSDAa59dZbGTx4MKeeeirZ2dn2GL9UJ510Er/97W+57rrrGDp0KBs3bkyrItsciouL+etf/8qjjz7KiSeeyPDhw3niiSfsLm27e71CCCHav9a4drtcLp566il69erFFVdcwXHHHceECROoqqqif//+jbafMmUKr732GgMGDOC2225j9OjR9rrdXWMXLFjAiBEjGDBgAC+++CL33nvvPr8//fv356677rJ741100UVs3ryZQCDArbfeyvXXX8+gQYN47bXXGDFihL1f7969GTNmDCNHjmTgwIGNitD26tWLe++9l9tvv50TTjiB999/n0ceeWS3n0H2VyAQ4IknnmDx4sUMGzaMoUOH8pe//MUuTLe7n7cQrUkx93XeIiFEhxAMBhk0aBBvvvkmXbt2be3mCCGEEEIIcdCTDLoQB5H33nuPUChEfX0999xzD4ceemizdikXQgghhBBC7D0J0IU4iLz77rsMGzaMYcOGsX79eu6///59muJNCCGEEEII0Xyki7sQQgghhBBCCNEGSAZdCCGEEEIIIYRoAyRAF0IIIYQQQggh2oB2F6A3NV2TEEIIIdonua4LIYQQDdpdgF5VVdXaTRBCCCHEASLXdSGEEKKBo7UbIIQQQoi2Y8mSJdxxxx0YhsGECROYOHFi2vo777yTpUuXAhAOh6msrGTZsmUAHHHEERx66KEAFBcX88gjj7Rs44UQQoh2TgJ0IYQQQgCg6zozZ85k7ty5FBYWct555zFixAj69OljbzNt2jT78TPPPMO3335rP/d4PCxYsKBF2yyEEEJ0JO2ui7sQQgghmsfKlSvp3r07Xbt2xeVyMWbMGN59991dbr9o0SLOOuusFmyhEEII0bFJBl0IIUSbFovFKC0tJRwOt3ZTWoTH46FLly44nc4WP3dZWRlFRUX288LCQlauXNnktps2baK0tJQTTjjBXhaJRBg/fjwOh4OJEycycuTIZm+zEEII0ZFIgC6EEKJNKy0tJSMjgx49eqAoSms3p1mZpkllZSWlpaX07NmztZuzW4sWLWLUqFFommYve//99yksLGTjxo1ceumlHHrooXTr1q0VWymEEEK0L9LFXQghRJsWDofJy8vr8ME5gKIo5OXltVpvgcLCQrZu3Wo/Lysro7CwsMltFy9ezJgxYxrtD9C1a1cGDx6cNj5dCCGEEHsmAboQQog272AIzpNa87X269ePdevWsXHjRqLRKIsWLWLEiBGNtluzZg01NTWUlJTYy3bs2EE0GgVg+/btLF++PK24nBBCCCH2TLq4CyGEOKgkpwKLx+NomsbPf/5zLrvsMlR11/esS0tLWbFiBWPHjm3BlrY8h8PB9OnT+fWvf42u65x77rn07duXBx54gKOPPprTTjsNsLLno0ePTruZsGbNGv7whz+gKAqmaXLVVVdJgC6EEELsIwnQhRBCHFRSpwKrrKzkxhtvpK6ujsmTJ+9yn02bNvHaa691+AAdYPjw4QwfPjxt2W9/+9u059ddd12j/QYMGMDChQubtW1CCCFERydd3IUQQhy08vLyuP3223nuuecwTZPS0lIuvPBCzjnnHM455xyWL18OwH333ceyZcs4++yzeeqpp3a5nRBCCCHE/mjWDPqSJUu44447MAyDCRMmMHHixLT18+fP589//rNdVOaiiy5iwoQJuz2mbpiEYzoep7bb7YQQQoi90bVrV3Rdp7Kykry8PObOnYvb7WbdunXccMMNzJ8/nxtvvJEnn3ySRx99FIBQKNTkdkIIIYQ4cOK6QdwwieoGcd0krhtE4gYOVUHTFFTF+tIUBUWl4bECmppc375q2TRbgK7rOjNnzmTu3LkUFhZy3nnnMWLEiEbj0UaPHs306dP3+rjhmM6/fqykZ56fzjlenJp0AhBCCHFgxONxZs6cyXfffYeqqqxbt26/thNCCCFEY7phEksE33HdIKobRGIG4ZhOfVQnEtMJx3V00+rybSb2UyBR6wRMe6m1nMR2SmJJcr2iWMscmopDUdBUFYemWEG+qiQeNyxTVSvITwb/aiLw3/mxpjZP0N9sAfrKlSvp3r07Xbt2BWDMmDG8++67B6RgTKbHybrKIBur6umdH6Ag09Nsb5AQQoiObePGjWiaRl5eHg8++CCdOnViwYIFGIZB//79m9znqaee2qvthBBCiIOJaaZmu01ihkEkphOK6URiBqGYTjimEzdMFBoCahMr8HWqaiJoVslyaqgHKPNtmCamaX03TJNo3CRsmhim1WbDbNhm58A/9eYAKc+BhiBfVdE0K7B3alb7VQWcmopDTT63svlWoK/gdWq4HI2Tzc0WoJeVlVFUVGQ/LywsZOXKlY22e+utt/j888/p2bMnt9xyC8XFxXs8tqoo5PrdxHSD78tqWVcZpE9BgE4Bd7vqviCEEKJ1bd++nT/84Q/86le/QlEUamtrKSoqQlVVXn75ZXRdB8Dv9xMMBu39drWdEEII0RGZppnIdicDcIOYbhCKGoTiccIxKxCPxA0gPZhVSc9UB9zOFk+uqok0usaBPa9hmhiGFdIbhvUehWOJgD+5PLENSsP7EtNNDi0M0C3P3+iYrVrF/dRTT+Wss87C5XLx4osvMmXKFJ5++um93t+pqeT53UTiOl9vriHD46BPfoBsn6sZWy2EEKI9C4fDnH322fY0a2effTaXX345ABdeeCHXXXcdr7zyCsOGDcPn8wFw2GGHoaoq48aNY/z48bvcTgghhGhvkuO8Y4nMd0y3upqH4wahqJX9jsZ1EjEmkMgim4lu44ksstfpIOA+uJKlqqKgavv+mneEYhhm0+uaLUAvLCxk69at9vOysjK7GFxSTk6O/XjChAnce++9P+lcboeG26FRH42zfEM1nQIuenbyk+Fx/rTGCyGE6LBWrVq1y3U9evRImyrs5ptvBsDpdDa6gdzUdkIIIURLS+2irRvpXbkNo+Gxbpr2OO9wvKHruW6YKCljtgE0RbGDb5em4nNq0lO5hTRbgN6vXz/WrVvHxo0bKSwsZNGiRdx3331p25SXl1NQUADAe++9R+/evffrnD6XA5/LQV04zudrt9M5x0v3XD9el1R8F0IIIYQQoiVZ3aBNUuM6q6exYhfuUhQl8b19VdreV6lBdHKss24kgujEOGjreaI7uW4SN6zMtm4kH4NuGOg6KeuMtEzszuOkd36uKg3F0ZyaSqbHecDGeYsDo9kCdIfDwfTp0/n1r3+Nruuce+659O3blwceeICjjz6a0047jWeeeYb33nsPTdPIysrirrvuOiDnDngc+N0alXVRtu4I0y3XR5ccX5OD8IUQQsv/i3UAACAASURBVAghhBD7zzRN6qM6teEY5bURquqjKRW1rHJbu+jVa2+hJIpoKSnTYykklzX+rigKKlhTbGEV30o9Tuo0W6kFupTECXd5syAxYDgZu5o7FRMz7MC5IZjWd1qmGwZ6Yuy2biQriivWwZLvGU0H1Xa7UqYNS31NTk3F7Wh4L0TH0axj0IcPH87w4cPTlv32t7+1H994443ceOONzXJuRVHI9DjRDZON2+vZVBWiRyc/xVkeHDI1mxBCCCGEEPstGjeoi8SprItQXhshFjdAAa9TI8fr2uesuGlaQXwyhk0+J7HMME1MAyC94rb1GEgss58njpFYlVifWLaLpu282A6i02NrFNKD/9SbAIpijc92KRJE76+q+ihrtwX5sSLIusogcd3A53LgdWl4XRo+Z+K7y4HXqeFzWV+py5ya0m56aLRqkbiWoKlWxfe4brBmWx0bttfTN1HxXZWp2YQQQgghhNhrhmESjMaprrey5LXhGABOVcXn0nDsZw2oZBa7IUqWz+sHC90w2bwjxNptQdZWWAH52oo6qupj+31sR2JaM68dvDus74mAviGwdzRss9P2yW2czZzs7fABepIjUfE9pht8s2UHfpeDPgUZ5Pic7eZuihBCCCGEEC0tHNOpDcfZVhemsjaKbpqoihXw5Pndrd080Q6FYzrrKhOBeCIgX1sZJJqYpi2V16nRK99Pz07Wl9epUR/V7Qrz9dG49Tym28vro/G053HDpDYSpzYS3++2OzUlEaynB/M7B/Lp69JvCOjmrgd7HDQBepJTU+nk9xCO6awsrSLL66JXfoAsr1R8F0IIIYQQIq4bBCM6VfVRymrChGI6YM2clOFp+TmsRftlmiZV9TF+rKiz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qZnV69auXYv29nZ0dnYiHA5jx44duO2223Kec9FFF2HHjh3Ytm0bhoaG0N7ejpaWFixduhQ/+MEPEIlEAIgx6d/61rfm9hsjIiKqcgUL6LNphQeAP/zhD9i+fTvuv/9+uFyuQu0OERHRvPHAAw/g3//93zExMQEA8Pl8uPbaa3H11VfP+DpVVXHjjTfi2muvha7r2LZtG1auXInbb78dp5xyCi688EKce+65ePnll7F582YoioIbbrgBdXV1AIDrr78eV1xxBQDga1/7WmbCOCIiIpodyTzSlK7HKJ1O4+KLL8a9996bmSTutttuw8qVKzPPee+99/CNb3wD//Ef/zFlMpvpbN26FY888kghdpmIiKji3XnnnXjrrbdw4403ZuaB6ezsxM0334x169bh+uuvL/Ee5uLnOhERUVbBKuizaYX/53/+Z4yPj+Ob3/wmAKCpqQnbt28v1C4RERFVvcceewyPP/54zoztLS0t+OEPf4jLL7+87AI6ERERZRV0DPr555+P888/P2ebHcYB4N577y3klyciIpp3JEnKu5yax+PJuz46ERERlQ+51DtAREREcyccDuOVV16Zsv2VV17BwoULS7BHRERENFtlMYs7ERERzY1//Md/xPXXX48zzjgjZx30nTt34s477yzx3hEREdFMWEEnIiKqIitXrsSTTz6JDRs2oLu7G93d3diwYQOefPLJnIlaiYiIqPywgk5ERFRl3G53Zrkzm2EYePzxx3HZZZeVaK+IiIjoSFhBJyIiqiLRaBQ//elPcdNNN+Hll1+GaZq4//77cdFFF+Hpp58u9e4RERHRDFhBJyIiqiJ///d/j1AohPXr1+Phhx/G9u3bYZom/u3f/g1r1qwp9e4RERHRDBjQiYiIqkhXVxd+8pOfAACuvPJKnHPOOXjuuefyLr1GRERE5YVd3ImIiKqIqmbb3hVFQWNjI8M5ERFRhWAFnYiIqIp88MEHOP300wEApmkikUjg9NNPh2makCQJO3fuLPEeEhER0XQY0ImIiKrI+++/X+pdICIiomPELu5EREREREREZYABnYiIiIiIiKgMMKATERERERERlQEGdCIiIiIiIqIywIBOREREREREVAYY0ImIiIiIiIjKAAM6ERERERERURlgQCciIiIiIiIqAwzoRERERERERGWAAZ2IiIiIiIioDDCgExEREREREZUBBnQiIiIiIiKiMsCATkRERERERFQGGNCJiIiIiIiIygADOhEREREREVEZYEAnIiIiIiIiKgMM6ERERERERERlgAGdiIiIiIiIqAwwoBMRERERERGVAQZ0IiIiIiIiojLAgE5ERERERERUBhjQiYiIiIiIiMoAAzoRERERERFRGWBAJyIiIiIiIioDDOhEREREREREZYABnYiIiIiIiKgMFDSgv/DCC7j44ovxyU9+EnfdddeUx9944w185jOfwUknnYTf/OY3hdwVIiIimoUjfXY/8sgjOOuss3D55Zfj8ssvxy9/+cvMY2vWrMls/9u//dti7jYREVFVUAv1xrqu46abbsI999yDcDiMK664Aps2bcKKFSsyz2lqasItt9yCn/3sZ4XaDSIiIpql2Xx2A8DmzZtx4403Tnm9x+PBY489VqzdJSIiqjoFq6Dv3r0bra2taGlpgcvlwpYtW/DMM8/kPKe5uRmrV6+GLLOnPRERUanN5rObiIiICqdgybi3txeNjY2Z++FwGL29vYX6ckRERHScZvvZ/dvf/haXXnopvvGNb+Dw4cOZ7YlEAlu3bsVVV12F3/3ud0XZZyIiompSsC7uREREVH0+8YlP4JJLLoHL5cJDDz2Ef/iHf8DPf/5zAMCzzz6LcDiMzs5OfPGLX8SqVauwdOnSEu8xERFR5ShYBT0cDqOnpydzv7e3F+FwuFBfjoiIqHoZOpAcL/iXmc1nd11dHVwuFwDgyiuvxLvvvpvzegBoaWnBmWeeiffee6/g+0xERFRNChbQ165di/b2dnR2diKZTGLHjh3YtGlTob4cERFRdZoYBg6+CvR/WPAvNZvP7r6+vszt3//+9zjhhBMAAJFIBMlkEgAwNDSEnTt3TplcjoiIiGZWsC7uqqrixhtvxLXXXgtd17Ft2zasXLkSt99+O0455RRceOGF2L17N77+9a9jdHQUzz77LH784x9jx44dhdolIiKiypFOAIP7gEgXoGjiUmCz+ey+77778Pvf/x6KoiAUCuGWW24BAOzbtw/f/e53IUkSTNPEl7/8ZQZ0IiKioySZpmmWeieOxtatW/HII4+UejeIiIgKwzSBaC/Q9z5gGoC3DtATgKQALWeWeu/mHD/XiYiIsjhJHBHRXNJTwFgvkIwCniCgerIXLilJR5KIAgMfArEBwFsLKK5S7xEREREVEQM6EdFcSCeA0cPA0H7A1EWwinRZD5qAJAGaD3AHAHcQcNUAqlsE9yJ0XaYyp6eBkU5gcC+guQH/olLvEREREZUAAzoR0fFIjosgHjkIQBJVcznPodU0ASMFxEeAaJ+4Lx4QYd4O7u5ANrirbhHsqbqNDwG97wHpCcBXB8hKqfeIiIiISqTyArqeBAb3W9UnF6C4xUksT2iIqJgSY8DIQSDSLQK5p3bm45AkiSCuuIDJvZaNtAhniYiopEKCqLrLgMsvQr8rALh82fDOY17lSyeAgb3AaJdomKlZUOo9IiIiohKrzIA+vN+qPlknsYAI6i6fOJl1B6zqkxXgFY1VKCI6fqYpKuBD7UCsXxxjahYc//FFVsVF8036eoYY0x7rB0a7rcOddcxTveJY5wnldpdXOWa57JmmGA4x8IH4cdYs5GcUERERAajEgA6IE9LJXUiNtAjv0V5RjcjMTW+KmW9dPnESa1ehFJc4oVXcnLiJiGZmGMDEkFjyKh4BNA/gX1j4ryvJVvB2T31MTwHJMWBiEDB0ZBosZTXbXd4TdAR3D0NgOUiMAX0fiN8nbx3nHyAiIqIclRnQ88lUoLxTH7OrUPERUYlynsxKEqB4rPBeA7j91qRNdoDnyRPRvGXo4pgxsBdIj4tjRDGC+Wxk1sWuyd1u6KKxcuwQMNKBbE8jyTrGWcFdc3SXV6rno6Bs6Wnx8xjaL/7fOQkcERER5TE/zsrsKhTyVKEAEd7T42L850ja8YBVjXLViIqU5rNOah1j31mRIqo+egoYOwwMHRDjhD1BwF0mwfxIZAWQvVMbK01TBPeJQSB6OLeXkepxTFLnz52kjo7f+BDQ+y6QjouqOecPICKiQjJN0WBv6qKXcea2AccJwBGUccaRJOsiWxfFcVsWn7MVnNHmR0A/ErsSla9Ybuhi5uVYvzhpNw3kVqR8gGYF+Mld51mVIqosqbgYGzy8X/yte0IinFcDSZq+u7yRBpIxYGJY3M70MFKBYJO4uIMV/WFXEqm4WDYt0g14g4Cbk8AREdEsGXqekG1kb+tJcUknRVZx3jZ05ARxSXasHlPGZnuakflW7EyW53uTFCuoKyKT2b2tZQWQNcd9VTzuDPg5QV/ObQgowtBoJsgjka0fruqZ+pi9bFJyDIgPWX84QHbiOpfVdd4vLpqz67yLJ7tE5SIZE2tQRzrFAXi6pdKqlawCLhXApEnqDF1U2yOd4lhW2yomNONEdDMzDNEDY+BDAJIYFsHjPRHNN3bPLbvhV5KOfF1Nx0rDsMK1FbDt23bI1lNWoHaG7FT2/8x0Bk/n/4u1zRke7SCqugCJK70AEP9/pm5dG+L/N50AYGS3ZS5ApvgKiN9D53K4k8mTA79qNQRoudsVLVvdt6v6zrA/zUpk8+gMtACcyybl45y4zpg0cZ2iAYEl4sTNHeREdUSlEB8FhjtEmFI0wFcvDpokyIpYPg4QH2p974njXqAJCC4Wj1XTydRcSIwBfe+L3gicBG72DN06YeHvE1HFMXTxGZGOi0t8FEiMAokYYDp6ZWVIOZ1Rs9fW3FCQc4MMJOs8WcoeJ5xVzczj8qTnKY7tUvZx+zV5GwowfQOCaQduu4pthWw9YVWzU45LUjzX+T1nmNmvYwdrO8DJMqD4rG08Hh4XSRI9AQshJ9wbYqncTOh3hH/7Z206wr/NSAOL1gB1rVPengG9kGaauM5Ii9nmR9oZ1omKyTRFeBo+IMYGK3O0VFq1s7vHmwYQGwBGD4ml3uqWAjWLRA+h+UxPA8PtYhI4l5eTwB2NZBTY93txW5IAWCepkuNakrIVisw2R9XIriTJdjdFKfckPOd+npP/nG08FhDllU5aITwhep7FI6JRMj1hPUHK/q2qLjG051gave3K8bTXVkCG6ah82o87Xu983FmNztvVe9LffU4FNe9OWscM+9jjqIpqbvE5wAb/6pX5/DgO8RFrKMJUDOilIquA16pMTRfWPSGeKBDNFcMAxgeBob1AfEx8eNZwTPBRs4cAAOIkbeAjoP9DEUhDLaKqPt8aGWODYhI4PQnUNPCk7GiZRvZv0XkCbj9mVyPS6ekfz9nmKMtJ0jTzITnHZkpTX3MsjQQun/j9n++NVVTZDENUhO0gnqmGj+XOUSIr1rBNF+CuOdK7Hp1M5Xpu35aoUjCgl4N8YX34gDjoBZuzlXWGdaKjp6fFJI+D+4DUuJilvFyWSqt0maq6KSopY71ivo7apSKwu3xHfo9KlpoABvYAYz2i0cITKPUeVb7MiXkJGznyVetm00hgpEXu99WKz25vHcM6lS89nQ3hqfFsEE/GkOlzLsGaQMslJkPmuGaiomBALzeTw3rkoAjrigsINYsqA8M60ZGlk9ZSafvFiYgnUDlLpVUaSbKWaQuIsXeDe4HBPYCvQYT1altazDBEF/+BD0XllEMkqsvxVu9S40DvO+K2OwTU2mE9z3A3okIyTcfY8ASQiFohPCq2ZSbEQnZOJV89j2dEJcaAXs5kVXyoAyKsj3SIsMGwTjS91IQIT0MHxH1PkBN1FZOiiW7epgmkYkD3TrGtdikQaBSzwVey+KiYBC4RsRoe+DFKk2g+cQHE8aj3PQCmCOvBxSIAVXvvEiouQ3dUwydECI9bQTyzPDAAxeqWrnlEbzIiKks8s6gUzrCupxxh3Q2EljCsVxPDnhXSXopDd9w3Hdt0a6bQtFg6AqaYtMvls5bys7ofz5ffiURULJU22iW6x3prq6tqW2kkKbvEpGFPoLZPHMdqWwFvvVh3tFLoKWCoHRg5IMJXTRF7Y6QTwIdPA6svKd7XpLmhebOV89QEMPCBOI67A6IbPMM6HY3ZTtKmaCKIe2s5JwZRBaqgsyPKULQZwrpdWQ/Mn2BWSqY5KUA7A7XjYujW+pZpx7V127CCtqk7ZiWdtBxJzm3DsRSIPeOwdW2krRkhHeuWuGpES7krIG6rruoK7/GICH/RXkDmUmllSVbFzwUAkuPA4bdF1/BQCxBsFMerchbtF0vMGSnRbb+Yv19dbwIv/UD0CmFAr2zOsJ6OZ8O6q0b8LfjqK7+HSSkZugityaiYENQwso9NWV/bGsYw5bE8M3k7nzf583jyslyZ7dO8Bybtx5T3d+4fxHmB3S29mJO0EZWbdFz0Xju0SwwhMnRxzPTWWdfO23UV38OtcvechMlhffiAqFKpHiC4hGH9SOzWaCOdG6j1VHZ9S/va1HOv7Sp2zlIc+f6fzeyHsL0eZ2ZpDmsyJNWVXbJhLn9Wpilmlo6PiInSnOFdkkUl0O0XvS80n9gP1SM+9Mv5d8ZeKm1oPzA+LJY08XEccEVw+cTF0IHRTrF6hTsA1LWJ8FtOwxFSE0D/R6LxxxME1GDxvvbEMPDKncDe/y3u105dJ5UqmOoRFyC7GoJpWGG9WZxssgvyzNJJEcbjo8B4v2istSfjV90A7Ia0ydP4O+7PtIxWzmMzvcc024/4HtM9z8mqhqucpI3mmWQM6HkH6HkbOLwb6P/AaqA6Cu5g/vCeCfH14rYnVHZhvrz2ZjZGOoD/+b9Fa3Oo2bosEevwzvcDl6Jlq1RTwnqzGBc6H8P65ElS4qNi/GhOa3TOCxxhedJ6ufY6u4qWDdjlTJKsExX31MdmFd6tib80X3bG7lKGd8MAxgfEJGTJqNgvP5dKq0iykm1cTE0APX8CIIljerCptEN2DEMMlRj4SOxnMWf9Nw3Rnf217eIYpbiAM74IrLmsePtAxWUfWwHxGdX/EQBTHN9CzaLhylVT/p83hWSa4jiRjInGq/EBa7ZxWJ9XXnGyPZ//j4gqWTwizgMOvy0ug3uzK2UA4u98wSqgcR3QtE4cHyeGrOOBdZ25PWQN/7BWJhhuP8IXl0RIzxfeJ1flPcUZPll5AV1PAZ2viYuToomKcXCJI7hbl/lYWcsb1vdWd1g3DCuEW5f4qPgDTcZEpdsOn/bYrPneGj2r8D4sqoeZSWac4T0oKjzFCO96WuzH0H7xs3XVFHcMMBWW3fXXNIDoYSDSKX6v6tpELyA1z+9oocQjojt7fAzwFbmL3HAH8OJtQM9ucb95I3DO/yE+19Lx4u0Hlc7ksD64VzQUZcJ6vZjXoZo+u/MxDDHJZCIqwvj4oDiXgSTmrtC84thARJVpfFBUxu1APnwg93FJAcInW4H8VKDxFHHsmy1DF5/nE8MisI9b1zm3rUAfj4hiVXxk6n5MJslWmM8T3u1qvb3NHTzmnFF5AT3UAlz4dbF8UqQLGO0W1+ODooUkXyuJ3d07ZIX3YLNY9sRep7TaP+gUTZxoAiJ0DR8QH/qaFdb9CyrrA9+5dmcylm0hS41b3Xfk6acAACAASURBVMSs70O1lgzxhjgm+Wg5w7tr0mN2eJ8YBKI9U8O7PTGY2y+CtOI69vCeTog1pof2i94O7gC7fVYzSRat04D42fe9J24HmsTx21NbuOOUnhIz/w8fEL+3xayapxPArgeAXQ+K33NvHfBnXwdO2FQ5x2Wae3nDuiEmAw1ZDe2V9Nk9Ez2V7a4eGxAnyqaZXf7LVVN2XVCJ6CiM9ViBfJdohI505T6uuIBFJ4kw3nQqsGjN8S1NKSsiKPvqAZww83ONtAjpUyrxeUJ9JvQPH3kf7HMan1WRd4Z3b50Y7hfKP3yt8o52qhtYdu7UA3VyPBvWI12ie2LEuh8fEV29h/ZNfT+7VTpf5d0TKs73VEyKC/BZiUtPAsP7rcp6GX7gO2crTUSz3dInr91phz92bysOO7znq2ra4/ePFN49QXHgVewx71ruzy41AYx0AZGD4rVlOD6ICsz+HTMN0QA7dkgcp+paxZAmzTM3X8c0xRCPvvfFh3TNguI26HX/EXjp/8uerKy+BPjYdeU/cR4Vl/OYqyfF+czAnmxDe6X1irO7q4/b3dWjYrskWd3VOfs4UcUyTfGZZlfHe3aLXpBOmhcIn2IF8nXAwtXinLAUZFUMJfI1HPm5RhqYGHFU5vN0s7e3J0azAR95MigArNqcd3P1nPG6fMCCleIyWWJMhPXRrmyAj3SLbpTJqOg+NvDR1NfZy6DYlfdQS/b20XSzKFeKy9EN3vrAH9xT3LA+q/Hh9mylbq7dWe4k+SjCuz0pjglIqjV5mF/cHz0sJtTzhOb3MASyWqCtydn0pDhW930oKty1S63xYMd4Ip8cF+831it62hR1ErgR4NU7gT2/Fffr2oBzvyW68xHNJOeze/IQtsXlt+yq3V09GQNigyKQ60mI7uqKOOdgd3WiymUaogfzIas6fvjtqRVmdyA7frzxVGDBisosvMiqOF7N5phlpPNX5O3bidFpX1qB/zPHwB0AFq0WFyfTFGEw4qi8OyvwiTGg/31xmcxTm52gzp6wzu5Gr1XgmqaFDuvTjg+P5lZZFVUE8fk+PrwazTa8myZQw6XSKA/FJVq4TVN8sHW/KbbVtgH+RbNfT9qeBK7/Q9F7I7CooLudwzQdk8CNiq9/+heBdZ8trxnsiyk5DnS9YU3EqYgGF0mxbivW5JyTrjOP5Xvcfk6ZBNRCyhnC5lx21eVYdrXIYV1Pi8/2xJjonTIxkp3sSXWJv1O5iI1hRDS3jLQYcnPYmmG9Z7f4e3fy1lljx60x5PXL5t95nayK+ZKmmzMpPjLtS+dHQJ+OJImg7akVExE4maZo5bDD++Tquz2ZQO87U9/X15DtJh90zDQfXFLcyY6O1UxhvbZl5hllnePDU+PZWRQnjw9XNPF/wW5sBMwc3mn27PkB7L9BZ+8U53XOcyZfO26rbmDVnwOtHy+vBjNJyq4woKes7r4fiWNTXau1/uk0+zsxIsa2J2KAr7a4LfgjHcCLPxAnNQCw5AzgnP9TfEbMZ9Ee4Km/n/v3zQnyk8P9UTYC5H2to0FA0cTPs+2c0jW0OJddNdKOsK4BgSWi14k7eOw9TqaTiovquL0iiH2iLsmiqs95YIgqm54UDdp2l/Xed8QwFaeaRdnx403rRPFyPjSSFsj8DugzkaTseISmSV0OTUNMYjKar/J+SIyXHB/MnoRl31S0otQ2i3EXyy8A6pcX6Rs6Rs6wnm9GWc2X/WDm+HCi/DLBeZrAnE4A+gyBerqwPeU1Ccy41u6x6HhZdJtde6UI68czaUsh2CtWmKZoCDz0lgjdtUsBfzg7JCadFGFl5KA1CVwRu9SmE2ICuF0PiODkqQX+7GvAiot4XATE79SSDWK1DdMQs++aunVtZK9NXfR+MKd53Pk808hejFRxvo8PnhQB+cS/AFZfKpYLLBVZzQ3ro13ASLsjrC8A3KGjD+umKT7zkzFRxIgNZFcYkK3Z1X0N/L0mqmTpOND7bnaW9b73rGEpDqHmbHW86VQg0Fiafa1Skmmac3w2V1hbL/kUHtl+c/mOWzB0INbn6DbfmR3/PnrYWu7Loa4NWP4J4IQLgNr8M/mVJXsGddPIjg9XXeX7cyEqtNiAmJ300FtiwrFkrLDBeTqKJqpWqtuagM+dvT3l2jXNdrd43UgH8M6vxeyrgKi+rbkMOOUzs5tMpVSMtFgmzQ7DgUYRzk29+Ct3HHpLVM0jneL+6i3Amddlx9XPVjouKrUtZ879PpbY1i0X4ZF//5e5fVPTzBP4jbltBHC+RzwCfPQbx0oyEtCyEVhzKbD0z8rns9FIi0lXjbTYp+BiMTxkurCup8X48fiYtdzZUPY8JnOMmadDM4iqRTIK9LyTndCt74M8eWVZtjredGppzwFMUxQoFFdl986Jj4hZ3BumFmsZ0IvJSIsT3ZGDoip14MXcCQLqTwBO+ISorM/3Lo9E5W58UEyIcmiXCOZ2AJuOHZyPJzBP91hmHXr33HdFN9JA+0vA7v8SDQ8AIGvAiguBdVeVfy+g1LgY4+wOFHk99RHg1Z8AH/2PuF/bCpz7d1N7ZM0WA3r5M03R9fO9x4EDz1nrdkOMAz9xi2ic8RdxvoMjMayx4roV1gNN2f2biFjd1R3nKJpHHHPKabgLlZahW8fYaLZnRTKWez81LkKUXchRJl1mu42/d3MnPgIc/lM2kA/uzc4TAYifV8OKbCBvXJtdArWUTFP01tUTomCQHLcaU2FNOGmdE1VKaGdAL1NGWiyxs+9ZoP1FcSCzLVglKuvLLyhtNzkiEsaHrAq5VSWfHMg1r9Xda734QPPV54brSj+5sMPH7odFYLd7BDRvFEF9yQZ2awXE/9NHvxHh3J4E7rTPA6f+5fFVGhnQK0s8Ihpn3n8ie6yQZFFNX3MZ0LyhvI4JRlqcg9iNCrJiLYXp5t91tTpSuE5Ec7el8jxn8jjkQpKU2Yf5own+025zZ2/LmvibmKlnjjFpu70tc99w3J/mNXl79uR7b2PSe+d7zeSePtb90W5HTx+LrIplzuwZ1htPLvhqVSndRFdURlyf5fHFNMT/v6yI/bVDuL0987Mxke2xKFnHLykz+rZUPIqJZr8BTXHsCAN6BdCTQNebIqx3vCwOmraFa7KV9XJqfSeqZhPDonXZDuQjHbmPqx7Rqrz4NGDxetGoVm3HpelEuoA//UoEUXv8af1yMU59xYWlW8u01EYOWpPA7RL3l5wOnPOtuekRxYBemUxT/D689zhw4IVst1F/WHR/P/Evynu4CJWnyeF6cpieHLgLFq6l7BKprhrHxXFf84kQlU6Kc13nJd+2fNuLOUxs2m9Vzq0yVzLFJSbHtseQh08S5zRFdCAiIVC3EA11tZBmagS0Q7esioLHkRo2TXPSHCRp8ffilFnlozip3TRNDA6PYGy4H8tCjt9jBvQKk04AXa9bYf0P2RNgIDu53PILuG4o0VyKjwCH3hZh/PCuqS3Mqkf8/dmBfOGJ1X0cmo34KPD+48A7j4gJowARNk7eKsLH0Y6zrlR6UkwC99YDYkIyT8iaBO6Tc1d9ZECvfONDwEdPi6q6Pa+DpIiZ30+6TBxbKqVrJs29dEJMNGxfxg6JVSdKGa6n3PfnXmve4vzO2tXR2Yb8o9qWmN3r7AaCvKtDOG5Pez/Pa474Horj/jRfV3Zuz7PyxOT39tQCC1eVvCH9/SEZq1eumD6c2z0FMsH8OM63yiC0m6aJD/bsxZp6RyPPDAF9np9dlinVDbSdKy7pOHDwVRHWD74qupj2vgO88m+iK8ryTwDLzsvOtE6VJ6dLUjq325J939lVKud+OntbdYul/GoW8CRvNuKRbIX88C4xiZiT4hbdvJrsQL6akyFN5gkCp10jurjvfUZ0fx8+ALzx78Bb94nq4NorxO9ltZo8CdyJm4GPXSdCOpGTrx5Yf7UY7tD1hgjqHX8ADjwvLqFmYPUlwIl/Xh7jPWlumab43BlzhPDR7uzt8cGjeLNjCdf2/SKH67kgSYCkAi4VgK/4X99uIJAUDvmYQ3nDud39X1bF8s7KHERVSRI/O9jVd3duaHeeV2deAwBzF9pn7CWQBwN6uVM92Yp5ahzoeAXY/yzQ+Vp2PcI//EiMe11+AbD8PH6wz4Zpig/JgT3iA1JP54be6ULw5ICcN0QfxeuNNOa825biEjPzBpcAoSXi2r74F5XXuMdiio8CPW9nJ3Yb2pf7uOKyKuTrHYF8nnbVPlqKS4TxVX8OdL8pgnrXG8C7jwLv/rdobFx3FdB4Sqn3dO7EI8Cr20VFFBDLup3zLfG7QzQTSQZaPiYusX7gg6fEEm2RLuC17cAbdwPLzxdj1RvXMhBUEiMNRPuzwXvscG4Idw5fnExWxYoTgSbrM3uxaNSZrtt4pYTramA3EFDh2MFcUgCtxqr8z+7Yt2bNGqxatQrpdBqKouDTn/40vvSlL0GeYRnJru5uvPXWW7j00kuzxZcih/aZ8Letkmg+Mb5zxYWii1PHy6Ky3vUGcGinuLz8Q2DJGSKst507f7qYzsRIAyOdIowP7hHruA/uzZ2Ur9Rk1dGVSc3topRze/Jjjtclo+IEYGJYdM+e3EXb/jr2h78zvIeWiBODauqynRiz1vC0xpAP7kNOY4iiAYtOtgL5aSKQF3OW72okSWLSuOaNokfC7oeBvb8D2l8Ql0UniaDedm7lNhSZJrDnt8Crd4qQnpkE7nNs0KGjV7MQOOOLwGlXAwdfE0NGOl8Xfzd7fyeWYl1zKbDyU2IlAiq91MTU4J3plt4zdXkqJ63GakDPc6mZxw3oNH/lBHOfdV57dOHX4/n/27v36KjKc3/g3z23TCaXmUyABEjkriCGKoqgINZAiBAoEsHfz9Z6+WF1VY7U6kLRU/TAOdaDPRY90cXi2MOxFFatWkIsYK3iBagKrYeWi0EoghAuCYQk5EJmMjP798ez91ySCSSQuWTm+1lrVjK3ZGdnz3738z7v+7xWVFRUAABqa2vxxBNPoKmpCQsXLuz0PcePH8fGjRslQNcFZ9o7C9p90Qnae+cc9BWLtKEPlsSojny5XI1SVfmbj4GqLwONg2KUC+Vh35U5bhGuyBgXPC4ZYnvmH1ogflACM6+742tTnUCfEUDWoMBxFBIot7sf8ni450ztAuowgXa45/zzXnqIuzkwdK7huHYRoX3fcqbz9ykGID23Y+CeqQXv8R68upskINeHrJ85iJCA3GCWQij9tQx5v6vj/29KBM1nJJNe+a6cqwDpJCqYK1l3cwyGK16q+mPA9hXSGQoAA8YCk34KOPIj/7s5Bz15NJ4EKjcBX2+SDldA2qhhhcDVs6RwLLPqkaOqst/DBuHHA/+Tztj6tAu+B8pqPJkDZL15/u+IUFmrYNSIIXLtabJeUmCuu+6667Br1y7//WPHjmHu3Ln44osvcPz4cTz55JM4f17qNixZsgRjx47FXXfdhUOHDiEvLw9z5szB1KlTw74urA5Bu6fdMnV65fjQoL3ywMEuz0GPaIC+detWPP/88/D5fJg3bx4eeuihkOfdbjeefPJJ7Nu3Dw6HAytWrEBe3oWr3ZbOuQPrf/O6XOi11stanaoH/h0QvFxCMp4EWxtkybZDH0vWUD9gDGa5sBv6XWDQRJm71Nu5W4Cz/5BATL/VHQnfe53RH8geIQG5fkvGyrme1s6D96YadD7cXpHh8f6LjeAM/ACZyxZt7mbg1J5AUbczB0NPkAYT0G+UZMf7XysVSxmQx07beeDr96T6e+MJecySLtnBa0olkxivvG7gb78Fdq2VInApmVIEbsS06LQzbq1ac99RQNYVkf99UcYAvRM+j3S+V74LHP/fwOPZw2X4+/CpidGWx4LPAzRVd8yA68XZLlSEzWCWTusOQfgAudZgO0PUOa8bOH8Ola4+GHX1NZcVmOvaB+gAcMMNN+CPf/wj0tLSYDAYkJKSgiNHjuDxxx/H+vXrsWPHDqxevRqrVq0CAJw/fz7s67qsC0F75YFDEqDrf28sisR5vV4sW7YM//M//4OcnBzMnTsXhYWFGD58uP81b7/9NjIzM/HBBx9g06ZN+I//+A+8/PLLF/7BigFI7ys3QHaIxwV4zssJtbVBql621MIftBsM0vtssiTWEN5wrHYpMjNypvTyHt4qwfrJv8uQ+G//LMM28ifI0m1X3BSb4Kq7Wuu1rHjQEPWGKnQMKBXAMSgQhOtBOYcGCpNVlsNydjwZwOuWjEHD8Y4BfOMpuZhpqpaAuD1bdsfA3a5dsPTUyA13iwTk+pD1MwfanfyMQXPIr9MC8uguG0IXYE6VQPzq2XIe2v2WFLz8+2+BPW9LdnDMXRJ8xJOTfwe2vSRLqAHAldOBCQ9Hp9aH6pPK35Y04IoJLDyXbAymQA2ahiopKvf1e9L+bf8lsGOlBOmjviftHIVyt4QpyHZSvm86deElsyzpHbPf/nnhfThyk6i7vG3atDBtibfj9VEpvOvxeLBs2TLs378fBoMBR44cuazXdaorw+OBoPhUlX3SiYhFq7t378agQYOQny9D/0pKSrBly5aQAP2jjz7CP/3TPwEAiouLsWzZMqiq2r1Kd4oCmK1yS82SkyegrRF5XjKGriYJ8FobZLkERVuw3mCWns5EzbanZsnF8NWz5YD45lMZBn9qj2TZj2yTjotBN0k1+CsmxL7nV1VlGLYeiOuZ8eaajq81mICsIUFZ8Ssl8OwNHQ7xyGiRzg3HoI7P+TwSpIfLvDeekuOrpRY4tbvje62O8MPmMwdeuEZCWwtwam8gID/9dZiAfLQ2ZF0LyPm/j38Go6w8MWQyUL1PAvUj22Re98E/SQ2NMXcBeTfG9rzc2gDsWAV8vVnu2/OBWx6XYy0a3C2yvJJzmMxDjmJAcLHRb+vXr8eLL76InJwcAMA999yDefPmAQDKy8uxcuVKAMCPf/xjzJkzJ2rbndDsecCEHwM3/D/5vHz1rpxvK/8gt76jZKm2YbclV8ekxyVtUf0x6cRo0L5edCi6IqN22me/9e9Zv4eoZ/g8kjg1mOQ8lZErldlPNETsVx47dgxGoxHZ2dl49dVX0adPH1RUVMDn82HMmDFh3/PGG2906XXd0j5oN2lTldpaJEY9X9fpuSZiAXp1dTVyc3P993NycrB79+4Or+nfv79siMmEjIwM1NXVwensgSXDDEYgJV1uweuFe9yBHdPaoGXc67QLf22+gCnl8tfcize2bMleXVMqVWO/+UQy6zVfyffffCKN+qCJ0sDnjYt8sK76pCe79h+hwXhrfcfXmqySWcseLoF4nxFy0cplr6LDYJILRHse0H66rc8rx1S44P3cca1zrF6CsfYs6aEBe0Z/ec/JvwE1+0OnKyiG0CHrudf0rvnL1FHOaKBoqZwH9v4e2L8JOP6l3LIGAwV3ASOmRrf4mqoCBz8AvnhN2geDWQp4Xfv96GyH6pM2yZQqVb6jnDXvyug3AJgxYwaeffbZkMfq6+vx6quv4ve//z0URUFpaSkKCwthtzPz32NMKZI1Hz5VpnRV/gE48EfgdCXwaSXw+avAiGKZOuIcEuut7Rl6B3FDVdBNC8Sbqjt/n9GsBd1BQbh+S+8FdVWIejOfR6YhKwag71VAxoCeWTLtIs6ePYvnnnsOP/jBD6AoChobG5GbmwuDwYDy8nJ4vXJdmZaWhubmQLHozl7X4wxGGdWbkiFTRzuRQBFoF5ksckt1yLAlAPD5JNPedl7m+Z2vB1zn5DGdMTjb3suXtkjrCxTMk1vjKS1A/1gylIe2yM2cBgzWgvWBN1x+IOzzyBBRPQivPShD1tvCVFJPyeg4Xzwzj0PK4pXBqC0NkyvZz2CqTzLr4QL3c8fl83b6a7m1pxiksro/IC/gfMtElTkAuPlR4Pr7JeDYu16Cj60vyprqo+fISKBIB6sNVTJ0WJ/v2/9ayZo7ojTvu61FRnxlD4961lzXldFvndm+fTsmTpwIh0OG/0+cOBHbtm3DzJkzL/6L/UP9VOkkCfu99jXkcWjfq0GvCX6vGvQaBQg3LSrsw0ro7wgR5nFFkWsJa2b0Ar+swfK5ufFH0uFe+S5QUwnsWy+33DESqA+ZHP/BqKpqbUVQJrxe+9p4UluSNAzFKOcPe56McrHnSdHGzIGSnOnt12tEvY3PK53biiJtmX1gxJNpra2tmD17tn+ZtdmzZ+OBBx4AAHz/+9/Ho48+ig0bNuCWW26BzSbXkVdddRUMBgO+973vobS0tNPXxUrEAvScnBycOnXKf7+6uto/HC74NSdPnkRubi48Hg8aGxuRlZUVqU3qnMEgF/4WG5CWLVW9AblgaGsB2lq1bLtelE6vkq5l240pvTeTm5ErywN95/9KFuubj4FDn0gArQ85taTLskjDbgMGjr34yAKPCzh7OLCk2Zl/yJrT4Sqp27KD5opfCfQZLj3biTjlIBkpBukQSuvbcX1ovVKuHqzr8wRtTgnKc8fI3FtKHikZkqkumCcBx57fySoMf10N7FoHXHW7PGe/cDHRbvO2yVz4Xb+R71MygZsekUxkNM5F+lxzsy3mc827MvoNAP70pz/hL3/5C4YMGYKnn34a/fv3D/ve6uoLZDh1BpOMbjMYIAFz0JI1Bv2+/pwS+N4Q5jH9tYpeQdcQeD5cZd2QxxD0/1Y6PtfhsXY/o7UBOL1fitimOqI3Cs9klRURrpouHeCV78oSbad2y+2zMvnsjPpez392usvVGAi+z1WFDk0PToq0l9YPcAQF4frXRFselKi30gNzqEDWUPl8mqIz+q2ysrLT5wYPHow//OEP/vuLFi0CAJjNZqxZsybkteFeFysRO6sVFBTgyJEjOHbsGHJycrBp0ya89NJLIa8pLCxEeXk5rrvuOrz//vuYMGFC9+afR5rRDBjtcrGUoXUuqGpQtr05ELS3NgDQetxNJq0oXUrv6r3NHABc+wO51R+TYP2bT2Q94wPvyS0lU3rjh90G9P+OXFTpQ9Rrgyuphym+kjFAAvA+V2oB+fDkrKROQlEkGLc5JTtOpDOagSunASOKZEmz3W8Bx3YAX1XI3NtBNwNj/o8cN5fbZpzcrRWB+1buX1ksc32jUQQOCGTN9bnmURgCeLluu+02zJw5ExaLBW+++SaeeuqpDhc63WK2AUMm9dwGxkp6X6n9cu64tIeKUa4fonld02cEcMsTwPgfS5Be+a600bvfktvAsRKoD54UucC2s3nhDce0a6VOpGRK9tvePhAfmFzz6ol6E9UXSF46Bstn2MzP6+WK2JWAyWTCs88+iwcffBBerxd33nknRowYgVdeeQXXXHMNpkyZgrlz52LRokUoKiqC3W7HihUrIrU5PUdRpBCVOVUCC31CrtcTVEn+nBa4n9OWgAMARRtenxLd+ZSXypEPjL1XbnVHJJv1zccyTH3/RrmZbXJx2Z5ikAvN4GHq2cNZSZ2IukdRZNrEwOtlVM6et2V+uL4iRd+REqgPuaX7wUbrOWDnKpn3DkS/CJzqA1rqpC3JHy8Z1zjQldFvwSPd5s2bh1/84hf+9+7cuTPkvTfemHjrtl+Q0SSj8NL7yTHbUKWN0IvyaCCLTYrGjZolWf2v3gUOfSTTN47/r3QkXFUCjCqRedrddanzwk3W8AG4PY+rFBD1JqoqHW5ej8QMWYNYqLcHRXQd9EgoLS3t3rp0sRS8BJy7RZvb3iCZd0CyRCkZvSfLrqpA3WFp5A99LD3kBrMUotGrqGcPB7KHsbebqDfyeQPnLP98X8h5Kl7msLbUAvs2SDbddU4eS88BCuZKwHGxOgWqKpnFz1+TjlSDWYbVX/v96P2NetY8a6icP+Moa+7xeFBcXIw33njDXyTupZdewogRgWW8ampq0K+fFLf54IMP8Prrr+Ott95CfX09SktLUV5eDgCYM2cO1q9f75+T3ple1a531/l6qbHR2gCk2mPbQe9qlA6uynel4x0AoAD5N0pW/YrxoR1dPT0v3J4nS5TF00hJIuoeVZVYxtMmn++sQZdUH6iyshKjRo2KwAbGr+78zfFzVZCI2i8BZx8oj/u80lCeOylBLlSpNh/vQa2iBNbQvmG+LIdmdfTe+fdEyUyfruNxaetzqoBiAmxZciGdkiG94a0NMnXF1RgfgbotGxg3XyqrH3hfsuoNVRJwf/kGMHKWrFYRrjrquePAthXA8b/K/f7f0YrAhVlaMBL0rLnJGldZ82BdGf32m9/8Bh999BGMRiPsdjteeOEFAIDD4cAjjzyCuXPnAgAWLFhw0eA84aU6ZFWU5hptZYpGaTdjUfQ0JUM+G6PnANV7JKv+zacyfeTYDimqNvgW6VS4pHnh2vecF06UeFRVOsW9bpmy6hzCOkERxAx6rHnbgOYzMv/R1aiV389kxXIi6lkelxaQtwUKaKVkSEbLag9M3QmX3dKX0jtzUKbxRLNS9cWoPuDbz2R+7SmtmJlilDoZY/6PjO7xtgG7fwf87xq5uEjJlHnmV94evWxe23ktaz5YOjnjKGseawnXrnfG2ybTxGq/AUzm+BjS3VovHV2Vf5CgvD3OCyciV6MUzM7IlcC8B6asMoN+YbxCiDWjWZZ7y+wfyKo3VEmxBbONy0oRUfd52yQY97oDQ9Ut6dLrneqQc4vZplXB7gJ9Kb20vhKonz4gc7jjIVBXDFLwavAkyVDu/h1w+FMZxv6PD2VO+fm6wJDeEVoRuGhlr1WfZCSNKUD+OBlNRcnJaJYpYBm50tnVVCOj52I5b9PqkI6sgnnAiV1A9T6ZMqJnxOOhE4GIYkMPzNP6yrKj1sxYb1HSYIAeT1IygL4Zkl05f1YuKJtPa5VgMzlkjIg68nm07LgrsHqCKRVIzZZClpY0CcZ7ImMbHKg31UiQES+BOgD0GwlMfU6KV+39vRSAO7FLnrPnAZMelyrW0dJ2HmhtlIwDs+aks6TJspMtZ2Xd8qYzgC2Ky7KFoxgCq4TlAwAAGypJREFUBRkpPvi8gNcVtKygEaHLEBJFiLtZamelZcuSt3E4Hety1dXV4f777wcAnDlzBgaDAU6nEwDw9ttvw2LpvF7Inj17UFFRgZ/97GcR2z5eLcQjo0nmT6b3kw9JY7UMgfe2AZZUwJzGkzNRMlJ92jKPrTIfDKpk5axZsrxJSpqcHyK99qjBKKN+0vvFZ6CekQvctAC4/j7g6/fkQnf0nOhtm6pKJ6vRClxxI7PmFJ7NKevenzshy7KpqhwrbN+Tk+qTTr2283JfMUlhQdUnHbFtLlkZyOfRzv8AoECGSbU/ZrTnlaCAXjFqx5ZBGz0VFPQn+rRK1afd1EBHtn4fwY+rge9DZgAH719V9qnBKDfFKJ1rBmPvKfrcmbYWwNUsAXn+6IRuu7KyslBRUQEAKCsrg81mw/z58/3PezwemEzhw+SCggIUFER2eWAG6PHOkgZkD5UqiefrgYajMmddMUjGnQXaSKeqvLBLJKoq2RNPK+DVi7gZpeHMGCjBsNkW2/VG4z1Qt6TL0N1o8rRK1twxSM7dPEfThRiMMsfbvyzbUZnbzWVJE5/qk85Wf0BukE4b5zD5/1sukIzx+WQqpB54+vTvvdJ26Pd9WkDv9QC+tqD7bYGg39cWeF8IpeNd/TqjfdCvGMLfLvS3tw+UOwTM7YLn4GucTqtnhXlCUQAYAwG0HlgbLVpwHSbQ1r8i+G9TtH3rkba5rVVro10ynczd3G5lAyWwTYoS9DuCvsbLyFi9RorVDuTdkLQdhYsXL4bFYkFlZSXGjh2LkpISPP/883C5XLBarfj5z3+OoUOHYseOHVi9ejVWrVqFsrIynDhxAlVVVThx4gTuu+8+3HvvvZe9LXFyZNBFGYwy1CQtWz5ITTVA3bcStJutciGahB+mmAnubQWCGhY1/NcOj+kNEwI/Qz+Z641Ax18aejf4dYoi71d9gZ8DyGgMo1kaonhpCCg8r1tr8N2QiwIAlgwgM1+bN54qAXk8fs7jPVCPBlWVue5Gi1zg2Jyx3iLqTUwpMkUjc4Asy9ZUIxfLyfL5SQaqKktYtrVKW60osiqFY5CcKy3p3agLYgDQw9na4KA/JOD3dQz6QwL+Nm04vlu++toCzwULuWZpH6ga5VolOHBVgoNmg/aYITRgvmDngPZcV/dpT+1DX/C+8QY6RPwBvbZ6irtFHm9/Dajf92fl23Ui9OQ1gKdV2uqUDJn+ZcuOyTXG77+swlt/PdajP/OuG/Jx5/V53X5fdXU13nzzTRiNRjQ1NWHdunUwmUz47LPPsGLFCpSVlXV4z+HDh7FmzRo0NTVh+vTpuPvuu2E2X17nPK/YeyNzqmTU7flSgbWhCmiqBqBoy7WxQe8Sfb1nrzfoQX24WFAwHC5gDuk1NkoDoBgDjYHBJD9Lb1iU4OfbfQ2eU6b3OPu/D55v1v51wY2TdkL1tgV6cz2t0iPqbpKeXf9yOdrfaNCDd7OsBR2PgV+i8nmko83jlvuqKsPT03Ok59qiF3HrZcMOwwbqjYA1DpZniyR/1vwKKQLGrDldKmumdPA0n5aih65GOSf0tnMBBUZBuVsC1xCpDrl2s9q1gDyO/q89HfT7M9969rtdYJ2IDAbAYAHQxWlmekY+ZGSD1snhcQeCeX1qm9cdSPB0Ouy+XWAfbiSDxyVLppnTpJCqrU90OzLi2O233w6jUT6XjY2NeOqpp/Dtt99CURS0tbWFfc+tt94Ki8UCp9MJp9OJ2tpa5ObmXtZ2MEDvzQzacCibUz5sTaelsFzrOZmDmpLR++fD9BT/3N3zgYbSkgZk5Mm6zwZTN4PiOG1c9IA7HJ9XC95dcuJ3N2sVOpsluPDPY9NO9Hrm3WjmcXQ59P3uCTr2TFa56LZlBxVxS6CgLlkCdT1rbjAza049R1Hks5PqlA742n/IZ8pqj9+2h4THJfN4fVrHf4pdhqyn2mVEVDIVitSHwCOOOiHijaJc+LotHK8nNKj3B/SuwDWeHsy7mmQUhJ8BgE+uQXLHAGn94iIwv/P6vEvKdkdCampgVY1XXnkF48ePx2uvvYaqqqpOh64HF5QzGo3weDxhX9cdSXSmSHCmFMCRJ2uTtjZI0Zlzx+W5lPTkW6/Un6F0wR9k6z3XKRnSc51IAVFXGIzasn1hlu7z+eRkrgfvbS2B7Pv5c1KYxj8EHxKQ+LPvSXoaUVVp+HzeoGGBwUMCAensMEknkCNfjjtLWmIFqReSyIG6PjTQcQWQPTz5zicUeUYT4ByszU8/JO16Srp06FF88LolQ64P57akS8HOVAfrBFFkGE3d6+jRh9kHB/RWe3yN3ohTjY2NyMnJAQCUl5dH9Xcn6ZV1AlMUaRhSHXLR2FIL1B2WZVyMJmkwEu1DqQ8ja2vVeq1V6ZCw9QnNUMZBL2HcMhgAgzV8wTFVlWFXevDuaZXMuz503qsN09az70aTDPHqbq9wLIQNsr2hw/I6rY5rDIwyMKVqow0sst61ySxfLTY5FpM96xUcqDdWS0awtRFIzZR91puEZM3HMWtOkWexAbkFslTg6f0y/N3qiP/zayLytkkHttcDQJVrC3u+tqRleuRX0CDqLn3+Onp5p3gMPPjgg1i8eDFWrlyJW2+9Naq/W1HVsNWo4lZpaSnWr18f683oXVRVAqrGkzJczucDUmy9txfe5w3Mx9GlZMjazFa7FpAn2YiBWPJ6QiuZ6pl3VxPgbQ0KctVAIRiDFtj2ROAaUsX2MoJsoxZU619N2ugAvTBNyLwuEzt8LofPGwjUPa7eE6h7XFrWPJ9Z8x7Edr0bfD5py88clPNdqoNTkCLJ59GKeWkd0SardDTasiUg57UG0SWprKzEqFGjYr0ZUdWdv5kZ9GSgKFJ4xpopc6FaaqUCfNNpCTSsGfE9TNnrluHqXq04g2KS3mrHYNl2c1pyzeuKN/pwK0ua3A9eHcjna7cMSQvgbpTg/XxdaNV5BVq1eWPXg2x9TVc9wDalMsjuDQxGwD4AyMgJBOrnz8VvoO7Pmps415xiy2CQqWxpfaXmTN0RCRK5LFvPCJkeBzkfpfeTEXkp6VKkl4gowhjVJBujSS6KM3IkSGqqBuqPSqNkTg0EWbGiqkHF3LRKlWYbkJ6r9Vjb4nepKerIYAAMqeEvalRVqzbvCnTCuJvkvn+Oe4oMGfQvu8IgO6H0hkDd4wLONwSy5hzCSvHAZAH6XinLsp05IB3u1ozkqzdzuXzewNJngLQ7tj7SAZKSIW0XrzeIKMoYoCezlHS5ZQ2W7FD9UaD5jARB0SpuovdWe92BIuJWB5A5MFDMjRfEiUlRpFBYby8WRpcvHgN1VZVlLBUjkHc9kNYnNttBdCEp6bJMUkuttizbGRn2Hs+j4mJJ9Ukwrq+qoRil8985XLvmSGNATkQxxzM4ycVxWh+5uVuk2nL9UakGb0qRILmnGix9uSmPJzCk2ZYtN706baIVsSOiromXQJ1Zc+pNFEXa70E3acuyHZTAk8uyaaPytAy5qk2LsjklMWHNlClyHIVFRHGGATqFsthkWRfHFZI9ajgmAbuiaFn1blyo+nuq9UJhqgT7mfnSw29JY4VrIuooVoG6PtecWXPqjQxGIGsQkJ4DnP1GgnWLLfZT16JFnzal3/QayKlOwH6FBOSWdCYBiCjuMUCn8AwG6WW2OSXIbq4B6o5KBWOjRbLd7SvHetsCw9UBbehYlgT7+tAxVj0moq6KZqDuccmoocyBQJ8rmTWn3stsBXKuDpqfXiOd4vFS1+Fyedu0ILxNW39cWyVEMUgAnpotwXhKRmIuLUtECY8BOl2c2SpBtj1fsurnTsgyL6q2bJbPK68zpQaWHzHbuPY4EfWMSAbqqgqcr5eL+wFjgfS+PbPNRLGW6gDyxkkx2Jr9gNokw957Q8Dq84QG4noQDsi1hh58p6TLVDyjVs+EI/KIqAt++MMf4qGHHsItt9zif+yNN97A4cOHsXTp0rCvf/LJJ1FQUIAf/ehHeOmll5CZmRnymrKyMthsNsyfP/+yt48BOnWdogCpWXLLHgE0nwY8biBVW3ucxb6IKJJ6OlAPyZqP4DmMEo+iABnaKij1R4Hab2T5Sas91lsm0+D8QbhWKFYPwo0Wua6w9ZFA3JQiU+JMKb2jg4GI4trMmTOxefPmkAB98+bNWLRo0UXf+/rrr0dy0wAwQKdLZbLIWqxERNF2uYF6SNb8Ohn5Q5TIjGYge5gE62cOyrD3aKzrrapaNlwLwn1edBiSntZXvpptgZU9OB2OiCKouLgYL7/8MtxuNywWC6qqqlBTU4ONGzfihRdegMvlQnFxMRYuXNjhvYWFhXjnnXfgdDqxcuVKbNiwAU6nE/3798fo0aN7ZPsYoBMRUe/UIVA/ePFA3eOSWhqZ/bW55syaUxKxpAEDrgVazgI1lUDTGcDWA8uy+YPwttAh6YoiQ9ItGZK1t9gC2XCjhUPSiQj422+BXWt79mdedw9w7d2dPu1wODBmzBhs3boVU6dOxebNmzF9+nQ8/PDDcDgc8Hq9uP/++7F//36MHDky7M/Yu3cvNm/ejA0bNsDr9WLOnDkM0ImIiAC0C9RPdZ5RP18PQJEAhVlzSmY2J3DFBODcSaD2gGS6Ux0di78GCzskHQBUrXhsBmDrKwXa/PPCraxFQ0RxqaSkBJs3b8bUqVOxadMmPP/883jvvffw1ltvwePx4PTp0zh06FCnAfpf//pXTJ06FampMhKpsLCwx7aNAToRESUGg1Gm3mTkhgbqFhvgapKsed+rmDUnAuTz4siTwohnDwMNRwPzvPVAPGRIukk+S2l9JSNuTg3KhvNykogu0bV3XzDbHSlTpkzBCy+8gH379qG1tRV2ux2rV6/GO++8A7vdjsWLF8PlckV9uwCA3ZpERJRY9EB98CRZbspgAAZeB+QWMDgnas+UAvQbCeRPkCHwPq8MR88aCvS/Fsi/ERgyGRj2XeCK8UC/URLYp2XLPHYG50TUC6WlpWH8+PF45plnUFJSgubmZqSmpiIjIwNnzpzB1q1bL/j+cePG4cMPP0Rrayuamprw8ccf99i28axKRESJSQ/UWdCS6OKsmcDA62O9FUREUTNz5kwsWLAAv/zlLzFs2DBcffXVmD59OnJzczF27NgLvnf06NGYMWMGZs+eDafTiYKCgh7bLkVVVfXiL4sfpaWlWL9+faw3g4iIiHoA23UiouRSWVmJUaNGxXozoqo7fzOHuBMRERERERHFAQboRERERERERHGAAToRERERERFRHGCATkRERERERFHTy8qgXZbu/q0M0ImIiIiIiCgqrFYramtrkyJIV1UVtbW1sFqtXX4Pl1kjIiIiIiKiqMjLy0NVVRVOnz4d602JCqvViry8vC6/ngE6ERERERERRYXZbMaQIUNivRlxi0PciYiIiIiIiOIAA3QiIiIiIiKiOMAAnYiIiIiIiCgOKGovK583fvx4DBw4MNabQUREFFVZWVn47//+71hvRo9ju05ERMmos3a91wXoRERERERERImIQ9yJiIiIiIiI4gADdCIiIiIiIqI4wACdiIiIiIiIKA4wQCciIiIiIiKKAwzQiYiIiIiIiOIAA/QuKiwsxKxZszB79myUlpZ2eN7tduOxxx5DUVER5s2bh6qqKv9zq1atQlFREYqLi7Ft2zb/41u3bkVxcTGKiorwX//1X1H5O+LZ008/jZtuugkzZ870P1ZfX48HHngA06ZNwwMPPICGhoaw7+3uPj527BjmzZuHoqIiPPbYY3C73ZH7w+JUuP1dVlaGW265BbNnz8bs2bPx6aefhn1veXk5pk2bhmnTpqG8vNz/+N69ezFr1iwUFRXh3/7t36AvEtHV/2OiO3nyJH74wx9ixowZKCkpwa9//WsAPM4jpbP9zeOcALbr0cB2PbrYrkcX2/ToS5p2XaUuue2229Ta2tpOn1+7dq26ZMkSVVVVdePGjepPfvITVVVV9eDBg+qsWbNUl8ulHj16VJ0yZYrq8XhUj8ejTpkyRT169KjqcrnUWbNmqQcPHozK3xKvdu7cqe7du1ctKSnxP7Z8+XJ11apVqqqq6qpVq9QXX3yxw/suZR8vXLhQ3bhxo6qqqrpkyRJ13bp1UfgL40u4/f2f//mf6q9+9asLvq+urk4tLCxU6+rq1Pr6erWwsFCtr69XVVVV77zzTnXXrl2qz+dT58+fr37yySeqqnbt/5gMqqur1b1796qqqqqNjY3qtGnT1IMHD/I4j5DO9jePc1JVtuvRwHY9utiuRxfb9OhLlnadGfQe8tFHH2HOnDkAgOLiYnz++edQVRVbtmxBSUkJLBYL8vPzMWjQIOzevRu7d+/GoEGDkJ+fD4vFgpKSEmzZsiXGf0VsjRs3Dna7PeSxLVu24I477gAA3HHHHfjwww87vK+7+1hVVXzxxRcoLi4GAMyZMycp9324/d0V27dvx8SJE+FwOGC32zFx4kRs27YNNTU1aGpqwrXXXgtFUXDHHXf492tX/o/JoF+/fhg9ejQAID09HUOHDkV1dTWP8wjpbH93BY9zYrt++diuRxfb9ehimx59ydKuM0Dvhvnz56O0tBS/+93vOjxXXV2N/v37AwBMJhMyMjJQV1eH6upq5Obm+l+Xk5OD6urqTh+nULW1tejXrx8AoG/fvqitre3wmu7u47q6OmRmZsJkMgEAcnNzue+DrFu3DrNmzcLTTz8ddihPV/d38H7tyv8x2VRVVaGyshLf+c53eJxHQfD+Bnick2C7Hn0830Ufz3eRxzY9+hK5XWeA3kW//e1vUV5ejtdffx3r1q3DX/7yl1hvUtJRFAWKosR6MxLa3XffjQ8++AAVFRXo168f/v3f/73Hfwf/j0BzczMWLlyIZ555Bunp6SHPcf/0vPb7m8c5AWzX4wE/J5HH813ksU2PvkRv1xmgd1FOTg4AIDs7G0VFRdi9e3eH50+ePAkA8Hg8aGxsRFZWFnJycnDq1Cn/66qrq5GTk9Pp4xQqOzsbNTU1AICamho4nc4Or+nuPs7KysK5c+fg8XgAAKdOneK+1/Tp0wdGoxEGgwHz5s3Dnj17Orymq/s7eL925f+YLNra2rBw4ULMmjUL06ZNA8DjPJLC7W8e5wSwXY8Vnu+ii+e7yGKbHn3J0K4zQO+ClpYWNDU1+b//85//jBEjRmDt2rVYu3YtAKkGq1cDfP/99zFhwgQoioLCwkJs2rQJbrcbx44dw5EjRzBmzBgUFBTgyJEjOHbsGNxuNzZt2oTCwsKY/Y3xqrCwEBs2bAAAbNiwAVOmTAEA7N69G08++aT/Nd3Zx4qiYPz48Xj//fcBSEVH7nuhn4QA4MMPP8SIESMAyEnsvvvuAwBMmjQJ27dvR0NDAxoaGrB9+3ZMmjQJ/fr1Q3p6Ov72t79BVdWQ/1dn/8dko6oq/vmf/xlDhw7FAw884H+cx3lkdLa/eZwT2/XY4fkuuni+ixy26dGXLO26KSq/pZerra3FggULAABerxczZ87E5MmTsWzZMowdOxYAMHfuXCxatAhFRUWw2+1YsWIFAGDEiBGYPn06ZsyYAaPRiGeffRZGoxEA8Oyzz+LBBx+E1+vFnXfe6T+YktXjjz+OnTt3oq6uDpMnT8ajjz6Khx56CI899hjeeecdDBgwAC+//DIA4MSJE7BarQAubR8vWrQIP/3pT/Hyyy9j1KhRmDdvXmz+6BgKt7937tyJ/fv3AwAGDhyIZcuWAZATnz7vyeFw4JFHHsHcuXMBAAsWLIDD4QAAPPfcc3j66afR2tqKyZMnY/LkyQDQ6f8x2Xz55ZeoqKjAlVdeidmzZwOQ/wOP88jobH9v3LiRx3mSY7seHWzXo4vtenSxTY++ZGnXFVXVFnqjbnv44YdRVlYGi8US601JOsuXL8fs2bMxcuTIWG9KUli7di369++flD3kscTjPLp4nBPb9djh+S66eL6LPh7j0ddbj3MG6ERERERERERxgHPQiYiIiIiIiOIAA3QiIiIiIiKiOMAAnYiIiIiIiCgOMEAnIiIiIiIiigNcZo0ogdTV1eH+++8HAJw5cwYGgwFOpxMA8Pbbb1+wMvGePXtQUVGBn/3sZ13+fe+88w5+/etfA5C1KR977DFMnToVr7zyCsaNG4ebb7750v8YIiKiJMd2nSj5sIo7UYIqKyuDzWbD/Pnz/Y95PB7/epCX69SpU7jnnntQXl6OjIwMNDc34+zZs8jPz++Rn09EREQBbNeJkgMz6EQJbvHixbBYLKisrMTYsWNRUlKC559/Hi6XC1arFT//+c8xdOhQ7NixA6tXr8aqVatQVlaGEydOoKqqCidOnMB9992He++9N+Tn1tbWIi0tDTabDQCQlpaGtLQ0/+/87ne/i4EDB/p77n0+Hw4cOICvv/4aR48exdKlS1FXVwer1Yp//dd/xbBhw6K7Y4iIiHohtutEiY0BOlESqK6uxptvvgmj0YimpiasW7cOJpMJn332GVasWIGysrIO7zl8+DDWrFmDpqYmTJ8+HXfffTfMZrP/+ZEjR6JPnz6YMmUKbrrpJhQVFaGwsDDkZxQUFKCiogIAsHz5ckyaNAkAsGTJEixduhSDBw/G3//+dyxduhRr1qyJ4B4gIiJKHGzXiRIXA3SiJHD77bfDaDQCABobG/HUU0/h22+/haIoaGtrC/ueW2+9FRaLBU6nE06nE7W1tcjNzfU/bzQa8atf/Qp79uzB559/jhdeeAH79u3Do48+2uFnbd68GV999RVWr16N5uZm7Nq1Cz/5yU/8z7vd7h7+i4mIiBIX23WixMUAnSgJpKam+r9/5ZVXMH78eLz22muoqqrqMMRNF1x4xmg0wuPxdHiNoigYM2YMxowZg5tvvhnPPPNMh4b8wIEDKCsrw7p162A0GqGqKjIzM/098ERERNQ9bNeJEheXWSNKMo2NjcjJyQEAlJeXX/LPqa6uxr59+/z39+/fjwEDBoS85ty5c3jiiSewfPlyf9XZ9PR05OXl4b333gMgVWL3799/ydtBRESUzNiuEyUWZtCJksyDDz6IxYsXY+XKlbj11lsv+ed4PB4sX74cNTU1SElJgdPpxNKlS0Nes2XLFhw/fhxLlizxP1ZRUYFf/OIX+Jd/+ResXLkSHo8HM2bMwMiRIy95W4iIiJIV23WixMJl1oiIiIiIiIjiAIe4ExEREREREcUBBuhEREREREREcYABOhEREREREVEcYIBOREREREREFAcYoBMRERERERHFAQboRERERERERHGAAToRERERERFRHGCATkRERERERBQH/j+v6b18pMSqpQAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
],
"source": [
"fig, axes = plt.subplots(ncols=2, figsize=(14, 5))\n",
"xmin, xmax = reg_lc_data['Train Size'].min(), reg_lc_data['Train Size'].max()\n",
"\n",
"sns.lineplot(data=reg_lc_data.reset_index(),\n",
" x='Train Size', y='IC',\n",
" hue='Data', ci=95, ax=axes[0], lw=2)\n",
"axes[0].set_title('Best Regression Tree')\n",
"axes[0].set_ylabel('IC')\n",
"\n",
"axes[0].xaxis.set_major_formatter(\n",
" FuncFormatter(lambda x, _: '{:,.0f}'.format(x)))\n",
"\n",
"sns.lineplot(data=clf_lc_data.reset_index(),\n",
" x='Train Size',\n",
" y='ROC AUC',\n",
" hue='Data',\n",
" ci=95,\n",
" ax=axes[1],\n",
" lw=2)\n",
"axes[1].set_title('Best Classification Tree')\n",
"axes[1].set_ylabel('ROC AUC')\n",
"axes[1].xaxis.set_major_formatter(\n",
" FuncFormatter(lambda x, _: '{:,.0f}'.format(x)))\n",
"\n",
"for i in [0, 1]:\n",
" axes[i].tick_params(axis='both', which='major', labelsize=10)\n",
" axes[i].tick_params(axis='both', which='minor', labelsize=8)\n",
" axes[i].set_xlim(xmin, xmax)\n",
"\n",
"fig.suptitle('Learning Curves', fontsize=14)\n",
"sns.despine()\n",
"fig.tight_layout()\n",
"fig.subplots_adjust(top=.9)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eTkJemTUZDwt"
},
"source": [
"### Feature Importance"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "d5Y2P_y-ZDwu"
},
"source": [
"Decision trees can not only be visualized to inspect the decision path for a given feature, but also provide a summary measure of the contribution of each feature to the model fit to the training data. \n",
"\n",
"The feature importance captures how much the splits produced by the feature helped to optimize the model's metric used to evaluate the split quality, which in our case is the Gini Impurity index. \n",
"\n",
"A feature's importance is computed as the (normalized) total reduction of this metric and takes into account the number of samples affected by a split. Hence, features used earlier in the tree where the nodes tend to contain more samples typically are considered of higher importance."
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:04.395752Z",
"start_time": "2021-04-16T00:35:04.389724Z"
},
"id": "SrEJOhk7ZDwu"
},
"outputs": [],
"source": [
"top_n = 15\n",
"labels = X.columns.str.replace('_', ' ').str.upper()\n",
"fi_clf = (pd.Series(gridsearch_clf.best_estimator_.feature_importances_, \n",
" index=labels).sort_values(ascending=False).iloc[:top_n])\n",
"fi_reg = (pd.Series(gridsearch_reg.best_estimator_.feature_importances_, \n",
" index=labels).sort_values(ascending=False).iloc[:top_n])"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {
"ExecuteTime": {
"end_time": "2021-04-16T00:35:04.714765Z",
"start_time": "2021-04-16T00:35:04.396825Z"
},
"id": "4mSomnjEZDwu",
"outputId": "b80683e3-97f5-497f-8163-af20365b0096",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 302
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 864x288 with 2 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAEdCAYAAAARlcZeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeVhW1f7//ycyiEildhwwccgSUZQhxxTROxwA8VYcMnP2COKYqUdS83M0rTSzc/QUaaJRefKUkSa3mDlGlqZpFpqWliEOpKHmxCT79wdf9s87UNFQHF6P6+K6utdae+217uuc++1777XXdjAMw0BERERERET+sjKlPQAREREREZG7hRIsERERERGREqIES0REREREpIQowRIRERERESkhSrBERERERERKiBIsERERERGREqIES0REREREpIQ4lfYARESk5Hh5eV21vlu3brz88ssles6ffvqJ+fPns2fPHtLS0hg5ciSjRo2yazN//nz+85//2JX97W9/Y8uWLVfsd9u2bfTv379Qef/+/Zk8eXKJjN1isfD0008zZMiQEulPRERECZaIyF3kiy++MP9706ZNTJkyxa7M1dW1xM958eJFHnroIdq3b8+//vWvK7arU6cO7777rvnZ0dGxWP3bbDYeeOAB83O5cuVufLA3SV5eHoZhFHtOIiJy99ISQRGRu0jlypXNv/vuu69Qmc1mo3379vj4+NC+fXs++OADu+O9vLx47733iIyMxNfXl3bt2rFy5cqrnrNx48ZMnDiR8PDwqyY/Tk5OdmOpVKlSseZUqVIlu+Pc3d0BSE9PZ+zYsTRt2pSmTZsSGRnJoUOHzONSU1OJjo6mVatW+Pn50a1bNzZu3GjW9+vXjyNHjjB79my8vLzMu38JCQn4+/vbjWHbtm14eXmRkZFh12bz5s107twZHx8fDh48SHZ2Nq+88gpt2rTB19eX7t27k5ycbPaTk5PDjBkzaN26NT4+PgQFBTFnzpxifQ8iInJnUIIlInKP+Oyzz3jhhRcYMGAAq1aton///kybNo0NGzbYtZs/fz4Wi4UVK1bQq1cvJk6cyPfff/+Xz3/48GFat26NxWJh7NixHD58+Ib7unjxIv3796ds2bK8++67LFu2jMqVKzNo0CAuXrwIwIULF2jTpg2LFy9m5cqVdOjQgVGjRnHw4EFzntWqVWPEiBF88cUXdnf6iiMrK4s33niDadOmYbPZqF69Os899xzbt2/n1VdfJTExkW7duhEdHc2+ffsAePfdd/nss8947bXXWLt2La+99hp16tS54e9BRERuP1oiKCJyj4iLi6NLly707dsXyF+yt2fPHt566y0sFovZrn379vTu3RuA6Ohotm3bRnx8/F+609K4cWNeeuklHn74YTIyMoiNjaV3794kJiZSsWLFqx77xBNP2H222Wx8+eWXGIbBSy+9hIODAwDTp0/n8ccfZ+PGjYSGhlK/fn3q169vHhcdHc3GjRv59NNPGT58OBUqVMDR0ZHy5ctTuXLl657TpUuXeP755/Hx8QHy75jZbDY2bNhA9erVAejbty9ffvkly5Yt45///CdHjx6ldu3aNGnSBAcHB6pXr05AQMB1n1tERG5fSrBERO4RP//8M927d7cre+yxxwrdwfLz8yv0efPmzX/p3EFBQXaffX19CQ4OZsWKFQwaNOiqx8bHx9s9g1WlShVzQ40/JycXL14074xduHCB//znP2zatIkTJ06Qm5tLVlbWNTcCKS4nJye8vb3Nz3v27MEwDMLCwuzaZWdn06JFCyB/k5HBgwfTsWNHWrVqRVBQEG3atKFMGS0oERG5WyjBEpEr2rFjB5MnT+bTTz8t7aHITVRwB+hWKl++PI888ojdM1NXUqNGjULPa+Xl5VG/fn1ee+21Qu0LkrFZs2aRnJzMxIkTqVWrFuXKlWPixInk5ORc9XxlypTBMAy7stzc3ELtXFxc7Da1MAwDBwcHli9fjpOTfXgt2FykYcOGrF+/ni+++IKvvvqKiRMnUr9+fZYsWaIkS265+fPn8+uvv9605wDDwsKYOnUqzZs3xzAMJk2axLp166hVqxYxMTE3Jb4cPXqUsLAwduzYoU1npNQowRK5ySwWCydPnsTR0RE3NzcCAwN5/vnnKV++fGkP7ZqaNGlS4sFvx44dDB06FMj/B+nFixdxc3Mz6wueZZGS9/DDD7Nz50569uxpln3zzTfUrVvXrt3u3bvp0aOH3eeHH364RMeSlZXFL7/8QvPmzW/o+IYNG2Kz2ahYsSL3339/kW127txJ165d6dixo3nO1NRUateubbZxdnbm0qVLdsdVrFiRixcvcu7cOXNDjR9++OGaY/L29sYwDE6cOGHesSqKu7s7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z9yCF/K3bm/cuDE5OTkA7N+/n/DwcAC7rXUBvv/+e/r163fN+WlPR/krsnIulfYQRO5YBfGlc+fODBs2jD/++AOwjy8FfytWrKBnz55YrVbatm1LixYtzLq0tLRC26InJCQwffp0AObPn09gYCBWq5XQ0FASExPNdjExMQQGBpKdnQ1ARkYGFoulyPE+99xztGzZks6dO9uVz5o1i06dOhEeHs6IESPMeWzbtg0vLy8+/PBDs+0PP/yAl5cXcXFx1/x+FJ9uHv12i9xd7rj3YLm6urJy5UoAkpOTmTt3Lu+99x4ANWvWNOuWLVvGggULmDVrVqE+atasyYoVKwA4fPgwI0eOxDAMunfvzr59+5g1axaLFy/G09OTw4cPM3jwYGrUqEG9evU4duwY586dw93dnV27dlG3bl1++OEHGjduzK5du+yCakZGBps3byYoKKjY83NwgDrP2G74+5F72y//CivtIYjcsS6PLxMnTmTp0qVER0cD9vGlQNeuXYH85CklJYWpU6cW+1wDBw5kyJAhHDp0iIiICDp27IizszMAjo6OLF++nD59+ly1j4iICPr27cvEiRPtylu1asW4ceNwcnLilVdeYcGCBUyYMAGAevXqkZSURM+ePYH8C4X169cv1pgVn24e/XaL3F3uuDtYlzt37hz333//ddddztPTk5iYGN59910A4uLiiIqKwtPT06yPjIwkLi6OMmXK4OPjw3fffQfAnj176NOnj3kXbdeuXQQEBJh9DxkyhDfffPMvzVFERG49Pz8/0tPTb/p5ateuTbly5cy7TAADBgwgPj6e3Nzcqx7btGlTHnjggULlrVu3xskp//qpn58fx48fN+uqV69OVlYWJ0+exDAMkpOTadOmTQnNRkRE4A5MsDIzM7FarXTq1IkpU6YwfPhwsy41NRWr1UpwcDBvv/02gwYNKlafDRs2NJcTHjhwAB8fH7v6Ro0aceDAAQACAgLYuXMnFy5cwMHBgebNm7Nr1y6gcILl5+eHs7MzW7du/UtzFhGRW+fSpUt89dVXdkvzCuJLwd+OHTtK5Fx79uyhVq1aPPjgg2aZh4cHAQEBhe6Y3YiPPvqoUALVsWNH1qxZw86dO2nYsCEuLi5/+TwiIvL/u6OXCO7atYuJEyea69cvX8KxevVqnn/++WKuKy/+wnJ/f38WL17Md999R6NGjahZsyapqalkZGRw4cIFatasadc+Ojqa2NhYxo8fX+xziIjIrVdwAS89PZ26devSqlUrs66oJYLXy8HBwfzvt99+m4SEBA4dOkRsbGyhtlFRUQwfPpy2bdve8PliY2NxdHSkS5cuduUhISGMHTuWn3/+mbCwMPMioYiIlIw77g7W5fz9/Tl16hQZGRmF6iwWS7GvMO7du5e6desCULduXVJSUuzqU1JSeOSRRwDw9fUlJSWFnTt34ufnB0DVqlWx2Wzm58u1bNmSrKwsdu/efV1zExGRW6vgAt7GjRsxDIOlS5fecF9ly5Y1N6oAOHPmDBUrVjQ/Dxw4EJvNxrx585g8eTJZWVl2x9euXRtvb2+SkpJu6PwJCQls2rSJOXPm2CV2AJUrV8bJyYktW7bQsmXLG+pfRESu7I5OsA4ePMilS5eoUKFCobpvvvmm0N2koqSlpTF79mz69u0L5D83tXDhQtLS0sz6BQsWMHjwYADc3d2pVq0aCQkJ5oYW/v7+xMfH2y0PvFx0dDSLFi26oTmKiMitVa5cOaZMmcKSJUuu+RzUlTRr1oxPPvkEyL8zlpSURPPmzQu1e+KJJ/Dx8eHjjz8uVDds2DAWL1583ef+/PPPWbRoEbGxsZQrV67INqNHj2bChAk4Ojped/8iInJ1d9wSwYIlHJC/tG/WrFlmgChYI28YBs7OzsyYMaPIPlJTU+natStZWVmUL1/ebkt1b29vxo8fT3R0NDk5OTg7OzNhwgS8vb3N4wMCAli/fj0eHh5A/rNWc+fOLbQtb4GgoCAqVapUrPkZhnYTkhuXlXOJss76B5PIX9WgQQO8vLxITEykSZMmZnwp0L17d/r373/F4ydPnszUqVN59913MQyDrl270rRp0yLbjhgxgnHjxtGrVy+78kcffZQGDRqwd+/eIo979tln+frrrzl16hRt2rRh1KhR9OzZkxdeeIHs7GzzOWRfX19zi/gCV7ogeDWKTzePfrtF7i4OxvU8gCQ3XURERKH3comIiJQ2xScRkeK5o5cIioiIiIiI3E6UYImIiIiIiJQQJVgiIiIiIiIlRAmWiIiIiIhICVGCJSIiIiIiUkKUYN1mtKfjzZeVc6m0hyAicsdRfCoZikEid7877j1YpcHf359du3aZnxMSEkhJSWHq1KnMnz+f//znP6xdu5ZatWoB8Pbbb/PSSy+xfPlyGjVqhMViYfny5cV6F5aDAzSYtPamzUVg74sdSnsIInKH8fb2pl69ely6dIkaNWowe/Zs7r//ftLS0ggNDaVOnTpm20GDBrF06VKys7M5c+YMmZmZVK1aFYDXX3+d8PDwq8aUDz74gEqVKpGTk8Pw4cPp3LkzADExMWzZsoX169fj4uJCRkYGPXr0YMOGDYXG+8cffzBlyhR+/PFHHBwcePHFF/H39ycmJoakpCS2bNmCu7s7ADNnzuSdd97hq6++umqcUnwqGYpBInc/JVgloF69ethsNoYPHw7AmjVrePTRR0t5VCIiUlJcXV1ZuXIlABMnTmTp0qVER0cDULNmTbOuQNeuXQH75Km4Bg4cyJAhQzh06BARERF07NgRZ2dnABwdHVm+fDl9+vS5ah8zZ84kMDCQefPmkZ2dTWZmpllXs2ZN1q9fj9VqJS8vj61bt5oJoIiI/HVaIlgCgoODWb9+PQCpqancd999VKxYsZRHJSIiN4Ofnx/p6ek3/Ty1a9emXLly/PHHH2bZgAEDiI+PJzc394rHnT17lu3bt9OjRw8AXFxcuP/++836sLAwkpKSANi2bRsBAQE4Oel6q4hISVGCVQyZmZlYrVbzb968eXb17u7ueHh48OOPP2Kz2QgNDS2lkYqIyM106dIlvvrqKywWi1mWmppqFyN27NhRIufas2cPtWrV4sEHHzTLPDw8CAgIKHTH7HJpaWlUqlSJ5557jq5duzJ58mQuXLhg1teuXZuMjAzOnDmDzWYjLCysRMYrIiL5lGAVQ8HSkIK/0aNHF2oTGhqKzWZj3bp1tG/fvhRGKSIiN0vBhbZWrVrx+++/06pVK7OuYIlgwV+TJk2uu38HBwfzv99++23CwsLo1asXw4YNK9Q2KiqKuLg4jCvsOpGbm8vevXt56qmnWLFiBeXKlWPhwoV2bdq3b4/NZmP37t03NF4REbkyJVglpF27dnzyySdUr17dfHBYRETuDgUX2jZu3IhhGCxduvSG+ypbtizZ2dnm5zNnztgtKx84cCA2m4158+YxefJksrKy7I6vXbs23t7e5jK/P6tWrRrVqlXD19cXgE6dOrF37167NqGhofz73/+mVatWlCmjfwqIiJQk/aqWkHLlyjF+/PgirzaKiMjdoVy5ckyZMoUlS5Zc9Tmoq2nWrBmffPIJkH9nLCkpiebNmxdq98QTT+Dj48PHH39cqG7YsGEsXry4yP4rV65MtWrV+PnnnwH46quvqFu3rl2bhx56iLFjx15zswwREbl+eqq1BF1tHXuXLl3Mq4QhISE899xzRbYzDG3herNl5VyirLNjaQ9DRO5QDRo0wMvLi8TERJo0aWI+g1Wge/fu9O/f/4rHT548malTp/Luu+9iGAZdu3aladOmRbYdMWIE48aNo1evXnbljz76KA0aNCh0Z6rA888/z/jx48nJycHT05OXXnqpUJvevXsXZ7omxaeSoRgkcvdzMK60iFtKRUREBAkJCaU9DBERETuKTyIixaMlgiIiIiIiIiVECZaIiIiIiEgJUYIlIiIiIiJSQpRgiYiIiIiIlBAlWCIiIiIiIiVE27T/iZeXF4MGDSImJgaAuLg4Lly4wKhRo8w2VquVhx9+mNdee42PPvqId955B4CDBw9Sp04dypQpQ2BgIA8//DCzZ8+matWqZGVl0bt3bwYOHHjV82tLx+LJyr1EWSdtcysiUmDdunWMGDGC1atXExMTQ3Z2NmfOnCEzM5OqVasC8Prrr9O/f3/Kly8PwAMPPMCsWbN46KGHrtm/4lPxKUaJ3NuUYP2Ji4sLa9euJTIykkqVKhWqP3jwIHl5eezYsYMLFy7QvXt3unfvDoDFYiE+Pt48LiEhgdDQUKZOncqpU6fo1KkTHTt2xMPD44rndwAee2HjTZnb3eSb59uV9hBERG4riYmJPPbYY9hsNj788EMgPw6lpKQwdepUu7YFsWrevHnExsYyY8aMa/av+FR8ilEi9zYtEfwTJycnnnzySeLj44usT0xMpEuXLrRu3Zr169cXu9+KFStSq1YtTpw4UVJDFRERAeD8+fN88803zJw5E5vNVuzj/Pz8SE9Pv4kjExG59yjBKsLTTz/NqlWrOHv2bKG61atXExYWRlhY2HUFsaNHj5KVlYWXl1dJDlVERIT169cTGBhInTp1qFixIikpKcU6Ljk5meDg4Js8OhGRe4sSrCK4u7tjtVrNZ6sKfP/991SsWJHq1avTsmVL9u7dy+nTp6/a1+rVqwkPD6dDhw706dOHsmXL3syhi4jIPchmsxEWFgZAaGjoNS8ADhgwgMDAQD7//HPzOBERKRlKsK5gwIABfPTRR1y8eNEss9ls/PLLL1gsFtq3b8+5c+dYu3btVfsJDQ1l1apVvP/++7z66qtaIigiIiXq9OnTbN26lSlTpmCxWIiLiyMpKQnDuPK2FPHx8WzcuBFvb2/mz59/C0crInL3U4J1BRUqVKBTp04sX74cgLy8PJKSkvjkk0/YsGEDGzZs4I033iAxMbFY/TVq1IguXboUuismIiLyV3z66adYrVY2btzIhg0b2Lx5MzVq1GDHjh1XPc7JyYlJkyaxYsWKa67GEBGR4tMuglcxePBgli5dCsCOHTuoWrWqudUtQNOmTTl48CC//fYbVapUuWZ/Q4cOJSIigqioKNzd3YtsY6Ddh4pDW+CKiORLTExk6NChdmUdOnQgMTERX1/fqx5bpUoVOnfuzNKlSxkxYsRV2yo+FZ9ilMi9zcG42hoCueUiIiJISEgo7WGIiIjYUXwSESkeLREUEREREREpIUqwRERERERESogSLBERERERkRKiBEtERERERKSEKMESEREREREpIUqwbjPa0vHasnLzSnsIIiL3HMWn4lGMEpF7/j1YXl5ehIeHM2fOHAByc3Np3bo1vr6+LFiwwGw3fPhwTp48yQcffGB3fFxcHB9++CFly5bFycmJfv360bVrV/r168dvv/2Gi4sLOTk5PP744zzzzDPcf//9Vx2PA9B6TnKJz/Nu8sX4wNIegojcxorzu75u3Tr+/e9/k5ubi5OTE2PGjCE4OBiAmJgYkpKS2LJli/nOwpkzZ/LOO+/w1VdfUalSJby9valXr555zrCwMCIjI+nXrx/nz583tzP//vvvmT17NpGRkeZ4UlNTqVKlCq6urnh5edGiRQtSUlKYOnWq2V+/fv34xz/+QaNGjbBYLFSrVo3//ve/Zr3VauXSpUuFXnZ/5MgRRo4cSV5eHrm5ufTt25ennnqq0HdkGAb/+te/WLNmDWXKlOGpp56if//+V/1eFZ+KRzFKRO75BMvNzY2ffvqJzMxMXF1d2bJli93LhAH++OMP9uzZg5ubG4cPH8bT0xOA999/ny+//JLly5fj7u7OuXPn+Oyzz8zj5syZQ6NGjcjOzmbu3LkMHz6c995775bOT0TkXnOt3/V9+/Yxa9YsFi9ejKenJ4cPH2bw4MHUqFGD+vXrA1CzZk3Wr1+P1WolLy+PrVu32vXh6urKypUrizx/RkYGmzdvJigoyCwLDAwkMDD/H96XJ09Asd4tdf78eY4dO4aHhwcHDx68YrvKlSvzv//9DxcXF86fP094eDgWi6VQXEtISODYsWMkJSVRpkwZfv/992uOQUREikdLBIGgoCA2bdoEgM1mIywszK5+7dq1tGvXjrCwMGw2m1m+YMEC/vnPf5pXON3d3enWrVuh/l1cXJgwYQJHjx5l3759N28iIiICXP13PS4ujqioKPNimaenJ5GRkcTFxZltwsLCSEpKAmDbtm0EBATg5FS8a5JDhgzhzTffLKGZ5AsJCWH16tUAJCYmFopTBVxcXHBxcQEgOzubvLyil6u9//77jBgxgjJl8v8Z8OCDD5boeEVE7mVKsIDQ0FBWr15NVlYW+/fvx9fX167eZrPRuXNnuwTr3LlznD9/3gzQ1+Lo6Ej9+vX5+eefS3z8IiJi72q/6wcOHMDHx8eufaNGjThw4ID5uXbt2mRkZHDmzJkiL7xlZmZitVrNv4LkB8DPzw9nZ2e2bt1aYvPp0KGDuUJi48aNWCyWK7Y9duwY4eHhtG3blqFDhxa6ewVw+PBhVq9eTUREBH//+985dOhQiY1VRORepwQLqF+/PmlpaSQmJtot6QA4efIkv/76K4899hh16tTBycmJH3/88YbOYxh6RFhE5Fa42u96cbVv3x6bzcbu3btp0qSJXV3BEsGCv9DQULv66OhoYmNji3UeBweHa5ZXqFCB+++/H5vNRt26dXF1db1ifx4eHqxatYq1a9fy8ccfc/LkyUJtsrOzKVu2LAkJCfTq1YtJkyYVa6wiInJtSrD+H4vFwuzZswtdpUxKSuLMmTM88cQTWCwWjhw5gs1mw93d3XwmqzguXbrEjz/+yMMPP3wzhi8iIn9ypd/1unXrkpKSYleWkpLCI488YlcWGhrKv//9b1q1amUupSuuli1bkpWVxe7du6/ZtkKFCpw5c8au7PTp01SsWLHQeKZPn37F5YF/VrVqVR599FF27NhRZF379u2B/ERy//79xepTRESuTQnW/9OjRw9GjBiBl5eXXbnNZmPRokVs2LCBDRs28NFHH5nLBCMjI5k2bRrnzp0D8h9CXrFiRaG+c3JyePXVV/Hw8DAfoBYRkZvrSr/rQ4YMYeHChaSlpQGQlpbGggULGDx4sF27hx56iLFjx9KnT58bOn90dDSLFi26ZrtGjRqxa9cuTpw4AeTvPJidnY2Hh4ddu+DgYIYMGULr1q2v2Nfx48fJzMwE4MyZM+zcuZM6deoUahccHMy2bdsA+Prrr6ldu3ZxpyUiItdwz+8iWKBatWqFtqhNS0vjyJEj+Pn5mWWenp7cd9997N69mz59+nDhwgW6d++Os7MzTk5ODBo0yGw7fvx4XFxcyM7O5vHHH+eNN9645jgMtMXrtWTl5lHWSdcGROTqivpdB/D29mb8+PFER0eTk5ODs7MzEyZMwNvbu1Db3r17F9l3wTNYBQIDAxk/frxdm6CgICpVqnTNcf7tb39j0qRJREZGkpeXh5ubG3Pnzi1018zd3Z3IyMir9nXw4EFefvllHBwcMAyDwYMHF0owIf8C4fjx44mPj8fNzY2ZM2dec5yKT8WjGCUiDoYeDLqtREREFGvLXhERkVtJ8UlEpHh0iUVERERERKSEKMESEREREREpIUqwRERERERESogSLBERERERkRKiBEtERERERKSE3FYJlre3N1arlc6du99Y8QAAIABJREFUOzNs2DD++OMPIH+79MaNG2O1Ws2/FStW0LNnT6xWK23btqVFixZmXVpaGv7+/nZ9JyQkMH36dADmz59PYGAgVquV0NBQEhMTzXYxMTEEBgaSnZ0NQEZGBhaLpcjx/vHHH4wePfr/a+/e46qq8v+Pv5CLeA3tAoxiqBVgkcpQaogY4g3EQ2iN+Q0rmMFQ+zZOKl7S7+REE445o02apk42VuPkkDYcaMrrmKml8cDwltoYkJdMFAXlcmD//vDHGU+AoBzkJO/n48Hj0dlr7b0/m9J3a+911mbYsGEMHz6crKws6zF69uxpfT8WQEpKCn5+fhQUFFz1d6AlHasrs1Q2dQkiIjecn5+fzdLvFouFvn37Mn78eJt+EyZM4LHHHqu2/4oVKxg2bBgmk4lRo0ZZ39MYFxfH0KFDiY6OZtiwYcydO9eat1ejfKqdckpEruRQ78Fyd3dn/fr1ACQnJ/POO++QlJQEQJcuXaxtVWJiYoDLg6ecnBzmzJlT73M99dRTJCQkcOzYMWJjYxk6dCiurq4AODs7s3bt2jpfLpmSkkJoaCiLFi2irKzM+nLHqno3btyIyWSisrKSnTt34unpWWddTsCQ13fW+zqag48n9m3qEkREbrjWrVtz+PBhSkpKcHd3Z/v27dVy5Pz58+zbt4/WrVuTl5eHj48PAO+99x6fffYZa9eupW3bthQVFfHJJ59Y95s/fz6BgYGUlZWxYMECJkyYwOrVq69aj/KpdsopEbmSQz3BulKvXr04depUo5/H19eXVq1a2dy9e/LJJ1m1ahUWi6XW/S5cuMAXX3zB6NGjAXBzc6N9+/bW9qioKDIzMwHYtWsXQUFBuLg41HhWREQcXFhYGFu2bAHAbDYTFRVl0/7xxx/z8MMPExUVhdlstm5funQpv/3tb2nbti1w+SXFjzzySLXju7m5MXXqVI4fP87Bgwcb70JERJoRhxxgVVRUsGPHDpupebm5uTZTBHfv3m2Xc+3bt48777yTW2+91brN29uboKCgak/MrpSfn0/Hjh2ZMWMGMTExzJo1i4sXL1rbfX19KSgooLCwsMZQFBERqUtkZCQZGRmUlpZy6NAhevbsadNuNpsZMWKEzQCrqKiI4uJi69Osujg7O+Pv788333xj9/pFRJojhxpglZSUYDKZCAkJ4cyZM4SEhFjbqqYIVv0EBwdf8/GdnJys//zWW28RFRXFY489xjPPPFOt7/jx41mxYgWGUfOsc4vFwv79+3n88cdZt24drVq1YtmyZTZ9Bg8ejNlsJjs7+7rqFRGR5s3f35/8/HzS09MJCwuzafvhhx/49ttv+fnPf07Xrl1xcXHh66+/vq7z1JZ1IiJy7RxqgFX1HazNmzdjGAbvvPPOdR+rZcuW1oUqAAoLC+nQoYP181NPPYXZbGbRokXMmjWL0tJSm/19fX0JCAiwTvP7MS8vL7y8vKx3E4cNG8b+/ftt+kRGRrJw4UJCQkJo0cKhftUiIvITER4ezrx586rNhMjMzKSwsJBBgwYRHh7Od999h9lspm3bttbvZNVHRUUFX3/9Nd26dWuM8kVEmh2H/L/+Vq1a8cILL/CXv/zlqt+DupoHH3yQDz/8ELj8ZCwzM5M+ffpU6zdo0CDuu+8+Pvjgg2ptzzzzDCtXrqzx+LfffjteXl7WKRU7duyge/fuNn06derE5MmT61wsQ0REpDajR49m4sSJ+Pn52Ww3m80sX76cTZs2sWnTJv7xj39YpwkmJiby4osvWlezLS4utq4ieKXy8nJeffVVvL298ff3b/yLERFpBhx21YUePXrg5+dHeno6wcHB1u9gVRk1ahTjxo2rdf9Zs2YxZ84c/vrXv2IYBjExMTzwwAM19p04cSLPP/98tWVu7777bnr06FHtyVSV2bNnM2XKFMrLy/Hx8eH3v/99tT5jxoypz+VaGWg1oh8rs1Ti5uKQ9wJERBqdl5dXtbzLz8/nu+++o1evXtZtPj4+tGvXjuzsbMaOHcvFixcZNWoUrq6uuLi48PTTT1v7TpkyBTc3N8rKynjooYdYvHhxnXUon2qnnBKRKzkZmnjtUGJjY0lLS2vqMkRERGwon0RE6ke3W0REREREROxEAywRERERERE70QBLRERERETETjTAEhERERERsRMNsEREREREROxEAywHoyUdqyuzVDZ1CSIizZ7yyZaySURqU+d7sPz8/IiOjmb+/PkAWCwW+vfvT8+ePVm6dCkAGzZsYOHChVgsFlxcXHjuueeIiIgAYPr06WRmZrJ9+3batm0LQEpKCm+//TY7duygY8eOBAQEcM8991jPGRUVRWJiInFxcRQXF1uXhf3qq6+YN28eiYmJ1npyc3O54447cHd3x8/Pj759+5KTk8OcOXOsx4uLi2PatGkEBgYSHh6Ol5cX7777rrXdZDJRUVFBenq6zbV/9913TJo0icrKSiwWC0888QSPP/54td/R6tWrWbVqFbm5udZrAvjwww958803AWjTpg2//e1v63yRoxMQu2JPHf9Wmpe0hJ83dQkiIjdUVS4ahoGzszOzZ88mKCiI/Px8IiMj6dq1K4Zh0Lp1a15++WW6detms/+uXbtYuXKlNafhch4PHDiQYcOGERcXx/fff0/Lli1rPcaPKZ9sKZtEpDZ1DrBat27N4cOHKSkpwd3dne3bt+Pp6WltP3jwIKmpqaxcuRIfHx/y8vKIj4+nc+fO1sFEly5d2LhxIyaTicrKSnbu3GlzDHd3d9avX1/j+QsKCti6dSthYWHWbaGhoYSGhgK2gyegXu/oKC4u5sSJE3h7e3P06NFa+91+++2sWbMGNzc3iouLiY6OJjw83KZ2gKCgIAYOHFjtRZCdO3dm9erV3HLLLWzdupXZs2fz/vvv11mfiIg0b1fm4rZt21iwYAGrV68GLmdqVdvf/vY3li5dSmpq6jWfY/78+QQGBrJmzRrmzZvHG2+8Yb8LEBFpxuo1RTAsLIwtW7YAYDabiYqKsratWLGC8ePH4+PjA1x+k3xiYiIrVqyw9omKiiIzMxO4fFctKCgIF5c6x3YAJCQk2P0v/eHDh5ORkQFAenq6zfVcyc3NDTc3NwDKysqorKx5OkCPHj3o3Llzte1BQUHccsstAPTq1YuTJ0/ao3wREWlGioqKaN++/TW31VdwcDC5ubkNOoaIiPxXvQZYkZGRZGRkUFpayqFDh+jZs6e17ciRI9x33302/QMDAzly5Ij1s6+vLwUFBRQWFlYboAGUlJRgMpmsP1WDH7g8MHF1dWXnzp3XdYE1GTJkCJ988gkAmzdvJjw8vNa+J06cIDo6moEDB/KrX/2q2tOr+lq7di0DBgy4rn1FRKR5qcrFYcOG8cILLzBhwgRrW25uLiaTiYiICN566y2efvrpBp1r8+bNNtP0RUSkYer1GMnf35/8/HzS09Ntpupdi8GDB2M2m8nOzmbu3Lk2bVebIgiQlJTEkiVLmDJlSp3ncXJyqnO7h4cH7du3x2w20717d9zd3Ws9nre3N//85z85deoUEydOZOjQodx222111nGlnTt3snbtWpvvfYmIiNTmylzMysoiOTnZ+j3hK6cIZmRkMHv2bJtZI1C/LJwyZQru7u506tSJ2bNnN8ZliIg0S/VeRTA8PJx58+ZVe/rUvXt3cnJybLbl5ORw11132WyLjIxk4cKFhISE0KLFtS1e2K9fP0pLS8nOzq6zr4eHB4WFhTbbzp07R4cOHarVM3fu3FqnB/6Yp6cnd999N7t3765/4Vz+jtoLL7zA4sWLq9UgIiJSl969e3P27FkKCgqqtYWHh9eYS/XJwvnz57N+/XoWL16Mt7e3/QsXEWmm6j3SGT16NBMnTsTPz89me0JCAsuWLSM/Px+A/Px8li5dSnx8vE2/Tp06MXnyZMaOHXtdhSYlJbF8+fI6+wUGBpKVlcXp06eByysPlpWVVQuPiIgIEhIS6N+/f63HOnnyJCUlJQAUFhby5Zdf0rVr13rXfPz4cZ599lnmzZt3TfuJiIhUOXr0KBUVFXh4eFRr27NnD126dKm23dfXl++//966kNN3333HoUOHCAgIaPR6RUSau/qtNAF4eXlVWyUPLi8lO2XKFJKSkigvL8fV1ZWpU6fW+Jf4mDFjajx21VzzKqGhodWmA4aFhVmXP7+a2267jZkzZ5KYmEhlZSWtW7dmwYIF1Z6atW3blsTExKse6+jRo7zyyis4OTlhGAbx8fHVBpgAb7/9NsuXL+eHH35g5MiRhIWFkZKSwuuvv865c+d48cUXAXB2dq5zlUMD+EBLv9oos1Ti5qJXtolI83FlLhqGQWpqKs7OzsB/v4NlGAaurq689NJL1fZ3c3PjD3/4AzNmzKC0tBQXFxdeeukl2rVrd901KZ9sKZtEpDZOhmHo3YEOJDY2tl5LzYuIiNxIyicRkfrRrRcRERERERE70QBLRERERETETjTAEhERERERsRMNsEREREREROxEAywRERERERE7afQBlp+fn82S6xaLhb59+zJ+/Hjrtg0bNhAdHc3w4cOJjo5mw4YN1rbp06fTs2dPioqKrNtSUlLw8/OzvnQxICAAk8lk/Vm2bBkAcXFxxMbGWvf76quviIuLY9u2bda+vXv3ZujQoZhMJqZNm0ZaWhpz5861uYa4uDi++uor4PJLHX/8Li+TycSIESNqvP7jx48THx/P8OHDiYyMtL4vrDbNeUnHsorKpi5BRG4yzT2DEhISCA4OtrlegOeff56hQ4cyYsQIZsyYQXl5eZ2/y+acT1WUUyJSH/V+D9b1at26NYcPH6akpAR3d3e2b9+Op6entf3gwYOkpqaycuVKfHx8yMvLIz4+ns6dO+Pv7w9Aly5d2LhxIyaTicrKSnbu3GlzDHd3d9avX1/j+QsKCti6dSthYWHWbaGhoYSGhgKXg2vatGkEBgYC1GsJ2uLiYk6cOIG3t7f1JY61SU5O5plnniEkJITi4uJq7+P6MSdg3Lt766zhZvT22PubugQRuck09wz65S9/yaVLl1izZo3N9pEjRzJ//nzg8mDr/fffrzZw+7HmnE9VlFMiUh83ZIpgWFgYW7ZsAcBsNhMVFWVtW7FiBePHj8fHxwcAHx8fEhMTWbFihbVPVFQUmZmZAOzatYugoCBcXOo3NkxISOCNN96w05VcNnz4cDIyMgBIT0+3uZ4rHTlyBIvFQkhICABt2rShVatWdq1FRESurrlmEEC/fv1o06ZNte1hYWE4OTnh5OTE/fffz6lTp+xao4hIc3ZDBliRkZFkZGRQWlrKoUOH6Nmzp7XtyJEj3HfffTb9AwMDOXLkiPWzr68vBQUFFBYWVgtH+O8b76t+qoIHoFevXri6urJz5067Xc+QIUP45JNPANi8eTPh4eE19jt27Bjt27dn0qRJxMTEkJqaSkVFhd3qEBGRujXXDKqP8vJy1q9fb32iJiIiDdfoUwQB/P39yc/PJz093WaaxLUYPHgwZrOZ7OzsavPTrzY9AyApKYklS5bYzMOvjZOTU53bPTw8aN++PWazme7du+Pu7l7jPhaLhd27d7Nu3Tq8vb2ZPHkyaWlpPProo3XWISIi9tFcM6g+XnzxRYKDgwkODr7uY4iIiK0btopgeHg48+bNq3bnr3v37uTk5Nhsy8nJ4a677rLZFhkZycKFCwkJCanze0w/1q9fP0pLS8nOzq6zr4eHB4WFhTbbzp07R4cOHarVM3fu3KtOzfDy8iIgIAAfHx9cXFwYNGgQ+/fvv6baRUSk4ZpjBtXlz3/+MwUFBcyYMeO6jyEiItXdsAHW6NGjmThxIn5+fjbbExISWLZsmXV1vfz8fJYuXUp8fLxNv06dOjF58uQ6v4Rbm6SkJJYvX15nv8DAQLKysjh9+jRwedWnsrIyvL29bfpFRESQkJBA//79r3qs8+fPW1ea2rVrV7XQFhGRxtccM+hq3n//fT799FMWLFhwzQNGERG5uhsyRRAuP80ZN25cte0BAQFMmTKFpKQkysvLcXV1ZerUqQQEBFTrO2bMmBqPXTX/vUpoaGi1qRhhYWF07Nixzjpvu+02Zs6cSWJiIpWVlbRu3brGAGrbti2JiYlXPZazszPJyck8+eSTANx77711Tg80aL6rFJVVVOLmrKAXEftrjhkEMHbsWL755hsuXrzIgAEDSElJITQ0lP/7v//jZz/7Gb/4xS+Ay1MgJ02adNVjNed8qqKcEpH6cDIMQ6+2cCCxsbH1WqZXRETkRlI+iYjUj27DiIiIiIiI2IkGWCIiIiIiInaiAZaIiIiIiIidaIAlIiIiIiJiJxpgiYiIiIiI2IkGWA6muS3pWF5R2dQliIhIPdzs+aQ8EhF7uWHvwXJUAQEB3HPPPRiGgbOzM7NnzyYoKIj8/HwiIyPp2rUrhmHQunVrXn75Zbp162az/65du1i5ciVLly61bps+fToDBw5k2LBhxMXF8f3339OyZctaj3ElJ2BC2v7GulyHszi2R1OXICLyk1CfvKry9NNP884771BWVkZhYSElJSV4enoC8Prrr+Pl5UX//v0ZPXp0tXd21eZmzyflkYjYS7MfYLm7u7N+/XoAtm3bxoIFC1i9ejUAXbp0sbb97W9/Y+nSpaSmpl7zOebPn09gYCBr1qxh3rx5vPHGG/a7ABERaRbqm1dVYmJiAEhLSyMnJ4c5c+ZY27Zu3Yqvry8fffQRzz//PE5OTjfoKkREbn6aIniFoqIi2rdvf81t9RUcHExubm6DjiEiItLQTDKbzYwbNw5vb2+ysrLsWJmIiDT7J1glJSWYTCZKS0s5ffo0q1atsrbl5uZiMpkoLi6mpKSEv//97w061+bNm7nnnnsaWrKIiDRD9cmrKrNnzyY4OLjG45SWlvLZZ58xd+5cLly4gNlsJigoqNHrFxFpLpr9AOvKKRdZWVkkJyeTnp4O2E65yMjIYPbs2axYscJm/9qmVVy5fcqUKbi7u9OpUydmz57dGJchIiI3ufrmVV02b95Mnz59cHd3Z8iQISxevJiZM2fi7OzcaLWLiDQnzX6AdaXevXtz9uxZCgoKqrWFh4czY8aMats9PDwoLCy02Xbu3Dk6dOhg/Vz1HSwRERF7uFpe1cVsNrNnzx7Cw8OBy5m1c+dOQkJC7F2miEizpAHWFY4ePUpFRQUeHh5cunTJpm3Pnj106dKl2j6+vr58//33HD16lO7du/Pdd99x6NAhAgICblTZIiLSzFwtr66mqKiI3bt3s3XrVtzc3AD4xz/+QXp6ugZYIiJ20uwHWFVz2gEMwyA1NdU6TaJqTrthGLi6uvLSSy9V29/NzY0//OEPzJgxg9LSUlxcXHjppZdo167dddVj0LyWii2vqMTVWWutiIjUpT55VWXUqFGMGzeu2jE++eQT+vbtax1cAQwaNIg//OEPlJWV2Wz/sZs9n5RHImIvToZh3OzvDvxJiY2NJS0tranLEBERsaF8EhGpH92qERERERERsRMNsEREREREROxEAywRERERERE70QBLRERERETETjTAEhERERERsROHWqY9ICCAe+65h4qKCjp37sy8efNo3749+fn5REZG0rVrV2vfp59+mnfeeYeysjIKCwspKSnB09MTgNdff53o6GiysrKs/dPS0sjJyWHOnDm89tpr/P3vf6djx46Ul5czYcIERowYAcD06dPZvn07GzduxM3NjYKCAkaPHs2mTZuq1Ttjxgy2bNnCrbfeSnp6unX79OnTyczMZPv27bRt2xaAlJQU3n77bXbs2EHHjh1r/R3cjEs6aulbEfmp+ynlU2lpKf/zP/9DWVkZFRUVDB06lP/93/8FIC4ujry8PDZv3oyTkxMAEyZMYMeOHTY11eRmzKcqyikRsSeHGmC5u7uzfv16AJKTk3nnnXdISkoCoEuXLta2KjExMYBtONXXU089RUJC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D+Hj49PUpTm877//nqlTp5Kamlrj3bob7d1332XAgAE2QeMoLBYLu3fvZt26dXh7ezN58mTS0tJ49NFHm7o0uQk5Wj45ajaB4+aTsun6OVo2gePmk72zSQOsG8TT05OTJ09aP586dco6feHKPidOnMDLywuLxcKFCxfo0KFDvfZtiroATp48yaRJk0hNTbXr3ZGG1padnc2//vUv5s+fz/nz52nRogUtW7bkiSeeaNK6vLy8eOCBB+jYsSMAAwYMYN++fXYLsIbU9tprrxEaGoqrqyu33norQUFBfPXVV3YJsYb8N+zp6cnnn39us++DDz7Y4JrsURtc/qLu+PHjmTx5Mr169XKIurKystizZw/vvfcexcXFlJeX07p1a6ZMmdLktXl5eREQEGD972rQoEFkZ2fbpS65do6aTQ2tDRovnxw1mxpaW2Pmk6NmU31ru9q+jZVPjppNDa2tMfPJkbLJMYazzUBgYCDHjh0jLy+PsrIyzGYz4eHhNn3Cw8OtK9D861//om/fvjg5OREeHo7ZbKasrIy8vDyOHTvG/fff3+R1nT9/nsTERJ5//nl+/vOf26Uee9X27rvvsmnTJjZt2sSTTz7J+PHj7RZgDamrf//+fP3119b55F988QV33XWXXepqaG3e3t7s2rULgIsXL5KdnU23bt1uWF216d+/P59++imFhYUUFhby6aef0r9/f7vU1dDaysrKmDhxIiaTiWHDhtmtpobW9eqrr7JlyxY2bdpEcnIyMTExdhtcNbS2wMBAzp8/b/0+wK5du+z6Z0CujaNmU0Nra8x8ctRsamhtjZlPjppN9a2tNo2ZT46aTQ2trTHzyaGy6bqXx5BrtmXLFmPIkCHGoEGDjMWLFxuGYRh/+tOfjA0bNhiGYRglJSXGs88+a0RERBijRo0ycnNzrfsuXrzYGDRokDFkyBBjy5YtDlHX66+/bvTs2dMYOXKk9eeHH35wiNqutGjRIruv1NSQutatW2dERkYaUVFRRmpqql3rakhtRUVFxrPPPmtERkYaw4cPN958880bWld2drYRGhpq9OzZ03jwwQeNyMhI677vv/++ERERYURERBhr1661a10NqW3dunVGjx49bP4M7N+/v8nrutI//vEPu68i2NDaPv30U2PEiBHGiBEjjOTkZKO0tNTu9Un9OWo2NaS2xs4nR82mhtbWmPnkqNlUn9qaKp8cNZsaUtuVGiOfHCWbnAzj/y9rIyIiIiIiIg2iKYIiIiIiIiJ2ogGWiIiIiIiInWiAJSIiIiIiYicaYImIiIiIiNiJBlgiIiIiIiJ2ogGWSCMJCAjAZDJZf/Lz86/5GBs2bODIkSONUB3k5+czYsSIRjl2bQ4cOMDWrVtv6DlFRMSW8qk65ZPYk0tTFyBys3J3d2f9+vUNOsaGDRsYOHDgNb3szmKx4OLieH+0LRYLBw4cICcnh7CwsKYuR0Sk2VI+2VI+ib053n/lIjexnJwcXnnlFS5evEiHDh34/e9/zx133MHf//531qxZQ3l5OXfeeSfz5s3jwIEDbNq0ic8//5wlS5bw2muvMWvWLKZNm0ZgYCAFBQWMHj2aTZs2kZaWxscff8zFixeprKxk2bJl/O53v+Pw4cNYLBYmTZpERERErXWlpaWxYcMGLl26xLfffkt8fDzl5eWsX78eNzc3li1bhoeHB3Fxcfj5+fHFF19QUVHByy+/zP3338+5c+eYOXMmeXl5tGrVirlz5+Lv789rr71Gbm4ueXl5/OxnP+PLL7+kpKSEPXv2MH78eDp37kxKSgqlpaW4u7vz8ssv061bN9LS0ti0aROXLl0iLy+PiIgIpk2bBsC///1v/vjHP1JRUUGHDh1YtWoVFy9evKbrFRERW8on5ZPYUUPeliwitfP397e+QX3ChAlGWVmZ8Ytf/MI4c+aMYRiGYTabjenTpxuGYRgFBQXW/RYsWGC8/fbbhmEYRnJyspGZmWlte+KJJ4y9e/cahmEYZ86cMR5++GHDMC6/DT00NNQ4e/asYRiG8eqrrxrr1q0zDMMwCgsLjSFDhhjFxcU29eXl5RlRUVHW/SMiIowLFy4YZ86cMYKCgox3333XMAzDSElJMf7yl79Yzz9r1izDMAzj888/t+4/d+5c47XXXjMMwzA+++wzY+TIkYZhGMaiRYuMRx55xLh06ZL1PFe+tf3ChQtGeXm5YRiGsX37dmPSpEnWfuHh4cb58+eNkpISY+DAgcbx48eNM2fOGAMGDDByc3MNwzCu6XpFROQy5ZPySRqXnmCJNJIfT8H4+uuv+frrr3n66acBqKys5Pbbbwfg8OHD/OlPf+LChQsUFxfTv3//az5fSEgIHh4eAHz66ads2rSJlStXAlBaWsqJEyfo3r17rfv36dOHtm3bAtCuXTvCw8MBuOeeezh06JC1X1RUFAAPPPAARUVFnD9/nj179vDaa68B0K9fP86dO0dRUREA4eHhuLu713jOCxcukJyczLfffouTkxPl5eXWtn79+tGuXTsAunfvznfffcf58+cJDg7Gx8cHoEHXKyLSXCmflE/SuDTAErlBDMPg7rvvZs2aNdXapk+fzuLFi/H39yctLY3PP/+8xmM4OztjGAYAZWVlNm2tWrWy+bxo0SK6detW7/rc3Nys/9yiRQtcXV2t/1xRUWFtc3Jystnvx59/7Md1XWnhwoX06dOH119/nfz8fMaNG1djPc7OzjY11ORar1dERC5TPlWnfJKG0CqCIjdI165dKSgoICsrC4Dy8nIOHz4MQHFxMbfffjvl5eX885//tO7Tpk0biouLrZ87depETk4OAB999FGt5+rfvz+rV6+2ht3+/fvtdh0ZGRkA7N69m3bt2tGuXTuCg4P58MMPAdi1axcdOnSw3m280o+v58KFC3h6egLwwQcf1HnuXr16sXv3bvLy8gA4d+4c0LjXKyJys1M+KZ/EvjTAErlB3NzcWLRoEfPnz2fkyJHExMRYw+y5557j0Ucf5fHHH7e5yxUZGcmKFSuIiYkhNzeX+Ph43nvvPWJiYjh79myt55owYQIWi4WRI0cSFRXFwoUL7XYdLVu2JCYmht/+9rekpKQAMGnSJPbt20d0dDSvvvoqr7zySo379unThyNHjmAymcjIyOCXv/wlCxYsICYmBovFUue5O3bsyNy5c3n22WcZOXIkkydPbvTrFRG52SmflE9iX05G1ZBaRKQOcXFx1lWiREREHIXySRyJnmCJiIiIiIjYiZ5giYiIiIiI2ImeYImIiIiIiNiJBlgiIiIiIiJ2ogGWiIiIiIiInWiAJSIiIiIiYicaYImIiIiIiNjJ/wPcpU0J7bhTrgAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
],
"source": [
"fig, axes= plt.subplots(ncols=2, figsize=(12,4), sharex=True)\n",
"color = cm.Blues(np.linspace(.4,.9, top_n))\n",
"fi_clf.sort_values().plot.barh(ax=axes[1], title='Classification Tree', color=color)\n",
"fi_reg.sort_values().plot.barh(ax=axes[0], title='Regression Tree', color=color)\n",
"axes[0].set_xlabel('Feature Importance')\n",
"axes[1].set_xlabel('Feature Importance')\n",
"fig.suptitle(f'Top {top_n} Features', fontsize=14)\n",
"sns.despine()\n",
"fig.tight_layout()\n",
"fig.subplots_adjust(top=.9);"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": true,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {
"height": "calc(100% - 180px)",
"left": "10px",
"top": "150px",
"width": "343.837px"
},
"toc_section_display": true,
"toc_window_display": true
},
"colab": {
"name": "Decesion Tree Regression (HW2).ipynb",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment