Created
January 13, 2021 12:52
-
-
Save kiko-datasparq/72dd3975d9bec14c2bb7d845b5f7d18e to your computer and use it in GitHub Desktop.
Exploratory Data Analysis / Feature Engineering / Model - Predicting number of houses sold in the UK
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd\n", | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import matplotlib.dates as mdates\n", | |
| "import datetime\n", | |
| "from sklearn.linear_model import LinearRegression\n", | |
| "import statsmodels.api as sm" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Problem statement\n", | |
| "Predict sales in one year's time." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Auxiliary functions" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Create target variable\n", | |
| "def target_variable(df, offset, col_date='DATE_SALE', col_feat='SALE_COUNT'):\n", | |
| " df[col_date + '_OFFSET'] = df[col_date] + pd.offsets.DateOffset(days=-offset)\n", | |
| " df = pd.merge(df[[col_date, col_feat]], \n", | |
| " df[[col_date, col_date + '_OFFSET', col_feat]],\n", | |
| " left_on=col_date, right_on=col_date + '_OFFSET', how='inner')\n", | |
| " df = df.rename(columns={col_date + '_x': col_date, col_date + '_y': col_date + '_TARGET',\n", | |
| " col_feat + '_x': col_feat, col_feat + '_y': 'TARGET'})\\\n", | |
| " .drop(columns={col_date + '_OFFSET'}) \n", | |
| " return df\n", | |
| "\n", | |
| "\n", | |
| "# Create offset feature\n", | |
| "def offset_day(df, offset, suffix, col_date='DATE_SALE', col_feat='SALE_COUNT'):\n", | |
| " # Offset by days\n", | |
| " df[col_date + '_OFFSET'] = df[col_date + '_TARGET'] + pd.offsets.DateOffset(months=0, days=offset)\n", | |
| " # Merge\n", | |
| " df = pd.merge(df, df[[col_date + '_OFFSET', col_date, col_feat]],\n", | |
| " left_on=col_date + '_TARGET', right_on=col_date + '_OFFSET', how='left')\n", | |
| " # Rename\n", | |
| " df = df.rename(columns={col_date + '_x': col_date, \n", | |
| " col_date + '_y': col_date + '_' + suffix, \n", | |
| " col_feat + '_x': col_feat, \n", | |
| " col_feat + '_y': col_feat + '_' + suffix}\n", | |
| " ).drop(columns={col_date + '_OFFSET_x', col_date + '_OFFSET_y'})\n", | |
| " # Compute weekday\n", | |
| " df['WEEKDAY_' + suffix] = df[col_date + '_' + suffix].dt.dayofweek\n", | |
| " return df\n", | |
| "\n", | |
| "# Rolling window\n", | |
| "def rolling_window(df, days, column_id):\n", | |
| " # Offset by days\n", | |
| " df[column_id + '_R' + str(days)] = df[column_id].rolling(window=days, min_periods=1).mean()\n", | |
| " return df\n", | |
| "\n", | |
| "# Convert feature from categorical to numerical\n", | |
| "def categorical_to_numerical(df, column_id):\n", | |
| " # Find unique\n", | |
| " unique_ids = df[column_id].unique()\n", | |
| " for index, ID in enumerate(unique_ids):\n", | |
| " df[column_id + '_BUCKET' + str(index)] = (df[column_id] == ID).astype(int)\n", | |
| " return df\n", | |
| "\n", | |
| "# Cross feature\n", | |
| "def cross_feature(df, column_subset1, column_subset2):\n", | |
| " for col1 in column_subset1:\n", | |
| " for col2 in column_subset2:\n", | |
| " df[col1 + '_x_' + col2] = df[col1]*df[col2]\n", | |
| " return df\n", | |
| "\n", | |
| "# Compute errors\n", | |
| "def print_error(lm, x_train, y_train, model_name):\n", | |
| " error = np.sqrt(((lm.predict(x_train)-y_train)**2).mean())\n", | |
| " print(\"Error for \" + model_name + \": {:.4}\".format(error))\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Load data\n", | |
| "\n", | |
| "(RUN EXPLORATORY ANALYSIS NOTEBOOK FIRST)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df_train = pd.read_csv(\"train_sale_count.csv\")\n", | |
| "df_train['DATE_SALE'] = pd.to_datetime(df_train['DATE_SALE'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[<matplotlib.lines.Line2D at 0x19ffdb22848>]" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "loc = mdates.YearLocator(5)\n", | |
| "loc_fmt = mdates.DateFormatter(\"%Y\")\n", | |
| "fig, ax = plt.subplots()\n", | |
| "ax.plot(df_train['DATE_SALE'], df_train['SALE_COUNT'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Target variable" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df_train_with_target = target_variable(df_train, 365)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAD4CAYAAAAO9oqkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABPQklEQVR4nO29eXxb5Zno/32PZMuRdyfOajsOZWlZsjjOCu3MwEBb6JTOLQUCTJkWCLQltPObeweY6dwynbbQuXc6hdACYbnThSQU2t7SwtwOBDqFkMVLEoedAN5CSOzYsuVNtnTe3x/n6ESSJVvyKlvP9/Pxx9Krc47eI9nP877PqrTWCIIgCJmNMd0TEARBEKYfUQaCIAiCKANBEARBlIEgCIKAKANBEAQBcE/3BMbKvHnzdGVl5XRPQxAEYUZRV1fXrrUujR2fscqgsrKS2tra6Z6GIAjCjEIp1RRvXMxEgiAIgigDQRAEQZSBIAiCgCgDQRAEAVEGgiAIAqIMBEEQBEQZzEhMU9PmDyAVZwVBmChmbJ5BpmKamk0P76WuqZPVS4vZcdN6DENN97QEQZjhyM5ghnGyd5C6pk6CpqauqZOTvYNxj5uJu4eZOGdBmC3IzmCGMS8vm9VLi52dwby87GHHzMTdw0ycsyDMJkQZzDCUUuy4aT0neweZl5eNUsMFZrzdQ2m+Zxpmmzwzcc6CMJsQM9EMxDAUpfmeuIoATu0e3IZKuHtIN2binAVhNqFmqn22urpaS6G6xJimHnH3kI7MxDkLwkxDKVWnta6OHRcz0SwlvHuYSczEOQvCbEHMRLMEicQRBGE8yM5gFiCROIIgjBfZGcwCks09EARBSMSoykApVa6UelEp9bpS6jWl1Nft8buUUkeVUgftn0sjzrlTKXVEKfWWUuqTEeOfsseOKKXuiBhfppTaZ48/oZSSUJIUkEgcQRDGy6jRREqpRcAirXW9UiofqAM+B1wJ9Git/3fM8WcDO4C1wGLgeeBM++W3gYuBVqAG2KS1fl0p9QvgV1rrnUqpB4FDWusHRpqXRBNFM1okjkTqCIIAiaOJRt0ZaK2Paa3r7cd+4A1gyQinXA7s1FoHtNbvA0ewFMNa4IjW+j2t9SCwE7hcWZLpQuAp+/yfYCmbjGUszuCRcg/CPoUNd+/i6m17MU1xMguCEE1KPgOlVCWwCthnD92qlGpQSj2mlCq2x5YALRGntdpjicbnAj6tdTBmPN77b1ZK1Sqlatva2lKZ+oxhMgS3+BQEQRiNpJWBUioP+CXwDa11N/AA8BFgJXAM+NfJmGAkWuttWutqrXV1aWnpZL/dtDAZglt8CoIgjEZSoaVKqSwsRfC41vpXAFrr4xGvPwz8zn56FCiPOL3MHiPB+EmgSCnltncHkcdnHMkUokuVZOoZCYKQ2YyqDGyb/qPAG1rrH0SML9JaH7Of/iXwqv34aWC7UuoHWA7kM4D9gALOUEotwxL2VwPXaK21UupF4AosP8L1wG8m4uZmGmEn7/Yb19HRNzShgluye6MRh7ogRJPMzuB84K+Aw0qpg/bY3wOblFIrAQ00AjcDaK1fs6ODXgeCwNe01iEApdStwO8BF/CY1vo1+3q3AzuVUt8BDmApn4wiXuKYCKnJQZL0BGE4oyoDrfXLWKv6WJ4d4ZzvAt+NM/5svPO01u9hRRtlLFLCeeqQz1oQhiMZyGmCOHmnDvmsBWE4UsI6jRA79tQhn7WQqUgJ6xmAOHmnDvmsBSEaMRMJgiAIogyEmYH0axCEyUXMRELaI6GggjD5yM5gmpCVbvJIbSVBmHxEGUwDmVxFdCxKUEJBBWHyETPRNJCpSU9jNfdMZG0lCSkVhPjIzmAaiLfSHWnFPFtMStNt7snkHZkgjIbsDKaB2JWu1iRcMc8m5+lYK7JO1GeQqTsyQUgGUQbTRGTSU3tPIKGQmk0CbKzmnon6DMajjMS0JMx2RBmkASMJqcnobzCdjCXzd6I+g7Eoo9m0MxOEkZDaRGnCSKtPWZlO32fQ5g+w4e5dBE2N21DsufOiGbszEwRIXJtIHMhpwkgN7Ud6LVOYrs9AwlqFTEHMRFPEeFe2sjuYHqRlqJApiDKYAsZrdzZNzdXb9lLXbJ2/U+zWU4pUOBUyATETTQHJxtcnyido8wfY39hByNTsf7+DNn9gKqYtCEIGIcpgCkjG7jxSQtRwy8TMdPrPVmZLUqCQ2YiZaIIYyaY/mt3ZNDVvH/dT29hBSDMslr4038OapUXUNPkA2LLzoJiK0gQJPRVmC7IzmACSKXOQKBomfO5lW1/G63HjUgzbPSiluP+a1bhsIVPX2MHbx/2yEk0DprvEhiBMFKIMJoDxCITwuSFT0zcY4pnbPs7OzeuHKY35BR6qlxbjUuD1uLls68tSXycNkNBTYbYgZqIJINUM2UiTUuy5Zy3Mjxu+GDY1vX3cz2VbXyY0C8pTzAYk9FSYLYgymABSEQjxbMzxzo31QYSfn7kgj+pZVJ5iNiChp8JsQJTBBJGsQEhUdC3y3FiF8fgN67j20X1Rzzv7h2QlKgjChCE+gykmbBZyGYrzygqZm5s17JhYhXGkrSfqeWf/0IilGSTUURCEVBFlMMUopXj8hnWsKCukocXHpof3DXMCxzolz1yQl7STUhq4CIIwFsRMNA109g/R0No1LKcg0k8Q60dI1icxE/ofSJ0lQUg/Rt0ZKKXKlVIvKqVeV0q9ppT6uj1eopR6Tin1jv272B5XSqn7lFJHlFINSqmqiGtdbx//jlLq+ojx1Uqpw/Y596lZLiEStb2MXNEDUaagZKt2pnuoo+xcBCE9SWZnEAT+Vmtdr5TKB+qUUs8Bfw3s0lrfo5S6A7gDuB34NHCG/bMOeABYp5QqAb4FVGPVU6hTSj2tte60j7kJ2Ac8C3wK+I+Ju830It5Kf6RuZ6MRudLWGu7btAoFaVn2eqSdi+wYBGH6GFUZaK2PAcfsx36l1BvAEuBy4E/tw34C/AFLGVwO/FRb3su9SqkipdQi+9jntNYdALZC+ZRS6g9AgdZ6rz3+U+BzzGJlAMOjj+LlKiQSjrHCPxx5VFVRDGjqm31O2Gq6ydREORlTVdZBFI4gxCcln4FSqhJYhbWCX2ArCoAPgQX24yVAS8RprfbYSOOtccbjvf9mYDNARUVFKlNPe2J3C5FCPlI4xgrN+65edWql3dwJWsetb5QuJPJ/TIWvQ+oICUJiko4mUkrlAb8EvqG17o58zd4FTLrxV2u9TWtdrbWuLi0tney3mzLCoaBKnTLtxArHtp4Abf7AMHOSsmsZhX0Ek+0vmIiw1Uj/R/h6xXPcLC8rjFubaaIYqWyIhOMKmU5SOwOlVBaWInhca/0re/i4UmqR1vqYbQY6YY8fBcojTi+zx45yyqwUHv+DPV4W5/iMINFqNdKcUlVRxJYdB6hv6qRqaTFVFUWOKag03zNsRzFZZpCJXlmHr1fb2IHX46ZvMMTy8iK237huUkw4022iEoR0ZlRlYEf2PAq8obX+QcRLTwPXA/fYv38TMX6rUmonlgO5y1YYvwe+F446Ai4B7tRadyilupVS67HMT18Etk7Avc0IEplHIs0pWms23vMCQVNT39TJ7tsvdBSGUsrZUQBRj6dqruO9XkiDfyAIwOHWLjr6hiblHqbTRCUI6U4yZqLzgb8CLlRKHbR/LsVSAhcrpd4B/tx+DlY00HvAEeBh4KsAtuP4n4Ea++fbYWeyfcwj9jnvMsudx5GUeLM4r6wQl6GoqihGa+2YKsLmlNJ8T5T5Z36BZ1Y0h3eysRXk57hxTUE4bLwQ3XQPxxWEqUDNVBtpdXW1rq2tne5pjItIM8nyskLchsGBFl9cU0W6RMEkM49U5ho+tsSbRUff9NVbCgZNjrT1cOaCPAxDEvOF2YtSqk5rXR07LhnI08jJ3kGnu9mhli6UodK+NPVoBflStb9HXm+67tc0dVQhQPEZCJmILIGmgcgIGq/H0sdej4vVFUVxTRVhAbv+e8/z+QdeIRQyp2vqozITO3/NxDkLwkQjO4MpJnLlvLyskL7BEAD9QyZbr6nCUGqYqSRyB1Hf7OOKh/bwy1s2jrp6nQ7TUqqNftKBmThnQZhoRBlMMZGr0EMtPpaXF3G4tctyDCdwCs/Ly2ZFuRVOCtDQ2jWqGWm6wiVnYuevmThnQZhoxEw0xURGrlRXlvDUzRvYc+dFTt/jeMlPWsOPr6liVXkRLkNRncTqdTpNH8kW1YP0SfZKZc6CMBuRncEUE+5nEBm5ElmoLXY1D5G1h4p45fYLmV+QfPXSdDZ9SLKXIKQPogymmJEiVxKt5sNj9c0+DEMNK1rX1hMYVqV0Jpg+JNlLENIHMRNNIaapefu4n5rGDoKmpraxI8p8E2lCCiegzc3NSpgQZZqaq7ftYd33drH2e7v4bz+OjjRKd9OHJHsJQvogSWdTRNgkUvN+B0pBSFtZtwf/8WJcLiPquDZ/gC076p36Q4/fsI7O/lMJWeEoIa01G+7eRSjiK6yqKOKpJCKN0oV0SaYThExBks4mkLEIsLBJxASnvmtvIOjU4Ym8pmEo6pt9jvmks38orl+hqqKIVeVF1NpRRgCHWnwzytwyWhKbIAhTg5iJUiTVto3hlX7Y3GMALlt/5HrclHizhl2zKCe6nHOJN8uJuIm1s4c0GApyPS4MoLqyZJgpaTKidcZz3XSJIBIE4RSyM0iRVJyesdEy4Siiy7a+DFrTNxiio28IOOUkrm3s4MqH99LQ2sXy8iJ+/uW1XPPIPmobO1hRXsQvNq93ooSWlxVyqLULU8PAkMmzX/84Zy3Md3YrkxWtM57rTuScxMQkCBOH7AxSJBWnZ6zi6Owf4qyF+VSH8wzs8yOvuaK8iIbWLkKm5nBrF++290ZlH39h214ev2Ede+68iF9sXm/tIOxrRSqCeO8/UbkG47luonNT3S1YzvO9rL97F1clsUMTBGFkZGeQIqmEbMaL9U90fnhsbm4Wmx4+FXp6emkuZy8u4PBRq7ncoRYfnf1DzM3NZtPDe2lo8bEiQUOYyco1GM91Y88t8WZxvGsgymGezG6hzR9gf6NVAX3/+x20+QMsKMwZ130JQiYjymAMJOv0jNfXuL0nwLy87GHnR14zfE6JN4trHtnHq0e7MRSY+pSfIbIxTEOChjCTlWswnutGnhu+v9qmTkL2yj7ZfIPYtxQrkSCMDzETTRCJzBxhIR9ucL/h7l1c9dAejncNJDSJhM/p6BuirqkTjaUIAMfPkKy5arJyDcZz3dj7CyuCVPofl+Z7WFtpNcZZW1ksEUkZigQjTByyM5gAknGKRtrK9zd2svH7L1A9ikkkLPAjewRXj2JumklE93ku5v5rViWtYJRS7Ny8YUbfvzA+pJzJxCLKYAKI5xSdm5sdJajC7S0PtfgwNYQiMpATrWpjTSqxncCSaTSTzsJyvApNchQym2Qi+9L9fyCdEDPRBBBrsinxZkXlDQSDJpse3suhZh/nLc4n32loY9n/w8Tb8oYFnstlDFs1j7RFTjUfYrpI95IZQvoymql0pvwPpAuyM5gAYle47T3RK5a3T/jZ39gJwKGjfsI72bD9P5yBnMqWN9HxkaUqpAicMJsZbWcphRBTQ3YGE0TkCjd2xTI3N3rFsqK8KCrPAKL/cGsbO2jvCSR8r3DBu1q74F34Dz1yJXTrjgNUJWijKQizhZF2llIIMTVkZzAJxK5YANZWllDXbK/ib1w3zP4/Ly+bqooi9jda4aK37jjAzji7g7DAr23qtJzKgaDzhx65I6lv6mT37RdiGMPbaI5EMjZWscMKM4HZEGQxlYgymCRinZs7N0fnG8SilGLrpio2fv8Fx7n81ofdfHRRQdys4pBplbN45rZTJShiE7qSaYITSTKmKongEGYSEmSQPKIMpojwH+VIwnR+gYfV9u7A1PDp+15mbWUxOzdvcI6xdhDFzi4jsgTFeFdCydhYxQ4rCLMT8RlMEeHIn/aeQJQwbesJOBFB4d2BK0KI1zZ2RvkPrF2Fth5oHXeXMVbi2VhjI5bEDisIsxNpbjMFxPYgAEV9s/1YKeojdglaa654cA8HWnzO+Wsqi3nC3h20+QOsv3sXIVPjMhSv3HEhhm0iCmc5j8eEE+kPSHQ98RkIwsxFmttMA/HCPOubfey2BbjWmo33vHBql+APcNvOAzS0+jh3cQGvfmAVp6tptHYQCwpyKPFm4c124R8IMifLYMv2UwXe7tu0atwmnEgba+wuJnw9scMKwuxDzESTRGyY56pyq1lNVUUR8/M9lNo/kSYXpXCKz73xoT/qeuH1d0ffEH2BIAB9gRB1ER3RFKRswhkpcU1MQoKQOYy6M1BKPQZ8BjihtT7XHrsLuAlosw/7e631s/ZrdwI3ACHgNq317+3xTwH3Ai7gEa31Pfb4MmAnMBeoA/5Kaz0xhfenkVhH6/IlhVZpTaVsc78lhO+9eiWGOrXSdmr1LC1Gm5r6FmvVH359Xl421ZUlp0xOEWam0nxPSg7k0SKDJDRPEDKHZMxE/w7cD/w0ZvzftNb/O3JAKXU2cDVwDrAYeF4pdab98o+Ai4FWoEYp9bTW+nXg+/a1diqlHsRSJA+M8X7Shsgwz/PKCmlo8VkNamyn8ZbtB5x6/GuWFnP/tVXMjxHmWhO3/PVIx6QiuOMlus0viO4JICYhQcgMRjUTaa3/CHQkeb3LgZ1a64DW+n3gCLDW/jmitX7PXvXvBC5XlsS6EHjKPv8nwOdSu4X0JLyq3nPnRfzylg2sXmqVW15VXkhHT4C65k7n2JqmTjba9VMAJ6MyXvnrZI9Jpg5LONENcBLdpH6LIGQm4/EZ3KqUalBKPaaUKrbHlgAtEce02mOJxucCPq11MGY8LkqpzUqpWqVUbVtbW6LD0gbDUMzNzabNP2iFgCrFm8d7uOy+l5mTFf3RhzQJy1CM1mYyUXmK0XBCWW3TUP0EtsYUBGFmMVZl8ADwEWAlcAz414ma0Ehorbdprau11tWlpaVT8ZbjItynd+M9L1BjZw37B4KYQG8gRKwhJ9HqPGxychmK88oKmZsbXel008N7uWzry3g97pQaxICV6FYtTmJByHjGFFqqtT4efqyUehj4nf30KFAecWiZPUaC8ZNAkVLKbe8OIo+f8UT26QUwlNW2sncgiNfjoicQAmBlWSENR7swI3wK4dwBpRRKKR6/YR1XbtvDoRYfmx7e5zh7RypPkQwT6SSW/ANBmLmMaWeglFoU8fQvgVftx08DVyulPHaU0BnAfqAGOEMptUwplY3lZH5aW/GMLwJX2OdfD/xmLHNKR2Ll4TNbLuDgP17M7267wFEEAA9eV8WayhLchqKqoogtOw4Ms/139g/R0NpFSBOVuTw3N8sJ/6yOKU+RLBPRU0BqxwvCzCaZ0NIdwJ8C85RSrcC3gD9VSq0ENNAI3AygtX5NKfUL4HUgCHxNax2yr3Mr8Hus0NLHtNav2W9xO7BTKfUd4ADw6ETd3HRTmu9hzdIiapt8rCgr4KyF+RiGwby86OgcwzCc1XlsIlo40Svs7K1r6mRVeSFbdhxwQkofv2Ednf1Dw6KOpnJ1LjWLBGFmM6oy0FpvijOcUGBrrb8LfDfO+LPAs3HG38OKNppVmKbmePcAg0ETDRxs7eaqh/bwT5efyxmlueTZZqI8jyuq30Fs5dGwDd/KCbPyFIIaGmzTUF1TJ539Y2uQM5EkmrcgCDMDKUcxCViO4z1Od7MwNU0+LrUjifqHTMDqdtbeO8htOw44iWT3Xr0KV4zp5mTvIPXNlgJoaPGxvLyIw61dUYJ3pNX5ZNvzJUFNEGY2ogwmgTZ/gNqmzoSvhxUBQE6WgTZNR4jvb+zkgn95kWp7ZR+WqbEr7+0JGuTEW51P1Y5BEtQEYeYiymCCCQZNbvl5LZH+03MXF/DaB93Ec6n2DZrc+LM6VlUUUW/XJQrFWdnHW3nHCt5Eq3Ox5wuCMBpSqG4CCBd7C4VMvrBtDwdaupzXnr3tAp7avD6uIgjz6tFuhoIhdt9+IWuXlSSM+U8m6ifeMVJwThCE0ZCdwTiJNMEsLyukobUr6vW/+2UDf/fJM+OeG+k7ONjajTIUOyfB7i72fEEQRkN2BuMk0gRzqMXH8rJCIs3xrx7t5ouPxW/Cs7gwuijcZIroicglEARh9iLKYJyE4/9dClaWFfC3F5/Bf/33TyQl2N9t73Mer6ooYm5uNldv28v6u3dxlSRuCYIwhYiZaJyEe8JoDXUt3Vz3aA2GYkQfQSzebBdPbl5Pe8+gU75i//sdtPkDLLB3DyOFhmZCGYhMuEdBmE5EGYwTq/5QdBhpqgv6QNCksz+IjlEhHb0B5hd4RuxtPJ2JZlNFJtyjIEw3YiYaJ+NZpM7JMjAUVC8tpsSbxW07Dzqv5XlcfOb+3Vy9bS9t/lO9iGubOnn7uN9pUzlaeevZQCbcoyBMN6IMxsnc3GzyPWPbYPUPmZy9KJ8fXrmCNz/sps5OVDOU9VrIFv5am5xXVojLUHizXVx630v8twdeIRQypy1sdKTeyRONhMYKwuSjpuKfeTKorq7WtbXxo3SmgrANW2vN+rt3xTUNKVLzHYRZs7QYpXDMT3keF32DIc6xk9fC71VVUcRTt2wEUmt3OV6SMdtMtI1ffAaCMDEopeq01tWx4+IzGAORwrCqoghvlouewVDUMWeUenmnrS/BFUZm6zWrUEqx8e5dhDROuevXPugmJ8tSDAAHW3xONnGyGcUTIVRHy2ieDBt/ODTWNPW0VGUVhNmOmInGQJQwbPYNUwQA77T14XGN7fpHTvjRpsnqyhJcCvJz3LgMxYryIvoj3mtFeVFKJpOJ6jkwmtlmsmz84fmv/97zfN42kwmCMDHIzmAMRBaEO29JIQdafHGPC8ToiNPn5nDk5EDUWJ7HxXPf+DhfefwAh1q7UAque7QGgBVLCth9+4WU5nvo6Btibm4Wmx7eR21jByvKi3jqlg0prY4nqkZRbEZzbA+FySpnfbJ3kNrGDkIa6pt9XPHQHn55y0aJLBKECUB8BmMkbG6Zm5vFVQ/toabJl9R5eR43PYEgAB4XPHnzBuYX5ACK99p7uOaR/VHHr6ooihJ4qZh5Yo/V2urJHBbSOzevH7epJZFJaDJs/FprPv/AK9Q3+wBwGYq9d1407UX3xJ8hzCTEZzDBRJZrvu+aKjbc/UJS5/UNBp3HgRB89sd7nOerywswVHSeQkNrF+09AVthJF8mOpGQnugaRYl2G5NRzlopxZM3b+CKh/bQ0NpFdRpEFkkOhDBbEJ/BOAh3MzvZE0j6nJysxI6EupbuYVFJIVPzte31Ufb9ZMI6E9ntk61RlGzo6FSFfYbnYxiKX96ykb13XjQhO5vxIjkQwmxBdgZjJFE3s9Hoi+NsHo2axk6nNEWyK9Hx2O1TWe1ORUXUePOZbtNQGGn3KcwWRBmMkdG6mY2FlWUFZLld1Dd1cu7ifA4d9TuvhUtVHO8eoKaxA1NDXVOns1qOFcTjEdKpOponu8NZOjfnkfLgwmxBlEGKmKamrSfArTvqU65BNBJnlOby1C0bAIMjbT0Ue92su/tF53WF1UXtkn/7o/O+q8oL2bKjnvpmX9wV/FiFdLqtdkeaT9h5W+LNGtYGNBkmwvkr7T6F2YBEE6VA2FxR834HkRHu9151Hnf+6jX6hpKPe19dXshA0OT1Y9bqX2OFmZ69qID6Zh+rygsZCmkO2s1y1lYWc9dnz+HS+152rrH9xrV88bEagqbGbSj2pBBZM5oQTLcImXjzCX8ftU2deLNd9AWCVFeWJO3EFeevkIkkiiYSB3IKhOPcY0X+1584nJIiAHjjQz+/vHkjZy3Mc0pW9ARC1DX5CJqamiYfh492O8fXN/usOkg51mYu3+PmtHm5VKXgvI1szzla8lm6NcOJN5+w+ShkavwDQUK26SxZJ644fwXhFKIMUmBeXjYryosm5Fp9QyZ1rZ289WGPM6aAVeUFzpcSsndtLgWrlxYzvyCHA9+8mGdvu4CPLszjgn/5A2jN7tsvHDWyJjL7+AsP7aE2ogpqewrRUOlE2HzkMpSVpW1/TsmatUq8WU4BwHQwhwnCdJKRPoOxmkCcOPcH9yTMOk6FojlZrCgr4GCrtQPQQEgrlKFwaU1IW0lqT2xex8cWFaCUwu1WlObncKCli6CpqW/2YRhq1PsY3p6ziAMtPkKm5tbt9ezcvGHGmUginbep+gxMU3PNI/toaPGxoryI7TeuS5tdkCBMBxm3MxhvfR6lFFkuhQGsWJLPb766gZ9+uZoz53tTus4ct+KzP3pl2HhDaxch01IEAD2BIJ+9fzebHt7nzLXEm8XyskJcCqoqitFap5QPUF1ZwgPXVeGyZV99s4+2nsCUlaSeSMLmI5fLSMms5ZiYtPWZd/QNTfJMBSG9ybidwXjDFE/2DlLX7MMEDh31c7mdQXzWgryU5tEftITuwdZuzl1cwBsf+slxK3oHh/seIm3hc3OzueaRfRxq7WJ5WRFam2y854WU8wEAqitLnMqrW3YcoD6DHKnpFjElCNNNximD8QqBEm8W3mwX/oFg1Phbx3uinqfSy+D1Y92cvaiAVz/ojvu6oeC8skLm5mY5+Q0hU9NwtAtsc9JY8gHCysE0TTZ+/0VCaRjHP1lIfoAgRDOqMlBKPQZ8BjihtT7XHisBngAqgUbgSq11p7L+o+4FLgX6gL/WWtfb51wPfNO+7He01j+xx1cD/w7MAZ4Fvq4n0VYxXiHQ0TdEb4wiiEcqN2BqSyHEIy/bxenzc2lo8XH1tr1obZWoAFhdUQTg5BmkqtgMQzE3N5urt+1xrllVMbXd0qZTGEt+gCCcIpmdwb8D9wM/jRi7A9iltb5HKXWH/fx24NPAGfbPOuABYJ2tPL4FVGPJyTql1NNa6077mJuAfVjK4FPAf4z/1hIzHiEQjiiaCAdyJIlEoak1Da3dmFir/3DTZZeC+6+pYl6eJyWBGiuAT/YOnqoCquB+u7FOqtcZbTze+anG+E+38hCE2cyoDmSt9R+Bjpjhy4Gf2I9/AnwuYvyn2mIvUKSUWgR8EnhOa91hK4DngE/ZrxVorffau4GfRlwrbYiMzz/RHeCfPvuxMV1nJFkXithK3P25c5zHfUMm5ywpcHIJIp3AkdVBkxXgsc7zWMdyKhVRY53wqTjnU43xn6jGPJPJVPaFFoSJZqw+gwVa62P24w+BBfbjJUBLxHGt9thI461xxtMGJ8u1sQNvtht/YHQTUcJrJSkjfn3wA/I8LnoCIfJz3Pz6Kxvp7A86jWTGuiJP5DwfyWwW77qJrpOKcz5V381YHP9TuZOQbGZhpjNuB7LWWiulpmQppJTaDGwGqKiomIq3jApBHI8iGIlYZ3Ndk4+X/sef0B0IceaCPAzDoDTfKn2tFMOE4HgrmSYymyW6bvg6tU2djmN7pOvHXjMsoFPx3aSqPKZaOKdzMT1BSIax5hkct0082L9P2ONHgfKI48rssZHGy+KMx0VrvU1rXa21ri4tLR3j1FMjLIQMIDc7tabGCnj8hjUjHuPNNlhRVhg1FtKai3/4R04vtRRBmERmiGRNLmHn+Z4kewEkuq5SisdvWMeKskIaWnxODsRo14819QBJm7gmau6TxVT1dRCEyWKsyuBp4Hr78fXAbyLGv6gs1gNdtjnp98AlSqlipVQxcAnwe/u1bqXUejsS6YsR10oLwoJveXkhfYMh5riTX13OyXaxtrKENZXFcV8/a0Eez3/j4zxwXRXnLi6Ieq130ORI26lw1Xg287BymJublbQgSsXHMJKA6+wfshLkYuoBhSOU2nsGx6y0Jnvuk0GqykoQ0o1kQkt3AH8KzFNKtWJFBd0D/EIpdQPQBFxpH/4sVljpEazQ0i8BaK07lFL/DNTYx31bax12Sn+VU6Gl/8EkRxKNhZN9gxxssaqHhpPFkqFvMMRfPvAKc7Jcw9pZgpWbsPFf/guAFUuilYE32+DMiES2WEHa5g9w284Djhnk8RvW0dmfegnnkRgpDDeR2WYk88xUJnpNRx6BhKoKM5lRlYHWelOCly6Kc6wGvpbgOo8Bj8UZrwXOHW0e08l4xMirH/hHPwg4/EE3q8oLOdTaxdmL8vn1VzZysveUcI8VpEoRpRw6+4cmRRAlEnCJhO1ItvOpFtAinAUheTIuA3kslOZ7WFtZQm1TBzlZBn1xSkaMhqGgemkJ9169got/8Ed6Ytpfrq4o4v5rqlBKOSUnRmpmD6TsUJ1oIRxP2M7Ly2ZVeRF1zZ2sqigaNi8R0IKQnogySAKt4d6rV/LO8W6++H/G1lDnmS0X8NFFBZzwB6IUwU9vWMMZpXl8/YlDnP/9F1m9tJgfXrXSKTkRubqOV06irScw6s5lvJE14e5uitEdvqGQ5s0P/Zga3jzmJxTSuFPws8R7b0k0E4TJJyOVQSoCxmp8v5f9jbF5dxbxahDFjuVmuzhjfh5KqWFO1b9+rIaV5UUcsquV1jZ18tXH65IuD3HbjgOjCvlUwh5jPxvr/vewv9Hq97y2soSdmxMrkyNtPU4Irj8Q5EhbDx9dVBD32NGQ2H1BmDqkhPUomWAnewepbYqvCOCU0M9xRY+dXurFZQuuXtuRHAgE+crP66Pno7H7CxTiNhTLywo5ZDurDUYuD5FsdE6ykTXxPpvwe4Spa47/PuHIpjPm557qxpbjjnKCp4p0IhOEqSPjdgapJgeVeLPI9biHVSmNZSDaBcC7bX2cs6SAV+3WlYePdrPqu8/TF+MrcCmrlPT2G9fR3jOIqU0u+beX8AeC5Oa4mZubOHErHFI6mt8gWcdtvM8mrEjCO4N47xO7gq+54yIOtPpYu6w4Kk8iVSY6+khMToKQmIxTBqkKmI6+oSgBnm1A2H8cL1w0jAY8htXEJhyOGqsI1iwt5kfXVlGa70FruG3nAWobO5w6RX2DITr6oqOEYgVvsiGlyThu5+VlU1VRTF1zJ1X2Z6OUYufmDXF9BmHhqrV2lEhtUyfXPLaPhtaucZt2JjL6KPJzq6ooYuumKuYXpE+PZ0GYbjJOGaQqYEq8WXxsUb6zwh804WMLvPzrVVUUz8nigv/1B8e+H0tdS3RZ6jyPi75AiBXlhTx43WrmF+Q479/eE3DKXgBWX167i1koZDotHWNX7xMZUmq5M7T1QGu0tspfGIZiQUFO1LGxwrWqopj6Zqs8xaEWX9I9FkZjoqKPIj+3/Y2dbPz+C1SLH0IQHDJOGUDyAibcJ/e1o9FC/Y3jfYC1Sp7jNoaFicbjowvz+O3Xzsc3EIqrhCJ3LNbKdRVbdhxgw9278Hrc9A2GqF5azPYb101a4la4nHVIWz0SRhLkkcK1vtnH7jsuxFCKublZbHp436TMbzw49ZTsnVcmNfIRhGTISGWQLCd7B6l5vyNuo5rPbH2Z5UsKEyqCVeVFuA2r6JzX4+KdE71c91gNO25aj9bWTiBSKcTuWNp7TgnmsL+itrGDd070sP3GdSk1f0+WVExoscfOt81Hpqm57+pVTkG9dDHDhD/f9p4At0a0+ByrshL/gzDbUDO19np1dbWurR1bzH+y/8ihkMmKb/8nPYHRV/6RGMAzt13AmQvyeedED5dtfZmQqXEZipf/x5/y1R0HaGjtGtFMobXmqof2UNvYiTfbRe9giFyPi/4hc0zmjVSaziR7XJs/ECX0xxoKOtWCdbzvJyGvwkxGKVWnta6OHc/I0NKrt+1h/fee56qH9owYWtrRN0T/UHLZxmeWellTWYxLQW6Om8/cv5srHtxDfo6LOVlW3GnI1Fz0g//iQLPPySlIFC5p6WhlJS0ohaEUPYFQlHkjlXtO1Iwmsgpqql3Kzv/+C2zZcYDwemIsoaDT0bQmlYJ38ZCQV2E2knHK4Lh/gP2NlqN2f2MnbT2BhMfOy8umemkxLkNxzuKRE6f+/ctreWLzBn675QL6Bi2hfaDFx/nf/wM9EX0Q+iKUy/KywigzRaRwtuz3nZgaegJBQrbENYCqmDIPpqk53jXAie6BuF224gmvWCEcDJrj7lI2lkqhM1GwSrlqYTaSUT4D09R8NSbpa6S1odbww6tX0tk7yO1PHhjx2m6Xtfq/6+nXEkYXgZVXYGpYVVHEU7dsiArTjDQ9hB3FtY0djgPZm+WidzAISjmRPrEZ0msri9m5eUOU2cIKGS1ynNNhn0TYmVrb2MGRtp6o8NC3j/s5a2H+sDDSeXnZCX0LYwkFncpKphPFdFREFYTJJqOUwcneQRqOdjnPvdlG3KQugGDQ5IqHXnFKV4/EmspiSvM9tPdEZ+uGWVlWwOEP/JaSUIpntpzPvLxoM0XsCrm9d9BxxM7NzbZ8D/e9hKmhPrbVZPOp96xt6mTfeydZd1qJk/B1yuSkHEVS4s3CayfTeT1uTi/NdbqXebNdXHbfS1RXlrDjpvUAw2zkiYRhqqGgM1WwSsE9YbaRUcqgxJtFtgv6bUtN36BJe+9g3Bj6K7ftSUoR/PzLazhjQb5z/bCAzfe4+f03Pg4KfL2D3PXb16lr9rF8SSHfevo1DjT74raSDK/et0REvOy4aT1nLcynurIkYavJ/e/bJTM0bHpkH/keN//5N59gYWGOY3IKmdpRJNb9W47x3kCQjr4hdty0nreP+7nsvpeGNa2Jl7U9UcJQBKsgTD8Z5TNo7x2kfyjahGOGhjuIT/YOcqjFN+r1vNkG1z1Ww7q7X+Avf7Sbt477HQHbNxSis3+IT/7wJS7dupvXPujmrPleDrT4qGmM30oy3Cnr/muqqI8RviO1mtx503r23XkR229YS/hu/IEgG+95gc8/8ArFc9zDbNzz8rJZXVFkfQYabt1hmcHCSmfYsTHnJ2rBOVFM9vUFQYgmo3YG8QwQvv4hFsV0pZyXl22twhs7OG9JAUGNk4Ec5iPzvLzb3uc8P9jaxaX3vUy+x03fUIg5WQaX3fey83rvYIjXP+yNusbKskK01mhtCfXwCllrHdeOHtlqsraxw7HrG4ZiQWEOpfnZ5HvcTtVQjZU89oVte3ly84ZhZSu2bqpi4/dfiNoxlOZ74pptIse0Hm42msjQyqkO3ZScAUHIsJ1Bab6HNUuLnOe52QZnLcwfdlx4Ff7MbR/nV189n9989XzOmu+NOiZSEUTSEwiybO6cpHIT3vjQHzd6R2u4b9MqXrnjwqh+uuEVukuB1+Pmsq0vR51rGAb/+f99YpjSa2jtcspWRAq7+QUeqsfQOznVCKBUV/lTGWGUamir7FiE2UpGKQMrAsfAZSjOXVLAof95SdyqmqapufbRfXxm68tsengfSimeue0TzMka/ePSwJG2aEVhKEvxxNI7GCKkoaaxgzb/gPPemx7ey/n3RMfwwylT0jO3fdwJX40VlgsLcli7rAQDqxaSy1BUJxD04evtvv1Ctm5aFfX+IwnHVEIrx5JHMJWhm6konunIiRCEqSKjzEThyJuQqXnjmJ+OviHmF7jiHxcRZvnmh90UebM4vdTL4Q96Un5fU8NAUPPMlvP5h18f5mCrZXLKy3bRMxjC1PDnP/gjB/7xYjr7h+I6ayNNGWctzKc6QTim1kRFISVTtuK2naca5Ny3adWoJb5jI4DildeI91kmWwtoKiOMUgltHcu9CMJMIaOUQYk3C2+WC38gSMjUfPXndfzilo3D7NFOUbOmTjxug0sjbP9jQQHVS4s5e3Ehv/rqBU456GO+Pi7/8R7gVFewsxbmRwmnEm8Wx7sHhkUXxROWwaDJldv2cKjF54SFhhVJssJakVxv5bDZaDT7/ljzCKYqwigVxTMTcyIEIVkyShl09A05zlWA2mYfbT2BYaGlSil+9qW1rPzOfw7rQTAWfmfnFRzvHsBQivn5HoaGTNbZigCsXcKZC/KihFOJN4trHtkX1eMgMiEsUtCXeLP4wrY9HGj2Wcc1dtgNcLJTEtaJHMiJGG21nE55BIkcxckqnnS6F0GYaDJKGZR4s8hxRXclC5nxaw+9d7KXvsHk6hLFY2lJDk0dA6xZWsQ//PpVDraeyllYW1nC1//89KhqqEMhk1BIYxinhFObf3iPgxy3wafvfYk1y0rYfsM6rn3UKhe9vKyQhoj3WFF+KtM4GWEdLjoHqa3KS7xZdqtOX8LVcjrkEUxUhFI63IsgTAYZ5UBu7x0c1p6yq28o7rFnLsjDmz3cn5AMhoLmjgFWlRfROxiMUgQAtU0dnDbXGxX1Ewhp/tuDr0Q5JSMdqWuWFvGxhfn0DobQwP73O9jXeJLaxg6Cpnb6KBsKzl1SwJM3W1FIyTpjb9t5gI33vJCSYzTc7+FQaxfLy4vYfuO6tF0tz8QaSIIwlWSUMogNB/RmxQ8tBStM8+A3/zyq0X2ymNqKKjrQ4uP1Y8MdzivKCvn6E4fQROc+vHq0m/aIwnmRiWg/unY1b3zoj7rOFx+rwetx41KWnf/Hm1axvKyQN475ueaR/U5SWvgakWGqkYxVUIbPC5maw61ddCRQrOmAFJcThJHJKGVgxAjCF/72EyM2bHe7XTz812vG9F6umPcy7LFV5UU8eN1q6m3bfqR60sDXttdzvOtU9dGwWaI038PqpdHZcSFT0zcY4rdbLgCluOB//YGDLV1RIafJJFSFTT1hpZKsoJxJAjYZpSgImUxG+Qzm5maT53E7JaW37DjIEzcPjyaCUzZmp+ZPEhgK0FBdWczWTau4+ed1Tn0jEzC0xu1SFOWc6qsca5Cpsfvzro5p2q6UYvsN63jrhB9Mk3/63RtWraOyQubmZlNvr9ABR6iXeLOi7OSP37DOyULWmign9VhMPTPNoSr2fkFITEZ1OjveNcC6u3c5zw0F+/7+z+MKiDZ/gA137yKYQmKRy1A8s+UCp/Tz0FCIVd95blg2cm64c1m2y85d8JOb7aY3EMSMuV64qxnAVQ+9Qk2TD4AVSwowDEVDa5e9Y1DUN3dSVVHM/descqqohu/BpWB5eRGHW7uoqigGrN7Fy8sKOdRq7SbchmLPnReJwBSEWUyiTmcZtTPQMetwj1tR4s2Ke2y4B8D+xuElqROxemlxVA8A30Awbqe03nC10MEQh45afoBlc+dw9+eXc9fTrzkCP7Ibmqm1Mw5wKKJWUl1TJ7/dcgHz8jxOoln4HsJho5FCv665E7QmpLEcz7aSiCxCN1NW+4IgTAzjUgZKqUbAD4SAoNa6WilVAjwBVAKNwJVa605lSZV7gUuBPuCvtdb19nWuB75pX/Y7WuufjGdeCecb87x/SNPRNxR3JayUYuumKjbcs4vRNgfnLszlzsvOZv1pc6OycUu8WawoK+Rgi89Z+VdVFPLW8d6ofAeAhg/8XLZ1N6vKi6LGz16Uz9zcLNp74jt1DbtO0V/cv5vVESv+sFkonI1s5SHsPbWT0KeO237jOidTebKL0AmCkJ5MxM7gz7TW7RHP7wB2aa3vUUrdYT+/Hfg0cIb9sw54AFhnK49vAdVYPtQ6pdTTWuvkl+RJEs8iVpQT/yOwInFgVXkhdc0j9zV47cNern20htxsg7MXF1rmlyWFuF2KQ61drCgv4hc3rcc3EGReXjYf+Po5//svxr1WQ2sXuR4XvYEQhrIijDY9vI/tN65jbWUJtU0dzMl20R8IUV1ZzF2fPYe/uH/3sBV/bWMHX9i2J8os1NDiY0V5ETtsv0Dk6j+sENt7AlJyQRAykMkwE10O/Kn9+CfAH7CUweXAT7XlpNirlCpSSi2yj31Oa90BoJR6DvgUsGPCZxZngftOWw9nLy6MGgs7j2saO/C4Rl8Vh3VM76BJjW1WOhDRD6GhtYt32nqYl+dhcDDEzT9L7OsIaU2v7WMI70jqmjrp6Bti5+b1Vs9mu+R1OLs47DgO9yeob/Zx3pICq9x1rFmotYuTvYPML8iJK+Sl5IIgZCbjVQYa+E+llAYe0lpvAxZorY/Zr38ILLAfLwFaIs5ttccSjQ9DKbUZ2AxQUVGR8mTjZRvH7gxMU/Pmh93UNHZgaugPjs/B7jIU3iyXU9/IUIxqdnLOy3bRFwg6QjkU0tzy8zoaWruoDheVs0NUAQaDIR68rhoUbNlxIEpJaA01dsTRrdvrh/VJDuNkJNv1kwRByAzGqwwu0FofVUrNB55TSr0Z+aLWWtuKYkKwlc02sKKJUj3/3bbhCWCd/UMsth9bzeX3pOQ0DuPNMhgImqyuKKJvKMQbx/xULy3mW589h89EFLpLRhGsKCvg4S+uiao6qjV84aFXOGCHqtbaReWWlxU69YgOtnZz/r+8aJWmsHcmLgX3X1OFBjbevctpZ9neE2B+TE2mSG7bcSCh30AczIIw+xhX0pnW+qj9+wTwa2AtcNw2/2D/PmEffhQojzi9zB5LND7hFOcMjxzKyVJOw5KwvTwZ8jxuDAX5HjcGcM7iAl65/UKUUrx5zM/K8iJ+9qW1fPPXrw7LJRiNJ25cz7w8D+29g5imyfHuAd441uUoAoDlSwopzffwi5vWc+6SAmcVHzI1B5t9nL24AJeC6soSSvM9zI9IWgvZbS4TlZ0YKSNZavoLwuxkzDsDpVQuYGit/fbjS4BvA08D1wP32L9/Y5/yNHCrUmonlgO5S2t9TCn1e+B7Sqlweu0lwJ1jnddI9IWCw8aeefUDdr/zutOIvqqiyAnh9GYp+obiC7v+oRCP37COax/ZhwnUNvno6A1Q3+wjpOFgs4+/fHB33HIUo/H/3viQf3+lyUlYi8eD11WhNVz76H5e/6Cb5WUFvNfWhz8QxFDw2gfdnLO4gJ99aQ3tPdYqPrLNZV1jR8LdwUh+g9heD23+AQzDmLW7BNkFCZnCeMxEC4Bf2/8gbmC71vr/KaVqgF8opW4AmoAr7eOfxQorPYIVWvolAK11h1Lqn4Ea+7hvh53JE81zrx4bNvbzl97nZACnhMN5S045kxMpAoDlSwqYk63IckEgZDlPvvDQXlaWFVDb3IUJY1IEAN94oiHhawZQvayE+QU5nOgOsL/R+qgOtXbjsk054Sqnh492U/Xd5+kfMqm2Q0hX27kT4d3BzjihoyNlFlv5F8Xsb+wgZGou+sF/0T9ksrqimK3XrGJ+vsfJbk5WgKarwJ3qXsyCMJ1kVAbylp/v5bevnhw2vqrCSrqKTMxKxNO3buR//t9XnW5lsZw138uRtn5CKXyuWQpG0DtRPHPbBczNzcZQCq016+5+wXktN9vFQNAkJ8twIpLCuAzFnjsuRGuc3cFYM46Pdw84/oeo97DLYISzoZMRoOkqcE1T8/ZxP5dtfVmys4VZhWQgA+3d/cPG5s0xeOrmDXT0DTE3N4urH943rB7RWfNzeftEL2sqi1lYMIeGo/EVAcBbJ/oSvpaIZBXBqvIi7vrNq44Za01lMXOyFP32BfqHQjx728c5vTSXK7ft5WCzj1yP2+nsduv2enbctD5hy8xIRlqtz8/3UF1ZQm1jB16P2+nHHHZOo1RUsbyRBGg6tpIMK6jI+5MwW2G2k1HKwIgT2PS/vnA2LpfhCKCdN62nzT/A5p/WOKUi3j7Ry+6/+zMWFc/BNDVzslxOSYmpwptl8ONrV3FBRLJaXVNnVHTSivIipxzGU7ds5GTvICHT5Px7XiCkrfyDjr6hUYvLjbZaj+3GdrJ3kFu311Pf7KOqogiUclp0jiZAS7xZnGc35kkXgeuU5tbQFwjyzG0fjyozIgizkYxSBh7X8OCp//dqO3929lLnuWEoFhTO4e8+/TGufWQ/YPkDmjr6WFzipb0nMOWKAKBvyKSjd4iqpcVOYpupIc/joi8QYmVFEU/dssERWOEKnVprqitLonYCkRnH8UhmtR5ZAXR+QQ47N29wFEyyPoNwc5xwZnS6NMeJdaCLIhAygYxSBnFqxlGaNzzp7GTvIOsqi3EpyxnrUrB2mRXsNJ0y4S/uf5nqpcX8bsv5fPb+3VZS3JDJs19PvHIdS5npsWQhRyoHpUjK1BO5Am+wm+NMt4kIZl5pbkGYCDJKGfQFAsPGBiOiTWPNI69965McaPWxdlkxShm0+a3G8yuW5DsmpMnCbo0Qhamtfge+vkGWLynk8AfdVE/CynWqhGE6l76Q3gdCppFRyqDu2PA8g4KcU4Iu1jzSFQhy+oJ8QJ1yKGa7h1UcnQwS+ZQ1cN2jVhTuyrJCtt+4LqpSaqzgHmu0zlQIQ1mBC0L6kFFtL+Px6N4PnCza8ErVpeC8JYXcur2ODXfv4gsP7aHWNmdMhSJIlkOtXbT5B5yM4Csf3MPrH3RhRtRgGi2buM0fiOoNHW9sMgkrHVEEgjC9ZLwy8PWFHAGplOLxG9axvLyIhqNd1DT5CJraagBTVkgahL9HoYGLfvBHat7vIGhqapo6ufS+l1nx7ecIBi2FkKhPcbgO0/rvPc9VD+3BNHVUqYmrHtrL8e6BpJVCOigWQRDGTkaZieKR4ybKVt3ZP8ThiMSzcCLVvVevpKN3kCse2E1/+mwO6B0Mce6SAl7/oNsJM/UPBDnS1sNHFxUkNMW09QScgnz7Gzut0thYfRBCGvY3drDx7l1UV5ZEmZbi5R/EM0WBNMkRhJlExu8MTi92DSu3EF5Jr60sYfcdF6KBDfe8yGVb00sRhMlSmldu/zPysl2AFW56emkux7sHONE94ET3RN5nrFg2Qya3/KwuKqs4nEQW3jklKlLX1hOgtrEjyhQ1knlKEIT0I+N3BmcvKYp6HruSPtGdfCXT6eJAq5+QhrMXF1DX5ONjC/PZ9PA+aux5r60sYfuN6+jsH4rKM1hbWUJdcyerK4r46vZ6pyqqy1AsX1LA4aPdUaaleAJ+bm621TvBViJVFUXO8bGRQulag0gQBFEGzCvwDhsLOzWDQZObf1abVA+C6abpZK9dMdXqbRw55brmTq7ctsfJ8g2bbHZutpSe1poNd+9yjl9eVshTN2/ghD+Ar896XSkVNxS0vWeQelvpuAzF/ddUOYI+UqlKb2VBSG8yXhm0dPbGHTdNzRUPvsLB1pH7H6cLhTluVpYVUN/cxXlLCnC7DGrtGkbLlxRyqMUXZfYpzfcMy1KubexgeVkRD15bhWlqLvnhH/EPBMnPcXPgmxfjdhvD/A+xCiIyHDUyPFV6KwtCepPxymCOyxV3vK0nMGMUAcBl97/iJKodbO1mzdIifrflfErzPJTme9j08L6EyV1Oq0t/gC076jn/+y/ysUX5+AcsB0mkQzo2/yDZXIF0TjATBEGUAS8c8WGaenhN/2maz3iINA3VNPm4/P7dTjTQaALbMBSGoahvtsJpXzvaTa7HRW8gRH6OmzMX5CV832QS1CTBTBDSm4xXBid7h+KaLPKz4u8YZhKxZqHRBHbs6v3nX17Lu+29nF6ay8neoXELcSnxIAjpS8YrgwX52cNMFgMDQS76txcTnDEzWFleyKsx0UCjEW/1fuaCfK7etsdREDs3bxDHryDMQjJeGfzNhcuiVruDgyE+etfvp3FGY8ebZdA3ZJKf4+bJzRvwDQSTWs1HhnzGrt5jk9OO+wdwz+Kex4KQqWS8MsA4lXdnmprn3zw+jZNJnbA4Xlle6HRg6xsM4RsIJmWSGbWRTczxX328nsMxIaqCIMx8Ml4ZnOyJzq7dF9PyMt3IccNARBb0y//jT/APmnxknperHt7HoRYf1SmYhkZrZBOZnLZ8SSENcUJUBUGY+WS8MtiwbC5gmUNqGtNPEeS4YMBurHbu4nxeP3aqj8Kq8kL+5skG6po6nV69y1PsGDZayKdSp5LT5uZmjRiiKgjCzCWjlIEbiC0t5M5yY5qaLTsOpGWmcVgRGAr+5YoV/M//e5jaZiv/QQN1zdZKPZwTcDjFjmHJhHxG+hEkPFQQZicZVaguXo25ktxsTvYOUpPG5iED8Ga7uOy+l6N2Bg0tXSwvK8SlID/HjSumTHXS10+hp4D0HxCE2UlG7QyuWVHI9kPRWcXvtfex8SNzOWtBHm8e75mmmSWmuqKQf7r8XC7buhuAvohGzisrinjy5g109A1R4s2io2/8uQCCIGQmGbUzWHHawmFj1z9Ww1Xb9vLdz509DTMaGUPBj6+rpjQ/Z9j4qooinrplAy6XQWm+x/ktikAQhLGQUcpgyBwuKENaU9PYyecf2j/h73fOAqsiao5bYQDnLi6Ie1w88a2ANZUlTubw2soSXIZibWUxe++8iF99ZSOGkVFfnxCDdJITJpKMMhN9/CPzpvT9srOz2ff3G5iXm22bctys+PZz9ARCzjGryot44qZ1HGnvJT/HRUtHP2uWFuMbCEWZfMIRPWIGEmD0/BBBSJWMUgYtXYEJvZ43S3HO4kJq7FLRsTS0+jCUckw4AAf/8RLePuGn2JuFyzhl2jl7cSEA5SVWQbjSrOivRur6CJGMlh8iCKmSNspAKfUp4F7ABTyitb5not9jSWHq/ywK+O2W8/nm/32Vgy1dnL0oj23XrsY/GOKshfmA4s0Pu7n0vpedc85ZnM+bx/ysXlqC1tppDgPgdhuO4AdrhdfeE2BeXjahkObtE37m5mYzvyBnQnYAkaUmtIY2fyCqDWa817XWUVFD4WOSdVKHzRfh99HayuPQWmOo4dd13rsngMI6J/xZFM5x09k3hNIwL9/DvDwPH3T3U9/UgQGsWFJIs2+AZXO9+PpDFOS4aOrsp7JkDp19Q7T3DNAbCLGirJDu/hAhbaKUQgMupZibmw1KobWmo3eQ4jlZdPYPUeTNwtc3REluNi7DYK6zu8uivWeQITPE++29lHizOaM0jyPtvRR7szDsawOEgibvd/TykXm5aBRtPQP4B4J8ZF4uyjDifhYl3izaewdBa7S2/gDDx4VCmiNtPZy5II8SbxbnLSmk4WgX5y0pZG5ulvP5B4Omc1zYlBj7WUfuMoNBk7eO+9HaZG6eBzT4+oc4a2E+pglH2no4ba6X9072cXppLp39QWeeCpzPJvJ64fcHFfVepqk51tVP08le1i0rwRVTQj7e347zufQMxm3hapra+duJnEvsfcZ+DvHmo5Qx7PVkduQjHTfeDn8jfZ4TSVooA6WUC/gRcDHQCtQopZ7WWr8+ke/z94+/PPpBMawoL0QpxSG7JeTrx3rY/PNa/s+XrMQuraHIm8W5iwt4/Vg3Z8zP4+HrqjAMF1t2HGDDPS+wsqyAv7n4LCpL5uAPhDhjfh4n+4YIDoXY/Hgdr3/gZ/mSfN760O/kFawsK+DJmzfiGwhSlOPmnbYe8rIMalo6ONbRS062i5wsN+sqinnxnQ4+eU4pvt4Q73X0YJomIW1ysmeI3x08ymvH+zmt2ENPYJATfZaoWpRr8E+Xn8tdv2ngg17IAXKywDd06t5LPXBORRF17/rwnwpiYv4cuHJtOf6BEH9x3iJ6Q+DNNtj97klO+vr545F2muwLLSvOxgyFaOo+ZRo7Y66Hr1x0Bj/adYR3Tw6wuCCLoWCQNntuSwqzOd49SDCNTOHZLhgMgVsxofM6s9TLo39dzW07G2g42kWOW9E7aA477mMLc2nu6Kd30CTP4+K0uV4aPrDCjA+0+Lh86x/53udXMNebzSX3vkRPIIQ326D+7/+cjr4hvvzv+3jzRB/LF+eR7XZR39zF8rIC7r+mik/+8CV6B0PD3nOO2xKGgYjphHtmzHEr+u0PIt/jpm8oRPXSYv7PX1VTfc/z9A2azHErProwj4ajflYvLWb7jeu56qFXqLP/lwwFL/73P6G7fwjDVsxbdhx02rVWVxQR0ppDLV3ketz4A1Zw+KryQp66ZSMul0EwaHLFg7s52GqVYsnNdjEQNDlvSQHZLoP6Zp9jRoPobnuP37COq7ftobbZ58znvMX5vPqBn+rKEh6/YR3XPrpvVFNc2GRX29TpdAl0uYzo1xo7WFFuRf+FX4s8P5GADwZNVn3nOavJlMfNRxfmcaBlcsrBqHRwPimlNgB3aa0/aT+/E0BrfXeic6qrq3VtbW1K71N5xzMpzy0v20VPnH8UgLWVxZim6SSBRbKyrDBhcxwDGP7vPpzcbBd9gyEMRVSjekFIFkMxZcmUhgKP26B/KP5f9++2nM9n7BDp8bKqoognN2/gCw/t4UCLb8Rj3YZiz50XAbDh7l0ETY3bUPxuywV8+t6XiPfxuBQ8c9vH+czWl53j99x5UVxTXJs/wPq7dxGyP+iqiiKeumUjhqGs1773vPP/u6qiiF/ar8Hovp83j3XzqXtfcp6HZcdI8xkNpVSd1ro6djxdwlGWAC0Rz1vtsSiUUpuVUrVKqdq2trYpmVgiRQBQ1+SjLo4iAGg4mrhLWjKKAKB3MIRGFIEwdqZKEbgMxdmLCxIqArDMXWMlNzvanNTQ2sWRtp4R/8/C8wonYoZLr7jtsTMX5LF6aVHc81aUF9mvnzo+UTLnvLxslpedMv0eavFxsnfQeW1F+an3aGjtcl6D+L6fSM5ckEd+jmXAyc9xs3pp0ajzGStpYSZKFq31NmAbWDuDqXjPPI/Lif6JXdGvXlqUcGdQvbQYrXVc5/JIO4PIlVx+jpuegaDsDDKUsEkm9rk3S9E3lPgPorqiiNc/9NM3GMIV528ndreb53HRP2jy0YV5ZLmUY3KJN488j5ueQHQuf3VFIT++rpq5uVms/OfnndIokeevWVbCRxfms7ay2CmJPscN/TFlAdYsLWLrpiqUgi07D1Jnm16etKPpbv55HYePdlPtCPNi9tvVA7xZ1q7E63HRHwhRXVnM/ddURfkYYsup/OLmjRzr6qexvYcfPv8O9XZW/1O3bMAwhvf8jodSiqdutnYph1p8VFeWOIJaKcWTN2/giof20NDaNayI5Gi1wQzD4MA3L54Sn0FGmYkg2lQ0H3jqbz/O+539hEIhsl0uTivNQ6Ho6BtkXp7lsAw7rornZPFOW09UJJDWcNw/gK93kGUlXupafJw+P5f5BXMcB1ZBtovalk6WFkf7DMyQia9/iDPm59HWO4ivd9B5LdIZNlafQUdPkM+ctxBcLt5q7eK1410syvfQMxQCNBXFuRzvGaDm3ZOYwSAleTkc7eyjND+HjyzIx3BpXnqng7KCLILaoGiOiw/9g5w1P5/uwSD+/uAwn0Fn1wBVywrY/XYnH1ucT+XcfIKmyVsn/CzKz8HlNigv8dLiG6DQ48Y0TZpP9uPvH6DA68HrcVk2c23icSneOtHLR+bN4XBrN6eX5nK8Z5CBQJCBUJBVFUUcavazuCiH7CwXp5fmcrC1kwONXVQtzUOpbD5x1jxqm7oIhoYoyMnGMFzkZRl0DQZRWKvVBXnZvPT2CfqCIebmesj3uMnJdnO4xcdZiwpYe1oJB1v9nLcwl11vnmTtaYWc7Amxflkxu9/rIBgKkZvtoqmjj5UVhfQPQcGcLObn5VDgzaKpvY9ibxYfW1zI4KDJ79/6ED0UIn+Om+xsNx+Zl4fLMNAaTDSdvdbfXok3m7dO+NFa47IbDUU6b03TpL07gK9/kNPm5dr9KzzML8hxnM2nl+bS3jPIcV8/zZ19rFlWTGn+HMdJrWxbfaTT9UNfP0fa/RTNycJtGJy5ID/qb7K9Z9DJbYgtTxJ2dlYWz+FAaxfVS4uiwqQjHcRzc7M50ROg3T+AoZQz90TO3nhjsdcbTzb+eB29Y3Uij/d9UyWRmShdlIEbeBu4CDgK1ADXaK1fS3TOWJWBIAhCJpNIGaSFmUhrHVRK3Qr8Hiu09LGRFIEgCIIwsaSFMgDQWj8LPDvd8xAEQchE0iWaSBAEQZhGRBkIgiAIogwEQRAEUQaCIAgCaRJaOhaUUm1A0xhPnwe0T+B00hG5x9lDJtyn3OPUsVRrXRo7OGOVwXhQStXGi7OdTcg9zh4y4T7lHqcfMRMJgiAIogwEQRCEzFUG26Z7AlOA3OPsIRPuU+5xmslIn4EgCIIQTabuDARBEIQIRBkIgiAImaUMlFKfUkq9pZQ6opS6Y7rnkypKqUal1GGl1EGlVK09VqKUek4p9Y79u9geV0qp++x7bVBKVUVc53r7+HeUUtdP1/1EzOcxpdQJpdSrEWMTdl9KqdX253bEPnfyi8bHkOAe71JKHbW/z4NKqUsjXrvTnu9bSqlPRozH/RtWSi1TSu2zx59QSk1sG6wkUEqVK6VeVEq9rpR6TSn1dXt81nyXI9zjzP8utdYZ8YNVGvtd4DQgGzgEnD3d80rxHhqBeTFj/wLcYT++A/i+/fhS4D+wGk2tB/bZ4yXAe/bvYvtx8TTf1yeAKuDVybgvYL99rLLP/XSa3ONdwH+Pc+zZ9t+nB1hm/926RvobBn4BXG0/fhD4yjTc4yKgyn6cj9Wj5OzZ9F2OcI8z/rvMpJ3BWuCI1vo9rfUgsBO4fJrnNBFcDvzEfvwT4HMR4z/VFnuBIqXUIuCTwHNa6w6tdSfwHPCpKZ5zFFrrPwIdMcMTcl/2awVa673a+u/6acS1powE95iIy4GdWuuA1vp94AjW32/cv2F7dXwh8JR9fuTnNWVorY9prevtx37gDaxe5rPmuxzhHhMxY77LTFIGS4CWiOetjPwlpiMa+E+lVJ1SarM9tkBrfcx+/CGwwH6c6H5nyucwUfe1xH4cO54u3GqbSB4Lm09I/R7nAj6tdTBmfNpQSlUCq4B9zNLvMuYeYYZ/l5mkDGYDF2itq4BPA19TSn0i8kV7tTTrYoVn630BDwAfAVYCx4B/ndbZTBBKqTzgl8A3tNbdka/Nlu8yzj3O+O8yk5TBUaA84nmZPTZj0FoftX+fAH6NtdU8bm+fsX+fsA9PdL8z5XOYqPs6aj+OHZ92tNbHtdYhrbUJPIz1fULq93gSy8TijhmfcpRSWVhC8nGt9a/s4Vn1Xca7x9nwXWaSMqgBzrA99dnA1cDT0zynpFFK5Sql8sOPgUuAV7HuIRxtcT3wG/vx08AX7YiN9UCXvVX/PXCJUqrY3speYo+lGxNyX/Zr3Uqp9bY99osR15pWwgLS5i+xvk+w7vFqpZRHKbUMOAPLcRr3b9hebb8IXGGfH/l5TRn25/so8IbW+gcRL82a7zLRPc6K73IqvNTp8oMVvfA2lhf/H6Z7PinO/TSsiINDwGvh+WPZGHcB7wDPAyX2uAJ+ZN/rYaA64lpfxnJkHQG+lAb3tgNraz2EZSO9YSLvC6jG+ud8F7gfO/M+De7xZ/Y9NGAJjUURx/+DPd+3iIiYSfQ3bP997Lfv/UnAMw33eAGWCagBOGj/XDqbvssR7nHGf5dSjkIQBEHIKDORIAiCkABRBoIgCIIoA0EQBEGUgSAIgoAoA0EQBAFRBoIgCAKiDARBEATg/we1UfxsLQ3+CgAAAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([[ 1. , -0.02145887],\n", | |
| " [-0.02145887, 1. ]])" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Plot relationship between sale count and target\n", | |
| "plt.figure()\n", | |
| "plt.scatter(df_train_with_target['SALE_COUNT'], df_train_with_target['TARGET'], s=5)\n", | |
| "plt.show()\n", | |
| "\n", | |
| "df_train_with_target = df_train_with_target.dropna()\n", | |
| "np.corrcoef(df_train_with_target['SALE_COUNT'], df_train_with_target['TARGET'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Build features" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Day offset" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df_train_features = df_train_with_target.copy()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "df_train_features = offset_day(df_train_features, 6+7*0, '6D')\n", | |
| "df_train_features = offset_day(df_train_features, 6+7*1, '13D')\n", | |
| "df_train_features = offset_day(df_train_features, 6+7*3, '27D')\n", | |
| "df_train_features = offset_day(df_train_features, 363, '363D')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>TARGET</th>\n", | |
| " <th>SALE_COUNT_6D</th>\n", | |
| " <th>SALE_COUNT_13D</th>\n", | |
| " <th>SALE_COUNT_27D</th>\n", | |
| " <th>SALE_COUNT_363D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>TARGET</th>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>0.771860</td>\n", | |
| " <td>0.725403</td>\n", | |
| " <td>0.750828</td>\n", | |
| " <td>0.815419</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>SALE_COUNT_6D</th>\n", | |
| " <td>0.771860</td>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>0.789803</td>\n", | |
| " <td>0.765755</td>\n", | |
| " <td>0.760947</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>SALE_COUNT_13D</th>\n", | |
| " <td>0.725403</td>\n", | |
| " <td>0.789803</td>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>0.755095</td>\n", | |
| " <td>0.731148</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>SALE_COUNT_27D</th>\n", | |
| " <td>0.750828</td>\n", | |
| " <td>0.765755</td>\n", | |
| " <td>0.755095</td>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>0.780629</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>SALE_COUNT_363D</th>\n", | |
| " <td>0.815419</td>\n", | |
| " <td>0.760947</td>\n", | |
| " <td>0.731148</td>\n", | |
| " <td>0.780629</td>\n", | |
| " <td>1.000000</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " TARGET SALE_COUNT_6D SALE_COUNT_13D SALE_COUNT_27D \\\n", | |
| "TARGET 1.000000 0.771860 0.725403 0.750828 \n", | |
| "SALE_COUNT_6D 0.771860 1.000000 0.789803 0.765755 \n", | |
| "SALE_COUNT_13D 0.725403 0.789803 1.000000 0.755095 \n", | |
| "SALE_COUNT_27D 0.750828 0.765755 0.755095 1.000000 \n", | |
| "SALE_COUNT_363D 0.815419 0.760947 0.731148 0.780629 \n", | |
| "\n", | |
| " SALE_COUNT_363D \n", | |
| "TARGET 0.815419 \n", | |
| "SALE_COUNT_6D 0.760947 \n", | |
| "SALE_COUNT_13D 0.731148 \n", | |
| "SALE_COUNT_27D 0.780629 \n", | |
| "SALE_COUNT_363D 1.000000 " | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment