{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Bank marketing.ipynb", "provenance": [], "collapsed_sections": [], "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "mKxuOA3sbMId", "colab_type": "text" }, "source": [ "#Bank Marketing\n", "##Classifying unbalanced datasets\n", "\n", "###We will use [\"Bank Marketing\"](https://archive.ics.uci.edu/ml/datasets/Bank+Marketing) dataset from UCI. It is about a marketing campaing of Portuguese banking institution aiming to sell term deposits.\n", "Dataset citation: S. Moro, P. Cortez and P. Rita. A Data-Driven Approach to Predict the Success of Bank Telemarketing. Decision Support Systems, Elsevier, 62:22-31, June 2014\n", "\n", "###First we download the data from UCI" ] }, { "cell_type": "code", "metadata": { "id": "Ifa7bliTcNug", "colab_type": "code", "colab": {} }, "source": [ "#Load data set\n", "!wget --quiet -P / https://raw.githubusercontent.com/dpanagop/ML_and_AI_examples/master/data/bank-additional-full_test.csv" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "hcqBo_FJcerm", "colab_type": "text" }, "source": [ "###Then we load the necessary libraries" ] }, { "cell_type": "code", "metadata": { "id": "gEhEQF7ndoQp", "colab_type": "code", "colab": {} }, "source": [ "#load libraries \n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt \n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn import metrics\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.metrics import roc_auc_score\n", "from sklearn.metrics import roc_curve" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "tMqE4Mcjco5j", "colab_type": "text" }, "source": [ "###and store the data into a variable named dat" ] }, { "cell_type": "code", "metadata": { "id": "xNDigB8jd2eB", "colab_type": "code", "colab": {} }, "source": [ "dat=pd.read_csv(\"bank-additional-full_test.csv\",sep=';', error_bad_lines=False)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "3LI7FcJfcxAg", "colab_type": "text" }, "source": [ "###The first rows of the dataset are displayed below" ] }, { "cell_type": "code", "metadata": { "id": "GrWglXmOeAyV", "colab_type": "code", "outputId": "adcd3039-00bd-4479-ab36-b630b853db3b", "colab": { "base_uri": "https://localhost:8080/", "height": 226 } }, "source": [ "dat.head()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
agejobmaritaleducationdefaulthousingloancontactmonthday_of_weekdurationcampaignpdayspreviouspoutcomeemp.var.ratecons.price.idxcons.conf.idxeuribor3mnr.employedy
056housemaidmarriedbasic.4ynononotelephonemaymon26119990nonexistent1.193.994-36.44.8575191.0no
157servicesmarriedhigh.schoolunknownnonotelephonemaymon14919990nonexistent1.193.994-36.44.8575191.0no
237servicesmarriedhigh.schoolnoyesnotelephonemaymon22619990nonexistent1.193.994-36.44.8575191.0no
340admin.marriedbasic.6ynononotelephonemaymon15119990nonexistent1.193.994-36.44.8575191.0no
456servicesmarriedhigh.schoolnonoyestelephonemaymon30719990nonexistent1.193.994-36.44.8575191.0no
\n", "
" ], "text/plain": [ " age job marital ... euribor3m nr.employed y\n", "0 56 housemaid married ... 4.857 5191.0 no\n", "1 57 services married ... 4.857 5191.0 no\n", "2 37 services married ... 4.857 5191.0 no\n", "3 40 admin. married ... 4.857 5191.0 no\n", "4 56 services married ... 4.857 5191.0 no\n", "\n", "[5 rows x 21 columns]" ] }, "metadata": { "tags": [] }, "execution_count": 4 } ] }, { "cell_type": "markdown", "metadata": { "id": "2x4uT9PJc3oZ", "colab_type": "text" }, "source": [ "###and the column names are" ] }, { "cell_type": "code", "metadata": { "id": "wyXuVq0NhkcJ", "colab_type": "code", "outputId": "5bd80572-9595-41be-ed94-ae1b6379575c", "colab": { "base_uri": "https://localhost:8080/", "height": 90 } }, "source": [ "dat.columns.values" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['age', 'job', 'marital', 'education', 'default', 'housing', 'loan',\n", " 'contact', 'month', 'day_of_week', 'duration', 'campaign', 'pdays',\n", " 'previous', 'poutcome', 'emp.var.rate', 'cons.price.idx',\n", " 'cons.conf.idx', 'euribor3m', 'nr.employed', 'y'], dtype=object)" ] }, "metadata": { "tags": [] }, "execution_count": 5 } ] }, { "cell_type": "markdown", "metadata": { "id": "DQrGvTcvdBN8", "colab_type": "text" }, "source": [ "###The columns contain information on contacted customers by the marketing campaign as well as the outcome of the communication. The columns are: \n", "- age: the age of the customer,\n", "- job: the occupation of the customer,\n", "- marital: the marital status of the customer,\n", "- education: the educational level of the customer,\n", "- default: a flag indicating whether the customer has credit in default,\n", "- housing: a flag indicating whether the customer has a housing loan or not,\n", "- loan: a flag indicating whether the customer has a personal loan or not,\n", "- contact: the way the customer has being contacted with two possible values \"cellular\" and \"telephone\" (land line phone),\n", "- month: month of last communication with the customer for this campaign,\n", "- day: day of last communication with the customer for this campaign,\n", "- duration: duration of of last communication with the customer for this campaign,\n", "- campaing: number of contacts for this campaign and for the specific customer,\n", "- previous: number of contacts with the customer before current campaign (-1 fo no contact)\n", "- poutcome: outcome of the previous marketing campaign (categorical: 'failure','nonexistent','success'),\n", "- emp.var.rate: employment variation rate - quarterly indicator (numeric)\n", "- cons.price.idx: consumer price index - monthly indicator (numeric)\n", "- cons.conf.idx: consumer confidence index - monthly indicator (numeric)\n", "- euribor3m: euribor 3 month rate - daily indicator (numeric)\n", "- nr.employed: number of employees - quarterly indicator (numeric)\n", "- y: the outcome of the campaign for this customer\n", "###To make things simpler we will drop emp.var.rate, cons.price.idx, cons.conf.idx, euribor3m, nr.employed. We will also drop duration of last call since it is not known before the comunication with the customer has ended and the outcome of the campaign is known." ] }, { "cell_type": "code", "metadata": { "id": "lpmdiV8hhvHK", "colab_type": "code", "colab": {} }, "source": [ "dat = dat.drop([ 'duration','emp.var.rate', 'cons.price.idx',\n", " 'cons.conf.idx', 'euribor3m', 'nr.employed'], 1)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "mq1FcAvri2at", "colab_type": "code", "outputId": "35cbb28b-e04d-4422-dce0-953f7e55e232", "colab": { "base_uri": "https://localhost:8080/", "height": 72 } }, "source": [ "dat.columns.values" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['age', 'job', 'marital', 'education', 'default', 'housing', 'loan',\n", " 'contact', 'month', 'day_of_week', 'campaign', 'pdays', 'previous',\n", " 'poutcome', 'y'], dtype=object)" ] }, "metadata": { "tags": [] }, "execution_count": 7 } ] }, { "cell_type": "markdown", "metadata": { "id": "isOh8oGPhIYa", "colab_type": "text" }, "source": [ "###We can see that in most cases the campaing was not successful. I.e. only 11,26% of the customers singed up for a term deposit account" ] }, { "cell_type": "code", "metadata": { "id": "QPtxKA4HjHuL", "colab_type": "code", "outputId": "e1689278-6a3d-4fd5-84aa-c3ebdbb40301", "colab": { "base_uri": "https://localhost:8080/", "height": 72 } }, "source": [ "dat['y'].value_counts()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "no 36548\n", "yes 4640\n", "Name: y, dtype: int64" ] }, "metadata": { "tags": [] }, "execution_count": 8 } ] }, { "cell_type": "code", "metadata": { "id": "pI3MUUH0jVok", "colab_type": "code", "outputId": "5289cec3-de33-4489-cd4a-e65e5344c730", "colab": { "base_uri": "https://localhost:8080/", "height": 72 } }, "source": [ "dat['y'].value_counts()/dat['y'].count()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "no 0.887346\n", "yes 0.112654\n", "Name: y, dtype: float64" ] }, "metadata": { "tags": [] }, "execution_count": 9 } ] }, { "cell_type": "markdown", "metadata": { "id": "KnWlruqungE-", "colab_type": "text" }, "source": [ "" ] }, { "cell_type": "code", "metadata": { "id": "ndi4pyRYlpRx", "colab_type": "code", "outputId": "89261777-af92-4ba1-9e97-fdb2c91768b0", "colab": { "base_uri": "https://localhost:8080/", "height": 301 } }, "source": [ "sns.countplot(x='y',data=dat)" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 10 }, { "output_type": "display_data", "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "TG0RsiFZhg0w", "colab_type": "text" }, "source": [ "###The following table presents the basic stats for the numeric variables" ] }, { "cell_type": "code", "metadata": { "id": "rq9Egyjynjhv", "colab_type": "code", "outputId": "58c36ae3-03ed-42c4-f57a-0e921da6669c", "colab": { "base_uri": "https://localhost:8080/", "height": 300 } }, "source": [ "dat.describe()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
agecampaignpdaysprevious
count41188.0000041188.00000041188.00000041188.000000
mean40.024062.567593962.4754540.172963
std10.421252.770014186.9109070.494901
min17.000001.0000000.0000000.000000
25%32.000001.000000999.0000000.000000
50%38.000002.000000999.0000000.000000
75%47.000003.000000999.0000000.000000
max98.0000056.000000999.0000007.000000
\n", "
" ], "text/plain": [ " age campaign pdays previous\n", "count 41188.00000 41188.000000 41188.000000 41188.000000\n", "mean 40.02406 2.567593 962.475454 0.172963\n", "std 10.42125 2.770014 186.910907 0.494901\n", "min 17.00000 1.000000 0.000000 0.000000\n", "25% 32.00000 1.000000 999.000000 0.000000\n", "50% 38.00000 2.000000 999.000000 0.000000\n", "75% 47.00000 3.000000 999.000000 0.000000\n", "max 98.00000 56.000000 999.000000 7.000000" ] }, "metadata": { "tags": [] }, "execution_count": 11 } ] }, { "cell_type": "code", "metadata": { "id": "c3Wc6LOn_eBS", "colab_type": "code", "outputId": "14dce6be-8e66-4fe4-90ce-89ac1725a10a", "colab": { "base_uri": "https://localhost:8080/", "height": 311 } }, "source": [ "dat.dtypes" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "age int64\n", "job object\n", "marital object\n", "education object\n", "default object\n", "housing object\n", "loan object\n", "contact object\n", "month object\n", "day_of_week object\n", "campaign int64\n", "pdays int64\n", "previous int64\n", "poutcome object\n", "y object\n", "dtype: object" ] }, "metadata": { "tags": [] }, "execution_count": 12 } ] }, { "cell_type": "markdown", "metadata": { "id": "c9nOKU0xhsdL", "colab_type": "text" }, "source": [ "###In order to create a classification model, we will convert categorical, discrete variables into numeric variables." ] }, { "cell_type": "code", "metadata": { "id": "dBRgIuYFAHeF", "colab_type": "code", "outputId": "29f365c0-753d-4751-f4c1-5ff53a1cbd08", "colab": { "base_uri": "https://localhost:8080/", "height": 311 } }, "source": [ "cat_columns = dat.select_dtypes(['object']).columns\n", "dat[cat_columns] = dat[cat_columns].apply(lambda x: x.astype('category'))\n", "dat[cat_columns] = dat[cat_columns].apply(lambda x: x.cat.codes)\n", "dat.dtypes" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "age int64\n", "job int8\n", "marital int8\n", "education int8\n", "default int8\n", "housing int8\n", "loan int8\n", "contact int8\n", "month int8\n", "day_of_week int8\n", "campaign int64\n", "pdays int64\n", "previous int64\n", "poutcome int8\n", "y int8\n", "dtype: object" ] }, "metadata": { "tags": [] }, "execution_count": 13 } ] }, { "cell_type": "markdown", "metadata": { "id": "4YEqlLXBh-w0", "colab_type": "text" }, "source": [ "###Then we will split the dataset in two subsets/parts:\n", "- a train subset that will be used for creating a classification model,\n", "- a test subset for evaluating the model we created" ] }, { "cell_type": "code", "metadata": { "id": "LKxzlr9dlBFl", "colab_type": "code", "colab": {} }, "source": [ "X_train, X_test, y_train, y_test = train_test_split(dat.drop('y',1) , dat['y'], test_size=0.3, random_state=0)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "RV1PMzvOijRW", "colab_type": "text" }, "source": [ "## Model creation \n", "###The model we will create, will be a logistic regression model.\n", "###The following code creates the model and displays it's accuracy." ] }, { "cell_type": "code", "metadata": { "id": "bmXkZlnGBB9z", "colab_type": "code", "outputId": "48303a1d-1b8b-4086-a4ef-0d892b858407", "colab": { "base_uri": "https://localhost:8080/", "height": 92 } }, "source": [ "logreg = LogisticRegression()\n", "logreg.fit(X_train, y_train)\n", "y_pred = logreg.predict(X_test)\n", "print('Accuracy of logistic regression classifier on test set: {:.2f}'.format(logreg.score(X_test, y_test)))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n", " FutureWarning)\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "Accuracy of logistic regression classifier on test set: 0.90\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "xxzRJyL5jhs_", "colab_type": "text" }, "source": [ "###We can create a confussion matrix displaying the real and predicted outcome for the test test.\n", "We see that:\n", "- 10.808 customers were classified correctly as not having signed up for a term deposit account,\n", "- 161 customers were classified wrongly as having signed up for a term deposit account,\n", "- 1.128 customers were classified wrongly as not having signed up for a term deposit account,\n", "- 260 customers were classified correctly as having signed up for a term deposit account." ] }, { "cell_type": "code", "metadata": { "id": "fIwPrYPMBlAr", "colab_type": "code", "outputId": "b5d21f6f-0b91-40b0-b835-e465c589d9d9", "colab": { "base_uri": "https://localhost:8080/", "height": 54 } }, "source": [ "conf_matrix = confusion_matrix(y_test, y_pred)\n", "print(conf_matrix)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "[[10808 161]\n", " [ 1128 260]]\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "HKlfbu8skZav", "colab_type": "text" }, "source": [ "By dividing with the total number of customers in the test set, we get the following percentages\n", "Another way to see it is that:\n", "- 87,46% of the customers were classified correctly as not having signed up for a term deposit account,\n", "- 1,3% of the customers were classified wrongly as having signed up for a term deposit account,\n", "- 9,12% of the customers were classified wrongly as not having signed up for a term deposit account,\n", "- 2,1% of the customers were classified correctly as having signed up for a term deposit account." ] }, { "cell_type": "code", "metadata": { "id": "PrBjM-4NBob6", "colab_type": "code", "outputId": "f7f570f1-2ee4-4850-a816-b6f0b1093b26", "colab": { "base_uri": "https://localhost:8080/", "height": 54 } }, "source": [ "conf_matrix = confusion_matrix(y_test, y_pred)\n", "conf_matrix=conf_matrix/y_test.size\n", "print(conf_matrix)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "[[0.87464595 0.01302905]\n", " [0.09128429 0.02104071]]\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "KYOtxEgumXZN", "colab_type": "text" }, "source": [ "Hence, model's accuracy is:" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "outputId": "80a1f8fe-a2cf-4bc1-f7b4-f57540c61e34", "id": "CKyN0au8lWca", "colab": { "base_uri": "https://localhost:8080/", "height": 35 } }, "source": [ "(conf_matrix[0,0]+conf_matrix[1,1])" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0.8956866553370559" ] }, "metadata": { "tags": [] }, "execution_count": 18 } ] }, { "cell_type": "markdown", "metadata": { "id": "uqw6wk8QldfH", "colab_type": "text" }, "source": [ "Another way to see it is by examining the prediction accuracy for each outcome. Seen in this way we see that:\n", "- 98,53% of the customers that did not set up a term deposit account were classified correctly while on the other hand,\n", "- 18,73% of the customers that did set up a term deposit account were classified correctly" ] }, { "cell_type": "code", "metadata": { "id": "OZd1cWNWCmjv", "colab_type": "code", "outputId": "da7f3902-ca79-48f1-f7c0-e51c8e7be7e8", "colab": { "base_uri": "https://localhost:8080/", "height": 54 } }, "source": [ "conf_matrix = confusion_matrix(y_test, y_pred)\n", "categories_size=np.array([10969,1388])\n", "conf_matrix=conf_matrix/categories_size[:,None]\n", "print(conf_matrix)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "[[0.98532227 0.01467773]\n", " [0.81268012 0.18731988]]\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "dv0_w1Uzr4ZQ", "colab_type": "code", "outputId": "b595c620-b8c8-4321-ad35-df58f02985ff", "colab": { "base_uri": "https://localhost:8080/", "height": 295 } }, "source": [ "logit_roc_auc = roc_auc_score(y_test, y_pred)\n", "y_pred_prob=logreg.predict_proba(X_test)\n", "fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob[:,1])\n", "plt.figure()\n", "plt.plot(fpr, tpr, label='Logistic Regression (area = %0.2f)' % logit_roc_auc)\n", "plt.plot([0, 1], [0, 1],'r--')\n", "plt.xlim([0.0, 1.0])\n", "plt.ylim([0.0, 1.05])\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('Unbalanced dataset - Receiver operating characteristic')\n", "plt.legend(loc=\"lower right\")\n", "plt.savefig('Log_ROC')\n", "plt.show()" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEWCAYAAAB42tAoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4U2X7wPHv3VIoo7J32UOWgFAB\nQRBFZLwoDtzyIuBARPAF3KCIICr8xIUCLhQcIKCiIKAIuECgyEbZo2wKLbN0Pb8/njSkpSOFpidp\n78919Wpyzsk5d5KT3DnPFGMMSimlVEaCnA5AKaWUf9NEoZRSKlOaKJRSSmVKE4VSSqlMaaJQSimV\nKU0USimlMpVvE4WITBGRURf52BEiMi2nY7oUIrJLRG7wctsHROR3X8eUH4hIVRE5JSLBTsfiNBHZ\nKCLtc/mYXp/3/k5EJorI8It4nM/PwYBNFCJiRKR2mmV+9wUe6HLrNc2J47iSf7zrQ3NMRH4SkXo5\nFWN6jDF7jDHFjDFJvjyOv0nvh5YxpqExZolDITlKRJaIyIOXsg9jTD9jzMteHCtVcsyNczBgE4VS\nGXjdGFMMqAzsAz5yOJ6LIiIF8uOxnSKWY9+H/n5FmmcThYi0F5EoERkiIodF5ICI9E6zWRnXr86T\nIrJURKp5PP4tEdkrIidEJFJE2mZyrK9F5KCIxIrIryLS0GPdFBGZICJzXcf5S0Rqeaxv6IrhmIgc\nEpHnXMuDROQZEdkuItEiMkNESnk8rqeI7Hatez6L16K0iMxxPZcVQK0069N9riLSGXgOuMv1K32t\na3lvEdnsej47ROQRj32VEZEfRCTG9Zx+S/kAikglEZklIkdEZKeIDMzsOJfCGHMWmAE0TfNc+7hi\nPy4iC9K859l+L0SkuuvqtoCI3CUiq9Ic738iMsd1u5CIjBORPa79TxSRwq51Kefr0yJyEPgk7XNy\nxTHM9b4fFpHPRKR4mjgeFpH9rvN9aJrHZvUc+orIHuAX1/J0z2sReRi4D3jK9X5971ru/qUr9gpx\nhivGk2KLpSI84mkmIn+71n0tItMlk6JgEXnI45zbJCLNPFY3FZF1rjini0io6zElXefiEdf7/YOI\nhHvsc4mIjBaRP4AzQM3Mzm3XY7qLyBqxn5XtItJZREYDbYF3Xa/Hu65t63mcT/+KyJ0e+5kiIu+L\nyDwROQ1cJx5XaZLB50hEpgJVge9dx3rK8xx0PbaUiHziOg+Oi8i3Gb2uXjPGBOQfYIDaaZaNAKa5\nbrcHEoGRQAjQ1XUylHStnwKcBNoBhYC3gN899nU/UBooAAwBDgKhaY/jut8HCHPt501gjce6KUA0\n0MK1r8+Br1zrwoADrv2Huu63dK0bBCwHwl37nQR86VrXADjlEfsbrud6Qwav1VfYL82iQCPsL+2L\neq6uZf/BJhsBrnW9rs1c68YAE12veQj2AyTYHyWRwAtAQaAmsAPolNFxLuKcmAKMct0uCkwF1nqs\n7w5sA+q7nusw4M9LfC+qY8/FAkAR7DlVx+OYK4G7XbfHA3OAUq79fw+MSXO+vuY6RuF0nl8fV/w1\ngWLAbGBqmji+dD33K4AjKeeEl8/hM9djC3t5Xo9KE98uj+ONAOKwn7tg13mx3LWuILDbFVMIcBsQ\nn3Z/Hvu9A3vOXoU9l2oD1TyOuQKo5HpdNwP9XOtKA7e73pcw4GvgW4/9LgH2AA1d718ImZ/bLYBY\noCP2fK4M1PPY14Me+y4K7AV6u/Z9JXAUaODx+sUCbVz7CiX1+Zvu5yjt65z2HHTdnwtMB0q6Hnvt\nJX/f+vLL3Jd/eJcozqa8eK5lh4FWHm/UVx7rigFJQJUMjnccaJL2OOlsV8IVW3GP43zosb4r8I/r\n9j3A3xnsZzPQweN+RSDBddK9kCb2otgP2gWJAvshTUg5oV3LXsEjUVzsc/XY/ltgkOv2SOC7dN6b\nlsCeNMueBT7x9jhenBNTsF9OMUAysBNo7LH+R6Cvx/0g7BdBtUt4L9J+SKcBL7hu18EmjiLYL57T\nQC2P/VwN7PQ4X+NxJegM4lgE9Pe4f3k6cXi+z68DH2XjOdTM5NjpnddZJYqfPdY1AM66brfDfvGL\nx/rf0+7PY92ClPMrnXW7gPvTPOeJGWzbFDjucX8JMDIb5/YkYHwG2y0hdaK4C/gtzTaTgBc9Xr/P\n0jl/UxJFup+jtK+z6777HHS9r8m4fhDn1F8gFz0lYbOlpxDsyZ8i2hiT6HH/DDYhpNibcsMYcwo4\nhv1lgogMdV2CxopIDFAcKJM2CBEJFpFXXZehJ7BvImm2PZhBDFWA7Rk8v2rAN65LzxjsBz0JKO+K\n0TP209irlvSUxZ5Aez2W7U7zHLx6rh7bdxGR5a5L4hhs8kvZfiz2V+9C16X7Mx7Pp1LK83E97jnX\n88mSiNznutQ+JSI/ZrLpOGNMCeyH5yz2yzRFNeAtj+Mfw36BV+bi34u0vsAmHYB7sb9gz2DfhyJA\npMd+5ruWpzhijInL5LlVIvV7txv73nrGkfZ9rpSN5+B+rJfndVbSnvehruKRSsA+4/qWSyfutDJ7\nb9I7TjEAESkiIpPEFtWdAH4FSkjq+oBUx83i3M4qDk/VgJZpzvf7gAoZHTuNjD5HWakCHDPGHPdy\ne68EcqLYg/0y8FSDNF+CWaiSckNEimEvXfeLLaN/CrgTm5lLYC8TJZ193Ist0rgB+wWbElN626a1\nF1uMkNG6LsaYEh5/ocaYfdgiEs/Yi2Avs9NzBFukUcVjWVWPx2b1XD0/zIhIIWAWMA4o79p+Xsr2\nxpiTxpghxpiawM3AYBHp4Ho+O9M8nzBjTNf0jpOWMeZzY1t2FDPGdMlsW9f2e7BFG2+Jqx7AFcMj\naWIobIz5k4t/L9L6CSgrIk2xCeML1/Kj2MTV0GMfxY2teHeHncXT2o/9AkpRFfveHvJYlvZ93p+N\n5+B5/KzO66xizcwBoLKIeH5GqmS0sSv2Wpmsz8gQ7A+FlsaYy7BXMpD6s+l+Hlmd21nEkfb12Ass\nTfN6FzPGPJrJY86vyPhzlOnjXMctJSIlMtkm2wI5UUwHholIuKuS5wbgJmBmNvbRVUSuEZGCwMvY\nMtS92PLMROyXbAEReQG4LIN9hAHnsL/oi2CLdbz1A1BRRJ4QW9EZJiItXesmAqPFVdkqImVFpLtr\n3Uygm0fsI8ngvTS2ydxsYITrF1YDoFea+DN7roeA6nK+RUhBbJn1ESBRRLoAN6ZsLCLdRKS260sg\nFvurNRlbjnxSbGVtYdcv1kYiclUGx7lkxpifsF+UD7sWTQSelfOVssVF5A7Xuot9L9IeMwFbFj4W\n+8PjJ9fyZOADYLyIlHPtp7KIdMrGU/oS+J+I1HD9sHkFmJ7mqnm4631uiC0fn57d5+CS1Xl9iIwT\na1aWYc+LAWIbAXTHlv9n5ENgqIg0F6u2eDRCyEQYNjnHiK24fzGL7TM9t7Et6HqLSAfXd05lOd/8\nOu3r8QNQV2yjkxDX31UiUt+LuDP7HKV3LDdjzAFsEet7YivzQ0SkXXrbZkcgJ4qRwJ/Yss3j2LLJ\n+4wxG7Kxjy+wJ88xoDm2Uhdsmeh8YAv2CiWOjC8TP3Ntsw/YhK0w9Iox5iS2Yuwm7OXzVuA61+q3\nsBWfC0XkpGu/LV2P2wg85or/APb5R2VyqAHYy/GD2HLQTzzWZfVcv3b9jxaR1a6YB2Irx49jf3nO\n8di+DvAztrJ9GfCeMWaxK2F1w5YT78T+wv4Q+2v1guNk8lyyayy2dU4hY8w32Mrir1xFERuALnDx\n70UGvsD+Ev86zZf409jihOWu4/9M6qKxrHyMraD/FfsaxgGPp9lmqesYi7DFcAsv8jlkdV5/BDRw\nFatkq1WNMSYeW4HdF1ufdD/2i/VcBtt/DYzGvq4nsfUGpdLbNo03gcLYc2059jzPLK5Mz21jzAps\n8h2P/fJeyvkrvLeAHmJbGb3t2teNwN3YHysHOd9QwRvpfo5c68ZgfyTHiEfLNg89sUXw/2DrZZ/w\n8pgZSqlFV0oFMBGpjk0eIWmSU0AQkb+wldCfZLmxynWBfEWhlApQInKtiFRwFT31AhqTxS9+5Zx8\n1wNTKeUXLud8354dQA9X+bryQ1r0pJRSKlNa9KSUUipTAVf0VKZMGVO9enWnw1BKqYASGRl51BhT\nNustLxRwiaJ69eqsWrUq6w2VUkq5iUh2OiOnokVPSimlMqWJQimlVKY0USillMqUJgqllFKZ0kSh\nlFIqU5oolFJKZcpniUJEPhY7r2+6o7m6hgt+W0S2iZ3vtll62ymllHKWL68opgCdM1nfBTuUbh3s\nfAHv+zAWpZTKlxKSkolLSLqkffisw50x5lfX0McZ6Y6dM9Zgx+cvISIVdWAwpZTKnjPxiazZG8O5\nhGSijp/h4z92EXX8DCFBQtsNv9Np67JL2r+TPbMrk3qCnCjXsgsShYg8jGuWsqpVq6ZdrZRS+Up8\nYjK//HOYqct38ce26HS3CY89xLilH9Bq83IO1cjO/FgXCoghPIwxk4HJABERETrcrVIqzzPGcDre\nFhmdOJvAs7PXUzgkmKVbjnA2TVFSk/DitKtbliurlqBU0UKUKRpCeMd2sOdf+L//o/zAgRASctGx\nOJko9pF6QvVw1zKllMrTjDHsj43jbHwSR0+d458DJ5iwZDs1ShcFgehT59h+5HS6j61SqjBRx89y\na9PKPN6hDjXKFD2/8s8/ofIVEFYUPvwQypSBKlXS3U92OJko5mAnV/8KO3dvrNZPKKXyImMM24+c\nYvzPW0lMSmbBxkPpbnfk5Dla1SxF2bBCFAgKonzxUNrWLgOACPS9pgYicuEDo6PhmWdscnjxRRgx\nAq68Msfi91miEJEvgfZAGRGJAl4EQgCMMROBeUBX7ETwZ7CTliulVEBLTErm7UVbSTIGQdgfc5bZ\nf19YWBIWWoCR3RsSHBREaIEgGoeXoELx0OwdzBj47DMYOhSOH4cnn7R/OcyXrZ7uyWK9AR7z1fGV\nUiqnJSQlsz/mLHPXH+BATBzr98USHCSs3RtD4YLBhAQHcex0vHv74CAhKdlWq9aveBl92lTn9mbh\nBAWlc1VwMZ5+GsaOhdatYeJEuOKKnNlvGgFRma2UUrnp9LlEjp2OZ/We48xbf4Dd0WfYF3OWk3GJ\nF2zbokYpWtUsTfTpeCKqlcRgiD2byPBu9SkXls0rBG+cPQunT9v6h759oU4d+z/Id93iNFEopfK9\n2DMJbDl8kt+2HGHybzuIS0i+YJtKxUOpWbYYrWqUom75MFrXLk25sFCCc+rqwBvz58Njj0HTpjBr\nFlx+uf3zMU0USql8yRjD7ugzzIyM4t3F21Ktq1GmKNfXK0e9CmE0r1aSmmWLORSly/798MQT8PXX\nNjEMGJCrh9dEoZTKF4wxLP73MBv2nWDt3hgW/XM41frebarT/nKbHMpf5oMio4u1aBHceivEx8PL\nL9vK6kKFcjUETRRKqTzpZFwCh06c42BsHM99s56YM/GcSFPHUKZYQfq3r033ppUoXSx3v3yzlJBg\nO8k1aQJdu8KoUVC7tiOhaKJQSgW8pGTDmfhE9sWcZe3eGIZ9u4GEpAsHcahXIYzRtzaiTvkwihYs\nkLv1C946cQKGD4e//oI//rCV1l995WhImiiUUgHl1LlE3vllK3PW7KdyicIkJCWzNio23W0HdqhD\nxeKh1C5XjIhqJdPvrOYvjIGZM2HQIDh4EPr3h3PnoEgRpyPTRKGU8n+JSckcOnmOV+ZtZu668wM4\nHIiN4+qapWkSXpyw0BAiqpekdrliNAkvQZVSzn/Beu3IEejVC3780fao/u47uOoqp6Ny00ShlPJL\nycm28nnKn7v4bevRVOu6Na7I2B5NKFww2KHocthll8HRo/Dmm7b5awH/+mr2r2iUUvmWMYZP/9zF\nqXOJjFu4JdW6ggWCaFWzNB0blOfmxpUoXuTiR0L1G7/+CqNH2/4QxYrB8uU+7TR3KTRRKKUctXF/\nLH2mrOTQiXMXrLsrogo3NanENXXKOBCZjxw9apu4TpkC1avDrl3QqJHfJgnQRKGUykUHY+PYHX2a\nHUdPM235bjbuP5FqfY0yRfnkgauoXLIwIcH++8V5UYyBTz6xSeLECXj2WRg2zC8qq7OiiUIp5RPJ\nyYYth0+S6Gqm+tBnqzgQG3fBdi1rlKL/dbW5tm7Z3A4x902bBg0a2AH8GjZ0OhqvaaJQSuWohKRk\nHvx0FUu3HEl3fa+rq9GhfnmqlS5C1VJF/LvJ6qU6cwZeeQX69YPwcFsfUby4XxczpUcThVLqkq3a\ndYzF/x5m/b4T/OqRIEoWCeG12xsDtlPcdfXKERqSR1oqZWXePNuCadcuqFwZHn0USpZ0OqqLoolC\nKZUta/bG0PPDvzh5LpGQYLmgB3StskUpVCCYOQPaUCCv1TN4IyrKDuA3axbUrw9Ll0K7dk5HdUk0\nUSilvGKMods7v6eqgO7SqCLlLyvEwRPnuK1ZZSKqlSQsNA80Xb0Uo0fD3Lm2yGnIEChY0OmILpkm\nCqVUhuZvOMiCjQf5efOhVJP2DLy+NoNv9P08CAFjxQooXNjOMDdqlG3ZVLOm01HlGE0USqkLRO4+\nxu3vL0u1rEqpwlQuUZh37mlG2TA/G2nVKbGx8Nxz8P770K0bzJkDpUvbvzxEE4VSCrCtlaYu282B\n2LN88NtOAMoUK8Skns1oHF4i7/VruBTGwPTp8L//weHD8Pjjdq6IPEoThVL5nDGGV3/8h2nLd3M6\nPsm9vG75Yiz837UORubHpk2D//4XIiLghx+geXOnI/IpTRRK5VMn4hJo8+ovqeoemlYpwScPXMVl\nhUP8c64GJ507Bzt22JZMd94JiYk2WQTn/ea+miiUyieMMRw/k8DyHdFM/nUHa/bGuNfdGRHO8/9p\nQPHC+bzFUkYWL7b9IM6cga1b7VSkvXs7HVWu0UShVB5jjO3XMGftfg67Bto7evock5buuGDb+1pW\n5anO9TRBZOTwYRg6FKZOta2YJk/O9fmq/YEmCqXygDPxiYyYs5EdR06zavfxDLdrXq0k19crR7s6\nZWlU+bK8PXzGpdq2DVq0gFOn4Pnn7V/hwk5H5QhNFEoFoIOxcXz+1242HzjB79uOEpeQ7F5XuURh\nihYK5rrLy3Ht5WVpHF4CgILBQRQsoC2XsnTihJ1IqFYt6NsX+vSx9RL5mCYKpQLEnugzTFi8jemr\n9qa7vu81NRhwXW1KFg38nsCOOH0aRo6EDz6AdevsIH5jxzodlV/QRKGUHzuXmMSXf+1hxPebLlj3\ndOd63HVVFUppYrh0338PAwbAnj32KiIA5ojITZoolPIDx0/HM2t1FNsOn+KrlfaKoUCQkJh8fsC9\nsEIFeKZrPXo0D6dQgbzfJDNXJCbapq7ffGPnh/jtN7jmGqej8juaKJRy0Jq9MYz/aUu6czc82NaO\nFRSXkESv1tWpUaZoboeXdxkDIlCgAFSsCK++antZ54EB/HxBE4VSuWzT/hP8tOkQX67Yw8ET52d8\nu/uqKjxxQ10qFA91MLp8YPlyO0/EBx9As2YwYYLTEfk9TRRK5YLYswm0H7uYggWCOOTq25Di1duu\n4D+NK+rw3L52/LgdwG/SJKhUyd5XXvFpohCRzsBbQDDwoTHm1TTrqwKfAiVc2zxjjJnny5iUyi1x\nCUm8t2Q7J+MS+OSPXe7lHRuU54b65ejcqCKXhRbQvgy5Yfp0GDgQjh61kwq99BKEhTkdVcDwWaIQ\nkWBgAtARiAJWisgcY4xn841hwAxjzPsi0gCYB1T3VUxK+VpysiFyz3GW/nuEdxdvS7WuXd2yfNQr\nQkdhdcI//0D16jB/Plx5pdPRBBxfXlG0ALYZY3YAiMhXQHfAM1EY4DLX7eLAfh/Go5RPLP73MP2n\nreZsQlK667eO7qLJIbfFxcFrr9k6iJtuskVOw4bliwH8fMGXiaIy4NkzKApomWabEcBCEXkcKArc\nkN6ORORh4GGAqlWr5nigSl2MvcfO0Pb1xe77pYoWpH7FMK6sUpJm1UrQpnYZbcbqhJ9/hv797eB9\nQ4bYRBGi9T+XwunK7HuAKcaY/xORq4GpItLIGJPsuZExZjIwGSAiIsKksx+lctWqXcfoMfH8DHCf\nP9iSNrXLOBiR4tAhGDwYvvgCateGhQuhY0eno8oTfJko9gFVPO6Hu5Z56gt0BjDGLBORUKAMcNiH\ncSl10WLOxDPoqzXufg9t65Rhat+0F8rKET/9BDNnwgsvwLPPQqg2M84pvkwUK4E6IlIDmyDuBu5N\ns80eoAMwRUTqA6HAhT2PlHJAQlIy6/fFMn/DQT76fSdJyakvZgdcV5uhnS53KDoFwNq1toipRw+4\n7z5o0wZq1HA6qjzHZ4nCGJMoIgOABdimrx8bYzaKyEhglTFmDjAE+EBE/oet2H7ApAymr5SDDp2I\no+Uri1ItK1ggiBsblKdKqSL0b19L+z046dQpePFFeOst25rplltsL2tNEj7h0zoKV5+IeWmWveBx\nexPQxpcxKJUdi/85TO8pK933K1wWytg7GtOoUnEdldVffPstPP44REXBww/DmDE2SSif0VdXKeDf\ngyfp9s5vJCSdv6Ad1KEOT9xQRzvE+ZP16+HWW+GKK2wnutatnY4oX9BEofK9MT9udk8TGhwkjLip\nAT2vru5sUOq8hAQ7quv119sEMXeubc2kTV5zjSYKlW/NXXeAx75Y7b7/+u2NufOqKpk8QuW6P/+E\nfv1g40b491/b7LVrV6ejync0Uah8Z8eRU1z/f0vd90sVLcjD7WpqkvAnx47BM8/YEV6rVIHZs22S\nUI7QRKHyhb92RDN79b4LphGd8cjVtKhRyqGoVLri4qBpU9i/3/asHjECihVzOqp8TROFyrOWbY9m\n4tLtF0wKVLNMUfpdW4sezcMJCtKKar8RFWXnqQ4NhZdftsmiSROno1JoolB5VNr6B4BxdzThpiYV\ndfwlf3P2rG3i+tprtmf1TTdBr15OR6U8eJUoRKQgUNUYsy3LjZVykDGGdVGx7iTxeo/G9GimVw5+\na+FCO4Df9u1w//3QooXTEal0ZJkoROQ/wBtAQaCGiDQFXjTG3Orr4JTKjp1HT3PduCXu+/+5oiJ3\nRmgFtd96/HF4912oU8eO+Nqhg9MRqQx4c0UxEjs8+GIAY8waEdHmB8qvjJm3mUm/2r4QRQoG8/79\nzWlXR0dz9TtJrjk7goOhVSsoUwaefloH8PNz3iSKBGNMTJreqToek/IbT89c527NdFuzyvzfHU20\nN7U/Wr3a9ono2dNeTdx3n9MRKS95kyg2i8idQJBrJNiBwHLfhqVU5g7EnmXe+oO8/MP5CROXDG1P\n9TJFHYxKpevkSTv099tvQ9myULGi0xGpbPImUQwAXgCSgdnY0WCf82VQSmUkISmZV3/8h49+35lq\n+ccPRGiS8EcLF0KfPrZPRL9+8MorUKKE01GpbPImUXQyxjwNPJ2yQERuwyYNpXLFuqgYbn73j1TL\nHmlXkwfb1qRsWCGHolJZKlgQypWDWbOgpU7wFKgkq+kfRGS1MaZZmmWRxpjmPo0sAxEREWbVqlVO\nHFo5ZMXOY9w5yU47WjA4iN7XVKd7k8o0qHSZw5GpCyQkwBtvwIkTMHq0XZacDEFBzsalUr63Iy7m\nsRleUYhIJ+w0pZVF5A2PVZdhi6GU8rlpy3cz7NsNADx4TQ2GdWvgcEQqQ7//fn4AvzvuOJ8gNEkE\nvMyKng4DG4A4YKPH8pPAM74MSqnDJ+Po/OZvHDsdD0DHBuU1Sfir6GjbxPWjj6BqVfj+e+jWzemo\nVA7KMFEYY/4G/haRz40xcbkYk8rH/t5znHEL/+WPbdHuZZN7NufGhhUcjEplKjoavvoKnnrKtm4q\nqo0K8hpvKrMri8hooAHg7hVjjKnrs6hUvvTBrzsYPW+z+/5j19Vi6I2Xa58If7R5M8yYYeetrlsX\n9uyBUjoKb17lTaKYAowCxgFdgN5ohzuVwz75Y6c7SYy6pRH3t6rmcEQqXWfO2ErqsWPt0N99+9oR\nXzVJ5Gne1DIVMcYsADDGbDfGDMMmDKVyxHdr9vHS97bj3Ee9IjRJ+Kv586FRI9sX4t577Yxz4eFO\nR6VygTdXFOdEJAjYLiL9gH1AmG/DUvnF3HUHGPTVGgDeuedKOtQv73BEKl2nTtmhN0qXhsWLoX17\npyNSucibK4r/AUWxQ3e0AR4C+vgyKJU/TPljp3s48C6NKnBTk0oOR6RSSUqCadPs/2LF7Aiva9dq\nksiHsryiMMb85bp5EugJICKVfRmUyvsWbT7ECFdx07Nd6vHItbUcjkilEhkJjzxi/xcuDLffrrPN\n5WOZXlGIyFUicouIlHHdbyginwF/ZfY4pTISl5DEtWMX0/dT27v+kXY1NUn4k9hYGDjQTiC0b59t\n9nrbbU5HpRyWWc/sMcDtwFpgmIj8APQHXgP65U54Kq+IPZPAA1NW8PeeGPeyt+5uSvemenHqV26/\nHX75BR57DEaNguLFnY5I+YHMip66A02MMWdFpBSwF7jCGLMjd0JTecH6qFgGz1jD1sOn3Ms61CvH\nW/dcSbFCOmW7X9ixww7/HRZmm74GBcFVVzkdlfIjmX1S44wxZwGMMcdEZIsmCeUNYwx3TV7Oip3H\nUi2/r2VVXrypIQUL6Ng/fiE+HsaNg5dftsVNr72mI7yqdGWWKGqKSMpQ4oKdL9s9tLgxRgsu1QWW\nbY/mng/Oz2v1cLuaVClZmJ5XV3cuKHWhX3+1A/ht3gw9ethEoVQGMksUt6e5/64vA1GBLSnZ8OTX\na5n99z73so0vdaKoFi/5n/HjYfBgqF4d5s6Frl2djkj5ucwGBVyUm4GowJV2UqFXb7uCu66qomM0\n+ZPkZDh92tZD/Oc/cOQIDBsGRYo4HZkKAPpzT120HUdOMeTrtalaMq0fcSNhoSEORqUusHGjLWZK\nmWmubl07DIdSXvJpohCRzsBbQDDwoTHm1XS2uRMYgR1ocK0x5l5fxqQuXVKyodZz81Ite+y6WjzZ\nqZ5DEal0nTljK6rHjbPNXPv0AWNAr/RUNnmdKESkkDHmXDa2DwYmAB2BKGCliMwxxmzy2KYO8CzQ\nxhhzXETKeR+6csKvW47w34+w34eXAAAgAElEQVRXuO+Pu6MJnRtV0Kau/ubvv21HuV27oHdveP11\nKFPG6ahUgMry0y0iLYCPgOJAVRFpAjxojHk8i4e2ALalNKkVka+wfTM2eWzzEDDBGHMcwBhzOPtP\nQeWG2DMJNBm5MNUyLWbyQylXDFWr2r9PP4V27ZyOSgU4bxq0vw10A6IBjDFrgeu8eFxlbCe9FFGu\nZZ7qAnVF5A8RWe4qqlJ+5u1FW1Mlick9m7NzTFdNEv4kMRHefBM6dLCD+JUuDUuXapJQOcKb8oIg\nY8zuNC1YknLw+HWA9kA48KuIXGGMifHcSEQeBh4GqFq1ag4dWmXljZ+28MnvOzl5LtG9bPsrXQkO\n0jJuv7Jiha2s/vtv6NIFTpyAkiWdjkrlId4kir2u4ifjqnd4HNjixeP2AVU87oe7lnmKAv4yxiQA\nO0VkCzZxrPTcyBgzGZgMEBERobPr+diWQye5cfyv7vvVShdhWt+WVCmlTSn9yqlT8PTT8P77ULEi\nfP21HatJK6tVDvMmUTyKLX6qChwCfnYty8pKoI6I1MAmiLuBtC2avgXuAT5xjVBbF9BhQhz0xV97\neO6b9e77859oS70KlzkYkcpQSAgsWQKPP25bN12m75PyDW8SRaIx5u7s7tgYkygiA4AF2OaxHxtj\nNorISGCVMWaOa92NIrIJW5z1pDEmOrvHUjmj/+eRzFt/EIC7IqrwWo/GDkekLrBtG4wcCRMm2M5z\nkZEQGup0VCqPE2MyL8kRke3Av8B0YLYx5mRuBJaRiIgIs2rVKidDyJOenb2eL1fsAeDHQW2pX1F/\nnfqVc+dsE9fRo6FgQTv0Rtu2TkelAoiIRBpjIi7msVm2ejLG1AJGAc2B9SLyrYhk+wpD+a9jp+Pd\nSeKTB67SJOFvFi+2s8u98ALccgv8848mCZWrvBrv2RjzpzFmINAMOAF87tOoVK5Ztj2aZi//BMBT\nnS/nunra59GvGGOvIhISYP58O+NcJZ1bXOUubzrcFcN2lLsbqA98B7T2cVwqF8QnJruHBG9bpwz9\n2umUpH4hORk++gg6d4YqVWDqVChRws5drZQDvLmi2AC0Al43xtQ2xgwxxuic2QEsOdlw7wfLqTvs\nRwBKFS3I1L4tCdL+Ec5btw6uuQYefhg+/NAuq1hRk4RylDetnmoaY5J9HonKFcdOx7uLmgCKFw7h\nr+c6OBiRAmyfiJdesnNFlCwJU6bAf//rdFRKAZkkChH5P2PMEGCWiFzQNEpnuAs8Yxf8w4TF2wEo\nUjCYFc/foIP5+YsRI+D//g8efBBefdUOwaGUn8jsW2K667/ObJcHbD9yyp0kOjYozwf/vahWcion\n7d1rJxOqVw+eeca2aLrmGqejUuoCGdZRGGNSxpKub4xZ5PmHrdRWAeJMfCId/m8pAC/d3FCThNMS\nE+GNN6B+fXjkEbusTBlNEspveVOZ3SedZX1zOhDlO3dOWgZAgSChV+vqzgaT3y1fDhERMGQItG9v\nhwFXys9lVkdxF7ZJbA0Rme2xKgyISf9Ryp8kJCVz9ZhFHD0VD8Dml3UUd0fNnQs33WT7QcyebYua\ndAA/FQAyq6NYgZ2DIhw7U12Kk8DfvgxK5Yw7Jy1zJ4nZ/VsTEuxV/0qVk4yB/fuhcmW44QY7TtOg\nQXacJqUCRIaJwhizE9iJHS1WBZj5Gw7w9x574bdzTFdEf7nmvi1boH9/+3/TJihWDIYNczoqpbIt\nw5+YIrLU9f+4iBzz+DsuIsdyL0R1MQZ8YS/6Xrv9Ck0SuS0uzjZ3veIKWLUKnn1WO8ypgJZZ0VPK\ndKc6I3uAGfjl3yQmG9rWKcNdV+mMgLnq4EE7/ejWrXDPPbZ1U4UKTkel1CXJrOgppTd2FWC/MSZe\nRK4BGgPTsIMDKj9yNj6JZi//xNkEO1Nt//a1HY4oH0lIsBMJlS9vE8WECdCxo9NRKZUjvKnd/BY7\nDWot4BPsVKVf+DQqdVHqvzDfnSR+e+o6rq6lvXt9LjkZJk6EWrUgKsq2YvrwQ00SKk/xJlEku+a0\nvg14xxjzP6Cyb8NS2VX9mbnu2zte6arzW+eGtWuhdWt49FGoU8deVSiVB3mTKBJF5A6gJ/CDa1mI\n70JS2fXqj/+4b//zcmcdBdbXjIGhQ6F5c9ixww4D/vPPUKOG05Ep5RPejAjXB+iPHWZ8h4jUAL70\nbVjKG8YYbnv/T3cz2O8HXENoSLDDUeUDInD8OPTtawfwK1nS6YiU8qksE4UxZoOIDARqi0g9YJsx\nZrTvQ1MZMcYw8Ks1fL92v3vZsP/U54rw4g5Glcft3m07yr3wAjRrBh98AEHagVHlD97McNcWmArs\nAwSoICI9jTF/+Do4lb6Wryzi8MlzAHSoV47xdzflslAtDfSJhAQ7R8RLL9n7d91lE4UmCZWPeFP0\nNB7oaozZBCAi9bGJQ4cgzWXxicnuWekAVjzXgXKXhToYUR735592dNcNG6B7d3j7baiq/VJU/uNN\noiiYkiQAjDGbRaSgD2NS6Ug7M91vT12nScLXfv4ZYmPh229tolAqnxJjLpi8LvUGIlOAOGwnO4D7\ngCLGmF6+DS19ERERZtWqVU4c2jFr98bQfcL5kr6to7voAH++YIxtwVS2LHTpAufO2aKnYsWcjkyp\nSyYikcaYiyoJ8ubbph+wA3jK9bcDeORiDqay79jpeHeSKFIwmF2v/keThC/88w9cfz306gWffGKX\nFSqkSUIpsih6EpErgFrAN8aY13MnJJVi/oYD9Ju2GoD+7WvxVOd6DkeUB509C6+8Aq+9BkWLwqRJ\ndt5qpZRbZqPHPocdvuM+4CcRSW+mO+Uj2w6fdCeJxuHFNUn4yvffw6hRtjXTP//Aww9riyal0sjs\niuI+oLEx5rSIlAXmAR/nTljqhjd+BeC9+5rR9YqKDkeTxxw8CGvWQOfOcMcdUL06tGjhdFRK+a3M\nfjqdM8acBjDGHMliW5WDrh6zyH1bk0QOSkqC996Dyy+Hnj1tsZOIJgmlspDZFUVNj7myBajlOXe2\nMeY2n0aWD81YtZevVuzhQGwcAL8MudbhiPKQ1auhXz9YudJOSfreezqZkFJeyixR3J7m/ru+DCS/\nG7vgHyYs3u6+P3fgNdQsqy1ucsTOnfaqoUwZ+OILuPtueyWhlPJKZhMXLcponcpZP64/4E4S3/Rv\nTZPwEjoC7KUyBtavh8aN7aiun3wCN90EJUo4HZlSAcebntnKR75csYc3ftrCEde4TQOvr82VVXUk\n0ku2cycMGADz58Pff9tk0bOn01EpFbB8mihEpDPwFhAMfGiMeTWD7W4HZgJXGWPyfLfrPdFn6D7h\nd46fOT/RzcT7m9O5kc6tfEni4+0c1SNH2iau48ZBgwZOR6VUwPM6UYhIIWPMuWxsHwxMADoCUcBK\nEZnjOW6Ua7swYBDwl7f7DmRTl+1i+Hcb3fcXPNGOyyuEORdQXpGUZGebi4yE226DN9+EKlWcjkqp\nPCHLJq8i0kJE1gNbXfebiMg7Xuy7BXbuih3GmHjgKyC9kdVeBl7DjieVZ81YuZd7Ji93J4mH2tZg\nzQsdNUlcqhMn7P/gYOjTx3agmzVLk4RSOcibvhFvA92AaABjzFrgOi8eVxnY63E/ijRzbYtIM6CK\nMWYumRCRh0VklYisOnLkiBeH9i+DZ6zhqVnrWLYjmiCBkd0b8vx/GlCiiA7Ce9GMgSlToGZN+O47\nu6x/f+jWzdGwlMqLvCl6CjLG7JbUzQmTLvXAIhIEvAE8kNW2xpjJwGSwo8de6rFz06Sl25m9eh8A\nU/u2oG2dsg5HlAds2gSPPgq//gpt2kCtWk5HpFSe5s0VxV4RaQEYEQkWkSeALV48bh/gef0f7lqW\nIgxoBCwRkV1AK2COiOSZCZFOxCUw5sd/APj1yes0SeSE11+HJk3sZEIffmiTRaNGTkelVJ7mTaJ4\nFBgMVAUOYb/QH/XicSuBOiJSwzXR0d3AnJSVxphYY0wZY0x1Y0x1YDlwc15p9XQwNo7GIxYC0Lxa\nSaqWLuJwRAEuZd6UChXgvvvsAH59++oAfkrlgiyLnowxh7Ff8tlijEkUkQHAAmzz2I+NMRtFZCSw\nyhgzJ/M9BK64hCRaeYzXNLPf1Q5GE+D274dBg6BtWxg4EP77X/unlMo1WSYKEfkAuKBewBjzcFaP\nNcbMw44667nshQy2bZ/V/vydMYbrxi1hV/QZACpcFsry5zo4HFWAShnA7/nn7SxzrVs7HZFS+ZY3\nldk/e9wOBW4ldWsm5VLj2fM5sXeb6jzftb6D0QSwNWvs5EGRkXDjjTZhaIW1Uo7xpuhpuud9EZkK\n/O6ziALUc9+sd9/eMqoLBQto2flFi421RU7Tp9v5InQAP6UcdTFDeNQAyud0IIFs+Y5ovvhrDwCL\nh7bXJJFdxsDXX8PWrbao6dprYccOCA11OjKlFN71zD4uIsdcfzHAT8Czvg8tMGzcH8vdk5cD8GSn\ny6lRpqjDEQWY7duha1c7Fel339n6CNAkoZQfyfSKQmwvuyac7/+QbIwJqA5vvpKcbBj69Vpm/21f\nmu5NK/HYdbUdjiqAnDtnB+0bNQpCQuCtt2zP6gI6oLFS/ibTT6UxxojIPGOM9mhKo+Zz5yuuH2lX\nk2e14jp79u6Fl1+2c0S8+SZUrpz1Y5RSjvDm59saEbnSGPO3z6MJAPtjztL61V/c97eO7kJIsNZJ\neOXIEVtBPWAA1K5th+KoWdPpqJRSWcjwG05EUpLIldghwv8VkdUi8reIrM6d8PzLzMioVEliydD2\nmiS8kZwMH30E9erB4MHw7792uSYJpQJCZlcUK4BmwM25FItfu/39P4ncfRyA2uWKsfCJdjpdqTc2\nbLAD+P3+u+1dPXEiXH6501EppbIhs0QhAMaY7bkUi18a8+NmPl++h1PnEgGY9WhrmlfT6Uq9Eh9v\nO8zFx8PHH8MDD2ifCKUCUGaJoqyIDM5opTHmDR/E4zeMMdQbPp9zickAhBUqwJcPt6JR5eIORxYA\nfvnF9oUoWBBmzLBFTmXKOB2VUuoiZZYogoFiuK4s8pOz8UnUf2G++/6iIddSq2wxByMKEFFRdgC/\n2bPtFUTv3nDNNU5HpZS6RJkligPGmJG5FomfSEhKTpUkNo3sRJGC2rY/U4mJ8O67MHy4HcxvzBg7\nFLhSKk/Iso4iP/n8r908/80G9/2dY7oiWqaetZ494auvoEsXmDABatRwOiKlVA7KLFHkq/Gxp6/c\n404SV1UvybQHW2qSyExMjO1FXawYPPYY3H67/dPXTKk8J8NEYYw5lpuBOOnasYvZ7ZpDYtwdTejR\nPNzhiPyYMbbT3P/+B3ffDePHaz2EUnlcvu8ttmDjQXeSmNa3pSaJzGzbBp06wT33QHg43H+/0xEp\npXJBvk4UX/y1h0emRtrbD7bkmjrahDNDX3wBjRrBX3/Ziuvly6F5c6ejUkrlgnzbnOeLv/a4Jxu6\nrVllWtfWJJGuhAQ7umtEBPToAa+/DpUqOR2VUioX5ctEMeWPnYz4fhMAXz7UiqtrlXY4Ij90+DAM\nGQKnT9t+EXXrwrRpTkellHJAvit6euOnLe4k8UyXepok0kpOhsmT7XhM06dDw4a2b4RSKt/KN1cU\nq3Ydo8fEZe77w/5Tnwfb6uilqezYYSuoly2D9u3h/fft8BtKqXwtXySKuISkVEli+bMdqFBcp9q8\nQPHitn/Ep5/aTnTaJ0IpRT5JFD0m/glA4/DizBmgbf5TmTMHpkyBr7+G0qXtsOBB+a5EUimViTz/\njbDjyCk27DsBwOxHWzscjR/ZswduuQW6d4ctW+DAAbtck4RSKo08/a0wKzKK6/9vKQDj72pCAZ2N\nzg7gN24c1K8PCxfCa6/B33/bDnRKKZWOPFv0NHfdAYZ8vRaAXldX49Yr9YsQsC2YPvwQrr8e3nkH\nqld3OiKllJ/Lk4nif9PX8M3f+wBoUb0UL3Vv5HBEDjt+HF59FYYNg7Aw+OMPKFVKK6uVUl7JU4ni\nTHwiV478yT0r3ahbGnF/q2oOR+UgY+zQG4MHQ3Q0tGkDN99sK62VUspLeSpRNHhhgfv23IHX0LBS\nPp62dMsW6N8fFi2CFi1gwQJo2tTpqJRSASjPJIr/TV/jvr1tdBetuH7iCVi1Ct57Dx5+GIKDnY5I\nKRWg8kSiOHwizl0nseGlTvk3Sfz0k+1JXaWK7VVdqBBUqOB0VEqpAOfTb1QR6Swi/4rINhF5Jp31\ng0Vkk4isE5FFInJRFQqPfr4agEeurUmxQnki92XPwYNw771w4422uStAtWqaJJRSOcJniUJEgoEJ\nQBegAXCPiDRIs9nfQIQxpjEwE3g9u8cxxhC5+zgAz3TOZ+MSJSfDxIn2KmLWLHjxRdtHQimlcpAv\nryhaANuMMTuMMfHAV0B3zw2MMYuNMWdcd5cD2e7ssPXwKQB6t6me/+a4HjMGHn3UTiC0bh2MGAGh\nOoaVUipn+bKcpjKw1+N+FNAyk+37Aj+mt0JEHgYeBqhatWqqdSt32am9b6hf/uIjDSQnT8LRo1Cj\nBvTrZ//fc4/2iVBK+Yxf1PqKyP1ABDA2vfXGmMnGmAhjTETZsmVTrVux0yaKxuF5vCmsMfDNN9Cg\nAdx1l71furStm9AkoZTyIV8min1AFY/74a5lqYjIDcDzwM3GmHPZPcif26MBCAsNubgoA8Hu3baj\n3G232R7Vb7+tyUEplWt8WfS0EqgjIjWwCeJu4F7PDUTkSmAS0NkYc/hiDnLk5DnqVQi71Fj917Jl\ncMMN9va4cTBoEBTIhy27lFKO8dkVhTEmERgALAA2AzOMMRtFZKSI3OzabCxQDPhaRNaIyJzsHONg\nbBwArWuVybnA/cUJOzQ6zZpBnz6webOdw1qThFIql/n0W8cYMw+Yl2bZCx63b7iU/a/fFwtA7XLF\nLmU3/iU6Gp55xg4BvnEjFCtmR3lVSimH+EVl9sXaccQ2jb2qekmHI8kBxsBnn9k+EZ98YiustR5C\nKeUHArocY8N+WzxTsURhhyO5RLGxdra5JUvg6qttJ7rGjZ2OSimlgABPFN+v3U/B4KDAHbbDGHvV\ncNllUKYMTJ4MffvqdKRKKb8SsN9Ie4/ZDt1Nq5ZwOJKLtGCBraiOirLJ4uuv4aGHNEkopfxOwH4r\nRR0/C0DPQJuY6MABuPtu6NwZzpyBwxfVKlgppXJNwCaKnUdPA1CtdBGHI8mGCRNsZfW338JLL9nx\nmZo1czoqpZTKVIAW7sMeV9FTeMkAShSRkdCypU0Ydeo4HY1SSnklYK8otrlGjS1ZxI+H7jhxws40\nFxlp77/3nq2b0CShlAogAZsooo6foVihAv45tLgxMHMm1K9vx2VautQuDw3VvhFKqYATsIkiNCSY\ncpcVcjqMC+3cCd26wR13QLlydqymwYOdjkoppS5awCaKNXtjqFmmqNNhXOjzz+HXX2H8eFi50tZJ\nKKVUAAvYyuxihQoQ5C/FOL/9BufO2VFen3wSHngAwrM9WZ9SSvmlgLyiSE42nDqXSM2yDg8GePSo\nHdm1XTsYOdIuK1RIk4RSKk8JyCuKXdG2D4UxxpkAjIEpU+zVQ2wsPP00DB/uTCz5SEJCAlFRUcTF\nxTkdilJ+KzQ0lPDwcEJCcq5FaEAmit+2HgWgZc1SzgQwb569kmjTxg7g16iRM3HkM1FRUYSFhVG9\nenX/bO2mlMOMMURHRxMVFUWNGjVybL8BWfS0es9xAJpVzcXhxc+cgT/+sLe7doXvvrOV1pokck1c\nXBylS5fWJKFUBkSE0qVL5/hVd0AmioSkZABKFCmYOwf88UebELp0gZgY2xfi5pt1AD8HaJJQKnO+\n+IwE5Dfdz5sP0zi8uO8PtG+f7Q/RtautpP7+eygRoKPVKqXURQrIRBGfmMzZ+CTfHuTwYWjQAH74\nAUaNgrVr4dprfXtM5feKFbv0lnb79++nR48eGa6PiYnhvffe83r7tB544AFq1KhB06ZNadKkCYsW\nLbqkeHPaxIkT+eyzz3JkXwcOHKBbt245si9f+fTTT6lTpw516tTh008/TXebESNGULlyZZo2bUrT\npk2ZN8/OIB0fH0/v3r254ooraNKkCUuWLHE/5oYbbuD48eO58RRs5Ucg/TVr1txUe/oHM+yb9cYn\noqLO337rLWO2bfPNcVS2bdq0yekQTNGiRX1+jJ07d5qGDRte9ON79eplvv76a2OMMb/88oupXbt2\njsSVkJCQI/vJSUOHDjXffvut19vn9nOIjo42NWrUMNHR0ebYsWOmRo0a5tixYxds9+KLL5qxY8de\nsPzdd981DzzwgDHGmEOHDplmzZqZpKQkY4wxU6ZMMaNGjUr3uOl9VoBV5iK/dwOu1VNcgr2SqFoq\nh0eNjY2FYcNg0iRYvtwO/z1wYM4eQ+WYl77fyCbXVLg5pUGly3jxpobZftyuXbvo06cPR48epWzZ\nsnzyySdUrVqV7du3c99993H69Gm6d+/Om2++yalTp9i1axfdunVjw4YNbNy4kd69exMfH09ycjKz\nZs1i+PDhbN++naZNm9KxY0cee+wx9/ZJSUk8/fTTzJ8/n6CgIB566CEef/zxDGO7+uqr2bdvn/t+\nZGQkgwcP5tSpU5QpU4YpU6ZQsWJFVq5cSd++fQkKCqJjx478+OOPbNiwgSlTpjB79mxOnTpFUlIS\nS5cuZezYscyYMYNz585x66238tJLL3H69GnuvPNOoqKiSEpKYvjw4dx1110888wzzJkzhwIFCnDj\njTcybtw4RowYQbFixRg6dChr1qyhX79+nDlzhlq1avHxxx9TsmRJ2rdvT8uWLVm8eDExMTF89NFH\ntG3b9oLnN2vWLEaNGuV+H3r27Mnp07b5/Lvvvkvr1q1ZsmQJw4cPp2TJkvzzzz9s2bKFadOm8fbb\nbxMfH0/Lli157733CA4O5tFHH2XlypWcPXuWHj168NJLL2X7fPC0YMECOnbsSKlStoVmx44dmT9/\nPvfcc49Xj9+0aRPXX389AOXKlaNEiRKsWrWKFi1acPPNN9O2bVuef/75S4rRGwFX9HTGlSgaVLos\nZ3ZoDMyYYQfwmzAB+vWDWrVyZt8qX3j88cfp1asX69at47777mOg6wfGoEGDGDRoEOvXryc8g06Y\nEydOZNCgQaxZs4ZVq1YRHh7Oq6++Sq1atVizZg1jx45Ntf3kyZPZtWsXa9ascR8vM/Pnz+eWW24B\nbD+Uxx9/nJkzZxIZGUmfPn3cXzK9e/dm0qRJrFmzhuDg4FT7WL16NTNnzmTp0qUsXLiQrVu3smLF\nCtasWUNkZCS//vor8+fPp1KlSqxdu5YNGzbQuXNnoqOj+eabb9i4cSPr1q1j2LBhF8T33//+l9de\ne41169ZxxRVXpPpiTkxMZMWKFbz55pvpfmHv3LmTkiVLUqiQHfOtXLly/PTTT6xevZrp06e734eU\n5/DWW2+xZcsWNm/ezPTp0/njjz/cz/fzzz8HYPTo0axatYp169axdOlS1q1bd8Fxx44d6y4i8vwb\nmM4Py3379lGlShX3/fDw8FSJ29O7775L48aN6dOnj7tIqUmTJsyZM4fExER27txJZGQke/fuBaBk\nyZKcO3eO6OjodPeXkwLuiuJcQhIFIWcqs42B226zEwk1awZz5kBExKXvV/ncxfzy95Vly5Yxe/Zs\nAHr27MlTTz3lXv7tt98CcO+99zJ06NALHnv11VczevRooqKiuO2226iTxRD0P//8M/369aNAAfvR\nTfmlmtaTTz7Jc889R1RUFMuWLQPg33//ZcOGDXTs2BGApKQkKlasSExMDCdPnuTqq692x/rDDz+4\n9+X5i3jhwoUsXLiQK6+8EoBTp06xdetW2rZty5AhQ3j66afp1q0bbdu2JTExkdDQUPr27Uu3bt0u\nqEuIjY0lJiaGa111f7169eKOO+5wr7/tttsAaN68Obt27brgOR44cICyZcu67yckJDBgwAD3l/+W\nLVvc61q0aOHuV7Bo0SIiIyO56qqrADh79izlypUDYMaMGUyePJnExEQOHDjApk2baNy48QWv7ZNP\nPpnu636xHn30UYYPH46IMHz4cIYMGcLHH39Mnz592Lx5MxEREVSrVo3WrVunSuTlypVj//79lC5d\nOkfjSSvgEkVisqEgEBZ6Cb0OExIgJMQ2c73mGrj+eujfH9L8klLK1+69915atmzJ3Llz6dq1K5Mm\nTaJmzZqXvN+xY8fSo0cP3nnnHfr06UNkZCTGGBo2bOhOHCliYmIy3VfRoucH3zTG8Oyzz/LII49c\nsN3q1auZN28ew4YNo0OHDrzwwgusWLGCRYsWMXPmTN59911++eUXr59DypVCcHAwiYmJF6wvXLhw\nqv4C48ePp3z58qxdu5bk5GRCQ0MzfA69evVizJgxqfa3c+dOxo0bx8qVKylZsiQPPPBAuv0Rxo4d\n674C8dSuXTvefvvtVMsqV66cqgI6KiqK9u3bX/DY8uXLu28/9NBD7qRaoEABxo8f717XunVr6tat\n674fFxdH4cKFL9hfTgu4oqe4hCRKF72E/hNLlkDjxrbDHMCQIfD445ok1EVr3bo1X331FQCff/65\nuyy9VatWzJo1C8C9Pq0dO3ZQs2ZNBg4cSPfu3Vm3bh1hYWGcPHky3e07duzIpEmT3F+cx44dyzS2\nAQMGkJyczIIFC7j88ss5cuSIO1EkJCSwceNGSpQoQVhYGH/99VemsQJ06tSJjz/+mFOn7MRh+/bt\n4/Dhw+zfv58iRYpw//338+STT7J69WpOnTpFbGwsXbt2Zfz48axduzbVvooXL07JkiX57bffAJg6\n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\nfgkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "4PcpOvjhnMNE", "colab_type": "text" }, "source": [ "###From what we have seen above the performance of the model is worse for the cases that the actual result is the customer setting up a term deposit account.\n", "###This is because the highly unbalnce in the distribution of the two possible outcomes." ] }, { "cell_type": "code", "metadata": { "id": "nhvWCmlUGDwJ", "colab_type": "code", "outputId": "dde29190-1420-4866-92d5-ad8e372d5e62", "colab": { "base_uri": "https://localhost:8080/", "height": 74 } }, "source": [ "from imblearn.over_sampling import SMOTE\n", "os = SMOTE(random_state=0)\n", "os_X_train,os_y_train=os.fit_sample(X_train, y_train)\n", "os_X_train = pd.DataFrame(data=os_X_train,columns=X_train.columns )\n", "os_y_train= pd.DataFrame(data=os_y_train,columns=['y'])" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/sklearn/externals/six.py:31: DeprecationWarning: The module is deprecated in version 0.21 and will be removed in version 0.23 since we've dropped support for Python 2.7. Please rely on the official version of six (https://pypi.org/project/six/).\n", " \"(https://pypi.org/project/six/).\", DeprecationWarning)\n" ], "name": "stderr" } ] }, { "cell_type": "code", "metadata": { "id": "eYWlcjoFJNSY", "colab_type": "code", "outputId": "06e13db8-6843-4ac7-f64f-1fc06a29aed6", "colab": { "base_uri": "https://localhost:8080/", "height": 129 } }, "source": [ "logreg = LogisticRegression()\n", "logreg.fit(os_X_train, os_y_train)\n", "y_pred = logreg.predict(X_test)\n", "print('Accuracy of logistic regression classifier on test set: {:.2f}'.format(logreg.score(X_test, y_test)))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n", " FutureWarning)\n", "/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", " y = column_or_1d(y, warn=True)\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "Accuracy of logistic regression classifier on test set: 0.66\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "0ZntQdcEJxAl", "colab_type": "code", "outputId": "0e8335ff-4376-4ae6-c54b-45d1e5337a16", "colab": { "base_uri": "https://localhost:8080/", "height": 54 } }, "source": [ "conf_matrix = confusion_matrix(y_test, y_pred)\n", "categories_size=np.array([10969,1388])\n", "conf_matrix=conf_matrix/categories_size[:,None]\n", "print(conf_matrix)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "[[0.67599599 0.32400401]\n", " [0.44164265 0.55835735]]\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "BiwW90JGqUqw", "colab_type": "code", "outputId": "23172428-cbaf-4e4d-9e97-f4faf7780079", "colab": { "base_uri": "https://localhost:8080/", "height": 295 } }, "source": [ "logit_roc_auc = roc_auc_score(y_test, y_pred)\n", "y_pred_prob=logreg.predict_proba(X_test)\n", "fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob[:,1])\n", "plt.figure()\n", "plt.plot(fpr, tpr, label='Logistic Regression (area = %0.2f)' % logit_roc_auc)\n", "plt.plot([0, 1], [0, 1],'r--')\n", "plt.xlim([0.0, 1.0])\n", "plt.ylim([0.0, 1.05])\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('Re-balanced dataset - Receiver operating characteristic')\n", "plt.legend(loc=\"lower right\")\n", "plt.savefig('Log_ROC')\n", "plt.show()" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] } ] }