BDC-team-1/Sport/Modelization/3_logit_cross_val_sport.ipynb

8911 lines
894 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"id": "ff8cc602-e733-4a31-bf46-a31087511fe0",
"metadata": {},
"source": [
"# Predict sales - sports companies"
]
},
{
"cell_type": "markdown",
"id": "415e466a-1a71-4150-bff7-2f8904766df4",
"metadata": {},
"source": [
"## Importations"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "b5aaf421-850a-4a86-8e99-2c1f0723bd6c",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import os\n",
"import s3fs\n",
"import re\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.metrics import accuracy_score, confusion_matrix, classification_report, recall_score\n",
"from sklearn.utils import class_weight\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"from sklearn.impute import SimpleImputer\n",
"from sklearn.model_selection import GridSearchCV\n",
"from sklearn.preprocessing import StandardScaler, MaxAbsScaler, MinMaxScaler\n",
"from sklearn.metrics import make_scorer, f1_score, balanced_accuracy_score\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import roc_curve, auc, precision_recall_curve, average_precision_score\n",
"from sklearn.exceptions import ConvergenceWarning, DataConversionWarning\n",
"from sklearn.naive_bayes import GaussianNB\n",
"\n",
"import pickle\n",
"import warnings"
]
},
{
"cell_type": "markdown",
"id": "c2f44070-451e-4109-9a08-3b80011d610f",
"metadata": {},
"source": [
"## Load data "
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b5f8135f-b6e7-4d6d-b8e1-da185b944aff",
"metadata": {},
"outputs": [],
"source": [
"# Create filesystem object\n",
"S3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n",
"fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL})"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "2668a243-4ff8-40c6-9de2-5c9c07bcf714",
"metadata": {},
"outputs": [],
"source": [
"def load_train_test():\n",
" BUCKET = \"projet-bdc2324-team1/Generalization/sport\"\n",
" File_path_train = BUCKET + \"/Train_set.csv\"\n",
" File_path_test = BUCKET + \"/Test_set.csv\"\n",
" \n",
" with fs.open( File_path_train, mode=\"rb\") as file_in:\n",
" dataset_train = pd.read_csv(file_in, sep=\",\")\n",
" # dataset_train['y_has_purchased'] = dataset_train['y_has_purchased'].fillna(0)\n",
"\n",
" with fs.open(File_path_test, mode=\"rb\") as file_in:\n",
" dataset_test = pd.read_csv(file_in, sep=\",\")\n",
" # dataset_test['y_has_purchased'] = dataset_test['y_has_purchased'].fillna(0)\n",
" \n",
" return dataset_train, dataset_test"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "13eba3e1-3ea5-435b-8b05-6d7d5744cbe2",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_1481/2459610029.py:7: DtypeWarning: Columns (38) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" dataset_train = pd.read_csv(file_in, sep=\",\")\n"
]
},
{
"data": {
"text/plain": [
"customer_id 0\n",
"nb_tickets 0\n",
"nb_purchases 0\n",
"total_amount 0\n",
"nb_suppliers 0\n",
"vente_internet_max 0\n",
"purchase_date_min 0\n",
"purchase_date_max 0\n",
"time_between_purchase 0\n",
"nb_tickets_internet 0\n",
"street_id 0\n",
"structure_id 222825\n",
"mcp_contact_id 70874\n",
"fidelity 0\n",
"tenant_id 0\n",
"is_partner 0\n",
"deleted_at 224213\n",
"gender 0\n",
"is_email_true 0\n",
"opt_in 0\n",
"last_buying_date 66139\n",
"max_price 66139\n",
"ticket_sum 0\n",
"average_price 66023\n",
"average_purchase_delay 66139\n",
"average_price_basket 66139\n",
"average_ticket_basket 66139\n",
"total_price 116\n",
"purchase_count 0\n",
"first_buying_date 66139\n",
"country 23159\n",
"gender_label 0\n",
"gender_female 0\n",
"gender_male 0\n",
"gender_other 0\n",
"country_fr 23159\n",
"nb_campaigns 0\n",
"nb_campaigns_opened 0\n",
"time_to_open 123159\n",
"y_has_purchased 0\n",
"dtype: int64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset_train, dataset_test = load_train_test()\n",
"dataset_train.isna().sum()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e46622e7-0fc1-43f8-a7e7-34a5e90068b2",
"metadata": {},
"outputs": [],
"source": [
"def features_target_split(dataset_train, dataset_test):\n",
" \"\"\"\n",
" features_l = ['nb_tickets', 'nb_purchases', 'total_amount', 'nb_suppliers', 'vente_internet_max', 'purchase_date_min', 'purchase_date_max', \n",
" 'time_between_purchase', 'nb_tickets_internet', 'fidelity', 'is_email_true', 'opt_in', #'is_partner',\n",
" 'gender_female', 'gender_male', 'gender_other', 'nb_campaigns', 'nb_campaigns_opened']\n",
" \"\"\"\n",
"\n",
" # we suppress fidelity, time between purchase, and gender other (colinearity issue)\n",
" features_l = ['nb_tickets', 'nb_purchases', 'total_amount', 'nb_suppliers', 'vente_internet_max', \n",
" 'purchase_date_min', 'purchase_date_max', 'nb_tickets_internet', 'is_email_true', \n",
" 'opt_in', 'gender_female', 'gender_male', 'nb_campaigns', 'nb_campaigns_opened']\n",
" \n",
" X_train = dataset_train[features_l]\n",
" y_train = dataset_train[['y_has_purchased']]\n",
"\n",
" X_test = dataset_test[features_l]\n",
" y_test = dataset_test[['y_has_purchased']]\n",
" return X_train, X_test, y_train, y_test"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "cec4f386-e643-4bd8-b8cd-8917d2c1b3d0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Shape train : (224213, 14)\n",
"Shape test : (96096, 14)\n"
]
}
],
"source": [
"X_train, X_test, y_train, y_test = features_target_split(dataset_train, dataset_test)\n",
"print(\"Shape train : \", X_train.shape)\n",
"print(\"Shape test : \", X_test.shape)"
]
},
{
"cell_type": "markdown",
"id": "c9e8edbd-7ff6-42f9-a8eb-10d27ca19c8a",
"metadata": {},
"source": [
"## Logistic"
]
},
{
"cell_type": "code",
"execution_count": 96,
"id": "639b432a-c39c-4bf8-8ee2-e136d156e0dd",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{0.0: 0.5837086520288036, 1.0: 3.486549107420539}"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Compute Weights\n",
"weights = class_weight.compute_class_weight(class_weight = 'balanced', classes = np.unique(y_train['y_has_purchased']),\n",
" y = y_train['y_has_purchased'])\n",
"\n",
"weight_dict = {np.unique(y_train['y_has_purchased'])[i]: weights[i] for i in range(len(np.unique(y_train['y_has_purchased'])))}\n",
"weight_dict"
]
},
{
"cell_type": "code",
"execution_count": 97,
"id": "34644a00-85a5-41c9-98df-41178cb3ac69",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>nb_tickets</th>\n",
" <th>nb_purchases</th>\n",
" <th>total_amount</th>\n",
" <th>nb_suppliers</th>\n",
" <th>vente_internet_max</th>\n",
" <th>purchase_date_min</th>\n",
" <th>purchase_date_max</th>\n",
" <th>nb_tickets_internet</th>\n",
" <th>is_email_true</th>\n",
" <th>opt_in</th>\n",
" <th>gender_female</th>\n",
" <th>gender_male</th>\n",
" <th>nb_campaigns</th>\n",
" <th>nb_campaigns_opened</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>60.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>355.268981</td>\n",
" <td>355.268981</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>8.0</td>\n",
" <td>3.0</td>\n",
" <td>140.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>373.540289</td>\n",
" <td>219.262269</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>50.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.202442</td>\n",
" <td>5.202442</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>90.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.178958</td>\n",
" <td>5.178958</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>78.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.174039</td>\n",
" <td>5.174039</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224208</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>34.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224209</th>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>20.00</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>392.501030</td>\n",
" <td>392.501030</td>\n",
" <td>1.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>23.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224210</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>8.0</td>\n",
" <td>4.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224211</th>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>97.11</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>172.334074</td>\n",
" <td>172.334074</td>\n",
" <td>1.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>13.0</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224212</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>224213 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" nb_tickets nb_purchases total_amount nb_suppliers \\\n",
"0 2.0 1.0 60.00 1.0 \n",
"1 8.0 3.0 140.00 1.0 \n",
"2 2.0 1.0 50.00 1.0 \n",
"3 3.0 1.0 90.00 1.0 \n",
"4 2.0 1.0 78.00 1.0 \n",
"... ... ... ... ... \n",
"224208 0.0 0.0 0.00 0.0 \n",
"224209 1.0 1.0 20.00 1.0 \n",
"224210 0.0 0.0 0.00 0.0 \n",
"224211 1.0 1.0 97.11 1.0 \n",
"224212 0.0 0.0 0.00 0.0 \n",
"\n",
" vente_internet_max purchase_date_min purchase_date_max \\\n",
"0 0.0 355.268981 355.268981 \n",
"1 0.0 373.540289 219.262269 \n",
"2 0.0 5.202442 5.202442 \n",
"3 0.0 5.178958 5.178958 \n",
"4 0.0 5.174039 5.174039 \n",
"... ... ... ... \n",
"224208 0.0 550.000000 550.000000 \n",
"224209 1.0 392.501030 392.501030 \n",
"224210 0.0 550.000000 550.000000 \n",
"224211 1.0 172.334074 172.334074 \n",
"224212 0.0 550.000000 550.000000 \n",
"\n",
" nb_tickets_internet is_email_true opt_in gender_female \\\n",
"0 0.0 True False 0 \n",
"1 0.0 True False 0 \n",
"2 0.0 True False 0 \n",
"3 0.0 True False 0 \n",
"4 0.0 True False 1 \n",
"... ... ... ... ... \n",
"224208 0.0 True False 0 \n",
"224209 1.0 True False 0 \n",
"224210 0.0 True True 0 \n",
"224211 1.0 True False 0 \n",
"224212 0.0 True False 0 \n",
"\n",
" gender_male nb_campaigns nb_campaigns_opened \n",
"0 1 0.0 0.0 \n",
"1 1 0.0 0.0 \n",
"2 1 0.0 0.0 \n",
"3 1 0.0 0.0 \n",
"4 0 0.0 0.0 \n",
"... ... ... ... \n",
"224208 1 34.0 3.0 \n",
"224209 1 23.0 6.0 \n",
"224210 1 8.0 4.0 \n",
"224211 1 13.0 5.0 \n",
"224212 1 4.0 4.0 \n",
"\n",
"[224213 rows x 14 columns]"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train"
]
},
{
"cell_type": "code",
"execution_count": 98,
"id": "295676df-36ac-43d8-8b31-49ff08efd6e7",
"metadata": {},
"outputs": [],
"source": [
"# preprocess data \n",
"# numeric features - standardize\n",
"# categorical features - encode\n",
"# encoded features - do nothing\n",
"\n",
"numeric_features = ['nb_tickets', 'nb_purchases', 'total_amount', 'nb_suppliers', 'vente_internet_max', \n",
" 'purchase_date_min', 'purchase_date_max', 'nb_tickets_internet', 'nb_campaigns', \n",
" 'nb_campaigns_opened' # , 'gender_male', 'gender_female'\n",
" ]\n",
"\n",
"numeric_transformer = Pipeline(steps=[\n",
" #(\"imputer\", SimpleImputer(strategy=\"mean\")), \n",
" (\"scaler\", StandardScaler()) \n",
"])\n",
"\n",
"categorical_features = ['opt_in', 'is_email_true'] \n",
"\n",
"# Transformer for the categorical features\n",
"categorical_transformer = Pipeline(steps=[\n",
" #(\"imputer\", SimpleImputer(strategy=\"most_frequent\")), # Impute missing values with the most frequent\n",
" (\"onehot\", OneHotEncoder(handle_unknown='ignore', sparse_output=False))\n",
"])\n",
"\n",
"preproc = ColumnTransformer(\n",
" transformers=[\n",
" (\"num\", numeric_transformer, numeric_features),\n",
" (\"cat\", categorical_transformer, categorical_features)\n",
" ]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 99,
"id": "f46fb56e-c908-40b4-868f-9684d1ae01c2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"nb_tickets 0\n",
"nb_purchases 0\n",
"total_amount 0\n",
"nb_suppliers 0\n",
"vente_internet_max 0\n",
"purchase_date_min 0\n",
"purchase_date_max 0\n",
"nb_tickets_internet 0\n",
"nb_campaigns 0\n",
"nb_campaigns_opened 0\n",
"dtype: int64"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train[numeric_features].isna().sum()"
]
},
{
"cell_type": "code",
"execution_count": 100,
"id": "e729781b-4d65-42c5-bdc5-82b4d653aaf0",
"metadata": {},
"outputs": [],
"source": [
"# Set loss\n",
"balanced_scorer = make_scorer(balanced_accuracy_score)\n",
"recall_scorer = make_scorer(recall_score)\n",
"f1_scorer = make_scorer(f1_score)"
]
},
{
"cell_type": "code",
"execution_count": 101,
"id": "a7ebbe6f-70ba-4276-be18-f10e7bfd7423",
"metadata": {},
"outputs": [],
"source": [
"def draw_confusion_matrix(y_test, y_pred):\n",
" conf_matrix = confusion_matrix(y_test, y_pred)\n",
" sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['Class 0', 'Class 1'], yticklabels=['Class 0', 'Class 1'])\n",
" plt.xlabel('Predicted')\n",
" plt.ylabel('Actual')\n",
" plt.title('Confusion Matrix')\n",
" plt.show()\n",
"\n",
"\n",
"def draw_roc_curve(X_test, y_test):\n",
" y_pred_prob = pipeline.predict_proba(X_test)[:, 1]\n",
"\n",
" # Calcul des taux de faux positifs (FPR) et de vrais positifs (TPR)\n",
" fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob, pos_label=1)\n",
" \n",
" # Calcul de l'aire sous la courbe ROC (AUC)\n",
" roc_auc = auc(fpr, tpr)\n",
" \n",
" plt.figure(figsize = (14, 8))\n",
" plt.plot(fpr, tpr, label=\"ROC curve(area = %0.3f)\" % roc_auc)\n",
" plt.plot([0, 1], [0, 1], color=\"red\",label=\"Random Baseline\", linestyle=\"--\")\n",
" plt.grid(color='gray', linestyle='--', linewidth=0.5)\n",
" plt.xlabel('Taux de faux positifs (FPR)')\n",
" plt.ylabel('Taux de vrais positifs (TPR)')\n",
" plt.title('Courbe ROC : modèle logistique')\n",
" plt.legend(loc=\"lower right\")\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 102,
"id": "2334eb51-e6ea-4fd0-89ce-f54cd474d332",
"metadata": {},
"outputs": [],
"source": [
"def draw_features_importance(pipeline, model):\n",
" coefficients = pipeline.named_steps['logreg'].coef_[0]\n",
" feature_names = pipeline.named_steps['logreg'].feature_names_in_\n",
" \n",
" # Tracer l'importance des caractéristiques\n",
" plt.figure(figsize=(10, 6))\n",
" plt.barh(feature_names, coefficients, color='skyblue')\n",
" plt.xlabel('Importance des caractéristiques')\n",
" plt.ylabel('Caractéristiques')\n",
" plt.title('Importance des caractéristiques dans le modèle de régression logistique')\n",
" plt.grid(True)\n",
" plt.show()\n",
"\n",
"def draw_prob_distribution(X_test):\n",
" y_pred_prob = pipeline.predict_proba(X_test)[:, 1]\n",
" plt.figure(figsize=(8, 6))\n",
" plt.hist(y_pred_prob, bins=10, range=(0, 1), color='blue', alpha=0.7)\n",
" \n",
" plt.xlim(0, 1)\n",
" plt.ylim(0, None)\n",
" \n",
" plt.title('Histogramme des probabilités pour la classe 1')\n",
" plt.xlabel('Probabilité')\n",
" plt.ylabel('Fréquence')\n",
" plt.grid(True)\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 103,
"id": "83917b97-4d9b-4e3c-ba27-1e546ce885d3",
"metadata": {},
"outputs": [],
"source": [
"# Hyperparameter\n",
"\n",
"param_c = np.logspace(-10, 4, 15, base=2)\n",
"# param_penalty_type = ['l1', 'l2', 'elasticnet']\n",
"param_penalty_type = ['l1']\n",
"param_grid = {'logreg__C': param_c,\n",
" 'logreg__penalty': param_penalty_type} "
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "3ae25049-920c-4a6d-a59d-c26e3b45dec6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1024"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 ** 10"
]
},
{
"cell_type": "code",
"execution_count": 104,
"id": "ba4cde9f-a614-4a43-81b9-e16e78aa6c4c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-5 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-5 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-5 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-5 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-5 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-5 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-5 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-5 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-5 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-5 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-5 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-5 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-5 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-5 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-5 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-5 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-5 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-5 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-5 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-5 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-5 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-5 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-5 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-5 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-5 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-5\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;logreg&#x27;,\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;))])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-5\" type=\"checkbox\" ><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;&nbsp;Pipeline<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></label><div class=\"sk-toggleable__content \"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;logreg&#x27;,\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" ><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;preprocessor: ColumnTransformer<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.compose.ColumnTransformer.html\">?<span>Documentation for preprocessor: ColumnTransformer</span></a></label><div class=\"sk-toggleable__content \"><pre>ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;, StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;, &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;, &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;, &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;, &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;])])</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-7\" type=\"checkbox\" ><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">num</label><div class=\"sk-toggleable__content \"><pre>[&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;, &#x27;total_amount&#x27;, &#x27;nb_suppliers&#x27;, &#x27;vente_internet_max&#x27;, &#x27;purchase_date_min&#x27;, &#x27;purchase_date_max&#x27;, &#x27;nb_tickets_internet&#x27;, &#x27;nb_campaigns&#x27;, &#x27;nb_campaigns_opened&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-8\" type=\"checkbox\" ><label for=\"sk-estimator-id-8\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;StandardScaler<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.StandardScaler.html\">?<span>Documentation for StandardScaler</span></a></label><div class=\"sk-toggleable__content \"><pre>StandardScaler()</pre></div> </div></div></div></div></div></div></div><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-9\" type=\"checkbox\" ><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">cat</label><div class=\"sk-toggleable__content \"><pre>[&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-10\" type=\"checkbox\" ><label for=\"sk-estimator-id-10\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;OneHotEncoder<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.OneHotEncoder.html\">?<span>Documentation for OneHotEncoder</span></a></label><div class=\"sk-toggleable__content \"><pre>OneHotEncoder(handle_unknown=&#x27;ignore&#x27;, sparse_output=False)</pre></div> </div></div></div></div></div></div></div></div></div><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-11\" type=\"checkbox\" ><label for=\"sk-estimator-id-11\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a></label><div class=\"sk-toggleable__content \"><pre>LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;)</pre></div> </div></div></div></div></div></div>"
],
"text/plain": [
"Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('num',\n",
" Pipeline(steps=[('scaler',\n",
" StandardScaler())]),\n",
" ['nb_tickets', 'nb_purchases',\n",
" 'total_amount',\n",
" 'nb_suppliers',\n",
" 'vente_internet_max',\n",
" 'purchase_date_min',\n",
" 'purchase_date_max',\n",
" 'nb_tickets_internet',\n",
" 'nb_campaigns',\n",
" 'nb_campaigns_opened']),\n",
" ('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in',\n",
" 'is_email_true'])])),\n",
" ('logreg',\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver='saga'))])"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Pipeline\n",
"pipeline = Pipeline(steps=[\n",
" ('preprocessor', preproc),\n",
" ('logreg', LogisticRegression(solver='saga', class_weight = weight_dict,\n",
" max_iter=5000)) \n",
"])\n",
"\n",
"pipeline.set_output(transform=\"pandas\")"
]
},
{
"cell_type": "code",
"execution_count": 105,
"id": "1e4c1be5-176d-4222-9b3c-fe27225afe36",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>nb_tickets</th>\n",
" <th>nb_purchases</th>\n",
" <th>total_amount</th>\n",
" <th>nb_suppliers</th>\n",
" <th>vente_internet_max</th>\n",
" <th>purchase_date_min</th>\n",
" <th>purchase_date_max</th>\n",
" <th>nb_tickets_internet</th>\n",
" <th>is_email_true</th>\n",
" <th>opt_in</th>\n",
" <th>gender_female</th>\n",
" <th>gender_male</th>\n",
" <th>nb_campaigns</th>\n",
" <th>nb_campaigns_opened</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>43000</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>14.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>183923</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>19.0</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97373</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.0</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>66956</th>\n",
" <td>7.0</td>\n",
" <td>2.0</td>\n",
" <td>254.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>378.343062</td>\n",
" <td>370.453947</td>\n",
" <td>7.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116487</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>5.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>140473</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>83.0</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>153768</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>12.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>110886</th>\n",
" <td>12.0</td>\n",
" <td>6.0</td>\n",
" <td>430.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>490.688726</td>\n",
" <td>153.686330</td>\n",
" <td>12.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>40.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115390</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>79.9</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>57.498524</td>\n",
" <td>57.498524</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>11.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24919</th>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>149.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>457.437319</td>\n",
" <td>457.437169</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1000 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" nb_tickets nb_purchases total_amount nb_suppliers \\\n",
"43000 0.0 0.0 0.0 0.0 \n",
"183923 0.0 0.0 0.0 0.0 \n",
"97373 0.0 0.0 0.0 0.0 \n",
"66956 7.0 2.0 254.0 1.0 \n",
"116487 0.0 0.0 0.0 0.0 \n",
"... ... ... ... ... \n",
"140473 0.0 0.0 0.0 0.0 \n",
"153768 0.0 0.0 0.0 0.0 \n",
"110886 12.0 6.0 430.0 1.0 \n",
"115390 2.0 1.0 79.9 1.0 \n",
"24919 3.0 3.0 149.0 1.0 \n",
"\n",
" vente_internet_max purchase_date_min purchase_date_max \\\n",
"43000 0.0 550.000000 550.000000 \n",
"183923 0.0 550.000000 550.000000 \n",
"97373 0.0 550.000000 550.000000 \n",
"66956 1.0 378.343062 370.453947 \n",
"116487 0.0 550.000000 550.000000 \n",
"... ... ... ... \n",
"140473 0.0 550.000000 550.000000 \n",
"153768 0.0 550.000000 550.000000 \n",
"110886 1.0 490.688726 153.686330 \n",
"115390 0.0 57.498524 57.498524 \n",
"24919 0.0 457.437319 457.437169 \n",
"\n",
" nb_tickets_internet is_email_true opt_in gender_female \\\n",
"43000 0.0 True True 0 \n",
"183923 0.0 True True 0 \n",
"97373 0.0 True False 0 \n",
"66956 7.0 True False 0 \n",
"116487 0.0 True False 1 \n",
"... ... ... ... ... \n",
"140473 0.0 True True 1 \n",
"153768 0.0 True True 1 \n",
"110886 12.0 True False 1 \n",
"115390 0.0 True False 0 \n",
"24919 0.0 True False 0 \n",
"\n",
" gender_male nb_campaigns nb_campaigns_opened \n",
"43000 1 14.0 12.0 \n",
"183923 1 19.0 11.0 \n",
"97373 0 7.0 2.0 \n",
"66956 1 0.0 0.0 \n",
"116487 0 5.0 0.0 \n",
"... ... ... ... \n",
"140473 0 83.0 11.0 \n",
"153768 0 12.0 1.0 \n",
"110886 0 40.0 12.0 \n",
"115390 1 11.0 6.0 \n",
"24919 1 0.0 0.0 \n",
"\n",
"[1000 rows x 14 columns]"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# reduce X_train to reduce the training time\n",
"\n",
"X_train_subsample = X_train.sample(n=1000, random_state=42)\n",
"y_train_subsample = y_train.loc[X_train_subsample.index]\n",
"X_train_subsample"
]
},
{
"cell_type": "code",
"execution_count": 108,
"id": "2b09c2cd-fd5c-49b3-be66-cec6c5ec1351",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>y_has_purchased</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>43000</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>183923</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97373</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>66956</th>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116487</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>140473</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>153768</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>110886</th>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115390</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24919</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1000 rows × 1 columns</p>\n",
"</div>"
],
"text/plain": [
" y_has_purchased\n",
"43000 0.0\n",
"183923 0.0\n",
"97373 0.0\n",
"66956 1.0\n",
"116487 0.0\n",
"... ...\n",
"140473 0.0\n",
"153768 0.0\n",
"110886 1.0\n",
"115390 0.0\n",
"24919 0.0\n",
"\n",
"[1000 rows x 1 columns]"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train_subsample"
]
},
{
"cell_type": "code",
"execution_count": 109,
"id": "6c33fcd8-17d8-4390-b836-faec9ada9acd",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-6 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-6 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-6 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-6 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-6 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-6 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-6 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-6 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-6 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-6 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-6 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-6 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-6 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-6 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-6 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-6 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-6 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-6 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-6 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-6 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-6 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-6 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-6 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-6 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-6 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-6\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;logreg&#x27;,\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;))])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-12\" type=\"checkbox\" ><label for=\"sk-estimator-id-12\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;&nbsp;Pipeline<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></label><div class=\"sk-toggleable__content \"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;logreg&#x27;,\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-13\" type=\"checkbox\" ><label for=\"sk-estimator-id-13\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;preprocessor: ColumnTransformer<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.compose.ColumnTransformer.html\">?<span>Documentation for preprocessor: ColumnTransformer</span></a></label><div class=\"sk-toggleable__content \"><pre>ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;, StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;, &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;, &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;, &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;, &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;])])</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-14\" type=\"checkbox\" ><label for=\"sk-estimator-id-14\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">num</label><div class=\"sk-toggleable__content \"><pre>[&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;, &#x27;total_amount&#x27;, &#x27;nb_suppliers&#x27;, &#x27;vente_internet_max&#x27;, &#x27;purchase_date_min&#x27;, &#x27;purchase_date_max&#x27;, &#x27;nb_tickets_internet&#x27;, &#x27;nb_campaigns&#x27;, &#x27;nb_campaigns_opened&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-15\" type=\"checkbox\" ><label for=\"sk-estimator-id-15\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;StandardScaler<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.StandardScaler.html\">?<span>Documentation for StandardScaler</span></a></label><div class=\"sk-toggleable__content \"><pre>StandardScaler()</pre></div> </div></div></div></div></div></div></div><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-16\" type=\"checkbox\" ><label for=\"sk-estimator-id-16\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">cat</label><div class=\"sk-toggleable__content \"><pre>[&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-17\" type=\"checkbox\" ><label for=\"sk-estimator-id-17\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;OneHotEncoder<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.OneHotEncoder.html\">?<span>Documentation for OneHotEncoder</span></a></label><div class=\"sk-toggleable__content \"><pre>OneHotEncoder(handle_unknown=&#x27;ignore&#x27;, sparse_output=False)</pre></div> </div></div></div></div></div></div></div></div></div><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-18\" type=\"checkbox\" ><label for=\"sk-estimator-id-18\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a></label><div class=\"sk-toggleable__content \"><pre>LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;)</pre></div> </div></div></div></div></div></div>"
],
"text/plain": [
"Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('num',\n",
" Pipeline(steps=[('scaler',\n",
" StandardScaler())]),\n",
" ['nb_tickets', 'nb_purchases',\n",
" 'total_amount',\n",
" 'nb_suppliers',\n",
" 'vente_internet_max',\n",
" 'purchase_date_min',\n",
" 'purchase_date_max',\n",
" 'nb_tickets_internet',\n",
" 'nb_campaigns',\n",
" 'nb_campaigns_opened']),\n",
" ('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in',\n",
" 'is_email_true'])])),\n",
" ('logreg',\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver='saga'))])"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipeline"
]
},
{
"cell_type": "code",
"execution_count": 110,
"id": "710ccccc-50c9-4aba-8cf1-11483dbbdd1c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'logreg__C': array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" 'logreg__penalty': ['l1']}"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"param_grid"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "ab078cf8-0d4c-4b23-9f33-2483cf605b06",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"make_scorer(f1_score, response_method='predict')"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f1_scorer"
]
},
{
"cell_type": "code",
"execution_count": 111,
"id": "8062169e-8305-42b0-aeff-8f714117da40",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>nb_tickets</th>\n",
" <th>nb_purchases</th>\n",
" <th>total_amount</th>\n",
" <th>nb_suppliers</th>\n",
" <th>vente_internet_max</th>\n",
" <th>purchase_date_min</th>\n",
" <th>purchase_date_max</th>\n",
" <th>nb_tickets_internet</th>\n",
" <th>is_email_true</th>\n",
" <th>opt_in</th>\n",
" <th>gender_female</th>\n",
" <th>gender_male</th>\n",
" <th>nb_campaigns</th>\n",
" <th>nb_campaigns_opened</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>43000</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>14.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>183923</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>19.0</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97373</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.0</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>66956</th>\n",
" <td>7.0</td>\n",
" <td>2.0</td>\n",
" <td>254.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>378.343062</td>\n",
" <td>370.453947</td>\n",
" <td>7.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116487</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>5.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>140473</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>83.0</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>153768</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>12.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>110886</th>\n",
" <td>12.0</td>\n",
" <td>6.0</td>\n",
" <td>430.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>490.688726</td>\n",
" <td>153.686330</td>\n",
" <td>12.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>40.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115390</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>79.9</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>57.498524</td>\n",
" <td>57.498524</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>11.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24919</th>\n",
" <td>3.0</td>\n",
" <td>3.0</td>\n",
" <td>149.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>457.437319</td>\n",
" <td>457.437169</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1000 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" nb_tickets nb_purchases total_amount nb_suppliers \\\n",
"43000 0.0 0.0 0.0 0.0 \n",
"183923 0.0 0.0 0.0 0.0 \n",
"97373 0.0 0.0 0.0 0.0 \n",
"66956 7.0 2.0 254.0 1.0 \n",
"116487 0.0 0.0 0.0 0.0 \n",
"... ... ... ... ... \n",
"140473 0.0 0.0 0.0 0.0 \n",
"153768 0.0 0.0 0.0 0.0 \n",
"110886 12.0 6.0 430.0 1.0 \n",
"115390 2.0 1.0 79.9 1.0 \n",
"24919 3.0 3.0 149.0 1.0 \n",
"\n",
" vente_internet_max purchase_date_min purchase_date_max \\\n",
"43000 0.0 550.000000 550.000000 \n",
"183923 0.0 550.000000 550.000000 \n",
"97373 0.0 550.000000 550.000000 \n",
"66956 1.0 378.343062 370.453947 \n",
"116487 0.0 550.000000 550.000000 \n",
"... ... ... ... \n",
"140473 0.0 550.000000 550.000000 \n",
"153768 0.0 550.000000 550.000000 \n",
"110886 1.0 490.688726 153.686330 \n",
"115390 0.0 57.498524 57.498524 \n",
"24919 0.0 457.437319 457.437169 \n",
"\n",
" nb_tickets_internet is_email_true opt_in gender_female \\\n",
"43000 0.0 True True 0 \n",
"183923 0.0 True True 0 \n",
"97373 0.0 True False 0 \n",
"66956 7.0 True False 0 \n",
"116487 0.0 True False 1 \n",
"... ... ... ... ... \n",
"140473 0.0 True True 1 \n",
"153768 0.0 True True 1 \n",
"110886 12.0 True False 1 \n",
"115390 0.0 True False 0 \n",
"24919 0.0 True False 0 \n",
"\n",
" gender_male nb_campaigns nb_campaigns_opened \n",
"43000 1 14.0 12.0 \n",
"183923 1 19.0 11.0 \n",
"97373 0 7.0 2.0 \n",
"66956 1 0.0 0.0 \n",
"116487 0 5.0 0.0 \n",
"... ... ... ... \n",
"140473 0 83.0 11.0 \n",
"153768 0 12.0 1.0 \n",
"110886 0 40.0 12.0 \n",
"115390 1 11.0 6.0 \n",
"24919 1 0.0 0.0 \n",
"\n",
"[1000 rows x 14 columns]"
]
},
"execution_count": 111,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train_subsample"
]
},
{
"cell_type": "code",
"execution_count": 112,
"id": "0270013a-6523-4cf8-8de0-569c0d1c5db5",
"metadata": {},
"outputs": [],
"source": [
"warnings.filterwarnings('ignore')\n",
"warnings.filterwarnings(\"ignore\", category=ConvergenceWarning)\n",
"warnings.filterwarnings(\"ignore\", category=DataConversionWarning)"
]
},
{
"cell_type": "code",
"execution_count": 113,
"id": "7a49d78a-5a9b-44a9-95cf-3fca1b3febfa",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Returned hyperparameter: {'logreg__C': 4.0, 'logreg__penalty': 'l1'}\n",
"Best classification accuracy in train is: 0.4972844559251812\n"
]
}
],
"source": [
"# run the pipeline on the subsample\n",
"\n",
"logit_grid = GridSearchCV(pipeline, param_grid, cv=3, scoring = f1_scorer #, error_score=\"raise\"\n",
" )\n",
"logit_grid.fit(X_train_subsample, y_train_subsample)\n",
"\n",
"# print results\n",
"print('Returned hyperparameter: {}'.format(logit_grid.best_params_))\n",
"print('Best classification F1 score in train is: {}'.format(logit_grid.best_score_))\n",
"# print('Classification accuracy on test is: {}'.format(logit_grid.score(X_test, y_test)))"
]
},
{
"cell_type": "code",
"execution_count": 114,
"id": "b1d5e71d-1078-4370-86e8-52b1ae378898",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01])"
]
},
"execution_count": 114,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"param_c"
]
},
{
"cell_type": "code",
"execution_count": 96,
"id": "cfe04739-fe9c-4802-9d34-885a8cfce0dc",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-12 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-12 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-12 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-12 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-12 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-12 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-12 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-12 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-12 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-12 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-12 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-12 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-12 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-12 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-12 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-12 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-12 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-12 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-12 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-12 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-12 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-12 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-12 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-12 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-12 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-12 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-12\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;,\n",
" &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(...\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000,\n",
" solver=&#x27;saga&#x27;))]),\n",
" param_grid={&#x27;logreg__C&#x27;: array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" &#x27;logreg__penalty&#x27;: [&#x27;l1&#x27;]},\n",
" scoring=make_scorer(f1_score, response_method=&#x27;predict&#x27;))</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-75\" type=\"checkbox\" ><label for=\"sk-estimator-id-75\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;&nbsp;GridSearchCV<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></label><div class=\"sk-toggleable__content \"><pre>GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;,\n",
" &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(...\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000,\n",
" solver=&#x27;saga&#x27;))]),\n",
" param_grid={&#x27;logreg__C&#x27;: array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" &#x27;logreg__penalty&#x27;: [&#x27;l1&#x27;]},\n",
" scoring=make_scorer(f1_score, response_method=&#x27;predict&#x27;))</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-76\" type=\"checkbox\" ><label for=\"sk-estimator-id-76\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">estimator: Pipeline</label><div class=\"sk-toggleable__content \"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;logreg&#x27;,\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-77\" type=\"checkbox\" ><label for=\"sk-estimator-id-77\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;preprocessor: ColumnTransformer<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.compose.ColumnTransformer.html\">?<span>Documentation for preprocessor: ColumnTransformer</span></a></label><div class=\"sk-toggleable__content \"><pre>ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;, StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;, &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;, &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;, &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;, &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;])])</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-78\" type=\"checkbox\" ><label for=\"sk-estimator-id-78\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">num</label><div class=\"sk-toggleable__content \"><pre>[&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;, &#x27;total_amount&#x27;, &#x27;nb_suppliers&#x27;, &#x27;vente_internet_max&#x27;, &#x27;purchase_date_min&#x27;, &#x27;purchase_date_max&#x27;, &#x27;nb_tickets_internet&#x27;, &#x27;nb_campaigns&#x27;, &#x27;nb_campaigns_opened&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-79\" type=\"checkbox\" ><label for=\"sk-estimator-id-79\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;StandardScaler<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.StandardScaler.html\">?<span>Documentation for StandardScaler</span></a></label><div class=\"sk-toggleable__content \"><pre>StandardScaler()</pre></div> </div></div></div></div></div></div></div><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-80\" type=\"checkbox\" ><label for=\"sk-estimator-id-80\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">cat</label><div class=\"sk-toggleable__content \"><pre>[&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-81\" type=\"checkbox\" ><label for=\"sk-estimator-id-81\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;OneHotEncoder<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.OneHotEncoder.html\">?<span>Documentation for OneHotEncoder</span></a></label><div class=\"sk-toggleable__content \"><pre>OneHotEncoder(handle_unknown=&#x27;ignore&#x27;, sparse_output=False)</pre></div> </div></div></div></div></div></div></div></div></div><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-82\" type=\"checkbox\" ><label for=\"sk-estimator-id-82\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a></label><div class=\"sk-toggleable__content \"><pre>LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;)</pre></div> </div></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('num',\n",
" Pipeline(steps=[('scaler',\n",
" StandardScaler())]),\n",
" ['nb_tickets',\n",
" 'nb_purchases',\n",
" 'total_amount',\n",
" 'nb_suppliers',\n",
" 'vente_internet_max',\n",
" 'purchase_date_min',\n",
" 'purchase_date_max',\n",
" 'nb_tickets_internet',\n",
" 'nb_campaigns',\n",
" 'nb_campaigns_opened']),\n",
" ('cat',\n",
" Pipeline(steps=[(...\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000,\n",
" solver='saga'))]),\n",
" param_grid={'logreg__C': array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" 'logreg__penalty': ['l1']},\n",
" scoring=make_scorer(f1_score, response_method='predict'))"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"logit_grid = GridSearchCV(pipeline, param_grid, cv=3, scoring = f1_scorer #, error_score=\"raise\"\n",
" )\n",
"logit_grid"
]
},
{
"cell_type": "code",
"execution_count": 97,
"id": "6debc66c-a56d-41fa-8ef8-ba388e0e14fe",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'logreg__C': array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" 'logreg__penalty': ['l1']}"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"param_grid"
]
},
{
"cell_type": "code",
"execution_count": 98,
"id": "e394cc04-5d0b-4a64-9aa0-415dc8a3cbbc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Returned hyperparameter: {'logreg__C': 0.03125, 'logreg__penalty': 'l1'}\n",
"Best classification accuracy in train is: 0.42160313383818665\n",
"Classification accuracy on test is: 0.47078982841737305\n"
]
}
],
"source": [
"# run the pipeline on the full sample\n",
"\n",
"logit_grid = GridSearchCV(pipeline, param_grid, cv=3, scoring = f1_scorer #, error_score=\"raise\"\n",
" )\n",
"logit_grid.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 99,
"id": "8e6cf558-a4f4-4159-9835-364ee3bb1ed2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Returned hyperparameter: {'logreg__C': 0.03125, 'logreg__penalty': 'l1'}\n",
"Best classification F1 score in train is: 0.42160313383818665\n",
"Classification F1 score on test is: 0.47078982841737305\n"
]
}
],
"source": [
"# print results\n",
"print('Returned hyperparameter: {}'.format(logit_grid.best_params_))\n",
"print('Best classification F1 score in train is: {}'.format(logit_grid.best_score_))\n",
"print('Classification F1 score on test is: {}'.format(logit_grid.score(X_test, y_test)))"
]
},
{
"cell_type": "code",
"execution_count": 100,
"id": "e2ff26cb-f137-4a23-9add-bdb61bebdf9c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-13 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-13 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-13 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-13 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-13 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-13 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-13 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-13 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-13 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-13 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-13 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-13 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-13 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-13 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-13 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-13 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-13 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-13 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-13 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-13 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-13 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-13 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-13 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-13 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-13 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-13 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-13\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;,\n",
" &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(...\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000,\n",
" solver=&#x27;saga&#x27;))]),\n",
" param_grid={&#x27;logreg__C&#x27;: array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" &#x27;logreg__penalty&#x27;: [&#x27;l1&#x27;]},\n",
" scoring=make_scorer(f1_score, response_method=&#x27;predict&#x27;))</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-83\" type=\"checkbox\" ><label for=\"sk-estimator-id-83\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;,\n",
" &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(...\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000,\n",
" solver=&#x27;saga&#x27;))]),\n",
" param_grid={&#x27;logreg__C&#x27;: array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" &#x27;logreg__penalty&#x27;: [&#x27;l1&#x27;]},\n",
" scoring=make_scorer(f1_score, response_method=&#x27;predict&#x27;))</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-84\" type=\"checkbox\" ><label for=\"sk-estimator-id-84\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">estimator: Pipeline</label><div class=\"sk-toggleable__content fitted\"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;,\n",
" StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;,\n",
" &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;,\n",
" &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;,\n",
" &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;,\n",
" &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;logreg&#x27;,\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-85\" type=\"checkbox\" ><label for=\"sk-estimator-id-85\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;preprocessor: ColumnTransformer<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.compose.ColumnTransformer.html\">?<span>Documentation for preprocessor: ColumnTransformer</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>ColumnTransformer(transformers=[(&#x27;num&#x27;,\n",
" Pipeline(steps=[(&#x27;scaler&#x27;, StandardScaler())]),\n",
" [&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;, &#x27;total_amount&#x27;,\n",
" &#x27;nb_suppliers&#x27;, &#x27;vente_internet_max&#x27;,\n",
" &#x27;purchase_date_min&#x27;, &#x27;purchase_date_max&#x27;,\n",
" &#x27;nb_tickets_internet&#x27;, &#x27;nb_campaigns&#x27;,\n",
" &#x27;nb_campaigns_opened&#x27;]),\n",
" (&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;])])</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-86\" type=\"checkbox\" ><label for=\"sk-estimator-id-86\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">num</label><div class=\"sk-toggleable__content fitted\"><pre>[&#x27;nb_tickets&#x27;, &#x27;nb_purchases&#x27;, &#x27;total_amount&#x27;, &#x27;nb_suppliers&#x27;, &#x27;vente_internet_max&#x27;, &#x27;purchase_date_min&#x27;, &#x27;purchase_date_max&#x27;, &#x27;nb_tickets_internet&#x27;, &#x27;nb_campaigns&#x27;, &#x27;nb_campaigns_opened&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-87\" type=\"checkbox\" ><label for=\"sk-estimator-id-87\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;StandardScaler<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.StandardScaler.html\">?<span>Documentation for StandardScaler</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>StandardScaler()</pre></div> </div></div></div></div></div></div></div><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-88\" type=\"checkbox\" ><label for=\"sk-estimator-id-88\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">cat</label><div class=\"sk-toggleable__content fitted\"><pre>[&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-89\" type=\"checkbox\" ><label for=\"sk-estimator-id-89\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;OneHotEncoder<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.OneHotEncoder.html\">?<span>Documentation for OneHotEncoder</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>OneHotEncoder(handle_unknown=&#x27;ignore&#x27;, sparse_output=False)</pre></div> </div></div></div></div></div></div></div></div></div><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-90\" type=\"checkbox\" ><label for=\"sk-estimator-id-90\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver=&#x27;saga&#x27;)</pre></div> </div></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('num',\n",
" Pipeline(steps=[('scaler',\n",
" StandardScaler())]),\n",
" ['nb_tickets',\n",
" 'nb_purchases',\n",
" 'total_amount',\n",
" 'nb_suppliers',\n",
" 'vente_internet_max',\n",
" 'purchase_date_min',\n",
" 'purchase_date_max',\n",
" 'nb_tickets_internet',\n",
" 'nb_campaigns',\n",
" 'nb_campaigns_opened']),\n",
" ('cat',\n",
" Pipeline(steps=[(...\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000,\n",
" solver='saga'))]),\n",
" param_grid={'logreg__C': array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" 'logreg__penalty': ['l1']},\n",
" scoring=make_scorer(f1_score, response_method='predict'))"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"logit_grid"
]
},
{
"cell_type": "code",
"execution_count": 105,
"id": "5d553da2-5c2a-491a-b4d2-f31c30c201a6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'scoring': make_scorer(f1_score, response_method='predict'),\n",
" 'estimator': Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('num',\n",
" Pipeline(steps=[('scaler',\n",
" StandardScaler())]),\n",
" ['nb_tickets', 'nb_purchases',\n",
" 'total_amount',\n",
" 'nb_suppliers',\n",
" 'vente_internet_max',\n",
" 'purchase_date_min',\n",
" 'purchase_date_max',\n",
" 'nb_tickets_internet',\n",
" 'nb_campaigns',\n",
" 'nb_campaigns_opened']),\n",
" ('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in',\n",
" 'is_email_true'])])),\n",
" ('logreg',\n",
" LogisticRegression(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, solver='saga'))]),\n",
" 'n_jobs': None,\n",
" 'refit': True,\n",
" 'cv': 3,\n",
" 'verbose': 0,\n",
" 'pre_dispatch': '2*n_jobs',\n",
" 'error_score': nan,\n",
" 'return_train_score': False,\n",
" 'param_grid': {'logreg__C': array([9.765625e-04, 1.953125e-03, 3.906250e-03, 7.812500e-03,\n",
" 1.562500e-02, 3.125000e-02, 6.250000e-02, 1.250000e-01,\n",
" 2.500000e-01, 5.000000e-01, 1.000000e+00, 2.000000e+00,\n",
" 4.000000e+00, 8.000000e+00, 1.600000e+01]),\n",
" 'logreg__penalty': ['l1']},\n",
" 'multimetric_': False,\n",
" 'best_index_': 5,\n",
" 'best_score_': 0.42160313383818665,\n",
" 'best_params_': {'logreg__C': 0.03125, 'logreg__penalty': 'l1'},\n",
" 'best_estimator_': Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('num',\n",
" Pipeline(steps=[('scaler',\n",
" StandardScaler())]),\n",
" ['nb_tickets', 'nb_purchases',\n",
" 'total_amount',\n",
" 'nb_suppliers',\n",
" 'vente_internet_max',\n",
" 'purchase_date_min',\n",
" 'purchase_date_max',\n",
" 'nb_tickets_internet',\n",
" 'nb_campaigns',\n",
" 'nb_campaigns_opened']),\n",
" ('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in',\n",
" 'is_email_true'])])),\n",
" ('logreg',\n",
" LogisticRegression(C=0.03125,\n",
" class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, penalty='l1',\n",
" solver='saga'))]),\n",
" 'refit_time_': 305.1356477737427,\n",
" 'feature_names_in_': array(['nb_tickets', 'nb_purchases', 'total_amount', 'nb_suppliers',\n",
" 'vente_internet_max', 'purchase_date_min', 'purchase_date_max',\n",
" 'nb_tickets_internet', 'is_email_true', 'opt_in', 'gender_female',\n",
" 'gender_male', 'nb_campaigns', 'nb_campaigns_opened'], dtype=object),\n",
" 'scorer_': make_scorer(f1_score, response_method='predict'),\n",
" 'cv_results_': {'mean_fit_time': array([ 11.07076669, 13.15744201, 27.35094929, 40.0343461 ,\n",
" 94.58210254, 140.45846391, 159.83818332, 162.80178094,\n",
" 163.94260454, 171.08749111, 169.26621262, 166.36741408,\n",
" 167.91208776, 173.06720233, 170.93666704]),\n",
" 'std_fit_time': array([ 0.09462032, 1.51362591, 6.70859141, 22.68643753, 28.72690872,\n",
" 70.8434823 , 85.23159321, 79.71538593, 82.70486235, 84.79706797,\n",
" 86.79005212, 84.67956107, 83.94889047, 89.68716252, 89.41361431]),\n",
" 'mean_score_time': array([0.11632609, 0.10857773, 0.18140252, 0.1291213 , 0.11651532,\n",
" 0.07535577, 0.12481014, 0.16039928, 0.15685773, 0.07996233,\n",
" 0.12988146, 0.10067987, 0.1194102 , 0.09737802, 0.09390028]),\n",
" 'std_score_time': array([0.02131792, 0.03620144, 0.05853886, 0.06555575, 0.03228018,\n",
" 0.01433186, 0.03501336, 0.05466042, 0.06882891, 0.01002881,\n",
" 0.00495894, 0.00905774, 0.04075337, 0.03269379, 0.01990173]),\n",
" 'param_logreg__C': masked_array(data=[0.0009765625, 0.001953125, 0.00390625, 0.0078125,\n",
" 0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1.0, 2.0,\n",
" 4.0, 8.0, 16.0],\n",
" mask=[False, False, False, False, False, False, False, False,\n",
" False, False, False, False, False, False, False],\n",
" fill_value='?',\n",
" dtype=object),\n",
" 'param_logreg__penalty': masked_array(data=['l1', 'l1', 'l1', 'l1', 'l1', 'l1', 'l1', 'l1', 'l1',\n",
" 'l1', 'l1', 'l1', 'l1', 'l1', 'l1'],\n",
" mask=[False, False, False, False, False, False, False, False,\n",
" False, False, False, False, False, False, False],\n",
" fill_value='?',\n",
" dtype=object),\n",
" 'params': [{'logreg__C': 0.0009765625, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.001953125, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.00390625, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.0078125, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.015625, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.03125, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.0625, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.125, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.25, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 0.5, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 1.0, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 2.0, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 4.0, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 8.0, 'logreg__penalty': 'l1'},\n",
" {'logreg__C': 16.0, 'logreg__penalty': 'l1'}],\n",
" 'split0_test_score': array([0.27289073, 0.2738913 , 0.27382853, 0.27409759, 0.27454764,\n",
" 0.27661894, 0.2766145 , 0.27584723, 0.27571682, 0.27576295,\n",
" 0.27580092, 0.27577943, 0.27581248, 0.27581909, 0.27581909]),\n",
" 'split1_test_score': array([0.4714244 , 0.47196015, 0.48362373, 0.48891733, 0.49066854,\n",
" 0.49091122, 0.49086284, 0.49065871, 0.49062783, 0.49049541,\n",
" 0.49048106, 0.49045238, 0.49043804, 0.49043804, 0.4904237 ]),\n",
" 'split2_test_score': array([0.50689906, 0.50092334, 0.4981377 , 0.49759178, 0.49725836,\n",
" 0.49727924, 0.49708801, 0.49738305, 0.49751781, 0.49738248,\n",
" 0.49738248, 0.49738248, 0.49738248, 0.49738248, 0.49738248]),\n",
" 'mean_test_score': array([0.4170714 , 0.4155916 , 0.41852999, 0.42020223, 0.42082484,\n",
" 0.42160313, 0.42152178, 0.42129633, 0.42128749, 0.42121361,\n",
" 0.42122149, 0.42120476, 0.421211 , 0.4212132 , 0.42120842]),\n",
" 'std_test_score': array([0.10297463, 0.1008925 , 0.10249081, 0.10337226, 0.10346859,\n",
" 0.10255226, 0.10249644, 0.10288467, 0.10297243, 0.10288758,\n",
" 0.10286646, 0.10287015, 0.10285136, 0.10284824, 0.10284503]),\n",
" 'rank_test_score': array([14, 15, 13, 12, 11, 1, 2, 3, 4, 6, 5, 10, 8, 7, 9],\n",
" dtype=int32)},\n",
" 'n_splits_': 3}"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"logit_grid.__dict__"
]
},
{
"cell_type": "code",
"execution_count": 115,
"id": "3573f34e-25d5-4afb-82cc-52323e2f63c6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.64495866, -0.23909623, 0.54323933, 0.85687092, -0.04235755,\n",
" 0.87304348, -1.34756336, 0.21177838, 0.051939 , 0.04496588,\n",
" 0.2103007 , -0.59054784, 0. , 0. ]])"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# coefficients trouvés pour le modèle optimal\n",
"logit_grid.best_estimator_.named_steps[\"logreg\"].coef_"
]
},
{
"cell_type": "code",
"execution_count": 116,
"id": "0332a814-61fb-4b71-836a-e8ace70b1a44",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'preprocessor': ColumnTransformer(transformers=[('num',\n",
" Pipeline(steps=[('scaler', StandardScaler())]),\n",
" ['nb_tickets', 'nb_purchases', 'total_amount',\n",
" 'nb_suppliers', 'vente_internet_max',\n",
" 'purchase_date_min', 'purchase_date_max',\n",
" 'nb_tickets_internet', 'nb_campaigns',\n",
" 'nb_campaigns_opened']),\n",
" ('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in', 'is_email_true'])]),\n",
" 'logreg': LogisticRegression(C=4.0,\n",
" class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539},\n",
" max_iter=5000, penalty='l1', solver='saga')}"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"logit_grid.best_estimator_.named_steps"
]
},
{
"cell_type": "code",
"execution_count": 117,
"id": "287615b9-e062-4b84-be61-26b9364b2cf4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([-0.38031755])"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"logit_grid.best_estimator_.named_steps[\"logreg\"].intercept_"
]
},
{
"cell_type": "code",
"execution_count": 115,
"id": "4d50899d-cc0b-4a71-9406-f8b0a277c4a6",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>nb_tickets</th>\n",
" <th>nb_purchases</th>\n",
" <th>total_amount</th>\n",
" <th>nb_suppliers</th>\n",
" <th>vente_internet_max</th>\n",
" <th>purchase_date_min</th>\n",
" <th>purchase_date_max</th>\n",
" <th>nb_tickets_internet</th>\n",
" <th>is_email_true</th>\n",
" <th>opt_in</th>\n",
" <th>gender_female</th>\n",
" <th>gender_male</th>\n",
" <th>nb_campaigns</th>\n",
" <th>nb_campaigns_opened</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>60.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>355.268981</td>\n",
" <td>355.268981</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>8.0</td>\n",
" <td>3.0</td>\n",
" <td>140.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>373.540289</td>\n",
" <td>219.262269</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>50.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.202442</td>\n",
" <td>5.202442</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>90.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.178958</td>\n",
" <td>5.178958</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>78.00</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.174039</td>\n",
" <td>5.174039</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224208</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>34.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224209</th>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>20.00</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>392.501030</td>\n",
" <td>392.501030</td>\n",
" <td>1.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>23.0</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224210</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>8.0</td>\n",
" <td>4.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224211</th>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>97.11</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>172.334074</td>\n",
" <td>172.334074</td>\n",
" <td>1.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>13.0</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>224212</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>4.0</td>\n",
" <td>4.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>224213 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" nb_tickets nb_purchases total_amount nb_suppliers \\\n",
"0 2.0 1.0 60.00 1.0 \n",
"1 8.0 3.0 140.00 1.0 \n",
"2 2.0 1.0 50.00 1.0 \n",
"3 3.0 1.0 90.00 1.0 \n",
"4 2.0 1.0 78.00 1.0 \n",
"... ... ... ... ... \n",
"224208 0.0 0.0 0.00 0.0 \n",
"224209 1.0 1.0 20.00 1.0 \n",
"224210 0.0 0.0 0.00 0.0 \n",
"224211 1.0 1.0 97.11 1.0 \n",
"224212 0.0 0.0 0.00 0.0 \n",
"\n",
" vente_internet_max purchase_date_min purchase_date_max \\\n",
"0 0.0 355.268981 355.268981 \n",
"1 0.0 373.540289 219.262269 \n",
"2 0.0 5.202442 5.202442 \n",
"3 0.0 5.178958 5.178958 \n",
"4 0.0 5.174039 5.174039 \n",
"... ... ... ... \n",
"224208 0.0 550.000000 550.000000 \n",
"224209 1.0 392.501030 392.501030 \n",
"224210 0.0 550.000000 550.000000 \n",
"224211 1.0 172.334074 172.334074 \n",
"224212 0.0 550.000000 550.000000 \n",
"\n",
" nb_tickets_internet is_email_true opt_in gender_female \\\n",
"0 0.0 True False 0 \n",
"1 0.0 True False 0 \n",
"2 0.0 True False 0 \n",
"3 0.0 True False 0 \n",
"4 0.0 True False 1 \n",
"... ... ... ... ... \n",
"224208 0.0 True False 0 \n",
"224209 1.0 True False 0 \n",
"224210 0.0 True True 0 \n",
"224211 1.0 True False 0 \n",
"224212 0.0 True False 0 \n",
"\n",
" gender_male nb_campaigns nb_campaigns_opened \n",
"0 1 0.0 0.0 \n",
"1 1 0.0 0.0 \n",
"2 1 0.0 0.0 \n",
"3 1 0.0 0.0 \n",
"4 0 0.0 0.0 \n",
"... ... ... ... \n",
"224208 1 34.0 3.0 \n",
"224209 1 23.0 6.0 \n",
"224210 1 8.0 4.0 \n",
"224211 1 13.0 5.0 \n",
"224212 1 4.0 4.0 \n",
"\n",
"[224213 rows x 14 columns]"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# c'est la 2ème variable nb_purchases qui a été supprimée par le LASSO\n",
"X_train"
]
},
{
"cell_type": "code",
"execution_count": 118,
"id": "e53b1f79-762d-4f1f-8505-91de1088af42",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.25"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# best param : alpha = 32 (alpha =1/4 sur le petit subsample)\n",
"1/logit_grid.best_params_[\"logreg__C\"]"
]
},
{
"cell_type": "code",
"execution_count": 119,
"id": "41bcaaf6-ab58-4004-a3c5-586d77e872d1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy Score: 0.7187395937395937\n",
"F1 Score: 0.44926236857119567\n",
"Recall Score: 0.8052593133674215\n"
]
}
],
"source": [
"# print results for the best model\n",
"\n",
"y_pred = logit_grid.predict(X_test)\n",
"\n",
"# Calculate the F1 score\n",
"acc = accuracy_score(y_test, y_pred)\n",
"print(f\"Accuracy Score: {acc}\")\n",
"\n",
"f1 = f1_score(y_test, y_pred)\n",
"print(f\"F1 Score: {f1}\")\n",
"\n",
"recall = recall_score(y_test, y_pred)\n",
"print(f\"Recall Score: {recall}\")"
]
},
{
"cell_type": "code",
"execution_count": 120,
"id": "a454bb57-76eb-4a22-9950-0733d39e449f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAHFCAYAAAA+FskAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTs0lEQVR4nO3deVxU9f7H8dfIMiLKJCggLrkhSVgapqLlkrui2XI1Ma6WoaVpJC6plbaJ29VKTcsyyyxaTLMsrpZlmRuZlFsuiVuCuCAqIRCe3x/+nNsIltgZh9H38z7O4yHnfM45nzNd6uPn+/2esRiGYSAiIiJSypVxdQIiIiIil0JFi4iIiLgFFS0iIiLiFlS0iIiIiFtQ0SIiIiJuQUWLiIiIuAUVLSIiIuIWVLSIiIiIW1DRIiIiIm5BRYtc1X7++WceeOABatWqRdmyZSlfvjy33HILkydP5vjx406996ZNm2jVqhU2mw2LxcKLL75o+j0sFgvjx483/bp/Z/78+VgsFiwWC998802R44ZhULduXSwWC61bt76se7zyyivMnz+/ROd88803F81JRNyfp6sTEHGWuXPnMmjQIMLCwhgxYgTh4eEUFBTwww8/MGfOHNauXcvixYuddv8HH3yQnJwckpKSqFixIjVr1jT9HmvXrqVatWqmX/dSVahQgTfeeKNIYbJq1Sp+/fVXKlSocNnXfuWVV6hUqRL9+vW75HNuueUW1q5dS3h4+GXfV0RKLxUtclVau3YtjzzyCO3bt2fJkiVYrVb7sfbt25OQkEBycrJTc9iyZQtxcXF07tzZafdo1qyZ0659KXr16sXChQuZNWsWfn5+9v1vvPEGUVFRnDx58orkUVBQgMViwc/Pz+WfiYg4j4aH5Ko0YcIELBYLr732mkPBcp63tzfdu3e3/3z27FkmT57MDTfcgNVqJTAwkH//+98cPHjQ4bzWrVsTERFBSkoKt99+O+XKlaN27dpMnDiRs2fPAv8bOvnjjz+YPXu2fRgFYPz48fY//9n5c/bu3Wvft3LlSlq3bk1AQAA+Pj7UqFGDe+65h99//90eU9zw0JYtW7jzzjupWLEiZcuWpWHDhrz11lsOMeeHUd577z3Gjh1LSEgIfn5+tGvXjh07dlzahwz07t0bgPfee8++Lzs7m0WLFvHggw8We84zzzxD06ZN8ff3x8/Pj1tuuYU33niDP393a82aNdm6dSurVq2yf37nO1Xnc1+wYAEJCQlUrVoVq9XK7t27iwwPHT16lOrVq9O8eXMKCgrs19+2bRu+vr7ExsZe8rOKiOupaJGrTmFhIStXriQyMpLq1atf0jmPPPIIo0aNon379ixdupTnnnuO5ORkmjdvztGjRx1iMzIy6NOnD/fffz9Lly6lc+fOjB49mnfeeQeArl27snbtWgDuvfde1q5da//5Uu3du5euXbvi7e3NvHnzSE5OZuLEifj6+pKfn3/R83bs2EHz5s3ZunUrL7/8Mh9//DHh4eH069ePyZMnF4kfM2YM+/bt4/XXX+e1115j165ddOvWjcLCwkvK08/Pj3vvvZd58+bZ97333nuUKVOGXr16XfTZBg4cyAcffMDHH3/M3XffzZAhQ3juuefsMYsXL6Z27do0atTI/vldOJQ3evRo9u/fz5w5c/j0008JDAwscq9KlSqRlJRESkoKo0aNAuD333/nX//6FzVq1GDOnDmX9JwiUkoYIleZjIwMAzDuu+++S4rfvn27ARiDBg1y2L9+/XoDMMaMGWPf16pVKwMw1q9f7xAbHh5udOzY0WEfYAwePNhh37hx44zifu3efPNNAzDS0tIMwzCMjz76yACM1NTUv8wdMMaNG2f/+b777jOsVquxf/9+h7jOnTsb5cqVM06cOGEYhmF8/fXXBmB06dLFIe6DDz4wAGPt2rV/ed/z+aakpNivtWXLFsMwDOPWW281+vXrZxiGYdx4441Gq1atLnqdwsJCo6CgwHj22WeNgIAA4+zZs/ZjFzv3/P1atmx50WNff/21w/5JkyYZgLF48WKjb9++ho+Pj/Hzzz//5TOKSOmjTotc877++muAIhM+mzRpQv369fnqq68c9gcHB9OkSROHfTfddBP79u0zLaeGDRvi7e3NgAEDeOutt9izZ88lnbdy5Uratm1bpMPUr18/fv/99yIdnz8PkcG55wBK9CytWrWiTp06zJs3j82bN5OSknLRoaHzObZr1w6bzYaHhwdeXl48/fTTHDt2jMzMzEu+7z333HPJsSNGjKBr16707t2bt956ixkzZtCgQYNLPl9ESgcVLXLVqVSpEuXKlSMtLe2S4o8dOwZAlSpVihwLCQmxHz8vICCgSJzVaiU3N/cysi1enTp1+PLLLwkMDGTw4MHUqVOHOnXq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ICDA6NmzpzFu3DjDy8vLyMzMtB//6quvDD8/P+PMmTMO16lTp47x6quvGoZhGFFRUcbDDz/scLxp06bGzTffXOx9T548aVitVmPu3LnF5piWlmYAxqZNmxz2V69e3Xj33Xcd9j333HNGVFSUYRiG8eqrrxr+/v5GTk6O/fjs2bOLvZaIyOXQ8JDIFfbZZ59Rvnx5ypYtS1RUFC1btmTGjBkAXH/99VSuXNkeu3HjRk6fPk1AQADly5e3b2lpafz6668AbN++naioKId7XPjzn23fvp28vDzatm17yTkfOXKEAwcO0L9/f4c8nn/+eYc8br75ZsqVK3dJeYiIlJSGh0SusDZt2jB79my8vLwICQlxmGzr6+vrEHv27FmqVKnCN998U+Q611133WXd38fHp8TnnD17Fjg3RNS0aVOHY+eHsQzDuKx8REQulYoWkSvM19eXunXrXlLsLbfcQkZGBp6entSsWbPYmPr167Nu3Tr+/e9/2/etW7fuotcMDQ3Fx8eHr776ioceeqjI8fNzWAoLC+37goKCqFq1Knv27KFPnz7FXjc8PJwFCxaQm5trL4z+Kg8RkZLS8JBIKdauXTuioqLo0aMH//3vf9m7dy9r1qzhySef5IcffgDgscceY968ecybN4+dO3cybtw4tm7detFrli1bllGjRjFy5Ejefvttfv31V9atW8cbb7wBQGBgID4+PiQnJ3P48GGys7OBcy+sS0xM5KWXXmLnzp1s3ryZN998k2nTpgEQExNDmTJl6N+/P9u2bePzzz9n6tSpTv6ERORaoqJFpBSzWCx8/vnntGzZkgcffJB69epx3333sXfvXoKCggDo1asXTz/9NKNGjSIyMpJ9+/bxyCOP/OV1n3rqKRISEnj66aepX78+vXr1IjMzEwBPT09efvllXn31VUJCQrjzzjsBeOihh3j99deZP38+DRo0oFWrVsyfP9++RLp8+fJ8+umnbNu2jUaNGjF27FgmTZrkxE9HRK41FkMD0SIiIuIG1GkRERERt6CiRURERNyCihYRERFxCypaRERExC2oaBERERG3oKJFRERE3IKKFhEREXELKlpERETELahoEREREbegokVERETcgooWERERcQsqWkRERMQt/B/WKXM7lT+h1wAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# confusion matrix \n",
"\n",
"draw_confusion_matrix(y_test, y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 121,
"id": "25ec1701-ade5-4419-8b46-8a1bb109cf84",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIQAAAK8CAYAAACeK2TMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gU5frG8e+m90CA0HvvVXpHQIqCFJFjQQWPiseCHbtiQSzYftZj94iIFBUQQQGRIl0QkN5LgFDS+87vj4GFYQMkkGR2s/fnunKRmZ3ZfRK4d8KTd97XYRiGgYiIiIiIiIiI+Aw/uwsQEREREREREZGipYaQiIiIiIiIiIiPUUNIRERERERERMTHqCEkIiIiIiIiIuJj1BASEREREREREfExagiJiIiIiIiIiPgYNYRERERERERERHyMGkIiIiIiIiIiIj5GDSERERERERERER+jhpCIiIiIl3vuuecoVaoUe/bssbsUERER8RJqCImIiBSi9evXc+utt1K9enVCQkKIiIigRYsWTJgwgePHj9tS0+eff47D4WDVqlWF+jq7d+/G4XC4Pvz8/ChZsiQ9evRg7ty55z1vzpw59OvXjzJlyhAcHEzlypUZMWIEmzZtOu85f/zxB9dddx0VK1YkKCiI6Oho2rdvz/vvv09KSkphfHm2OP13t3v3bsv+Z555hmuvvZahQ4eSmZmZ67nPPvssDoejwGpZuHAhDoeDhQsXFthz5qZatWrccsst+Tpn6dKlPPvss5w8edLtsa5du9K1a9cCqU1ERMSbqSEkIiJSSD7++GNatmzJypUrefjhh5kzZw7Tp09n6NChfPDBB4wcOdLuEovEPffcw7Jly/jjjz947bXX2LZtG3379mXRokVuxz7yyCP06dMHp9PJe++9x7x583jmmWdYuXIlLVq0YNq0aW7nPPPMM3Tu3JkDBw4wbtw45s2bx7fffkuPHj149tlnefLJJ4viy7TdBx98QJkyZRgzZozdpRSo6dOn89RTT+XrnKVLl/Lcc8/l2hB67733eO+99wqoOhEREe8VYHcBIiIixdGyZcu466676NmzJzNmzCA4ONj1WM+ePXnwwQeZM2dOkdaUlZVVoCNE8qpKlSq0bdsWgA4dOlC7dm26dOnCJ598QufOnV3HTZo0iVdffZW77rrL8h/2zp07M3z4cLp06cJNN91Es2bNqFGjBgBTpkzh+eefZ+TIkXz88ceWr69Pnz488sgjLFu2rIi+UnsFBAQwa9Ysu8socM2bNy/Q52vQoEGBPp+IiIi30gghERGRQvDSSy/hcDj46KOPLM2g04KCgrjmmmtc206nkwkTJlCvXj2Cg4OJjY3l5ptvZv/+/Zbzznf7zLm3wZy+neerr77iwQcfpGLFigQHB7N9+3bXMSdOnODWW28lJiaG8PBwrr76anbu3On23L/++is9evQgKiqKsLAwOnTowG+//XYJ3xVTq1atADh8+LBl/4svvkjJkiV57bXX3M4JDw/nnXfeITU1lYkTJ7r2P//885QsWZK3334712ZXZGQkvXr1uuRaz9W1a1caNWrEsmXLaN++PaGhoVSrVo3PPvsMgFmzZtGiRQvCwsJo3Lhxrk2/xYsX06NHDyIjIwkLC6N9+/a5NnL+/PNPOnToQEhICBUqVGDs2LFkZWXlWtfkyZNp164d4eHhRERE0KtXL1avXp2nr+ncc3v37s3atWvz8V2x+vHHH2nXrh1hYWFERkbSs2fPXJtyP/zwA02aNCE4OJgaNWrw1ltv5Xpb27n/5p1OJy+88AJ169YlNDSUEiVK0KRJE9566y3AvDXu4YcfBqB69equWxZP39qW2y1jBw8e5LrrriMyMpLo6GiGDRvGn3/+icPh4PPPP3cdd77bzW655RaqVatm2ZeZmckLL7zgynSZMmW49dZbOXr0aN6+kSIiIoVMDSEREZEClpOTw/z582nZsiWVK1fO0zl33XUXjz76KD179uTHH39k3LhxzJkzh/bt2xMfH3/JtYwdO5a9e/fywQcf8NNPPxEbG+t6bOTIkfj5+fHNN9/w5ptvsmLFCrp27Wq5zebrr7+mV69eREVF8cUXX/Ddd98RExND7969L7kptGvXLgDq1Knj2nfo0CE2btxIr169CAsLy/W8du3aERsby7x581znbNiw4YLn5MXp5tmzzz6bp+Pj4uK49dZbGTVqFD/88AONGzfmtttu4/nnn2fs2LE88sgjTJ06lYiICAYOHMjBgwdd5/7+++90796dhIQEPvnkEyZNmkRkZCRXX301kydPdh23adMmevTowcmTJ/n888/54IMPWLt2LS+88IJbPS+99BLDhw+nQYMGfPfdd3z55ZckJibSqVMnNmzYcMGv5dxzv/rqK5KSkujUqdMF52w6n2+++YYBAwYQFRXFpEmT+OSTTzhx4gRdu3Zl8eLFruPmzJnDoEGDKFWqFJMnT2bChAlMmjSJL7744qKvMWHCBJ599lmGDx/OrFmzmDx5MiNHjnT9ux01ahT33HMPANOmTWPZsmUsW7aMFi1a5Pp8aWlpXHnllcydO5eXX36ZKVOmUK5cOYYNG5bvr/80p9PJgAEDGD9+PP/617+YNWsW48ePZ968eXTt2pW0tLRLfm4REZECY4iIiEiBiouLMwDj+uuvz9Px//zzjwEYo0ePtuxfvny5ARiPP/64a1/VqlWNESNGuD1Hly5djC5duri2FyxYYABG586d3Y797LPPDMC49tprLfuXLFliAMYLL7xgGIZhpKSkGDExMcbVV19tOS4nJ8do2rSp0bp16wt+Xbt27TIA45VXXjGysrKM9PR046+//jLatWtnlC9f3ti1a5fr2D///NMAjMcee+yCz9mmTRsjNDQ0X+dczMKFCw1/f3/jueeeu+ixXbp0MQBj1apVrn3Hjh0z/P39jdDQUOPAgQOu/X/99ZcBGG+//bZrX9u2bY3Y2FgjKSnJtS87O9to1KiRUalSJcPpdBqGYRjDhg0zQkNDjbi4OMtx9erVMwDX927v3r1GQECAcffdd1vqTExMNGJjY40hQ4a49j3zzDPG2T/6nT73nnvusZyblJRklCtXzrjuuusu+L04/W9swYIFhmGY/y4qVKhgNG7c2MjJybE8X2xsrNG+fXvXviuuuMKoXLmykZGRYTmuVKlSxrk/np77b75///5Gs2bNLljbq6++avk+ne3crLz//vsGYPzwww+W426//XYDMD777LPznnvaiBEjjKpVq7q2J02aZADG1KlTLcetXLnSAIz33nvvgvWLiIgUBY0QEhERsdmCBQsA3G4Fa926NfXr17+s27MGDx583sduuOEGy3b79u2pWrWqq56lS5dy/PhxRowYQXZ2tuvD6XRy1VVXsXLlyjyt4PXoo48SGBhISEgIzZo1Y8OGDfz0009ut9jkhWEYBT4PUpcuXcjOzubpp5/O0/Hly5enZcuWru2YmBhiY2Np1qwZFSpUcO2vX78+gGsp+JSUFJYvX86QIUOIiIhwHefv789NN93E/v372bJlC2D+m+jRowdly5a1HHfuqJVffvmF7OxsbrvtNsv+yMhIunXrxu+//37er+P0uTfffLPl7zckJIQuXbrke/WwLVu2cPDgQW666Sb8/M78iBkREcHgwYP5888/SU1NJSUlhVWrVjFw4ECCgoIsx1199dUXfZ3WrVuzbt06Ro8ezS+//EJiYmK+6jzXggULiIyMtNzCCfCvf/3rkp9z5syZlChRgquvvtryvW3WrBnlypUr9JXZRERE8kKTSouIiBSw0qVLExYW5ro16mKOHTsGmI2Gc1WoUMHVULgUuT3naeXKlct13+l6Ts/xM2TIkPM+x/HjxwkPD79gDffddx833ngjGRkZ/Pnnnzz55JMMGDCAdevWUapUKcCceBq46Pdsz549rtvw8npOQYuJiXHbFxQU5Lb/dLMjPT0dMOdsMgzjvH/PcObfwrFjx87793O2039H7du3dzv2dPPufE6fe8UVV+T6+NlNnby42L9jp9Pp+h4YhmFpdp2W275zjR07lvDwcL7++ms++OAD/P396dy5M6+88oprfqr81p3b6+b2/c+rw4cPc/LkSUvD62yXcxuoiIhIQVFDSEREpID5+/vTo0cPfv75Z/bv30+lSpUuePzppsihQ4fcjj148CClS5d2bYeEhJCRkeH2HPHx8ZbjTrvQaJq4uLhc99WqVQvA9XzvvPOOa5Wwc+XlP/CVKlVy/Ue9Q4cOlCtXjhtvvJFnnnmGd999FzCbCA0bNmTu3LmkpqbmOifQsmXLOHz4MEOHDnWd07hx4wue40lKliyJn58fhw4dcnvs9DxDp7/npUqVOu/fz9lOHz99+nSqV6+er3pOn/v9999TtWrVfJ2bm7P/HZ/r4MGD+Pn5UbJkSdcor3MnFYfc/02eKyAggAceeIAHHniAkydP8uuvv/L444/Tu3dv9u3bl+9/B6VKlWLFihV5qiUkJISEhAS3/ec2eEqXLk2pUqXOu5JgZGRkvmoUEREpDLplTEREpBCMHTsWwzC4/fbbyczMdHs8KyuLn376CYDu3bsD5gTOZ1u5ciX//PMPPXr0cO2rVq0a69evtxy3detW161G+fG///3Psr106VL27NnjWkWpQ4cOlChRgk2bNtGqVatcP843AuJCbrjhBrp27crHH39sGf30xBNPcOLECR566CG3c1JSUrj33nsJCwtjzJgxrv1PPfUUJ06c4N5778UwDLfzkpOTmTt3br5rLAzh4eG0adOGadOmWSYVdjqdfP3111SqVMk10Xa3bt347bffLE2TnJwcy8TTAL179yYgIIC1a9dSr169XD/O5/S5O3bsOO/fb37UrVuXihUr8s0331j+LlJSUpg6dapr5bHw8HBatWrFjBkzLNlITk5m5syZ+XrNEiVKMGTIEO6++26OHz/O7t27AVwr++Vl8uZu3bqRlJTEjz/+aNn/zTffuB1brVo1tm7damnKHjt2jKVLl1qO69+/P8eOHSMnJyfX72vdunXz9XWKiIgUBo0QEhERKQTt2rXj/fffZ/To0bRs2ZK77rqLhg0bkpWVxdq1a/noo49o1KgRV199NXXr1uXf//4377zzDn5+fvTp04fdu3fz1FNPUblyZUsD5KabbuLGG29k9OjRDB48mD179jBhwgTKlCmT7xpXrVrFqFGjGDp0KPv27eOJJ56gYsWKjB49GjDndHnnnXcYMWIEx48fZ8iQIcTGxnL06FHWrVvH0aNHef/99y/p+/PKK6/Qpk0bxo0bx3//+18Ahg8fzpo1a3jttdfYvXs3t912G2XLlmXLli1MnDiRHTt28M0331CjRg3X8wwdOpSnnnqKcePGsXnzZkaOHEnNmjVJTU1l+fLlfPjhhwwbNuyCS8///vvv9OjRg6effjrP8whdqpdffpmePXvSrVs3HnroIYKCgnjvvffYsGEDkyZNco3oevLJJ/nxxx/p3r07Tz/9NGFhYfzf//2f25xN1apV4/nnn+epp55i165d9O3bl5iYGA4fPszy5csJDw/n+eefz7WW0+c+8cQT7Ny5k6uuuoqSJUty+PBhVqxYQXh4OM8991yevzY/Pz8mTJjADTfcQP/+/bnjjjvIyMjg1Vdf5eTJk4wfP9517PPPP0+/fv3o3bs39913Hzk5Obz66qtERERw/PjxC77O1VdfTaNGjWjVqhVlypRhz549vPnmm1StWpXatWsD0LhxYwDeeustRowYQWBgIHXr1s11ZM7NN9/MxIkTufnmm3nxxRepXbs2s2fP5pdffnE79qabbuLDDz/kxhtv5Pbbb+fYsWNMmDCBqKgoy3HXX389//vf/+jbty/33XcfrVu3JjAwkP3797NgwQIGDBjAtddem+fvrYiISKGwbz5rERGR4u+vv/4yRowYYVSpUsUICgoywsPDjebNmxtPP/20ceTIEddxOTk5xiuvvGLUqVPHCAwMNEqXLm3ceOON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mX++/PKZ+YJAzSAp1nStELHypUzk+ZaxXbt2+dTQKRFPk56Vw9M/bOC7Vftd+94e3pxrmmpZeRERkUtiGDBrFjz0EGzZYu5r3BgmTgQvX1lXRETkYvI0Qmj8+PGUKVMGP7+LH758+XJmzZqV5wLee+89qlevTkhICC1btuSPP/644PEZGRk88cQTVK1aleDgYGrWrMmnn36a59crTpo3b253CVJE9h1Ppd5TcyzNoPkPdlEz6BzKhIiVMiHizpWLHTugd2+4+mqzGVSmDHz4IaxdCz162FukSBHStULEypcykacRQps2baJKlSoMHTqUa665hlatWlHm1G9NsrOz2bRpE4sXL+brr7/m0KFDfPnll3l68cmTJ3P//ffz3nvv0aFDBz788EP69Onjer3cXHfddRw+fJhPPvmEWrVqceTIEbKzs/P45Yp4n51Hk7nqrTON0qaVopl6V3sCfHg1MRERkcsWEAB//AFBQXD//fD44xAdbXdVIiIiRSZP/6P88ssvmT9/Pk6nkxtuuIFy5coRFBREZGQkwcHBNG/enE8//ZRbbrmFzZs306lTpzy9+BtvvMHIkSMZNWoU9evX580336Ry5cq8//77uR4/Z84cfv/9d2bPns2VV15JtWrVaN26Ne3bt8/7V1yMrF271u4SpJBtP5JE99d/JzPbCcCrQ5rww386qhl0HsqEiJUyIXKWjAz48cczuahaFT7/HP75B155Rc0g8Vm6VohY+VIm8jyHUJMmTfjwww/54IMPWL9+Pbt37yYtLY3SpUvTrFmzfM8vlJmZyerVq3nssccs+3v16sXSpUtzPefHH3+kVatWTJgwga+++orw8HCuueYaxo0bR2hoaK7nZGRkkJGR4dpOTEzMV50idolPzqD/O2eWlZ96VztaVo2xsSIREREvZBgwbRo88gjs3EnpZ58989iwYbaVJSIiYrc8N4ROczgcNG3alKZNm17WC8fHx5OTk0PZsmUt+8uWLUtcXFyu5+zcuZPFixcTEhLC9OnTiY+PZ/To0Rw/fvy88wi9/PLLPPfcc277p0yZQlhYGIMGDeK3334jISGB2NhYWrduzcyZMwFo0aIFTqeTv/76C4ABAwawePFijh07RkxMDJ07d2bGjBmA2TALDAxk9erVAPTr149Vq1Zx+PBhoqKi6NWrF99//z0ADRs2JCIiguXLlwPQ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w4aeq0HkEn766SerSxDxKsqEiCPlQsTMnzLRv39/AgICCAgIIDg4mPLly/Pwww/nOWfMb7/9Rvfu3SlSpAjh4eHUq1ePUaNG5Tlny+LFi+nevTvFihUjIiKC2rVr89RTT3Ho0CFPvCyXy8jI4OWXX2bYsGFWl+I2NpuN4cOHU7p0aQoVKkS7du34888/AWNS5osZO3YsNWrUoFChQpQrV44nn3yS9PT0PPd98803CQgI4IknnjBtP/d38N9f7777LmA0pJ5++mmeffZZ17zYS1BDyEedW24+OjzYcye99VaIjYVRo+DPP+HmmzVPkIiIiIiI+IyuXbuSmJjI3r17mTRpEt9//z2DBg0y7TNr1izatm1L2bJlWbx4Mdu2bePxxx/njTfe4Pbbb+fChbonTpxIp06diI+PZ8aMGSQkJPDBBx+QnJzMqFGjPPa6MjMzXXasGTNmEBUVRevWra/qOOcmIPdG77zzDqNHj+b9999nzZo1xMfH07lzZ1JTUy/6nK+++ornnnuOV155ha1bt/Lxxx8zbdo0nn/+eYd916xZw4cffkj9+vUdHktMTDR9ffLJJwQEBHDrrbfa9+nXrx/Lly9n69atrnnBF6GGkA+y2WyczTIaQmHBQe45yalT8PTTMGPG+W3332+sKDZkCPwzq7mIN7nuuuusLkHEqygTIo6UCxEzV2TCZrORlpltydeFzZn8CAsLIz4+nrJly9KlSxf69u3LwoUL7Y+fOXOGBx54gJtuuokPP/yQhg0bUrFiRQYMGMBnn33Gt99+yzf/zKN68OBBBg8ezODBg/nkk09o164dFStWpE2bNkyaNImXX375onWcOnWKBx98kLi4OMLDw6lbty5z584FYPjw4TT811UYY8eOpWLFivb7/fv3p2fPnrz55puULl2a6tWr8/zzz3Pttdc6nKt+/fq88sor9vuffvoptWrVIjw8nJo1azJ+/HjT/lOnTuWmm24ybVuzZg2dO3emePHixMbG0rZtW9avX2/aJyAggA8++ICbb76ZyMhIXn/9dQC+//57mjRpQnh4OJUrV2bEiBFkZ2fbnzd69Gjq1atHZGQk5cqVY9CgQZw+ffqi793VstlsjB07lhdffJFevXpRt25dPvvsM9LS0vj666+JiorK83krV67kuuuu484776RixYp06dKFO+64g7UXLrAEnD59mn79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L/l1MZUqVSI+Pp5FixbZt2VmZrJ06VJatmxJcnJyns9LS0sjMNDcQgkKCsJms2Gz2ejYsSObN2821dC0aVP69evHxo0bHeaI+vjjj2nSpAkNGjTI83xbtmyhUaNGl30vroZvtHHFJPefD4bgACcbQjYbfP+9sXrY4cOwcyec64jmsVSeiK85c+aM1SWIeBVlQsSRciFi5u+ZaNeuHXXq1GHkyJG8//77REZGMnHiRG6//XYefPBBHn30UWJiYvj555955pln6N27N3369AGgXLlyjBkzhkcffZSUlBTuueceKlasyMGDB/n888+JiorKs7HUtm1b2rRpw6233sro0aOpWrUq27ZtIyAggK5du9KuXTv+/vtv3nnnHXr37s38+fP58ccfiYmJyddr6tevH8OHDyczM5MxY8aYHhs+fDiDBw8mJiaGbt26kZGRwdq1azl58iRDhgwB4Prrr2fFihWmuX2qVq3KF198QdOmTUlJSeGZZ5657EgngJdffpkbb7yRcuXKcdtttxEYGMimTZvYvHkzr7/+OlWqVCE7O5v//ve/9OjRg19//ZUPPvjgsse9mkvGAgICeOKJJxg5ciTVqlWjWrVqjBw5koiICO688077qKd77rmHMmXK8OabbwLGpOKjR4+mUaNG9kvGhg0bxk033URQUBDR0dHUrVvXdK7IyEiKFSvmsD0lJYXp06fn+ffjnOXLl9tHrrmLRgj5oHMNobBgJy4X27QJOnWCm282GkGRkcbcQSIFiCuuJRYpSJQJEUfKhYiZMgFDhgzho48+4sCBA4Ax8mfx4sUcOHCANm3aUKNGDUaPHs2LL77I1KlTTfPMDBo0iIULF3Lo0CFuueUWatasyYABA4iJiclzpbJzZsyYQbNmzbjjjjuoXbs2Q4cOJSfHmBqkVq1ajB8/nv/97380aNCA1atXX/JY/3bbbbdx4sQJ0tLS6Nmzp+mxAQMGMGnSJCZPnky9evVo27YtkydPto8QAnjggQeYN2+eaaTMJ598wsmTJ2nUqBF33303gwcPpmTJkpet5frrr2fu3LksWrSIZs2ace211zJ69GgqVKgAQMOGDRk9ejRvv/02devW5auvvrI3YNxp6NChPPHEEwwaNIimTZty6NAhFi5cSHR0tH1epv3795OYmGh/zksvvcRTTz3FSy+9RO3atbn//vu5/vrrmThx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agsJCbF9/PHHtoSEBNsTTzxhi4yMtO3du9dms9lszz33nO3uu++27797925bRESE7cknn7QlJCTYPv74Y1tISIjt22+/teoliLiUs5n4+uuvbcHBwbb//e9/tsTERPvXqVOnrHoJIi7lbCb+7ZVXXrE1aNDAQ9WKuJ+zmUhNTbWVLVvW1rt3b9uff/5pW7p0qa1atWq2AQMGWPUSRFzO2Vx8+umntuDgYNv48eNtu3btsq1YscLWtGlTW/Pmza16CSIulZqaatuwYYNtw4YNNsA2evRo24YNG2z79u2z2Wz+93u2GkJe7H//+5+tQoUKttDQUFvjxo1tS5cutT9277332tq2bWvaf8mSJbZGjRrZQkNDbRUrVrRNmDDBwxWLuJczmWjbtq0NcPi69957PV+4iJs4+3PiQmoISUHkbCa2bt1q69Spk61QoUK2smXL2oYMGWJLS0vzcNUi7uVsLsaNG2erXbu2rVChQrZSpUrZ+vXrZzt48KCHqxZxj8WLF1/ydwR/+z07wGbT2D8REREREREREX+iOYRERERERERERPyMGkIiIiIiIiIiIn5GDSERERERERERET+jhpCIiIiIiIiIiJ9RQ0hERERERERExM+oISQiIiIiIiIi4mfUEBIRERERERER8TNqCImIiIiIiIiI+Bk1hERERMRrTZ48mcKFC1/1cYYPH05cXBwBAQHMnj37qo/nrfbu3UtAQAAbN2685H7t2rXjiSeesN9PS0vj1ltvJSYmhoCAAE6dOnVF57/77rsZOXLkFT33ajz99NMMHjzY4+cVERHxZWoIiYiI+KGAgIBLfvXv39/qEl1m69atjBgxgokTJ5KYmEi3bt2sLsltypUrR2JiInXr1gVgyZIleTZ4Zs6cyWuvvWa//9lnn7F8+XJ+++03EhMTiY2NdfrcmzZt4ocffuCxxx6zb2vXrl2ef7+ys7MdHg8LC6N69eqMHDmSnJwcU/3nvooVK0aHDh349ddfTeceOnQon376KXv27HG6bhEREX+lhpCIiIgfSkxMtH+NHTuWmJgY07b/+7//s7pEl9m1axcAN998M/Hx8YSFhVlckfsEBQURHx9PcHDwJfcrWrQo0dHR9vu7du2iVq1a1K1bl/j4eAICApw+9/vvv89tt91mOi7AAw88YPq7lZiYaKrv3OPbt29n8ODBvPTSS7z33num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JhAdHS26t3jxYqhUqrBz+QMjmUyG5cuXQyqVBo1ZvXo1YmNjsW7dOoyPjyM7OxsOh0PUINxfUqdQKH5x10RERJGFPYSIiIhIxG634+DBg8jPz8emTZsQHx+P169fi8YoFApRc+jPnz8HPfL7zZs3OH36NG7evAmNRoPDhw+HbbYMAOvXr8ejR49E16a+VqvVePnyJVQqVdDPdH17Qu2xuLgYWVlZSEpKgkwmw4cPH0T7AyDa448Npv1aWlrQ2tqK7u5uvH37VvQo93BevHiBsbEx0R4XLlyIlStXQqVSITo6Gg8fPgzc93g8ePr0KRITE0Xr0+v1uH37NsxmM27cuBFyLn8443+M+2zMmzcPe/bsQXV1Nfr7++F2u/HgwYOQY5OTkwEATqdz1vP4A6NVq1aFDIOmEgQBXq8XdXV1ousOhwPz589HUlLSrNdAREQUiRgIERERkYhKpUJXVxd6e3vhcrlw4sQJvH//XjQmNTUVjY2NsNvtcDgcOHLkiOif+e/fv0MQBKSnp+Po0aOor6+Hw+FATU1N2HmLi4vR0dGB6upqvHr1CrW1taJyMQCoqKiA1WqF0WjEwMAAXC4XWlpaUF5ePus9NjY2wuVy4fHjx8jLywuUHAGT5UcajQYmkwlOpxM9PT1Bc7x79w5FRUW4dOkSduzYgYaGBly8eDEoxJpqYmICBQUFgcbQlZWVMBgMkEgkkMvlKCoqQmlpKTo6OuB0OlFYWIjR0VEUFBQEvoO7d+9icHAQAwMDsNlsorDoR0qlElFRUbDZbBgeHsaXL19+6vux2Wy4evUqnj9/jqGhIVitVni9XiQkJIQcr1AooFarRUHWv0UikaCkpAQmk0lUHma327Fz507R75GIiIjCYyBEREREIufPn4darUZGRgZ2796NuLg46HQ60ZiysjJotVrs378fWVlZ0Ol0WLNmTeD+hQsX4Ha7AydX4uLiYLFYUF5eHvKkDQBoNBpYLBZcu3YNycnJ6OzsDAphMjIyYLPZ0NXVha1bt0Kj0eDy5ctQKpWz2uOtW7fw8eNHbN68GYIgBB7zPnWMx+PBli1bcOrUKdETz3w+H/R6PbZt2waDwQBgsu+OwWBAfn7+tMFLWloa1q5dC61Wi9zcXBw4cABGozFw32QyIScnB4IgQK1WY3BwEPfu3cOSJUsATJ76KSsrw8aNG6HVaiGVStHc3BxyrhUrVqCqqgpnz57FsmXLAmudSWxsLFpbW5GamorExERcv34dTU1N056+OX78OO7cufNTnz9Xx44dg8fjQW1tbeBaU1MTCgsL/8j8RERE/wdRvp8p2CciIiKiOdPr9fj06RPa2tr+9lJ+u/HxcSQkJKC5uRkpKSl/dO729naUlpaiv7//l3s4ERERRRqeECIiIiKiOYuJiYHVahX1YvpTvn79ivr6eoZBREREs8C/mkRERET0W+zateuvzJubm/tX5iUiIvovY8kYEREREREREVGEYckYEREREREREVGEYSBERERERERERBRhGAgREREREREREUUYBkJERERERERERBGGgRARERERERERUYRhIEREREREREREFGEYCBERERERERERRRgGQkREREREREREEeYf/+frUaGCeeYAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 1400x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ROC curve\n",
"\n",
"# Calcul des taux de faux positifs (FPR) et de vrais positifs (TPR)\n",
"y_pred_prob = logit_grid.predict_proba(X_test)[:, 1]\n",
"\n",
"fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob, pos_label=1)\n",
"\n",
"# Calcul de l'aire sous la courbe ROC (AUC)\n",
"roc_auc = auc(fpr, tpr)\n",
"\n",
"plt.figure(figsize = (14, 8))\n",
"plt.plot(fpr, tpr, label=\"ROC curve(area = %0.3f)\" % roc_auc)\n",
"plt.plot([0, 1], [0, 1], color=\"red\",label=\"Random Baseline\", linestyle=\"--\")\n",
"plt.grid(color='gray', linestyle='--', linewidth=0.5)\n",
"plt.xlabel('Taux de faux positifs (FPR)')\n",
"plt.ylabel('Taux de vrais positifs (TPR)')\n",
"plt.title('Courbe ROC : modèle logistique')\n",
"plt.legend(loc=\"lower right\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 123,
"id": "3b5c9485-511b-4f6b-b667-154f4f519682",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHFCAYAAAAOmtghAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABtJUlEQVR4nO3dd1xV9f8H8Nflwr1skClbcOJWSAVyDxy5stS0nFlm5tYyf2WaZVmaaakNd1bmLMtU3HuAWxAXCiKIgAzZ3Pv5/YHcb1dA78V7uXB5PR8PHno/95xzX/cI3LfnfIZECCFAREREZCRMDB2AiIiISJdY3BAREZFRYXFDRERERoXFDRERERkVFjdERERkVFjcEBERkVFhcUNERERGhcUNERERGRUWN0RERGRUWNwQVUMXL17EyJEj4evrC3Nzc1hbW6Nly5ZYsGABUlNTDZJpzZo1kEgkCA8PN8jrHzx4EBKJBAcPHtTJ8W7fvg2JRIKvv/76qdvVqlULI0aMUGs7d+4c2rdvDzs7O0gkEixevBg7d+7EJ598opNsRMbO1NABiKhi/fTTTxg3bhzq16+P6dOno2HDhigoKEB4eDhWrFiBEydOYNu2bYaOWW1s27YNtra2am2jRo1CVlYWfv/9d9SoUQO1atXCvHnz8P3337PAIdIAixuiauTEiRN455130LVrV2zfvh1yuVz1XNeuXTF16lTs2rWrQjMVFBRAIpFU6GtWJi1atCjRdvnyZYwZMwY9evQwQCKiqo+3pYiqkc8//xwSiQQ//vijWmFTTCaToU+fPqrHSqUSCxYsQIMGDSCXy+Hi4oJhw4bh7t27avuVdmsFADp06IAOHTqoHhff+lm/fj2mTp0KDw8PyOVy3LhxQ7XNw4cPMXLkSDg4OMDKygq9e/fGrVu3Shx779696Ny5M2xtbWFpaYmQkBDs27dPo/Nw9epVdO/eHZaWlnBycsLYsWORmZlZ6rbP8zqa+O+5K741V1hYiOXLl0MikUAikWDEiBH4/vvvAUDVJpFIcPv2bZ3lIDImLG6IqgmFQoH9+/cjICAAXl5eGu3zzjvv4P3330fXrl3x119/4dNPP8WuXbsQHByM5OTkcmeZOXMmYmNjsWLFCuzYsQMuLi6q50aPHg0TExP8+uuvWLx4MU6fPo0OHTogLS1Ntc0vv/yCbt26wdbWFmvXrsUff/wBBwcHhIaGPrPwuH//Ptq3b4/Lly9j2bJlWL9+PR49eoTx48eX2PZ5Xqc8evXqhRMnTgAAXnnlFZw4cQInTpzARx99hFdeeQUAVG0nTpyAm5ubzjMQGQVBRNVCYmKiACAGDx6s0fZRUVECgBg3bpxa+6lTpwQA8eGHH6rafHx8xPDhw0sco3379qJ9+/aqxwcOHBAARLt27Upsu3r1agFA9O/fX6392LFjAoCYN2+eEEKIrKws4eDgIHr37q22nUKhEM2aNROtWrV66vt6//33hUQiEefPn1dr79q1qwAgDhw4oJPXiYmJEQDEV1999dTtSjt3AMS7776r1vbuu+8K/som0gyv3BBRqQ4cOAAAJW43tWrVCv7+/s915WLAgAFlPjd06FC1x8HBwfDx8VHlOX78OFJTUzF8+HAUFhaqvpRKJbp3744zZ84gKyurzOMfOHAAjRo1QrNmzdTahwwZovb4eV+HiAyHHYqJqgknJydYWloiJiZGo+1TUlIAoNRbH+7u7rhz5065szztdkrNmjVLbSvOc//+fQBQ3aYpTWpqKqysrEp9LiUlBb6+vs983ed9HSIyHBY3RNWEVCpF586d8e+//+Lu3bvw9PR86vaOjo4AgISEhBLb3rt3D05OTqrH5ubmyMvLK3GM5ORkte2KPW10VGJiYqltderUAQDV8ZYuXYo2bdqUegxXV9cyj+/o6Fjma/zX874OERkOb0sRVSMzZ86EEAJjxoxBfn5+iecLCgqwY8cOAECnTp0AFHWq/a8zZ84gKioKnTt3VrXVqlULFy9eVNvu2rVriI6O1jrjhg0b1B4fP34cd+7cUY26CgkJgb29PSIjIxEYGFjql0wmK/P4HTt2xJUrV3DhwgW19l9//VXt8fO+jq4Vj27LycmpsNckqqp45YaoGgkKCsLy5csxbtw4BAQE4J133kGjRo1QUFCAc+fO4ccff0Tjxo3Ru3dv1K9fH2+99RaWLl0KExMT9OjRA7dv38ZHH30ELy8vTJ48WXXcN954A6+//jrGjRuHAQMG4M6dO1iwYAGcnZ21zhgeHo4333wTr776KuLi4jBr1ix4eHhg3LhxAABra2ssXboUw4cPR2pqKl555RW4uLjgwYMHuHDhAh48eIDly5eXefxJkyZh1apV6NWrF+bNmwdXV1ds2LABV69eVdvueV+n2KVLl7B58+YS7S+88AJ8fHw0Pi9NmjQBAHz55Zfo0aMHpFIpmjZtWqEFFlGVYegezURU8c6fPy+GDx8uvL29hUwmE1ZWVqJFixbi448/FklJSartFAqF+PLLL0W9evWEmZmZcHJyEq+//rqIi4tTO55SqRQLFiwQfn5+wtzcXAQGBor9+/eXOVpq06ZNJTIVj5bas2ePeOONN4S9vb2wsLAQPXv2FNevXy+x/aFDh0SvXr2Eg4ODMDMzEx4eHqJXr16lHvtJkZGRomvXrsLc3Fw4ODiI0aNHiz///FNttNTzvk7xaKmyvlavXi2E0Hy0VF5ennjzzTeFs7OzkEgkAoCIiYl55nslqo4kQghhmLKKiIiISPfY54aIiIiMCosbIiIiMiosboiIiMiosLghIiIio8LihoiIiIwKixsiIiIyKtVuEj+lUol79+7BxsbmqVPAExERUeUhhEBmZibc3d1hYvL0azPVrri5d+8evLy8DB2DiIiIyiEuLu6Za+NVu+LGxsYGQNHJsbW1NXAaIiIi0kRGRga8vLxUn+NPU+2Km+JbUba2tixuiIiIqhhNupSwQzEREREZFRY3REREZFRY3BAREZFRqXZ9bjSlUChQUFBg6BhUhZiZmUEqlRo6BhFRtcfi5glCCCQmJiItLc3QUagKsre3R82aNTmHEhGRAbG4eUJxYePi4gJLS0t+SJFGhBDIzs5GUlISAMDNzc3AiYiIqi8WN/+hUChUhY2jo6Oh41AVY2FhAQBISkqCi4sLb1ERERkIOxT/R3EfG0tLSwMnoaqq+HuH/bWIiAyHxU0peCuKyovfO0REhsfihoiIiIyKQYubw4cPo3fv3nB3d4dEIsH27dufuc+hQ4cQEBAAc3Nz+Pn5YcWKFfoPShrR9N/weR08eBASieS5RrR98sknaN68uerxiBEj0K9fP9VjIQTeeustODg4QCKR4Pz58+V+LSIiqlgGLW6ysrLQrFkzfPfddxptHxMTg549e6Jt27Y4d+4cPvzwQ0yYMAFbtmzRc9KqITExEe+99x78/Pwgl8vh5eWF3r17Y9++fYaOVul9++23WLNmjerxrl27sGbNGvz9999ISEhA48aNK6x4IyKi52PQ0VI9evRAjx49NN5+xYoV8Pb2xuLFiwEA/v7+CA8Px9dff40BAwboKWXVcPv2bYSEhMDe3h4LFixA06ZNUVBQgN27d+Pdd9/F1atX9fba+fn5kMlkejt+RbCzs1N7fPPmTbi5uSE4ONhAiYiIqh6FUuBUTApaeteAuZnhRoxWqT43J06cQLdu3dTaQkNDER4eXubolLy8PGRkZKh9GaNx48ZBIpHg9OnTeOWVV1CvXj00atQIU6ZMwcmTJ1XbxcbGom/fvrC2toatrS0GDhyI+/fvq55/8vYMAEyaNAkdOnRQPe7QoQPGjx+PKVOmwMnJCV27dlU9l5CQgB49esDCwgK+vr7YtGmT2rHi4+MxaNAg1KhRA46Ojujbty9u37791Pe2c+dO1KtXDxYWFujYsWOp2x8/fhzt2rWDhYUFvLy8MGHCBGRlZT37xJXyvkeMGIH33nsPsbGxkEgkqFWrFmrVqgUA6N+/v6qNiMjY5RcqkfIoD/FpObiRlImLd9MQcechTt5KwdHrydh/9T52XLiHP8LjMGXjedT+cCeG/HQKLeaGoVChNFjuKjXPTWJiIlxdXdXaXF1dUVhYiOTk5FInTps/fz7mzJlT7tcUQiCnQFHu/Z+HhZlUo9E3qamp2LVrFz777DNYWVmVeN7e3h5A0Xvp168frKyscOjQIRQWFmLcuHEYNGgQDh48qFW2tWvX4p133sGxY8cghFC1f/TRR/jiiy/w7bffYv369XjttdfQuHFj+Pv7Izs7Gx07dkTbtm1x+PBhmJqaYt68eejevTsuXrxY6tWfuLg4vPzyyxg7dizeeecdhIeHY+rUqWrbXLp0CaGhofj000+xcuVKPHjwAOPHj8f48eOxevVqrd4XUHSLqnbt2vjxxx9x5swZ1Xw1Li4uWL16Nbp37845bIioUsnILUBuvgL5CiXyCpXIefz3gsKix5m5hShUKlGoEEV/KgUUSoHsfAWy8wqRnlOA5Ef5uJuWg7TsfDzKLURmbiHyy1mg9G3uDlOp4a6fVKniBig51Lb4g7WsImDmzJmYMmWK6nFGRga8vLw0fr2cAgUafry7HEmfX+TcUFjKnv1PdOPGDQgh0KBBg6dut3fvXly8eBExMTGqc7B+/Xo0atQIZ86cwQsvvKBxtjp16mDBggUl2l999VW8+eabAIBPP/0UYWFhWLp0KZYtW4bff/8dJiYm+Pnnn1X/XqtXr4a9vT0OHjxY4qocACxfvhx+fn745ptvIJFIUL9+fVy6dAlffvmlapuvvvoKQ4YMwaRJkwAAdevWxZIlS9C+fXssX74c5ubmGr8voOgWlY2NDaRSKWrWrKn2XPHyCkRE+vYwKx/Jj/JQoCgqRAqUSuQVKPEwOx/Z+QrkFCiQkJaDk7dScDY2Ta9ZZKYmMDc1gbXcFKZSE5hJJTCTmsBMagIruRRyUylszE0R2qgmujeuCTMDFjZAFStuatasicTERLW2pKQkmJqaljmjsFwuh1wur4h4BvOsAq9YVFQUvLy81Iq7hg0bwt7eHlFRUVoVN4GBgaW2BwUFlXhcPNIoIiICN27cgI2Njdo2ubm5uHnzZpmZ27Rpo/bennyN4uNu2LBB1SaEgFKpRExMDPz9/TV+X0RUtQkhUHwxWeB/vx8FivqD5CuUUCiE6spFoVIJhVIgr7DoTyEAZfE+j/8u8PhP8fj4AJTK/7VDAEoBFCqVqkJEKdT/LFQK5BYokJOvQIFCiXyFQH6hEll5hcjOVyAztwDpOUVf+Yqi9vsZeVq9d4kEkElNIDM1gaVMCplpUfEhk5rASm4KCzMppCYSmJpIiv6USmBuKoW1uSms5aZwtJbDw94CzjYyWMpMYWthBmuZKazNTSE1qVpzeFWp4iYoKAg7duxQa9uzZw8CAwNhZmaml9e0MJMicm6oXo6tyWtrom7dupBIJIiKiirRX+a/hBClFkD/bTcxMVG7zQSUPttuabe/ylJ8bKVSiYCAALUipJizs3OZmZ9FqVTi7bffxoQJE0o85+3trXFOInp+hQol7mfm4dStFJyOScXNB48Qk5yFAkVxwVBUFOCJAqT4J72oVhD/+ft/txX/a/vPfhr8mqjSnG3kMDORQCqVwMzEBNbmpqhhKYO5mQmcbeTwsLdEh/rOaFDThhOJPmbQ4ubRo0e4ceOG6nFMTAzOnz8PBwcHeHt7Y+bMmYiPj8e6desAAGPHjsV3332HKVOmYMyYMThx4gRWrlyJ3377TW8ZJRKJRreGDMnBwQGhoaH4/vvvMWHChBKFR1paGuzt7dGwYUPExsYiLi5OdfUmMjIS6enpqqsbzs7OuHz5str+58+f17h4PHnyJIYNG6b2uEWLFgCAli1bYuPGjXBxcYGtra1Gx2vYsGGJ4df/7SBdfNwrV66gTp06Gh2zvMzMzKBQGKb/FVFlIYTAzQdZiLiTitsp2YhNyUZSZi4S0nPxMCsfWflV52dEdQXDRAKZqQmkJiaQSAATCSCBpOhPiQQSCR63SyDBf9rwuO3xcyaS4uNIIJVIYGICSE2K2k1NJDCVmsDG3BTyx1dUTE1MYC2XwlJedOXEzsIMthZmMDc1gdxMCgszKWo7Wxm070pVZdBP7fDwcHTs2FH1uLhvzPDhw7FmzRokJCQgNjZW9byvry927tyJyZMn4/vvv4e7uzuWLFlS7YeBA8CyZcsQHByMVq1aYe7cuWjatCkKCwsRFhaG5cuXIyoqCl26dEHTpk0xdOhQLF68WNWhuH379qrbTJ06dcJXX32FdevWISgoCL/88gsuX76sKlCeZdOmTQgMDMSLL76IDRs24PTp01i5ciUAYOjQofjqq6/Qt29fzJ07F56enoiNjcXWrVsxffp0eHp6ljje2LFjsXDhQkyZMgVvv/02IiIi1OajAYD3338fbdq0wbvvvosxY8bAysoKUVFRqv4+ulKrVi3s27cPISEhkMvlqFGjhs6OTVSZxaZkY9eVBETceYjzcWnPvF1iIgHqudqgjZ8jmnvZo46LNczNpCi+qFBcIPzv70XFBB7/Xf1PiWqbou3/V1gUH6C47VnHlkolkElNYGoigUkVu81C2jFocdOhQ4en3nZ48kMMANq3b4+zZ8/qMVXV5Ovri7Nnz+Kzzz7D1KlTkZCQAGdnZwQEBGD58uUA/jeD8HvvvYd27drBxMQE3bt3VysAQkND8dFHH2HGjBnIzc3FqFGjMGzYMFy6dEmjHHPmzMHvv/+OcePGoWbNmtiwYQMaNmwIoGhRycOHD+P999/Hyy+/jMzMTHh4eKBz585lXsnx9vbGli1bMHnyZCxbtgytWrXC559/jlGjRqm2adq0KQ4dOoRZs2ahbdu2EEKgdu3aGDRoUHlPZ6mKi6yffvoJHh4ezxzCTlRVZeUV4nxcGk7FpGL35URE389Ue14mNUFzb3vUdbFGbWdrOFrL4GFvASdrueqWSVXro0HGRSI06dRgRDIyMmBnZ4f09PQSH6i5ubmIiYmBr6+v1iNsiAB+D1HVIERRx9qcfAXScwpwKzkLB64m4XRMKu5n5OJhtno/O4kEeMHHAe3rO6Oldw0097KHhYzTIVDFetrn95Mqd2cSIiLSWHZ+IWKSsxCXmo2Y5Gxk5hbgYXY+7qXlIiO3QFXMpDzKf+b8JU7WMoTUcUJrX0eENnKFo7Vxjzol48LihoioilIqBS7Fp+Ng9AMcvJaEC3FpUGp5Ld7CTAo7CzO84OuAbg1dUdfVGi425nCwqtpLqlD1xuKGiKiKUCgFzsU+xNEbyQi/XdS591Feodo2tuam8Ha0hFcNS7jamsPe0gyOVjI425jDSi6FjXnRYztLM1iYSQ0+2RqRPrC4ISKqpIQQiEvNwY6L93A+Lg2nY1KRnqPeH8bCTIqQOk5oX98ZHeo5w7OGBec6oWqPxU0pqlkfa9Ihfu9QeeUWKHA5Ph0HopMQl5qDq4kZiH+YU2LeGBu5KdrXd0ZrXwc087JHg5q2kJny6gvRf7G4+Y/iieqys7NhYWFh4DRUFWVnZwOA3mbMJuOSmVuAw9eSceZ2KraevYuM3MIS25hIgJbeNdDJ3wUv1HJAM097FjNEz8Di5j+kUins7e2RlJQEoGheFl7eJU0IIZCdnY2kpCTY29tz1XAq1e3kLOyNuo+bDx7hcnwGrtxLV+sAXMPSDAE+NRBYywF1nK3h62wFD3sLmGu4FAsRFWFx84TiFZ+LCxwibXDVcPovhVLgTkoWTt5Kxf6r97E3quTvFS8HC3Ss74IAnxro2cSNHXyJdIDFzRMkEgnc3Nzg4uJS6oKRRGUxMzPjFZtqLvlRHo7dSEZkQgbO3nmIi3fTkVeoPp9MGz8HtPCugbou1gj0cYC3o6WB0hIZLxY3ZZBKpfygIqJnikvNxr+XE3Do2gOcjklVrX5dzNREguZe9giu7YheTd1Rv6aNgZISVR8sboiItJRfqMSf5+Ox7Vw8jt9MUXvO380WLbzt0dzTHs0eLxrJdZaIKhaLGyKiZ3iYlY89kYkIi7yPqIRMxKflqD3fytcBXf1d0a6eM6/MEFUCLG6IiJ6QmVuAPVfu41pSJs7FpuHsnYcofGJdA2cbOYa29saAlp7wcmC/GaLKhMUNERGA9OwCXLibhgPRSfjjTFyJyfP83WzRqYEzgms7oZaTFVxt5DDlyCaiSonFDRFVW4UKJQ5de4AD0UnYFH5XbWSTh70FOjVwQQM3GzTztEcjd1vOe0VURbC4IaJqJy41GxvPxGHbuXi1/jMuNnK84OuAfs090LmBC0zYEZioSmJxQ0TVglIpcPj6A/xy8o7aZHo1LM3QsYEL+jb3QLu6Trw6Q2QEWNwQkVHLLVDgr/P38P3BG7iTkq1qD67tiFcCPNGjsRssZJzTisiYsLghIqOkVAocv5mC97dcVN16spJJ0ae5O0YE+3LINpERY3FDREblYVY+fj8Th78v3sOVexkAivrSDA+uheHBtWAt5689ImPHn3IiMho7LyXggy0XkZFbCKBo6YPBrbwwo3sD2JqbGTgdEVUUFjdEVOUVKJSY/dcV/HoqFgDg52yFYW180LOpG1xszA2cjogqGosbIqrSHmTm4d1fz+J0TCoAYFiQDz5+qSEn2COqxljcEFGVFZWQgTfXhiM+LQcyqQm+GdQcvZq6GToWERkYixsiqnKy8gqx9sRtfLf/BrLzFXC3M8fiwS3QytfB0NGIqBJgcUNEVcqdlCyMXhuOG0mPAADNvezx47AA9q0hIhUWN0RUZZyLfYgx68KR/CgfljIpZvXyx6BAL/avISI1LG6IqNLLLVDg+wM3sOzgTSiUAr5OVvhpWADquHAiPiIqicUNEVVqadn5GL02HBF3HgIAOtZ3xrevteC8NURUJhY3RFRpXbybhrHrI3AvPRc25qaY27cR+jX34OKWRPRULG6IqFL6/XQs/m/7ZRQqBdztzPHDG4Fo4mln6FhEVAWUu7jJz89HTEwMateuDVNT1khEpBuZuQWYufUS/r6YAADoUN8ZC19tBkdruYGTEVFVofUQg+zsbIwePRqWlpZo1KgRYmOLpjufMGECvvjiC50HJKLqIy41G32/P6YqbEaG1MKq4S+wsCEirWhd3MycORMXLlzAwYMHYW7+v3klunTpgo0bN+o0HBFVHw+z8vHm2nDcepAFFxs5Nr7VBrN7N4KJCfvXEJF2tL6ftH37dmzcuBFt2rRR69TXsGFD3Lx5U6fhiKh6yMwtwOsrTyH6fiacrOXYNDYIPo5Who5FRFWU1lduHjx4ABcXlxLtWVlZHMFAROXywZZLuHIvAzbmpvjlzVYsbIjouWhd3Lzwwgv4559/VI+LC5qffvoJQUFBuktGRNXCrssJ+OdSAqQmEqwc/gIa1LQ1dCQiquK0vi01f/58dO/eHZGRkSgsLMS3336LK1eu4MSJEzh06JA+MhKRETofl4a5O67gbGwaAKBvc3cufElEOqH1lZvg4GAcO3YM2dnZqF27Nvbs2QNXV1ecOHECAQEB+shIREbkfkYuPtx2Cf2XHcPZ2DRITSR4NcATc/s2NnQ0IjISEiGEMHSIipSRkQE7Ozukp6fD1paXv4kqSm6BAiuPxmDZgRvIylcAALo3qolZvfzh5WBp4HREVNlp8/mt0W2pjIwMjV+cBQMRFVMoBaISMvDn+Xj8EX4X6TkFAIDmXvaY1KUu2tdz5kAEItI5jYobe3v7Z/4CEkJAIpFAoVDoJBgRVU15hQrsupyIEzdTsDcqCcmP8lTPudjIMaVrPbwa6AUp568hIj3RqLg5cOCAvnMQURV3NTEDn++8imM3kqFQ/u9ut0xqgvb1ndG3uTu6NawJmanWXf2IiLSiUXHTvn17fecgoirq+v1MfH/gBv68cA/FPficbeTo4u+K9vWc0aG+M8zNpIYNSUTVSrlWvNy7dy9+/vlnxMTE4NSpUwCAVatWoV69enjxxRd1GpCIKqeE9Bx8tP0y9l1NUhU1Heo744MeDVDf1YZ9aYjIYLS+Pvz777+jb9++sLOzQ3h4uKr90aNH+Pzzz3UajogqHyEEfj8di26LDmNvVFFh08XfBZvGBmHNyFZoUNOWhQ0RGZTGQ8EfPXoEa2trNGvWDNOnT8frr78OExMTKJVKAMD58+fRvXt3JCYm6jXw8+JQcKLyuxCXho//uoILcWkAgMYetvi8fxM09bQ3aC4iMn46Hwp+8eJFDB8+HOfOncP169fRtm1bAFD735mNjQ3S0tLKn5qIKq1ChRILw65h+cGixXFNJMCEznUxrkMddhAmokrnmcXNv//+i3feeQd//PEHAMDNzQ03b96Ej48P/nvR59ChQ/Dz89NfUiKqcAqlwI4L97B47zXcTskGULRMwvTQ+vCswYn3iKhyemZxk5KSgr1796JOnToAgLfffhuTJk3CqlWrIJFIEBsbi71792LGjBn45JNP9J2XiCqAQilwKiYFC3ZF4/zjW1D2lmaY06cR+jb3MGw4IqJneGZx8/rrr6s9njFjBtLT09GuXTsIIeDr6wuZTIZp06Zh/PjxegtKRPolhEBcag6O30zG2hN3EJVQNDO5lUyKESG1MDLEF07WcgOnJCJ6tnKvLZWdnY3IyEgolUo0bNgQ1tbWus6mF+xQTPQ/SqVAZEIGIu48xMYzcYhM+N9SKzKpCV5q6obJXetx7SciMjiddygujaWlJQIDA8u7OxEZUGZuAX49FYvVx24jMSNX7bnmXvboUN8ZQ1p7w8XG3EAJiYjKT6Pi5uWXX9b4gFu3bi13GCLSv/1X72PapotIzcoHAFjKpGjuZY8X6zphQEtPuNqyoCGiqk2j4sbOzk71dyEEtm3bBjs7O9WVm4iICKSlpWlVBBFRxbp2PxOf/h2JI9eTAQAOVjLMCK2P/i09IDfl8ghEZDw0mqBi9erVqi9XV1cMHDgQMTEx2Lp1K7Zu3Ypbt25h8ODBcHJy0jrAsmXL4OvrC3NzcwQEBODIkSNP3X7Dhg1o1qwZLC0t4ebmhpEjRyIlJUXr1yWqTv69lID+3x/DkevJMJEAr7XyRtjkdhjcypuFDREZHa07FDs7O+Po0aOoX7++Wnt0dDSCg4O1KjQ2btyIN954A8uWLUNISAh++OEH/Pzzz4iMjIS3t3eJ7Y8ePYr27dvjm2++Qe/evREfH4+xY8eibt262LZtm0avyQ7FVJ3kFSrwyV9X8NvpOABAa18HfDmgKWo5WRk4GRGRdrT5/NZ6atHCwkJERUWVaI+KilItxaCpRYsWYfTo0XjzzTfh7++PxYsXw8vLC8uXLy91+5MnT6JWrVqYMGECfH198eKLL+Ltt99WW+OKiIo8zMrHwB9OqgqbwS94Ye2oVixsiMjoaT1aauTIkRg1ahRu3LiBNm3aACgqOr744guMHDlS4+Pk5+cjIiICH3zwgVp7t27dcPz48VL3CQ4OxqxZs7Bz50706NEDSUlJ2Lx5M3r16lXm6+Tl5SEvL0/1OCMjo8xtiYxF5L0MvPvrWcQkZ8HCTIpvBzdHt0Y1DR2LiKhCaF3cfP3116hZsya++eYbJCQkAChakmHGjBmYOnWqxsdJTk6GQqGAq6urWrurq2uZi28GBwdjw4YNGDRoEHJzc1FYWIg+ffpg6dKlZb7O/PnzMWfOHI1zEVV1canZeHPtGdxLz4WLjRyrRryAxh52z96RiMhIaH1bysTEBDNmzEB8fDzS0tKQlpaG+Ph4zJgxA1Kp9h0T/7v4JlA0GuvJtmKRkZGYMGECPv74Y0RERGDXrl2IiYnB2LFjyzz+zJkzkZ6ervqKi4vTOiNRVbH7SiJ6fnsE99Jz4VnDAjvee5GFDRFVO+WexO/BgweIjo6GRCJB/fr1tR4p5eTkBKlUWuIqTVJSUomrOcXmz5+PkJAQTJ8+HQDQtGlTWFlZoW3btpg3bx7c3NxK7COXyyGXc8p4Mm5CCPx4+Bbm/3sVANDI3RY/vBHAOWuIqFrS+spNVlYWRo0aBTc3N7Rr1w5t27aFm5sbRo8ejezsbI2PI5PJEBAQgLCwMLX2sLAwBAcHl7pPdnY2TEzUIxdfLSrnKhJEVV5sSjZGrw1XFTa9mrph09ggrtpNRNWW1sXNlClTcOjQIezYsUN1W+rPP//EoUOHtOpzU3ysn3/+GatWrUJUVBQmT56M2NhY1W2mmTNnYtiwYarte/fuja1bt2L58uW4desWjh07hgkTJqBVq1Zwd3fX9q0QVWl3UrIweeN5tP/6APZfTYKpiQTTQ+vju9dawFJW7ouyRERVnta/Abds2YLNmzejQ4cOqraePXvCwsICAwcOLHMYd2kGDRqElJQUzJ07FwkJCWjcuDF27twJHx8fAEBCQgJiY2NV248YMQKZmZn47rvvMHXqVNjb26NTp0748ssvtX0bRFXWw6x8LNl/HRtOxiJfUTT9QnBtR3zQowGaetobNhwRUSWg9SR+lpaWiIiIgL+/v1r7lStX0KpVK2RlZek0oK5xEj+qyiLuPMSoNWeQnlMAAGjl64D/6+XPooaIjJ5eJ/ELCgrC7NmzkZv7v5WEc3JyMGfOHAQFBWmflog0cjA6Ca/9dBLpOQXwsLfA90NaYuNbbVjYEBE9QevbUt9++y26d+8OT09PNGvWDBKJBOfPn4e5uTl2796tj4xE1d7VxAy89+s55BcqEVLHET8NC2S/GiKiMmj927Fx48a4fv06fvnlF1y9ehVCCAwePBhDhw6FhYWFPjISVWvn49Iwas0ZZOYVIsCnBlYOfwHmZlzskoioLOX6r5+FhQXGjBmj6yxE9B9xqdn47J8o7LpSNBdUfVcb/DQskIUNEdEzlKu4iY+Px7Fjx5CUlFRiscwJEyboJBhRdZWalY9VR2Ow9sRtZOYWAgC6NXTFp/0aw8FKZuB0RESVn9bFzerVqzF27FjIZDI4OjqqLZUgkUhY3BA9hxtJmRi28jTupRd12G/uZY+5fRux0zARkRa0Hgru5eWFsWPHYubMmSVmC64KOBScKiMhBP66cA8f/3kF6TkF8KxhgWnd6uOlpm4wlVa9nzMiIl3T5vNb6ys32dnZGDx4cJUsbIgqo1sPHuH/tl/G8ZspAIr61qx/sxVcbLguFBFReWhdoYwePRqbNm3SRxaiamfPlUT0+e4Yjt9MgUxqgrHta+Ov90JY2BARPQetb0spFAq89NJLyMnJQZMmTWBmZqb2/KJFi3QaUNd4W4oqg+z8Qny+Mwq/nCxaXqSeqzVWvB4AP2drAycjIqqc9Hpb6vPPP8fu3btRv359ACjRoZiIyiaEwG+n47Bk33UkZhR1Gh4W5INZvfwhN+UQbyIiXdC6uFm0aBFWrVqFESNG6CEOkfGKS83G1E0XcDomFQBQw9IMn/RphL7NPQycjIjIuGhd3MjlcoSEhOgjC5HR+udiAt7fchGP8gohk5pgfKc6GNPWDxYyXq0hItI1rTsUT5w4EUuXLtVHFiKj9OPhm3j317N49Hj5hN2T22FC57osbIiI9ETrKzenT5/G/v378ffff6NRo0YlOhRv3bpVZ+GIqrotEXcx/9+rAIAxbX0xLbQ++9YQEemZ1sWNvb09Xn75ZX1kITIquy4nYMaWixACeK2VFz7s6c9O90REFaBcyy8Q0dNF3EnFe7+dg0Ip0KNxTczr14SFDRFRBeE0w0Q6Fn47FcNWnkaBQqCLvyuWvNYCUhMWNkREFaVcq4ITUen+PB+P6ZsvIr9QiUbutvj61aYw49pQREQVisUNkY58f+AGvtodDQDo3MAFS4e0gKWMP2JERBWNv3mJdGDFoZuqwmZEcC182NMfMlNesSEiMgQWN0TPIa9QgQ+2XMK2c/EAgLfb+WFmT38DpyIiqt60/q/lhAkTsGTJkhLt3333HSZNmqSLTERVwo2kTPReehTbzsVDIgGmdavHwoaIqBLQurjZsmVLqcsvBAcHY/PmzToJRVTZZeYWYPTacFy7/wjWclOseD0A4zvVNXQsIiJCOW5LpaSkwM7OrkS7ra0tkpOTdRKKqDLLzC3AO7+cxZ2UbDhZy7FtXDC8HCwNHYuIiB7T+spNnTp1sGvXrhLt//77L/z8/HQSiqiyysgtwOsrT+PojWTITE3w3ZAWLGyIiCoZra/cTJkyBePHj8eDBw/QqVMnAMC+ffuwcOFCLF68WNf5iCqNpMxcjF0fgQtxabCzMMPK4YEIrOVg6FhERPQErYubUaNGIS8vD5999hk+/fRTAECtWrWwfPlyDBs2TOcBiSqDmw8eYdjK04hPy4GtuSk2vNkajT1K3p4lIiLDkwghRHl3fvDgASwsLGBtba3LTHqVkZEBOzs7pKenw9bW1tBxqAo4cTMFY3+JQHpOATzsLbB65Auo52pj6FhERNWKNp/f5ZplrLCwEHv37sXWrVtRXBvdu3cPjx49Ks/hiCqt7efiMWzVKaTnFKC+qw1+f6sNCxsiokpO69tSd+7cQffu3REbG4u8vDx07doVNjY2WLBgAXJzc7FixQp95CSqcMsO3sCCXUWzDnfxd8GS17icAhFRVaD1lZuJEyciMDAQDx8+hIWFhaq9f//+2Ldvn07DERnKH+FxqsLmjTY++OGNQBY2RERVhNa/rY8ePYpjx45BJpOptfv4+CA+Pl5nwYgMZfnBm/hy11UAXE6BiKgq0vrKjVKphEKhKNF+9+5d2NiwLwJVbetP3lEVNgMDPTGjewMDJyIiIm1pXdx07dpVbT4biUSCR48eYfbs2ejZs6cusxFVqAPRSfj4z8sAgHc61MaCV5pBaiIxcCoiItKW1kPB7927h44dO0IqleL69esIDAzE9evX4eTkhMOHD8PFxUVfWXWCQ8GpNIevPcDYXyKQna/Ayy09sPDVZpBIWNgQEVUW2nx+a93nxt3dHefPn8dvv/2Gs2fPQqlUYvTo0Rg6dKhaB2OiquL7Azfw1e6izsMv1KqBz/o1YWFDRFSFaX3lJjs7G5aWVXctHV65oWKFCiWW7LuOJftvAAD6t/DAZ/0bc1QUEVElpNdJ/FxcXPD6669j9+7dUCqV5Q5JZEgKpcBb6yNUhc2EznWxaGAzFjZEREZA6+Jm3bp1yMvLQ//+/eHu7o6JEyfizJkz+shGpDcrDt3E/qtJkJuaYP7LTTC5S13eiiIiMhJaFzcvv/wyNm3ahPv372P+/PmIiopCcHAw6tWrh7lz5+ojI5FO/XT4lqqPzce9G+K1Vt4sbIiIjMhzLZxZLDIyEkOHDsXFixdLnQOnMmGfm+pLCIHlh26qZh5+rZU3Pu/fmIUNEVEVoPeFMwEgNzcXf/zxB/r164eWLVsiJSUF06ZNK+/hiPTum73XVYXNqBBfFjZEREZK696Te/bswYYNG7B9+3ZIpVK88sor2L17N9q3b6+PfEQ68c/FBCzZdx0AMKVrPYzvWIeFDRGRkdK6uOnXrx969eqFtWvXolevXjAzM9NHLiKdEELgm73X8d3+osJmeJAPJnSua+BURESkT1oXN4mJieyrQlWCEAJz/47E6mO3AQD9mrvj496NDBuKiIj0Tuvi5r+FTU5ODgoKCsp8nsiQVh+7rSpsZvZogLfb1zZsICIiqhBaFzdZWVl4//338ccffyAlJaXE85V9tBQZv6y8Qizccw2rjsUAAD5gYUNEVK1oPVpqxowZ2L9/P5YtWwa5XI6ff/4Zc+bMgbu7O9atW6ePjEQa2xd1Hy9+uV9V2AwL8sHb7fwMnIqIiCqS1lduduzYgXXr1qFDhw4YNWoU2rZtizp16sDHxwcbNmzA0KFD9ZGT6Jl+PRWL/9t+CUoBeDlY4MMe/ujRxM3QsYiIqIJpXdykpqbC19cXQFH/mtTUVADAiy++iHfeeUe36Yg09MOhm5j/71UAwICWnvj85caQm0oNnIqIiAxB69tSfn5+uH37NgCgYcOG+OOPPwAUXdGxt7fXZTaiZxJCYMm+66rC5p0OtfH1q01Z2BARVWNaFzcjR47EhQsXAAAzZ85U9b2ZPHkypk+frvOARGUpUCgxa/tlLAq7BgB4u50fZoTW5+R8RETV3HOvLRUbG4vw8HDUrl0bzZo101UuveHaUsYhr1CBUWvO4NiNFEgkwKTO9TChM2cdJiIyVtp8fmvd5+ZJ3t7e8Pb2ft7DEGllwa5oHLuRAnMzE3wzsDk7DhMRkcpzFzdEFW1v5H3VUO8lg1ugW6OaBk5ERESVSblXBdeVZcuWwdfXF+bm5ggICMCRI0eeun1eXh5mzZoFHx8fyOVy1K5dG6tWraqgtGRoUQkZmLrpAoQAhrT2ZmFDREQlGPTKzcaNGzFp0iQsW7YMISEh+OGHH9CjRw9ERkaWeatr4MCBuH//PlauXIk6deogKSkJhYWFFZycDOH4jWS8vT4CmXmFaO5lj9m9Gxo6EhERVULP3aH4ebRu3RotW7bE8uXLVW3+/v7o168f5s+fX2L7Xbt2YfDgwbh16xYcHBzK9ZrsUFw17b96H2+vj0CBQqCFtz1WDX8BNaxkho5FREQVRJvPb61vS509exaXLl1SPf7zzz/Rr18/fPjhh8jPz9f4OPn5+YiIiEC3bt3U2rt164bjx4+Xus9ff/2FwMBALFiwAB4eHqhXrx6mTZuGnJycMl8nLy8PGRkZal9UtVy7n4nxv55DgUKgY31n/DamDQsbIiIqk9bFzdtvv41r14rmFbl16xYGDx4MS0tLbNq0CTNmzND4OMnJyVAoFHB1dVVrd3V1RWJiYqn73Lp1C0ePHsXly5exbds2LF68GJs3b8a7775b5uvMnz8fdnZ2qi8vLy+NM5Lh5RYoMHZ9BLLzFQjwqYEVbwTA3IwT9BERUdm0Lm6uXbuG5s2bAwA2bdqEdu3a4ddff8WaNWuwZcsWrQM8OS+JEKLMuUqUSiUkEgk2bNiAVq1aoWfPnli0aBHWrFlT5tWbmTNnIj09XfUVFxendUYynA+2XMSt5Cw4WcvxwxsBnHmYiIieSesOxUIIKJVKAMDevXvx0ksvAQC8vLyQnJys8XGcnJwglUpLXKVJSkoqcTWnmJubGzw8PGBnZ6dq8/f3hxACd+/eRd26dUvsI5fLIZfLNc5FlUdY5H1sP38PAPDlgCZwsua/IxERPZvWV24CAwMxb948rF+/HocOHUKvXr0AADExMWUWJaWRyWQICAhAWFiYWntYWBiCg4NL3SckJAT37t3Do0ePVG3Xrl2DiYkJPD09tX0rVIll5hbg/7YX9e0a09YXnf01/94iIqLqTeviZvHixTh79izGjx+PWbNmoU6dOgCAzZs3l1mUlGXKlCn4+eefsWrVKkRFRWHy5MmIjY3F2LFjARTdUho2bJhq+yFDhsDR0REjR45EZGQkDh8+jOnTp2PUqFGwsLDQ9q1QJSWEwJQ/LuB+Rh487C0wqUs9Q0ciIqIqROvbUk2bNlUbLVXsq6++glSqXX+IQYMGISUlBXPnzkVCQgIaN26MnTt3wsfHBwCQkJCA2NhY1fbW1tYICwvDe++9h8DAQDg6OmLgwIGYN2+etm+DKrEdFxMQFnkfZlIJlrzWHFZyTqRNRESaK9c8N2lpadi8eTNu3ryJ6dOnw8HBAWfPnoWrqys8PDz0kVNnOM9N5ZadX4iOXx/E/Yw8TOhcF1O68qoNERHpeOHM+/fvq/WluXjxIjp37gx7e3vcvn0bY8aMgYODA7Zt24Y7d+5g3bp1z/8OqNpacfAm7mfkwbOGBd7tWNvQcYiIqAp6Zp+bH374AR9++KHq8ZQpUzBy5Ehcv34d5ubmqvYePXrg8OHD+klJ1cLt5Cz8cPgWAOD97g047JuIiMrlmcXNxIkTERUVheHDhwMAzpw5g7fffrvEdh4eHmVOvkf0LEIIfLLjCvIKlXixjhNeaupm6EhERFRFPbO4sbOzw7Zt29CsWTMAgLm5ealLGERHR8PZ2Vn3CalaOHI9GQejH8DURIL/e8m/zIkciYiInkXjoeBTpkwBAPTt2xdz585FQUEBgKIZhmNjY/HBBx9gwIAB+klJRq1QocTnO6MAAG8E+aBBTXb0JiKi8tN6npuvv/4aDx48gIuLC3JyctC+fXvUqVMHNjY2+Oyzz/SRkYzcn+fv4WpiJmzMTfFuxzqGjkNERFWc1hOI2Nra4ujRo9i/fz/Onj0LpVKJli1bokuXLvrIR0YuO78QC/dEAwDebufHJRaIiOi5lXt2tE6dOqFTp066zELV0Lf7ruNeei7c7MwxMsTX0HGIiMgIaFTcLFmyBG+99RbMzc2xZMmSp247YcIEnQQj43cj6RFWHY0BAMzu3ZAzERMRkU5oNEOxr68vwsPD4ejoCF/fsv93LZFIcOvWLZ0G1DXOUFx5TN54HtvOxSOkjiM2vNnG0HGIiKgS0+kMxQBw/vx52NnZASha/ZvoeZ2LfYgdF+4BAGaENjBwGiIiMiYajZZycHBAUlISgKK+NmlpafrMREZOoRT4+M8rKFQK9GrihmZe9oaORERERkSj4sba2hopKSkAgIMHD6rmuCEqjzXHb+NSfDps5Kb4pE8jQ8chIiIjo9FtqS5duqBjx47w9/cHAPTv3x8ymazUbffv36+7dGR0YlOysejx0O8ZPRrA2YZDv4mISLc0Km5++eUXrF27Fjdv3sShQ4fQqFEjWFpa6jsbGRkhBKZvvoCsfAVaeNtjaCtvQ0ciIiIjpFFxY2FhgbFjxwIAwsPD8eWXX8Le3l6fucgIbY64i1MxqZCbmuCbgc1hYsL1o4iISPe0nljkwIED+shBRi4hPQfz/ilaP+rdjnVQy8nKwImIiMhYaVTcTJkyBZ9++imsrKxUC2iWZdGiRToJRsYjv1CJMevCkZ5TgPquNlw/ioiI9Eqj4ubcuXOqEVJnz56FRMLbCaS5VcdicDk+A7bmpljxRgCkvB1FRER6pFFx899bUQcPHtRXFjJCsSnZWLLvOgBgevcG8OXtKCIi0jON5rn5r1GjRiEzM7NEe1ZWFkaNGqWTUGQ8PtlxBdn5CjRyt8XgF7wMHYeIiKoBrYubtWvXIicnp0R7Tk4O1q1bp5NQZBwOXXuA/VeTIDWRYPGg5jCTav3tRkREpDWNR0tlZGRACAEhBDIzM2Fubq56TqFQYOfOnXBxcdFLSKp6cgsUmLPjCgBgWJAP6rraGDgRERFVFxoXN/b29pBIJJBIJKhXr16J5yUSCebMmaPTcFR1fbnrKm49yIKDlQwTOtU1dBwiIqpGNC5uDhw4ACEEOnXqhC1btsDBwUH1nEwmg4+PD9zd3fUSkqqWtcdvY/Wx2wCABQOaooZV6Ut1EBER6YPGxU379u0BADExMfDy8oKJCftPUElnYx/ik8e3o0aF+KJLQ1cDJyIioupG6xmKfXx8kJaWhtOnTyMpKQlKpVLt+WHDhuksHFUt6TkFmLbpAoQA+jRzx0cv+Rs6EhERVUNaFzc7duzA0KFDkZWVBRsbG7UJ/SQSCYubaio9uwAj15zGrQdZcLaR45M+jTjZIxERGYTW95amTp2qmusmLS0NDx8+VH2lpqbqIyNVcn+ciUPbBftxNjYNljIp1ox8AQ7sZ0NERAai9ZWb+Ph4TJgwAZaWlvrIQ1VIVEIGpm++gMvxGQAAJ2sZvhnUHI3c7QycjIiIqjOti5vQ0FCEh4fDz89PH3moCkjLzse2c/FYsCsaOQUKmJpI8HZ7P0zoXBdyU6mh4xERUTWndXHTq1cvTJ8+HZGRkWjSpAnMzMzUnu/Tp4/OwlHlkleowG+nYvHJjkhVW4BPDSx9rQXc7S0MmIyIiOh/JEIIoc0OTxsCLpFIoFAonjuUPmVkZMDOzg7p6emwtbU1dJwq4cztVPx5Ph5/nb+HjNxCAICrrRx9mrljfKe6sLMwe8YRiIiIno82n99aX7l5cug3GbdlB29gwa5o1WN7SzO80tITH/RoAFOuFUVERJWQ1sXNf+Xm5qqtMUXGZXPEXVVh08rXAUNbe6NXEzcWNUREVKlp/SmlUCjw6aefwsPDA9bW1rh16xYA4KOPPsLKlSt1HpAM40JcGmZuvQgAGNraGxvfaoO+zT1Y2BARUaWn9SfVZ599hjVr1mDBggWQyf43l0mTJk3w888/6zQcGcbJWykY/ONJFCgEQuo4ckI+IiKqUrQubtatW4cff/wRQ4cOhVT6v2G/TZs2xdWrV3Uajire5fh0jFkXjpwCBTzsLfDVK81gxqs1RERUhZRrEr86deqUaFcqlSgoKNBJKDIMhVJg0sbzyMwtRCN3W/z2VhvYmnMkFBERVS1a/5e8UaNGOHLkSIn2TZs2oUWLFjoJRYYx759I3Eh6BEuZFKtHvMDChoiIqiStr9zMnj0bb7zxBuLj46FUKrF161ZER0dj3bp1+Pvvv/WRkSpAxJ1UrD52GwDwad/GcLHlKDgiIqqatL5y07t3b2zcuBE7d+6ERCLBxx9/jKioKOzYsQNdu3bVR0bSM6VSYO7jWYf7NXfHgABPAyciIiIqv3LNcxMaGorQ0FBdZyED+fdyIi7cTYe13BQf9vQ3dBwiIqLnwmEw1ZwQAssP3QAADA/24e0oIiKq8jS6clOjRg2N5zlJTU19rkBUsXZfuY/L8RmwMJNiZIivoeMQERE9N42Km8WLF6v+npKSgnnz5iE0NBRBQUEAgBMnTmD37t346KOP9BKS9EOpFFi89xoAYERILThZyw2ciIiI6PlpvSr4gAED0LFjR4wfP16t/bvvvsPevXuxfft2XebTOa4K/j87LyVg3IazsJJJcfyDzrCz5NBvIiKqnLT5/Na6z83u3bvRvXv3Eu2hoaHYu3evtocjAxFCYMWhmwCA0S/6srAhIiKjoXVx4+joiG3btpVo3759OxwdHXUSivTv0LUHuHg3HTJTE7wRVMvQcYiIiHRG66Hgc+bMwejRo3Hw4EFVn5uTJ09i165dXDizCll2sOiqzdDW3nC2YV8bIiIyHloXNyNGjIC/vz+WLFmCrVu3QgiBhg0b4tixY2jdurU+MpKOXbufidMxqZCaSDCmrZ+h4xAREelUuSbxa926NTZs2KDrLFRBfjsdCwDoWN8F7vYWBk5DRESkWxoVNxkZGaqeyRkZGU/dtrqPQKrssvIKsTn8LgDg9TbeBk5DRESkexpP4peQkAAXFxfY29uXOqGfEAISiQQKhULnIUl3/giPQ2ZeIXwcLdGurrOh4xAREemcRsXN/v374eDgAAA4cOCAXgOR/iiUAiuPxgAA3mzrBxMTzWadJiIiqko0Km7at29f6t+pajlxMwV3H+bA1twUr7Tkyt9ERGScDL5w5rJly+Dr6wtzc3MEBATgyJEjGu137NgxmJqaonnz5voNaES2nC3qa9OziRssZFIDpyEiItIPgxY3GzduxKRJkzBr1iycO3cObdu2RY8ePRAbG/vU/dLT0zFs2DB07ty5gpJWfWnZ+fj74j0AwKAXvAychoiISH8MWtwsWrQIo0ePxptvvgl/f38sXrwYXl5eWL58+VP3e/vttzFkyBDVJIL0bNvPxaNAIdCgpg1aeNcwdBwiIiK9MVhxk5+fj4iICHTr1k2tvVu3bjh+/HiZ+61evRo3b97E7Nmz9R3RaCiVAmuO3wYADAzkVRsiIjJuWk/il5OTAyEELC0tAQB37tzBtm3b0LBhwxKFytMkJydDoVDA1dVVrd3V1RWJiYml7nP9+nV88MEHOHLkCExNNYuel5eHvLw81eNnzdNjjPZEJuJ2SjZszE0xkLekiIjIyGl95aZv375Yt24dACAtLQ2tW7fGwoUL0bdv32feTirNk3PmFM+X8ySFQoEhQ4Zgzpw5qFevnsbHnz9/Puzs7FRfXl7V78P95yNFw7+HBfnAWl6uSamJiIiqDK2Lm7Nnz6Jt27YAgM2bN8PV1RV37tzBunXrsGTJEo2P4+TkBKlUWuIqTVJSUomrOQCQmZmJ8PBwjB8/HqampjA1NcXcuXNx4cIFmJqaYv/+/aW+zsyZM5Genq76iouL0+LdVn1nYx8i/M5DmJpIMIyrfxMRUTWg9X/js7OzYWNjAwDYs2cPXn75ZZiYmKBNmza4c+eOxseRyWQICAhAWFgY+vfvr2oPCwtD3759S2xva2uLS5cuqbUtW7YM+/fvx+bNm+Hr61vq68jlcsjl1XfV619OFP2b9G3uAVdbcwOnISIi0j+ti5s6depg+/bt6N+/P3bv3o3JkycDKLriou26UlOmTMEbb7yBwMBABAUF4ccff0RsbCzGjh0LoOiqS3x8PNatWwcTExM0btxYbX8XFxeYm5uXaKci6dkF+PtSAgCuI0VERNWH1sXNxx9/jCFDhmDy5Mno3Lmzajj2nj170KJFC62ONWjQIKSkpGDu3LlISEhA48aNsXPnTvj4+AAAEhISnjnnDZVtd2Qi8guVqO9qg+Ze9oaOQ0REVCEkQgih7U6JiYlISEhAs2bNYGJS1G3n9OnTsLOzQ/369XUeUpcyMjJgZ2eH9PR0o1/BfMTq0zgY/QCTu9TDxC51DR2HiIio3LT5/Na6Q/GoUaNgZWWFFi1aqAobAGjUqBG+/PJL7dOSXsSlZuPQtQcAgN7N3AychoiIqOJoXdysXbsWOTk5JdpzcnJUQ8TJ8NafvAMhgBfrOMHP2drQcYiIiCqMxn1uMjIyIISAEAKZmZkwN//fyBuFQoGdO3fCxcVFLyFJO4UKJbaejQdQNLcNERFRdaJxcWNvbw+JRAKJRFLqJHoSiQRz5szRaTgqn71R95H8KA8OVjJ0bMCCk4iIqheNi5sDBw5ACIFOnTphy5YtcHBwUD0nk8ng4+MDd3d3vYQk7fxysmiEWb/mHjCTGnRtVCIiogqncXHTvn17AEBMTAy8vLzUOhNT5XE/IxdHbyQDAEaG1DJsGCIiIgPQep4bHx8fpKWl4fTp00hKSoJSqVR7ftiwYToLR9rb+XjSvgCfGvBysDRwGiIiooqndXGzY8cODB06FFlZWbCxsVFb5FIikbC4MbBdl4vW6urVhMO/iYioetL63tLUqVMxatQoZGZmIi0tDQ8fPlR9paam6iMjaSgjtwARdx4CADr7syMxERFVT1oXN/Hx8ZgwYQIsLXnLo7LZfTkRhUqB2s5W8HG0MnQcIiIig9C6uAkNDUV4eLg+stBzKu5v06+5h4GTEBERGY7WfW569eqF6dOnIzIyEk2aNIGZmZna83369NFZONJcVl4hTtxKAQB0beRq4DRERESGo3VxM2bMGADA3LlzSzwnkUigUCiePxVp7Z9LCcgtUMLXyQr1XW0MHYeIiMhgtC5unhz6TZXD76eLJu57NdBTbQQbERFRdfNcM/Hl5ubqKgc9h7sPs3E2Ng0SCfBKS09DxyEiIjIorYsbhUKBTz/9FB4eHrC2tsatW7cAAB999BFWrlyp84D0bMVz27Sq5QAXW/NnbE1ERGTctC5uPvvsM6xZswYLFiyATCZTtTdp0gQ///yzTsORZv59XNx0b1zTwEmIiIgMT+viZt26dfjxxx8xdOhQSKVSVXvTpk1x9epVnYajZ4tLzUbEnYcwkQA9GnNWYiIionJN4lenTp0S7UqlEgUFBToJRZorviXV2tcRNe14S4qIiEjr4qZRo0Y4cuRIifZNmzahRYsWOglFmvv74j0AQM8mvCVFREQElGMo+OzZs/HGG28gPj4eSqUSW7duRXR0NNatW4e///5bHxmpDLeTs3DhbjpMJEAo+9sQEREBKMeVm969e2Pjxo3YuXMnJBIJPv74Y0RFRWHHjh3o2rWrPjJSGcIi7wMAgms7wcWGt6SIiIiAcly5AYrWlwoNDdV1FtLSv5eL1pLqwhXAiYiIVJ5rEj8ynJRHeTgbmwYA6NGEo6SIiIiKaXTlxsHBAdeuXYOTkxNq1Kjx1On9U1NTdRaOynbyVtF5blDTBq6cuI+IiEhFo+Lmm2++gY1N0WKMixcv1mce0tDeqKL+NiF1nAychIiIqHLRqLgZPnx4qX8nw8gtUGDv487EPThKioiISI1GxU1GRobGB7S1tS13GNLMsRvJyMwrhJudOVp61zB0HCIiokpFo+LG3t7+qf1sAEAIAYlEAoVCoZNgVLa9UUkAgC7+rjAxefq/CxERUXWjUXFz4MABfecgDeUVKlRDwLs2dDVwGiIiospHo+Kmffv2+s5BGjp1KxVp2QVwtpEjuLajoeMQERFVOlrPc7N69Wps2rSpRPumTZuwdu1anYSishWvJdXF3xWmUk5TRERE9CStPx2/+OILODmVHH7s4uKCzz//XCehqHSFCiX2PB4l1aeZu4HTEBERVU5aFzd37tyBr69viXYfHx/ExsbqJBSV7vD1B0jLLoCDlQwv1OIoKSIiotJoXdy4uLjg4sWLJdovXLgAR0f2AdGnbeeKbkn1be7OW1JERERl0PoTcvDgwZgwYQIOHDgAhUIBhUKB/fv3Y+LEiRg8eLA+MhKAnHwFwiITAQD9mnsYOA0REVHlpfWq4PPmzcOdO3fQuXNnmJoW7a5UKjFs2DD2udGjA9FJyC1QwsPeAk097Qwdh4iIqNLSuriRyWTYuHEj5s2bh/Pnz8PCwgJNmjSBj4+PPvLRY2GPOxL3aur2zAkViYiIqjOti5tidevWRd26dXWZhcqQX6jEgeiiWYk7N3AxcBoiIqLKjb1Sq4BD14pGSTlZyxHgw1FSRERET8Pipgr460LRKKk+zThKioiI6Fn4SVnJFSiUOPj4ltRLzdwMnIaIiKjyY3FTyV2KT0dmbiHsLc3QzNPe0HGIiIgqvXIVN0eOHMHrr7+OoKAgxMfHAwDWr1+Po0eP6jQcAUevJwMAWvs6QGrCUVJERETPonVxs2XLFoSGhsLCwgLnzp1DXl4eACAzM5Pz3OiYEEK1UGZnf1cDpyEiIqoatC5u5s2bhxUrVuCnn36CmZmZqj04OBhnz57VabjqLvp+Jq7dfwSZ1AShjWoaOg4REVGVoHVxEx0djXbt2pVot7W1RVpami4y0WP7ooo6Eret6wQ7C7NnbE1ERERAOYobNzc33Lhxo0T70aNH4efnp5NQVOTI9QcAgPb1nQ2chIiIqOrQurh5++23MXHiRJw6dQoSiQT37t3Dhg0bMG3aNIwbN04fGaulR3mFCL/9EADQri6LGyIiIk1pvfzCjBkzkJ6ejo4dOyI3Nxft2rWDXC7HtGnTMH78eH1krJZO3kxBoVLA28EStZysDB2HiIioyijX2lKfffYZZs2ahcjISCiVSjRs2BDW1ta6zlatHb+ZAgB4sa6TgZMQERFVLeVeONPS0hKBgYG6zEL/cfxm0fw2QX6OBk5CRERUtWhU3Lz88ssaH3Dr1q3lDkNFUh7l4WpiJgAgpA6v3BAREWlDow7FdnZ2qi9bW1vs27cP4eHhqucjIiKwb98+2NnZ6S1odXIgumiUVIOaNnCwkhk4DRERUdWi0ZWb1atXq/7+/vvvY+DAgVixYgWkUikAQKFQYNy4cbC1tdVPymomLDIRANC9MSfuIyIi0pbWQ8FXrVqFadOmqQobAJBKpZgyZQpWrVql03DVkVIpcDomFQDQrh6HgBMREWlL6+KmsLAQUVFRJdqjoqKgVCq1DrBs2TL4+vrC3NwcAQEBOHLkSJnbbt26FV27doWzszNsbW0RFBSE3bt3a/2aldnle+l4mF0Aa7kpmnjwNh8REZG2tB4tNXLkSIwaNQo3btxAmzZtAAAnT57EF198gZEjR2p1rI0bN2LSpElYtmwZQkJC8MMPP6BHjx6IjIyEt7d3ie0PHz6Mrl274vPPP4e9vT1Wr16N3r1749SpU2jRooW2b6VSOvi4v01IHUeYScu1aDsREVG1JhFCCG12UCqV+Prrr/Htt98iISEBQNGSDBMnTsTUqVPVblc9S+vWrdGyZUssX75c1ebv749+/fph/vz5Gh2jUaNGGDRoED7++GONts/IyICdnR3S09MrZR+hwT+ewMlbqfi0X2O80cbH0HGIiIgqBW0+v7W+cmNiYoIZM2ZgxowZyMjIAIByFQn5+fmIiIjABx98oNberVs3HD9+XKNjKJVKZGZmwsHBQevXr4yy8wtx9k4aACCkNue3ISIiKo9yT+IHlK+oKZacnAyFQgFXV1e1dldXVyQmJmp0jIULFyIrKwsDBw4sc5u8vDzk5eWpHhcXZJXRqVupyFco4WFvAV8uuUBERFQuBu/UIZFI1B4LIUq0lea3337DJ598go0bN8LFxaXM7ebPn682T4+Xl9dzZ9aXYzeKZiVuW9dJo3NAREREJRmsuHFycoJUKi1xlSYpKanE1Zwnbdy4EaNHj8Yff/yBLl26PHXbmTNnIj09XfUVFxf33Nn15ejj4iaYsxITERGVm8GKG5lMhoCAAISFham1h4WFITg4uMz9fvvtN4wYMQK//vorevXq9czXkcvlsLW1VfuqjBLSc3A1MRMmEqAtixsiIqJy07q4WbdunVoflmL5+flYt26dVseaMmUKfv75Z6xatQpRUVGYPHkyYmNjMXbsWABFV12GDRum2v63337DsGHDsHDhQrRp0waJiYlITExEenq6tm+j0jl5q2gV8Cae9qjBJReIiIjKTeviZuTIkaUWE5mZmVrPczNo0CAsXrwYc+fORfPmzXH48GHs3LkTPj5FQ6ATEhIQGxur2v6HH35AYWEh3n33Xbi5uam+Jk6cqO3bqHRO3iyalbiNr3GM/CIiIjIUrUdLldXh9+7du+VaOHPcuHEYN25cqc+tWbNG7fHBgwe1Pn5VIITAoWtFk/exvw0REdHz0bi4adGiBSQSCSQSCTp37gxT0//tqlAoEBMTg+7du+slpLG7ci8DiRm5sJRJ0ZpXboiIiJ6LxsVNv379AADnz59HaGgorK2tVc/JZDLUqlULAwYM0HnA6iAs8j4AIKSOE8zNNJ/hmYiIiErSuLiZPXs2FAoFfHx8EBoaCjc3N33mqlZ2XykaDt+t4dOHwBMREdGzadWhWCqVYuzYscjNzdVXnmrnTkoWriZmQmoiQRd/FjdERETPS+vRUk2aNMGtW7f0kaVaKr4l1cbPgUPAiYiIdEDr4uazzz7DtGnT8PfffyMhIQEZGRlqX6Sd4lFSHeuXvYQEERERaU7roeDFI6L69OmjNiS8eIi4QqHQXTojl1ugwOmYovlt2tVzNnAaIiIi46B1cXPgwAF95KiWTsWkIq9QCVdbOeq6WD97ByIiInomrYub9u3b6yNHtXT48S2p9vWcuQo4ERGRjmhd3BTLzs5GbGws8vPz1dqbNm363KGqiyPXi4ob3pIiIiLSHa2LmwcPHmDkyJH4999/S32efW40cy8tB9fuP4KJBHiRSy4QERHpjNajpSZNmoSHDx/i5MmTsLCwwK5du7B27VrUrVsXf/31lz4yGqWD0UVXbZp72cPekkPAiYiIdEXrKzf79+/Hn3/+iRdeeAEmJibw8fFB165dYWtri/nz56NXr176yGl09l9NAsAh4ERERLqm9ZWbrKwsuLgUfSA7ODjgwYOiKxBNmjTB2bNndZvOSOXkK3D0RtF568xZiYmIiHRK6+Kmfv36iI6OBgA0b94cP/zwA+Lj47FixQquN6Wh/VeTkFughIe9BfzdbAwdh4iIyKhofVtq0qRJuHfvHoCixTRDQ0OxYcMGyGQyrFmzRtf5jNLOSwkAgN7N3DkEnIiISMe0Lm6GDh2q+nuLFi1w+/ZtXL16Fd7e3nBy4qifZ1EohWoIeGgj3pIiIiLSNY1vS2VnZ+Pdd9+Fh4cHXFxcMGTIECQnJ8PS0hItW7ZkYaOhs7EPkZFbCFtzUzT1tDd0HCIiIqOjcXEze/ZsrFmzBr169cLgwYMRFhaGd955R5/ZjNLeqKJVwDv7u0JqwltSREREuqbxbamtW7di5cqVGDx4MADg9ddfR0hICBQKBaRSqd4CGpuTN1MAAG3r8koXERGRPmh85SYuLg5t27ZVPW7VqhVMTU1VnYvp2TJyC3ApPh0AEFTb0cBpiIiIjJPGxY1CoYBMpj6TrqmpKQoLC3UeyliF306FUgC+TlZws7MwdBwiIiKjpPFtKSEERowYAblcrmrLzc3F2LFjYWVlpWrbunWrbhMakROPb0m18XMwcBIiIiLjpXFxM3z48BJtr7/+uk7DGLsztx8CAFr5srghIiLSF42Lm9WrV+szh9HLyVfg8uP+NoE+LG6IiIj0RevlF6h8zsU9RKFSoKatOTxrsL8NERGRvrC4qSARj29JveDrwCUXiIiI9IjFTQU5fTsVABDoU8PASYiIiIwbi5sKkF+oxJnHxU0bP85vQ0REpE8sbirApfh05BYo4WAlQz1Xa0PHISIiMmosbirAqZii+W1eqFWD/W2IiIj0jMVNBTh1q+iWVGtf3pIiIiLSNxY3elaoUCL8cX+b1pyZmIiISO9Y3OhZZEIGsvIVsDE3RYOatoaOQ0REZPRY3OjZ6Zj/DQGXmrC/DRERkb6xuNGzk7eKF8tkfxsiIqKKwOJGjxRKgVMxnN+GiIioIrG40aNr9zORmVsIK5kUjdzZ34aIiKgisLjRo7OxRetJNfe2h6mUp5qIiKgi8BNXjyLuFBU3Ad5cT4qIiKiisLjRo7OPi5sWXCyTiIiowrC40ZOHWfm4nZINAGjpxeKGiIioorC40ZPzd9MAAH5OVrCzNDNsGCIiomqExY2eXIhLAwA087I3aA4iIqLqhsWNnpx/XNw0Z3FDRERUoVjc6IEQQnXlhsUNERFRxWJxowexqdl4mF0AmdQE/m6cvI+IiKgisbjRgwt30wEA/u62kJnyFBMREVUkfvLqgeqWlKedYYMQERFVQyxu9KC4uGnqaW/QHERERNURixsdK1Qocfle0W0pDgMnIiKqeCxudOza/UfILVDCRm4KPycrQ8chIiKqdljc6NjFxzMTN/G0g4mJxLBhiIiIqiEWNzp2Mb7ollQTdiYmIiIyCBY3Onbp8TDwZuxMTEREZBAsbnQor1CBq4kZAIAmHrxyQ0REZAgsbnQoOjETBQqBGpZm8KxhYeg4RERE1ZLBi5tly5bB19cX5ubmCAgIwJEjR566/aFDhxAQEABzc3P4+flhxYoVFZT02S7eLe5vYw+JhJ2JiYiIDMGgxc3GjRsxadIkzJo1C+fOnUPbtm3Ro0cPxMbGlrp9TEwMevbsibZt2+LcuXP48MMPMWHCBGzZsqWCk5euuL9NU96SIiIiMhiJEEIY6sVbt26Nli1bYvny5ao2f39/9OvXD/Pnzy+x/fvvv4+//voLUVFRqraxY8fiwoULOHHihEavmZGRATs7O6Snp8PWVreLWnZffBhXEzPxwxsBCG1UU6fHJiIiqs60+fw22JWb/Px8REREoFu3bmrt3bp1w/Hjx0vd58SJEyW2Dw0NRXh4OAoKCkrdJy8vDxkZGWpf+vAorxDXkx4B4EgpIiIiQzJYcZOcnAyFQgFXV1e1dldXVyQmJpa6T2JiYqnbFxYWIjk5udR95s+fDzs7O9WXl5eXbt7AE2JTsuFmZw5fJyu42sr18hpERET0bAbvUPxkx1shxFM745a2fWntxWbOnIn09HTVV1xc3HMmLl1Dd1scmdERG99qw87EREREBmRqqBd2cnKCVCotcZUmKSmpxNWZYjVr1ix1e1NTUzg6Opa6j1wuh1xeMVdSJBIJXGzNK+S1iIiIqHQGu3Ijk8kQEBCAsLAwtfawsDAEBweXuk9QUFCJ7ffs2YPAwECYmZnpLSsRERFVHQa9LTVlyhT8/PPPWLVqFaKiojB58mTExsZi7NixAIpuKQ0bNky1/dixY3Hnzh1MmTIFUVFRWLVqFVauXIlp06YZ6i0QERFRJWOw21IAMGjQIKSkpGDu3LlISEhA48aNsXPnTvj4+AAAEhIS1Oa88fX1xc6dOzF58mR8//33cHd3x5IlSzBgwABDvQUiIiKqZAw6z40h6HOeGyIiItKPKjHPDREREZE+sLghIiIio8LihoiIiIwKixsiIiIyKixuiIiIyKiwuCEiIiKjwuKGiIiIjAqLGyIiIjIqLG6IiIjIqBh0+QVDKJ6QOSMjw8BJiIiISFPFn9uaLKxQ7YqbzMxMAICXl5eBkxAREZG2MjMzYWdn99Rtqt3aUkqlEvfu3YONjQ0kEolOj52RkQEvLy/ExcVx3So94nmuGDzPFYPnueLwXFcMfZ1nIQQyMzPh7u4OE5On96qpdlduTExM4OnpqdfXsLW15Q9OBeB5rhg8zxWD57ni8FxXDH2c52ddsSnGDsVERERkVFjcEBERkVFhcaNDcrkcs2fPhlwuN3QUo8bzXDF4nisGz3PF4bmuGJXhPFe7DsVERERk3HjlhoiIiIwKixsiIiIyKixuiIiIyKiwuCEiIiKjwuJGS8uWLYOvry/Mzc0REBCAI0eOPHX7Q4cOISAgAObm5vDz88OKFSsqKGnVps153rp1K7p27QpnZ2fY2toiKCgIu3fvrsC0VZe238/Fjh07BlNTUzRv3ly/AY2Etuc5Ly8Ps2bNgo+PD+RyOWrXro1Vq1ZVUNqqS9vzvGHDBjRr1gyWlpZwc3PDyJEjkZKSUkFpq6bDhw+jd+/ecHd3h0Qiwfbt25+5j0E+BwVp7PfffxdmZmbip59+EpGRkWLixInCyspK3Llzp9Ttb926JSwtLcXEiRNFZGSk+Omnn4SZmZnYvHlzBSevWrQ9zxMnThRffvmlOH36tLh27ZqYOXOmMDMzE2fPnq3g5FWLtue5WFpamvDz8xPdunUTzZo1q5iwVVh5znOfPn1E69atRVhYmIiJiRGnTp0Sx44dq8DUVY+25/nIkSPCxMREfPvtt+LWrVviyJEjolGjRqJfv34VnLxq2blzp5g1a5bYsmWLACC2bdv21O0N9TnI4kYLrVq1EmPHjlVra9Cggfjggw9K3X7GjBmiQYMGam1vv/22aNOmjd4yGgNtz3NpGjZsKObMmaPraEalvOd50KBB4v/+7//E7NmzWdxoQNvz/O+//wo7OzuRkpJSEfGMhrbn+auvvhJ+fn5qbUuWLBGenp56y2hsNCluDPU5yNtSGsrPz0dERAS6deum1t6tWzccP3681H1OnDhRYvvQ0FCEh4ejoKBAb1mrsvKc5ycplUpkZmbCwcFBHxGNQnnP8+rVq3Hz5k3Mnj1b3xGNQnnO819//YXAwEAsWLAAHh4eqFevHqZNm4acnJyKiFwllec8BwcH4+7du9i5cyeEELh//z42b96MXr16VUTkasNQn4PVbuHM8kpOToZCoYCrq6tau6urKxITE0vdJzExsdTtCwsLkZycDDc3N73lrarKc56ftHDhQmRlZWHgwIH6iGgUynOer1+/jg8++ABHjhyBqSl/dWiiPOf51q1bOHr0KMzNzbFt2zYkJydj3LhxSE1NZb+bMpTnPAcHB2PDhg0YNGgQcnNzUVhYiD59+mDp0qUVEbnaMNTnIK/caEkikag9FkKUaHvW9qW1kzptz3Ox3377DZ988gk2btwIFxcXfcUzGpqeZ4VCgSFDhmDOnDmoV69eRcUzGtp8PyuVSkgkEmzYsAGtWrVCz549sWjRIqxZs4ZXb55Bm/McGRmJCRMm4OOPP0ZERAR27dqFmJgYjB07tiKiViuG+Bzkf7805OTkBKlUWuJ/AUlJSSWq0mI1a9YsdXtTU1M4OjrqLWtVVp7zXGzjxo0YPXo0Nm3ahC5duugzZpWn7XnOzMxEeHg4zp07h/HjxwMo+hAWQsDU1BR79uxBp06dKiR7VVKe72c3Nzd4eHjAzs5O1ebv7w8hBO7evYu6devqNXNVVJ7zPH/+fISEhGD69OkAgKZNm8LKygpt27bFvHnzeGVdRwz1OcgrNxqSyWQICAhAWFiYWntYWBiCg4NL3ScoKKjE9nv27EFgYCDMzMz0lrUqK895Boqu2IwYMQK//vor75lrQNvzbGtri0uXLuH8+fOqr7Fjx6J+/fo4f/48WrduXVHRq5TyfD+HhITg3r17ePTokart2rVrMDExgaenp17zVlXlOc/Z2dkwMVH/CJRKpQD+d2WBnp/BPgf12l3ZyBQPNVy5cqWIjIwUkyZNElZWVuL27dtCCCE++OAD8cYbb6i2Lx4CN3nyZBEZGSlWrlzJoeAa0PY8//rrr8LU1FR8//33IiEhQfWVlpZmqLdQJWh7np/E0VKa0fY8Z2ZmCk9PT/HKK6+IK1euiEOHDom6deuKN99801BvoUrQ9jyvXr1amJqaimXLlombN2+Ko0ePisDAQNGqVStDvYUqITMzU5w7d06cO3dOABCLFi0S586dUw25ryyfgyxutPT9998LHx8fIZPJRMuWLcWhQ4dUzw0fPly0b99ebfuDBw+KFi1aCJlMJmrVqiWWL19ewYmrJm3Oc/v27QWAEl/Dhw+v+OBVjLbfz//F4kZz2p7nqKgo0aVLF2FhYSE8PT3FlClTRHZ2dgWnrnq0Pc9LliwRDRs2FBYWFsLNzU0MHTpU3L17t4JTVy0HDhx46u/byvI5KBGC19+IiIjIeLDPDRERERkVFjdERERkVFjcEBERkVFhcUNERERGhcUNERERGRUWN0RERGRUWNwQEWkhLS0Nc+bMQUJCgqGjGIX09HTMnTsX9+7dM3QUMiIsboj0ZMSIEejXr5/ejn/w4EFIJBKkpaUBANasWQN7e3u9vV55PZmzNBWZvUOHDpg0aZLqcXZ2NgYMGABbW1tVzlq1amHx4sWl7j9ixAjk5ORw7aFykkgk2L59u+qxnZ0dbGxsMHjwYBQWFpbYXt8/R2ScWNyQURgxYgQkEgkkEgnMzMzg5+eHadOmISsr67mO+8knn6B58+a6CalngwYNwrVr13R6TE0Kk2cJDg5GQkKC2kKQFaGs7Fu3bsWnn36qerx27VocOXIEx48fV+U8c+YM3nrrrRLHXLhwIaytrTF//nx9x69WJk+ejMDAQHz44YeGjkJGgquCk9Ho3r07Vq9ejYKCAhw5cgRvvvkmsrKysHz5cq2PJYSAQqHQQ0r9sbCwgIWFhaFjlCCTyVCzZk1Dx1BxcHBQe3zz5k34+/ujcePGqjZnZ+dS9506dapes1VnixYtMnQEMiK8ckNGQy6Xo2bNmvDy8sKQIUMwdOhQ1eXvX375BYGBgbCxsUHNmjUxZMgQJCUlqfYt/l/+7t27ERgYCLlcjvXr12POnDm4cOGC6qrQmjVrSn1thUKBKVOmwN7eHo6OjpgxY0aJlYWFEFiwYAH8/PxgYWGBZs2aYfPmzU99T3l5eZgxYwa8vLwgl8tRt25drFy5stRtS7u1s2PHDgQEBMDc3Bx+fn6YM2eO2qV/iUSCn3/+Gf3794elpSXq1q2Lv/76CwBw+/ZtdOzYEQBQo0YNSCQSjBgxAgCwefNmNGnSBBYWFnB0dESXLl3KvEpW2hWUNWvWwNvbG5aWlujfvz9SUlJK7Kev7P+9LdWhQwcsXLgQhw8fhkQiQYcOHQCgxG2p9PR0vPXWW3BxcYGtrS06deqECxcuqJ6/cOECOnbsCBsbG9ja2iIgIADh4eGlng+g6Iqgt7c35HI53N3dMWHCBNVzmn6v7tu3D4GBgbC0tERwcDCio6PLnUcikeCHH37ASy+9BEtLS/j7++PEiRO4ceMGOnToACsrKwQFBeHmzZtq+y1fvhy1a9eGTCZD/fr1sX79erXnr1+/jnbt2sHc3BwNGzYssTo0AMTHx2PQoEGoUaMGHBwc8NJLL+HGjRtlZi3PzxFVQ3pfvYqoAgwfPlz07dtXre29994Tjo6OQgghVq5cKXbu3Clu3rwpTpw4Idq0aSN69Oih2rZ4MbimTZuKPXv2iBs3boi7d++KqVOnikaNGqlWGi9r8cIvv/xS2NnZic2bN4vIyEgxevRoYWNjo5bpww8/FA0aNBC7du0SN2/eFKtXrxZyuVwcPHiwzPc1cOBA4eXlJbZu3Spu3rwp9u7dK37//Xe1zA8fPhRCFK1ybGdnp9p3165dwtbWVqxZs0bcvHlT7NmzR9SqVUt88sknqm0ACE9PT/Hrr7+K69eviwkTJghra2uRkpIiCgsLxZYtWwQAER0drVpp/d69e8LU1FQsWrRIxMTEiIsXL4rvv/9eZGZmlvoensx58uRJIZFIxPz580V0dLT49ttvhb29fYVkF6JoodWJEycKIYRISUkRY8aMEUFBQSIhIUGkpKQIIYTw8fER33zzjRBCCKVSKUJCQkTv3r3FmTNnxLVr18TUqVOFo6OjavtGjRqJ119/XURFRYlr166JP/74Q5w/f77U87Fp0yZha2srdu7cKe7cuSNOnTolfvzxR9Xzmn6vtm7dWhw8eFBcuXJFtG3bVgQHB6u20SZP8bn08PAQGzduFNHR0aJfv36iVq1aolOnTmLXrl0iMjJStGnTRnTv3l21z9atW4WZmZn4/vvvRXR0tFi4cKGQSqVi//79QgghFAqFaNy4sejQoYM4d+6cOHTokGjRooUAILZt2yaEECIrK0vUrVtXvPXWW+LSpUsiMjJSvPHGG8LPz0/k5OQIIUr+bJfn54iqHxY3ZBSe/AV46tQp4ejoKAYOHFjq9qdPnxYAVB/IxR8Y27dvV9tO05Wv3dzcxBdffKF6XFBQIDw9PVWZHj16JMzNzcXx48fV9hs9erR47bXXSj1mdHS0ACDCwsJKff5ZxU3btm3F559/rrbP+vXrhZubm+oxAPF///d/qsePHj0SEolE/Pvvv6W+hhBCRERECADi9u3bpZ+MZ+R87bXX1D4khRBi0KBBFZJdCPXiRgghJk6cWGIV4/8WN/v27RO2trYiNzdXbZvatWuLH374QQghhI2NjVizZs1Tz0OxhQsXinr16on8/HyNti/re3Xv3r2qbf755x8BQFUQaJNHiJLn8sSJEwKAWLlypartt99+E+bm5qrHwcHBYsyYMWrHefXVV0XPnj2FEELs3r1bSKVSERcXp3r+33//VStuVq5cKRo2bKh2jPz8fGFlZSX++ecfIYT6z3Z5fo6oeuJtKTIaf//9N6ytrWFubo6goCC0a9cOS5cuBQCcO3cOffv2hY+PD2xsbFS3H2JjY9WOERgYqPXrpqenIyEhAUFBQao2U1NTtWNFRkYiNzcXXbt2hbW1tepr3bp1JS71Fzt//jykUinat2+vdSYAiIiIwNy5c9Veb8yYMUhISEB2drZqu6ZNm6r+bmVlBRsbG7XbIE9q1qwZOnfujCZNmuDVV1/FTz/9hIcPH2qcKyoqSu1cASjxWF/ZyyMiIgKPHj2Co6OjWp6YmBjVv92UKVPw5ptvokuXLvjiiy/K/DcFgFdffRU5OTnw8/PDmDFjsG3bNrXbbZp+r/73vReP3Cp+79rkKe14rq6uAIAmTZqoteXm5iIjIwNA0b9jSEiI2jFCQkIQFRWlet7b2xuenp6q50v7d46MjFTd9pVIJJDJZMjKysKtW7dKZCzPzxFVT+xQTEajY8eOWL58OczMzODu7g4zMzMAQFZWFrp164Zu3brhl19+gbOzM2JjYxEaGor8/Hy1Y1hZWeklm1KpBAD8888/8PDwUHtOLpeXus/zdg5WKpWYM2cOXn755RLPmZubq/5efJ6KSSQSVd7SSKVShIWF4fjx49izZw+WLl2KWbNm4dSpU/D19X1mLvFEX6SKzF4eSqUSbm5uOHjwYInnivs4ffLJJxgyZAj++ecf/Pvvv5g9ezZ+//139O/fv8Q+Xl5eiI6ORlhYGPbu3Ytx48bhq6++wqFDh5Cfn6/x9+p/37tEIlFl1TbP0473tNf4b1sxIYSqrbR/5ye3VyqVaNeuHQ4dOlRmrie3B7T7OaLqicUNGQ0rKyvUqVOnRPvVq1eRnJyML774Al5eXgDw1M6V/yWTyZ45asrOzg5ubm44efIk2rVrBwAoLCxEREQEWrZsCQBo2LAh5HI5YmNjNb4S06RJEyiVShw6dAhdunTRaJ//atmyJaKjo0s9J5qSyWQAUOIcSCQShISEICQkBB9//DF8fHywbds2TJky5ZnHbNiwIU6ePKnW9uRjfWbXVsuWLZGYmAhTU1PUqlWrzO3q1auHevXqYfLkyXjttdewevXqMosJCwsL9OnTB3369MG7776LBg0a4NKlSxBClPt79XnylIe/vz+OHj2KYcOGqdqOHz8Of39/AEX/zrGxsbh37x7c3d0BACdOnFA7RsuWLfHrr78iNTW1xCi20pTn54iqJxY3ZPS8vb0hk8mwdOlSjB07FpcvX1ab5+RpatWqhZiYGJw/fx6enp6wsbEp9X+IEydOxBdffIG6devC398fixYtUhsdZGNjg2nTpmHy5MlQKpV48cUXkZGRgePHj8Pa2hrDhw8v9bWHDx+OUaNGYcmSJWjWrBnu3LmDpKQkDBw48JnZP/74Y7z00kvw8vLCq6++ChMTE1y8eBGXLl3CvHnzNHr/Pj4+kEgk+Pvvv9GzZ09YWFjgypUr2LdvH7p16wYXFxecOnUKDx48UH2oPcuECRMQHByMBQsWoF+/ftizZw927dpVIdmtra012ve/unTpgqCgIPTr1w9ffvkl6tevj3v37mHnzp3o168fGjVqhOnTp+OVV16Br68v7t69izNnzmDAgAGlHm/NmjVQKBRo3bo1LC0tsX79elhYWMDHxwdKpbLc36vFcnJytMpTXtOnT8fAgQPRsmVLdO7cGTt27MDWrVuxd+9eAEXnrX79+hg2bBgWLlyIjIwMzJo1S+0YQ4cOxVdffYU+ffrgs88+g7e3N+7cuYPff/8dH374Iby9vdW2L8/PEVVThu3yQ6QbpY2W+q9ff/1V1KpVS8jlchEUFCT++usvAUCcO3dOCFF259Pc3FwxYMAAYW9vLwCI1atXl3r8goICMXHiRGFrayvs7e3FlClTxLBhw9QyKZVK8e2334r69esLMzMz4ezsLEJDQ8WhQ4fKzJ2TkyMmT54s3NzchEwmE3Xq1BGrVq0qNfOTHYqFKBp1FBwcLCwsLIStra1o1aqV2sgc/KdzZzE7Ozu19zl37lxRs2ZNIZFIxPDhw0VkZKQIDQ0Vzs7OQi6Xi3r16omlS5eW+R5KO7crV64Unp6ewsLCQvTu3Vt8/fXXFZJdCO07FAshREZGhnjvvfeEu7u7MDMzE15eXmLo0KEiNjZW5OXlicGDBwsvLy8hk8mEu7u7GD9+vKpz75O2bdsmWrduLWxtbYWVlZVo06aNWufg8nyvnjt3TgAQMTExWucp7VzGxMSovWZZr7ts2TLh5+cnzMzMRL169cS6devUjhsdHS1efPFFIZPJRL169cSuXbtKvFZCQoIYNmyYcHJyEnK5XPj5+YkxY8aI9PR0IUTJn+3y/BxR9SMRQoMb4ERERERVBEdLERERkVFhcUNERERGhcUNERERGRUWN0RERGRUWNwQERGRUWFxQ0REREaFxQ0REREZFRY3REREZFRY3BAREZFRYXFDRERERoXFDRERERkVFjdERERkVP4ffjwclDXci/QAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# utilisation d'une métrique plus adaptée aux modèles de marketing : courbe de lift\n",
"\n",
"# Tri des prédictions de probabilités et des vraies valeurs\n",
"sorted_indices = np.argsort(y_pred_prob)[::-1]\n",
"y_pred_prob_sorted = y_pred_prob[sorted_indices]\n",
"y_test_sorted = y_test.iloc[sorted_indices]\n",
"\n",
"# Calcul du gain cumulatif\n",
"cumulative_gain = np.cumsum(y_test_sorted) / np.sum(y_test_sorted)\n",
"\n",
"# Tracé de la courbe de lift\n",
"plt.plot(np.linspace(0, 1, len(cumulative_gain)), cumulative_gain, label='Courbe de lift')\n",
"plt.xlabel('Part de clients identifiés sans modèle ')\n",
"plt.ylabel('Part de clients identifiés avec modèle')\n",
"plt.title('Courbe de Lift')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 126,
"id": "6e7cfb6c-8049-4bd1-8d82-61a2e97b257d",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# look at the distribution of the score \n",
"\n",
"plt.hist(y_pred_prob, bins=20)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 128,
"id": "99f7f70e-c3bb-445e-8889-e7547f6ebd1e",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAq0AAAHFCAYAAADYE8ABAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABoEUlEQVR4nO3dd3xTVf8H8E+aNOkudE86QKBsaClCQWQVAREUBGSDKENFQHkEUZYDQeGHKENlKAJaGfIollFlCALKKHvPttBdumeS8/ujJI+hgxTa3qT9vF+viD29Sb73Jrn305Nzz5UJIQSIiIiIiEyYhdQFEBERERE9DEMrEREREZk8hlYiIiIiMnkMrURERERk8hhaiYiIiMjkMbQSERERkcljaCUiIiIik8fQSkREREQmj6GViIiIiEzeI4XWM2fOYMyYMQgICICVlRXs7OzQpk0bLFq0CGlpafrlnn76achkMshkMlhYWMDe3h4NGjTAiy++iC1btkCr1ZZ4bH9/f/19HrxlZ2c/+prWYNHR0ejcuTMcHR0hk8mwdOnSUpfLzc3F3LlzsX///hK/mzt3LmQyGVJSUqq2WBNw69YtyGQyfPvtt/o23fpX1KZNm8rc3o/L398fo0ePrpLHflT+/v549tlnK/UxZTIZXn/99Ycut3//fshkMoP3b2mv29NPP42nn35a/3N57/vqYuxn1BR9++23kMlkOH78uNSlVNj69evh6uqKrKwsqUt5ZFeuXIFSqcTJkyeNvk9ERASaNm0Ka2tryGQynDp1quoKNEEff/wxtm/fLnUZNZJuf3Dr1i1Jnl9R0Tt88803mDRpEho1aoTp06ejSZMmKCoqwvHjx7Fq1SocOXIEP//8s375wMBAbNy4EQCQk5ODmzdvYvv27XjxxRfRqVMn/Prrr3B0dDR4jrCwMHz22WclntvGxqai5dYKY8eORU5ODn788UfUrVsX/v7+pS6Xm5uLefPmAYDBQZ2AcePG4Zlnnqnw/TZt2oRz585hypQplV8UGWjTpg2OHDmCJk2alLvcihUrDH42hfe9sZ9Rqjy5ubl499138c4778De3l7qch5Zw4YNMWzYMEydOhUHDhx46PLJyckYMWIEnnnmGaxYsQIqlQoNGzashkpNx8cff4yBAweif//+UpdS4/Tp0wdHjhyBp6enJM9fodB65MgRTJw4ET169MD27duhUqn0v+vRowfeeust7Nq1y+A+1tbWePLJJw3axo0bh3Xr1mHs2LF49dVXERERYfD7OnXqlLiPKcjNzTXJ4Hzu3Dm88sor6NWrl9SlVLm8vDxYW1tX+uP6+PjAx8en0h/X1Jnqe7o0Dg4ORu0XHhZqpWBqn1EhBPLz86vks2QqvvvuO6SmpmLcuHFSl2LgUbb966+/jpCQEBw+fBgdOnQod9krV66gqKgIw4cPR+fOnR+3XADms5+oquMD/Y+rqytcXV0le/4KDQ/4+OOPIZPJ8PXXXxsEVh2lUonnnnvOqMcaM2YMevfujc2bN+P27dsVKaNM6enpeOuttxAYGAiVSgU3Nzf07t0bly5dAlD614tA6V8Xjx49GnZ2djh79izCw8Nhb2+Pbt26YcqUKbC1tUVmZmaJ5x88eDDc3d1RVFSkb4uIiED79u1ha2sLOzs79OzZE9HR0Uatz7lz59CvXz/UrVsXVlZWaNWqFb777jv973Xd9Gq1GitXrtQPoyjNrVu39G+0efPm6Zd98OvnxMREvPTSS3B0dIS7uzvGjh2LjIwMg2WEEFixYgVatWoFa2tr1K1bFwMHDsSNGzceuk66r3Ojo6PxwgsvwMHBAY6Ojhg+fDiSk5MNltV9Fb1t2za0bt0aVlZW+h6zhIQEjB8/Hj4+PlAqlQgICMC8efOgVqsNHuPu3bsYNGgQ7O3t4ejoiMGDByMhIaHMuh60adMmtG/fHnZ2drCzs0OrVq2wZs0aAMW9dr/99htu375tMIxFp7CwEB9++CEaN24MlUoFV1dXjBkzpsR6FhUV4T//+Q88PDxgY2ODjh074p9//nnotgT+995dtGgRPvroI9SrVw9WVlYICQnBH3/8Ueo6njx5EgMHDkTdunVRv359AEB+fj5mzpyJgIAAKJVKeHt747XXXkN6enqpz/vzzz+jRYsWsLKyQmBgIJYtW2bw+/z8fLz11lto1aoVHB0d4eTkhPbt2+O///1vmevy1VdfoWHDhlCpVGjSpAl+/PFHg9+X9fl90L+HB5T3vj948CBkMhl++OGHEo+xfv16yGQyHDt2rNznqszPqK5eY1/P0aNHl9pjW9p7WTcEY9WqVQgKCoJKpdLXeenSJbz00ktwd3eHSqVCvXr1MHLkSBQUFBg8RlZWFiZOnAgXFxc4OzvjhRdewN27dw2WiYiIQHh4ODw9PWFtbY2goCDMmDEDOTk5BsvduHEDQ4YMgZeXF1QqFdzd3dGtW7cSX2M/zv5z5cqV6Nu3L+rUqWPQvnnzZrRr1w6Ojo6wsbFBYGAgxo4da7DMw44lAJCWloZJkybB29sbSqUSgYGBmDVrVontVt62v3r1KoYOHQo3NzeoVCoEBQVh+fLlJdYlODgYQUFBWLVqVbnrPHr0aHTs2BFA8fFIJpMZfLvwyy+/oH379rCxsYG9vT169OiBI0eOGDxGefuJ0uTm5uLtt9/WDxd0cnJCSEiIwedKdzw9f/48unXrBltbW7i6uuL1119Hbm6uweMZuy8q6/ggk8mQk5OD7777Tv95020DY2oty507d/Dqq6/C19cXSqUSXl5eGDhwIBITE/XLxMTEYPjw4Qav5+LFiw2GQuo+459++ikWLlwIf39/WFtb4+mnn9b/wTFjxgx4eXnB0dERzz//PJKSkkpd98rcD+vep99//z2CgoJgY2ODli1bYseOHQbLlTU84Pfff0e3bt3g4OAAGxsbhIWFldhnJScn67eh7pgYFhaG33///aHbX08YSa1WCxsbG9GuXTtj7yI6d+4smjZtWubvV61aJQCI77//Xt/m5+cnevfuLYqKigxuGo2m3OfKzMwUTZs2Fba2tmL+/Pli9+7dYuvWreLNN98Ue/fuFUIIsW/fPgFA7Nu3z+C+N2/eFADEunXr9G2jRo0SlpaWwt/fXyxYsED88ccfYvfu3eL06dMCgPjmm28MHuPevXtCpVKJadOm6ds++ugjIZPJxNixY8WOHTvEtm3bRPv27YWtra04f/58uetz6dIlYW9vL+rXry/Wr18vfvvtN/HSSy8JAGLhwoVCCCGSkpLEkSNHBAAxcOBAceTIEXHkyJFSHy8/P1/s2rVLABAvv/yyftlr164JIYSYM2eOACAaNWokZs+eLaKiosSSJUuESqUSY8aMMXisV155RVhaWoq33npL7Nq1S2zatEk0btxYuLu7i4SEhHLXS/c8fn5+Yvr06WL37t1iyZIlwtbWVrRu3VoUFhbql/Xz8xOenp4iMDBQrF27Vuzbt0/8888/Ij4+Xvj6+go/Pz/x1Vdfid9//1188MEHQqVSidGjR+vvn5ubK4KCgoSjo6P44osvxO7du8XkyZNFvXr1Srzeurr+7f333xcAxAsvvCA2b94s9uzZI5YsWSLef/99IYQQ58+fF2FhYcLDw0O/PXXbX6PRiGeeeUbY2tqKefPmiaioKLF69Wrh7e0tmjRpInJzc/XPM2rUKCGTycT06dP1z+Ht7S0cHBzEqFGjyt2euveur6+v6Nixo9i6davYvHmzaNu2rbC0tBSHDx8uddu/8847IioqSmzfvl1otVrRs2dPoVAoxPvvvy/27NkjPvvsM/1rkp+fb/CaeHt7i3r16om1a9eKyMhIMWzYMAFAfPrpp/rl0tPTxejRo8X3338v9u7dK3bt2iXefvttYWFhIb777juDddDV36RJE/HDDz+IX375RTzzzDMCgNi8ebN+udI+v6W9bp07dxadO3cWQjz8fd+6dWsRFhZWYru2bdtWtG3bttxtX9mfUSEq9nqOGjVK+Pn5lXiM0rYJAOHt7S1atGghNm3aJPbu3SvOnTsnTp06Jezs7IS/v79YtWqV+OOPP8SGDRvEoEGDRGZmphBCiHXr1gkAIjAwULzxxhti9+7dYvXq1aJu3bqiS5cuBs/zwQcfiP/7v/8Tv/32m9i/f79YtWqVCAgIKLFco0aNRIMGDcT3338vDhw4ILZu3Sreeustg9f2cfafsbGxAoBYsWKFQfvhw4eFTCYTQ4YMEZGRkWLv3r1i3bp1YsSIEfpljDmW5OXliRYtWghbW1vx2WefiT179oj3339fKBQK0bt3b6O2/fnz54Wjo6No3ry5WL9+vdizZ4946623hIWFhZg7d26JdZo4caJwcXERWq22zPW+du2aWL58uQAgPv74Y3HkyBH9ttq4caMAIMLDw8X27dtFRESECA4OFkqlUhw8eFD/GGXtJ8oyfvx4YWNjI5YsWSL27dsnduzYIT755BPxxRdf6JcZNWqUUCqVol69euKjjz4Se/bsEXPnzhUKhUI8++yz+uUqui8q7fhw5MgRYW1tLXr37q3/vOm2gTG1liYuLk54enoKFxcXsWTJEvH777+LiIgIMXbsWHHx4kUhRPFn3dvbW7i6uopVq1aJXbt2iddff10AEBMnTtQ/lu4z7ufnJ/r27St27NghNmzYINzd3UXDhg3FiBEjxNixY8XOnTvFqlWrhJ2dnejbt69BPVW1H/b39xehoaHip59+EpGRkeLpp58WCoVCXL9+Xb+cbn9w8+ZNfdv3338vZDKZ6N+/v9i2bZv49ddfxbPPPivkcrn4/fff9cv17NlTuLq6iq+//lrs379fbN++XcyePVv8+OOP5W5/gzqNXTAhIUEAEEOGDDH6wR8WWnfu3Gmwgxei+MUAUOI2a9ascp9r/vz5AoCIiooqc5mKhlYAYu3atSUep02bNqJDhw4GbStWrBAAxNmzZ4UQQsTExAiFQiHeeOMNg+WysrKEh4eHGDRoULnrM2TIEKFSqURMTIxBe69evYSNjY1IT0/XtwEQr732WrmPJ4QQycnJAoCYM2dOid/pdlSLFi0yaJ80aZKwsrLS7yh1B+DFixcbLBcbGyusra3Ff/7zn3Jr0D3P1KlTDdp1O9QNGzbo2/z8/IRcLheXL182WHb8+PHCzs5O3L5926D9s88+EwD0O6iVK1cKAOK///2vwXKvvPLKQ0PrjRs3hFwuF8OGDSt3ffr06VNqcPjhhx8EALF161aD9mPHjhkcTC9evFju9jA2tHp5eYm8vDx9e2ZmpnBychLdu3cvsY6zZ882eAxdqHvwtY+IiBAAxNdff61v8/PzEzKZTJw6dcpg2R49eggHBweRk5NTap1qtVoUFRWJl19+WbRu3drgdwCEtbW1wR88arVaNG7cWDRo0EDf9iihVYjy3/e6HXB0dLS+7Z9//hEASuzUH1QVn9GKvJ4VDa2Ojo4iLS3NoL1r166iTp06IikpqcyadNto0qRJBu2LFi0SAER8fHyp99NqtaKoqEgcOHBAABCnT58WQgiRkpIiAIilS5eW+ZyPu//UvXePHj1q0K7bR/z7tXmQMccSXYfLTz/9ZNC+cOFCAUDs2bNH31bWtu/Zs6fw8fERGRkZBu2vv/66sLKyKrH8N998IwDoQ1JZdJ+Tf//Bp9FohJeXl2jevLlBB1BWVpZwc3MzOJ6VtZ8oS7NmzUT//v3LXUZ3PP38888N2j/66CMBQBw6dEgIUfF9UWnHByGEsLW1LXXfaUytpRk7dqywtLQUFy5cKHOZGTNmCADi77//NmifOHGikMlk+jp1n/GWLVsavBZLly4VAMRzzz1ncP8pU6YIAAbvk6raD7u7u+v/WBWiOPdZWFiIBQsW6NseDK05OTnCycmpRLDWaDSiZcuWIjQ0VN9mZ2cnpkyZUmptxpJ0yqvi7VRSx44dcezYMYPbpEmTyn2snTt3omHDhujevXul1jhgwIASbWPGjMHhw4dx+fJlfdu6devQtm1bNGvWDACwe/duqNVqjBw5Emq1Wn+zsrJC586dH/oV5969e9GtWzf4+voatI8ePRq5ubklvtKpLA8O72jRogXy8/P1X0/s2LEDMpkMw4cPN1gvDw8PtGzZ0ugztIcNG2bw86BBg6BQKLBv374Sz//gSQQ7duxAly5d4OXlZVCDbryg7mSFffv2wd7evsQ6DR069KH1RUVFQaPR4LXXXjNqfR60Y8cO1KlTB3379jWosVWrVvDw8NBvJ936lrU9jPXCCy/AyspK/7O9vT369u2LP//8ExqNxmDZB9/Te/fuBYASQ0VefPFF2NralviKp2nTpmjZsqVB29ChQ5GZmWlwhvPmzZsRFhYGOzs7KBQKWFpaYs2aNbh48WKJ+rt16wZ3d3f9z3K5HIMHD8a1a9cQFxdnxBZ4NC+99BLc3NwMvpL94osv4OrqisGDB5d736r8jFbk9TRW165dUbduXf3Pubm5OHDgAAYNGmTUGLXS9g0ADIZ33bhxA0OHDoWHhwfkcjksLS314yp1r7uTkxPq16+PTz/9FEuWLEF0dHSJmWQed/+pG7bg5uZm0N62bVsAxZ+vn376CXfu3ClxX2OOJXv37oWtrS0GDhxo0K77DD34mXlw2+fn5+OPP/7A888/DxsbG4N17N27N/Lz83H06FGDx9CtS2k1P8zly5dx9+5djBgxAhYW/zvs29nZYcCAATh69GiJr+lLO/aVJjQ0FDt37sSMGTOwf/9+5OXllbnsg/s53b5Ytx+s6L6otONDZdX6bzt37kSXLl0QFBRU5jJ79+5FkyZNEBoaatA+evRoCCH066bTu3dvg9dC99h9+vQxWE7XHhMTY9BeFfvhLl26GJy06O7uDjc3t3KHcB4+fBhpaWkYNWqUwftYq9XimWeewbFjx/TDg0JDQ/Htt9/iww8/xNGjRw2GUhrL6NDq4uICGxsb3Lx5s8JPUhbdhvDy8jJod3R0REhIiMHtwWUelJycXOkn0tjY2MDBwaFE+7Bhw6BSqfRjYC9cuIBjx45hzJgx+mV041zatm0LS0tLg1tERMRDp5ZKTU0t9ew83XZITU191NUql7Ozs8HPurHLug93YmIihBBwd3cvsV5Hjx41esosDw8Pg58VCgWcnZ1LrFdp2yAxMRG//vpriedv2rQpAOhrSE1NNQhCZT13aXTjTh/1PZWYmIj09HQolcoSdSYkJBjUWFpNuu1hrNLWycPDA4WFhSWmintwm6ampkKhUJQILjKZDB4eHiVek7KeS/dYALBt2zYMGjQI3t7e2LBhA44cOYJjx45h7NixyM/PN7r+fz9mVVCpVBg/fjw2bdqE9PR0JCcn46effsK4ceNKHbf/b1X5Ga3I62msB2u9d+8eNBqN0e/xh+0bsrOz0alTJ/z999/48MMPsX//fhw7dgzbtm0zWE4mk+GPP/5Az549sWjRIrRp0waurq6YPHmyfmqqx91/6p7r38EfAJ566ils375dH4h9fHzQrFkzgzGNxhxLUlNT4eHhUWLssJubGxQKxUP3Y6mpqVCr1fjiiy9KrF/v3r0BoMQ66tbF2KD14POVVgdQ/H7VarW4d+9euTWXZdmyZXjnnXewfft2dOnSBU5OTujfvz+uXr1qsFxp+7QHP+MV3RdV9Ax2Y2t9kLHviYrsD5ycnAx+ViqV5bY/uN+siv1waccclUpV7ntO91kdOHBgiffywoULIYTQT4UaERGBUaNGYfXq1Wjfvj2cnJwwcuTIUs8zKYvRXTlyuRzdunXDzp07ERcXVykB8ZdffoFMJsNTTz312I/l6ur60B4Z3Yf+wYHyZe0Ayzphom7duujXrx/Wr1+PDz/8EOvWrYOVlRVeeukl/TIuLi4AgC1btsDPz8/o9dBxdnZGfHx8iXZdD4Lu8aubi4sLZDIZDh48WOpB/WEHep2EhAR4e3vrf1ar1UhNTS3xoSntNXBxcUGLFi3w0UcflfrYup2Es7NzqSc0GfMB0e004+LiSvSkGUN3ssqDs2no6P6a1a1vWdvDWKWtU0JCApRKJezs7AzaH9ymzs7OUKvVSE5ONjhYCCGQkJCg75162HP9e302bNiAgIAAREREGDzfg5+9ijxmVZk4cSI++eQTrF27Fvn5+VCr1ZgwYcJD71eVn1FjXk8rK6tSt6ex+zMnJyfI5fJK68neu3cv7t69i/379xuctV7ayXx+fn76ExqvXLmCn376CXPnzkVhYSFWrVr12PtP3f3T0tJKBIl+/fqhX79+KCgowNGjR7FgwQIMHToU/v7+aN++vVHHEmdnZ/z9998QQhhs16SkJKjV6hKv/YPbvm7dupDL5RgxYkSZ3+YEBAQY/Kw78D/K+0r3GSrr/WphYWHQE1xazWWxtbXFvHnzMG/ePCQmJup7Mvv27Wtw4lpp+/gHP+MV3RdVdG5tY2t9kLHvieo8ZlfFfvhR6Nbriy++KHN2F13nkYuLC5YuXYqlS5ciJiYGv/zyC2bMmIGkpKQyj5UPqtDwgJkzZ0IIgVdeeQWFhYUlfl9UVIRff/3VqMdat24ddu7ciZdeegn16tWrSBml6tWrF65cuVKiC/7fdGfanjlzxqD9l19+qfDzjRkzBnfv3kVkZCQ2bNiA559/3uAs1Z49e0KhUOD69esleo11t/J069ZNfxD4t/Xr18PGxuaRpgR7sGfkUTz77LMQQuDOnTulrlPz5s2Nehzd3L06P/30E9RqtVHzaD777LM4d+4c6tevX2oNutDapUsXZGVllXh9N23a9NDnCA8Ph1wux8qVK8tdrqy/Qp999lmkpqZCo9GUWmOjRo0A/G/e0LK2h7G2bdtm8JdzVlYWfv31V3Tq1Alyubzc+3br1g1A8Q7u37Zu3YqcnBz973XOnz+P06dPG7Rt2rQJ9vb2aNOmDYDig4lSqTTYUSYkJJQ5e8Aff/xhcBauRqNBREQE6tev/9h/ID/sfe/p6YkXX3wRK1aswKpVq9C3b1+j9klV8RnVMeb19Pf3R1JSksF2KywsxO7du416Dmtra3Tu3BmbN2+ulIuK6F7rB/9w/eqrr8q9X8OGDfHee++hefPm+q81H3f/2bhxYwDA9evXy1xGpVKhc+fOWLhwIQDoZyUw5ljSrVs3ZGdnl5jAfv369frfl8fGxgZdunRBdHQ0WrRoUer6PfjH2o0bN2BhYaHfd1REo0aN4O3tjU2bNhkMy8vJycHWrVv1Mwo8Lnd3d4wePRovvfQSLl++XGLIwYP7Od2+WLcfrOi+qCwP6x00ptZ/69WrF/bt22cwJPBB3bp1w4ULF0pcBEI3E0mXLl2Mqt1YVbEffhRhYWGoU6cOLly4UOZnVddb/G/16tXD66+/jh49elTowhkVmqe1ffv2WLlyJSZNmoTg4GBMnDgRTZs2RVFREaKjo/H111+jWbNm6Nu3r/4+eXl5+rE5eXl5uHHjBrZv344dO3agc+fOD53Cw1hTpkxBREQE+vXrhxkzZiA0NBR5eXk4cOAAnn32WXTp0gUeHh7o3r07FixYgLp168LPzw9//PGH/uuriggPD4ePjw8mTZqEhIQEg6EBQPEBZf78+Zg1axZu3LiBZ555BnXr1kViYiL++ecf/V98ZZkzZ45+7Obs2bPh5OSEjRs34rfffsOiRYtKXJDBGPb29vDz88N///tfdOvWDU5OTnBxcanQROdhYWF49dVXMWbMGBw/fhxPPfUUbG1tER8fj0OHDqF58+aYOHHiQx9n27ZtUCgU6NGjB86fP4/3338fLVu2xKBBgx563/nz5yMqKgodOnTA5MmT0ahRI+Tn5+PWrVuIjIzEqlWr4OPjg5EjR+L//u//MHLkSHz00Ud44oknEBkZadRB3d/fH++++y4++OAD5OXl6acBu3DhAlJSUvSvXfPmzbFt2zasXLkSwcHBsLCwQEhICIYMGYKNGzeid+/eePPNNxEaGgpLS0vExcVh37596NevH55//nkEBQVh+PDhWLp0KSwtLdG9e3ecO3cOn332WalDU8oil8vRo0cPTJs2DVqtFgsXLkRmZma57zGdHj16oGfPnnjnnXeQmZmJsLAwnDlzBnPmzEHr1q0xYsQIg+W9vLzw3HPPYe7cufD09MSGDRsQFRWFhQsX6g98uqloJk2ahIEDByI2NhYffPABPD09S/0qzsXFBV27dsX7778PW1tbrFixApcuXSox7dWjMOZ9/+abb6Jdu3YAiv+gNkZVfEZ1jHk9Bw8ejNmzZ2PIkCGYPn068vPzsWzZsgqNeV2yZAk6duyIdu3aYcaMGWjQoAESExPxyy+/4KuvvqrQpPwdOnRA3bp1MWHCBMyZMweWlpbYuHFjiQPrmTNn8Prrr+PFF1/EE088AaVSib179+LMmTOYMWMGgMfff7Zr1w7W1tY4evSowVjc2bNnIy4uDt26dYOPjw/S09Px+eefG4y9NeZYMnLkSCxfvhyjRo3CrVu30Lx5cxw6dAgff/wxevfubdS5FZ9//jk6duyITp06YeLEifD390dWVhauXbuGX3/9tURoPnr0KFq1alWiR9QYFhYWWLRoEYYNG4Znn30W48ePR0FBAT799FOkp6fjk08+qfBj6rRr1w7PPvssWrRogbp16+LixYv4/vvvSwRhpVKJxYsXIzs7G23btsXhw4fx4YcfolevXvppuiq6LypL8+bNsX//fvz666/w9PSEvb09GjVqZHStD5o/fz527tyJp556Cu+++y6aN2+O9PR07Nq1C9OmTUPjxo0xdepUrF+/Hn369MH8+fPh5+eH3377DStWrMDEiRMr/QIP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EQcOHND/btSoUaJz584Gy+/fv1+0bt1aKJVK4e/vL1auXFnNFZunimznzp07CwAlbqNGjar+ws1QRd/T/8bQaryKbueLFy+K7t27C2tra+Hj4yOmTZsmcnNzq7lq81PR7bxs2TLRpEkTYW1tLTw9PcWwYcNEXFxcNVdtXvbt21fuPpfHwppJJgS/fyAiIiIi08YxrURERERk8hhaiYiIiMjkMbQSERERkcljaCUiIiIik8fQSkREREQmj6GViIiIiEweQysRERERmTyGViIiIiIyeQytRESVQKPRoEOHDhgwYIBBe0ZGBnx9ffHee+9JVBkRUc3AK2IREVWSq1evolWrVvj6668xbNgwAMDIkSNx+vRpHDt2DEqlUuIKiYjMF0MrEVElWrZsGebOnYtz587h2LFjePHFF/HPP/+gVatWUpdGRGTWGFqJiCqREAJdu3aFXC7H2bNn8cYbb3BoABFRJWBoJSKqZJcuXUJQUBCaN2+OkydPQqFQSF0SEZHZ44lYRESVbO3atbCxscHNmzcRFxcndTlERDUCe1qJiCrRkSNH8NRTT2Hnzp1YtGgRNBoNfv/9d8hkMqlLIyIya+xpJSKqJHl5eRg1ahTGjx+P7t27Y/Xq1Th27Bi++uorqUsjIjJ7DK1ERJVkxowZ0Gq1WLhwIQCgXr16WLx4MaZPn45bt25JWxwRkZnj8AAiokpw4MABdOvWDfv370fHjh0NftezZ0+o1WoOEyAiegwMrURERERk8jg8gIiIiIhMHkMrEREREZk8hlYiIiIiMnkMrURERERk8hhaiYiIiMjkMbQSERERkcljaCUiIiIik8fQSkREREQmj6GViIiIiEweQysRERERmTyGViIiIiIyeQytRERERGTy/h/+iYVZmWks6wAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# number of observations\n",
"N = len(y_pred_prob)\n",
"\n",
"# sort the data in ascending order \n",
"y_pred_prob_sorted = np.sort(y_pred_prob) \n",
"\n",
"# get the cdf values of y \n",
"steps = np.arange(N) / N\n",
" \n",
"# plotting \n",
"plt.xlabel('X') \n",
"plt.ylabel('P(score<=X)') \n",
" \n",
"plt.title('CDF curve of the predicted probability of purchase (score) for sports companies') \n",
" \n",
"plt.plot(y_pred_prob_sorted, steps) \n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 178,
"id": "dd7a4a9c-d7e3-4747-ae59-b2a5a0b77260",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-9 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-9 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-9 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-9 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-9 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-9 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-9 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-9 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-9 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-9 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-9 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-9 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-9 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-9 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-9 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-9 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-9 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-9 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-9 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-9 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-9 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-9 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-9 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-9 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-9 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-9 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-9\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=3, random_state=0)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-21\" type=\"checkbox\" checked><label for=\"sk-estimator-id-21\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=3, random_state=0)</pre></div> </div></div></div></div>"
],
"text/plain": [
"KMeans(n_clusters=3, random_state=0)"
]
},
"execution_count": 178,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# K-means clustering \n",
"\n",
"kmeans = KMeans(n_clusters=3, random_state=0)\n",
"\n",
"kmeans.fit(y_pred_prob.reshape(-1,1))"
]
},
{
"cell_type": "code",
"execution_count": 179,
"id": "10b6ece7-adcf-41c0-884b-a4aef42af378",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 0, 2, ..., 0, 2, 0], dtype=int32)"
]
},
"execution_count": 179,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_clusters = kmeans.predict(y_pred_prob.reshape(-1,1))\n",
"y_clusters"
]
},
{
"cell_type": "code",
"execution_count": 180,
"id": "e4b3b16e-03b8-4883-9788-cb7296fe56cd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"seuil cluster 0 : 0.3666817620198657 (55.46%)\n",
"seuil cluster 2 : 0.7518681604748351 (34.86%)\n",
"seuil cluster 1 : 1.0 (9.68%)\n"
]
}
],
"source": [
"# seuils des clusters et part de clients dans chacun d'eux\n",
"\n",
"print(f\"seuil cluster 0 : {y_pred_prob[y_clusters==0].max()} ({round(100 * (y_clusters==0).mean(), 2)}%)\")\n",
"print(f\"seuil cluster 2 : {y_pred_prob[y_clusters==2].max()} ({round(100 * (y_clusters==2).mean(), 2)}%)\")\n",
"print(f\"seuil cluster 1 : {y_pred_prob[y_clusters==1].max()} ({round(100* (y_clusters==1).mean(), 2)}%)\")"
]
},
{
"cell_type": "code",
"execution_count": 181,
"id": "3e404a5e-6734-4d98-8853-48b09c96e7e0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>nb_tickets</th>\n",
" <th>nb_purchases</th>\n",
" <th>total_amount</th>\n",
" <th>nb_suppliers</th>\n",
" <th>vente_internet_max</th>\n",
" <th>purchase_date_min</th>\n",
" <th>purchase_date_max</th>\n",
" <th>nb_tickets_internet</th>\n",
" <th>is_email_true</th>\n",
" <th>opt_in</th>\n",
" <th>gender_female</th>\n",
" <th>gender_male</th>\n",
" <th>nb_campaigns</th>\n",
" <th>nb_campaigns_opened</th>\n",
" <th>cluster</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>4.0</td>\n",
" <td>1.0</td>\n",
" <td>100.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.177187</td>\n",
" <td>5.177187</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>55.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>426.265613</td>\n",
" <td>426.265613</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>17.0</td>\n",
" <td>1.0</td>\n",
" <td>80.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>436.033437</td>\n",
" <td>436.033437</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4.0</td>\n",
" <td>1.0</td>\n",
" <td>120.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>5.196412</td>\n",
" <td>5.196412</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>34.0</td>\n",
" <td>2.0</td>\n",
" <td>416.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>478.693148</td>\n",
" <td>115.631470</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" nb_tickets nb_purchases total_amount nb_suppliers vente_internet_max \\\n",
"0 4.0 1.0 100.0 1.0 0.0 \n",
"1 1.0 1.0 55.0 1.0 0.0 \n",
"2 17.0 1.0 80.0 1.0 0.0 \n",
"3 4.0 1.0 120.0 1.0 0.0 \n",
"4 34.0 2.0 416.0 1.0 0.0 \n",
"\n",
" purchase_date_min purchase_date_max nb_tickets_internet is_email_true \\\n",
"0 5.177187 5.177187 0.0 True \n",
"1 426.265613 426.265613 0.0 True \n",
"2 436.033437 436.033437 0.0 True \n",
"3 5.196412 5.196412 0.0 True \n",
"4 478.693148 115.631470 0.0 True \n",
"\n",
" opt_in gender_female gender_male nb_campaigns nb_campaigns_opened \\\n",
"0 False 1 0 0.0 0.0 \n",
"1 True 0 1 0.0 0.0 \n",
"2 True 1 0 0.0 0.0 \n",
"3 False 1 0 0.0 0.0 \n",
"4 False 1 0 0.0 0.0 \n",
"\n",
" cluster \n",
"0 2 \n",
"1 0 \n",
"2 2 \n",
"3 2 \n",
"4 1 "
]
},
"execution_count": 181,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# les individus des clusters sont-ils semblables ? def des marketing personae\n",
"\n",
"X_test_clustered = X_test.assign(cluster = y_clusters)\n",
"X_test_clustered.head()"
]
},
{
"cell_type": "code",
"execution_count": 182,
"id": "b6f4638d-23c4-427a-88a4-b09528b3f91b",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>nb_tickets</th>\n",
" <th>nb_purchases</th>\n",
" <th>total_amount</th>\n",
" <th>nb_suppliers</th>\n",
" <th>vente_internet_max</th>\n",
" <th>purchase_date_min</th>\n",
" <th>purchase_date_max</th>\n",
" <th>nb_tickets_internet</th>\n",
" <th>is_email_true</th>\n",
" <th>opt_in</th>\n",
" <th>gender_female</th>\n",
" <th>gender_male</th>\n",
" <th>nb_campaigns</th>\n",
" <th>nb_campaigns_opened</th>\n",
" </tr>\n",
" <tr>\n",
" <th>cluster</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>7.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>59.000</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>232.198352</td>\n",
" <td>225.296614</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>3.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>12.0</td>\n",
" <td>4.0</td>\n",
" <td>205.075</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>416.542519</td>\n",
" <td>60.404957</td>\n",
" <td>4.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>16.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" nb_tickets nb_purchases total_amount nb_suppliers \\\n",
"cluster \n",
"0 0.0 0.0 0.000 0.0 \n",
"2 2.0 1.0 59.000 1.0 \n",
"1 12.0 4.0 205.075 1.0 \n",
"\n",
" vente_internet_max purchase_date_min purchase_date_max \\\n",
"cluster \n",
"0 0.0 550.000000 550.000000 \n",
"2 1.0 232.198352 225.296614 \n",
"1 1.0 416.542519 60.404957 \n",
"\n",
" nb_tickets_internet is_email_true opt_in gender_female \\\n",
"cluster \n",
"0 0.0 1.0 1.0 0.0 \n",
"2 1.0 1.0 0.0 0.0 \n",
"1 4.0 1.0 0.0 0.0 \n",
"\n",
" gender_male nb_campaigns nb_campaigns_opened \n",
"cluster \n",
"0 0.0 7.0 0.0 \n",
"2 1.0 3.0 0.0 \n",
"1 1.0 16.0 1.0 "
]
},
"execution_count": 182,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_test_clustered.groupby(\"cluster\").median().iloc[[0,2,1], :]"
]
},
{
"cell_type": "code",
"execution_count": 183,
"id": "f80474be-c897-47f9-8fdd-f2fb8d724ee2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>nb_tickets</th>\n",
" <th>nb_purchases</th>\n",
" <th>total_amount</th>\n",
" <th>nb_suppliers</th>\n",
" <th>vente_internet_max</th>\n",
" <th>purchase_date_min</th>\n",
" <th>purchase_date_max</th>\n",
" <th>nb_tickets_internet</th>\n",
" <th>is_email_true</th>\n",
" <th>opt_in</th>\n",
" <th>gender_female</th>\n",
" <th>gender_male</th>\n",
" <th>nb_campaigns</th>\n",
" <th>nb_campaigns_opened</th>\n",
" </tr>\n",
" <tr>\n",
" <th>cluster</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.132484</td>\n",
" <td>0.067283</td>\n",
" <td>0.950238</td>\n",
" <td>0.025292</td>\n",
" <td>0.007149</td>\n",
" <td>545.999770</td>\n",
" <td>545.961714</td>\n",
" <td>0.015142</td>\n",
" <td>1.000000</td>\n",
" <td>0.522619</td>\n",
" <td>0.240389</td>\n",
" <td>0.431319</td>\n",
" <td>12.712442</td>\n",
" <td>2.241721</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2.956270</td>\n",
" <td>1.396973</td>\n",
" <td>77.660347</td>\n",
" <td>0.999164</td>\n",
" <td>0.659682</td>\n",
" <td>235.984535</td>\n",
" <td>229.598802</td>\n",
" <td>1.620787</td>\n",
" <td>0.991373</td>\n",
" <td>0.255246</td>\n",
" <td>0.258321</td>\n",
" <td>0.558162</td>\n",
" <td>10.610967</td>\n",
" <td>2.741799</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>42.274898</td>\n",
" <td>10.682943</td>\n",
" <td>1859.028185</td>\n",
" <td>1.481824</td>\n",
" <td>0.750376</td>\n",
" <td>386.850491</td>\n",
" <td>96.427147</td>\n",
" <td>12.382663</td>\n",
" <td>0.973220</td>\n",
" <td>0.163261</td>\n",
" <td>0.197892</td>\n",
" <td>0.609378</td>\n",
" <td>19.805442</td>\n",
" <td>7.528286</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" nb_tickets nb_purchases total_amount nb_suppliers \\\n",
"cluster \n",
"0 0.132484 0.067283 0.950238 0.025292 \n",
"2 2.956270 1.396973 77.660347 0.999164 \n",
"1 42.274898 10.682943 1859.028185 1.481824 \n",
"\n",
" vente_internet_max purchase_date_min purchase_date_max \\\n",
"cluster \n",
"0 0.007149 545.999770 545.961714 \n",
"2 0.659682 235.984535 229.598802 \n",
"1 0.750376 386.850491 96.427147 \n",
"\n",
" nb_tickets_internet is_email_true opt_in gender_female \\\n",
"cluster \n",
"0 0.015142 1.000000 0.522619 0.240389 \n",
"2 1.620787 0.991373 0.255246 0.258321 \n",
"1 12.382663 0.973220 0.163261 0.197892 \n",
"\n",
" gender_male nb_campaigns nb_campaigns_opened \n",
"cluster \n",
"0 0.431319 12.712442 2.241721 \n",
"2 0.558162 10.610967 2.741799 \n",
"1 0.609378 19.805442 7.528286 "
]
},
"execution_count": 183,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_test_clustered.groupby(\"cluster\").mean().iloc[[0,2,1], :]"
]
},
{
"cell_type": "markdown",
"id": "d2d5aca0-7e8b-4039-9bb2-ff5011c436a6",
"metadata": {},
"source": [
"## Random forest"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "da8873e5-c4e7-4580-8567-70e411c029ab",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>nb_tickets</th>\n",
" <th>nb_purchases</th>\n",
" <th>total_amount</th>\n",
" <th>nb_suppliers</th>\n",
" <th>vente_internet_max</th>\n",
" <th>purchase_date_min</th>\n",
" <th>purchase_date_max</th>\n",
" <th>nb_tickets_internet</th>\n",
" <th>is_email_true</th>\n",
" <th>opt_in</th>\n",
" <th>gender_female</th>\n",
" <th>gender_male</th>\n",
" <th>nb_campaigns</th>\n",
" <th>nb_campaigns_opened</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>43000</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>14.0</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>183923</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>19.0</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97373</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.0</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>66956</th>\n",
" <td>7.0</td>\n",
" <td>2.0</td>\n",
" <td>254.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>378.343062</td>\n",
" <td>370.453947</td>\n",
" <td>7.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116487</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>5.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83146</th>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>35.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>37.474040</td>\n",
" <td>37.474040</td>\n",
" <td>1.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>9.0</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>223586</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>23.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56489</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>4.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>141236</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>550.000000</td>\n",
" <td>550.000000</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>6.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6999</th>\n",
" <td>2.0</td>\n",
" <td>1.0</td>\n",
" <td>20.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>171.446921</td>\n",
" <td>171.446921</td>\n",
" <td>0.0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10000 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" nb_tickets nb_purchases total_amount nb_suppliers \\\n",
"43000 0.0 0.0 0.0 0.0 \n",
"183923 0.0 0.0 0.0 0.0 \n",
"97373 0.0 0.0 0.0 0.0 \n",
"66956 7.0 2.0 254.0 1.0 \n",
"116487 0.0 0.0 0.0 0.0 \n",
"... ... ... ... ... \n",
"83146 1.0 1.0 35.0 1.0 \n",
"223586 0.0 0.0 0.0 0.0 \n",
"56489 0.0 0.0 0.0 0.0 \n",
"141236 0.0 0.0 0.0 0.0 \n",
"6999 2.0 1.0 20.0 1.0 \n",
"\n",
" vente_internet_max purchase_date_min purchase_date_max \\\n",
"43000 0.0 550.000000 550.000000 \n",
"183923 0.0 550.000000 550.000000 \n",
"97373 0.0 550.000000 550.000000 \n",
"66956 1.0 378.343062 370.453947 \n",
"116487 0.0 550.000000 550.000000 \n",
"... ... ... ... \n",
"83146 1.0 37.474040 37.474040 \n",
"223586 0.0 550.000000 550.000000 \n",
"56489 0.0 550.000000 550.000000 \n",
"141236 0.0 550.000000 550.000000 \n",
"6999 0.0 171.446921 171.446921 \n",
"\n",
" nb_tickets_internet is_email_true opt_in gender_female \\\n",
"43000 0.0 True True 0 \n",
"183923 0.0 True True 0 \n",
"97373 0.0 True False 0 \n",
"66956 7.0 True False 0 \n",
"116487 0.0 True False 1 \n",
"... ... ... ... ... \n",
"83146 1.0 True False 0 \n",
"223586 0.0 True True 0 \n",
"56489 0.0 True True 0 \n",
"141236 0.0 True False 0 \n",
"6999 0.0 True True 1 \n",
"\n",
" gender_male nb_campaigns nb_campaigns_opened \n",
"43000 1 14.0 12.0 \n",
"183923 1 19.0 11.0 \n",
"97373 0 7.0 2.0 \n",
"66956 1 0.0 0.0 \n",
"116487 0 5.0 0.0 \n",
"... ... ... ... \n",
"83146 1 9.0 3.0 \n",
"223586 1 23.0 1.0 \n",
"56489 1 4.0 0.0 \n",
"141236 1 6.0 0.0 \n",
"6999 0 0.0 0.0 \n",
"\n",
"[10000 rows x 14 columns]"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train_subsample"
]
},
{
"cell_type": "markdown",
"id": "fcbb8bea-e9d3-4fd4-8b47-7e796c788a1f",
"metadata": {},
"source": [
"### Preprocessing"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "55e0c6d8-9e98-47be-9d5d-41e06505ceba",
"metadata": {},
"outputs": [],
"source": [
"# no need to standardize variables in a random forest\n",
"# we just encode categorical variables\n",
"\n",
"categorical_features = ['opt_in', 'is_email_true'] \n",
"\n",
"# Transformer for the categorical features\n",
"categorical_transformer = Pipeline(steps=[\n",
" #(\"imputer\", SimpleImputer(strategy=\"most_frequent\")), # Impute missing values with the most frequent\n",
" (\"onehot\", OneHotEncoder(handle_unknown='ignore', sparse_output=False))\n",
"])\n",
"\n",
"preproc = ColumnTransformer(\n",
" transformers=[\n",
" (\"cat\", categorical_transformer, categorical_features)\n",
" ]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "27af28da-d2bb-4eff-b842-18cec9740c84",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-2 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-2 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-2 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-2 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-2 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-2 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-2 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-2 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-2 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-2 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-2 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-2 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-2 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-2 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-2 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-2 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;])])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;&nbsp;ColumnTransformer<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.compose.ColumnTransformer.html\">?<span>Documentation for ColumnTransformer</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></label><div class=\"sk-toggleable__content \"><pre>ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;])])</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">cat</label><div class=\"sk-toggleable__content \"><pre>[&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" ><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;OneHotEncoder<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.OneHotEncoder.html\">?<span>Documentation for OneHotEncoder</span></a></label><div class=\"sk-toggleable__content \"><pre>OneHotEncoder(handle_unknown=&#x27;ignore&#x27;, sparse_output=False)</pre></div> </div></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"ColumnTransformer(transformers=[('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in', 'is_email_true'])])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preproc"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0cb46acb-647f-469d-b5e1-510bf1283196",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "1ce9acf4-3514-4056-a71a-c7654e25b9de",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "dfdd4601-4866-4102-b620-4f10648e7981",
"metadata": {},
"source": [
"### Pipeline"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "eeefae73-afe7-4441-a04c-bd6a04beedd2",
"metadata": {},
"outputs": [],
"source": [
"# Define models and parameters for GridSearch\n",
"model = {\n",
" 'model': RandomForestClassifier(),\n",
" 'params': {\n",
" 'randforest__n_estimators': [100, 150, 200, 250, 300],\n",
" 'randforest__max_depth': [None, 15, 20, 25, 30, 35, 40],\n",
" }\n",
" }\n",
"\n",
"# Test each model using GridSearchCV\n",
"pipe = Pipeline(steps=[('preprocessor', preproc), ('randforest', model['model'])])\n",
"clf = GridSearchCV(pipe, model['params'], cv=3)\n",
"clf.fit(X_train, y_train)\n",
"\n",
"print(f\"Model: {model['model']}\")\n",
"print(f\"Best parameters: {clf.best_params_}\")\n",
"print('Best classification accuracy in train is: {}'.format(clf.best_score_))\n",
"print('Classification accuracy on test is: {}'.format(clf.score(X_test, y_test)))\n",
"print(\"------\")"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "2a88f13b-05bc-4a70-b08b-8b07c118cedc",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-7 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-7 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-7 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-7 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-7 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-7 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-7 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-7 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-7 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-7 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-7 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-7 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-7 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-7 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-7 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-7 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-7 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-7 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-7 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-7 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-7 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-7 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-7 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-7 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-7 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-7\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;random_forest&#x27;,\n",
" RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))])</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-27\" type=\"checkbox\" ><label for=\"sk-estimator-id-27\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;&nbsp;Pipeline<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.pipeline.Pipeline.html\">?<span>Documentation for Pipeline</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></label><div class=\"sk-toggleable__content \"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;random_forest&#x27;,\n",
" RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-28\" type=\"checkbox\" ><label for=\"sk-estimator-id-28\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;preprocessor: ColumnTransformer<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.compose.ColumnTransformer.html\">?<span>Documentation for preprocessor: ColumnTransformer</span></a></label><div class=\"sk-toggleable__content \"><pre>ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;])])</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-29\" type=\"checkbox\" ><label for=\"sk-estimator-id-29\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">cat</label><div class=\"sk-toggleable__content \"><pre>[&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-30\" type=\"checkbox\" ><label for=\"sk-estimator-id-30\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;OneHotEncoder<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.OneHotEncoder.html\">?<span>Documentation for OneHotEncoder</span></a></label><div class=\"sk-toggleable__content \"><pre>OneHotEncoder(handle_unknown=&#x27;ignore&#x27;, sparse_output=False)</pre></div> </div></div></div></div></div></div></div></div></div><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-31\" type=\"checkbox\" ><label for=\"sk-estimator-id-31\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;RandomForestClassifier<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a></label><div class=\"sk-toggleable__content \"><pre>RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539})</pre></div> </div></div></div></div></div></div>"
],
"text/plain": [
"Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in',\n",
" 'is_email_true'])])),\n",
" ('random_forest',\n",
" RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))])"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Pipeline - on joue sur : max_depth\n",
"\n",
"param_grid = {\"random_forest__max_depth\" : [None, 10, 20, 40, 50, 60]}\n",
"\n",
"pipeline = Pipeline(steps=[\n",
" ('preprocessor', preproc),\n",
" ('random_forest', RandomForestClassifier(bootstrap = False, class_weight = weight_dict,\n",
" )) \n",
"])\n",
"\n",
"pipeline.set_output(transform=\"pandas\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "494dca83-4d60-4e49-8689-7d7ac612bb83",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'estimator': DecisionTreeClassifier(),\n",
" 'n_estimators': 100,\n",
" 'estimator_params': ('criterion',\n",
" 'max_depth',\n",
" 'min_samples_split',\n",
" 'min_samples_leaf',\n",
" 'min_weight_fraction_leaf',\n",
" 'max_features',\n",
" 'max_leaf_nodes',\n",
" 'min_impurity_decrease',\n",
" 'random_state',\n",
" 'ccp_alpha',\n",
" 'monotonic_cst'),\n",
" 'bootstrap': True,\n",
" 'oob_score': False,\n",
" 'n_jobs': None,\n",
" 'random_state': None,\n",
" 'verbose': 0,\n",
" 'warm_start': False,\n",
" 'class_weight': None,\n",
" 'max_samples': None,\n",
" 'criterion': 'gini',\n",
" 'max_depth': None,\n",
" 'min_samples_split': 2,\n",
" 'min_samples_leaf': 1,\n",
" 'min_weight_fraction_leaf': 0.0,\n",
" 'max_features': 'sqrt',\n",
" 'max_leaf_nodes': None,\n",
" 'min_impurity_decrease': 0.0,\n",
" 'monotonic_cst': None,\n",
" 'ccp_alpha': 0.0}"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RandomForestClassifier().__dict__"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "ee7cbc1c-7c31-4111-82a3-995141e2f13f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-8 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-8 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-8 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-8 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-8 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-8 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-8 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-8 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-8 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-8 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-8 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-8 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-8 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-8 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-8 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-8 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-8 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-8 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-8 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-8 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-8 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-8 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-8 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-8 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-8 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-8\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;random_forest&#x27;,\n",
" RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))]),\n",
" param_grid={&#x27;random_forest__max_depth&#x27;: [None, 10, 20, 40, 50,\n",
" 60]},\n",
" scoring=make_scorer(f1_score, response_method=&#x27;predict&#x27;))</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-32\" type=\"checkbox\" ><label for=\"sk-estimator-id-32\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;&nbsp;GridSearchCV<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></label><div class=\"sk-toggleable__content \"><pre>GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;random_forest&#x27;,\n",
" RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))]),\n",
" param_grid={&#x27;random_forest__max_depth&#x27;: [None, 10, 20, 40, 50,\n",
" 60]},\n",
" scoring=make_scorer(f1_score, response_method=&#x27;predict&#x27;))</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-33\" type=\"checkbox\" ><label for=\"sk-estimator-id-33\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">estimator: Pipeline</label><div class=\"sk-toggleable__content \"><pre>Pipeline(steps=[(&#x27;preprocessor&#x27;,\n",
" ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;,\n",
" &#x27;is_email_true&#x27;])])),\n",
" (&#x27;random_forest&#x27;,\n",
" RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))])</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-34\" type=\"checkbox\" ><label for=\"sk-estimator-id-34\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;preprocessor: ColumnTransformer<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.compose.ColumnTransformer.html\">?<span>Documentation for preprocessor: ColumnTransformer</span></a></label><div class=\"sk-toggleable__content \"><pre>ColumnTransformer(transformers=[(&#x27;cat&#x27;,\n",
" Pipeline(steps=[(&#x27;onehot&#x27;,\n",
" OneHotEncoder(handle_unknown=&#x27;ignore&#x27;,\n",
" sparse_output=False))]),\n",
" [&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;])])</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-35\" type=\"checkbox\" ><label for=\"sk-estimator-id-35\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">cat</label><div class=\"sk-toggleable__content \"><pre>[&#x27;opt_in&#x27;, &#x27;is_email_true&#x27;]</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-36\" type=\"checkbox\" ><label for=\"sk-estimator-id-36\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;OneHotEncoder<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.preprocessing.OneHotEncoder.html\">?<span>Documentation for OneHotEncoder</span></a></label><div class=\"sk-toggleable__content \"><pre>OneHotEncoder(handle_unknown=&#x27;ignore&#x27;, sparse_output=False)</pre></div> </div></div></div></div></div></div></div></div></div><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-37\" type=\"checkbox\" ><label for=\"sk-estimator-id-37\" class=\"sk-toggleable__label sk-toggleable__label-arrow \">&nbsp;RandomForestClassifier<a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a></label><div class=\"sk-toggleable__content \"><pre>RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539})</pre></div> </div></div></div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"GridSearchCV(cv=3,\n",
" estimator=Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in',\n",
" 'is_email_true'])])),\n",
" ('random_forest',\n",
" RandomForestClassifier(class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))]),\n",
" param_grid={'random_forest__max_depth': [None, 10, 20, 40, 50,\n",
" 60]},\n",
" scoring=make_scorer(f1_score, response_method='predict'))"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# pipeline on the subsample\n",
"\n",
"random_forest_grid = GridSearchCV(pipeline, param_grid, cv=3, scoring = f1_scorer #, error_score=\"raise\"\n",
" )\n",
"\n",
"random_forest_grid"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "3f149137-6313-4b4e-99d6-b3af7f296ad7",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"/opt/mamba/lib/python3.11/site-packages/sklearn/base.py:1351: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Returned hyperparameter: {'random_forest__max_depth': None}\n",
"Best classification F1 score in train is: 0.33107422141513826\n",
"Classification F1 score on test is: 0.31752789604029275\n"
]
}
],
"source": [
"# run the pipeline on the full sample\n",
"\n",
"random_forest_grid.fit(X_train, y_train)\n",
"\n",
"# print results\n",
"print('Returned hyperparameter: {}'.format(random_forest_grid.best_params_))\n",
"print('Best classification F1 score in train is: {}'.format(random_forest_grid.best_score_))\n",
"print('Classification F1 score on test is: {}'.format(random_forest_grid.score(X_test, y_test)))"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "cd79f942-abd0-48c9-aa0d-0d22673abeec",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'scoring': make_scorer(f1_score, response_method='predict'),\n",
" 'estimator': Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in',\n",
" 'is_email_true'])])),\n",
" ('random_forest',\n",
" RandomForestClassifier(bootstrap=False,\n",
" class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))]),\n",
" 'n_jobs': None,\n",
" 'refit': True,\n",
" 'cv': 3,\n",
" 'verbose': 0,\n",
" 'pre_dispatch': '2*n_jobs',\n",
" 'error_score': nan,\n",
" 'return_train_score': False,\n",
" 'param_grid': {'random_forest__max_depth': [None, 10, 20, 40, 50, 60]},\n",
" 'multimetric_': False,\n",
" 'best_index_': 0,\n",
" 'best_score_': 0.33107422141513826,\n",
" 'best_params_': {'random_forest__max_depth': None},\n",
" 'best_estimator_': Pipeline(steps=[('preprocessor',\n",
" ColumnTransformer(transformers=[('cat',\n",
" Pipeline(steps=[('onehot',\n",
" OneHotEncoder(handle_unknown='ignore',\n",
" sparse_output=False))]),\n",
" ['opt_in',\n",
" 'is_email_true'])])),\n",
" ('random_forest',\n",
" RandomForestClassifier(bootstrap=False,\n",
" class_weight={0.0: 0.5837086520288036,\n",
" 1.0: 3.486549107420539}))]),\n",
" 'refit_time_': 2.2247676849365234,\n",
" 'feature_names_in_': array(['nb_tickets', 'nb_purchases', 'total_amount', 'nb_suppliers',\n",
" 'vente_internet_max', 'purchase_date_min', 'purchase_date_max',\n",
" 'nb_tickets_internet', 'is_email_true', 'opt_in', 'gender_female',\n",
" 'gender_male', 'nb_campaigns', 'nb_campaigns_opened'], dtype=object),\n",
" 'scorer_': make_scorer(f1_score, response_method='predict'),\n",
" 'cv_results_': {'mean_fit_time': array([1.64734515, 1.4220806 , 1.43256299, 1.68632547, 1.4271005 ,\n",
" 1.42404906]),\n",
" 'std_fit_time': array([0.32811727, 0.01915 , 0.02151065, 0.2729267 , 0.02447776,\n",
" 0.02384922]),\n",
" 'mean_score_time': array([0.14065607, 0.13571024, 0.13531415, 0.17512798, 0.13398822,\n",
" 0.13499872]),\n",
" 'std_score_time': array([0.00759402, 0.00653712, 0.00743453, 0.04901062, 0.00848726,\n",
" 0.00789539]),\n",
" 'param_random_forest__max_depth': masked_array(data=[None, 10, 20, 40, 50, 60],\n",
" mask=[False, False, False, False, False, False],\n",
" fill_value='?',\n",
" dtype=object),\n",
" 'params': [{'random_forest__max_depth': None},\n",
" {'random_forest__max_depth': 10},\n",
" {'random_forest__max_depth': 20},\n",
" {'random_forest__max_depth': 40},\n",
" {'random_forest__max_depth': 50},\n",
" {'random_forest__max_depth': 60}],\n",
" 'split0_test_score': array([0.19168873, 0.19168873, 0.19168873, 0.19168873, 0.19168873,\n",
" 0.19168873]),\n",
" 'split1_test_score': array([0.34428494, 0.34428494, 0.34428494, 0.34428494, 0.34428494,\n",
" 0.34428494]),\n",
" 'split2_test_score': array([0.45724899, 0.45724899, 0.45724899, 0.45724899, 0.45724899,\n",
" 0.45724899]),\n",
" 'mean_test_score': array([0.33107422, 0.33107422, 0.33107422, 0.33107422, 0.33107422,\n",
" 0.33107422]),\n",
" 'std_test_score': array([0.10881622, 0.10881622, 0.10881622, 0.10881622, 0.10881622,\n",
" 0.10881622]),\n",
" 'rank_test_score': array([1, 1, 1, 1, 1, 1], dtype=int32)},\n",
" 'n_splits_': 3}"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"random_forest_grid.__dict__"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "1806fe6d-cf98-459d-b05a-eb95972281dc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy Score: 0.48955211455211456\n",
"F1 Score: 0.31752789604029275\n",
"Recall Score: 0.8335281227173119\n"
]
}
],
"source": [
"# print results for the best model\n",
"\n",
"y_pred = random_forest_grid.predict(X_test)\n",
"\n",
"# Calculate the F1 score\n",
"acc = accuracy_score(y_test, y_pred)\n",
"print(f\"Accuracy Score: {acc}\")\n",
"\n",
"f1 = f1_score(y_test, y_pred)\n",
"print(f\"F1 Score: {f1}\")\n",
"\n",
"recall = recall_score(y_test, y_pred)\n",
"print(f\"Recall Score: {recall}\")"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "1a6a8e07-bd93-496b-986e-d219c03b82c5",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# confusion matrix \n",
"\n",
"draw_confusion_matrix(y_test, y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "1e1b3e42-1075-4a4a-bf44-3dadde3dbed1",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIQAAAK8CAYAAACeK2TMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3QUhdfG8W96LwQIJSQ0qVJCEQWUKihFQQERFdGf2LC8YsfeC6LYsXdFRAEVEMGCSFEpAQSkl4QSIIT0np33j4HgsAETSDK72edzDsfsZDa5QZ5suMzc62UYhoGIiIiIiIiIiHgMb7sLEBERERERERGRqqWGkIiIiIiIiIiIh1FDSERERERERETEw6ghJCIiIiIiIiLiYdQQEhERERERERHxMGoIiYiIiIiIiIh4GDWEREREREREREQ8jBpCIiIiIiIiIiIeRg0hEREREREREREPo4aQiIiIiJt7/PHHqVmzJrt27bK7FBEREXETagiJiIhUorVr13LttdfSuHFjAgMDCQ0NpWPHjkycOJHU1FRbavroo4/w8vJixYoVlfp5du7ciZeXV8kvb29vatSoQd++fZk/f/4Jnzdv3jwGDRpE7dq1CQgIIDY2ljFjxrBhw4YTPuf333/nsssuIyYmBn9/fyIiIujWrRtTpkwhOzu7Mr48Wxz9f7dz507L8UcffZRLLrmEESNGUFBQUOpzH3vsMby8vCqsloULF+Ll5cXChQsr7GOWplGjRlxzzTXles7SpUt57LHHSEtLc3pfr1696NWrV4XUJiIi4s7UEBIREakk7777Lp06dWL58uXcc889zJs3j5kzZzJixAjeeustrrvuOrtLrBK33XYby5Yt4/fff2fSpEls2bKFgQMHsmjRIqdz7733XgYMGIDD4eDNN99kwYIFPProoyxfvpyOHTsyY8YMp+c8+uij9OjRgz179vDkk0+yYMECvvzyS/r27ctjjz3GQw89VBVfpu3eeustateuzfjx4+0upULNnDmThx9+uFzPWbp0KY8//nipDaE333yTN998s4KqExERcV++dhcgIiJSHS1btoybb76Zfv36MWvWLAICAkre169fP+666y7mzZtXpTUVFhZW6BUiZRUXF8c555wDQPfu3WnWrBk9e/bk/fffp0ePHiXnTZ06lRdeeIGbb77Z8hf2Hj16MGrUKHr27Mno0aOJj4+nSZMmAEyfPp0nnniC6667jnfffdfy9Q0YMIB7772XZcuWVdFXai9fX1/mzJljdxkVrkOHDhX68Vq3bl2hH09ERMRd6QohERGRSvDMM8/g5eXFO++8Y2kGHeXv78/FF19c8tjhcDBx4kRatmxJQEAA0dHRXH311ezevdvyvBPdPnP8bTBHb+f59NNPueuuu4iJiSEgIICtW7eWnHP48GGuvfZaoqKiCAkJ4aKLLmL79u1OH/unn36ib9++hIeHExwcTPfu3fn5559P4XfF1LlzZwD2799vOf70009To0YNJk2a5PSckJAQXnvtNXJycpg8eXLJ8SeeeIIaNWrw6quvltrsCgsLo3///qdc6/F69epFmzZtWLZsGd26dSMoKIhGjRrx4YcfAjBnzhw6duxIcHAwbdu2LbXpt3jxYvr27UtYWBjBwcF069at1EbOH3/8Qffu3QkMDKR+/fpMmDCBwsLCUuuaNm0aXbt2JSQkhNDQUPr378/KlSvL9DUd/9wLLriAhISEcvyuWH333Xd07dqV4OBgwsLC6NevX6lNuW+//ZZ27doREBBAkyZNeOWVV0q9re34P/MOh4OnnnqKFi1aEBQURGRkJO3ateOVV14BzFvj7rnnHgAaN25ccsvi0VvbSrtlbO/evVx22WWEhYURERHByJEj+eOPP/Dy8uKjjz4qOe9Et5tdc801NGrUyHKsoKCAp556qiTTtWvX5tprr+XgwYNl+40UERGpZGoIiYiIVLDi4mJ++eUXOnXqRGxsbJmec/PNN3PffffRr18/vvvuO5588knmzZtHt27dSElJOeVaJkyYQGJiIm+99Rbff/890dHRJe+77rrr8Pb25osvvuDll1/mr7/+olevXpbbbD777DP69+9PeHg4H3/8MV999RVRUVFccMEFp9wU2rFjBwDNmzcvObZv3z7Wr19P//79CQ4OLvV5Xbt2JTo6mgULFpQ8Z926dSd9TlkcbZ499thjZTo/OTmZa6+9lrFjx/Ltt9/Stm1b/ve///HEE08wYcIE7r33Xr755htCQ0MZOnQoe/fuLXnub7/9Rp8+fUhPT+f9999n6tSphIWFcdFFFzFt2rSS8zZs2EDfvn1JS0vjo48+4q233iIhIYGnnnrKqZ5nnnmGUaNG0bp1a7766is++eQTMjIyOO+881i3bt1Jv5bjn/vpp5+SmZnJeeedd9KZTSfyxRdfMGTIEMLDw5k6dSrvv/8+hw8fplevXixevLjkvHnz5nHppZdSs2ZNpk2bxsSJE5k6dSoff/zxf36OiRMn8thjjzFq1CjmzJnDtGnTuO6660r+3I4dO5bbbrsNgBkzZrBs2TKWLVtGx44dS/14ubm5nH/++cyfP59nn32W6dOnU7duXUaOHFnur/8oh8PBkCFDeO6557jiiiuYM2cOzz33HAsWLKBXr17k5uae8scWERGpMIaIiIhUqOTkZAMwLr/88jKd/88//xiAMW7cOMvxP//80wCMBx54oORYw4YNjTFjxjh9jJ49exo9e/Ysefzrr78agNGjRw+ncz/88EMDMC655BLL8SVLlhiA8dRTTxmGYRjZ2dlGVFSUcdFFF1nOKy4uNtq3b2906dLlpF/Xjh07DMB4/vnnjcLCQiMvL89YvXq10bVrV6NevXrGjh07Ss79448/DMC4//77T/oxzz77bCMoKKhcz/kvCxcuNHx8fIzHH3/8P8/t2bOnARgrVqwoOXbo0CHDx8fHCAoKMvbs2VNyfPXq1QZgvPrqqyXHzjnnHCM6OtrIzMwsOVZUVGS0adPGaNCggeFwOAzDMIyRI0caQUFBRnJysuW8li1bGkDJ711iYqLh6+tr3HLLLZY6MzIyjOjoaGP48OElxx599FHj3z/6HX3ubbfdZnluZmamUbduXeOyyy476e/F0T9jv/76q2EY5p+L+vXrG23btjWKi4stHy86Otro1q1bybGzzjrLiI2NNfLz8y3n1axZ0zj+x9Pj/8wPHjzYiI+PP2ltL7zwguX36d+Oz8qUKVMMwPj2228t511//fUGYHz44YcnfO5RY8aMMRo2bFjyeOrUqQZgfPPNN5bzli9fbgDGm2++edL6RUREqoKuEBIREbHZr7/+CuB0K1iXLl1o1arVad2eNWzYsBO+78orr7Q87tatGw0bNiypZ+nSpaSmpjJmzBiKiopKfjkcDi688EKWL19epg1e9913H35+fgQGBhIfH8+6dev4/vvvnW6xKQvDMCp8DlLPnj0pKirikUceKdP59erVo1OnTiWPo6KiiI6OJj4+nvr165ccb9WqFUDJKvjs7Gz+/PNPhg8fTmhoaMl5Pj4+jB49mt27d7Np0ybA/DPRt29f6tSpYznv+KtWfvzxR4qKivjf//5nOR4WFkbv3r357bffTvh1HH3u1Vdfbfn/GxgYSM+ePcu9PWzTpk3s3buX0aNH4+197EfM0NBQhg0bxh9//EFOTg7Z2dmsWLGCoUOH4u/vbznvoosu+s/P06VLF9asWcO4ceP48ccfycjIKFedx/v1118JCwuz3MIJcMUVV5zyx5w9ezaRkZFcdNFFlt/b+Ph46tatW+mb2URERMpCQ6VFREQqWK1atQgODi65Neq/HDp0CDAbDcerX79+SUPhVJT2MY+qW7duqceO1nN0xs/w4cNP+DFSU1MJCQk5aQ3/93//x1VXXUV+fj5//PEHDz30EEOGDGHNmjXUrFkTMAdPA//5e7Zr166S2/DK+pyKFhUV5XTM39/f6fjRZkdeXh5gzmwyDOOE/5/h2J+FQ4cOnfD/z78d/X/UrVs3p3OPNu9O5OhzzzrrrFLf/++mTln8159jh8NR8ntgGIal2XVUaceON2HCBEJCQvjss89466238PHxoUePHjz//PMl86nKW3dpn7e03/+y2r9/P2lpaZaG17+dzm2gIiIiFUUNIRERkQrm4+ND3759+eGHH9i9ezcNGjQ46flHmyL79u1zOnfv3r3UqlWr5HFgYCD5+flOHyMlJcVy3lEnu5omOTm51GNnnHEGQMnHe+2110q2hB2vLH+Bb9CgQclf1Lt3707dunW56qqrePTRR3n99dcBs4lw5plnMn/+fHJyckqdCbRs2TL279/PiBEjSp7Ttm3bkz7HldSoUQNvb2/27dvn9L6jc4aO/p7XrFnzhP9//u3o+TNnzqRx48blqufoc7/++msaNmxYrueW5t9/jo+3d+9evL29qVGjRslVXscPFYfS/0wez9fXlzvvvJM777yTtLQ0fvrpJx544AEuuOACkpKSyv3noGbNmvz1119lqiUwMJD09HSn48c3eGrVqkXNmjVPuEkwLCysXDWKiIhUBt0yJiIiUgkmTJiAYRhcf/31FBQUOL2/sLCQ77//HoA+ffoA5gDnf1u+fDn//PMPffv2LTnWqFEj1q5dazlv8+bNJbcalcfnn39uebx06VJ27dpVskWpe/fuREZGsmHDBjp37lzqrxNdAXEyV155Jb169eLdd9+1XP304IMPcvjwYe6++26n52RnZ3P77bcTHBzM+PHjS44//PDDHD58mNtvvx3DMJyel5WVxfz588tdY2UI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pkyIOFIuRMyUCREzV8/Eza6UpkmlRURERERERETcjBpCIiIiIiIiIiJuRg0hF+Xn58dbb72Fn5+f1aWIOAVlQsRMmRBxpFyImCkTImbulgm3m1RaRERERERERMTdaYSQiIiIiIiIiIibUUNIRERERERERMTNqCEkIiIiIiIiIuJm1BASEREREREREXEzagg5sXHjxhEWFoa/vz/h4eGsWrXquvuvWLGC8PBw/P39KVOmDF988UU2VSqSPTKSiTlz5nDvvfdSsGBBgoODadCgAb/++ms2ViuS9TJ6nrhizZo1eHt7U6tWrawtUCSbZTQTSUlJvPHGG5QqVQo/Pz/Kli3LN998k03VimSPjOZiypQp1KxZk4CAAIoUKcLjjz/OuXPnsqlakay1cuVK2rVrR9GiRfHw8GDevHk3fExO/j1bDSEnNX36dAYNGsQbb7zB1q1badKkCW3atCEyMvKq+x8+fJi2bdvSpEkTtm7dyuuvv87AgQOZPXt2NlcukjUymomVK1dy7733smjRIjZv3kzz5s1p164dW7duzebKRbJGRjNxRWxsLD169OCee+7JpkpFssetZKJLly78/vvvfP311+zbt4+pU6dSqVKlbKxaJGtlNBerV6+mR48ePPnkk+zevZuZM2eyceNGevfunc2Vi2SNS5cuUbNmTcaOHXtT++f037O17LyTql+/PnXq1GH8+PHp2ypXrkyHDh0YMWKEw/6vvPIKCxYsYM+ePenb+vbty/bt21m3bl221CySlTKaiaupWrUqXbt2ZciQIVlVpki2udVMdOvWjfLly+Pl5cW8efPYtm1bNlQrkvUymonFixfTrVs3Dh06RL58+bKzVJFsk9FcfPzxx4wfP56DBw+mb/vss8/48MMPOXbsWLbULJJdPDw8mDt3Lh06dLjmPjn992yNEHJCycnJbN68mZYtW5q2t2zZkrVr1171MevWrXPYv1WrVmzatImUlJQsq1UkO9xKJv7LZrMRHx+vH/olR7jVTHz77bccPHiQt956K6tLFMlWt5KJBQsWULduXT788EOKFStGhQoVePHFF7l8+XJ2lCyS5W4lFw0bNuT48eMsWrQIwzA4ffo0s2bN4r777suOkkWcTk7/Pdvb6gLEUXR0NGlpaRQuXNi0vXDhwkRFRV31MVFRUVfdPzU1lejoaIoUKZJl9YpktVvJxH+N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",
"text/plain": [
"<Figure size 1400x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ROC curve\n",
"\n",
"# Calcul des taux de faux positifs (FPR) et de vrais positifs (TPR)\n",
"y_pred_prob = random_forest_grid.predict_proba(X_test)[:, 1]\n",
"\n",
"fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob, pos_label=1)\n",
"\n",
"# Calcul de l'aire sous la courbe ROC (AUC)\n",
"roc_auc = auc(fpr, tpr)\n",
"\n",
"plt.figure(figsize = (14, 8))\n",
"plt.plot(fpr, tpr, label=\"ROC curve(area = %0.3f)\" % roc_auc)\n",
"plt.plot([0, 1], [0, 1], color=\"red\",label=\"Random Baseline\", linestyle=\"--\")\n",
"plt.grid(color='gray', linestyle='--', linewidth=0.5)\n",
"plt.xlabel('Taux de faux positifs (FPR)')\n",
"plt.ylabel('Taux de vrais positifs (TPR)')\n",
"plt.title('Courbe ROC : random forest')\n",
"plt.legend(loc=\"lower right\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "854f6242-813f-400a-be43-7414a859b355",
"metadata": {},
"source": [
"## Naive Bayes "
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "b083d10d-8510-4a07-974b-e0c324175d7f",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/mamba/lib/python3.11/site-packages/sklearn/utils/validation.py:1229: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" y = column_or_1d(y, warn=True)\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-1 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-1 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-1 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-1 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-1 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-1 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-1 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-1 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-1 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-1 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-1 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-1 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-1 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-1 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-1 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-1 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GaussianNB()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;GaussianNB<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.naive_bayes.GaussianNB.html\">?<span>Documentation for GaussianNB</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GaussianNB()</pre></div> </div></div></div></div>"
],
"text/plain": [
"GaussianNB()"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"clf = GaussianNB()\n",
"clf.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "a5459639-be3d-4292-89d2-061f276dc9a8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy Score: 0.8780906593406593\n",
"F1 Score: 0.3673381217259815\n",
"Recall Score: 0.24842951059167276\n"
]
}
],
"source": [
"# print results for the best model\n",
"\n",
"y_pred = clf.predict(X_test)\n",
"\n",
"# Calculate the F1 score\n",
"acc = accuracy_score(y_test, y_pred)\n",
"print(f\"Accuracy Score: {acc}\")\n",
"\n",
"f1 = f1_score(y_test, y_pred)\n",
"print(f\"F1 Score: {f1}\")\n",
"\n",
"recall = recall_score(y_test, y_pred)\n",
"print(f\"Recall Score: {recall}\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "e962eeed-4099-407b-a619-a34a539a404a",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIQAAAK7CAYAAACDLlR0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gU5frG8e+mNxIIIQFC7026IB1EUIqKFJGjHkSwHI56xA7YEBUVFI96rD97QUQBC4igiIig0qT33gKEQEJ62fn9MRAYFjCBJLObuT/XlYudd2d3nwXuneTJzPu6DMMwEBERERERERERx/CzuwARERERERERESlZagiJiIiIiIiIiDiMGkIiIiIiIiIiIg6jhpCIiIiIiIiIiMOoISQiIiIiIiIi4jBqCImIiIiIiIiIOIwaQiIiIiIiIiIiDqOGkIiIiIiIiIiIw6ghJCIiIiIiIiLiMGoIiYiI+KjVq1czbNgwatasSUhICBEREbRs2ZIXXniBpKQkW2r64IMPcLlcLFu2rFhfZ+fOnbhcrvwvPz8/ypUrR/fu3Zk7d+45Hzdnzhz69OlDhQoVCA4OpmrVqgwdOpT169ef8zG//vor119/PfHx8QQFBREVFUX79u154403SEtLK463V2Rq1KjBLbfcUuKv27VrV8u/T2BgIDVq1GD48OHs2rWrxOsRERERTwF2FyAiIiKF98477zBy5Ejq16/Pgw8+SKNGjcjJyWHZsmW8+eabLFmyhBkzZthdZrG7++67+cc//kFeXh4bN25k3Lhx9O7dm/nz59O5c2fLvg899BATJ07kqquu4vXXXycuLo7Nmzfz0ksv0bJlSz777DP69+9vecwTTzzBU089Rfv27Rk/fjy1a9cmPT2dxYsX8+STT7J582YmT55ckm+5UGbMmEFkZKQtr12rVi0+/fRTALKzs1m7di3jxo1j3rx5bNy4kbCwMFvqEhEREZMaQiIiIj5myZIl/Otf/6JHjx7MnDmT4ODg/Pt69OjB/fffz5w5c0q0ppycHFwuV4m+JkC1atW47LLLAOjQoQN169alS5cuvPvuu5aG0JQpU5g4cSL/+te/eP311/PHO3fuzJAhQ+jSpQs333wzzZs3p1atWgBMmzaNp556iuHDh/POO+9Y3l+vXr146KGHWLJkSQm90wvTokUL2147NDQ0/98GzL/rkJAQhg8fzqJFi+jZs6dttYmIiIguGRMREfE5zz77LC6Xi7ffftvSDDopKCiIa665Jn/b7Xbzwgsv0KBBA4KDg4mNjeWf//wne/futTzuXJcXde3ala5du+ZvL1iwAJfLxccff8z9999PfHw8wcHBbN26NX+fo0ePMmzYMKKjowkPD+fqq69m+/btHs/9448/0r17dyIjIwkLC6NDhw789NNPF/C3YmrdujUABw8etIw/88wzlCtXjkmTJnk8Jjw8nFdffZX09HTL2T5PPfUU5cqV45VXXjlrs6tMmTJF2tTo2rUrTZo0YenSpXTq1ImwsDBq1arFc889h9vtzt8vMzOT+++/n+bNmxMVFUV0dDTt2rXj66+/9njO0/9NDx8+TFBQEI899pjHfhs3bsTlcvHKK6/kjyUkJHDHHXdQpUoVgoKCqFmzJuPGjSM3N/eC32NUVBQAgYGB+WNbt25l2LBh1K1bl7CwMOLj47n66qtZs2ZN/j6pqamULVuWO+64w+M5d+7cib+/PxMnTix07W+88QbNmjUjIiKCMmXK0KBBA8aMGXPB709ERMSXqCEkIiLiQ/Ly8pg/fz6tWrWiatWqBXrMv/71Lx5++GF69OjBN998w/jx45kzZw7t27cnMTHxgmsZPXo0u3fv5s033+Tbb78lNjY2/77hw4fj5+fHZ599xssvv8yff/5J165dOXbsWP4+n3zyCT179iQyMpIPP/yQL774gujoaK688soLbgrt2LEDgHr16uWPHThwgHXr1tGzZ89zXqbUrl07YmNjmTdvXv5j1q5de97HFMTJ5tmTTz5ZoP0TEhK48cYbuemmm/jmm2/o1asXo0eP5pNPPsnfJysri6SkJB544AFmzpzJlClT6NixI/379+ejjz4653NXqFCBvn378uGHH1oaTADvv/8+QUFB3Hjjjfl1tGnThh9++IHHH3+c77//nuHDhzNhwgRuu+22Ar//3NxccnNzSU9P588//+Spp56iVq1atG/fPn+f/fv3U758eZ577jnmzJnD//73PwICAmjbti2bNm0CICIigltvvZVPP/2U5ORky2u8/vrrBAUFceuttxaq9s8//5yRI0fSpUsXZsyYwcyZMxk1apTXzwslIiJSZAwRERHxGQkJCQZg3HDDDQXaf8OGDQZgjBw50jL+xx9/GIAxZsyY/LHq1asbQ4cO9XiOLl26GF26dMnf/vnnnw3A6Ny5s8e+77//vgEY1113nWX8t99+MwDj6aefNgzDMNLS0ozo6Gjj6quvtuyXl5dnNGvWzGjTps1539eOHTsMwHj++eeNnJwcIzMz0/jrr7+Mdu3aGZUqVTJ27NiRv+/vv/9uAMYjjzxy3uds27atERoaWqjH/J0FCxYY/v7+xrhx4/523y5duhiA8ccff1jGGzVqZFx55ZXnfFxubq6Rk5NjDB8+3GjRooXlvjP/Tb/55hsDMObOnWt5fOXKlY0BAwbkj91xxx1GRESEsWvXLsvzTZo0yQCMdevWFei9nPlVr149Y8OGDed9bG5urpGdnW3UrVvXGDVqVP74tm3bDD8/P2Py5Mn5YxkZGUb58uWNYcOGFbr2u+66yyhbtux5axERESnNdIaQiIhIKfbzzz8DeFwK1qZNGxo2bHhRl2cNGDDgnPedPNPkpPbt21O9evX8ehYvXkxSUhJDhw7NP4skNzcXt9vNVVddxdKlSwt0psbDDz9MYGAgISEhNG/enLVr1/Ltt99So0aNQr8fwzCKfB6kLl26kJuby+OPP16g/StWrEibNm0sY02bNvVYmWvatGl06NCBiIgIAgICCAwM5N1332XDhg3nff5evXpRsWJF3n///fyxH374gf379+efYQPw3Xff0a1bNypXrmz59+nVqxcAv/zyy9++l9q1a7N06VKWLl3KkiVL+OyzzwgNDaV79+5s2bIlf7/c3FyeffZZGjVqRFBQEAEBAQQFBbFlyxbL+6lVqxZ9+/bl9ddfxzAMAD777DOOHDnCXXfdVeja27Rpw7FjxxgyZAhff/31RZ0tJyIi4ovUEBIREfEhMTExhIWF5V8a9XeOHDkCQKVKlTzuq1y5cv79F+Jsz3lSxYoVzzp28vVOzvEzcOBAAgMDLV/PP/88hmGQlJT0tzX85z//YenSpSxatIhJkyaRk5PDtddea3lf1apVA/jbv7Ndu3blX4ZX0McUtfLly3uMBQcHk5GRkb89ffp0rr/+euLj4/nkk09YsmQJS5cu5dZbbyUzM/O8zx8QEMDNN9/MjBkz8i/f++CDD6hUqRJXXnll/n4HDx7k22+/9fi3ady4MUCBmichISG0bt2a1q1bc9lllzFkyBC+//57Dhw4YGmQ3XfffTz22GP069ePb7/9lj/++IOlS5fSrFkzy/sG8997y5Yt+Zf2/e9//6Ndu3a0bNmy0LXffPPNvPfee+zatYsBAwYQGxtL27Zt859bRESktNMqYyIiIj7E39+f7t278/3337N3716qVKly3v1PNhgOHDjgse/+/fuJiYnJ3w4JCSErK8vjORITEy37nXS+s2kSEhLOOlanTh2A/Od79dVXLStRnS4uLu6cz39SlSpV8ieS7tChAxUrVuSmm27iiSee4LXXXgPMxlXjxo2ZO3cu6enpZ50TaMmSJRw8eJBBgwblP+aSSy4572Ps8sknn1CzZk2mTp1q+Tc427/d2QwbNoyJEyfy+eefM3jwYL755hvuvfde/P398/eJiYmhadOmPPPMM2d9jsqVK19Q7ZUqVSImJoZVq1ZZ3s8///lPnn32Wcu+iYmJlC1b1jJ2+eWX06RJE1577TUiIiJYsWKFZX6lwtY+bNgwhg0bRlpaGgsXLuSJJ56gb9++bN68merVq1/QexQREfEVOkNIRETEx4wePRrDMLjtttvIzs72uD8nJ4dvv/0WMH+ABjx+aF66dCkbNmyge/fu+WM1atRg9erVlv02b96cP7FvYXz66aeW7cWLF7Nr16781co6dOhA2bJlWb9+ff5ZJGd+BQUFFfp1b7zxRrp27co777xjucxq7NixHD16lAceeMDjMWlpadxzzz2EhYUxatSo/PHHHnuMo0ePcs899+RfonS61NRU5s6dW+gaL5bL5SIoKMjSDEpISDjrKmNn07BhQ9q2bcv777/PZ599RlZWFsOGDbPs07dvX9auXUvt2rXP+m9zoQ2hvXv3kpiYaJmA3OVyeayWN2vWLPbt23fW57jnnnuYNWsWo0ePJi4uLr+JdzG1h4eH06tXL8aOHUt2djbr1q27oPcnIiLiS3SGkIiIiI9p164db7zxBiNHjqRVq1b861//onHjxuTk5LBy5UrefvttmjRpwtVXX039+vW5/fbbefXVV/Hz86NXr17s3LmTxx57jKpVq1oaIDfffDM33XQTI0eOZMCAAezatYsXXniBChUqFLrGZcuWMWLECAYNGsSePXsYO3Ys8fHxjBw5EjBXjXr11VcZOnQoSUlJDBw4kNjYWA4fPsyqVas4fPgwb7zxxgX9/Tz//PO0bduW8ePH83//938ADBkyhBUrVjBp0iR27tzJrbfeSlxcHJs2bWLy5Mls27aNzz77jFq1auU/z6BBg3jssccYP348GzduZPjw4dSuXZv09HT++OMP3nrrLQYPHnzeped/+eUXunfvzuOPP17geYT+Tt++fZk+fTojR45k4MCB7Nmzh/Hjx1OpUiXL3Dznc+utt3LHHXewf/9+2rdvT/369S33P/XUU8ybN4/27dtzzz33UL9+fTIzM9m5cyezZ8/mzTff/Nuz0zIyMvj9998Bc3W8HTt28MILLwBw7733Wt7PBx98QIMGDWjatCnLly9n4sSJ53z+m266idGjR7Nw4UIeffRRj8ZhQWu/7bbbCA0NpUOHDlSqVImEhAQmTJhAVFQUl156aYH+HkVERHyarVNai4iIyAX766+/jKFDhxrVqlUzgoKCjPDwcKNFixbG448/bhw6dCh/v7y8POP555836tWrZwQGBhoxMTHGTTfdZOzZs8fyfG6323jhhReMWrVqGSEhIUbr1q2N+fPnn3OVsWnTpnnUdHKVsblz5xo333yzUbZsWSM0NNTo3bu3sWXLFo/9f/nlF6NPnz5GdHS0ERgYaMTHxxt9+vQ563Of7uQqYxMnTjzr/YMGDTICAgKMrVu3WsZnz55t9O7d2yhfvnz+6918883nXTXrl19+MQYOHGhUqlTJCAwMNCIjI4127doZEydONFJSUs5b58m/qyeeeOK8+xmGuTJX48aNPcaHDh1qVK9e3TL23HPPGTVq1DCCg4ONhg0bGu+8847xxBNPGGd+a3euleOSk5ON0NBQAzDeeeeds9Zz+PBh45577jFq1qxpBAYGGtHR0UarVq2MsWPHGqmpqX/7XjhtdTE/Pz+jcuXKRq9evYwFCxZY9j169KgxfPhwIzY21ggLCzM6duxo/Prrrx7/7053yy23GAEBAcbevXsvuPYPP/zQ6NatmxEXF2cEBQUZlStXNq6//npj9erV531vIiIipYXLMM5yDrSIiIiIiBfKzs6mRo0adOzYkS+++MLuckRERHyWLhkTEREREa93+PBhNm3axPvvv8/Bgwd55JFH7C5JRETEp6khJCIiIiJeb9asWQwbNoxKlSrx+uuvW5aaFxERkcLTJWMiIiIiIiIiIg6jZedFRERERERERBxGDSEREREREREREYdRQ0hERERERERExGEcN6m02+1m//79lClTBpfLZXc5IiIiIiIiIiJFwjAMjh8/TuXKlfHzO/85QI5rCO3f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ateuzYgRI/joo48oUKAA48ePp1+/fjz44IM89thjREZG8ssvv/Dss8/Su3dv+vTpA0C5cuUYPXo0jz32GAkJCdx9991UrFiRAwcO8OWXXxIREZFlY6lNmza0bt2aW265hVGjRlG1alW2bt2Kn58fXbp0oW3btvz999+8++679O7dm7lz5/LTTz8RGRmZrdd0xx13MHToUFJSUhg9erTltqFDhzJo0CAiIyPp2rUrycnJrFmzhpMnT/LUU08BcP3117Ns2TLL2j5Vq1blq6++onHjxiQkJPDss89edqQTwKuvvsqNN95IuXLluPXWW/H392fjxo1s2rSJN954gypVqpCWlsZ//vMfunfvzm+//cbHH3982ce9miljfn5+DB48mBEjRhATE0NMTAwjRowgPDyc22+/3TXq6e6776ZMmTK89dZbgLmo+KhRo2jQoIFrytiQIUO46aabXCOsXnrpJbp27Uq5cuU4ffo0kydPZtGiRcydO9f1/FOnTqV48eKUL1+eTZs28cQTT9CzZ0/LItdgNuEyR67lmsvuQ5bP5Jdt57t9uMSo8Pxs49ctR7N3hz/+MIz27Q3DbAsZRokShrFoUe4WKZLHFi9ebHcJIl5FmRBxp1yIWHmaiUttd+3tstp23jAM4+uvvzaCg4ONffv2uY4tWbLE6NKlixEVFWUEBwcbtWrVMt5//30jLS3N7f4LFiwwrr/+eqNw4cJGaGioUaNGDeOZZ54xDh06dNFaTpw4Ydxzzz1G0aJFjdDQUKNOnTrG7NmzXbePGzfOKFeunFGgQAHj7rvvNt58880st53PysmTJ42QkBAjPDw8y+3bv/76a6N+/fpGcHCwUbhwYaN169bG9OnTXbdv2bLFCAsLM06dOuU6tm7dOqNx48ZGSEiIERMTY0ydOtWoUKGCMXr0aNc5gDFjxgy355s7d67RokULIywszIiMjDSaNm1qfPLJJ67bR40aZZQqVcoICwszrr/+euPLL780AOPkyZMXff+uVkZGhvHaa68Z0dHRRkhIiNG6dWtj06ZNhmEYRkJCgmEYhtGmTRujf//+rvukpqYaQ4cONapUqWKEhoYa5cqVMx555BFLnffee69RoUIFIzg42ChevLjRoUMHY/78+Zbn/vDDD42yZcsaQUFBRvny5Y1XXnnFSE5OtpyzfPlyo1ChQkZiYmKW9efUtvN+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qADA4cOH2bdvn+v8SpUqMWfOHBYtWkT9+vUZPnw4Y8aMcdSW8yIiIiIiIl7p7NmLf/2zwHG2zv1nwd3LnnsFQkJCiI6OpmzZsnTu3Jm+ffu6Fr0HSE9P57777qNSpUqEhYVRvXp1PvzwQ8tjDBgwgJ49e/L+++9TqlQpihYtyqOPPmrZ+frYsWN0796dsLAwKlWqxNdff+1Wy759++jRowcRERFERkbSp08fjh496rp96NCh1K9fn88//5zy5csTERHBww8/THp6Ou+++y7R0dGUKFGCN99887KvOzAwkOjoaKKjo6lVqxbDhg3jzJkzrs0AAEaNGkXdunUpUKAA5cqV45FHHnEt3gywd+9eunfvTuHChSlQoAC1a9d2bQIAEBsbS7du3YiIiKBkyZLcddddHD9+/KI1/XvKmJ+fHxMmTODmm28mPDycmJgYvv/+e8t9PH0OuTRbG0IAjzzyCHv27CE5OZm1a9fSunVr120TJ0507byQqU2bNqxbt47k5GR2797tGk3kRI0aNbK7BBGvokyIWCkTIu6UCxGrHM1ERMTFv/79n/glSlz83K5dredWrJj1eVdp165dzJ0717L8SEZGBmXLluXbb78lNjaWV199lZdeesm1E16mhQsXsnPnThYuXMj//vc/Jk6cyMSJE123DxgwgD179vDrr7/y3XffMXbsWI4dO+a63TAMevbsSVxcHIsXL2bBggXs3LmTvn37Wp5n586d/PTTT8ydO5dJkybx+eefc8MNN3DgwAEWL17MO++8wyuvvMLvv/+e7dednJzMxIkTKVSoENWrV3cd9/f3Z8yYMWzevJn//e9//Prrrzz33HOu2x999FGSk5NZsmQJmzZt4p133iHin+/D4cOHadOmDfXr12fNmjXMnTuXo0eP0qdPn2zXBTBs2DD69OnDxo0b6datG3fccYdrh7Gceo7LcdKUMdu2nZerd2EHWkSUCZF/UyZE3CkXIlZOy8Ts2bNd24Rnbss+atQo1+1BQUEMGzbMdb1SpUosX76cb7/91tJ4KFy4MB999BEBAQHUqFGDG264gV9++YUHHniA7du389NPP/H777/TrFkzAD777DNq1qzpuv/PP//Mxo0b2b17N+XKlQPgq6++onbt2qxevZomTZoAZoPq888/p2DBgtSqVYt27dqxbds25syZg7+/P9WrV+edd95h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",
"text/plain": [
"<Figure size 1400x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ROC curve\n",
"\n",
"# Calcul des taux de faux positifs (FPR) et de vrais positifs (TPR)\n",
"y_pred_prob = clf.predict_proba(X_test)[:, 1]\n",
"\n",
"fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob, pos_label=1)\n",
"\n",
"# Calcul de l'aire sous la courbe ROC (AUC)\n",
"roc_auc = auc(fpr, tpr)\n",
"\n",
"plt.figure(figsize = (14, 8))\n",
"plt.plot(fpr, tpr, label=\"ROC curve(area = %0.3f)\" % roc_auc)\n",
"plt.plot([0, 1], [0, 1], color=\"red\",label=\"Random Baseline\", linestyle=\"--\")\n",
"plt.grid(color='gray', linestyle='--', linewidth=0.5)\n",
"plt.xlabel('Taux de faux positifs (FPR)')\n",
"plt.ylabel('Taux de vrais positifs (TPR)')\n",
"plt.title('Courbe ROC : naive Bayes')\n",
"plt.legend(loc=\"lower right\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "ad1a0b57-e382-4ae3-90b6-1f790099711b",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/mamba/lib/python3.11/site-packages/numpy/core/fromnumeric.py:86: FutureWarning: The behavior of DataFrame.sum with axis=None is deprecated, in a future version this will reduce over both axes and return a scalar. To retain the old behavior, pass axis=0 (or do not pass axis)\n",
" return reduction(axis=axis, out=out, **passkwargs)\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# utilisation d'une métrique plus adaptée aux modèles de marketing : courbe de lift\n",
"\n",
"# Tri des prédictions de probabilités et des vraies valeurs\n",
"sorted_indices = np.argsort(y_pred_prob)[::-1]\n",
"y_pred_prob_sorted = y_pred_prob[sorted_indices]\n",
"y_test_sorted = y_test.iloc[sorted_indices]\n",
"\n",
"# Calcul du gain cumulatif\n",
"cumulative_gain = np.cumsum(y_test_sorted) / np.sum(y_test_sorted)\n",
"\n",
"# Tracé de la courbe de lift\n",
"plt.plot(np.linspace(0, 1, len(cumulative_gain)), cumulative_gain, label='Courbe de lift')\n",
"plt.xlabel('Part de clients identifiés sans modèle ')\n",
"plt.ylabel('Part de clients identifiés avec modèle')\n",
"plt.title('Courbe de Lift')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "7cbb1fec-97b9-4780-9488-5b8eff5aee0d",
"metadata": {},
"source": [
"## From model to segmentation"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "d97ca3df-3778-469c-a077-495b3ee25051",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([9.0362e+04, 2.7200e+02, 1.6700e+02, 1.0000e+02, 8.6000e+01,\n",
" 5.7000e+01, 6.6000e+01, 6.3000e+01, 4.5000e+01, 5.1000e+01,\n",
" 5.4000e+01, 3.6000e+01, 5.3000e+01, 5.3000e+01, 5.3000e+01,\n",
" 5.1000e+01, 7.7000e+01, 1.1800e+02, 1.2700e+02, 4.2050e+03]),\n",
" array([8.76852176e-09, 5.00000083e-02, 1.00000008e-01, 1.50000007e-01,\n",
" 2.00000007e-01, 2.50000007e-01, 3.00000006e-01, 3.50000006e-01,\n",
" 4.00000005e-01, 4.50000005e-01, 5.00000004e-01, 5.50000004e-01,\n",
" 6.00000004e-01, 6.50000003e-01, 7.00000003e-01, 7.50000002e-01,\n",
" 8.00000002e-01, 8.50000001e-01, 9.00000001e-01, 9.50000000e-01,\n",
" 1.00000000e+00]),\n",
" <BarContainer object of 20 artists>)"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(y_pred_prob, bins=20)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "b4ae4508-d5ac-4b22-a546-6c724278f8c3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([8.76852176e-09, 8.76852176e-09, 8.76852176e-09, ...,\n",
" 1.00000000e+00, 1.00000000e+00, 1.00000000e+00])"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sort(y_pred_prob)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "ace9c778-0ab4-4e28-8ca0-364040d122e6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4527"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(y_pred_prob>0.8).sum()"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "4a202a7e-e7fe-479c-8be3-7b2b93fe9d7b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqgAAAHFCAYAAAA+OgtFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABT90lEQVR4nO3deXwTdf7H8XfatGkptByFAqW0BVQKyGER5RK5ioioP0EQQQ5BAQ8Q0BVEBVGXBZFlUQFdRRYFrCCyHghULnFhlVNFdD2QSyg3tHL2+P7+gMSmSSGF0hx9PR+PPGi++c7kMzPJzJuZyYzFGGMEAAAA+IggbxcAAAAA5EVABQAAgE8hoAIAAMCnEFABAADgUwioAAAA8CkEVAAAAPgUAioAAAB8CgEVAAAAPoWACgAAAJ9ySQH122+/Vb9+/ZSYmKiwsDCVLl1a1113nSZOnKgjR444+t18882yWCyyWCwKCgpSmTJlVKtWLd19991asGCBcnNzXcadkJDgGCb/448//rj0KQ1gmzdvVqtWrRQVFSWLxaIpU6a47Xfy5EmNHTtWq1atcnlt7NixslgsOnTo0JUt1gfs2LFDFotFs2bNcrTZp7+w5s6dW+D8vlwJCQnq27fvFRn3pUpISNBtt91WpOO0WCx65JFHLtpv1apVslgsTp9fd8vt5ptv1s033+x4fqHPfXHx9Dvqi2bNmiWLxaINGzZ4u5QLuv/++3XLLbd4u4zL8tZbbyk2NlYnTpzweJinn35a1atXl9VqVdmyZa9ccT5o7969Gjt2rLZs2eLtUgJS3759lZCQ4LX3txZ2gH/+85966KGHdM011+iJJ55QnTp1lJWVpQ0bNmjGjBlat26dPvzwQ0f/GjVqaM6cOZKkEydO6LffftOiRYt09913q2XLlvr4448VFRXl9B7NmzfXpEmTXN67VKlShS23RLj//vt14sQJvffeeypXrlyBH6iTJ0/queeekySnDTikAQMGXNLGbe7cudq6dasee+yxoi8KTq677jqtW7dOderUuWC/adOmOT33hc+9p99RXJrNmzfrX//6l7766itvl3JZ+vTpowkTJmjixImOz+yF/Pvf/9aLL76o0aNHq2PHjrLZbMVQpe/Yu3evnnvuOSUkJKhhw4beLifgPPPMMxo6dKjX3r9QAXXdunUaPHiw2rdvr0WLFjl9Gdq3b68RI0ZoyZIlTsOEh4frxhtvdGobMGCA3n77bd1///168MEHlZqa6vR62bJlXYbxBSdPnvTJkLx161Y98MAD6tixo7dLueJOnTql8PDwIh9vtWrVVK1atSIfr6/z1c+0O5GRkR6tFy4WYL3B176jxhidPn36inyXvOFvf/ubmjRposaNG3u7FCdZWVmyWCyyWj3b1FqtVg0cOFDPP/+8nnzyyYt+N7du3SpJGjJkiCpVqnTZ9Ur+sU7IyclRdna2t8sIeDVr1vTq+xfqEP9f//pXWSwWvfHGG27/pxYaGqrbb7/do3H169dPt956q+bPn6+dO3cWpowCHTt2TCNGjFCNGjVks9lUqVIl3Xrrrfrxxx8luT9EKLk/5Nu3b1+VLl1a3333nVJSUlSmTBm1bdtWjz32mCIiIpSRkeHy/t27d1dMTIyysrIcbampqWratKkiIiJUunRpdejQQZs3b/ZoerZu3ao77rhD5cqVU1hYmBo2bKh//etfjtfth96ys7M1ffp0x6kQ7uzYsUMVK1aUJD333HOOvvkPIe/fv189evRQVFSUYmJidP/99+v48eNOfYwxmjZtmho2bKjw8HCVK1dOXbt21fbt2y86TfZDsps3b9Zdd92lyMhIRUVFqVevXjp48KBTX/vh5IULF6pRo0YKCwtz7FVIT0/XwIEDVa1aNYWGhioxMVHPPfecy0pr79696tatm8qUKaOoqCh1795d6enpBdaV39y5c9W0aVOVLl1apUuXVsOGDfXWW29JOrc37tNPP9XOnTudTkWxO3v2rF544QXVrl1bNptNFStWVL9+/VymMysrS3/5y19UuXJllSpVSi1atNDXX3990Xkp/fnZnThxol588UVVr15dYWFhaty4sZYvX+52Gjdt2qSuXbuqXLlyjhXQ6dOnNWrUKCUmJio0NFSxsbF6+OGHdezYMbfv++GHH6p+/foKCwtTjRo1NHXqVKfXT58+rREjRqhhw4aKiopS+fLl1bRpU/373/8ucFpef/11XX311bLZbKpTp47ee+89p9cL+v7ml/cQ/4U+92vWrJHFYtG8efNcxjF79mxZLBatX7/+gu9VlN9Re72eLs+CDr+5+yzbT6OYMWOGkpKSZLPZHHX++OOP6tGjh2JiYmSz2VS9enX17t1bZ86ccRpHZmamBg8erOjoaFWoUEF33XWX9u7d69QnNTVVKSkpqlKlisLDw5WUlKSRI0e6HLLevn277rnnHlWtWlU2m00xMTFq27aty6FaT9af+/fv14cffqj77rvPqT03N1cvvPCCrrnmGoWHh6ts2bKqX7++/vGPfzj182T6L7acpT8/n++8845GjBih2NhY2Ww2/fLLL5Kkzz//XG3btlVkZKRKlSql5s2buyxTSerZs6cyMjJcPv/5JSQk6Omnn5YkxcTEyGKxaOzYsY5pnzhxomPdU6lSJfXu3Vt79uxxGsfNN9+sevXq6YsvvlCzZs1UqlQp3X///QW+pyfLzb7evtg6QpJ27dqlXr16qVKlSrLZbEpKStLLL7/sdPpf3u/ECy+8oMTERNlsNq1cuVLXX3+9pHN5wv7dss8DTz9j7nz11Vfq3LmzKlSooLCwMNWsWdPlKNmXX36ptm3bqkyZMipVqpSaNWumTz/91KmP/fu/YsUKPfDAA6pQoYIiIyPVu3dvnThxQunp6erWrZvKli2rKlWq6PHHH3fKD4VZH/zyyy/q16+frrrqKpUqVUqxsbHq3LmzvvvuO6d+9s/pvHnzNHr0aFWtWlWRkZFq166d/ve//zn1dbeO8XT7v3nzZt12222OZVu1alV16tTJ5TN4QcZD2dnZplSpUuaGG27wdBDTqlUrU7du3QJfnzFjhpFk3nnnHUdbfHy8ufXWW01WVpbTIycn54LvlZGRYerWrWsiIiLMuHHjzNKlS80HH3xghg4dalasWGGMMWblypVGklm5cqXTsL/99puRZN5++21HW58+fUxISIhJSEgw48ePN8uXLzdLly4133zzjZFk/vnPfzqN4+jRo8Zms5nhw4c72l588UVjsVjM/fffbz755BOzcOFC07RpUxMREWG+//77C07Pjz/+aMqUKWNq1qxpZs+ebT799FPTo0cPI8lMmDDBGGPMgQMHzLp164wk07VrV7Nu3Tqzbt06t+M7ffq0WbJkiZFk+vfv7+j7yy+/GGOMGTNmjJFkrrnmGvPss8+atLQ0M3nyZGOz2Uy/fv2cxvXAAw+YkJAQM2LECLNkyRIzd+5cU7t2bRMTE2PS09MvOF3294mPjzdPPPGEWbp0qZk8ebKJiIgwjRo1MmfPnnX0jY+PN1WqVDE1atQwM2fONCtXrjRff/212bdvn4mLizPx8fHm9ddfN59//rl5/vnnjc1mM3379nUMf/LkSZOUlGSioqLMK6+8YpYuXWqGDBliqlev7rK87XXl9cwzzxhJ5q677jLz5883y5YtM5MnTzbPPPOMMcaY77//3jRv3txUrlzZMT/t8z8nJ8fccsstJiIiwjz33HMmLS3NvPnmmyY2NtbUqVPHnDx50vE+ffr0MRaLxTzxxBOO94iNjTWRkZGmT58+F5yf9s9uXFycadGihfnggw/M/PnzzfXXX29CQkLM2rVr3c77J5980qSlpZlFixaZ3Nxc06FDB2O1Ws0zzzxjli1bZiZNmuRYJqdPn3ZaJrGxsaZ69epm5syZZvHixaZnz55GknnppZcc/Y4dO2b69u1r3nnnHbNixQqzZMkS8/jjj5ugoCDzr3/9y2ka7PXXqVPHzJs3z3z00UfmlltuMZLM/PnzHf3cfX/dLbdWrVqZVq1aGWMu/rlv1KiRad68uct8vf766831119/wXlf1N9RYwq3PPv06WPi4+NdxuFunkgysbGxpn79+mbu3LlmxYoVZuvWrWbLli2mdOnSJiEhwcyYMcMsX77cvPvuu6Zbt24mIyPDGGPM22+/bSSZGjVqmEcffdQsXbrUvPnmm6ZcuXKmdevWTu/z/PPPm7///e/m008/NatWrTIzZswwiYmJLv2uueYaU6tWLfPOO++Y1atXmw8++MCMGDHCadl6uv6cPXu2kWS2bdvm9B7jx483wcHBZsyYMWb58uVmyZIlZsqUKWbs2LGOPp5MvyfL2Zg/P5+xsbGma9eu5qOPPjKffPKJOXz4sHnnnXeMxWIxd955p1m4cKH5+OOPzW233WaCg4PN559/7rIMk5KSzF133eXSntemTZtM//79jSSzZMkSs27dOrN7925jjDEPPvigkWQeeeQRs2TJEjNjxgxTsWJFExcXZw4ePOgYR6tWrUz58uVNXFyceeWVV8zKlSvN6tWrC3xPT5abp+uIAwcOmNjYWFOxYkUzY8YMs2TJEvPII48YSWbw4MGOfvbvRGxsrGndurVZsGCBWbZsmfnmm28cn82nn37a8d2yzwNPanVnyZIlJiQkxNSvX9/MmjXLrFixwsycOdPcc889jj6rVq0yISEhJjk52aSmpppFixaZlJQUY7FYzHvvvefoZ68vMTHRjBgxwixbtsxMmDDBBAcHmx49epjrrrvOvPDCCyYtLc08+eSTRpJ5+eWXXabdk/XB6tWrzYgRI8yCBQvM6tWrzYcffmjuvPNOEx4ebn788UdHP/vnNCEhwfTs2dN8+umnZt68eaZ69ermqquuMtnZ2Y6+7tYxnmz///jjD1OhQgXTuHFj8/7775vVq1eb1NRUM2jQIJfv6YV4HFDT09ONJKeFdDEXC6ifffaZy5c8Pj7eSHJ5jB49+oLvNW7cOCPJpKWlFdinsAFVkpk5c6bLeK677jrTrFkzp7Zp06YZSea7774zxhiza9cuY7VazaOPPurULzMz01SuXNl069btgtNzzz33GJvNZnbt2uXU3rFjR1OqVClz7NgxR5sk8/DDD19wfMYYc/DgQSPJjBkzxuU1+0Zt4sSJTu0PPfSQCQsLM7m5ucYY49jY5v0SGWPM7t27TXh4uPnLX/5ywRrs7zNs2DCn9jlz5hhJ5t1333W0xcfHm+DgYPO///3Pqe/AgQNN6dKlzc6dO53aJ02aZCQ5Nl7Tp083ksy///1vp34PPPDARQPq9u3bTXBwsOnZs+cFp6dTp05uQ8K8efOMJPPBBx84ta9fv95IMtOmTTPGGPPDDz9ccH54GlCrVq1qTp065WjPyMgw5cuXN+3atXOZxmeffdZpHPYAl3/Zp6amGknmjTfecLTFx8cbi8VitmzZ4tS3ffv2JjIy0pw4ccJtndnZ2SYrK8v079/fNGrUyOk1SSY8PNzpPzfZ2dmmdu3aplatWo62Swmoxlz4c2/fgGzevNnR9vXXXxtJLkE6vyvxHS3M8ixsQI2KijJHjhxxam/Tpo0pW7asOXDgQIE12efRQw895NQ+ceJEI8ns27fP7XC5ubkmKyvLrF692kgy33zzjTHGmEOHDhlJZsqUKQW+Z2HWn4MHDzbh4eGOdZTdbbfdZho2bFjgexjj2fR7upztn8+bbrrJqd+JEydM+fLlTefOnZ3ac3JyTIMGDUyTJk1c3rNnz54mJibmgrUb8+eyzhs67euU/Mvrq6++MpLMU0895Whr1aqVkWSWL19+0ffyZLkZ4/k6YuTIkUaS+eqrr5z6DR482FgsFsd63/6dqFmzptMODGP+XJ/mXZcXplZ3atasaWrWrOn0/cvvxhtvNJUqVTKZmZmOtuzsbFOvXj1TrVo1x2fR/t3J/zm+8847jSQzefJkp/aGDRua6667zvG8MOuD/LKzs83Zs2fNVVdd5bR9sX9Ob731Vqf+77//vpHk9B/o/OsYT7f/GzZsMJLMokWLCqzPE169zJQxxm17ixYttH79eqfHQw89dMFxffbZZ7r66qvVrl27Iq2xS5cuLm39+vXT2rVrnXaHv/3227r++utVr149SdLSpUuVnZ2t3r17Kzs72/EICwtTq1atLnqYcsWKFWrbtq3i4uKc2vv27auTJ09q3bp1lz9xbuQ/RaN+/fo6ffq0Dhw4IEn65JNPZLFY1KtXL6fpqly5sho0aODxL6V79uzp9Lxbt26yWq1auXKly/tfffXVTm2ffPKJWrdurapVqzrVYD+/b/Xq1ZKklStXqkyZMi7TdO+99160vrS0NOXk5Ojhhx/2aHry++STT1S2bFl17tzZqcaGDRuqcuXKjvlkn96C5oen7rrrLoWFhTmelylTRp07d9YXX3yhnJwcp775P9MrVqyQJJfTPe6++25FRES4HEqqW7euGjRo4NR27733KiMjQ5s2bXK0zZ8/X82bN1fp0qVltVoVEhKit956Sz/88INL/W3btlVMTIzjeXBwsLp3765ffvmlcIeECqlHjx6qVKmSXnvtNUfbK6+8oooVK6p79+4XHPZKfkcLszw91aZNG5UrV87x/OTJk1q9erW6devmOA3iQtytGyQ5naK1fft23XvvvapcubKCg4MVEhKiVq1aSZJjuZcvX141a9bUSy+9pMmTJ2vz5s0uV3QpzPpz7969qlixostpDU2aNNE333yjhx56SEuXLnU5LcvT6S/scs7//Vq7dq2OHDmiPn36OE1Lbm6ubrnlFq1fv97lFIhKlSrpwIEDl3SepX2dkv/73KRJEyUlJbl8n8uVK6c2bdpcdLyeLDc7T9YRK1asUJ06ddSkSROnfn379pUxxrFesrv99tsVEhJy0ToLW2teP/30k3799Vf179/f6fuX14kTJ/TVV1+pa9euKl26tKM9ODhY9913n/bs2eNyqDz/lU+SkpIkSZ06dXJpd3fKoyfrg+zsbP31r39VnTp1FBoaKqvVqtDQUP38889u17mefJ/z83T7X6tWLZUrV05PPvmkZsyYoW3bthU4zgvxOKBGR0erVKlS+u233y7pjdyxz4iqVas6tUdFRalx48ZOj/x98jt48GCR/8ilVKlSioyMdGnv2bOnbDab45zVbdu2af369erXr5+jz/79+yVJ119/vUJCQpweqamp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u02tW7dW5cqV1a5dO40fP17lypVTfHy8li9f7jgEVRgpKSmqVq2aHnroIaWnpzsd3pfObTzGjRun0aNHa/v27brllltUrlw57d+/X19//bUiIiIueCHmMWPGOM61fPbZZ1W+fHnNmTNHn376qSZOnOhycwNPlClTRvHx8fr3v/+ttm3bqnz58oqOji7URcObN2+uBx98UP369dOGDRt00003KSIiQvv27dOXX36pa6+9VoMHD77oeBYuXCir1ar27dvr+++/1zPPPKMGDRqoW7duFx123LhxSktLU7NmzTRkyBBdc801On36tHbs2KHFixdrxowZqlatmnr37q2///3v6t27t1588UVdddVVWrx4sUcb8ISEBD311FN6/vnnderUKcelt7Zt26ZDhw45lt21116rhQsXavr06UpOTlZQUJAaN26se+65R3PmzNGtt96qoUOHqkmTJgoJCdGePXu0cuVK3XHHHfq///s/JSUlqVevXpoyZYpCQkLUrl07bd26VZMmTXJ7eklBgoOD1b59ew0fPly5ubmaMGGCMjIyPLrYd/v27dWhQwc9+eSTysjIUPPmzfXtt99qzJgxatSokcvle6pWrarbb79dY8eOVZUqVfTuu+8qLS1NEyZMcFw/0X55sIceekhdu3bV7t279fzzz6tKlSr6+eefXWqIjo5WmzZt9MwzzygiIkLTpk3Tjz/+eNFL7XjCk8/90KFDdcMNN0g6959nT1yJ76idJ8uze/fuevbZZ3XPPffoiSee0OnTpzV16tRCnaM6efJktWjRQjfccINGjhypWrVqaf/+/froo4/0+uuvO/b0e6JZs2YqV66cBg0apDFjxigkJERz5sxxCSrffvutHnnkEd1999266qqrFBoaqhUrVujbb7917FkpzPrz5ptvljFGX331lVJSUhzv07lzZ9WrV0+NGzdWxYoVtXPnTk2ZMkXx8fG66qqrPJ7+y13OpUuX1iuvvKI+ffroyJEj6tq1qypVqqSDBw/qm2++0cGDB53+I5ybm6uvv/5a/fv393je53XNNdfowQcf1CuvvKKgoCB17NhRO3bs0DPPPKO4uDgNGzbsksbryXKz82QdMWzYMM2ePVudOnXSuHHjFB8fr08//VTTpk3T4MGDPQp5NWvWVHh4uObMmaOkpCSVLl1aVatW1aFDhzyuNb/XXntNnTt3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Y49p2rRpat68uV5//XV17NhR27ZtU/Xq1d0O061bN+3fv19vvfWWatWqpQMHDig7O9vjugAAAHBxfrMHVZK2bdt20T7vvvuuR+OaPHmy+vfvrwEDBigpKUlTpkxRXFycpk+f7rb/kiVLtHr1ai1evFjt2rVTQkKCmjRpombNmhVqGgAAAHBhfhVQk5OTNWnSJKcfR9nt379ft99+uwYPHnzR8Zw9e1YbN25USkqKU3tKSorWrl3rdpiPPvpIjRs31sSJExUbG6urr75ajz/+uE6dOlXg+5w5c0YZGRlODwAAAFyYXwXUd999VxMnTtRNN92kX3/91am9Tp06On78uLZs2XLR8Rw6dEg5OTmKiYlxao+JiVF6errbYbZv364vv/xSW7du1YcffqgpU6ZowYIFevjhhwt8n/HjxysqKsrxiIuL82xCAQAASjC/CqhdunTR1q1bFR0drQYNGmjSpEm64447NHDgQD377LNatWqVatas6fH4LBbney8ZY1za7HJzc2WxWDRnzhw1adJEt956qyZPnqxZs2YVuBd11KhROn78uOOxe/duzyf2EhRQOgAAgF/xmx9J2VWqVEkffvihevbsqb/85S+KiIjQf//7X1177bUejyM6OlrBwcEue0sPHDjgslfVrkqVKoqNjVVUVJSjLSkpScYY7dmzR1dddZXLMDabrcTePAAAAOBS+dUeVEk6evSo7r33Xi1atEgjR45UpUqV1L1790Jd9zQ0NFTJyclKS0tzak9LSyvwR0/NmzfX3r179ccffzjafvrpJwUFBalatWqXNjEAAABw4VcB9ZNPPlGdOnX066+/auPGjfrrX/+qb7/9Vq1atVKLFi309NNPe3zZp+HDh+vNN9/UzJkz9cMPP2jYsGHatWuXBg0aJOnc4fnevXs7+t97772qUKGC+vXrp23btumLL77QE088ofvvv1/h4eFXZHo9ZcS9TgEAQODwq4DatWtXPfroo1q3bp1q164tSYqIiND06dP1ySef6J133lHjxo09Glf37t01ZcoUjRs3Tg0bNtQXX3yhxYsXKz4+XpK0b98+7dq1y9G/dOnSSktL07Fjx9S4cWP17NlTnTt31tSpU4t+QgEAAEowi3F3zSYf9e2336p+/foFvp6RkaFhw4bprbfeKsaqPJeRkaGoqCgdP35ckZGRRTbeH9MzdMuUNYou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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# number of observations\n",
"N = len(y_pred_prob)\n",
"\n",
"# sort the data in ascending order \n",
"y_pred_prob_sorted = np.sort(y_pred_prob) \n",
"\n",
"# get the cdf values of y \n",
"steps = np.arange(N) / N\n",
" \n",
"# plotting \n",
"plt.xlabel('X') \n",
"plt.ylabel('P(score<=X)') \n",
" \n",
"plt.title('CDF curve of the predicted probability of purchasec(score) for sports companies') \n",
" \n",
"plt.plot(y_pred_prob_sorted, steps) \n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "e87efb96-71e6-4571-9a48-576ff5ebcbdc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 ,\n",
" 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95, 1. ])"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# on regarde de plus près les quantiles (on identifie 2 clusters, où est le cut-off ?)\n",
"\n",
"np.linspace(0,1, 21)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "ccd8373c-85c4-451d-b918-7bb84713c9ea",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(90634,)"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred_prob_sorted[y_pred_prob < 0.1].shape"
]
},
{
"cell_type": "code",
"execution_count": 65,
"id": "75a2c582-3020-4e2e-9a41-0da75c5dbbed",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"score du quantile 0.0 : 1.0\n",
"score du quantile 0.05 : 1.1703610048497538e-08\n",
"score du quantile 0.1 : 1.1916538583855572e-08\n",
"score du quantile 0.15000000000000002 : 1.672960453020865e-08\n",
"score du quantile 0.2 : 2.261530896018714e-08\n",
"score du quantile 0.25 : 4.429426100901144e-08\n",
"score du quantile 0.30000000000000004 : 5.527720441770875e-08\n",
"score du quantile 0.35000000000000003 : 6.583003552085313e-08\n",
"score du quantile 0.4 : 1.0150014636815537e-07\n",
"score du quantile 0.45 : 1.045553983975125e-07\n",
"score du quantile 0.5 : 1.8254643649033717e-07\n",
"score du quantile 0.55 : 1.0036337913333724e-06\n",
"score du quantile 0.6000000000000001 : 3.6006418270834777e-06\n",
"score du quantile 0.65 : 8.750051427856617e-06\n",
"score du quantile 0.7000000000000001 : 1.7761176996762073e-05\n",
"score du quantile 0.75 : 3.658511676930477e-05\n",
"score du quantile 0.8 : 7.449089979671675e-05\n",
"score du quantile 0.8500000000000001 : 0.0001599334998042523\n",
"score du quantile 0.9 : 0.0006156933309033692\n",
"score du quantile 0.9500000000000001 : 0.5161846499348189\n",
"score du quantile 1.0 : 1.0\n"
]
}
],
"source": [
"for step in np.linspace(0,1, 21) :\n",
" score_reached = y_pred_prob_sorted[int(step*N)-1]\n",
" print(f\"score du quantile {step} : {score_reached}\")\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 67,
"id": "3e7d04c4-1add-4ef3-bca5-c2f68356b669",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"score du quantile 0.94 : 0.046364832132301186\n",
"score du quantile 0.941 : 0.060426331367796585\n",
"score du quantile 0.942 : 0.07560789365683944\n",
"score du quantile 0.943 : 0.0961854989484283\n",
"score du quantile 0.944 : 0.12036366182214445\n",
"score du quantile 0.945 : 0.15326229828189683\n",
"score du quantile 0.946 : 0.20141929276940546\n",
"score du quantile 0.947 : 0.26129057078459816\n",
"score du quantile 0.948 : 0.34459110917836233\n",
"score du quantile 0.949 : 0.42441766527261676\n",
"score du quantile 0.95 : 0.5161846499348189\n",
"score du quantile 0.951 : 0.6281715747542238\n",
"score du quantile 0.952 : 0.7161294443763133\n",
"score du quantile 0.953 : 0.8098274658632696\n",
"score du quantile 0.954 : 0.8628210594682936\n",
"score du quantile 0.955 : 0.9031546758694196\n",
"score du quantile 0.956 : 0.9406325197642711\n",
"score du quantile 0.957 : 0.9717094630837765\n",
"score du quantile 0.958 : 0.9853416074407844\n",
"score du quantile 0.959 : 0.99263528504162\n",
"score du quantile 0.96 : 0.9965103675841931\n"
]
}
],
"source": [
"# le saut survient entre le quantile 0.94 et 0.955\n",
"# on peut prendre le quantile 0.95 / score = 0.52 comme cut-off approximatif\n",
"for step in np.linspace(0.94,0.96, 21) :\n",
" score_reached = y_pred_prob_sorted[int(step*N)-1]\n",
" print(f\"score du quantile {step} : {score_reached}\")"
]
},
{
"cell_type": "code",
"execution_count": 90,
"id": "5d8bb4ea-0030-4d23-8cff-26c9ed54ca71",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-4 {\n",
" /* Definition of color scheme common for light and dark mode */\n",
" --sklearn-color-text: black;\n",
" --sklearn-color-line: gray;\n",
" /* Definition of color scheme for unfitted estimators */\n",
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
" --sklearn-color-unfitted-level-3: chocolate;\n",
" /* Definition of color scheme for fitted estimators */\n",
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
" --sklearn-color-fitted-level-1: #d4ebff;\n",
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
"\n",
" /* Specific color for light theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
" --sklearn-color-icon: #696969;\n",
"\n",
" @media (prefers-color-scheme: dark) {\n",
" /* Redefinition of color scheme for dark theme */\n",
" --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
" --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
" --sklearn-color-icon: #878787;\n",
" }\n",
"}\n",
"\n",
"#sk-container-id-4 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-4 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-4 input.sk-hidden--visually {\n",
" border: 0;\n",
" clip: rect(1px 1px 1px 1px);\n",
" clip: rect(1px, 1px, 1px, 1px);\n",
" height: 1px;\n",
" margin: -1px;\n",
" overflow: hidden;\n",
" padding: 0;\n",
" position: absolute;\n",
" width: 1px;\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-dashed-wrapped {\n",
" border: 1px dashed var(--sklearn-color-line);\n",
" margin: 0 0.4em 0.5em 0.4em;\n",
" box-sizing: border-box;\n",
" padding-bottom: 0.4em;\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-container {\n",
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
" so we also need the `!important` here to be able to override the\n",
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
" display: inline-block !important;\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-text-repr-fallback {\n",
" display: none;\n",
"}\n",
"\n",
"div.sk-parallel-item,\n",
"div.sk-serial,\n",
"div.sk-item {\n",
" /* draw centered vertical line to link estimators */\n",
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
" background-size: 2px 100%;\n",
" background-repeat: no-repeat;\n",
" background-position: center center;\n",
"}\n",
"\n",
"/* Parallel-specific style estimator block */\n",
"\n",
"#sk-container-id-4 div.sk-parallel-item::after {\n",
" content: \"\";\n",
" width: 100%;\n",
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
" flex-grow: 1;\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-parallel {\n",
" display: flex;\n",
" align-items: stretch;\n",
" justify-content: center;\n",
" background-color: var(--sklearn-color-background);\n",
" position: relative;\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-4 div.sk-serial {\n",
" display: flex;\n",
" flex-direction: column;\n",
" align-items: center;\n",
" background-color: var(--sklearn-color-background);\n",
" padding-right: 1em;\n",
" padding-left: 1em;\n",
"}\n",
"\n",
"\n",
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
"clickable and can be expanded/collapsed.\n",
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
"*/\n",
"\n",
"/* Pipeline and ColumnTransformer style (default) */\n",
"\n",
"#sk-container-id-4 div.sk-toggleable {\n",
" /* Default theme specific background. It is overwritten whether we have a\n",
" specific estimator or a Pipeline/ColumnTransformer */\n",
" background-color: var(--sklearn-color-background);\n",
"}\n",
"\n",
"/* Toggleable label */\n",
"#sk-container-id-4 label.sk-toggleable__label {\n",
" cursor: pointer;\n",
" display: block;\n",
" width: 100%;\n",
" margin-bottom: 0;\n",
" padding: 0.5em;\n",
" box-sizing: border-box;\n",
" text-align: center;\n",
"}\n",
"\n",
"#sk-container-id-4 label.sk-toggleable__label-arrow:before {\n",
" /* Arrow on the left of the label */\n",
" content: \"▸\";\n",
" float: left;\n",
" margin-right: 0.25em;\n",
" color: var(--sklearn-color-icon);\n",
"}\n",
"\n",
"#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-4 div.sk-toggleable__content {\n",
" max-height: 0;\n",
" max-width: 0;\n",
" overflow: hidden;\n",
" text-align: left;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-toggleable__content pre {\n",
" margin: 0.2em;\n",
" border-radius: 0.25em;\n",
" color: var(--sklearn-color-text);\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
" /* Expand drop-down */\n",
" max-height: 200px;\n",
" max-width: 100%;\n",
" overflow: auto;\n",
"}\n",
"\n",
"#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
" content: \"▾\";\n",
"}\n",
"\n",
"/* Pipeline/ColumnTransformer-specific style */\n",
"\n",
"#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator-specific style */\n",
"\n",
"/* Colorize estimator box */\n",
"#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-4 div.sk-label label {\n",
" /* The background is the default theme color */\n",
" color: var(--sklearn-color-text-on-default-background);\n",
"}\n",
"\n",
"/* On hover, darken the color of the background */\n",
"#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"/* Label box, darken color on hover, fitted */\n",
"#sk-container-id-4 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
" color: var(--sklearn-color-text);\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Estimator label */\n",
"\n",
"#sk-container-id-4 div.sk-label label {\n",
" font-family: monospace;\n",
" font-weight: bold;\n",
" display: inline-block;\n",
" line-height: 1.2em;\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-4 div.sk-estimator {\n",
" font-family: monospace;\n",
" border: 1px dotted var(--sklearn-color-border-box);\n",
" border-radius: 0.25em;\n",
" box-sizing: border-box;\n",
" margin-bottom: 0.5em;\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-4 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-4 div.sk-estimator.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-2);\n",
"}\n",
"\n",
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
"\n",
"/* Common style for \"i\" and \"?\" */\n",
"\n",
".sk-estimator-doc-link,\n",
"a:link.sk-estimator-doc-link,\n",
"a:visited.sk-estimator-doc-link {\n",
" float: right;\n",
" font-size: smaller;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1em;\n",
" height: 1em;\n",
" width: 1em;\n",
" text-decoration: none !important;\n",
" margin-left: 1ex;\n",
" /* unfitted */\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted,\n",
"a:link.sk-estimator-doc-link.fitted,\n",
"a:visited.sk-estimator-doc-link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
".sk-estimator-doc-link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover,\n",
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
".sk-estimator-doc-link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"/* Span, style for the box shown on hovering the info icon */\n",
".sk-estimator-doc-link span {\n",
" display: none;\n",
" z-index: 9999;\n",
" position: relative;\n",
" font-weight: normal;\n",
" right: .2ex;\n",
" padding: .5ex;\n",
" margin: .5ex;\n",
" width: min-content;\n",
" min-width: 20ex;\n",
" max-width: 50ex;\n",
" color: var(--sklearn-color-text);\n",
" box-shadow: 2pt 2pt 4pt #999;\n",
" /* unfitted */\n",
" background: var(--sklearn-color-unfitted-level-0);\n",
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link.fitted span {\n",
" /* fitted */\n",
" background: var(--sklearn-color-fitted-level-0);\n",
" border: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"\n",
".sk-estimator-doc-link:hover span {\n",
" display: block;\n",
"}\n",
"\n",
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
"\n",
"#sk-container-id-4 a.estimator_doc_link {\n",
" float: right;\n",
" font-size: 1rem;\n",
" line-height: 1em;\n",
" font-family: monospace;\n",
" background-color: var(--sklearn-color-background);\n",
" border-radius: 1rem;\n",
" height: 1rem;\n",
" width: 1rem;\n",
" text-decoration: none;\n",
" /* unfitted */\n",
" color: var(--sklearn-color-unfitted-level-1);\n",
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
"}\n",
"\n",
"#sk-container-id-4 a.estimator_doc_link.fitted {\n",
" /* fitted */\n",
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
" color: var(--sklearn-color-fitted-level-1);\n",
"}\n",
"\n",
"/* On hover */\n",
"#sk-container-id-4 a.estimator_doc_link:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-3);\n",
" color: var(--sklearn-color-background);\n",
" text-decoration: none;\n",
"}\n",
"\n",
"#sk-container-id-4 a.estimator_doc_link.fitted:hover {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-3);\n",
"}\n",
"</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=2, random_state=0)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=2, random_state=0)</pre></div> </div></div></div></div>"
],
"text/plain": [
"KMeans(n_clusters=2, random_state=0)"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# simple K-means pour déterminer le seuil qui sépare les 2 clusters apparents\n",
"\n",
"from sklearn.cluster import KMeans\n",
"\n",
"kmeans = KMeans(n_clusters=2, random_state=0)\n",
"\n",
"kmeans.fit(y_pred_prob.reshape(-1,1))"
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "afbf8247-4cb1-455b-96df-7e9a87407413",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 0, ..., 0, 0, 0], dtype=int32)"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_clusters = kmeans.predict(y_pred_prob.reshape(-1,1))\n",
"y_clusters"
]
},
{
"cell_type": "code",
"execution_count": 93,
"id": "e4747b82-1967-4043-bcd1-7659dbd87a2a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4846"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_clusters[y_clusters==1].size"
]
},
{
"cell_type": "code",
"execution_count": 94,
"id": "2853083a-99a4-4ae9-9e8d-ddf175cca7ee",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9495712620712621"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 5% des individus sont dans le cluster 1\n",
"1 - y_clusters.mean()"
]
},
{
"cell_type": "markdown",
"id": "d18c8a4c-7d19-4d24-a304-cb26a533303e",
"metadata": {},
"source": [
"Intérêt du K-means : permet d'identifier un seuil de passage d'un cluster à l'autre quand le cluster est restreint, comme ici où on isole les clients avec la proba d'achat dans le quantile 0.95, et on les sépare des 95% restant"
]
},
{
"cell_type": "code",
"execution_count": 95,
"id": "77f59f30-1dc6-43b8-98b7-d179a966786a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"part d'individus dans le cluster 0 : 0.9495712620712621\n",
"seuil de passage du cluster 0 au cluster 1 : 0.4855790414879801\n"
]
}
],
"source": [
"# seuil de split \n",
"\n",
"size_cluster_0 = 1 - y_clusters.mean()\n",
"seuil_cluster = y_pred_prob_sorted[int(1 - y_clusters.mean()*N)]\n",
"\n",
"print(f\"part d'individus dans le cluster 0 : {size_cluster_0}\")\n",
"print(f\"seuil de passage du cluster 0 au cluster 1 : {seuil_cluster}\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}