{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Lab 3: Cross validation and feature encoding."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The data you will be using in this lab comes from a kaggle in class competition. The goal is to predict the number of shares an article will get on social media, from the article's topic, length, day of publication, and many other features.\n",
"\n",
"You are given labels, that is, number of shares, for 5000 of these articles. We will explore how to set up cross validation and do some feature encoding."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1. Model Selection: setting up a cross validation\n",
"\n",
"Cross-validation is a good way to perform model selection empirically while avoiding overfitting. \n",
"\n",
"This procedure can be split into the following two steps: \n",
"* the dataset is randomly split into K folds \n",
"* the model is run K times, each run using K-1 folds as the training set and evaluating the performance on the remaining fold which is the test set. \n",
"\n",
"Prediction performance are averaged over all folds. \n",
"\n",
"When the model contains parameters that need to be tuned, the CV scheme is repeated for all considered values of the hyperparameters, and those leading to the best prediction performance averaged on all folds are retained.\n",
"\n",
"Depending on the size of the dataset, 5 or 10 folds are usualy considered."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Question:__ In a K-fold cross-validation, how many times does each sample appear in a test set? In a training set? "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Answer:__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question:** Implement a function which splits the _indices_ of the training data in K folds."
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [],
"source": [
"def make_Kfolds(n_instance, n_folds):\n",
" \"\"\"\n",
" set up a K-fold croos-validation.\n",
" \n",
" Parameters:\n",
" -----------\n",
" n_instances: int\n",
" the number of instances in the dataset.\n",
" n_folds: int\n",
" the number of folds of the cross-validation scheme\n",
" \n",
" Outputs:\n",
" --------\n",
" fold_list: list\n",
" list of folds, a fold is a tuple of 2 lists, \n",
" the first one containing the indices of instances of the training set,\n",
" the second one containing the indices of instances of the test set\n",
" \"\"\"\n",
" # Create a list of the n_instance indices [0, 1, ..., n_instance-1]\n",
" list_indices = list(range(n_instance))\n",
" # Shuffle the list with np.random.shuffle\n",
" np.random.shuffle(list_indices)\n",
" \n",
" # Compute the number of instances per fold (i.e. in each test set)\n",
" n_instance_per_fold = n_instance // n_folds\n",
" print(n_instance_per_fold)\n",
" \n",
" # For each of the first K-1 folds, create the list of train set and test set indices\n",
" fold_list = []\n",
" for ind_fold in range(n_folds-1):\n",
" test_list = list_indices[ind_fold*n_instance_per_fold : (ind_fold+1)*n_instance_per_fold] # TODO\n",
" train_list = list_indices[:ind_fold*n_instance_per_fold] + list_indices[(ind_fold+1)*n_instance_per_fold:] # TODO\n",
" # TODO add the (train_list, test_list) tuple to fold_list\n",
" fold_list.append((train_list, test_list)) \n",
"\n",
" # Process the last fold separately\n",
" test_list = list_indices[(ind_fold+1)*n_instance_per_fold:] # TODO \n",
" train_list = list_indices[:(ind_fold+1)*n_instance_per_fold] # TODO \n",
" # TODO add the (train_list, test_list) tuple to fold_list \n",
" fold_list.append((train_list, test_list)) \n",
" \n",
" return fold_list"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"200\n",
"Fold 0\n",
"\t 801 training points\n",
"\t 200 test points\n",
"Fold 1\n",
"\t 801 training points\n",
"\t 200 test points\n",
"Fold 2\n",
"\t 801 training points\n",
"\t 200 test points\n",
"Fold 3\n",
"\t 801 training points\n",
"\t 200 test points\n",
"Fold 4\n",
"\t 800 training points\n",
"\t 201 test points\n"
]
}
],
"source": [
"# Check whether your function does what is expected\n",
"perso_folds = make_Kfolds(1001, 5)\n",
"\n",
"for ix, (tr, te) in enumerate(perso_folds):\n",
" print(\"Fold %d\" % ix)\n",
" print(\"\\t %d training points\" % len(tr))\n",
" print(\"\\t %d test points\" % len(te))\n",
" if len(np.intersect1d(tr, te))>0:\n",
" print('some instances are both in your training and test sets')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In practice, when using scikit-learn, you will not implement your cross-validation yourself, but rather rely on the library's functionalities for setting up cross-validation schemes. \n",
"\n",
"[Here](http://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection) is the list of available tools in the scikit-learn library.\n",
"\n",
"We list here one of the most important ones:\n",
"* [K-fold](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold): Provides train/test indices to split data in train/test sets by dataset into k consecutive folds (without shuffling by default). \n",
"* [stratified K-fold](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold) (to be used in case of classification): this cross-validation object is a variation of KFold that returns stratified folds. The folds are made by preserving the percentage of samples for each class.\n",
"\n",
"We will now explore the stratified K-fold on randomly generated data."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 0 0 1 0 0 0 1 1 0 1 0 0 1 0 1 0 1\n",
" 1 0 1 1 1 0 0 0 1 0 0 0 0 1 0 0 1 1 1 0 1 0 1 1 0 0 0 1 1 1 1 0 1 0 0 0 0\n",
" 1 0 1 0 1 0 1 1 0 1 0 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 1 0 1 1 1 1 0\n",
" 0 0 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 1 1 1 1 1 1 0 0 1 1 0 0\n",
" 0 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 0 1 0 0 0 0 1 1 1 1 0 0 0 1 0\n",
" 1 1 1 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 1 1\n",
" 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 0 1\n",
" 1 1 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 0 1 1 0 0\n",
" 0 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 0 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1\n",
" 0 0 1 1 1 1 1 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 1 0 0 1 0 1 1 1 1 1 1 0 0 0\n",
" 0 1 1 1 1 0 1 0 0 1 1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0\n",
" 0 1 1 1 1 0 0 1 0 1 0 1 0 0 0 1 1 0 1 0 0 0 0 1 0 0 0 1 1 1 0 0 1 0 1 0 0\n",
" 0 0 1 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 1 0 0 1 1 1\n",
" 0 0 0 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 0 1 0 0 0 0 1 1 1 0 1 1 0 1 1 1 0 0 1\n",
" 1 1 1 1 0 0 0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 0 1 0\n",
" 1 0 0 1 1 1 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 1 0 1 1 0 0 1 0 0 0 0 0 1 0 0 1\n",
" 0 0 0 1 1 0 0 1 0 0 1 1 1 0 1 0 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 1 0 1 0 1 0\n",
" 0 1 1 0 0 1 1 0 0 1 0 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 1 1 0 1 0 0\n",
" 0 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 0 1 0 0 0 0 1 1 1 0 1 0 0 1 1\n",
" 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1\n",
" 1 0 0 1 1 1 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1\n",
" 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1\n",
" 1 0 1 0 0 1 0 0 0 1 1 0 0 0 1 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 1 0 1 1 1 1\n",
" 1 1 0 1 1 1 1 1 0 1 0 1 1 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0\n",
" 0 1 1 1 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 1 0 1 0 0 1 0 0 0\n",
" 1 0 0 1 0 1 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 1 1 0 1 0 0 0 1 0 1 0 0 1 1 0\n",
" 0 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 0 1 0 1 0 0 0\n",
" 0]\n"
]
}
],
"source": [
"# Generate random data\n",
"n_instances, n_features = 1000, 7\n",
"# Design matrix\n",
"X = np.random.random((n_instances, n_features))\n",
"# Classification labels\n",
"y = np.where(np.random.random(n_instances) >=0.5, 1, 0)\n",
"print(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question:** Using scikit-learn, set up a stratified 10-fold cross-validation for the above data."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"from sklearn import model_selection\n",
"# Initialize a StratifiedKFold object \n",
"skf = model_selection.StratifiedKFold()\n",
"# Split the data using skf\n",
"sk_folds = skf.split(X,y)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fold 0\n",
"\t 800 training points\n",
"\t 200 test points\n",
"Fold 1\n",
"\t 800 training points\n",
"\t 200 test points\n",
"Fold 2\n",
"\t 800 training points\n",
"\t 200 test points\n",
"Fold 3\n",
"\t 800 training points\n",
"\t 200 test points\n",
"Fold 4\n",
"\t 800 training points\n",
"\t 200 test points\n"
]
}
],
"source": [
"# This is one way to access the training and test points\n",
"for ix, (tr, te) in enumerate(sk_folds):\n",
" print(\"Fold %d\" % ix)\n",
" print(\"\\t %d training points\" % len(tr))\n",
" print(\"\\t %d test points\" % len(te))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Important note:__ `sk_folds` is a [_generator_](https://wiki.python.org/moin/Generators), meaning that once you are done looping through it, it will be empty. In practice it avoids storing all the indices (if you were doing 10-fold cross-validation on a million sample, you would have $10^7$ values to store)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question:** Create a cross-validation function that takes a design matrix, label array, scikit-learn classifier, and scikit-learn cross_validation object and returns the corresponding list of cross-validated predictions. \n",
"\n",
"The function contains a loop that goes through all folds and for each fold:\n",
"* trains a model on the training data\n",
"* uses this model to make predictions on the test data. \n",
"In this fashion you should be able to form *a single vector of predictions* `y_prob_cv` (as each point from the data appears once as a test point in the cross-validation).\n",
"\n",
"Make sure that you are returning the predictions in the correct order!\n",
"\n",
"Check the documentation of fit(X, y) and predict_proba(X) in [sklearn.naive_bayes.GaussianNB](http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html). Every classifier implemented in scikit-learn has a fit(X,y) and a predict_proba(X) methods. \n",
"Note that the predict_proba methods returns a 2 dimentional array, you must find a way to only keep the probability to belong to the positive class."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"def cross_validate(design_matrix, labels, classifier, cv_folds):\n",
" \"\"\" Perform a cross-validation and returns the predictions.\n",
" \n",
" Parameters:\n",
" -----------\n",
" design_matrix: (n_samples, n_features) np.array\n",
" Design matrix for the experiment.\n",
" labels: (n_samples, ) np.array\n",
" Vector of labels.\n",
" classifier: sklearn classifier object\n",
" Classifier instance; must have the following methods:\n",
" - fit(X, y) to train the classifier on the data X, y\n",
" - predict_proba(X) to apply the trained classifier to the data X and return probability estimates \n",
" cv_folds: sklearn cross-validation object\n",
" Cross-validation iterator.\n",
" \n",
" Return:\n",
" -------\n",
" pred: (n_samples, ) np.array\n",
" Vectors of predictions (same order as labels).\n",
" \"\"\"\n",
" pred = np.zeros(labels.shape)\n",
" for tr, te in cv_folds:\n",
" # TODO\n",
" classifier.fit(design_matrix[tr,:], labels[tr])\n",
" pred[te] = classifier.predict_proba(design_matrix[te,:])[:,1]\n",
" return pred"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1000\n",
"1000\n",
"0.478\n"
]
}
],
"source": [
"# To check whether your function runs properly, you can use the following\n",
"\n",
"# import Gaussian Naive Bayes\n",
"from sklearn.naive_bayes import GaussianNB\n",
"from sklearn import metrics\n",
"\n",
"# create a GNB classifier\n",
"gnb = GaussianNB()\n",
"\n",
"# run your cross_validate function\n",
"y_prob_cv = cross_validate(X, y, gnb, sk_folds)\n",
"\n",
"# check y and y_prob_cv have the same length (the number of instance)\n",
"print(len(y_prob_cv))\n",
"print(len(y))\n",
"\n",
"# check the accuracy of your prediction (it should be close to 0.5 as we're considering random matrices). \n",
"print(metrics.accuracy_score(y, np.where(y_prob_cv>=0.5, 1, 0)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Extensions **\n",
"* **Leave-one-out cross-validation: ** in this case, the number of folds is the number of available points in the dataset. To say it differently, the model is trained K times on K-1 points, and tested on the left out point. The LOO CV scheme is particularly convenient when the number of samples is very small. When the number of samples is large, it becomes computationally burdensome; moreover the cross-validated error tends to have a very large variance which makes it hard to interpret.\n",
"\n",
"* **Nested-cross-validation: ** The goal of the cross validation scheme is to assess the performance of the model on _new_ data which were not used to train or optimize the model. From that perspective, the CV scheme is not rigorous when optimizing hyperparameters. Indeed, the test data are both used to assess the performance and choosing the set of parameters which led to that best performance. To avoid selecting a possibly over-fitted set of parameters, we also used the so-called nested cross validation (_Nested CV_) scheme which consists in a cross validation (_inner-CV_) nested in a other cross validation (_outer-CV_). At each step of the _outer-CV_, the optimal parameters are found via the _inner-CV_ on the train set of the _outer-CV_, and the performance is assessed on the remaining test fold of the _outer-CV_ Therefore, in _Nested CV_, parameter optimization and performance assessment are performed on different _unseen_ data.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2. Data loading and visualization\n",
"\n",
"Download the data from the competition link and unzip it."
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'nb_words_title' Number of words in the article's titles\n",
"'nb_words_content' Number of words in the article\n",
"'pp_uniq_words' Proportion of unique words in the article\n",
"'pp_stop_words' Proportion of stop words (i.e. words predefined to be too common to be of use for interpretation or queries, such as 'the', 'a', 'and', etc.)\n",
"'pp_uniq_non-stop_words' Proportion of non-stop words among unique words\n",
"'nb_links' Number of hyperlinks in the article\n",
"'nb_outside_links' Number of hyperlinks pointing to another website\n",
"'nb_images' Number of images in the article\n",
"'nb_videos' Number of videos in the article\n",
"'ave_word_length' Average word length\n",
"'nb_keywords' Number of keywords in the metadata\n",
"'category' Category of the article: 0-Lifestyle, 1-Entertainment, 2-Business, 3-Web, 4-Tech, 5-World\n",
"'nb_mina_mink' Minimum number of share counts among all articles with at least one keyword in common with the article\n",
"'nb_mina_maxk' Minimum number of maximum share counts per keyword\n",
"'nb_mina_avek' Minimum number of average share counts per keyword\n",
"'nb_maxa_mink' Maximum number of minimum share counts per keyword\n",
"'nb_maxa_maxk' Maximum number of share counts among all articles with at least one keyword in common with the article\n",
"'nb_maxa_avek' Maximum number of average share counts per keyword\n",
"'nb_avea_mink' Average number of minimum share counts per keyword\n",
"'nb_avea_maxk' Average number of maximum share counts per keyword\n",
"'nb_avea_avek' Average number of average share counts per keyword\n",
"'nb_min_linked' Minimum number of shares of articles from the same website linked within the article\n",
"'nb_max_linked' Maximum number of shares of articles from the same website linked within the article\n",
"'nb_ave_linked' Average number of shares of articles from the same website linked within the article\n",
"'weekday' Day of the week: 0-Monday, 1-Tuesday, 2-Wednesday, until 6-Sunday\n",
"'dist_topic_0' Distance to topic 0\n",
"'dist_topic_1' Distance to topic 1\n",
"'dist_topic_2' Distance to topic 2\n",
"'dist_topic_3' Distance to topic 3\n",
"'dist_topic_4' Distance to topic 4\n",
"'subj' Subjectivity\n",
"'polar' Sentiment polarity \n",
"'pp_pos_words' Proportion of positive words in the article\n",
"'pp_neg_words' Proportion of negative words in the article\n",
"'pp_pos_words_in_nonneutral' Proportion of positive words among the non-neutral words of the article\n",
"'ave_polar_pos' Average sentiment polarity of the positive words\n",
"'min_polar_pos' Minimum sentiment polarity of the positive words\n",
"'max_polar_pos' Maximum sentiment polarity of the positive words\n",
"'ave_polar_neg' Average sentiment polarity of the negative words\n",
"'min_polar_neg' Mimimum sentiment polarity of the negative words\n",
"'max_polar_neg' Maximum sentiment polarity of the negative words\n",
"'subj_title' Subjectivity of the title\n",
"'polar_title' Polarity of the title\n"
]
}
],
"source": [
"# we display the description of the features\n",
"!cat data/kaggle_data/features.txt"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/wbader/miniconda3/envs/tp-ml/lib/python3.6/site-packages/ipykernel_launcher.py:2: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.\n",
" \n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
feature_names
\n",
"
feature_description
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
'nb_words_title'
\n",
"
Number of words in the article's titles
\n",
"
\n",
"
\n",
"
1
\n",
"
'nb_words_content'
\n",
"
Number of words in the article
\n",
"
\n",
"
\n",
"
2
\n",
"
'pp_uniq_words'
\n",
"
Proportion of unique words in the article
\n",
"
\n",
"
\n",
"
3
\n",
"
'pp_stop_words'
\n",
"
Proportion of stop words (i.e. words predefine...
\n",
"
\n",
"
\n",
"
4
\n",
"
'pp_uniq_non-stop_words'
\n",
"
Proportion of non-stop words among unique words
\n",
"
\n",
"
\n",
"
5
\n",
"
'nb_links'
\n",
"
Number of hyperlinks in the article
\n",
"
\n",
"
\n",
"
6
\n",
"
'nb_outside_links'
\n",
"
Number of hyperlinks pointing to another website
\n",
"
\n",
"
\n",
"
7
\n",
"
'nb_images'
\n",
"
Number of images in the article
\n",
"
\n",
"
\n",
"
8
\n",
"
'nb_videos'
\n",
"
Number of videos in the article
\n",
"
\n",
"
\n",
"
9
\n",
"
'ave_word_length'
\n",
"
Average word length
\n",
"
\n",
"
\n",
"
10
\n",
"
'nb_keywords'
\n",
"
Number of keywords in the metadata
\n",
"
\n",
"
\n",
"
11
\n",
"
'category'
\n",
"
Category of the article: 0-Lifestyle, 1-Entert...
\n",
"
\n",
"
\n",
"
12
\n",
"
'nb_mina_mink'
\n",
"
Minimum number of share counts among all artic...
\n",
"
\n",
"
\n",
"
13
\n",
"
'nb_mina_maxk'
\n",
"
Minimum number of maximum share counts per key...
\n",
"
\n",
"
\n",
"
14
\n",
"
'nb_mina_avek'
\n",
"
Minimum number of average share counts per key...
\n",
"
\n",
"
\n",
"
15
\n",
"
'nb_maxa_mink'
\n",
"
Maximum number of minimum share counts per key...
\n",
"
\n",
"
\n",
"
16
\n",
"
'nb_maxa_maxk'
\n",
"
Maximum number of share counts among all artic...
\n",
"
\n",
"
\n",
"
17
\n",
"
'nb_maxa_avek'
\n",
"
Maximum number of average share counts per key...
\n",
"
\n",
"
\n",
"
18
\n",
"
'nb_avea_mink'
\n",
"
Average number of minimum share counts per key...
\n",
"
\n",
"
\n",
"
19
\n",
"
'nb_avea_maxk'
\n",
"
Average number of maximum share counts per key...
\n",
"
\n",
"
\n",
"
20
\n",
"
'nb_avea_avek'
\n",
"
Average number of average share counts per key...
\n",
"
\n",
"
\n",
"
21
\n",
"
'nb_min_linked'
\n",
"
Minimum number of shares of articles from the ...
\n",
"
\n",
"
\n",
"
22
\n",
"
'nb_max_linked'
\n",
"
Maximum number of shares of articles from the ...
\n",
"
\n",
"
\n",
"
23
\n",
"
'nb_ave_linked'
\n",
"
Average number of shares of articles from the ...
\n",
"
\n",
"
\n",
"
24
\n",
"
'weekday'
\n",
"
Day of the week: 0-Monday, 1-Tuesday, 2-Wednes...
\n",
"
\n",
"
\n",
"
25
\n",
"
'dist_topic_0'
\n",
"
Distance to topic 0
\n",
"
\n",
"
\n",
"
26
\n",
"
'dist_topic_1'
\n",
"
Distance to topic 1
\n",
"
\n",
"
\n",
"
27
\n",
"
'dist_topic_2'
\n",
"
Distance to topic 2
\n",
"
\n",
"
\n",
"
28
\n",
"
'dist_topic_3'
\n",
"
Distance to topic 3
\n",
"
\n",
"
\n",
"
29
\n",
"
'dist_topic_4'
\n",
"
Distance to topic 4
\n",
"
\n",
"
\n",
"
30
\n",
"
'subj'
\n",
"
Subjectivity
\n",
"
\n",
"
\n",
"
31
\n",
"
'polar'
\n",
"
Sentiment polarity
\n",
"
\n",
"
\n",
"
32
\n",
"
'pp_pos_words'
\n",
"
Proportion of positive words in the article
\n",
"
\n",
"
\n",
"
33
\n",
"
'pp_neg_words'
\n",
"
Proportion of negative words in the article
\n",
"
\n",
"
\n",
"
34
\n",
"
'pp_pos_words_in_nonneutral'
\n",
"
Proportion of positive words among the non-neu...
\n",
"
\n",
"
\n",
"
35
\n",
"
'ave_polar_pos'
\n",
"
Average sentiment polarity of the positive words
\n",
"
\n",
"
\n",
"
36
\n",
"
'min_polar_pos'
\n",
"
Minimum sentiment polarity of the positive words
\n",
"
\n",
"
\n",
"
37
\n",
"
'max_polar_pos'
\n",
"
Maximum sentiment polarity of the positive words
\n",
"
\n",
"
\n",
"
38
\n",
"
'ave_polar_neg'
\n",
"
Average sentiment polarity of the negative words
\n",
"
\n",
"
\n",
"
39
\n",
"
'min_polar_neg'
\n",
"
Mimimum sentiment polarity of the negative words
\n",
"
\n",
"
\n",
"
40
\n",
"
'max_polar_neg'
\n",
"
Maximum sentiment polarity of the negative words
\n",
"
\n",
"
\n",
"
41
\n",
"
'subj_title'
\n",
"
Subjectivity of the title
\n",
"
\n",
"
\n",
"
42
\n",
"
'polar_title'
\n",
"
Polarity of the title
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" feature_names \\\n",
"0 'nb_words_title' \n",
"1 'nb_words_content' \n",
"2 'pp_uniq_words' \n",
"3 'pp_stop_words' \n",
"4 'pp_uniq_non-stop_words' \n",
"5 'nb_links' \n",
"6 'nb_outside_links' \n",
"7 'nb_images' \n",
"8 'nb_videos' \n",
"9 'ave_word_length' \n",
"10 'nb_keywords' \n",
"11 'category' \n",
"12 'nb_mina_mink' \n",
"13 'nb_mina_maxk' \n",
"14 'nb_mina_avek' \n",
"15 'nb_maxa_mink' \n",
"16 'nb_maxa_maxk' \n",
"17 'nb_maxa_avek' \n",
"18 'nb_avea_mink' \n",
"19 'nb_avea_maxk' \n",
"20 'nb_avea_avek' \n",
"21 'nb_min_linked' \n",
"22 'nb_max_linked' \n",
"23 'nb_ave_linked' \n",
"24 'weekday' \n",
"25 'dist_topic_0' \n",
"26 'dist_topic_1' \n",
"27 'dist_topic_2' \n",
"28 'dist_topic_3' \n",
"29 'dist_topic_4' \n",
"30 'subj' \n",
"31 'polar' \n",
"32 'pp_pos_words' \n",
"33 'pp_neg_words' \n",
"34 'pp_pos_words_in_nonneutral' \n",
"35 'ave_polar_pos' \n",
"36 'min_polar_pos' \n",
"37 'max_polar_pos' \n",
"38 'ave_polar_neg' \n",
"39 'min_polar_neg' \n",
"40 'max_polar_neg' \n",
"41 'subj_title' \n",
"42 'polar_title' \n",
"\n",
" feature_description \n",
"0 Number of words in the article's titles \n",
"1 Number of words in the article \n",
"2 Proportion of unique words in the article \n",
"3 Proportion of stop words (i.e. words predefine... \n",
"4 Proportion of non-stop words among unique words \n",
"5 Number of hyperlinks in the article \n",
"6 Number of hyperlinks pointing to another website \n",
"7 Number of images in the article \n",
"8 Number of videos in the article \n",
"9 Average word length \n",
"10 Number of keywords in the metadata \n",
"11 Category of the article: 0-Lifestyle, 1-Entert... \n",
"12 Minimum number of share counts among all artic... \n",
"13 Minimum number of maximum share counts per key... \n",
"14 Minimum number of average share counts per key... \n",
"15 Maximum number of minimum share counts per key... \n",
"16 Maximum number of share counts among all artic... \n",
"17 Maximum number of average share counts per key... \n",
"18 Average number of minimum share counts per key... \n",
"19 Average number of maximum share counts per key... \n",
"20 Average number of average share counts per key... \n",
"21 Minimum number of shares of articles from the ... \n",
"22 Maximum number of shares of articles from the ... \n",
"23 Average number of shares of articles from the ... \n",
"24 Day of the week: 0-Monday, 1-Tuesday, 2-Wednes... \n",
"25 Distance to topic 0 \n",
"26 Distance to topic 1 \n",
"27 Distance to topic 2 \n",
"28 Distance to topic 3 \n",
"29 Distance to topic 4 \n",
"30 Subjectivity \n",
"31 Sentiment polarity \n",
"32 Proportion of positive words in the article \n",
"33 Proportion of negative words in the article \n",
"34 Proportion of positive words among the non-neu... \n",
"35 Average sentiment polarity of the positive words \n",
"36 Minimum sentiment polarity of the positive words \n",
"37 Maximum sentiment polarity of the positive words \n",
"38 Average sentiment polarity of the negative words \n",
"39 Mimimum sentiment polarity of the negative words \n",
"40 Maximum sentiment polarity of the negative words \n",
"41 Subjectivity of the title \n",
"42 Polarity of the title "
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"feature_data = pd.read_csv('data/kaggle_data/features.txt', header=None, sep=\" \",\n",
" names=['feature_names', 'feature_description'])\n",
"feature_data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Now, let's load and look at the distribution of number of shares (output). **"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
" feature_names \\\n",
"0 'nb_words_title' \n",
"1 'nb_words_content' \n",
"2 'pp_uniq_words' \n",
"3 'pp_stop_words' \n",
"4 'pp_uniq_non-stop_words' \n",
"5 'nb_links' \n",
"6 'nb_outside_links' \n",
"7 'nb_images' \n",
"8 'nb_videos' \n",
"9 'ave_word_length' \n",
"10 'nb_keywords' \n",
"11 'category' \n",
"12 'nb_mina_mink' \n",
"13 'nb_mina_maxk' \n",
"14 'nb_mina_avek' \n",
"15 'nb_maxa_mink' \n",
"16 'nb_maxa_maxk' \n",
"17 'nb_maxa_avek' \n",
"18 'nb_avea_mink' \n",
"19 'nb_avea_maxk' \n",
"20 'nb_avea_avek' \n",
"21 'nb_min_linked' \n",
"22 'nb_max_linked' \n",
"23 'nb_ave_linked' \n",
"24 'weekday' \n",
"25 'dist_topic_0' \n",
"26 'dist_topic_1' \n",
"27 'dist_topic_2' \n",
"28 'dist_topic_3' \n",
"29 'dist_topic_4' \n",
"30 'subj' \n",
"31 'polar' \n",
"32 'pp_pos_words' \n",
"33 'pp_neg_words' \n",
"34 'pp_pos_words_in_nonneutral' \n",
"35 'ave_polar_pos' \n",
"36 'min_polar_pos' \n",
"37 'max_polar_pos' \n",
"38 'ave_polar_neg' \n",
"39 'min_polar_neg' \n",
"40 'max_polar_neg' \n",
"41 'subj_title' \n",
"42 'polar_title' \n",
"\n",
" feature_description \n",
"0 Number of words in the article's titles \n",
"1 Number of words in the article \n",
"2 Proportion of unique words in the article \n",
"3 Proportion of stop words (i.e. words predefine... \n",
"4 Proportion of non-stop words among unique words \n",
"5 Number of hyperlinks in the article \n",
"6 Number of hyperlinks pointing to another website \n",
"7 Number of images in the article \n",
"8 Number of videos in the article \n",
"9 Average word length \n",
"10 Number of keywords in the metadata \n",
"11 Category of the article: 0-Lifestyle, 1-Entert... \n",
"12 Minimum number of share counts among all artic... \n",
"13 Minimum number of maximum share counts per key... \n",
"14 Minimum number of average share counts per key... \n",
"15 Maximum number of minimum share counts per key... \n",
"16 Maximum number of share counts among all artic... \n",
"17 Maximum number of average share counts per key... \n",
"18 Average number of minimum share counts per key... \n",
"19 Average number of maximum share counts per key... \n",
"20 Average number of average share counts per key... \n",
"21 Minimum number of shares of articles from the ... \n",
"22 Maximum number of shares of articles from the ... \n",
"23 Average number of shares of articles from the ... \n",
"24 Day of the week: 0-Monday, 1-Tuesday, 2-Wednes... \n",
"25 Distance to topic 0 \n",
"26 Distance to topic 1 \n",
"27 Distance to topic 2 \n",
"28 Distance to topic 3 \n",
"29 Distance to topic 4 \n",
"30 Subjectivity \n",
"31 Sentiment polarity \n",
"32 Proportion of positive words in the article \n",
"33 Proportion of negative words in the article \n",
"34 Proportion of positive words among the non-neu... \n",
"35 Average sentiment polarity of the positive words \n",
"36 Minimum sentiment polarity of the positive words \n",
"37 Maximum sentiment polarity of the positive words \n",
"38 Average sentiment polarity of the negative words \n",
"39 Mimimum sentiment polarity of the negative words \n",
"40 Maximum sentiment polarity of the negative words \n",
"41 Subjectivity of the title \n",
"42 Polarity of the title "
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"feature_data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Now, let's load and visualize the features. **"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pandas import plotting\n",
"plotting.scatter_matrix(train_data.get([\"nb_words_content\", \"pp_uniq_words\"]), alpha=0.2,\n",
" figsize=(6, 6), diagonal='kde')"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/wbader/miniconda3/envs/tp-ml/lib/python3.6/site-packages/seaborn/_decorators.py:43: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n",
" FutureWarning\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbEAAAGoCAYAAADICdviAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAB5+klEQVR4nO3deXhU5dn48e85Z9Zksu+QgKyCyCKLYl1AENQiSxVbad0XrO/b2taq1dal1bq+1tbW+itoFffWaota1FpRwA0FQSIQZN9JQvZMZj9zfn9MMmTPJJlkJuT+XBeXZnLmnDuTZO4893me+1EMwzAQQggh+iA11gEIIYQQXSVJTAghRJ8lSUwIIUSfJUlMCCFEnyVJTAghRJ8lSayZvXv3xjqEJiSe9sVbPBB/MUk8HYu3mOItnngmSawZt9sd6xCakHjaF2/xQPzFJPF0LN5iird44pkkMSGEEH2WJLEuePGzfbz42b5YhyGEEP2eKdYB9EUuXyDWIQghhEBGYkIIIfowGYl1wouf7cNu1mIdhhBCiHqSxDrB5QtgIP2ShRAiXkg5UQghRJ8lSUwIIUSfJeXELiip8VDn0/nTyh2kJVi47PTBsQ5JCCH6JUlinfRNcS0vfr4fgLQEM9edOSTGEQkhRP8l5cQIvPjZPl5ffxDDMFi1/SipdjMLJw6k0uXn451lsQ5PCCH6LUliEXD5Arj8AfZVuDhY6Wbq0HTGF6QybmAKa/dUcLDSFesQhRCiX5Ik1gkb9leRaNEYNzAFgLNGZGIY8NqXB2McmRBC9E+SxCJkGAb7K1yMyHFg0kIvW4rdzAkZCfxj/UGCQVk/JoQQvU2SWISOOn24fDonZCQ2eXx8fiqHqtx8uqs8RpEJIUT/JUksQnvL6gA4ISOhyeMn5jhItpn45wYpKQohRG+TJBahveUuHFYT6YmWJo+bNJXzxuTy3tYSPH49RtEJIUT/JEksAoZhsLe8jkHpdhRFafH5C8cPwOkNsHr70RhEJ4QQ/ZcksQjUegLUegLkpyW0+JzdorH3aB0JFo1/Fx6JQXRCCNF/SRKLQGmtF4CcJGurn/cGdEbmJLGyqAS3T0qKQgjRWySJRaAhiWW1kcQATspLwuXT+WBbaW+FJYQQ/Z4ksQiU1npJsZuxtbMh5qD0BLKSrPy78HAvRiaEEP2bJLEIHK31kpPc9igMQFUUvn1yLh9sK8XpDfRSZEII0b9JEuuALxCkvM5LbrKtw2MvHD8AbyDIfzYX90JkQgghJIl1YNdRJ0EDcjpIYnaLRtHhGtITLby6/kAvRSeEEP2bJLEOfFNcC9BhORHA49cZOzCZz/dUsKe+w4cQQoieI0msA9uKa1EVyHR0nMQAxg1MQVXg7+tkNCaEED1NklgHthXXkOmwoqktO3W0JslmZsaoHF5df0DaUAkhRA+TJNaBb4pr210f1pprzxxCRZ2P16UpsBBC9ChJYu2odvk5Uu0hO8JSIoQmeOwsqWVAio2/frRH9hkTQogeJEmsHd+UhCZ1ZEcwqaMxt19nygnp7C6r4+3N0k9RCCF6iiSxdmwrrgEgqxMjsQYTB6eSnWTl129sIaAHox2aEEIIJIm1a1txLck2E0k2U6efqyoKZ4/IpKzOx2tfyr0xIYToCZLE2vHxjjIyHdZW9xCLxIhsBwNTbfzh/R0yU1EIIXqAJLE2BIMGxdWeTs9MbExRFKaPzKK4xsMLn+2LYnRCCCFAklib9le48OlBclM67pnYnlF5yYzIdvDYf7dT5fJFKTohhBAgSaxNWw6HJnXkdTOJAUwbkYnHr/O797Z3+1xCCCGOkSTWhq1HqlEVyO5GObFBdrKN04ak8+LafTzyzrYoRCeEEAIkibVpy+EaMhxWzFp0XqIZo7OxWzTe2HRYFkALIUSUSBJrw5bDNeR2cpFze+xmjRknZnGoyi3tqIQQIkokibWitNYT2s05qfv3wxobOzCFgal2Hni7iKO13qieWwgh+iNJYs2YTKbwpI5I9hDrDEVR+PbJudT5dO74ZyGGIWVFIYToDklizfxnZx3PfbIXVaHb0+tbk5Vk5bbzTuT9olKWfbo36ucXQoj+RJJYM06Pj91lTsYMSMFq0nrkGtecMYRzR+fw2xVFfLyjrEeuIYQQ/YEksWb0oMHhKg9TTkjvsWuoqsLvvzeejEQL1yxbx6e7JJEJIURXSBJr5mhdgEDQYMoJaT16nSSbmUunFJBsN3HVs+t4Ye0+uUcmhBCdJEmsmSO1fgAm99BIzG7RePGzfby+/iAOq4nrzhzC4PQE7lq+mUv+8hkf7TgqyUwIISLU+T1GjnNHav2kJ5i71fi3Iy5fAINQokq0mlg4cSAbD1Sx6WA1l//1CwrS7MwclcM9807qsRiEEOJ4IEmsEZcvwKFqH6cM6tlSYnOKonDG8EymDsng60PV/LeohGWf7WVXmZMbTknq1ViEEKIvkSTWyJrtZegGjMxxxOT6Pj3IhEGpDMtKZPPhGt4vKuXz3eX8JSGDGaNyYhKTEELEM7kn1sh7W4uxagoFaQkxjcOkqZw+LIPrzjyBVLuJa5et58cvb4hpTEIIEY8kidUL6EFWFpUyOM2CpnZtJ+doS02w8L3xGQzLSuStwiPcv2KrNA8WQohGJInV8waCKAqcmBn9Lh3dYdFUFk7KZ9LgVJ76aA8/emUDHr8e67CEECIuSBKrl2g1seHOWQxMscQ6lBZURWH++AHMHz+AdzYX850nP2XXUWeswxJCiJiTJNaIGidlxNYoisKpQ9J55sopFFe7ueDxj3jk3W2UOaUbvhCi/5LZia2wWzTeLjwc6zBasJk1DlW6uf7Moew46uTJVbtYumY3M0dn893JBZw1IguLSf4uEUL0H5LE2uD2B2MdQqtcvgBJdhOTBqUxIsvBp7vL+WRnOf/ZUoLVpHLemFxmj8lh+onZOKzy7RVCHN/kXa6PakhmZ4/IZOboLIoO1/JNSS2f7CzjzU2HsZhUzhyeyYxR2XxrWAZDMhNRlPgtlwohRFdIEjsOmFSV4dkOxuanYBhQUu1h48EqvtpfxQfbSoHQBp8TB6UxKjeZ0XlJDEi1k5VkJT3RglmTEqQQom+SJHac8fh1clNtTE/I4vwxORyu8rCv3IXJpLL5UDXvbi6mtZVmqhKaPIIBihK6L5jpsJLlsJKVFPqX6bAQcNZwRCkh02ElwaJh1lRMmopZUzCrKmaTiklVsJpUGfkJIXqcJLFmHDYLCWYTdrNKgsWE3ayhoMTsvybdjKU+jq7ElJ+mMiI7CUWFC8bkcKTaQ407QGmtB18gSJ1PR1XArwdRVQW3T0dTFfy6gdsXoLzOy76KOqrdfjwN9wk/jWz/M6tJxWbWsJlV7GYNm1nDatawaiqqGhpBaqqCSVVC/9UUNFU99nGj/1rNGjaTGvpv/TltJo3KMjf79CM9+BPRWNtJuXG+PnLYw/5gcQTPanhuO+dt93mRfe7wYQ9HlJJm523vyZE/3Fbs7cV9qNjLUe1oi8c7WsYfye4OHR7RxgGHjngoVkrDjbnbj6N7n9dUhW8Nz+ixTXf7G8U4Dvf9+Oqrr7Bau9aF3uv1dvm5PUHiaV+8xQPxF5PE07F4i6mteEwmEyNGjIhBRPHruByJWa1WRo8e3aXnFhUVdfm5PUHiaV+8xQPxF5PE07F4i6mteIqKimIQTXyTO/pCCCH6LEliQggh+ixJYkIIIfosSWJCCCH6LEliQggh+ixJYkIIIfosSWJCCCH6LEliQggh+ixJYkIIIfosSWJCCCH6rJgnsTvuuIPTTz+dCy+8sNXPG4bBb3/7W2bNmsXcuXPZsmVLj8az7mAdi5au5cyHP2DR0rWsqt/KRAghRPyJeRK76KKLePrpp9v8/Jo1a9i7dy/vvfce9913H7/+9a97LJZV20p58vNySms9pNrNlNZ6uPvNLZLIhBAiTsU8iU2ZMoWUlJQ2P79y5UoWLFiAoihMmDCBmpoaSkt7JqksWbMbswYJFhOKopBgMWHWFJas2d0j1xNCiM4orfHEOoS4E/dd7EtKSsjNzQ1/nJubS0lJCdnZ2W0+x+v1dqnb8+7SahJN4PG4w48phsHu0q6dLxo8Hk9cda6WeDoWbzFJPB2Lt5jaisfp8cdVnL2lvR0G4j6JtbbdWUc7Bnd1K5ah2dUcLK8m0WYPP+byBRiabYvZNg19ZYuIWIm3eCD+YpJ4OhZvMbUVz56y9XEVZzyIeTmxI7m5uRQXH9slt7i4uN1RWHfccPZQaj1BdpTWsq24hh2ltVS7/dxw9tAeuZ4QQojuifskNmPGDJYvX45hGHz11VckJSX1WBKD+lGeUT8CNDreWl4IIUTsxLycePPNN/PFF19QWVnJ2WefzY9//GMCgQAAixYtYtq0aaxevZpZs2Zht9t54IEHeiyWJWt247Aq5Gc4wo+5fAGWrNnN9FE9lziFEEJ0TcyT2GOPPdbu5xVF4Z577umVWA5UurBpTcdedrPGwUpXr1xfCCFE58R9ObE3FaQl4NWbTiRx+3Xy0xJiFJEQQhzT2kS3/k6SWCM3nD0Uvx4qIRqGgcsXwK8bMrFDCCHilCSxRqaPyuZ/TssgO8lGtdtPdpKNe+eNkfthQggRp2J+TyzeTMlP5IpZsg5DCBF/pJjYkiSxZtYdrOPej9ZyoNJFQVoCN5w9VEZiQggRp6Sc2Ig0ABZCxDUZirUgSawRaQAshIhnksNakiTWyIFKF1ZZJyaEEH2GJLFGZJ2YEEL0LZLEGpF1YkKIeCaLnVuSJNZIwzoxs6qwo9TJwUo3iRYt1mEJIQQg98RaI0msFS5/kPw0OyOyHfj0oMxQFELEBRmItSRJrJlnN1RQWuNhf4WLPWV16EFDZigKIeJCULJYC7LYuZFV20rZU+kPf+zXddzlLgrS7TJDUQgRc5LDWpKRWCN3Lv+6xWNB4GClW2YoCiFizpC7Yi1IEmvkULWn1cd1A5mhKISIuaDksBYkiTXSMFRXWvmc9E8UQsSaYYAumawJSWKNJJiPTadXOJbMGj8uhBCxVOvxd3xQPyJJrJEfThuKSmgtRsM/VQk9LoQQ8aCizhfrEOKKJLFGbjp3JN8fnxIeeSkKDEixMS4/NbaBCSFEvUqXJLHGJIk1MzLTRmaSlWFZiYzJS8Zq1mSxsxAiblTUSTmxMVkn1swzX1ZwqNqP3miSR4rdxJI1u2VyhxAi5g7JmtUmJIk1smpbKXurmv6VYwBV7gAb95fHJighhKinqbCnrC7WYcQVKSc28tA7RW1+zhNASopCiJgyayp7ymUk1pgksUY6+uG4643NvRSJEEK0ZFIVdh91xjqMuCJJrBMOVLplNCaEiBmLSeNQlRunNxDrUOKGJLFGspOsHR4j3eyFELFiNakYBmw9XBPrUOKGJLFGItkAU7rZCyFi7etD1bEOIW5IEmukLIKV8NLNXggRK1aTSordzBZJYmGSxBrxBYIdHnP60PReiEQIIVrSVIUR2Q427K+MdShxQ5JYI2attf71x6jAZ7sreicYIYRoxhsIkpNsZW+5i+I2to7qbySJNTIyJ7ndzweBL/ZWsGjpWpmlKISIiaFZDgDW7pYGDBAHSWzNmjWcd955zJo1i6VLl7b4fG1tLT/84Q+ZN28ec+bM4fXXX++xWCIpFVo1hdJaj/RTFEL0OpOqMHZACsk2kySxejFNYrquc++99/L000+zYsUK/v3vf7Nz584mx7z00ksMGzaMN998kxdeeIGHH34Yn69nuji//fWRDo9RFIUEiwmzpsh0eyFEr9JUBUWFYVkOPtpRhmHIBpkxTWKFhYUMHjyYgoICLBYLc+bMYeXKlU2OURSFuro6DMOgrq6OlJQUTKaeafkYSTuXOp9OrceP3azJdHshRK/yBoJsPlTDsGwHh6rcbD4k68Vi2gC4pKSE3Nzc8Mc5OTkUFhY2OeYHP/gBN954I2eddRZ1dXX8/ve/R1Xbz71er5eiorb7ILbFH8HsRAh1kc5NMpFmN3XpOp3h8Xh6/BqdIfF0LN5ikng6Fm8xtRWPqoBDDTBpQAL/2gAvrt7MVROP/xnTo0ePbvNzMU1irQ2FFaXpDMGPP/6Y0aNH8/zzz7N//36uvvpqJk+ejMPhaPO8Vqu13S+6LTbLPlw+vcPj/EFQNAs3nz+G0T28PUtRUVGXvpaeIvF0LN5ikng6Fm8xtRXP+q++5oS8UNIamZvE2sM+Hvr+qBbvm/1JTMuJubm5FBcXhz8uKSkhO7tpUvjnP//J7NmzURSFwYMHk5+fz+7dPXMvqoMZ9mEKcO+8MbK/mBCiVzWUEzcfquHkASnsK3exbm//XjMW0yQ2duxY9u7dy4EDB/D5fKxYsYIZM2Y0OSYvL4/PPvsMgLKyMvbs2UN+fn6PxBPpXzP5aXZJYEKIXmdSFfJSbOSl2Jg+MguH1cSr6w/EOqyYimk50WQycffdd3Pdddeh6zoXX3wxI0aM4JVXXgFg0aJF/M///A933HEHc+fOxTAMbrnlFtLTe6YGbDFFltMj6bEohBDRpqkKGQ5L+OOJg1JZUXiEu+acREqCOYaRxU7Md3aeNm0a06ZNa/LYokWLwv+fk5PDM8880yuxjMhOoszZ8dqLQ1XuXohGCCGa8gaCbD56bEbihIJU1uwo4+Uv9nPj9GExjCx2Yr7YOZ7ccPbQiI6r9er88f3tPRyNEEI01bicmJdiY1x+KmeNyOTZT/ZE1Pv1eCRJrJHO3Od67P0dTLrvPWlBJYToNQ3lxIZ/BgYjsx2U1nr57YqtsQ4vJiSJdYPTE5AWVEKIXtN4dmLDv0SridxkG8s3HsIdwRKh440ksW7w6oa0oBJCxJSiKJw5IpMaT4CnP+p/70Mxn9jR120rrsGiqVS7eqafoxBCNGi4J9ZcXoqNXaVO/rJ6F9+dUkBOcstjjlcyEmvGZurcyne/blDn0ymr83P+71dLWVEI0WOa3xNr/O/qM04gEDT41b++7leNgSWJNbNwTPt7irVn59E6uT8mhOgxrd0Ta/jn8uncet6JvF9Uyj83HIp1qL1GyonNjMy0AdVdem4gaITvj0lHDyFEtLVVTgTIdFi5ZHIB720t4c7lmzl5YAon5ib1coS9T0Zizby2pWsJrIFs0SKE6CntlRMNDF7/8gDnjsrGYlL54YtfUuPxxzrkHicjsWZKnIFuPd/t18lPS4hSNEIIcUzzjh1tuXRKAU9/vIefv7qJJZdNQlWP3y73ksSasXdyYkdz1W4/d805KUrRCCHEMe2VExvLdFjJSbZx77+3cu+/t3LP3JOO2+1aJIk14/Z3b7FglsMq98OEED2ieQPgthgYJFpUZo3OYdmne8lJth23vRUliTVT4ene1NSjtZ4oRSKEEE1FWk5scM6oLOwWjYff3Uamw8Ilkwt6MLrYkCTWjK53L4lVuf2s2lYqozEhRNRFWk5skOmw8ugl46l0+fjF64VYTCrzJwzswQh7nySxZiwmBU+g64lMVWSKvRCiZ0RaTmxgYLB840Fmjc7hUKWbn/7tKz7bVc65o3M496ScHoy090gSa0br5r3PQNCQKfZCiB7R2XJiY+efnMubXx3m7+tCO0EfL0lM1ok1smpbKe5ujMIAggY4rPK3gRAivpg1lXkTBjAg1c7f1x3ghbX7Yh1SVMi7bb1V20q5+80tBKPQcqw/9S0TQvSezt4Ta80NZw/ltQ0HuWv5Zo7WevnZuSP69PR7SWL1lqzZjS8Qnb149pbXReU8QgjRWGfvibXlf6YP48W1+/njyh0crfVy3/wxmLS+WZiTJFbvQKWLWk8ATYFuTlDEEzBkhqIQIuq6c0+suTljcxmXn8KTq3ZxoMLFnxadQlpi9xNkb5MkVq8gLYHiak9UkhjAw+9ukyQmhIiqaJQTG2Q6rCw6bTAnZCRy5/LNzPvzxyy5bDInDej6Th6xIEms3g1nD2XD/koC0bgpBuwuk5KiECK6olVOhND0+1fX7SdowC2zR/LXT/bwnSc/4c45o7ls6uA+c59Mkli96aOy+d/pw3jiwx1E486YTw9KSVEIEVXRLCc2lpdi498/Potb/rGJu97YwoffHOWRhePIdFijfq1okyTWyE3njiTVqOHulSXdPpdhwLXPr2NEloPbLxgtyUwI0W3RLCc2lumwkpVkZdnVU3ju07088M42Zv9+DXddOJoFEwbG9ahMklgzU/IT0VQFPQplRT0Iu446ufvNLdwLksiEEN0SzXJiY41Lizazxv9OH8brGw7ys79v4p8bDnH/grEMyojPLaYkibXCrIYSUDT4g3CkysVD7xRJEhNCdEtPlRNbM3/CQPaXu1i5rZRZv1/N9WcN5YfTh8VdM4f4iiYOrDtYh4ECRG/Bsj8I20qcnP/71VJaFEJ0WU+VE9syPj+V2789igff3sYTH+7kb+sOcPOskXx3cn7crCuTJNbMa1uqSbCoeANRGoo1IqVFIUR39FQ5sS0GBh9tP8q3hmWQn2ZnxddH+OW/vubxldv59sl5nDE8M+Y9GCWJNVPiDODyRqdzR3OBIJg16XIvhOia3iwnNmfWVOaPH8DOo04+2VnOs5/u5eOdZeSn2xmVG7u1ZZLEmrGbFEqisdq5rfObNQ5Wuli1rZQla3ZzoNJFQVoCN5w9VBKbECKuKYrCiOwkhmY62HSwivV7K/n24x/x3ckF3Dx7JNlJvVfqbCBJrJmenElqMam4/TqJFo2739yCWVNItZsprfVImVEI0aHevifWnvw0OxdPzOfrQ9U8/9le3tx0mB9OG8b1Zw3FbtF6LQ5JYs24/AbZDgulTl/Uz52WYMavG1g0FbOmkGAJvfwJFhMuX0DKjEKIdvX2PbFInJjj4CczR/DO5mIe++92Xvp8H7fMPpGLJ+ajqj2/vkySWDM5DhN1utYjSWxIpoMbzh7KnW9sJtVubvK5hjKjEEK0JZb3xDpy7ugczhyeydrd5dz6WiHPfrKXe+aexGlDM3r0ujFPYmvWrOH+++8nGAxyySWXsHjx4hbHfP755zzwwAMEAgHS0tJ48cUXeyyehWNSeHpjbY+c+5XFUwEoWJNAaa0nPBIDcPt18tPiczGhECI+xFM5sTWZDiu/OH8UbxUe5uF3tvG9pWuZO34Ad1wwigGp9h65ZkyTmK7r3HvvvTz77LPk5OSwcOFCZsyYwfDhw8PH1NTU8Jvf/Iann36aAQMGUF5e3qMxTclPZFDBIK5ati7q555073vYrSYcFo0atx8IjcDcfh2/bnDD2UOjfk0hxPEjHsuJjRkYvPblAYIG/HDaMFZvP8o7Xx/h3c1HmDEqm4tOyee8k3Ojes2YJrHCwkIGDx5MQUEBAHPmzGHlypVNkthbb73FrFmzGDBgAAAZGT0zNPUFgrxfVEKiz2D6pJ65L1Xu8jPYZsIfNDAAi6ZS7faTL7MThRARiOdyYmtOHpjCoPQE1uw4yn+2lLD5UA0nZCZyYm5S1K4R0yRWUlJCbu6xrJyTk0NhYWGTY/bu3UsgEODyyy+nrq6OK664ggULFrR7Xq/XS1FRUadieaOomr98UY7NpHDlfiepdhNV7kCnzhGJfRVuLJpCslXFjJ+l80LJGaOc5/+7n9e2VLOv0kfACLW/yk828d2DdUzJT4x6LF3h8Xg6/dr2pHiLB+IvJomnY/EWU1vxqAo41Oi/L/UkR6LCpROyKSqp471vyrnwTx9x9eQsFk3IbLOxsMfjwTCOLXUaPXp0m+ePaRJrHGSD5l+Uruts2bKFZcuW4fF4uPTSSxk/fjxDhgxp87xWq7XdL7o15gwnr239jDKnjyWfHyXZZiI7yUJFnT9qe4w18OkGZS4dr37sm7NqWylPbyzGFzBwBULX8wWg2Knz9MZaBhUMiouRWlFRUadf254Ub/FA/MUk8XQs3mJqK571X33NCXnpMYio+07IS+fMUbk8+8leln5eymcHvVwyKR+LqWn7qkyHlXNPOiHi88Y0ieXm5lJcXBz+uKSkhOzs7BbHpKWlkZCQQEJCApMnT2bbtm3tJrGuGJ7t4L2fTeN/n/uUz/bXUeMJUOMJTYv3+nVc/ui3oar16uF+ikvW7MasKZQ7A6goqKpC0DCo8wVJSZQuH0KIvldObM05J2aTarfw0c4yims8zBs3AIet66kopkls7Nix7N27lwMHDpCTk8OKFSv43e9+1+SYmTNncu+99xIIBPD7/RQWFnLVVVf1SDzpiRbumjmAX75fytcHa9ANg0qXH6tJJT3BQqXbRyuDx27ZW+Hi7je3UOf1k5dix6cH0epHo4oCft2Q6fdCCCD+ZydGakCqnWHZibzyxQHe2HSIG84eSpIttOyosxtxxjSJmUwm7r77bq677jp0Xefiiy9mxIgRvPLKKwAsWrSIYcOGcdZZZzFv3jxUVWXhwoWMHDmyx2JSgjoun87pQ9NZt68SbyBY/89Hit2M2xfAF8W2VB5/kMNVbgzArHmxaCoB3UBRQhtrmlVFpt8LIYD4n53YGWcMzyQn2cYf3t/Bu1tKeOX6qS1Ki5GI+TqxadOmMW3atCaPLVq0qMnH1113Hdddd12vxZSRaGXXUScOq4lkm0KZ04sBVLtDozKHVcPpjd7N1UAwtPnLUaePJKuGTw8SDBpgQJJNlen3Qgjg+CgnNnfRxIG88sUBnvhwJzfP6vwAJT42hIkzN5w9lKNOL+V1PqrdfrKTrSTU9wLzBoI4vQGSrCai2VHFIDTqqvXqBHSDoAF2i8aAZDP3zhsj98OEEMel8fmpzJ8wgL+s2sXhKnennx/zkVi8apiQ6NODlNR4cVhNZCVZKHf6CBpQ6w1gMaloCrijNOnDEwiiKjBmQHJ4AfTCMUmSwIQQwPFzT6yxTIeVW887kRWFR3j2kz38as5JnXq+JLFWLFmzG4um4mm0MabTG8DlgxR7qImv0xvAV//5RItGnS96e5ApihJuCvzalmqumBW1Uwsh+rDj6Z5YAwODT3eWMTInib+tO8CpJ6Qza0zkXT0kibXiQKWLnGQr+yqaDm2DBuHZihmJZqpcAXTDoM6nY9ZCtUV/Nyd9BA2ocftJtpuxmzVKarzdOp8Q4vhxPN4Ta5CXYmPrkRq+KamVJNZdBWmhBr1mTWk1KTXMWHRYNFAUnN5A+DibWcXTzfLi4epQ8jRpCjkO+RYJIUKOx3JiA49fZ+W2UvRONpeQd8hW3HD2UO5+cwsOq0alq+1ZiE6fjqqESox13gCBoIHHH8SkKhiGQVcHZX7d4HCVi7zUBMYNsLJo6VrZAVoIcVyWExvo9YtwO9vtXpJYK6aPyuZe4Ka/bezw2KARmnpv0ZT6qfd6uE1VWyO5SPiDsL/CxYsVoX5pdrNGQA/KDtBC9GPHczmxzBm6ddJ4i6pISBJrw/RR2Z1aeOfTDXy6TqJFwxsIEgga+HUDTVUI1net76qgEfrh9dX5yEi0SAsqIfqp47mc2LD2Ni3R3MGRTUkSa4cv0Pl7W3U+HU2BBIuGy6eH67smVelWI+GG5xbXeCmu8XLBH9bwi/NHSTIToh85nsuJH+/0oCiwo7gWl1fn3JNyInqeJLF2NMw47CzdAJdPx2pS0YMGgfp/mqp0+qZlW4qKa7n2+XX8ZMYIbjq359pwCSHix/FcTvxiTwXZSVYqXH6s5shnZUsSa8fInGQ+2931naS99SO5hhmL0RqVNdCD8KcPdwLw2e6KFpM/Vm0rZcma3RE/LoSIb8drOXFPWR2ltV7mjc8jL8XWqSbAksTaccPZQ7uVxBp4/EHMmoJhcGxUptDl2YuN+XWDP6/aRX6anVS7mdJaD3e/uYWFB6t4bcMhzJoS0eMyWUSI+Hc8lhNTbGbeKjxMeqKFhy8ej72+xV+kJIm1Y/qobDIdFsqcvm6fq2GWotWk4g0EwwksGqMyXyA0yttTVhfeyuUvq3eTl2oLz/Rp6ADy9Md7yEqytnhcJosIEf+Ox3LigQoXn+ws5zfzxnQ6gYEksQ5dMXUwj72/I2rn8waChCY9Ko1GZaENMLuaygxgX7kLg9B0/CChNWoBPUiN209xtTu8fYxBaKPPxmS/MiH6huOtnFha42HF10c4fWgGl08d3KVzSBJrx6ptpby24VDUzxu6VWY0GpV1f11Zw7MaD+r2V7hbTYwHK93ko5BsDyUz2a9MiL7heCknptotDEizs/D/fUqSzcz/XTIOtYvbgkgSa8eSNbup9XS/lNiWhlGZgoK/YV2ZogBd7/bRWFun0A0oqfWQZDOFu+XLfmVCxL/jpZxoM6v84/WDOL0BXr3h9G79ES1JrB3bS2qoaqftVDS0NSqzaCo+PTpbvLTG6w9SVFyL1aSSbjdx5xubKVgjMxWFED3rcJWbtzcfQUXh2aunMDovuVvnkyTWDr/evU4bnREalSkoSui6Pj2IpiqogD9Ka8sas5pVcpKsHKryUFzrY2CqjW3F1Vz93DoUwGE1cd2ZQ2QNmhBxpC/fEzMMg8/3VPBW4REyEi28fP1Uhmc7un1eSWLtMIzeSmEhDbMU7WYNtz/U7UMHbPWjtGhGk5Nkq+9VZqAHabHtTJ0vwGPv72DpR7sYOzCtxQhN1poJ0fv66j2xijofz3+2n61HajgpL4nFZw9lw74K1u+taHJcpsMacaeOBpLE2qEoSmi2X+/mMtx+HYtJARR8gSCeQGhUZtaUbm/zAqAR2u6lrUkkBhCsv4zLF2yylmz/wTpu/s8atpc6MWsKOUlWWWsmRC/pa/fEgobBlsM1fLyjDAOD6SdmMW5gCnvKojcbOuIk9s4773DWWWfhcDh48skn2bp1KzfeeCNjxoyJWjDxxmJS0XwKmtr9zS47yxcwUDBItGq4vPWjsqAR7mbfnRKjDugdfD2NZzsWV3tItpt46J0iquo8VHmCaAoYQThc7WFAih2zpshaMyF6WF8qJ24vqeXtr4sprvEwNDORiyflk5HY/iiyM506GkScxJ588kkuuOAC1q9fz8cff8w111zDr3/9a/7xj390+qJ9xYjsJPaWO6lxBzCMYFRaRXWGAdR5dRLMGrph4A0Ecft1NEXBYTVR5wvQGxXPQNCgrNZHmdNHivVYaVNVDFRFoczpZUhmoqw1E6KHxWs5MdVuYcqQdCCUvO5fUcTq7UcZlJ7Akz+YyAUn56IoXZtC35GIk5imhVZSr169mkWLFnHuuefyxBNP9EhQ8aJhc8zcFBN2s8b2ktrwouHe5PKHOuMn20zUeALohoHTGyDBooFh4IpCibE9qqIQVAwCukGlWwcFFINQGy3DwKhPrrLWTIieFa/lxLwUGydkJvLYf7fz93X7cVhN3DlnNJefPhirqfNdODoj4iSWk5PD3Xffzaeffsr111+Pz+cjGOzZN89Ya9gcc8ma3RysdDEsy8E3xbXE4qvWDajxBEi2mfAGgngDQVz1O0un2s3U+QI9VvJ0+/UmcZhUJbwUAEITYGStmRA9Lx7LiX49yNrd5dz37614A0Gu/NYJ3DRjBGkdlA6jJeIk9oc//IGPPvqIa665huTkZEpLS7ntttt6Mra4MH1UdpPO74TWIsdMjSeA1aSQlmCm0uUnaECV20+CRSPRqlLt9ne7xGjVQkmqre3UGhoYN1RXVQXunTdG7ocJ0cNiXU5sXDYMBg2Wf3WIx1fu4Ei1h/PG5HD7BaMZkpnYqzF1mMSqqqrC/3/qqaeGH7NYLJx88sk9Fli8WLWtlIfeKWJ7qRPDiGn+CvMGDPy6n/REC3XeQHhU5vbrpCdacPt0XD694xM10jg3+4JGh4lQN0LJC6Pt7cRlGr4Q0RXrcmJeio0pQ9L5fHc5v11RxNeHqhmXn8IfvjeB04ZmxCSmDpPYRRddhKIoGIbBkSNHSE4Ora6uqakhLy+PDz74oMeDjJVV20q5+80tFFe7CRqhN/p4ETRCay8SLRqJCRYqXD4MA8qdPuxmjcxEC1Vuf8STURof1VoCU1o5TqvvdZZg0VpMsW947WTLFyGiJ9blRAX435c2sOLrIwxIsfGH701g3vgBXe57GA0dJrGGJHX33Xczc+ZMpk2bBoQmeHz22Wc9G12MLVmzu2lT3voJDRAfIzKAOp+ONxAkJ8lKpduPr36Shad+VObTdWo9nRuVtcYAlGalVIumkumwkmw3t9jOpeG1ky1fhIieWJUT7SaNdfsq+cvqXSgK/OzckdwwbSg2c89O2ohExPfENm/ezL333hv+eNq0aTz++OM9ElS82FFai8sbOPa+HWcJrEEgaFBS6yUtwYzDqlFR58cAyut8WE0quck2Kl2+8E7TXdV4hDY43U6y/dgvU/PtXA5Uuki1y5YvQkRTb5cTDcNgR6mTz3aVU+X2c+G4PO749mgGptp7LYaORJzE0tLSePLJJ5k3bx6KovDmm2+SlpbWk7HF1KptpdR6AgQbz8KLYTyRqHT5sZlVBqTaOFrrxa+H1pYV13hITzSTZDVR4fJ1qwNJdoJKelJCi8XWzafYF6QlUFrraXK/TKbhC9F3HK31snr7UQ5VuclLsbHk8kkxu+/VnoiT2O9+9zueeOIJfvSjH6EoCpMnT+Z3v/tdT8YWU0vW7CYtwUx5nS8quy/3Fo8/SHG1h0yHBV/AoMrtB6Cizo9ZU8hNsVHrDlDr7Vp3/h+dnsWggkHc/eYWXL4AdrNGmdNLpctPtdvPoqVrueHsoeE1du0dI2VFITqnN+6Jef067xWV8OnOcuwWje9MGMAFJ+fFZQKDCJOYruv89re/5dFHH+3peOLGgUoXmQ4rVlPoDdgIBDEMg2D9rDwForLnV08IGlBa6yPZbmJgqp3iGg96/X5lh6s8pNhN5CVbqXD5O11ivHtlCRa1FFv9NuKGEcSnQ3qimYzERn0U543h3nljWLJmNztKaqj16i2Pof1JHjK7UYimevqe2Mb9VbzyxX6qXH5+MHUQt84eRUqzneDjTURJTNM0Kisr8fl8WCzRfQHXrFnD/fffTzAY5JJLLmHx4sWtHldYWMj3vvc9fv/733P++edHNYbWNJTDku3m8A7ILl8Ai6byTUlt3CawxmrcATy+ILnJVmo8AWo9odFXtTuA06uTnWTBrxtU1HWuxOgLGgQ8AXJSrFTUBUmwqNS4A5Q5fVg0lSSbiSVrdvPK4qlMH5XNoqVrm5QWI5nkIbMbhWipp+6J1Xj8rP7mKLvL6sh0WLhx+jBuO39U1K/TEyIuJw4cOJBFixYxY8YMEhKO3de4+uqru3xxXde59957efbZZ8nJyWHhwoXMmDGD4cOHtzju0Ucf5cwzz+zytTqreTmsYQfk+eNz2XnUSVA3mkw715T4HJn59CCHqjxkJFrIS7FRUuMhaIAeNDhS7SXRojEw1U6Vy9+pEqMBHKn2AqFfLAUwqRDQDcrrfNR5q1i0dC0HKl0crfWSm9y0sWdHkzxkdqMQLUW7nKgHDT7ZVcb7W0sxMPj2ybmcMTyTnOT46grSnoiTWHZ2NtnZ2RiGQV1dXVQuXlhYyODBgykoKABgzpw5rFy5skUSe+GFFzjvvPP4+uuvo3LdSDRvOZVfX85asmY3DqtGlSs0a1EBNDXUX9Cqqnh1HbMa2pU5nm6jldeF1o8NTLNT7vSFF0PX+XRcPjeZSRaSbDbK6yKbxdj8SzMAfxDMqkEQA6dPp7TWQ6rdTJnTy6EqDx5/EKc3ENrwU1HaXdkvsxuFaKm75cTGHTe2Fddwyz82sflQDTNHZfOb+WP65MSriJPYj370IwCcTieKopCY2P3WIiUlJeTm5oY/zsnJobCwsMUx77//Ps8991zESczr9VJUVNSlmDweT/i5OcDdZ6Ww7qCJ17ZU84vXNlLuCqAHj62ZMgA9CDoGKVYDnw7+YLBXust3ltuvc7jKQ5bDSpLVRGmtF4PQ13C0NjQdPyvJgscf7HSJsUHDrEVVATXox+v1Y1cNKv2hZQANS838GGwrrmXUnW9j1RQGp1lYOCaFKfmhn6t0q0FlnQubScXp1anyBPHpBjazyvP/XR8+rvH3K17EW0wST8fiLaa24nF5/awq2tXl8xZkJJFmVPPCuiO8tKkSh0XjV9OzOWNQIrXF+ygq7k7UPWf06NFtfi7iJLZ9+3Zuu+02qqurgdCU+4cffpgRI0Z0ObDWdk5u3q7//vvv55Zbbgl30Y+E1Wpt94tuT1FRUZPnrtpWytMbizFrGlnJFkqdNaERmNE0kQHkpSWR6PZTXOPBGwyV2Cyagj9oxM2oTA8aFNeE9gcrSE+gpMYTHnl5A0EOVnpIsZvJT0ugyuWjxtP5WYwKoVGTzWanxu3HGfCHP2c0OsYAPAED3YBSl8HTG2sZVDCI6aOyuVnJ4O43t1Dr1yl3h+JTFYVku7nJcc2/X/Eg3mKSeDoWbzG1FU/NhkLGDivo8nl9gSA/f/sgmw5WM2dsHvctOJn0XmrU21MiTmJ33303t99+O1OnTgXg888/56677uJvf/tbly+em5tLcfGx1F9SUkJ2dtP7HZs3b+bmm28GoLKyktWrV2MymTj33HO7fN3OaH5vRlUV9KAR6mTfLDHVuP0k15fPDE3BAEbmJlPj9rOvIr7KYDXuAF5/kKwkKy5fgIq6Y4mm2u3H6QmQlWQhyRb6ejo7izHJFnq9ypxe1PqU1dCZJlif+Bv+XFFRqPUEyE0xhe95NZRzb/rbRoKGgc2kkZVkJcnWsjuIEP1FV8uJKTYzW4/U8MA720i0aDzx/VO4cNyAHoiw90WcxFwuVziBAZx22mm4XN17Yx47dix79+7lwIED5OTksGLFihZrzxr3Zrz99tuZPn16ryUwaHlvxmZSqau/n6QQGo01NAY+UOlCq1YI6KE3bJtZo8bt53C1Oy4nfngDQQ5VuclMtJKfZqe42hNeD6cbBsU1XuxmlexkKx5fkAqXDz3CIWWlK5QUfXpoRBq6dxh6bRpTlNA/nx5scc9r+qhsku1mBqUnNBmhy70x0V91ZXai16/z0c4ythyuYcaobB6+eBxZSZ3fQTleRZzECgoK+POf/8z8+fMBePPNN8nPz+/exU0m7r77bq677jp0Xefiiy9mxIgRvPLKKwAsWrSoW+ePhuadJ7KSrNSVh95ArWYVwwjtp2MYoRGGWam/T2ZAokULj0RUTUGvn8UXT7nMMOCo04vDamJAqp3KOi+13mO9Ft3+IAcq3KTWrzmrcvuocbdfYrRoCumJ5lD7K8NAU1WykyyhxKYYTdp3mdXQa2jR1FY7ejgsGjuPOtGDRrhXo0lT+uQNaCG6q7OzEw9Xufn7+gPUuAP86tujue6sIT22w3KsRJzEHnjgAf70pz/x4x//GMMwmDJlCg8++GC3A5g2bVq4qXCDtpLXQw891O3rdVbDVPsyp4dqlx9v/chCVQm/sSqo4ckcQSM0WvPrQWq8AfRg/VR8QyHbYaHS7SegG3GVyACc3gAev052kpUEq4nSGm+TGKvcAZzeAJkOG8n1JUZPGztK+4IGZU4fmqKQl2JHURTMmoLNrHKk2oNPD+1HBmAQei2SbOYWG2uu2lZKeZ0vPLL166GRY4JZxawqnPnwB6RbDW5WMqS0KPqFSMuJqfbQzha/eWsrKXYz/7hxChMHHZ9tAiNOYjU1Ndx55509GUtcmj4qm4UHq/jzql3owdC9GbOmUOvVyXRYyEi0UlRcg6ooDEi1hxdG17h9FNd4URUFBchNsZFkM2O3mDhc5aKN9/+YCgQNDld7SEswk59up7TGgzdgNPo8FNd4sJtVspKs4VmMzUuMRv06tCCh8/1kxnA+213BjtJabGYNiymIqqiNjg/thxYIGjz87jYeeqcIp0+nxu0n0aqRn2bnaK0Xnx5EVcAdCOIPGqTazVTWuWQRtOg3Ii0nbi+p5Z3NxYwvSOWpyyeR3YfWfXVWxEns9ttvp6SkhLFjxzJ58mQmT57MiSee2JOxxY3PdleQn2Zv0sz2aK2HOq+OSfWTaDGRYNHCCQzApKlMHJQWHslpamhPNpOmkJJgwQgalLv8rV0u5ipdftx+nexkG3VenYo6X5PPN5QY0xLMbZYYDQOCgEUNvX4Nr0OKXWmyeHzhxIG8tuEQvoBOeZ2PMmfoWhqAAm6fzsA0O0OzHADsKq3Fpxvh74XNpBJUlZhN9GitNVZOr0chRIhhGHy6q5z1+yq5cFwej14yPi62S+lJESexl156CZ/Px9dff80XX3zBDTfcgMvl4osvvujJ+OJCawtvMx1Wqt1+PvrFjHCLpObdPRp6/TVeNJ1o0VCAlEQLqgrldf5wP8Z4mYYPoUbChyrdZDqsDEy1U1LjpvkExUqXn1qPnwyHtUWJsfFU+oOVrjY7cDz98R4SLBplTl+TJst6w0kUg6O1XpJsodffqwexmZr+UsZqoseqbaXc+tomaj0BAsEgZbVebn1tEz8+LY04mq0tjiPt3RMzDIO3Co+wfl8lZ4/I5I+XnhLTzSp7S8RJbP369Xz55ZesX7+e2tpapk+fzuTJk3sytrjR0bYibXX3aBgZNEwZB1i0dC3+oEFAN6hyB0ITG+rf8v1xdq8s1EjYS5LVxIDUBCrrfC1aUwWCUFLjJcGikemw4g0EqawvMRqAVzeodvupdlcT0ENlQIsWKkc6rCbqfDp60Ghz1qMeBI9fxzAM3H4dk6qGp+83iNUWLw+/u41Klx9NVTBpoQkqlS4/z26o4IpZvR6O6AdauyfW0IXjD+9v59Nd5VxzxhDuunD0cTeBoy0RJ7HLL7+ck08+mRtuuIGzzz476o2A41lbfRQbT0JonKja0zCq21NdF5q1qCr1XT8M0hLMVMRhibHWG8AT0MlOsmGzaByt9bY4xlXfvio1wcyAVHt94gp9LbWeYxuLagoElFA3/QyHmUSLhsunt5u8g4TuxY3ITmL++AG8tuFQ+HvhCQRRtKbfi45Eqzv+7rK6UGeS+jcLRQFDMThYHX/fQ3F8aO2eWF6KjV1Hnfzh/R1cPDG/XyUw6EQS+/zzz9mwYQPr1q3j+eefR1VVJkyYwE9/+tMeDC8+dDTS6oyGUV1D/0AgPMXc49cxqQppCWbKnL5239gzHRaumDqYdzYXs624tsdHcH7d4FCVm4xES3iiRWsLoKtcoYXSGQ4LSbZQn0a3/9iUfd0Avf55ZU4fPz5nOH/6cGeb11WAnCQrQzIdvLI4tE5xXH5q+HuRZjdx8/ljIv5e9Ep3/H70BiJ6V2vlRKc3wMPvbuPskVk8dPHYfpXAoBNJLDk5mYKCAo4cOUJxcTEbN24kEOjaxop9UaQjrbY0/PW/vaQGp1dHAYJGaPq9YYTWnx2odGEzhUYmFk3FILQIuDmTquALBPnzql2kJZgZlG6npCaUVHo6mZXX+Ujwa+Qk26jx+Kly+VusfQsEDUpqvNjNGhkOC75AaBZj841F/brBuPxUchwWDla3HN0BZDksZDqsLRZBN3wvioqKGN2J70s0u+MPyUhg59E6lKARXvQeNCA/OeJfKyE6pXk50app3P3mZjIdVh7/3gTMmtrOs49PEf+2nXvuuQwZMoTJkyezaNEiHnzwwX5VUoxEW2Wqxn/956XYKXN6KXN6CRqhhcG5KdbQfZX6+z3ldaE1VqqioAabTvhoWF/l9esECSWVASl2RuQksaOkFhQYkZ3E7qPOUHcMJZT03H49ahNH3D6d4hoP6QkWClI1jjp9eFoZlbn9Ogcr3aTYW5YYGxLfw+9uA1VlcH0ibnweTVXISbHj8gWids8rmt3xb79gNLe8tgln/XpATVVItZq5ZtLxuR5HxF7zcuKX+yrZV+Hi74tPJ62P90DsqoiT2HvvvYeqtp3llyxZwg033BCVoPqi9spUzf/6z0qykWg1YVYV0hJDo4zsJFv4fo+mKgSDx0ZpJlVBUxT8wSCKoqAbBoEg4fsxZU4vyXYzgfrPQ2j25OFqN4oBbl+QaC1LM6uQmmAh2W7mSJUbu0VjQKqN4hpveHuX5qrdfuq8AdLrS5HlTl996TR0X2nioDRKaz2MyEmi1uPncJUHg9AEEJcv0OL+Y3d0NEmnM6aPyubRheNblJlzjPKoxCpEc43LiUdrvXy2q5zvTirg1PrtVfqjiJNYewkM4N133+3XSay9MlVbf/1Xu/28+7OpTR4fl5/KQ+8UseOoE3P9QmlVgYZCYSDYaDNOAwKGgVE/ejGparirbsOatcNVLoIQ7l/YOJm19lhrTCrhUeKPT0tjUMEglqzZTbXbT60nQKLFRHqihQSLHl7n1VwgaFBa27LE6A0EyU22cKjKjcsXwGE1keEItayym1Wyk2xdvv/Ymkgm6XRGa2XmoiJJYqJnWEwql04cBMBP/7YRm1nllvP6x3rdtkSteN/atir9SfNEVeP2U+b0src8tDYsoAfJSjp2Q7atv/4b3hQbSpPr95ajqgo5STYONCp5Nb51qwcNth6pRlUU7PWjF7tZw6QpqKpKui10n83TqHejApg0hYxEC4Gggcun4/UfmyVoN2tYTAp6kPDWLA2jjNGN3rgb4vx8TzkZ9Y2ES2u8rd7La/i6m5cY3ywsZt64XIprfBysdHFChoMHvxO9xNX89e3KJJ1ozWgUojv89b9XJTUeVnx9hMumDj6umvl2RdSSWH+bEdNc4zJVQ+d6AKumkGjVKK0NjVAyHdaI/vpvSGbP/3c9T2+sxaQde31DjXMVgoYR7oxvM2kk2UwE6tdhVbv95KclcLTWS60ngKoqob3NGnWRT7GZGJLpCMfRUA5tPEK5d17TmX/NRxnTR2VTeLCKz/eUhxsJ56bYmnTxaG0hd0OJMdthIS3Bxqe7Kvj8V+eGk8Wdb2ymYE3nkkXzRHP60HQ+213RIvF0dpJOr8xoFCICWv3i5de+PIhfN7jqWyfENqA4ICOxKGlcpipzhmbaKShkJ9vC3SbqvHo4uUT65jwlPzFcvjtY6SYYDKKpKrphYNR3+rCbtXBbJpcvQGqChXd+ejYA4379H2hYy6QoaCr4dB1QsNWXPgsPVvHZ7goq6jy4/QaGYeCwmrjuzCERxfj0x3tCE1NQcPkCeP06WUlWUm1mll1zKn49yP/95xveLypt8rxA0OCo04fdopKaYGHN9lJ+8++tqEpoAsv6veV8trscs6owPNvBL84f1WY8zRPN3nInX+ytIMmq4dcNiqs9bNhfyf9OH8ZN545s82tpbcTV2RmN6w7Wce9Ha2XUJqLOMODVdft55Yv9DMlMZHBGYqxDirmozcc8//zzo3WqPmn6qGzunTeG7CQbnkAQs6owIPVYAstItJJiN/PRL2bwyuKpnXpTmz4qm1cWT2XJZZPIS01gYJqdE3OSUJTQX2aZjlA5ocbtp7jawxd7K1i0dC2rtpVirh/BBYOh5OTXg+hBMOob6O4pc/L4BzvZVlyNyxckWL8Ltcev8/zafazaVtpeaACh/dUMg0B9J3/dMEK9JX0Bku1mLJpKWa2PnFbKHv6gQY0nVGJ87D/fkJdixWZSOVDpDjdJ9gcNdpQ6ufW1TW3G0zjRKIoSGgUaBtXuAAHdwFQ/cv3zql1tnqMhEZbWepqMuLaX1GA3R9bqatW2Up78vLzFOSJ5HYXoiDcQ5JsSJwcr3YzMccQ6nLgQ8Ujst7/9bbuf748d7ptrKFMtWro2ajPgGqzaVspD7xRxpNodflO2aCopdjPJdnOLEmbDm2eWw4pZU6n1BPDpQYKGER69KUpoR2VVgUpX0zV/Pj20ncqd/yrk4zva34TUalJx+UJr36hfL+U3Qo2CMx3W+s4aAZLtJnwBncpW9iNzWDQKD9cwMNWGUr8jQOOF0roRal/V1uin+T3J0NcaKr029I/T6rdzaescbY24/Hqo5VUk38/QOYjKOjQhWrO3rA6Ak/KSYxxJfIh4JOb1etmyZQuDBw9m8ODBFBUVoaoqY8aMYcyYMT0ZY59zw9lD8esGLl8AwzC6PU181bZSbnplA9tKnOH+ikHDwGJS6ydltCxhJlhMmDUFRVGwmDRyU2ytjt4atjdpy8Fqb4ejiHR76A3b4Ngu140fT7SaOCHDQYrdTF6KnfQEc4tzuPyhOEpqvRyuclPu9JHhsJCdFFpDhxFKrDtKa1uNoSAtoUlnkIbF4o2/NsMAq6a2uSbsQKWr1RGXxaRG/P08UOnCqiktziE7UYtoMKkKVa7QFkWSxEIiTmJ79+7l+eef5/LLL+fyyy9n2bJlFBUV8Z3vfIfvfOc7PRljn9O4tFjt9pOdZGsxQaIzHn53W3i3ZUUJzSzUjdCi4yyHtc0Spt2s4fQGmsSSaDGRkWgJT8G3aGqHi6CXrNnd/gGqSpbDHE4YqgJZDjNKo2UZl04poM6rk5popiDdjqaEtltJtplQCN0fCwTBFwh1v2iYxejTgwxstE+br5VF1dDyD4dk+7FRk4FBsP4eYkqCuc0RcfNECKE4RmQnRfz9LEhLwKsbLc4hO1GLaNBUhSM1bk4fmsGsMbmxDicuRFxOLC0tpa6ujtTUVABcLhelpVLnb0t321Q1trusrmk7KQWU+pGJ0xvgnZ+e3W4Js3EszbeNSbKZONrG2q4GHY0iGmZm5qYce6N2+QJkN1pS0HD9v368B5Omkp8Wml7vDYRGYKHRZejYoHGskVXjXozJNjvBYOtJrPnU+RMyHEwdks7bm0vw60GsmkpKohmzprU5Im5vDVmk388bzh7K7a9tjNo6NCEac/t1Dld5+MFpg2MdStyIOIktXryY73znO5x22mkAfPHFF/z4xz/uscBEU837EzZo+As/0kW8zd/sh2Q6+P6p6fxl9W5c/pYdN0yqQrXbz5kPf0BBWgIXDDG12CurM9duSARLV+/kxc/3U+b0oqoQDIa+RlVVwtuyNHzNgaBBZZ2P7CQr4/LT8OvBVnvEtZZo5tfPNoxkTVg0Gj1PH5XN/5yWwTt7At1uFi1Ecw2/GxMHSWuzBhEnsYsvvpizzz6bTZs2AfDzn/+crKysHgtMHDMkI4HtJc7wPacGZk0JJ4rOvAG39mY/Lj+Vn/x9I9X1ky4aunnoQYNEqxaeaffk514GFZQ2ef70UdksPFjF0x/voc6nk2jROpye/+E3ZWiKQkFqAmV1oZZViRaNLIcNk0nl60PVGIQmY+QkW9HU0P2/aSOzOFwV2lW6oWzans6OiKMxgp6Sn8gVs2RXTBF9Ddv+nDRA7oc16DCJ7dq1i2HDhrFlyxYA8vLygFB5sbS0VCZ1RFFbW903NJqtdvkIBI913LCbtfD9qq4s4m1s+qhsHv/eKTz87jZ2189+UhVITTCT6QiVBRMsJnw+b4uZdqu2lfLahkNkJVkZVD8Se23DIcblp7YZT8NsQk1VODk1hYBuUOb0Uun28eJ1p7F842GWrNmFXzc4XO0lLcHMj88ZwalD09GDoZmTTo9OkON763UhGvMEQmswU+wd/wHXX3SYxJYtW8Z9993HQw891OJziqLw/PPP90hg/U1bXSGuOyWJK2aNDjea3VFSQ61XJz3RTEaiNardI5onwTMf/qBFz0erprS4R9aV7U0adzipqPPjsGqkOyyk2i2oisJFEwcydWg6j773DV8dqKbS5eeJVTsxmxTOGJ4JhH6hi2u9ZNd4SU0098ttKET/4vUHGZ4l68Ma6zCJ3XfffQC88MILPR5Mf9ZWInhtSzVXzGp7DVpPrkNqreO7VzfIz2g60661BscBPciG/ZXhe2nNS5vN76OV1npRFIW7vj0ac317rAGpdh69ZDxvbTrC0jW7qajzcdcbW5g5KpsfnTOclAQzwWCQWq8flz9Aav2auf7eAk0cv3yBIIPSZaZrY51qO7VhwwYOHTqErh+bALBgwYJox9QvtdXpvqTGG9FxPbEOqfUJG7SYsNE82dW4/Ryq8mBS2+412NY9vGmjsgnoQcqdPup8AVRFYf6EAZw2NJ3fvbedL/dVsnJbKRv2V/KTmSMYWF9N1IMG5XU+nF6dtAQzCVbZmFIcf/SgQXZy/27421zEv+m33norBw4cYNSoUWha6J1DURRJYlHS1j5XOQ5TRMf1xDqk1hLNBeMcLUZ8jZNdQA9yoNJNsH4fNKc3QJLN3Oposa17eCZNJSfFRrXLR4XLh2FAbrKNRy4ey9tfF/OX1buodPn59VtbmTTAzi/zCkhLCG0I6A3olNToOKzmJiVG6UIvjgcGkJ1s6/C4/iTiJLZ582befvttKdX0kLamqS8clxLRcT21Dql5oikqKmr1mHuBh94pYm95KIGZ1dAv3OEqDwNSwWE1dXq0mJJgwWrWKK/14dV1FEVhzrg8ppyQxmP/3c4Xeyv58rCba5at56YZw5l+YhaKomBAuMSYYjfz9cEq6UIvjhsyqaOpiO+EjxgxgqNHj/ZkLP1aW10+puQnRnRcrN+Mp4/KJi3RygkZiSRaNFRFRVUUFCW0A21XR4s2s0Zeqo1kmzm8h1p2so0HLxrLreediN0UWsd234oi7nlzKxV1xxZu60GDijofz36yl4FpNtITLSiKEm7J1WEnEiHikM0kE5gai3gkVllZyZw5cxg3bhxm87G/BP7yl7/0SGB9TTTKVZHuEty8A0d4/60Yl8ka7tdlOqyhZsRBQDHwBILdGi2qqkJmkhWrRaXC6UMPGiiKwgUn55JFDf/c4WXt7go+3llG4cEqfjRjODNHZYerBluO1JDlsJBR34y4xhOQfoYiJqLxPmEzy7KSxiJOYtKdo21d2TQxGj/M8bZZY8P9uoY+h2VOL96AQaLFFJXRYpLVjFXTKHd6wz0O0+wa9y84mfeLSnniw53UeAI88PY2Ptx2lJ/NGkGmw0pesp3yOi++gEGSzUR6gpkKl0/6GYpeFa3fV6uMxJqI+NU49dRTW/0nWu5l1VG5qq19qzq751Rnr9vTGjfhTbKFdngekGrnj5eeErWkajGp5KbYSEsw03B7VlEUZp2Uw7NXTeHM+jVkn+0u55pl63l3czHfm5xPIBjaTqXG42f30Tp06Wcoelm0fl+tMhJrIuKR2CmnnBIuz/j9fgKBAHa7nQ0bNvRYcH1FZ6e9d2VxcDSu29Oi0XsQOh6lKopCWqIVm1njYKPSdnqihd/MO4nV24/y+MqdVLv9PPKfbzj1hDSunDqYd7eUUFzjJjfZzqVTChickUBpjYfUBAsW+etW9LBo/b7azPKz2ljESWzjxo1NPn7//fcpLCyMekB9UWenvUfrh7k3p9tHqru9BztTcrFbTGQ5NBxWE05vfc9HRWH6idmML0jljyt3snr7Ub7YW8mWwzXcMG0Yc8bmhv8YMwCnN4Dbr5NsM5Fit4Q30BQi2qL1+2o1yUissS6n9HPPPZe1a9d2O4A1a9Zw3nnnMWvWLJYuXdri82+++SZz585l7ty5XHrppWzbtq3b14y2zm6C2da+VZ39YY725pvxoLMlFyMYJDvZRpajfvPMemkJFu6ZexK/nnsSaQlm6nw6j/13O7e9/jXFNZ4m59CDBpUuP4er3NR5W+46fbxata2URUvXcubDH7Bo6dpOl7NF50Tr91XuiTUV8UjsvffeC/9/MBhk8+bN3V4zpus69957L88++yw5OTksXLiQGTNmMHz48PAx+fn5vPjii6SkpLB69Wruuusu/vGPf3TrutHW2TJaR2u9GpfT0q0GNysZbXajj0b5Lp50dZSaZDdjNoVmL3oCx/5AOHtkFuPzU/nThzv5YFspX+6r5Npl61l89lDmjs8LdwWH0C7XpTUeEq2m477EGG+TgvqDaP2+yuzEpiJOYh9++GH4/zVNY+DAgTz55JPdunhhYSGDBw+moKAAgDlz5rBy5comSWzixInh/58wYQLFxcXdumZP6UwZrb0f5uZvLpV1rnbfXKK5+WY86E7JxWbWyE2xUeHyUev2h/dfS0kwc+ec0ZxzYha/f38HFXU+Hl+5g9XbS7ll9okMSLWHz9FfSozRui8rOicav68yEmsq4iT24IMPtvv5JUuWcMMNN3Tq4iUlJeTmHttiOycnp937bK+99hpnn312p64Rr9r6YW7+5mIzqQRVpd+8uXS3I4mqKmTWrwcrd3oJBI9twHbG8EzGDkzhz6t28d+tJXx1oJrrnlvPdWcNZcEpA5qMyhpKjHVendREMw7r8dUlId4mBYnISRJrKmpdUt99991OJzHDaLlXcVslyrVr1/Laa6/x8ssvd3her9fbanukSHg8ni4/Nxp2l1aTZFHwePwABIMGiuFjd2nXv6aOrDtYx2tbqilxBshxmFg4JqVFp5AGPf365ADXnZIUiqfGG4pnXAo5RnmrC7/bjUfVqPYEcXq8TTYT/e5IM6OSM3jhq0qqPEGe+HAn/yncz5WnpJHjaJmsVEXBYbeQZFFRjJa7X3cqphhoLZ50q0FlnatJ9wdPIEia3dTjscfb6wPxF1Nb8SgK7Nj+TQwiiq3RzbeTbyRqSay1hNSR3NzcJuXBkpISsrNbjja2bdvGnXfeyVNPPUVaWsfbclut1na/6PYUFRV1+bnRMDS7mtJaD/b6kZjH4yaomhmabeuRuFZtK+XpjcWYNY2sZAt1fp2nN9YyqGBQqyO/3nh9Ro+GK2ZFdmxH8RiGQbXbT2V9I+EGw4bBrEkB/t/qXbyzuZgd5T7uW3WUa84cwkWnDGwySaSBpioRlRhj/TPUXGvx3KxkcPebWwiqSnjEq2gGN58/htE9POKPt9cH4i+mtuLZcnhtXMUZD6I2Lu3KJI+xY8eyd+9eDhw4gM/nY8WKFcyYMaPJMYcPH+bHP/4xjzzyCEOGDIlWuHGr+Qym7rZs6ki0FmDG60w3RVFITbCQl2zH0mzTTIfNxK3nncjDF48lO8mKNxDk/63axU/+9hX7y1uW1RrPYnR6/b31JfSIeO3BKdonDdhbiulIzGQycffdd3Pdddeh6zoXX3wxI0aM4JVXXgFg0aJF/PnPf6aqqorf/OY3QGhSyT//+c9ohR13mk/6SLObuPn8nntzica9kb4w081m0chLtVPh9OH0Hpv0ATDlhHT+euVklqzZzb8Lj7D1SA3Xv7Ceq791ApdMLmgxKvPpQY7WeHFZ9T49i/F4mxTUH/TNn7SeFbUkdv7553fpedOmTWPatGlNHlu0aFH4/++//37uv//+bsXW1zR+cykqKurR8k40FmD2lZlumqqQlWzF5lapcIUaCTdItJq4edZIpo/M4v/e+4aSGi9LP9rDmh1l3Hb+iZyQ0fQeYX+ZxSjii4zEWoo4sR84cIAf/vCHnHbaaZx++unceOONHDhwIPz5H/7whz0SoOhZ0ViAeaDShb3Z2pV4numWZDeTm2LD1krng4mD03jmyinMnzAAgG3Ftdzwwpe8/Pn+JkmvQX9dKC1iQ3JYSxEnsZ///Oecf/75fPLJJ3z00Uecf/753HzzzT0Zm+gF0bg3Eq0OJL3JagqtKUuxH9unrIHdovGTmSN47LvjyUux4dcNnv54D//78gZ2HXW2er6GhdKlNR5QZDGqEL0l4iRmGAYLFizAZDJhMpmYP3++DG2PE9NHZfPK4ql89IsZvLJ4aqdLgH21/ZWqKmQ4rGQn2zC1UgqcUJDK01dO5uKJA1GA7SVObnxxA89/the/HmxxfEOJscTpp7LOS7CVkZsQ3SHvuC1FnMROO+00lixZwsGDBzl06BBPPfUU06ZNo6qqiqqqqh4MUcS7vj7TLdFqIi/V3uS+YAO7WeN/zxnOH743gfw0O4GgwbJP9/E/L21gR0ltq+fzBwJSYhQ9Q7JYCxFP7Hj77bcBePXVV4FjsxFff/11FEVh5cqVPRCe6Cv6+kw3s6aSk2yl2q22WFMGMDY/haWXT+LZT/by+oaD7Dpax/+8vJHvn1rAZVMHY9Za/j3Yn3oxit6hSBZroVNJ7OWXX+bLL79EURQmT57MokWLsFqtPRmfEL2mYU2ZzaRR5vTia1YytJk1bpw+jGkjs3jkP9+wv8LFC2v38/HOcm4770ROzE1qcc7GsxhT7GaSbWaZxSi6TH5yWor4T8Nf/OIX7Nq1i8svv5zLLruMXbt2cdttt/VkbELERMOasiRby0kfACcNSGbp5ZNYdGoBqgJ7yur435c38NRHu/EFWt4rg9Asxoo6n5QYRfdIFmsh4pHYnj17ePPNN8MfT506lXnz5vVIUELEmqYqZCVZsZlVKup8LabXW0wq1581lLNGZPJ//9nOnrI6XvniAJ/uLOf7JycybFjr55USo+gOyWEtRfwbdNJJJ/HVV1+FP960aVOTbVJEZOK1PZNoXZLNTF6KvcU6uAajcpP5fz+YyGVTB6EqsK/CxUNrjvKX1bvw+ltvFtxQYjxS7abK5etStxshREjEI7FNmzaxfPlyBgwILQI9fPgww4YNY+7cuQC89dZbPRPhcaQvtGcSLVlMKrkpNipdPqpdTVtWNXz+mjOGcNbwTB75zzfsOlrHq+sP8umu0L2ykwemtHrehhKj0xMgPdFCgjVqDXTEcUqWNbUU8W/N008/3ZNx9At9pT2TaElRFNITrdhMGuV1Xvx6y9HTiJwknvzBRJ54dxNvb6/lYKWbn/ztKy6aOJBrzhzS5mjOpwcpqfHgsJpJSTBLiVGITog4iQ0cOLAn4+gXZCPCvi/BasJiUimv87U6QcOsqcwblcy8U0fwyLvfsKPUyesbDvHZ7nJunX0i4wtSWz2vAdR6/bj8AVLs5lAnEfmrWzQjPxEtyZ98vagvtmcSLZk0lZxkG5kOS6v7jgEMy3Lw5++fwjVnnIBZUzhc5eFnr27i8ZU7cPva3ljz2CxGDy6ZxSiakyzWgiSxXtRX2zOJ1iXbLeQk27C20kgYQsnusqmD+ctlk8JryN746jDXPreeDfsq2z23N6BTUuPhaI231RZXQogQSWK9qK+3ZxIt2cwaeSk2kttYUwYwJDORJxadwuKzhmDWFIprPNzyWiG//+/2dteMNZQYD1e5qZZZjEK0SqZD9bK+3p5JtKSqCplJVqwWlUqnr9VjNFXh0lMH8a1hoRmMW4/U8FbhET7fU8HPZ49kygnpbZ5fDxqU1/lwenXSE83YW+nxKER/JSMxIaIkyWomN8WOw25p85hBGQk8fukEbpw2FItJpbTWyy9e/5r/+883OD3t3wPzBnSKq6XEKERjksSEiCKLSSXNqpCWYG5zA0NNVbhkcgFPXzGJsfVryN7ZXMw1z61j7e7yds8vJUYhmpIkJkSUGYZBWqKV3GQbZq3t6WT5aQn8/nvj+dE5w7GZVMqcPn75r808+M42atz+dq/RUGI8XOXB7ZNZjKL/kiQmRA+xW0zkpdhxtNOJQ1UULpo4kKevnMyEgtCo7L9bS7jmufV8srOsw2tIibGfkYF3C5LEhOhBJk0lO9lGlsPa5poygAGpdh69ZDw/mTkCu1mjos7HXW9s4bcriqh2tT8qkxJj/6HL97YFSWJC9IIku5mcZBu2NtaUQWhUNn/CAP565WQmDUoF4INtpVzz3DrWbD/a4TUaSoxHpMR43AoGJYk1J0lMiF5iM2vkpthItre9pgwgN8XGIwvHcfOskSRYNCpdfn791lZ+89ZWKl2tT+FvzNNQYqyVEuPxpvmWQEKSmBC9SlUVMh1WspKtmNopLyqKwoXj8njmysmcekIaAKu3H+WaZev5cFtphyVDA6j1hEqMPkOTEuNxwqcb1HraLy/3N5LEhIgBh9VMXqo9vKNBW7KTbTx40VhuO+9EEq0a1W4/960o4p43t1JR1/GoTA8aHK11c6TKg6edno2i7yg8WB3rEOKKJDEhYsSsqeQkW0lPtLS5pgxCo7LzT87lmSunMHVoqLPHxzvLuGbZOt4vKul4VGaESoxHqt0crfUSkBJjn6Wq8Namw7EOI65IEhMihhRFITXBQl6yHYvW/q9jVpKV+xeczB0XjCLJZqLGE+CBt7dx5/ItlDm9HV6rcYmxxi2zGPuiFJuZfxceiWgU3l9IEhMiDtgsGnmpdpKs7U/6UBSFWSfl8OxVUzhjeAYAn+0u55pl6/nPluKIElMgaFDm9EmJsQ/KSrLi8es88u62WIcSNySJCREnNFUhK9lKZgdrygDSEy3cO28Md84ZTYrdjNMb4OF3v+GOf23maG3HozKQEmNfZDNrXHvmEP627kBEi+H7A0liQsSZJLuZ3JT215RBaFQ2Y1Q2z1w1mWkjswD4Yk8F1yxbx4rCIxGNyqTE2PfcNHMEI7Id/OjlDRyokF3hJYkJEYespsjWlAGkJVi4Z+5J3DP3JFLtZup8Or/773Zue/1rims8EV1PSox9R6LVxNIrJqMHDRa/8GW7O4X3B5LEhIhTDWvKspNt7a4pazBtZBbPXjWFGfX71X25r5Jrl61n1R4nwQhHWFJi7BuGZCbyx0WnsK24htteL+zXI2hJYkLEuUSrKaI1ZQApCWbunDOa++aPIT3Rgtuv89KmKm75RyFHqt0RXa+hxHhISoxxbfqJ2dx63om8tekwf/14T6zDiZmYbxG7Zs0a7r//foLBIJdccgmLFy9u8nnDMLj//vtZvXo1NpuNhx56iDFjxkQ9jhNuX9Hoo93h/9v70JyoX0uIzmpYU1btVql0+egor5wxPJOxA1P486pd/HdrCV8dqOLa59Zz/VlDmT9hAGp7C9Pq6fUlRqdHJ012lI4LNW4/f/tif/jjNLuZ0blJPPzuNvx6kLSEtjdk7YpMh5VzT8qJ6jmjLaY/lbquc++99/Lss8+Sk5PDwoULmTFjBsOHDw8fs2bNGvbu3ct7773Hpk2b+PWvf80//vGPqMbRNIG1/JwkMhEPGtaU2UwaZU4vvg7Kfcl2M3dcMIpRyQFe3lxLudPHnz7YyapvjnLreSPJT0uI6LqhXow6DpuZtAQzpg7Ws4meEwgaHKluep9z6rAMtpXU8n5RKWcOz4xRZLET0yRWWFjI4MGDKSgoAGDOnDmsXLmySRJbuXIlCxYsQFEUJkyYQE1NDaWlpWRnZ8cqbCFiqmFNWYXTh9Pr73CLqXG5dmZNGsX/W72LdzYX8/Whaq5//kuuOXMIF50ysMPp/HCsxOjyBUhLMJNkM6NEMJoT0WVSFfJSbE0ey0uxcUJGIkdrvS0+112ZDmtUz9cTYprESkpKyM3NDX+ck5NDYWFhu8fk5uZSUlLSbhLzer0UFRVFLc5onquzPB5PTK/fnMTTsd6KSVVVPLpCpcuPP9D21iten4+SQ/u4aLiJkUmZPP9VJZVunf+3ahfvFR7gqlPSyE0yR3xdRYEEq5kUqwlNCXb6nll//p5Fqq147CaYmt5yBF5xcgqHq31MzY72ZBw327Zti/l90dGjR7f5uZgmsdZemOZ/3UVyTHNWq7XdL7ql3e1+tnPniq6ioqKYXr85iadjvR2TN6BTXuvDE2h9qvWuXbsYNmwYAMOGwbmTAixZs5t/Fx5hV4WPe1eVcvW3TuCSyQURjcoaKIDDZiY1wYy5EyVG+Z51rK14ioqKOOGEE1o8/j+tPNZfxLS4nZubS3Fxcfjj1kZYzY8pLi6WUqIQjXRmTRmEZjvePGskjy4cR06yFb9usPSjPfzolY3sKauL+LqyUFrEg5gmsbFjx7J3714OHDiAz+djxYoVzJgxo8kxM2bMYPny5RiGwVdffUVSUlLUk1h7EzdkUofoCzq7pgxg4uA0nrlyCvMnDADgm+Jafvjil7z0+b5Obb6oN1ooLTtKi94W03KiyWTi7rvv5rrrrkPXdS6++GJGjBjBK6+8AsCiRYuYNm0aq1evZtasWdjtdh544IEeiaUhWcVbWUGIzki0mrCYVMqdPlwRJBS7ReMnM0cwbWQW//efbzhS7eGvH+9lzfYybjv/RIZlOSK+duNZjJ0tMQrRVTFf+DFt2jSmTZvW5LFFixaF/19RFO65557eDkuIPqv5mrJITChI5ekrJ/PXj/fwrw2H2FHq5MYXN3DZ1EF8/9RBEU+rl1mMorfJn0pCHIca71Nmt0Y289Bu1vjROcP5w/cmkJ9mJxA0WPbpPm58aQM7S52dur6UGEVvkSQmxHHMZtHIsGsd7lPW2Nj8FJZePolLJuWjKrDraB03vrSBZz/Zg7+T/RRDJUYPR2u9nX6uEJGQJCbE8c4IRrxPWQObWePG6cP446WnMCg9AT1o8MLa/fzwxQ18U1zbuctzbBZjtcsn5UURVZLEhOgnIt2nrLGTBiSz9PJJLDq1AFWBPWV1/O/LG3jqo934Ap0bWelBg/I6H+XuoJQYRdRIEhOiH7GaNPJSbaREuKYMwGJSuf6soTzx/VM4ISOBoAGvfHGAG174kqIjNZ2OweX1S4lRRI0kMSH6GUVRyOjkmjKAUbnJ/OWySVw2dRCqAvsqXPz4lY38ZfUuvP7ObczYvMQoC6VFV0kSE6KfatinLLETW6xYTCrXnDGE//eDiQzLSiRowKvrD3L9C1+y+VB1p2NoKDEellmMooskiQnRj5k1lZwUGxmJFjoz32JEThJP/mAiV54+GE1VOFjp5id/+4onPtyJu5OjMgj1fyyu9nC0RkqMonMkiQkhSEmwkJdix9KJLhtmTeXKb53AXy6byIhsBwbwzw2HuP759Ww6UNXpGAyg1islRtE5ksSEEEBoWn1eqj3UZaMTzxuW5eDP3z+Fa888AbOmcLjKw89e3cTjK3fg9nV+VCYlRtEZksSEEGGaqpCVZCUzOfI1ZQAmTeUHpw3mL5dN4sTcJADe+Oow1z63ng37K7sUi5QYRSQkiQkhWkiymslLsWM3R76mDGBIZiJPLDqFxWcNwawpFNd4uOUfhfz+v9up83Z+VCUlRtERSWJCiFZZTCq5KTZSEzpXXtRUhUtPHcRTl0/mpLxkAN4qPMK1z61n3d6KLsUiJUbRFkliQog2KYpCeqKVnGQbZq1z7aIGZSTw+KUTuHHaUCwmldJaL794/WuWbajA6elaIpISo2hOkpgQokMJVhN5KZ1bUwahUdklkwt4+opJjB0YGpV9st/FNc+tY+3u8i7FIiVG0ZgkMSFEREz1a8oyHZZOTfoAyE9L4Pffm8CPzhmGRVMoc/r45b8289A726j1+LsUT+MSo6sL99vE8UGSmBCiU5LtFnKSbVg70UgYQFUULpqYzz0zcphQkALAe1tLuHrZej7ZWdbleLwBnZIaKTH2V5LEhBCdZjNr5KXYSO7kmjKA7EQTj14ynp/MHI7NrFJR5+OuN7Zw/4oiqt1dG5U1LjFWSYmxX5EkJoToElVVyOzCmjIIjcrmTxjIM1dOYeKgVABWbivlmmXrWLP9aJdj0oMGFVJi7FckiQkhuqWra8oAclNs/N/Ccdw8awQJFo1Kl59fv7WV37y1lUqXr8sxSYmx/5AkJoTotoY1ZWkJ5k41EobQNP4Lxw3gr1dOZsoJaQCs3n6Ua5at58NtpV0uDUqJsX+QJCaEiApFUUhLtJLbhTVlADnJNh66aCy3nnciiVaNaref+1YUcc+bW6mo6/qo7FiJ0S0lxuOQJDEhRFTZLaE1ZQ5r59aUQSgRXnByLs9cOYWpQ9MB+HhnGdcsW8f7RSXdGk15A8FwidEXkBLj8UKSmBAi6kyaSnZy19aUAWQlWbl/wcncfsEokmwmajwBHnh7G3cu30KZ09vluBpKjEeqpcR4vJAkJoToMQ1rymydXFMGoVHZ7JNyePaqKZwxPAOAz3aXc82y9fxnS3G3ElBDifFQZajEqHT2Rp6IG5LEhBA9ymbWyE2xkWzv/JoygPREC/fOG8Odc0aTbDPh9AZ4+N1vuONfmzla2/VRGYBPD5UYa3xIibGPkiQmhOhxqqqQ6bCSlWzFau7avbIZo7J59uopTBuZBcAXeyq4Ztk6VhQe6daozACqXV4pMfZRksSEEL3GYTWT5TCT0MlGwg3SEizcM/ck7pl7Eql2M3U+nd/9dzu3vf41xTWebsXWvMQo+gZJYkKI3hXUyUm2kp5o6fSasgbTRmbx7FVTmDEqG4Av91Vy7bL1vLnpMMFujqQaSoylNR4pMfYBksSEEL1OURRSEyzkJduxaF17G0pJMHPnnNHcO28MaQlm3H6dP7y/g1v+UciRane34jMApzcgJcY+QJKYECJmbBaNvFQ7SdauTfoAOHNEJs9eNYVZJ+UA8NWBKq5dtp5/bjjU7VFZ4xJjnZQY45IkMSFETGmqQlaylUxH5xsJN0i2m7njglHcv+BkMhwWPIEgT3y4k5tf3cShyu6NyiBUYiyVEmNcilkSq6qq4uqrr2b27NlcffXVVFdXtzjmyJEjXH755VxwwQXMmTOH5557LgaRCiF6Q5LdTG5K19aUNTh9WAbPXjmFC07OBaDwYDXXPb+ef3x5ED3YvVFZ8xJjsJvnE9ERsyS2dOlSTj/9dN577z1OP/10li5d2uIYTdO4/fbbeeedd/j73//Oyy+/zM6dO2MQrRCiN1hNoTVlKV1cUwbgsJm49bwTeeiisWQ5rHgDQf7fql385G9fsb/C1e0YG/dilBJj7MUsia1cuZIFCxYAsGDBAt5///0Wx2RnZzNmzBgAHA4HQ4cOpaSkpDfDFEL0MlVVyHBYyU62YepieRHg1CHpPHPVZC4clwfA1iM1XP/8ev627kC3R2UgJcZ4EbMkVl5eTnZ2aHpsdnY2FRUV7R5/8OBBioqKGD9+fG+EJ4SIsUSribxUO4ldXFPWcI6bZ43k/xaOIyfZil83WLpmNz9+ZSN7y+u6HaOUGGNPMXpw7uhVV11FWVlZi8d/+tOfcvvtt7N+/frwY1OmTGHdunWtnqeuro7LL7+cH/7wh8yePbvD63711VdYrdYuxezxeLDZbF16bk+QeNoXb/FA/MXU1+NRVRV3QKHS5SXQjQ0uPf4gr2+tZtWeUPIyqTB3VDLnDU8iEPBjtVi6fG4ABbBZzaTYTZgJdmtafluvkdfr7fJ7W182evToNj/X9T9xIrBs2bI2P5eRkUFpaSnZ2dmUlpaSnp7e6nF+v5+bbrqJuXPnRpTAAKxWa7tfdHuKioq6/NyeIPG0L97igfiL6XiJx+PXKav14utGIhszCuYdqOL//vMNR6o9/GtrDVvKgyw6KZFpo4d1+byNKYRGgKkJFiymrhW72nqN4u17GQ9iVk6cMWMGy5cvB2D58uXMnDmzxTGGYfCrX/2KoUOHcvXVV/dyhEKIeGIz168ps3V90gfAhIJUnr5yMhdNHIgCbC9x8ttVJTz/2d5ujfQaSImxd8UsiS1evJhPPvmE2bNn88knn7B48WIASkpKuP766wH48ssveeONN1i7di3z589n/vz5rF69OlYhCyFiTFMVspKsZCZ1fU0ZgN2s8aNzhvOH700gP82ObsCyT/dx40sb2FFSG5VYZRZj7+jRcmJ70tLSWl33lZOTw1NPPQXA5MmT+eabb3o7NCFEnEuymbGaNMqdXtx+vcvnGZufwlOXT+L3b3/F+7uc7Dpax/+8vJFFpxZw2WmDu1wObKxhFmN3S4yidfJqCiH6JItJJTfFRmpC98qLVrPGJSen8sdLT2FQegJ60ODFtfu58aUNfFMcnVFZ4xJjZZ1XSoxRJElMCNFnKYpCeqKVnGQbZq17uzOfNCCZpZdPYtGpBagK7Cmr439f3sDTH+2O2jowPWhQ5fLjDXR99CiakiQmhOjzEqwm8lK6t6YMQqO7688ayhPfP4UTMhIIGvDyFwe44YUvKTpSE6VoRTRJEhNCHBdMmkpOio2MbuxT1mBUbjJ/uWwSl00dhKrAvgoXP35lI0tW78LbjXtwIvokiQkhjispCRbyUuxYu9FIGEKjsmvOGML/+8FEhmUlEjTg7+sPcv0LX7L5UMuG5SI2JIkJIY47NrNGXoqN5G6uKQMYkZPEkz+YyJWnD0ZTFQ5WuvnJ377izx/uxCOjspiTJCaEOC6pqkJmkpXM5O6tKQMwaypXfusE/vKDiQzPdmAAr284xHXPr2fTgaqoxCu6RpKYEOK4lmQ1k5dix27uXnkRYFi2gye/fwrXnHECJlXhcJWHn726icdX7sDtk1FZLEgSE0Ic9xrWlKUlmLs96cOkqVw2dTBLLp/EiblJALzx1WGufW49G/ZXRiFa0RmSxIQQ/YKiKKQlWsmNwpoygCGZiTyx6BQWnzUEs6ZQXOPhln8U8vv/bpc2U71IkpgQol+xW0JryhzW7nfd01SFS08dxFOXT+akvNCo7K3CI1z73HrW7W1/j0QRHZLEhBD9jklTyU62kemwdHvSB8CgjAQev/QUbpw2FItJpbTWyy9e/5pH//MNThmV9ShJYkKIfivZbiEn2UaC1dztc2mqwiWTC3j6ikmMHZgMwNubi7lm2TrW7i7v9vlF6ySJCSH6NZtZIyNBI9ne/TVlAPlpCfz+exP40TnDsJlUypw+fvmvzTz0zjZqPf4oXEE0JklMCNHvGcEgmQ4rWclWTFEoL6qKwkUT83nqyslMKEgB4L2tJVyzbD2f7Czr9vnFMZLEhBCinsNqJi/VTkI3Gwk3GJhq59FLxvOTmcOxmVXK63zc+cYW/rhyR1TOLySJCSFEE2ZNJSfZSnoUGglDaFQ2f8JAnrlyCpMGpQLwyS65RxYtMdvZWQgh4pWiKKQmWLCZNMqcXnx69/cTy02x8cjCcWw5XMPE+mQmuk9GYkII0QabRSMv1U6SNTqTPhRFYezAFDIc1iicTYAkMSGEaJemKmQlW8l0dL+RsIg+SWJCCBGBJLuZ3BQbtm7uUyaiS5KYEEJEyGrSyE2xkRKlNWWi+ySJCSFEJ6iqQobDSnayLSprykT3yOxEIYTogkSrCYtJpcLpo84n/RFjRUZiQgjRRWZNJSfFRkaU1pSJzpMkJoQQ3ZSSYCEvxY5Fk7fU3iavuBBCRIHNXL+mzCaTPnqTJDEhhIgSTVXISrKSmSRrynqLJDEhhIiyJFtoTZndLGvKepokMSGE6AENa8pSE6S82JMkiQkhRA9RFIX0RCs5yTbMmqSyniDrxIQQoocl1K8pK3f6cPllTVk0SRITQoheYKpfU1bt8qFIgTFqYlZOrKqq4uqrr2b27NlcffXVVFdXt3msrussWLCAG264oRcjFEKI6EtJsGCzyISPaIlZElu6dCmnn3467733HqeffjpLly5t89jnn3+eYcOG9WJ0Qggh+oKYJbGVK1eyYMECABYsWMD777/f6nHFxcWsWrWKhQsX9mJ0Qggh+gLFMAwjFheePHky69evD388ZcoU1q1b1+K4m266icWLF1NXV8czzzzDkiVLOjz3V199hdXatZ1TPR4PNputS8/tCRJP++ItHoi/mCSejsVbTG3F4/V6u/ze1peNHj26zc/16MSOq666irKyshaP//SnP43o+R9++CHp6emcfPLJfP755xFf12q1tvtFt6eoqKjLz+0JEk/74i0eiL+YJJ6OxVtMbcUTb3HGgx5NYsuWLWvzcxkZGZSWlpKdnU1paSnp6ektjtmwYQMffPABa9aswev14nQ6ueWWW3j00Ud7MGohhBB9Rczuic2YMYPly5cDsHz5cmbOnNnimJ///OesWbOGDz74gMcee4ypU6dKAhNCCBEWsyS2ePFiPvnkE2bPns0nn3zC4sWLASgpKeH666+PVVhCCCH6kJgtdk5LS+O5555r8XhOTg5PPfVUi8dPO+00TjvttN4ITQghRB8hvROFEEL0WZLEhBBC9FmSxIQQQvRZksSEEEL0WZLEhBBC9FkxazvVk7rTdkoIIeKV1+tlwoQJsQ4jrhyXSUwIIUT/IOVEIYQQfZYkMSGEEH2WJDEhhBB9liQxIYQQfZYkMSGEEH2WJDEhhBB9liSxemvWrOG8885j1qxZLF26tMeuc8cdd3D66adz4YUXhh+rqqri6quvZvbs2Vx99dVUV1eHP7dkyRJmzZrFeeedx0cffRR+fPPmzcydO5dZs2bx29/+lq6ulDhy5AiXX345F1xwAXPmzAnvLBCrmLxeLwsXLmTevHnMmTOHP/7xjzGNp4Gu6yxYsIAbbrghLuKZMWMGc+fOZf78+Vx00UUxj6mmpoabbrqJ888/nwsuuICNGzfGNJ7du3czf/788L+JEyeybNmymMa0bNky5syZw4UXXsjNN9+M1+uN+c/RccEQRiAQMGbOnGns37/f8Hq9xty5c40dO3b0yLW++OILY/PmzcacOXPCjz388MPGkiVLDMMwjCVLlhiPPPKIYRiGsWPHDmPu3LmG1+s19u/fb8ycOdMIBAKGYRjGxRdfbGzYsMEIBoPGtddea6xatapL8ZSUlBibN282DMMwamtrjdmzZxs7duyIWUzBYNBwOp2GYRiGz+czFi5caGzcuDGmr5FhGMYzzzxj3HzzzcbixYsNw4jt98wwDOOcc84xysvLmzwWy5huu+0249VXXzUMwzC8Xq9RXV0d89eoQSAQML71rW8ZBw8ejFlMxcXFxjnnnGO43W7DMAzjpptuMl5//fW4eY36MhmJAYWFhQwePJiCggIsFgtz5sxh5cqVPXKtKVOmkJKS0uSxlStXsmDBAgAWLFjA+++/H358zpw5WCwWCgoKGDx4MIWFhZSWluJ0OjnllFNQFIUFCxZ0Od7s7GzGjBkDgMPhYOjQoZSUlMQsJkVRSExMBCAQCBAIBFAUJaavUXFxMatWrWLhwoXhx2IZT1tiFZPT6WTdunXh18disZCcnBw3r9Fnn31GQUEBAwcOjGlMuq7j8XgIBAJ4PB6ys7Pj5jXqyySJEdpNOjc3N/xxTk4OJSUlvXb98vJysrOzgVBSqaioaDeu5o/n5uZGJd6DBw9SVFTE+PHjYxqTruvMnz+fb33rW3zrW9+KeTwPPPAAt956K6p67NclHr5n1157LRdddBF///vfYxrTgQMHSE9P54477mDBggX86le/wuVyxcVrBLBixYpw+T5WMeXk5HDNNddwzjnncOaZZ+JwODjzzDPj5jXqyySJQas1ZUVRYhBJU23F1RPx1tXVcdNNN/HLX/4Sh8MR05g0TeONN95g9erVFBYWsn379pjF8+GHH5Kens7JJ58c0fG99T175ZVX+Ne//sVTTz3FSy+9xLp162IWUyAQYOvWrSxatIjly5djt9vbva/cmz/XPp+PDz74gPPPP7/d43o6purqalauXMnKlSv56KOPcLvdvPHGGzGL53giSYzQXzPFxcXhj0tKSsJ/HfWGjIwMSktLASgtLSU9Pb3duJo/Xlxc3K14/X4/N910E3PnzmX27NlxERNAcnIyp512Gh999FHM4tmwYQMffPABM2bM4Oabb2bt2rXccsstMX99cnJygND3adasWRQWFsYsptzcXHJzcxk/fjwA559/Plu3bo35awShCVtjxowhMzMTiN3P9aeffkp+fj7p6emYzWZmz57Nxo0b4+I16uskiQFjx45l7969HDhwAJ/Px4oVK5gxY0avXX/GjBksX74cgOXLlzNz5szw4ytWrMDn83HgwAH27t3LuHHjyM7OJjExka+++grDMJo8p7MMw+BXv/oVQ4cO5eqrr455TBUVFdTU1ADg8Xj49NNPGTp0aMzi+fnPf86aNWv44IMPeOyxx5g6dSqPPvpoTL9nLpcLp9MZ/v9PPvmEESNGxCymrKwscnNz2b17NxC6BzVs2LCYvkYNVqxYwZw5c8IfxyqmAQMGsGnTJtxuN4ZhxNVr1Of10gSSuLdq1Spj9uzZxsyZM40nn3yyx67zs5/9zDjjjDOMk046yTjrrLOMV1991aioqDCuuOIKY9asWcYVV1xhVFZWho9/8sknjZkzZxqzZ89uMgupsLDQmDNnjjFz5kzjN7/5jREMBrsUz7p164yRI0caF154oTFv3jxj3rx5xqpVq2IWU1FRkTF//nzjwgsvNObMmWP86U9/MgzDiOlr1GDt2rXh2YmxjGf//v3G3Llzjblz5xrf/va3wz+vsYxp69atxne+8x3jwgsvNG688Uajqqoq5t8zl8tlnHrqqUZNTU34sVjG9PjjjxvnnXeeMWfOHOOWW24xvF5vzF+j44FsxSKEEKLPknKiEEKIPkuSmBBCiD5LkpgQQog+S5KYEEKIPkuSmBBCiD5LkpgQQog+S5KY6BMuv/xyvv76634bw7Jly3C73V1+/ueff86GDRuiGJEQ8UGSmBCtCAQCsQ6hieeff75bSeyLL75g48aNUYxIiPhginUAQjR28OBBrr/+eiZNmsTGjRvJycnhySefBODNN9/k/vvvx+l08sADDzBu3LhWzzF37lxeeuklkpKSmDp1ari7+q233sp3vvMdJk2axK9//Ws2b96MpmncfvvtTJ06lX/+85+sWrUKn8+Hy+Vi6dKl3HHHHezcuZNhw4bh8XiAUJf9X/3qV2zevBlFUbj44ou56qqrWo1l37593HPPPVRUVKBpGo8//jgFBQU88sgjfPTRRyiKwo033si3v/1tPv/8c5544gnS0tLYvn07Y8aM4dFHH+WFF16gtLSUK6+8ktTUVF544QU+/vhj/vSnP+Hz+SgoKODBBx8kMTGRGTNmsGDBAj788EMCgQB/+MMfsFqt/O1vf0NVVd58803uuusuJk+e3CPfPyF6XaxbhgjR2IEDB4zRo0cbW7duNQwjtHng8uXLjcsuu8z41a9+ZRhGaGPRxpuKNnfXXXcZH374ofHNN98YF110Ufh5s2bNMpxOp/HXv/7VuP322w3DMIydO3ca06ZNMzwej/H6668bZ511Vrj1zzPPPBM+rqioyBg9erRRWFhofP3118ZVV10Vvl51dXWbsSxcuNB47733DMMwDI/HY7hcLuPdd981rrrqKiMQCBhHjx41pk2bZpSUlBhr1641Jk6caBw5csTQdd347ne/a6xbt84wjKabYJaXlxvf//73jbq6OsMwQpspNrTnOuecc4znn3/eMAzDePHFF41f/vKXhmEYxh//+Efj6aefjuh7IERfIuVEEXfy8/MZPXo0AGPGjOHQoUMA4UauU6ZMwel0hhsFNzd58mTWrVvHunXrWLRoEdu3b6ekpISUlBQSExP58ssvmTdvHgDDhg1jwIAB7NmzB4AzzjiD1NRUANatWxc+btSoUZx44okAFBQUcODAAe677z7WrFnT5tY1TqeTkpISZs2aBYDVasVut/Pll18yZ84cNE0jMzOTKVOmhO+1jRs3jtzcXFRVZdSoUeGvvbFNmzaxc+dOFi1axPz581m+fDmHDx8Of75hJ4KTTz651ecLcTyRcqKIOxaLJfz/mqbh9XqBlvsmtbWP0pQpU3j55Zc5cuQIP/vZz3j//fd59913wyU0o512oXa7vcNrpKSk8MYbb/Dxxx/z8ssv88477/Dggw9G9sV1cP3mX7uu660+/4wzzuCxxx5r9RxmsxkAVVVbfb4QxxMZiYk+4+233wZg/fr1JCUlkZSU1OpxeXl5VFZWsnfvXgoKCpg4cSLPPPMMkyZNAkJJ7q233gJgz549HDlyhKFDh7Y4T+Pjtm/fzjfffAOEtosxDIPzzjuPn/zkJ2zdurXVOBwOB7m5ueEt530+H263mylTpvDOO++g6zoVFRWsX7++zft7DRITE6mrqwNgwoQJbNiwgX379gHgdrvDI8lIni/E8URGYqLPSElJ4dJLLw1P7GjPuHHjCAaDQKi8+Nhjj4WT2Pe//33uuece5s6di6ZpPPjgg01GQA0WLVrEHXfcwdy5cxk9enQ40ZSWlnLHHXeEz3/zzTe3GccjjzzC3XffzeOPP47ZbObxxx9n1qxZbNy4kfnz56MoCrfeeitZWVnh/bha893vfpfrr7+erKwsXnjhBR588EFuvvlmfD4fAD/96U8ZMmRIm88/55xzuOmmm1i5cqVM7BDHFdmKRQghRJ8l5UQhhBB9lpQTRZ/1+uuv8/zzzzd5bOLEidxzzz29HstvfvObFh0xrrjiCi6++OJej0WI/kTKiUIIIfosKScKIYTosySJCSGE6LMkiQkhhOizJIkJIYTos/4/MIYEDmXqgGwAAAAASUVORK5CYII=",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"sns.set_style('whitegrid')\n",
"\n",
"sns.jointplot(\"nb_words_content\", \"pp_uniq_words\", data = train_data, \n",
" kind='reg', height=6, space=0)"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/wbader/miniconda3/envs/tp-ml/lib/python3.6/site-packages/seaborn/_decorators.py:43: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n",
" FutureWarning\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.jointplot(train_data[\"pp_neg_words\"], target_data['Prediction'], \n",
" kind='reg', ylim=5000, height=6, space=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Question: ** Change the features you display to explore relationships. What conclusions are you drawing from this exploratory analysis? Are you going to keep all the features in your predictors?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Answer:__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2. Data transformation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.1 feature engineering\n",
"This notion includes all kinds of manual modification and creation of features. All are of course problem dependant.\n",
"\n",
"* __Encoding categorical features:__ if a K-categorical feature is not ordered (categorie 1 is as far to categorie 2 as to categorie 3 etc), then it must not be encoded by a single integer specifying the categorie. We can encode such feature by creating K-1 binary features encoding the belonging to k-th category. (see [link](http://scikit-learn.org/stable/modules/preprocessing.html#encoding-categorical-features))\n",
"\n",
"* __Feature binarization:__ some continuous features can gain predictive power when binarized. For exemple, in some prediction tasks, weekdays could be split into $working\\ days$ and $not\\ working\\ days$. (see [link](http://scikit-learn.org/stable/modules/preprocessing.html#binarization))\n",
"\n",
"* __Imputation of missing values:__ there are multiple strategies to input missing values when required (see [link](http://scikit-learn.org/stable/modules/preprocessing.html#imputation-of-missing-values)).\n",
"\n",
"* __Dealing with time features or other periodic features:__ when considering the hour of the day as a feature, we can't encode it by the an integer between 1 and 24 as midnigth is as close to 11pm to 1am. An easy strategy to encode periodic features is to apply this transformation $x \\mapsto \\sin(\\frac{2\\pi x}{T})$ (T is the period). In the case of the hour of the day, it is $x \\mapsto \\sin(\\frac{2\\pi x}{24})$. \n",
"\n",
"* __Generating new features:__ you might want to combine the existing features into new ones that seem informative to you. It can be useful for exemple, notably when working with linear models, to generate polynomial features from the original ones. You can also use external data to transform your features; for instance, if one feature is a date, adding a feature that qualifies whether the day is a working day, a weekday or a holiday can be useful. \n",
"* ...\n",
"\n",
"In many practical cases, feature engineering is the key to obtaining a huge improvement in performance."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Question: ** How do you want to engineer the features of the challenge (first, you can start encoding the categorical features)? Keep thinking of this question all along the challenge."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us encode weekdays as a categorical feature rather than a periodic one. Remember this transformation later in the challenge: does it help your performance?"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
weekday_1
\n",
"
weekday_2
\n",
"
weekday_3
\n",
"
weekday_4
\n",
"
weekday_5
\n",
"
weekday_6
\n",
"
nb_words_title
\n",
"
nb_words_content
\n",
"
pp_uniq_words
\n",
"
pp_stop_words
\n",
"
...
\n",
"
pp_neg_words
\n",
"
pp_pos_words_in_nonneutral
\n",
"
ave_polar_pos
\n",
"
min_polar_pos
\n",
"
max_polar_pos
\n",
"
ave_polar_neg
\n",
"
min_polar_neg
\n",
"
max_polar_neg
\n",
"
subj_title
\n",
"
polar_title
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2000
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
9
\n",
"
843
\n",
"
0.5358
\n",
"
2.092000e-09
\n",
"
...
\n",
"
0.019230
\n",
"
0.7143
\n",
"
0.4437
\n",
"
0.03333
\n",
"
1.0
\n",
"
-0.3160
\n",
"
-0.8000
\n",
"
-0.05
\n",
"
0.0
\n",
"
0.0
\n",
"
\n",
"
\n",
"
2001
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
9
\n",
"
805
\n",
"
0.4196
\n",
"
2.165000e-09
\n",
"
...
\n",
"
0.025710
\n",
"
0.5349
\n",
"
0.3081
\n",
"
0.05000
\n",
"
0.8
\n",
"
-0.3463
\n",
"
-0.7143
\n",
"
-0.10
\n",
"
0.9
\n",
"
0.3
\n",
"
\n",
"
\n",
"
2002
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
8
\n",
"
145
\n",
"
0.7594
\n",
"
1.163000e-08
\n",
"
...
\n",
"
0.007519
\n",
"
0.8333
\n",
"
0.3673
\n",
"
0.13640
\n",
"
0.5
\n",
"
-0.2000
\n",
"
-0.2000
\n",
"
-0.20
\n",
"
0.0
\n",
"
0.0
\n",
"
\n",
"
\n",
"
2003
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
12
\n",
"
201
\n",
"
0.6359
\n",
"
9.259000e-09
\n",
"
...
\n",
"
0.027030
\n",
"
0.7368
\n",
"
0.3721
\n",
"
0.13640
\n",
"
0.6
\n",
"
-0.4000
\n",
"
-0.4000
\n",
"
-0.40
\n",
"
0.0
\n",
"
0.0
\n",
"
\n",
"
\n",
"
2004
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
0
\n",
"
13
\n",
"
673
\n",
"
0.4609
\n",
"
2.500000e-09
\n",
"
...
\n",
"
0.021440
\n",
"
0.5625
\n",
"
0.3500
\n",
"
0.05000
\n",
"
0.6
\n",
"
-0.2435
\n",
"
-0.8000
\n",
"
-0.10
\n",
"
0.0
\n",
"
0.0
\n",
"
\n",
" \n",
"
\n",
"
5 rows × 48 columns
\n",
"
"
],
"text/plain": [
" weekday_1 weekday_2 weekday_3 weekday_4 weekday_5 weekday_6 \\\n",
"2000 1 0 0 0 0 0 \n",
"2001 0 1 0 0 0 0 \n",
"2002 0 0 0 0 0 0 \n",
"2003 0 1 0 0 0 0 \n",
"2004 0 1 0 0 0 0 \n",
"\n",
" nb_words_title nb_words_content pp_uniq_words pp_stop_words ... \\\n",
"2000 9 843 0.5358 2.092000e-09 ... \n",
"2001 9 805 0.4196 2.165000e-09 ... \n",
"2002 8 145 0.7594 1.163000e-08 ... \n",
"2003 12 201 0.6359 9.259000e-09 ... \n",
"2004 13 673 0.4609 2.500000e-09 ... \n",
"\n",
" pp_neg_words pp_pos_words_in_nonneutral ave_polar_pos min_polar_pos \\\n",
"2000 0.019230 0.7143 0.4437 0.03333 \n",
"2001 0.025710 0.5349 0.3081 0.05000 \n",
"2002 0.007519 0.8333 0.3673 0.13640 \n",
"2003 0.027030 0.7368 0.3721 0.13640 \n",
"2004 0.021440 0.5625 0.3500 0.05000 \n",
"\n",
" max_polar_pos ave_polar_neg min_polar_neg max_polar_neg subj_title \\\n",
"2000 1.0 -0.3160 -0.8000 -0.05 0.0 \n",
"2001 0.8 -0.3463 -0.7143 -0.10 0.9 \n",
"2002 0.5 -0.2000 -0.2000 -0.20 0.0 \n",
"2003 0.6 -0.4000 -0.4000 -0.40 0.0 \n",
"2004 0.6 -0.2435 -0.8000 -0.10 0.0 \n",
"\n",
" polar_title \n",
"2000 0.0 \n",
"2001 0.3 \n",
"2002 0.0 \n",
"2003 0.0 \n",
"2004 0.0 \n",
"\n",
"[5 rows x 48 columns]"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Get the weekday data and encode it using a dummy categorical encoding\n",
"weekday_data = pd.get_dummies(train_data['weekday'], prefix='weekday', drop_first=True)\n",
"\n",
"# Get the rest of the data\n",
"other_data = train_data.drop(['weekday'], axis=1)\n",
"\n",
"# Create a new data set by concatenation of the new weekday data and the old rest of the data\n",
"training_data = pd.concat([weekday_data, other_data], axis=1)\n",
"\n",
"# Print the created training data.\n",
"training_data.head(5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Question:__ Repeat the process for the other categorical variable(s) in your data. Do not forget to apply your transformation to the test dataset as well!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# TODO"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.2 Preprocessing data: standardization\n",
"You might want to consider standardizing your data as seen in Lab 02."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.3 Unsupervised projection\n",
"If your number of features is high, it may be useful to reduce it with an unsupervised step prior to supervised steps. \n",
"\n",
"We have already worked on a widly used dimentionality reduction method in `Lab 1`, the Principal Component Analysis. \n",
"\n",
"We will discuss in `Lab 5` the combinaison of dimentionality reduction and a predictor."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.4 Feature selection\n",
"See [scikit-learn's documentation](http://scikit-learn.org/stable/modules/feature_selection.html).\n",
"\n",
"It may be useful to select a restricted number of important features to increase their predictive power. When the number of feature is particularly bigger than the number od instance, this issue of major importance.\n",
"\n",
"Multiple strategies can be considered depending on the problem such like:\n",
"* considering the most varying features, condering the most correlated features to the output etc\n",
"* using feed forward selection procedure: recursively adding features one by one by incresing improvement of performance\n",
"* using embbeded feature selection like lasso or ElasticNet (see lab 5)\n",
"* computing feature importance (via bagging procedure like [randomized lasso](https://stat.ethz.ch/~nicolai/stability.pdf) or bagging trees (see lab 5) for exemple) and thresholding the feature.\n",
"* ..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3. Model evaluation and model selection"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.1 Our first classifier: Gaussian Naive Bayes\n",
"Documentation: http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html \n",
"\n",
"In order to start thinking about model evaluation and model selection, we will convert the regression problem of the KaggleInClass challenge into a classification task in order to to work with the first classifier we studied in class: the Gaussian Naive Bayes.\n",
"\n",
"Our goal here is to try to classify points between astonishingly and not astonishingly shared articles. Based on the distribution of the number of shares, the separation can be set at 1800 shares."
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(2991,)\n",
"(2009,)\n"
]
}
],
"source": [
"# Transform output into a classification task.\n",
"y_clf = np.where(y_tr >= 1800, 1, 0)\n",
"print(np.where(y_clf==0)[0].shape)\n",
"print(np.where(y_clf==1)[0].shape)"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [],
"source": [
"X_clf = training_data.values"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [],
"source": [
"# import Gaussian Naive Bayes\n",
"from sklearn.naive_bayes import GaussianNB"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"# create a Gaussian Naive Bayes classifier i.e. an instance of GaussianNB\n",
"gnb = GaussianNB()"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"GaussianNB()"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# fit the classifier to the data\n",
"gnb.fit(X_clf, y_clf)"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [],
"source": [
"# predict on the same data\n",
"y_pred = gnb.predict(X_clf)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of mislabeled points out of a total 5000 points : 1963\n"
]
}
],
"source": [
"# compute the number of mislabeled articles\n",
"print(\"Number of mislabeled points out of a total %d points : %d\" % \\\n",
" (X_clf.shape[0], (y_clf != y_pred).sum()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note than all predictors implemented in the sklearn library are trained and applied via the `fit` and `predict` (or `predict_proba`) methods.\n",
"\n",
"**Question:** What are the parameters of the model we have trained? How many of them are they? How can you access them?"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"{'priors': None,\n",
" 'var_smoothing': 1e-09,\n",
" 'n_features_in_': 48,\n",
" 'epsilon_': 47.915030130169605,\n",
" 'classes_': array([0, 1]),\n",
" 'theta_': array([[ 1.93580742e-01, 2.05951187e-01, 1.87228352e-01,\n",
" 1.40421264e-01, 4.78100970e-02, 4.71414243e-02,\n",
" 1.04881311e+01, 5.45836844e+02, 5.34619425e-01,\n",
" 2.97559394e-02, 6.78008526e-01, 1.00320963e+01,\n",
" 6.79271147e+00, 4.03610832e+00, 1.17953862e+00,\n",
" 4.01036443e+00, 7.08793046e+00, 3.19324641e+00,\n",
" 2.41805416e+01, 9.28673353e+02, 2.70002006e+02,\n",
" 1.27069137e+04, 7.54202508e+05, 2.55922586e+05,\n",
" 1.01061819e+03, 5.12257472e+03, 2.91886433e+03,\n",
" 3.02787563e+03, 7.79266332e+03, 4.90240328e+03,\n",
" 1.72781849e-01, 1.52756931e-01, 2.46015109e-01,\n",
" 2.06135426e-01, 2.22310033e-01, 4.37093310e-01,\n",
" 1.17109337e-01, 3.90776316e-02, 1.66966225e-02,\n",
" 6.77679445e-01, 3.51399733e-01, 9.54050585e-02,\n",
" 7.45757773e-01, -2.52517482e-01, -5.11862414e-01,\n",
" -1.03064072e-01, 2.82964510e-01, 6.50785553e-02],\n",
" [ 1.80189149e-01, 1.71727227e-01, 1.64758586e-01,\n",
" 1.45345943e-01, 8.56147337e-02, 9.05923345e-02,\n",
" 1.02190144e+01, 5.87604778e+02, 5.23768940e-01,\n",
" 3.08611296e-02, 6.65375610e-01, 1.17177700e+01,\n",
" 8.35988054e+00, 4.86610254e+00, 1.31557989e+00,\n",
" 3.98208064e+00, 7.34942758e+00, 3.27177700e+00,\n",
" 3.11791936e+01, 1.29430762e+03, 3.49331508e+02,\n",
" 1.14555396e+04, 7.42223942e+05, 2.58327544e+05,\n",
" 1.20617870e+03, 6.05944052e+03, 3.34863081e+03,\n",
" 5.04087705e+03, 1.19179980e+04, 7.73627442e+03,\n",
" 2.08163688e-01, 1.20169836e-01, 1.69376142e-01,\n",
" 2.34597611e-01, 2.67692997e-01, 4.51727038e-01,\n",
" 1.28721942e-01, 4.10291648e-02, 1.62101981e-02,\n",
" 6.93852364e-01, 3.57977840e-01, 9.18679343e-02,\n",
" 7.74440284e-01, -2.58563280e-01, -5.19116252e-01,\n",
" -1.06148371e-01, 2.96920179e-01, 8.21279189e-02]]),\n",
" 'sigma_': array([[4.80711374e+01, 4.80785654e+01, 4.80672040e+01, 4.80357333e+01,\n",
" 4.79605544e+01, 4.79599492e+01, 5.23574670e+01, 2.00484574e+05,\n",
" 4.79333339e+01, 4.79439006e+01, 4.79381009e+01, 1.46923696e+02,\n",
" 1.29730972e+02, 1.08452677e+02, 6.43746048e+01, 4.85357853e+01,\n",
" 5.16087360e+01, 5.09308454e+01, 4.58833111e+03, 2.70535460e+06,\n",
" 7.88311247e+04, 3.16905236e+09, 4.67115687e+10, 1.77537953e+10,\n",
" 1.12425412e+06, 1.99926793e+07, 1.41124704e+06, 2.14915154e+08,\n",
" 9.25165735e+08, 3.47575175e+08, 4.79779402e+01, 4.79686235e+01,\n",
" 4.80040740e+01, 4.79957998e+01, 4.79949409e+01, 4.79285792e+01,\n",
" 4.79239664e+01, 4.79153324e+01, 4.79151514e+01, 4.79526437e+01,\n",
" 4.79259205e+01, 4.79202788e+01, 4.79762149e+01, 4.79303124e+01,\n",
" 4.79998731e+01, 4.79224631e+01, 4.80161744e+01, 4.79789879e+01],\n",
" [4.80627511e+01, 4.80572671e+01, 4.80526433e+01, 4.80392506e+01,\n",
" 4.79933150e+01, 4.79974155e+01, 5.22811992e+01, 2.40446097e+05,\n",
" 4.79339690e+01, 4.79449388e+01, 4.79387435e+01, 1.83723380e+02,\n",
" 1.63495322e+02, 1.14929954e+02, 6.22773608e+01, 4.85239674e+01,\n",
" 5.13130898e+01, 5.06365880e+01, 5.69946978e+03, 1.16386774e+07,\n",
" 3.31657609e+05, 1.62349785e+09, 4.96209108e+10, 1.84107850e+10,\n",
" 1.49577628e+06, 2.61482758e+07, 1.52266109e+06, 3.85017724e+08,\n",
" 1.53945604e+09, 5.95637982e+08, 4.79922245e+01, 4.79543917e+01,\n",
" 4.79738443e+01, 4.80042993e+01, 4.80102771e+01, 4.79282621e+01,\n",
" 4.79241411e+01, 4.79153239e+01, 4.79151323e+01, 4.79496336e+01,\n",
" 4.79259402e+01, 4.79200300e+01, 4.79752515e+01, 4.79308426e+01,\n",
" 4.79983999e+01, 4.79238575e+01, 4.80248025e+01, 4.79879665e+01]]),\n",
" 'class_count_': array([2991., 2009.]),\n",
" 'class_prior_': array([0.5982, 0.4018])}"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Hint\n",
"gnb.__dict__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.2 Model Evaluation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You must have a look at http://scikit-learn.org/stable/modules/model_evaluation.html which shows and details a list of metrics for evaluating regression or classification models."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the case of regression, the most commonly used metrics are :\n",
"* `mean squared errors`\n",
"* `mean absolute errors` which gives less importance to errors of very bad prediction and more importance to errors of good predictions as the following plot shows than `mean squared errors`\n",
"* `R2` (coefficient of determination) which provides a measure of how well future samples are likely to be predicted by the model."
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.arange(-2,2,0.01)\n",
"plt.plot(x,x*x, 'blue', label='$x^2$')\n",
"plt.plot(x,abs(x), 'orange', label='|x|')\n",
"plt.legend(loc=\"upper center\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the case of classification, lots of metrics are used depending on the considered problem:\n",
"\n",
"* `accuracy` is a default performance measure computing the proportion of missclassified tested instances\n",
"* `sensitivity` or 'true positive rate' is the proportion of well classified positive samples\n",
"* `specificity` or 'true negative rate' is the proportion of well classified negative samples\n",
"\n",
"* `precision` is the ability of the classifier not to label as positive a sample that is negative. Like in the case of cancer, we really want to avoid diagnose a cancer to somebody who does not have one.\n",
"* `recall` is the ability of the classifier to find all the positive samples.\n",
" \n",
"* `the area under the precision-recall curve`\n",
"* `the area under the Receiver operating characteristic (ROC) curve` "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question** Use the sklearn library to compute the accuracy score of the above prediction."
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.607\n"
]
}
],
"source": [
"from sklearn import metrics\n",
"# Score the predictions\n",
"print(\"Accuracy: %.3f\" % metrics.accuracy_score(y_clf, y_pred) # TODO\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Building an ROC curve requires to use the probability estimates for the test data points *before* they are thresholded."
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5000, 2)\n"
]
}
],
"source": [
"# Predict probability estimates instead of 0/1 class labels\n",
"y_prob = gnb.predict_proba(X_clf)\n",
"print(y_prob.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question:** `y_prob` returns two values for each data point because it returns one probability estimate per class for each data point. The order in which the classes appear are given by `gnb.classes_ `. How do you get the 1-dimensional array that only contains the estimated probability for each point to belong to the positive class?"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pos_index = list(gnb.classes_).index(1)\n",
"\n",
"# ROC curve\n",
"fpr, tpr, thresholds = metrics.roc_curve(y_clf, y_prob[:, pos_index], pos_label=1)\n",
"\n",
"# Area under the ROC curve\n",
"auc = metrics.auc(fpr, tpr)\n",
"\n",
"# Plot the ROC curve\n",
"plt.plot(fpr, tpr, '-', color='orange', label='AUC = %0.3f' % auc)\n",
"\n",
"plt.xlabel('False Positive Rate', fontsize=16)\n",
"plt.ylabel('True Positive Rate', fontsize=16)\n",
"plt.title('ROC curve: Gaussian Naive Bayes', fontsize=16)\n",
"plt.legend(loc=\"lower right\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question:** What is it problematic to have evaluated our classifier on the training data? "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Answer:__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3.3 Model Selection: cross-validation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will now use the function `make_Kfolds` you have implemented in the first section to evaluate the accuracy of your model via a 5-fold cross-validation scheme. We will compare the results you obtained with those you get with scikit-learn's implementation of the cross-validation scheme. "
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"200\n"
]
}
],
"source": [
"# Set up a cross-validation with make_Kfolds\n",
"n_instance = len(y)\n",
"perso_folds = make_Kfolds(n_instance, 5) # TODO\n",
"\n",
"# Set up a cross-validation with sklearn\n",
"sk_folds = model_selection.KFold(n_splits=5, shuffle=True).split(X,y) # TODO"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Your own cv-scheme: Accuracy: 0.515\n",
"Sklearn cv-scheme: Accuracy: 0.478\n"
]
}
],
"source": [
"# Assess performance using the cross_validate function you have implemented\n",
"# On perso_folds\n",
"gnb = GaussianNB()\n",
"# TODO use cross_validate and perso_folds\n",
"y_prob_cv_perso = cross_validate(X, y, gnb, perso_folds) > 0.5\n",
"print(\"Your own cv-scheme: Accuracy: %.3f\" % metrics.accuracy_score(y, y_prob_cv_perso) # TODO\n",
" )\n",
"\n",
"# On sk_folds\n",
"gnb = GaussianNB()\n",
"# TODO use cross_validate and perso_folds\n",
"y_prob_cv_sk = cross_validate(X, y, gnb, sk_folds) > 0.5\n",
"print(\"Sklearn cv-scheme: Accuracy: %.3f\" % metrics.accuracy_score(y, y_prob_cv_sk) # TODO\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will now plot the ROC curve corresponding to your predictions."
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Your own cv-scheme: AUROC: 0.507\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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CJ4+fcoPP/xAfHw8Pj4+2joJCQnExMQwatQoypUrx/Pnz9myZQvvvfcev/zyC+XKlcPZ2RkXFxe2bdtG27ZttetGR0fzyy+/MHToUIyNjQH4+uuvWbduHf3792fy5MlERESwdOlSbty4wc8//4yxsTF79+7lq6++YvTo0bi5uREfH8+1a9dSJJB8xdBdl8Lg9bDSrVu3lMTERCUqKkrZsWOH4uTkpGzatEmnrouLizJ+/Ph0t9esWTNl6NChiqIoypo1a7Tbzork5GSldevWSteuXVMMY73J0dFR+eabb3TKXnfV/f39tWWffPKJ4ujoqBw5ckSnbmxsrNKgQQPl66+/1inv1KmTti2KoihTp05VGjdurERGRurUGzRokNKpUyft6/v37ytOTk7K8uXL023fzJkzFUdHxxRDW2q1WklMTNT+pNX25ORkJTExUQkICFBq1qypE1fr1q2VTz75JMU6b75XT58+VRwdHZWjR4+mGaOvr68yf/78dNuR2vv/psTEROXChQuKo6OjcuXKFW3568/jzz//1JbFx8cr7u7uyowZM9Ld53+HYnr37q34+PgoiYmJiqJkPKyUlJSkJCYmKj4+Pspnn32mLT979qzi6OionD17Vlvm4+OT4u9+1KhRSocOHbSvV6xYoTg7OyshISE69aZPn664u7tr40qvLf/9cXZ2Vnbs2JHu+5CUlKS8evVKcXV1VdatW6ct9/f3V2rVqqXcv39fW7ZhwwbFyclJefjwoXa/tWrVSvF3evHiRZ3/J3PmzFG6dOmSbhz5jfQcclCHDh10Xvfp04d+/fplejtKDl5Zc/v2bcLCwhg2bFiKYaysMjExoXXr1jplxYoVw8fHh3379jFhwgRUKhXXrl0jODiY4cOHa+udOnUKT09PSpYsqdPVb9GiBQsWLODly5eUKFGCSpUq8e+//2YYS1rv1ezZs3W+YY8cOZLx48cDmm+oq1ev5tChQ4SHh5OYmKitd/fuXaytrfV7I9AMBVauXJlFixbx9OlT3N3defvtt3XquLi4sHv3bqytrWnevDm1a9fWfutMS0JCAj/++CMBAQE8ePBA56q3kJAQateurX1tYWGh00MwMzPj7bffznTPcMKECfTt25fdu3fTs2fPVOv88ccfrF69muvXr+t867Wzs0t3235+fnz33XfazzcqKoqTJ08ybtw4bZ1T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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Compute the ROC curve corresponding to the y_prob_cv_perso predictions\n",
"fpr, tpr, thresholds = metrics.roc_curve(y, y_prob_cv_perso, pos_label=1)\n",
"\n",
"# Area under the ROC curve\n",
"auc = metrics.auc(fpr, tpr)\n",
"print(\"Your own cv-scheme: AUROC: %.3f\" % auc)\n",
"\n",
"# Plot the ROC curve\n",
"plt.plot(fpr, tpr, '-', color='orange', label='AUC = %0.3f' % auc)\n",
"\n",
"# TODO: plot in blue the ROC curve corresponding to the y_prob_cv_sk predictions\n",
"\n",
"plt.xlabel('False Positive Rate', fontsize=16)\n",
"plt.ylabel('True Positive Rate', fontsize=16)\n",
"plt.title('ROC curve: Gaussian Naive Bayes', fontsize=16)\n",
"plt.legend(loc=\"lower right\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Question:__ The `sklearn.cross_validation` module provides some utilities to make cross-validated predictions. Compare the results you obtained to what they return.\n",
"\n",
"Documentation: [cross_val_score](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_score.html)"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.515\n"
]
}
],
"source": [
"gnb = GaussianNB()\n",
"skf = model_selection.StratifiedKFold(5, shuffle=True, random_state=91)\n",
"\n",
"# Use model_selection.cross_val_score to compute the average cross-validated roc_auc score \n",
"# of gnb on (X_clf, y_clf), using the skf iterator.\n",
"cv_aucs = model_selection.cross_val_score(gnb, X, y, cv=5) # TODO\n",
"\n",
"print(np.mean(cv_aucs))\n",
"\n",
"# Note that averaging the AUCs obtained over 10 folds is not the same as \n",
"# globally computing the AUC for the predictions made within the cross-validation loop."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Question__ Compare scikit-learn's implementation of the cross-validation with yours."
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cross-validated accuracy: 0.515\n",
"Cross-validated accuracy: 0.512\n"
]
}
],
"source": [
"gnb = GaussianNB()\n",
"skf = model_selection.StratifiedKFold(5, shuffle=True, random_state=91)\n",
"\n",
"# Compute the cross-validation accuracy using model_selection.cross_val_predict\n",
"y_pred_sk = model_selection.cross_val_predict(gnb, X, y, cv=5 # TODO\n",
" )\n",
"print(\"Cross-validated accuracy: %.3f\" % metrics.accuracy_score(y, y_pred_sk # TODO\n",
" ))\n",
"\n",
"# Compute the cross-validation accuracy using your own cross_validate function\n",
"y_prob_cv = cross_validate(X, y, gnb, skf.split(X, y)# TODO\n",
" )\n",
"# Transform y_prob_cv into a vector of binary predictions\n",
"y_pred_perso = y_prob_cv > 0.5 # TODO \n",
"print(\"Cross-validated accuracy: %.3f\" % metrics.accuracy_score(y, y_pred_perso # TODO\n",
" ))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Question:__ Does stratifying the cross-validation make a difference?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Answer:__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Getting started on the final project\n",
"\n",
"You will be evaluated on a final project in the form of a data challenge competition hosted on codalab.\n",
"The data challenge is not public: you can access it through the following link: https://codalab.lisn.upsaclay.fr/competitions/755?secret_key=95ee48c1-fc46-406f-b08b-25a7884d2a61\n",
"\n",
"- Register on the plateform\n",
"- Download the starting kit. It contains the data, a README file, and a script to help with creating the submission bundle.\n",
"- Read the README file.\n",
"- Run the submission script, and submit the submission bundle.\n",
"\n",
"You are all set to start working on the final project! Choose to create teams of two or work on your own, and get started training models!"
]
}
],
"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.6.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
}