From 0a7900c07f9a033e2cfb6b7ae0fa515b57e57a6e Mon Sep 17 00:00:00 2001 From: tpique-ensae Date: Sat, 30 Mar 2024 11:00:49 +0000 Subject: [PATCH] take new databases as input --- 0_7_CA_segment.py | 5 +- Sport/Modelization/CA_segment_sport.ipynb | 2196 ++++++++++----------- utils_CA_segment.py | 12 +- 3 files changed, 1071 insertions(+), 1142 deletions(-) diff --git a/0_7_CA_segment.py b/0_7_CA_segment.py index f69ab53..9cb0593 100644 --- a/0_7_CA_segment.py +++ b/0_7_CA_segment.py @@ -27,7 +27,8 @@ type_of_activity = input('Choisissez le type de compagnie : sport ? musique ? mu PATH = f"projet-bdc2324-team1/Output_expected_CA/{type_of_activity}/" # type of model for the score -type_of_model = "LogisticRegression_cv" +# type_of_model = "LogisticRegression_cv" +type_of_model = "LogisticRegression_Benchmark" # load train and test sets dataset_train, dataset_test = load_train_test(type_of_activity) @@ -68,6 +69,8 @@ save_file_s3_ca("hist_score_adjusted_", type_of_activity) X_test_table_adjusted_scores = (100 * X_test_segment.groupby("quartile")[["score","score_adjusted", "has_purchased"]].mean()).round(2).reset_index() X_test_table_adjusted_scores = X_test_table_adjusted_scores.rename(columns = {col : f"{col} (%)" for col in X_test_table_adjusted_scores.columns if col in ["score","score_adjusted", "has_purchased"]}) +print(X_test_table_adjusted_scores) + # save table file_name = "table_adjusted_score_" FILE_PATH_OUT_S3 = PATH + file_name + type_of_activity + ".csv" diff --git a/Sport/Modelization/CA_segment_sport.ipynb b/Sport/Modelization/CA_segment_sport.ipynb index 23ba22f..17b85bc 100644 --- a/Sport/Modelization/CA_segment_sport.ipynb +++ b/Sport/Modelization/CA_segment_sport.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 1, "id": "9771bf29-d08e-4674-8c23-9a2672fbef8f", "metadata": {}, "outputs": [], @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 2, "id": "539ccbdf-f29f-4f04-99c1-8c88d0efe514", "metadata": {}, "outputs": [], @@ -75,23 +75,24 @@ }, { "cell_type": "code", - "execution_count": 270, + "execution_count": 75, "id": "d6017ed0-6233-4888-85a7-05dec50a255b", "metadata": {}, "outputs": [], "source": [ - "type_of_activity = \"musee\"" + "type_of_activity = \"musique\"" ] }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 4, "id": "0c3a6ddc-9345-4a42-b6bf-a20a95de3028", "metadata": {}, "outputs": [], "source": [ "def load_train_test(type_of_activity):\n", - " BUCKET = f\"projet-bdc2324-team1/Generalization/{type_of_activity}\"\n", + " # BUCKET = f\"projet-bdc2324-team1/Generalization/{type_of_activity}\"\n", + " BUCKET = f\"projet-bdc2324-team1/Generalization_v2/{type_of_activity}\"\n", " File_path_train = BUCKET + \"/Train_set.csv\"\n", " File_path_test = BUCKET + \"/Test_set.csv\"\n", " \n", @@ -108,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 271, + "execution_count": 76, "id": "2831d546-b365-498b-8248-c618bd9c3057", "metadata": {}, "outputs": [ @@ -116,57 +117,30 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_1080/2350085345.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" + "/tmp/ipykernel_552/3983721681.py:8: DtypeWarning: Columns (10,19,20,21,24) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " dataset_train = pd.read_csv(file_in, sep=\",\")\n", + "/tmp/ipykernel_552/3983721681.py:12: DtypeWarning: Columns (19,20,21,24) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " dataset_test = 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 389658\n", - "mcp_contact_id 150354\n", - "fidelity 0\n", - "tenant_id 0\n", - "is_partner 0\n", - "deleted_at 434278\n", - "gender 0\n", - "is_email_true 0\n", - "opt_in 0\n", - "last_buying_date 183987\n", - "max_price 183987\n", - "ticket_sum 0\n", - "average_price 94783\n", - "average_purchase_delay 183987\n", - "average_price_basket 183987\n", - "average_ticket_basket 183987\n", - "total_price 89204\n", - "purchase_count 0\n", - "first_buying_date 183987\n", - "country 141237\n", - "gender_label 0\n", - "gender_female 0\n", - "gender_male 0\n", - "gender_other 0\n", - "country_fr 141237\n", - "nb_campaigns 0\n", - "nb_campaigns_opened 0\n", - "time_to_open 258182\n", - "y_has_purchased 0\n", - "dtype: int64" + "customer_id 0\n", + "street_id 0\n", + "structure_id 327020\n", + "mcp_contact_id 135470\n", + "fidelity 0\n", + " ... \n", + "purchases_8_2021 113963\n", + "purchases_8_2022 0\n", + "purchases_9_2021 113963\n", + "purchases_9_2022 0\n", + "y_has_purchased 0\n", + "Length: 87, dtype: int64" ] }, - "execution_count": 271, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } @@ -178,15 +152,15 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 17, "id": "b8827f7b-b304-4f51-9814-c7a98ed88cf0", "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", + " features_l = ['nb_tickets', 'nb_purchases', 'total_amount', 'nb_suppliers', 'purchase_date_min', 'purchase_date_max', \n", + " 'time_between_purchase', 'fidelity', 'is_email_true', 'opt_in', #'is_partner', 'nb_tickets_internet',, 'vente_internet_max'\n", " 'gender_female', 'gender_male', 'gender_other', 'nb_campaigns', 'nb_campaigns_opened']\n", "\n", " # we suppress fidelity, time between purchase, and gender other (colinearity issue)\n", @@ -196,17 +170,17 @@ " 'opt_in', 'gender_female', 'gender_male', 'nb_campaigns', 'nb_campaigns_opened']\n", " \"\"\"\n", " \n", - " X_train = dataset_train[features_l]\n", + " X_train = dataset_train # [features_l]\n", " y_train = dataset_train[['y_has_purchased']]\n", "\n", - " X_test = dataset_test[features_l]\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": 272, + "execution_count": 77, "id": "c18195fc-ed40-4e39-a59e-c9ecc5a8e6c3", "metadata": {}, "outputs": [ @@ -214,8 +188,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Shape train : (434278, 17)\n", - "Shape test : (186120, 17)\n" + "Shape train : (354365, 87)\n", + "Shape test : (151874, 87)\n" ] } ], @@ -235,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 78, "id": "7c81390e-598c-4f02-bd56-dd03b00dcb33", "metadata": {}, "outputs": [ @@ -260,123 +234,147 @@ " \n", " \n", " \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", - " time_between_purchase\n", - " nb_tickets_internet\n", + " customer_id\n", + " street_id\n", + " structure_id\n", + " mcp_contact_id\n", " fidelity\n", + " tenant_id\n", + " is_partner\n", + " deleted_at\n", " is_email_true\n", " opt_in\n", - " gender_female\n", - " gender_male\n", - " gender_other\n", - " nb_campaigns\n", - " nb_campaigns_opened\n", + " ...\n", + " purchases_5_2022\n", + " purchases_6_2021\n", + " purchases_6_2022\n", + " purchases_7_2021\n", + " purchases_7_2022\n", + " purchases_8_2021\n", + " purchases_8_2022\n", + " purchases_9_2021\n", + " purchases_9_2022\n", + " y_has_purchased\n", " \n", " \n", " \n", " \n", " 0\n", - " 4.0\n", - " 1.0\n", - " 100.00\n", - " 1.0\n", - " 0.0\n", - " 5.177187\n", - " 5.177187\n", - " 0.000000\n", - " 0.0\n", - " 1\n", - " True\n", + " 10_699783\n", + " 139\n", + " NaN\n", + " 186852.0\n", + " 0\n", + " 875\n", " False\n", - " 1\n", - " 0\n", + " NaN\n", + " True\n", " 0\n", + " ...\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 0.0\n", " 0.0\n", " \n", " \n", " 1\n", - " 1.0\n", - " 1.0\n", - " 55.00\n", - " 1.0\n", - " 0.0\n", - " 426.265613\n", - " 426.265613\n", - " 0.000000\n", - " 0.0\n", - " 2\n", - " True\n", + " 10_38307\n", + " 862\n", + " NaN\n", + " 17621.0\n", + " 7\n", + " 875\n", + " False\n", + " NaN\n", " True\n", " 0\n", - " 1\n", - " 0\n", + " ...\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 0.0\n", " 0.0\n", " \n", " \n", " 2\n", - " 17.0\n", - " 1.0\n", - " 80.00\n", - " 1.0\n", - " 0.0\n", - " 436.033437\n", - " 436.033437\n", - " 0.000000\n", - " 0.0\n", - " 2\n", - " True\n", + " 10_556101\n", + " 1063\n", + " NaN\n", + " 136909.0\n", + " 0\n", + " 875\n", + " False\n", + " NaN\n", " True\n", " 1\n", - " 0\n", - " 0\n", + " ...\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 0.0\n", " 0.0\n", " \n", " \n", " 3\n", - " 4.0\n", - " 1.0\n", - " 120.00\n", - " 1.0\n", - " 0.0\n", - " 5.196412\n", - " 5.196412\n", - " 0.000000\n", - " 0.0\n", + " 10_686663\n", + " 443226\n", + " NaN\n", + " 186611.0\n", " 1\n", - " True\n", + " 875\n", " False\n", + " NaN\n", + " True\n", " 1\n", - " 0\n", - " 0\n", + " ...\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", " 0.0\n", " 0.0\n", " \n", " \n", " 4\n", - " 34.0\n", - " 2.0\n", - " 416.00\n", - " 1.0\n", - " 0.0\n", - " 478.693148\n", - " 115.631470\n", - " 363.061678\n", - " 0.0\n", - " 4\n", - " True\n", + " 10_91656\n", + " 316684\n", + " NaN\n", + " 21559.0\n", + " 2\n", + " 875\n", " False\n", - " 1\n", - " 0\n", + " NaN\n", + " True\n", " 0\n", + " ...\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " 0.0\n", " 0.0\n", " \n", @@ -399,182 +397,206 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 96091\n", - " 1.0\n", - " 1.0\n", - " 67.31\n", - " 1.0\n", - " 1.0\n", - " 278.442257\n", - " 278.442257\n", - " 0.000000\n", + " 151869\n", + " 14_1843791\n", + " 718883\n", + " 224.0\n", + " 394849.0\n", + " 1\n", + " 862\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", + " ...\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " 0.0\n", + " \n", + " \n", + " 151870\n", + " 14_4630858\n", + " 741826\n", + " NaN\n", + " 1555631.0\n", + " 0\n", + " 862\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", + " ...\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " 0.0\n", + " \n", + " \n", + " 151871\n", + " 14_4659926\n", + " 871477\n", + " NaN\n", + " 1542180.0\n", + " 0\n", + " 862\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", + " ...\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " 0.0\n", + " \n", + " \n", + " 151872\n", + " 14_4881492\n", + " 917272\n", + " NaN\n", + " NaN\n", + " 1\n", + " 862\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", + " ...\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", " 1.0\n", + " 0.0\n", + " \n", + " \n", + " 151873\n", + " 14_8124\n", + " 2762\n", + " NaN\n", + " 10077.0\n", " 2\n", - " True\n", + " 862\n", " False\n", - " 0\n", - " 1\n", - " 0\n", - " 15.0\n", - " 5.0\n", - " \n", - " \n", - " 96092\n", - " 1.0\n", - " 1.0\n", - " 61.41\n", - " 1.0\n", - " 1.0\n", - " 189.207373\n", - " 189.207373\n", - " 0.000000\n", - " 1.0\n", - " 1\n", + " NaN\n", " True\n", - " False\n", " 0\n", - " 1\n", - " 0\n", - " 12.0\n", - " 9.0\n", - " \n", - " \n", - " 96093\n", + " ...\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", + " 0.0\n", + " NaN\n", " 0.0\n", " 0.0\n", - " 0.00\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", - " 1\n", - " True\n", - " True\n", - " 1\n", - " 0\n", - " 0\n", - " 29.0\n", - " 3.0\n", - " \n", - " \n", - " 96094\n", - " 1.0\n", - " 1.0\n", - " 79.43\n", - " 1.0\n", - " 1.0\n", - " 279.312905\n", - " 279.312905\n", - " 0.000000\n", - " 1.0\n", - " 1\n", - " True\n", - " False\n", - " 0\n", - " 1\n", - " 0\n", - " 20.0\n", - " 4.0\n", - " \n", - " \n", - " 96095\n", - " 0.0\n", - " 0.0\n", - " 0.00\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", - " 2\n", - " True\n", - " False\n", - " 0\n", - " 1\n", - " 0\n", - " 31.0\n", - " 4.0\n", " \n", " \n", "\n", - "

96096 rows × 17 columns

\n", + "

151874 rows × 87 columns

\n", "" ], "text/plain": [ - " nb_tickets nb_purchases total_amount nb_suppliers \\\n", - "0 4.0 1.0 100.00 1.0 \n", - "1 1.0 1.0 55.00 1.0 \n", - "2 17.0 1.0 80.00 1.0 \n", - "3 4.0 1.0 120.00 1.0 \n", - "4 34.0 2.0 416.00 1.0 \n", - "... ... ... ... ... \n", - "96091 1.0 1.0 67.31 1.0 \n", - "96092 1.0 1.0 61.41 1.0 \n", - "96093 0.0 0.0 0.00 0.0 \n", - "96094 1.0 1.0 79.43 1.0 \n", - "96095 0.0 0.0 0.00 0.0 \n", + " customer_id street_id structure_id mcp_contact_id fidelity \\\n", + "0 10_699783 139 NaN 186852.0 0 \n", + "1 10_38307 862 NaN 17621.0 7 \n", + "2 10_556101 1063 NaN 136909.0 0 \n", + "3 10_686663 443226 NaN 186611.0 1 \n", + "4 10_91656 316684 NaN 21559.0 2 \n", + "... ... ... ... ... ... \n", + "151869 14_1843791 718883 224.0 394849.0 1 \n", + "151870 14_4630858 741826 NaN 1555631.0 0 \n", + "151871 14_4659926 871477 NaN 1542180.0 0 \n", + "151872 14_4881492 917272 NaN NaN 1 \n", + "151873 14_8124 2762 NaN 10077.0 2 \n", "\n", - " vente_internet_max purchase_date_min purchase_date_max \\\n", - "0 0.0 5.177187 5.177187 \n", - "1 0.0 426.265613 426.265613 \n", - "2 0.0 436.033437 436.033437 \n", - "3 0.0 5.196412 5.196412 \n", - "4 0.0 478.693148 115.631470 \n", - "... ... ... ... \n", - "96091 1.0 278.442257 278.442257 \n", - "96092 1.0 189.207373 189.207373 \n", - "96093 0.0 550.000000 550.000000 \n", - "96094 1.0 279.312905 279.312905 \n", - "96095 0.0 550.000000 550.000000 \n", + " tenant_id is_partner deleted_at is_email_true opt_in ... \\\n", + "0 875 False NaN True 0 ... \n", + "1 875 False NaN True 0 ... \n", + "2 875 False NaN True 1 ... \n", + "3 875 False NaN True 1 ... \n", + "4 875 False NaN True 0 ... \n", + "... ... ... ... ... ... ... \n", + "151869 862 False NaN True 1 ... \n", + "151870 862 False NaN True 1 ... \n", + "151871 862 False NaN True 1 ... \n", + "151872 862 False NaN True 1 ... \n", + "151873 862 False NaN True 0 ... \n", "\n", - " time_between_purchase nb_tickets_internet fidelity is_email_true \\\n", - "0 0.000000 0.0 1 True \n", - "1 0.000000 0.0 2 True \n", - "2 0.000000 0.0 2 True \n", - "3 0.000000 0.0 1 True \n", - "4 363.061678 0.0 4 True \n", - "... ... ... ... ... \n", - "96091 0.000000 1.0 2 True \n", - "96092 0.000000 1.0 1 True \n", - "96093 -1.000000 0.0 1 True \n", - "96094 0.000000 1.0 1 True \n", - "96095 -1.000000 0.0 2 True \n", + " purchases_5_2022 purchases_6_2021 purchases_6_2022 purchases_7_2021 \\\n", + "0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... \n", + "151869 0.0 NaN 0.0 NaN \n", + "151870 0.0 NaN 0.0 NaN \n", + "151871 0.0 NaN 0.0 NaN \n", + "151872 0.0 NaN 0.0 NaN \n", + "151873 0.0 NaN 0.0 NaN \n", "\n", - " opt_in gender_female gender_male gender_other nb_campaigns \\\n", - "0 False 1 0 0 0.0 \n", - "1 True 0 1 0 0.0 \n", - "2 True 1 0 0 0.0 \n", - "3 False 1 0 0 0.0 \n", - "4 False 1 0 0 0.0 \n", - "... ... ... ... ... ... \n", - "96091 False 0 1 0 15.0 \n", - "96092 False 0 1 0 12.0 \n", - "96093 True 1 0 0 29.0 \n", - "96094 False 0 1 0 20.0 \n", - "96095 False 0 1 0 31.0 \n", + " purchases_7_2022 purchases_8_2021 purchases_8_2022 \\\n", + "0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 \n", + "3 0.0 0.0 1.0 \n", + "4 0.0 0.0 0.0 \n", + "... ... ... ... \n", + "151869 0.0 NaN 0.0 \n", + "151870 0.0 NaN 0.0 \n", + "151871 0.0 NaN 0.0 \n", + "151872 0.0 NaN 0.0 \n", + "151873 0.0 NaN 0.0 \n", "\n", - " nb_campaigns_opened \n", - "0 0.0 \n", - "1 0.0 \n", - "2 0.0 \n", - "3 0.0 \n", - "4 0.0 \n", - "... ... \n", - "96091 5.0 \n", - "96092 9.0 \n", - "96093 3.0 \n", - "96094 4.0 \n", - "96095 4.0 \n", + " purchases_9_2021 purchases_9_2022 y_has_purchased \n", + "0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "... ... ... ... \n", + "151869 NaN 0.0 0.0 \n", + "151870 NaN 0.0 0.0 \n", + "151871 NaN 0.0 0.0 \n", + "151872 NaN 1.0 0.0 \n", + "151873 NaN 0.0 0.0 \n", "\n", - "[96096 rows x 17 columns]" + "[151874 rows x 87 columns]" ] }, - "execution_count": 79, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -585,13 +607,14 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 20, "id": "c708f439-bb75-4688-bf4f-4c04e13deaae", "metadata": {}, "outputs": [], "source": [ "def load_model(type_of_activity, model):\n", - " BUCKET = f\"projet-bdc2324-team1/Output_model/{type_of_activity}/{model}/\"\n", + " # BUCKET = f\"projet-bdc2324-team1/Output_model/{type_of_activity}/{model}/\"\n", + " BUCKET = f\"projet-bdc2324-team1/basique/{type_of_activity}/{model}/\"\n", " filename = model + '.pkl'\n", " file_path = BUCKET + filename\n", " with fs.open(file_path, mode=\"rb\") as f:\n", @@ -603,14 +626,14 @@ }, { "cell_type": "code", - "execution_count": 286, + "execution_count": 92, "id": "5261a803-05b8-41a0-968c-dc7bde48ddd3", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
GridSearchCV(cv=3, error_score='raise',\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",
-       "                                                                          'time_between_purchase',\n",
-       "                                                                          'nb_tickets_internet',\n",
-       "                                                                          'nb_campaigns',\n",
-       "                                                                          'nb_...\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, 3.200000e+01,\n",
-       "       6.400000e+01]),\n",
-       "                         'LogisticRegression_cv__class_weight': ['balanced',\n",
-       "                                                                 {0.0: 0.5223906809346011,\n",
-       "                                                                  1.0: 11.665359406898034}],\n",
-       "                         'LogisticRegression_cv__penalty': ['l1', 'l2']},\n",
-       "             scoring=make_scorer(recall_score, response_method='predict'))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ - "GridSearchCV(cv=3, error_score='raise',\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", - " 'time_between_purchase',\n", - " 'nb_tickets_internet',\n", - " 'nb_campaigns',\n", - " 'nb_...\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, 3.200000e+01,\n", - " 6.400000e+01]),\n", - " 'LogisticRegression_cv__class_weight': ['balanced',\n", - " {0.0: 0.5223906809346011,\n", - " 1.0: 11.665359406898034}],\n", - " 'LogisticRegression_cv__penalty': ['l1', 'l2']},\n", - " scoring=make_scorer(recall_score, response_method='predict'))" + "Pipeline(steps=[('preprocessor',\n", + " ColumnTransformer(transformers=[('num',\n", + " Pipeline(steps=[('imputer',\n", + " SimpleImputer(fill_value=0,\n", + " strategy='constant')),\n", + " ('scaler',\n", + " StandardScaler())]),\n", + " ['nb_campaigns',\n", + " 'taux_ouverture_mail',\n", + " 'prop_purchases_internet',\n", + " 'nb_tickets', 'nb_purchases',\n", + " 'total_amount',\n", + " 'nb_suppliers',\n", + " 'purchases_10_2021',\n", + " 'purchases_10_2022',\n", + " 'purchases_...\n", + " 'categorie_age_40_50',\n", + " 'categorie_age_50_60',\n", + " 'categorie_age_60_70',\n", + " 'categorie_age_70_80',\n", + " 'categorie_age_plus_80',\n", + " 'categorie_age_inconnue',\n", + " 'country_fr',\n", + " 'is_profession_known',\n", + " 'is_zipcode_known',\n", + " 'opt_in'])])),\n", + " ('LogisticRegression_Benchmark',\n", + " LogisticRegression(class_weight={0.0: 0.5480249666729557,\n", + " 1.0: 5.705625684291879},\n", + " max_iter=5000, n_jobs=-1, solver='saga'))])" ] }, - "execution_count": 286, + "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "model = load_model(type_of_activity, \"LogisticRegression_cv\")\n", + "model = load_model(type_of_activity, \"LogisticRegression_Benchmark\")\n", "# model = load_model(type_of_activity, \"randomF_cv\")\n", "model" ] @@ -1146,7 +1174,7 @@ }, { "cell_type": "code", - "execution_count": 287, + "execution_count": 93, "id": "018d8ff4-3436-4eec-8507-d1a265cbabf1", "metadata": {}, "outputs": [], @@ -1157,40 +1185,10 @@ }, { "cell_type": "code", - "execution_count": 288, + "execution_count": 94, "id": "846f53b9-73c2-4a8b-9d9e-f11bf59ce9ba", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1080/375041546.py:3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " X_test_segment[\"has_purchased\"] = y_test\n", - "/tmp/ipykernel_1080/375041546.py:4: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " X_test_segment[\"has_purchased_estim\"] = y_pred\n", - "/tmp/ipykernel_1080/375041546.py:5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " X_test_segment[\"score\"] = y_pred_prob\n", - "/tmp/ipykernel_1080/375041546.py:6: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " X_test_segment[\"quartile\"] = np.where(X_test['score']<0.25, '1',\n" - ] - }, { "data": { "text/html": [ @@ -1212,22 +1210,22 @@ " \n", " \n", " \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", - " time_between_purchase\n", - " nb_tickets_internet\n", + " customer_id\n", + " street_id\n", + " structure_id\n", + " mcp_contact_id\n", " fidelity\n", + " tenant_id\n", + " is_partner\n", + " deleted_at\n", + " is_email_true\n", + " opt_in\n", " ...\n", - " gender_female\n", - " gender_male\n", - " gender_other\n", - " nb_campaigns\n", - " nb_campaigns_opened\n", + " purchases_8_2021\n", + " purchases_8_2022\n", + " purchases_9_2021\n", + " purchases_9_2022\n", + " y_has_purchased\n", " has_purchased\n", " has_purchased_estim\n", " score\n", @@ -1238,314 +1236,302 @@ " \n", " \n", " 0\n", - " 2.0\n", - " 1.0\n", - " 22.0\n", - " 1.0\n", - " 1.0\n", - " 307.203553\n", - " 307.203553\n", - " 0.000000\n", - " 2.0\n", - " 1\n", + " 10_699783\n", + " 139\n", + " NaN\n", + " 186852.0\n", + " 0\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", + " 0\n", " ...\n", - " 0\n", - " 0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.131180\n", " 1\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.367961\n", - " 2\n", - " 0.010594\n", + " 0.017574\n", " \n", " \n", " 1\n", - " 269.0\n", - " 8.0\n", - " 50.0\n", - " 2.0\n", - " 1.0\n", - " 378.208090\n", - " 39.389595\n", - " 338.818495\n", - " 66.0\n", - " 10\n", + " 10_38307\n", + " 862\n", + " NaN\n", + " 17621.0\n", + " 7\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", + " 0\n", " ...\n", - " 0\n", - " 0\n", - " 1\n", - " 65.0\n", - " 1.0\n", - " 1.0\n", - " 1.0\n", - " 0.998731\n", - " 4\n", - " 0.397108\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.321635\n", + " 2\n", + " 0.042466\n", " \n", " \n", " 2\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", + " 10_556101\n", + " 1063\n", + " NaN\n", + " 136909.0\n", " 0\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", " ...\n", - " 0\n", - " 1\n", - " 0\n", - " 4.0\n", - " 2.0\n", " 0.0\n", " 0.0\n", - " 0.211997\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.005068\n", " 1\n", - " 0.014916\n", + " 0.000676\n", " \n", " \n", " 3\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", - " 0\n", + " 10_686663\n", + " 443226\n", + " NaN\n", + " 186611.0\n", + " 1\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", " ...\n", + " 0.0\n", + " 1.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.166979\n", " 1\n", - " 0\n", - " 0\n", - " 2.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.246563\n", - " 1\n", - " 0.024670\n", + " 0.018397\n", " \n", " \n", " 4\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", + " 10_91656\n", + " 316684\n", + " NaN\n", + " 21559.0\n", + " 2\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", " 0\n", " ...\n", - " 0\n", - " 0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.161523\n", " 1\n", - " 4.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.108575\n", - " 1\n", - " 0.025205\n", + " 0.018632\n", " \n", " \n", " 5\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", + " 10_35956\n", + " 106204\n", + " NaN\n", + " NaN\n", + " 1\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", " 0\n", " ...\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.098139\n", " 1\n", - " 0\n", - " 0\n", - " 7.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.257244\n", - " 2\n", - " 0.046644\n", + " 0.010129\n", " \n", " \n", " 6\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", + " 10_560058\n", + " 1063\n", + " NaN\n", + " 161812.0\n", + " 0\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", " 1\n", " ...\n", - " 0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.005377\n", " 1\n", - " 0\n", - " 2.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.203196\n", - " 1\n", - " 0.023026\n", + " 0.000715\n", " \n", " \n", " 7\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", - " 0\n", + " 10_38603\n", + " 513642\n", + " 1865.0\n", + " 7660.0\n", + " 4\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", " ...\n", - " 0\n", - " 1\n", - " 0\n", - " 10.0\n", - " 8.0\n", " 0.0\n", " 0.0\n", - " 0.240049\n", - " 1\n", - " 0.003825\n", + " 0.0\n", + " 0.0\n", + " 1.0\n", + " 1.0\n", + " 1.0\n", + " 0.906698\n", + " 4\n", + " 0.461388\n", " \n", " \n", " 8\n", - " 1.0\n", - " 1.0\n", - " 11.0\n", - " 1.0\n", - " 1.0\n", - " 456.255104\n", - " 456.255104\n", - " 0.000000\n", - " 1.0\n", + " 10_563294\n", + " 1063\n", + " NaN\n", + " 167549.0\n", + " 0\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", " 1\n", " ...\n", - " 0\n", - " 0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.007399\n", " 1\n", - " 3.0\n", - " 3.0\n", - " 0.0\n", - " 0.0\n", - " 0.340098\n", - " 2\n", - " 0.006850\n", + " 0.000974\n", " \n", " \n", " 9\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", + " 10_548983\n", + " 268636\n", + " NaN\n", + " 173318.0\n", + " 1\n", + " 875\n", + " False\n", + " NaN\n", + " True\n", " 0\n", " ...\n", - " 0\n", - " 1\n", - " 0\n", - " 10.0\n", - " 6.0\n", " 0.0\n", " 0.0\n", - " 0.234470\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 0.163529\n", " 1\n", - " 0.003745\n", + " 0.022102\n", " \n", " \n", "\n", - "

10 rows × 22 columns

\n", + "

10 rows × 92 columns

\n", "" ], "text/plain": [ - " nb_tickets nb_purchases total_amount nb_suppliers vente_internet_max \\\n", - "0 2.0 1.0 22.0 1.0 1.0 \n", - "1 269.0 8.0 50.0 2.0 1.0 \n", - "2 0.0 0.0 0.0 0.0 0.0 \n", - "3 0.0 0.0 0.0 0.0 0.0 \n", - "4 0.0 0.0 0.0 0.0 0.0 \n", - "5 0.0 0.0 0.0 0.0 0.0 \n", - "6 0.0 0.0 0.0 0.0 0.0 \n", - "7 0.0 0.0 0.0 0.0 0.0 \n", - "8 1.0 1.0 11.0 1.0 1.0 \n", - "9 0.0 0.0 0.0 0.0 0.0 \n", + " customer_id street_id structure_id mcp_contact_id fidelity tenant_id \\\n", + "0 10_699783 139 NaN 186852.0 0 875 \n", + "1 10_38307 862 NaN 17621.0 7 875 \n", + "2 10_556101 1063 NaN 136909.0 0 875 \n", + "3 10_686663 443226 NaN 186611.0 1 875 \n", + "4 10_91656 316684 NaN 21559.0 2 875 \n", + "5 10_35956 106204 NaN NaN 1 875 \n", + "6 10_560058 1063 NaN 161812.0 0 875 \n", + "7 10_38603 513642 1865.0 7660.0 4 875 \n", + "8 10_563294 1063 NaN 167549.0 0 875 \n", + "9 10_548983 268636 NaN 173318.0 1 875 \n", "\n", - " purchase_date_min purchase_date_max time_between_purchase \\\n", - "0 307.203553 307.203553 0.000000 \n", - "1 378.208090 39.389595 338.818495 \n", - "2 550.000000 550.000000 -1.000000 \n", - "3 550.000000 550.000000 -1.000000 \n", - "4 550.000000 550.000000 -1.000000 \n", - "5 550.000000 550.000000 -1.000000 \n", - "6 550.000000 550.000000 -1.000000 \n", - "7 550.000000 550.000000 -1.000000 \n", - "8 456.255104 456.255104 0.000000 \n", - "9 550.000000 550.000000 -1.000000 \n", + " is_partner deleted_at is_email_true opt_in ... purchases_8_2021 \\\n", + "0 False NaN True 0 ... 0.0 \n", + "1 False NaN True 0 ... 0.0 \n", + "2 False NaN True 1 ... 0.0 \n", + "3 False NaN True 1 ... 0.0 \n", + "4 False NaN True 0 ... 0.0 \n", + "5 False NaN True 0 ... 0.0 \n", + "6 False NaN True 1 ... 0.0 \n", + "7 False NaN True 1 ... 0.0 \n", + "8 False NaN True 1 ... 0.0 \n", + "9 False NaN True 0 ... 0.0 \n", "\n", - " nb_tickets_internet fidelity ... gender_female gender_male \\\n", - "0 2.0 1 ... 0 0 \n", - "1 66.0 10 ... 0 0 \n", - "2 0.0 0 ... 0 1 \n", - "3 0.0 0 ... 1 0 \n", - "4 0.0 0 ... 0 0 \n", - "5 0.0 0 ... 1 0 \n", - "6 0.0 1 ... 0 1 \n", - "7 0.0 0 ... 0 1 \n", - "8 1.0 1 ... 0 0 \n", - "9 0.0 0 ... 0 1 \n", + " purchases_8_2022 purchases_9_2021 purchases_9_2022 y_has_purchased \\\n", + "0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 \n", + "3 1.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 0.0 \n", + "7 0.0 0.0 0.0 1.0 \n", + "8 0.0 0.0 0.0 0.0 \n", + "9 0.0 0.0 0.0 0.0 \n", "\n", - " gender_other nb_campaigns nb_campaigns_opened has_purchased \\\n", - "0 1 0.0 0.0 0.0 \n", - "1 1 65.0 1.0 1.0 \n", - "2 0 4.0 2.0 0.0 \n", - "3 0 2.0 0.0 0.0 \n", - "4 1 4.0 0.0 0.0 \n", - "5 0 7.0 0.0 0.0 \n", - "6 0 2.0 0.0 0.0 \n", - "7 0 10.0 8.0 0.0 \n", - "8 1 3.0 3.0 0.0 \n", - "9 0 10.0 6.0 0.0 \n", + " has_purchased has_purchased_estim score quartile score_adjusted \n", + "0 0.0 0.0 0.131180 1 0.017574 \n", + "1 0.0 0.0 0.321635 2 0.042466 \n", + "2 0.0 0.0 0.005068 1 0.000676 \n", + "3 0.0 0.0 0.166979 1 0.018397 \n", + "4 0.0 0.0 0.161523 1 0.018632 \n", + "5 0.0 0.0 0.098139 1 0.010129 \n", + "6 0.0 0.0 0.005377 1 0.000715 \n", + "7 1.0 1.0 0.906698 4 0.461388 \n", + "8 0.0 0.0 0.007399 1 0.000974 \n", + "9 0.0 0.0 0.163529 1 0.022102 \n", "\n", - " has_purchased_estim score quartile score_adjusted \n", - "0 0.0 0.367961 2 0.010594 \n", - "1 1.0 0.998731 4 0.397108 \n", - "2 0.0 0.211997 1 0.014916 \n", - "3 0.0 0.246563 1 0.024670 \n", - "4 0.0 0.108575 1 0.025205 \n", - "5 0.0 0.257244 2 0.046644 \n", - "6 0.0 0.203196 1 0.023026 \n", - "7 0.0 0.240049 1 0.003825 \n", - "8 0.0 0.340098 2 0.006850 \n", - "9 0.0 0.234470 1 0.003745 \n", - "\n", - "[10 rows x 22 columns]" + "[10 rows x 92 columns]" ] }, - "execution_count": 288, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" } @@ -1564,7 +1550,7 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 24, "id": "fb592fe3-ea40-4e83-8fe9-c52b9ee42f2a", "metadata": {}, "outputs": [], @@ -2055,7 +2041,7 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 25, "id": "f0379536-a6c5-4b16-bde5-d0319ec1b140", "metadata": {}, "outputs": [], @@ -2068,7 +2054,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 26, "id": "32a0dfd0-f49d-4785-a56f-706d381bfe41", "metadata": {}, "outputs": [], @@ -2084,7 +2070,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 27, "id": "2dff1def-02df-413e-afce-b4aeaf7752b6", "metadata": {}, "outputs": [], @@ -2095,7 +2081,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 28, "id": "683d71fc-7442-4028-869c-49c57592d6e9", "metadata": {}, "outputs": [], @@ -2118,7 +2104,7 @@ }, { "cell_type": "code", - "execution_count": 289, + "execution_count": 95, "id": "f17dc6ca-7a48-441b-8c04-11c47b8b9741", "metadata": {}, "outputs": [ @@ -2126,16 +2112,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.3940650533525649 0.04284869976359338\n" + "0.3000275047453295 0.08797424180570736\n" ] }, { "data": { "text/plain": [ - "0.04286194557403322" + "0.08763280798047211" ] }, - "execution_count": 289, + "execution_count": 95, "metadata": {}, "output_type": "execute_result" } @@ -2147,17 +2133,17 @@ }, { "cell_type": "code", - "execution_count": 290, + "execution_count": 96, "id": "781b0d40-c954-4c54-830a-e709c8667328", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "22.577005337484817" + "10.698758485840244" ] }, - "execution_count": 290, + "execution_count": 96, "metadata": {}, "output_type": "execute_result" } @@ -2173,17 +2159,17 @@ }, { "cell_type": "code", - "execution_count": 291, + "execution_count": 97, "id": "248cb862-418e-4767-9933-70c4885ecf40", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "22.690061493186622" + "10.688693734338177" ] }, - "execution_count": 291, + "execution_count": 97, "metadata": {}, "output_type": "execute_result" } @@ -2194,13 +2180,13 @@ "\n", "bias_train_set = find_bias(odd_ratios = odd_ratio(adjust_score_1(X_train_score)), \n", " y_objective = y_train[\"y_has_purchased\"].sum(),\n", - " initial_guess=6)\n", + " initial_guess=10)\n", "bias_train_set" ] }, { "cell_type": "code", - "execution_count": 292, + "execution_count": 98, "id": "fff6cbe6-7bb3-4732-9b81-b9ac5383bbcf", "metadata": {}, "outputs": [ @@ -2208,7 +2194,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "betâ test - betâ train = -0.0049950835646278635\n" + "betâ test - betâ train = 0.00094118290869078\n" ] } ], @@ -2218,7 +2204,7 @@ }, { "cell_type": "code", - "execution_count": 293, + "execution_count": 99, "id": "f506870d-4a8a-4b2c-8f0b-e0789080b20c", "metadata": {}, "outputs": [ @@ -2226,7 +2212,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "mean absolute erreur 0.00017894295558797563\n" + "mean absolute erreur 4.674943825828751e-05\n" ] } ], @@ -2241,23 +2227,10 @@ }, { "cell_type": "code", - "execution_count": 294, + "execution_count": 100, "id": "8213d0e4-063b-49fa-90b7-677fc34f4c01", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1080/1825363704.py:7: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " X_test_segment[\"score_adjusted\"] = score_adjusted_train\n" - ] - } - ], + "outputs": [], "source": [ "# adjust scores accordingly \n", "\n", @@ -2270,7 +2243,7 @@ }, { "cell_type": "code", - "execution_count": 295, + "execution_count": 101, "id": "834d3723-2e72-4c65-9c62-e2d595c69461", "metadata": {}, "outputs": [ @@ -2278,10 +2251,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "MSE for score : 0.18391062438077188\n", - "MSE for ajusted score : 0.037093800862222845\n", - "sum of y_has_purchased : 7975.0\n", - "sum of adjusted scores : 7941.695137104767\n" + "MSE for score : 0.12309116071575532\n", + "MSE for ajusted score : 0.05482346713233594\n", + "sum of y_has_purchased : 13361.0\n", + "sum of adjusted scores : 13368.100024185826\n" ] } ], @@ -2299,7 +2272,7 @@ }, { "cell_type": "code", - "execution_count": 296, + "execution_count": 102, "id": "9f30a4dd-a9d8-405a-a7d5-5324ae88cf70", "metadata": {}, "outputs": [ @@ -2307,8 +2280,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "MAE for score : 0.38422988971624206\n", - "MAE for adjusted score : 0.07284616452278603\n" + "MAE for score : 0.25695361997840177\n", + "MAE for adjusted score : 0.10450649550597542\n" ] } ], @@ -2323,7 +2296,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 37, "id": "6f9396db-e213-408c-a596-eaeec3bc79f3", "metadata": {}, "outputs": [], @@ -2367,13 +2340,13 @@ }, { "cell_type": "code", - "execution_count": 297, + "execution_count": 103, "id": "b478d40d-9677-4204-87bd-16fb0bc1fe9a", "metadata": {}, "outputs": [ { "data": { - "image/png": "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sLKywg8//CCLycnJwfbt26U7favSjz/+KFvWjRs3EBUVJTsWCyFK7Bu+/fZb2VMiXlR5v7P/pa6ujk6dOklnSopvp2V56Xr8AMDV1RVr1qxBUFAQOnTogHfffRetWrVCfn4+zp49i2+++QZOTk7w8fGBvb09xo8fj1WrVkFNTQ1eXl64fv06Zs+eDWtra0ybNq3K89uxYwc0NDTQp08fXLx4EbNnz0abNm0wfPhwAE+/JIaGhpgwYQLmzJkDTU1NhIWFlTjYVNRHH32EmzdvolevXmjSpAkyMzPx+eefy64fnDZtGr7//nv0798f8+fPh42NDfbs2YOvvvoK7777Luzs7F54/f/r9OnTGDduHN544w2kpKTgww8/hJWVlXSKpkGDBli1ahX8/f1x7949DBs2DKamprhz5w7OnTuHO3fuYM2aNQAgFViff/45/P39oampCXt7ezRs2BDq6upwd3fH7t270axZM+kZa25ubtDW1saBAwcQHBwsy23q1KnYvn07unXrhmnTpqF169YoLCxEcnIyIiIiEBoaik6dOsHNzQ3jx4/H6NGjcfr0aXTr1g36+vpITU3F8ePH4ezsjHffffeF26o8n9/UqVOxbds2DBw4EO+//z46duyIR48e4ciRI/D29kaPHj0watQofPnll/D398f169fh7OyM48ePY+HChejXr1+Z1wcW+fzzz/H666+ja9euePfdd2Fra4v79+/jr7/+wu7du8ssPPv06QMtLS28+eabmDlzJh4/fow1a9aUOI1TEVOnTsX69evRv39/LFiwAGZmZggLC5M9wqYs3t7e2LhxI1q2bInWrVsjLi4OS5cuLXEW4EWWU3Qd6Pr16/HKK6+gTZs2OHXqVImiMSsrCz169ICvry9atmyJhg0bIjY2FuHh4bIeLWdnZ+zYsQNr1qxBhw4doKamBhcXF4wcORJhYWHo168fpkyZgo4dO0JTUxM3b97EoUOHMHDgQAwePBgODg54++23sXLlSmhqaqJ3795ISEjAsmXLynXpSGBgIHR1deHm5gYLCwukpaVh0aJFUCqV0vWo8+fPx759+9CtWzd88MEHcHZ2RmZmJsLDwxESEoKWLVtWyT7n66+/hpeXFzw9PREQEAArKyvcu3cPiYmJOHPmDH7++efnzqO4mt4XVoSfnx/efvttBAUFYejQobhx4waWLFki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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoYAAAHFCAYAAABvrjgmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABq2klEQVR4nO3deVgVZfsH8O9hX5Qj+yZupSiCK6lIiiu4oFmZFoWihgsqorjWa6L5Su6mlpZvLqmFlWKaSuCGIqKI4opLhYIJYsqiqKzP7w9hfg0HEJBVv5/r4qp55p6Ze54zZ87tM2fmKIQQAkRERET0ylOr6QSIiIiIqHZgYUhEREREAFgYEhEREVEBFoZEREREBICFIREREREVYGFIRERERABYGBIRERFRARaGRERERASAhSERERERFajzheGFCxcwatQoNG3aFDo6OqhXrx46dOiAJUuW4MGDBzWdXpXz8vJCkyZNajqNYm3evBkKhQJnzpyptHVGRkYiICAAaWlplbZOqtuOHj0KhUKBo0ePVvt2qvr998MPP2DVqlVVsu4mTZrAy8urStZdG928eRMDBw6EkZERFAoF/Pz8ajqlalN4Lr5582ZNp0JlUF3ntJLU6cJww4YN6NixI6KjozFjxgyEhIQgODgY7733HtavX48xY8bUdIpVbu7cuQgODq7pNKpNZGQk5s+fz8KQaoWqfv9VZWH4qpk6dSpOnTqFjRs34uTJk5g6dWpNp1RtBg4ciJMnT8LS0rKmU6Ey6NChA06ePIkOHTrUyPY1amSrleDkyZOYMGEC+vbti927d0NbW1ua17dvX/j7+yMkJKQGM6xajx8/hp6eHl577bWaToVeMkIIPH36FLq6ujWdSq3H91/Vy8vLQ25uruwcXxGXLl1Cp06dMGTIkFqVV3UwNTWFqalpTadBZWRgYIAuXbrU2Pbr7IjhokWLoFAo8O233xb7xtTS0sLgwYOl6fz8fCxZsgQtW7aEtrY2zMzMMGLECNy+fVu2XI8ePWBvb4+TJ0+ia9eu0NXVRZMmTbBp0yYAwL59+9ChQwfo6enBwcFBpfgMCAiAQqHAuXPn8M4778DAwABKpRIfffQR7t27J4vdsWMHXF1dYWlpCV1dXbRq1QqzZ89GZmamLM7Lywv16tXDxYsX4erqivr166N3797SvKKXsn7++Wd07twZSqUSenp6aNasGUaPHi2LSUhIwEcffQQzMzNoa2ujVatWWL58OfLz86WYmzdvQqFQYNmyZVixYgWaNm2KevXqwcnJCVFRUaW9PDKpqakYNWoUjIyMoK+vj0GDBuGvv/5SiTt48CB69+4NAwMD6OnpwdnZGYcOHZL17YwZMwAATZs2hUKhkIbbZ8yYAaVSiby8PCl+8uTJUCgUWLp0qdR2//59qKmpYc2aNVJbRkYGpk+fjqZNm0JLSwvW1tbw8/NTeR2EEPj666/Rrl076OrqwtDQEEOHDlXZl8JjKDo6Gt26dZNegy+++ELWvyUpy+uXlpYGf39/NGvWTDqeBwwYgKtXr0oxDx48gI+PD6ytraGlpYVmzZrh008/RVZWlmxdCoUCkyZNwvr169GqVStoa2tjy5YtAIAbN27Aw8NDdpx89dVXz90HAPjqq6/QvXt3mJmZQV9fHw4ODliyZAlycnIq3F9Xr15Fv379oKenBxMTE4wfPx4PHz4sUz5//PEHRo0ahebNm0NPTw/W1tYYNGgQLl68qBJb1u0Uff8Vvmc2b96sEqtQKBAQECBN37t3D2PHjoWNjQ20tbVhamoKZ2dnHDx4UOqXffv24datW9KxrlAopOWzs7OxcOFC6ZxmamqKUaNGqZxncnJyMHPmTFhYWEBPTw9vvvkmTp8+XaY+A4B169ahbdu2qFevHurXr4+WLVvik08+kcX8/fff0r5oaWnBysoKQ4cOxd27d6WY8pxzlixZgoULF6Jp06bQ1tbGkSNHAABnzpzB4MGDYWRkBB0dHbRv3x4//fRTqfkXXpb7448/cODAAakfCy+rVkZexSl8X23atAm2trbQ1dWFo6MjoqKiIITA0qVLpXNqr1698Mcff8iWL+lSf48ePdCjRw9pOj8/HwsXLpS20aBBA7Rp0wZffvmlFFPcpWQhBJYsWYLGjRtDR0cHHTp0wIEDB1TWX9Jl6JIudz7vPF6aqjivVbT/C89Lx48fR5cuXaCrqwtra2vMnTtX9jkDAPPnz0fnzp1hZGQEAwMDdOjQAd999x2EELK4Jk2awN3dHSEhIejQoQN0dXXRsmVLbNy4sUx9W5bj//Hjx9LnmY6ODoyMjODo6Igff/yxTK8BAEDUQbm5uUJPT0907ty5zMuMHTtWABCTJk0SISEhYv369cLU1FTY2NiIe/fuSXEuLi7C2NhY2Nraiu+++078/vvvwt3dXQAQ8+fPFw4ODuLHH38U+/fvF126dBHa2tri77//lpafN2+eACAaN24sZsyYIX7//XexYsUKoa+vL9q3by+ys7Ol2M8//1ysXLlS7Nu3Txw9elSsX79eNG3aVPTs2VOW+8iRI4WmpqZo0qSJCAwMFIcOHRK///67NK9x48ZSbGRkpFAoFOL9998X+/fvF4cPHxabNm0Snp6eUkxKSoqwtrYWpqamYv369SIkJERMmjRJABATJkyQ4uLj4wUA0aRJE9GvXz+xe/dusXv3buHg4CAMDQ1FWlpaqX2+adMmAUDY2NiI0aNHiwMHDohvv/1WmJmZCRsbG5GamirFbt26VSgUCjFkyBCxa9cusXfvXuHu7i7U1dXFwYMHhRBCJCYmismTJwsAYteuXeLkyZPi5MmTIj09XYSEhAgAIjIyUlpny5Ytha6urujbt6/UtmPHDgFAXLlyRQghRGZmpmjXrp0wMTERK1asEAcPHhRffvmlUCqVolevXiI/P19a1tvbW2hqagp/f38REhIifvjhB9GyZUthbm4ukpOTVY6h5s2bi/Xr14uwsDDh4+MjAIgtW7aU2mdlef0yMjJE69athb6+vliwYIH4/fffxc6dO8WUKVPE4cOHhRBCPHnyRLRp00bo6+uLZcuWidDQUDF37lyhoaEhBgwYINsmAGFtbS3atGkjfvjhB3H48GFx6dIlcfnyZaFUKoWDg4P4/vvvRWhoqPD39xdqamoiICCg1P0QQoipU6eKdevWiZCQEHH48GGxcuVKYWJiIkaNGiWLK2t/JScnCzMzM2FtbS02bdok9u/fLz788EPRqFEjAUAcOXKk1HzCw8OFv7+/+OWXX0R4eLgIDg4WQ4YMEbq6uuLq1asV2k7R91/he2bTpk0q2wcg5s2bJ027ubkJU1NT8e2334qjR4+K3bt3i88++0wEBQUJIYS4fPmycHZ2FhYWFtKxfvLkSSGEEHl5eaJfv35CX19fzJ8/X4SFhYn//e9/wtraWtjZ2YnHjx/LclQoFGLGjBkiNDRUrFixQlhbWwsDAwMxcuTIUvvsxx9/FADE5MmTRWhoqDh48KBYv3698PX1lWJu374tLC0tZe+hHTt2iNGjR4u4uDghRPnPOdbW1qJnz57il19+EaGhoSI+Pl4cPnxYaGlpiW7duokdO3aIkJAQ4eXlVWJ/F0pPTxcnT54UFhYWwtnZWerHp0+fVkpeJSn8HOjatavYtWuXCA4OFi1atBBGRkZi6tSp4q233hK//fab2L59uzA3Nxdt2rSRnW8aN25c7Ovj4uIiXFxcpOnAwEChrq4u5s2bJw4dOiRCQkLEqlWrZO/RwnPxv/Mt/KwaM2aMdG62trYWFhYWsvUXt6wQQhw5ckTl/VCW83hJquK89iL9X3hesrKyEqtXrxa///678PX1FQDExIkTZdvy8vIS3333nQgLCxNhYWHi888/F7q6umL+/PmyuMaNG4uGDRsKOzs78f3334vff/9dvPfeewKACA8PL7Vvy3r8jxs3Tujp6YkVK1aII0eOiN9++0188cUXYs2aNaX2v6zvyhxZiyQnJwsA4v333y9TfFxcnAAgfHx8ZO2nTp0SAMQnn3witbm4uAgA4syZM1Lb/fv3hbq6utDV1ZUVgbGxsQKAWL16tdRW+GabOnWqbFvbt28XAMS2bduKzTE/P1/k5OSI8PBwAUCcP39emjdy5EgBQGzcuFFluaIfTMuWLRMASi3aZs+eLQCIU6dOydonTJggFAqFuHbtmhDi/0+GDg4OIjc3V4o7ffq0ACB+/PHHErchxP+fUN5++21Z+4kTJwQAsXDhQiHEs+LMyMhIDBo0SBaXl5cn2rZtKzp16iS1LV26tNiTVGZmptDS0hILFiwQQjz7sAIgZs2aJXR1dcXTp0+FEM+KOysrK2m5wMBAoaamJqKjo2Xr++WXXwQAsX//fiGEECdPnhQAxPLly2VxiYmJQldXV8ycOVNqKzyGivavnZ2dcHNzK7XPyvL6LViwQAAQYWFhJcasX79eABA//fSTrH3x4sUCgAgNDZXaAAilUikePHggi3VzcxMNGzYU6enpsvZJkyYJHR0dlfjS5OXliZycHPH9998LdXV12bJl7a9Zs2YJhUIhYmNjZXF9+/YtU2FYVG5ursjOzhbNmzeXvV/Ls50XKQzr1asn/Pz8Ss1x4MCBsvUXKizYdu7cKWuPjo4WAMTXX38thPj/c19J56PnFYaTJk0SDRo0KDVm9OjRQlNTU/rHVnHKe8557bXXZP+IFuLZP/Tat28vcnJyZO3u7u7C0tJS5OXllZpn48aNxcCBAys9r5IAEBYWFuLRo0dS2+7duwUA0a5dO1kRsmrVKgFAXLhwQZZvWQpDd3d30a5du1JzKVrcpaamCh0dnRLPzRUpDMtzHi9OVZzXXqT/C89Lv/76q2xb3t7eQk1NTdy6davYHAvPdQsWLBDGxsYqxb6Ojo5s2SdPnggjIyMxbtw4qa24wrCsx7+9vb0YMmRIsbmVVZ29lFwehcP9RYflO3XqhFatWqkMc1taWqJjx47StJGREczMzNCuXTtYWVlJ7a1atQIA3Lp1S2WbH374oWx62LBh0NDQkF16+Ouvv+Dh4QELCwuoq6tDU1MTLi4uAIC4uDiVdb777rvP3dc33nhD2t5PP/2Ev//+WyXm8OHDsLOzQ6dOnWTtXl5eEELg8OHDsvaBAwdCXV1dmm7Tpg2A4ve7OEX7omvXrmjcuLHUF5GRkXjw4AFGjhyJ3Nxc6S8/Px/9+vVDdHS0ymXdovT09ODk5CRdhgsLC0ODBg0wY8YMZGdnIyIiAsCzyxx9+vSRlvvtt99gb2+Pdu3aybbt5uYmG8r/7bffoFAo8NFHH8niLCws0LZtW5UhfwsLC5X+bdOmzXP7rCyv34EDB9CiRQvZfhR1+PBh6OvrY+jQobL2wvdA0WO+V69eMDQ0lKafPn2KQ4cO4e2334aenp5snwcMGICnT58+9+sE586dw+DBg2FsbCwd3yNGjEBeXh6uX78uiy1Lfx05cgStW7dG27ZtZXEeHh6l5lEoNzcXixYtgp2dHbS0tKChoQEtLS3cuHFD9n570e2UVadOnbB582YsXLgQUVFRKpfYS/Pbb7+hQYMGGDRokOy1adeuHSwsLKTjsfA9VtL5qCw5pqWl4YMPPsCvv/6Kf/75RyXmwIED6Nmzp3Q+LE55zzmDBw+GpqamNP3HH3/g6tWr0n4UPR6TkpJw7dq15+5PZef1PD179oS+vr40XdhH/fv3l30toLTPkufp1KkTzp8/Dx8fH/z+++/IyMh47jInT57E06dPSzw3V8SLnser4rz2ov1fv3592VfSgGfngfz8fBw7dkyWV58+faBUKqVz3WeffYb79+8jJSVFtny7du3QqFEjaVpHRwctWrQo9bUvz/HfqVMnHDhwALNnz8bRo0fx5MmTEtdbkjpZGJqYmEBPTw/x8fFlir9//z4AFHtHlpWVlTS/kJGRkUqclpaWSruWlhaAZx+iRVlYWMimNTQ0YGxsLG3r0aNH6NatG06dOoWFCxfi6NGjiI6Oxq5duwBA5cXU09ODgYFBqfsJAN27d8fu3buRm5uLESNGoGHDhrC3t5d9v+D+/fsl9kXh/H8zNjaWTRd+p7OsB1zRvihsK9xO4feQhg4dCk1NTdnf4sWLIYQo06OH+vTpg6ioKGRmZuLgwYPo1asXjI2N0bFjRxw8eBDx8fGIj4+XnXju3r2LCxcuqGy3fv36EEJIH4R3796FEALm5uYqsVFRUSofmEX7rLDfntdnZXn97t27h4YNG5a6nvv378PCwkJ28gMAMzMzaGhoqLzGRY+H+/fvIzc3F2vWrFHZ3wEDBgBAsUVCoYSEBHTr1g1///03vvzySxw/fhzR0dHS9xOL9kNZ+qtwn4oqrq0406ZNw9y5czFkyBDs3bsXp06dQnR0NNq2bVup2ymrHTt2YOTIkfjf//4HJycnGBkZYcSIEUhOTn7usnfv3kVaWhq0tLRUXp/k5GTptSl8nUs6Hz2Pp6cnNm7ciFu3buHdd9+FmZkZOnfujLCwMCmmrMdjec45RWMLzxHTp09X2V8fHx8ApR+PVZXX85T0mVGez5LnmTNnDpYtW4aoqCj0798fxsbG6N27d6mPCSvpuCiprSxe9DxeFee1F+1/c3NzlRwK+6dwW6dPn4arqyuAZ09KOXHiBKKjo/Hpp58CqNi5rqjyHP+rV6/GrFmzsHv3bvTs2RNGRkYYMmQIbty4UeL6i6qTdyWrq6ujd+/eOHDgAG7fvv3cg6nwhUhKSlKJvXPnDkxMTCo9x+TkZFhbW0vTubm5uH//vpTL4cOHcefOHRw9elQaJQRQ4mNYir4RSvPWW2/hrbfeQlZWFqKiohAYGAgPDw80adIETk5OMDY2RlJSkspyd+7cAYBK74/iPuiSk5Px+uuvy7a3Zs2aEu/EKu4NWlTv3r0xd+5cHDt2DIcOHcK8efOk9tDQUDRt2lSaLmRiYgJdXV2VL//+e37hfxUKBY4fP17szU6VeWfi814/U1NTlZumijI2NsapU6cghJAdOykpKcjNzVV5jYseX4aGhlBXV4enpycmTpxY7DYK+7M4u3fvRmZmJnbt2iUbgYiNjS0179IYGxuXeCyVxbZt2zBixAgsWrRI1v7PP/+gQYMGlbIdHR0dAFD5InzRDyzg2TG1atUqrFq1CgkJCdizZw9mz56NlJSU5z5RwcTEBMbGxiXG1a9fX9qXwtyLOx+VxahRozBq1ChkZmbi2LFjmDdvHtzd3XH9+nU0bty4zMdjec45RY/Hwvlz5szBO++8U+w2bG1ty7Q/lZlXVdLR0VE5joBnx+u/89LQ0MC0adMwbdo0pKWl4eDBg/jkk0/g5uaGxMRE6Onpqazj38dFUcnJybIbqko6posW4i96Hq+K89qL+vfNU4UK+6ywD4OCgqCpqYnffvtN6ivg2TmwspTn+NfX18f8+fMxf/583L17Vxo9HDRokOwmntLUyRFD4FkHCSHg7e2N7Oxslfk5OTnYu3cvgGeXyYBnHwz/Fh0djbi4OFmhUFm2b98um/7pp5+Qm5sr3e1VeFAXLSi++eabSstBW1sbLi4uWLx4MYBnl/aAZ4XRlStXcPbsWVn8999/D4VCgZ49e1ZaDoBqX0RGRuLWrVtSXzg7O6NBgwa4cuUKHB0di/0r/BddaaOVnTp1goGBAVatWoXk5GT07dsXwLORxHPnzuGnn36CnZ2d7OsA7u7u+PPPP2FsbFzsdgtPkO7u7hBC4O+//y42zsHBoVL7rHBfi3v9+vfvj+vXr6tc5vq33r1749GjRyonp++//16aXxo9PT307NkT586dQ5s2bYrd59JGnIo7voUQ2LBhQ6nbLU3Pnj1x+fJlnD9/Xtb+ww8/lGl5hUKh8n7bt2+fyuX6F9mOubk5dHR0cOHCBVn7r7/+WupyjRo1wqRJk9C3b1/Z+7KkkQR3d3fcv38feXl5xb42hR8She+xks5H5aGvr4/+/fvj008/RXZ2Ni5fvgzg2fF45MiRUi/lvug5x9bWFs2bN8f58+dLPEcUFsPlUd3nwvJo0qSJynF0/fr1Uvu5QYMGGDp0KCZOnIgHDx6U+EDrLl26QEdHp8Rzc9E8AKjksmfPHtl0ec7jxamO81p5PXz4UGU/f/jhB6ipqaF79+4Anp1XNDQ0ZF+3evLkCbZu3VppeVT0+Dc3N4eXlxc++OADXLt2DY8fPy7T9urkiCEAODk5Yd26dfDx8UHHjh0xYcIEtG7dGjk5OTh37hy+/fZb2NvbY9CgQbC1tcXYsWOxZs0aqKmpoX///rh58ybmzp0LGxubKnnQ6a5du6ChoYG+ffvi8uXLmDt3Ltq2bYthw4YBePZdDkNDQ4wfPx7z5s2DpqYmtm/frvJhVF6fffYZbt++jd69e6Nhw4ZIS0vDl19+Kfv+4tSpU/H9999j4MCBWLBgARo3box9+/bh66+/xoQJE9CiRYsX3v9/O3PmDD7++GO89957SExMxKeffgpra2tpCLxevXpYs2YNRo4ciQcPHmDo0KEwMzPDvXv3cP78edy7dw/r1q0DAKkA+/LLLzFy5EhoamrC1tYW9evXh7q6OlxcXLB37140bdpUesacs7MztLW1cejQIfj6+spy8/Pzw86dO9G9e3dMnToVbdq0QX5+PhISEhAaGgp/f3907twZzs7OGDt2LEaNGoUzZ86ge/fu0NfXR1JSEiIiIuDg4IAJEya8cF+V5fXz8/PDjh078NZbb2H27Nno1KkTnjx5gvDwcLi7u6Nnz54YMWIEvvrqK4wcORI3b96Eg4MDIiIisGjRIgwYMKDU7/EU+vLLL/Hmm2+iW7dumDBhApo0aYKHDx/ijz/+wN69e0s9gfft2xdaWlr44IMPMHPmTDx9+hTr1q1DampqhfvGz88PGzduxMCBA7Fw4UKYm5tj+/btZf5XsLu7OzZv3oyWLVuiTZs2iImJwdKlS1WuIrzIdgq/h7px40a89tpraNu2LU6fPq1SVKanp6Nnz57w8PBAy5YtUb9+fURHRyMkJEQ2IuDg4IBdu3Zh3bp16NixI9TU1ODo6Ij3338f27dvx4ABAzBlyhR06tQJmpqauH37No4cOYK33noLb7/9Nlq1aoWPPvoIq1atgqamJvr06YNLly5h2bJlZfpqire3N3R1deHs7AxLS0skJycjMDAQSqVS+j7sggULcODAAXTv3h2ffPIJHBwckJaWhpCQEEybNg0tW7aslHPON998g/79+8PNzQ1eXl6wtrbGgwcPEBcXh7Nnz+Lnn39+7jqKqu5zYXl4enrio48+go+PD959913cunULS5YsUXke4aBBg2Bvbw9HR0eYmpri1q1bWLVqFRo3bozmzZsXu25DQ0NMnz4dCxculJ2bAwICVC4lv/HGG7C1tcX06dORm5sLQ0NDBAcHS9/bLlSe83hxquu8Vh7GxsaYMGECEhIS0KJFC+zfvx8bNmzAhAkTpO8JDhw4ECtWrICHhwfGjh2L+/fvY9myZZX+fMuyHv+dO3eGu7s72rRpA0NDQ8TFxWHr1q1wcnIqdvS4WC9060otEBsbK0aOHCkaNWoktLS0pMfCfPbZZyIlJUWKy8vLE4sXLxYtWrQQmpqawsTERHz00UciMTFRtj4XFxfRunVrle0Ud0ebEELl1vXCu5JjYmLEoEGDRL169UT9+vXFBx98IO7evStbNjIyUjg5OQk9PT1hamoqPv74Y3H27FmVuxpHjhwp9PX1i93/ondF/vbbb6J///7C2tpaaGlpCTMzMzFgwABx/Phx2XK3bt0SHh4ewtjYWGhqagpbW1uxdOlS2Z19hXfiLV26tNj9/vcdlsUpvJstNDRUeHp6igYNGghdXV0xYMAAcePGDZX48PBwMXDgQGFkZCQ0NTWFtbW1GDhwoPj5559lcXPmzBFWVlZCTU1N5c6tL7/8UgAQ3t7esmUK7yjds2ePynYfPXok/vOf/whbW1uhpaUlPaJl6tSpssfQCCHExo0bRefOnYW+vr7Q1dUVr732mhgxYoTsLvaSjqGir1Vxyvr6paamiilTpohGjRoJTU1NYWZmJgYOHCh77Mr9+/fF+PHjhaWlpdDQ0BCNGzcWc+bMke7QLlT0GP63+Ph4MXr0aGFtbS00NTWFqamp6Nq1q3RHeWn27t0r2rZtK3R0dIS1tbWYMWOGOHDggMprVp7+unLliujbt6/Q0dERRkZGYsyYMeLXX38t013JqampYsyYMcLMzEzo6emJN998Uxw/flzlLs/ybGfkyJGiSZMmsmXT09PFxx9/LMzNzYW+vr4YNGiQuHnzpuw98/TpUzF+/HjRpk0bYWBgIHR1dYWtra2YN2+eyMzMlNb14MEDMXToUNGgQQOhUCjEv0/ZOTk5YtmyZVIf16tXT7Rs2VKMGzdO9v7KysoS/v7+wszMTOjo6IguXbqIkydPlnjX679t2bJF9OzZU5ibmwstLS1hZWUlhg0bJrt7U4hnd+ePHj1aWFhYCE1NTSnu3+e8Fz3nCCHE+fPnxbBhw4SZmZnQ1NQUFhYWolevXmL9+vWl7ocQJZ/DKyOv4hT3vippPYV3of77XJefny+WLFkimjVrJnR0dISjo6M4fPiwyvG6fPly0bVrV2FiYiK0tLREo0aNxJgxY8TNmzelmOLuLM7PzxeBgYHCxsZGaGlpiTZt2oi9e/cW+364fv26cHV1FQYGBsLU1FRMnjxZ7Nu3r9j3XVnP48Wp6vNaefq/8Lx09OhR4ejoKLS1tYWlpaX45JNPVO4M3rhxo7C1tRXa2tqiWbNmIjAwUHz33XcqfV7SMVi0z4u7K1mIsh3/s2fPFo6OjsLQ0FDKZ+rUqeKff/4pvtOLoRCiyBMY6YUEBARg/vz5uHfvXpV8d5GIao+3334biYmJlfp74EQ1qfDrBzX1O721RY8ePfDPP//g0qVLNZ1Ktauz3zEkIqopCQkJCAoKwpEjR+Dk5FTT6RARVRoWhkRE5bRx40aMHz8evXr1ku5+JyJ6GfBSMhEREREB4IghERERERVgYUhEREREAFgYEhEREVGBOvuA67oqPz8fd+7cQf369av155WIiIio4oQQePjwIaysrKCm9vKOq7EwrGZ37tyBjY1NTadBREREFZCYmKjyi0kvExaG1azw9wwTExPL9JNUREREVPMyMjJgY2NTod/lrktYGFazwsvHBgYGLAyJiIjqmJf9a2Av70VyIiIiIioXFoZEREREBICFIREREREV4HcMiYiozsnPz0d2dnZNp0EvEU1NTairq9d0GjWOhSEREdUp2dnZiI+PR35+fk2nQi+ZBg0awMLC4qW/waQ0LAyJiKjOEEIgKSkJ6urqsLGxeakfNEzVRwiBx48fIyUlBQBgaWlZwxnVHBaGRERUZ+Tm5uLx48ewsrKCnp5eTadDLxFdXV0AQEpKCszMzF7Zy8r8pxYREdUZeXl5AAAtLa0azoReRoX/2MjJyanhTGoOC0MiIqpzXuXvgFHV4XHFwpCIiIiICrAwJCIiIiIAvPmEiIheAnN2XazW7QW+41Ct2yOqLhwxJCIieom8yjdO0ItjYUhERFQNfvnlFzg4OEBXVxfGxsbo06cPMjMzAQAbN25E69atoa2tDUtLS0yaNElaLiEhAW+99Rbq1asHAwMDDBs2DHfv3pXmBwQEoF27dti4cSOaNWsGbW1tCCGQnp6OsWPHwszMDAYGBujVqxfOnz9f7ftNdQsLQyIioiqWlJSEDz74AKNHj0ZcXByOHj2Kd955B0IIrFu3DhMnTsTYsWNx8eJF7NmzB6+//jqAZw9eHjJkCB48eIDw8HCEhYXhzz//xPDhw2Xr/+OPP/DTTz9h586diI2NBQAMHDgQycnJ2L9/P2JiYtChQwf07t0bDx48qO7dpzqE3zF8meydUtMZlN+gL2s6AyKiKpeUlITc3Fy88847aNy4MQDAweHZ9xQXLlwIf39/TJny/+fwN954AwBw8OBBXLhwAfHx8bCxsQEAbN26Fa1bt0Z0dLQUl52dja1bt8LU1BQAcPjwYVy8eBEpKSnQ1tYGACxbtgy7d+/GL7/8grFjx1bPjlOdw8KQiIioirVt2xa9e/eGg4MD3Nzc4OrqiqFDhyInJwd37txB7969i10uLi4ONjY2UlEIAHZ2dmjQoAHi4uKkwrBx48ZSUQgAMTExePToEYyNjWXre/LkCf78888q2EN6WbAwJCIiqmLq6uoICwtDZGQkQkNDsWbNGnz66ac4dOhQqcsJIYp96HLRdn19fdn8/Px8WFpa4ujRoyrLNmjQoEL7QK8GFoZERETVQKFQwNnZGc7Ozvjss8/QuHFjhIWFoUmTJjh06BB69uypsoydnR0SEhKQmJgojRpeuXIF6enpaNWqVYnb6tChA5KTk6GhoYEmTZpU1S7RS4iFIRERURU7deoUDh06BFdXV5iZmeHUqVO4d+8eWrVqhYCAAIwfPx5mZmbo378/Hj58iBMnTmDy5Mno06cP2rRpgw8//BCrVq1Cbm4ufHx84OLiAkdHxxK316dPHzg5OWHIkCFYvHgxbG1tcefOHezfvx9DhgwpdVl6tbEwJCIiqmIGBgY4duwYVq1ahYyMDDRu3BjLly9H//79AQBPnz7FypUrMX36dJiYmGDo0KEAno0y7t69G5MnT0b37t2hpqaGfv36Yc2aNaVuT6FQYP/+/fj0008xevRo3Lt3DxYWFujevTvMzc2rfH+p7lIIIURNbfzYsWNYunQpYmJikJSUhODgYAwZMgTAswd0/uc//8H+/fvx119/QalUok+fPvjiiy9gZWUlrSMrKwvTp0/Hjz/+iCdPnqB37974+uuv0bBhQykmNTUVvr6+2LNnDwBg8ODBWLNmjex7FgkJCZg4cSIOHz4MXV1deHh4YNmyZdDS0pJiLl68iEmTJuH06dMwMjLCuHHjMHfu3HL96HZGRgaUSiXS09NhYGBQwZ4rAe9KJqKX3NOnTxEfH4+mTZtCR0enptOhl0xpx1eVfn7XIjX6HMPMzEy0bdsWa9euVZn3+PFjnD17FnPnzsXZs2exa9cuXL9+HYMHD5bF+fn5ITg4GEFBQYiIiMCjR4/g7u6OvLw8KcbDwwOxsbEICQlBSEgIYmNj4enpKc3Py8vDwIEDkZmZiYiICAQFBWHnzp3w9/eXYjIyMtC3b19YWVkhOjoaa9aswbJly7BixYoq6BkiIiKi6lejl5L79+8vDaMXpVQqERYWJmtbs2YNOnXqhISEBDRq1Ajp6en47rvvsHXrVvTp0wcAsG3bNtjY2ODgwYNwc3NDXFwcQkJCEBUVhc6dOwMANmzYACcnJ1y7dg22trYIDQ3FlStXkJiYKI1GLl++HF5eXvjvf/8LAwMDbN++HU+fPsXmzZuhra0Ne3t7XL9+HStWrMC0adPKNWpIREREVBvVqV8+SU9Ph0KhkC4Bx8TEICcnB66urlKMlZUV7O3tERkZCQA4efIklEqlVBQCQJcuXaBUKmUx9vb2skvUbm5uyMrKQkxMjBTj4uIiPSi0MObOnTu4efNmiTlnZWUhIyND9kdERERUG9WZwvDp06eYPXs2PDw8pGv7ycnJ0NLSgqGhoSzW3NwcycnJUoyZmZnK+szMzGQxRb+Ma2hoCC0trVJjCqcLY4oTGBgIpVIp/f37IaVEREREtUmdKAxzcnLw/vvvIz8/H19//fVz44s++LMsDwetSEzhfTulXUaeM2cO0tPTpb/ExMTn5k9ERERUE2p9YZiTk4Nhw4YhPj4eYWFhsjuBLCwskJ2djdTUVNkyKSkp0miehYUF7t69q7Lee/fuyWKKjvqlpqYiJyen1JiUlBQAKPXWf21tbRgYGMj+iIiIiGqjWl0YFhaFN27cwMGDB1V+87Fjx47Q1NSU3aSSlJSES5cuoWvXrgAAJycnpKen4/Tp01LMqVOnkJ6eLou5dOkSkpKSpJjQ0FBoa2ujY8eOUsyxY8eQnZ0ti7GysuJT5YmIiOilUKOF4aNHjxAbG4vY2FgAQHx8PGJjY5GQkIDc3FwMHToUZ86cwfbt25GXl4fk5GQkJydLxZlSqcSYMWPg7++PQ4cO4dy5c/joo4/g4OAg3aXcqlUr9OvXD97e3oiKikJUVBS8vb3h7u4OW1tbAICrqyvs7Ozg6emJc+fO4dChQ5g+fTq8vb2lET4PDw9oa2vDy8sLly5dQnBwMBYtWsQ7komIiOilUaOPqzlz5ozstyGnTZsGABg5ciQCAgKkB1K3a9dOttyRI0fQo0cPAMDKlSuhoaGBYcOGSQ+43rx5M9TV1aX47du3w9fXV7p7efDgwbJnJ6qrq2Pfvn3w8fGBs7Oz7AHXhQofnzNx4kQ4OjrC0NAQ06ZNk3ImIiIiqutq9JdPXkX85ZMi+MsnRFQOr9Ivn9y8eRNNmzbFuXPn0K5dO5Xp2mTz5s3w8/NDWlpaTafyQvjLJ/ytZCIiehlU9z+Ma+AftTY2NkhKSoKJiUmlrO9lKeaoctXqm0+IiIjoGXV1dVhYWEBDg2M6z/PvG0WpfFgYEhERVbGQkBC8+eabaNCgAYyNjeHu7o4///xTFnP69Gm0b98eOjo6cHR0xLlz52Tzb968CYVCId2wuXnzZumXwArt3r1bdkPk+fPn0bNnT9SvXx8GBgbo2LEjzpw5g6NHj2LUqFHSL4opFAoEBAQAeFZUzZw5E9bW1tDX10fnzp1x9OhR2XY2b96MRo0aQU9PD2+//Tbu379f6v5nZ2dj0qRJsLS0hI6ODpo0aYLAwEBpflpaGsaOHQtzc3Po6OjA3t4ev/32mzR/586daN26NbS1tdGkSRMsX75ctv4mTZpg4cKF8PLyglKphLe3NwAgMjIS3bt3h66uLmxsbODr64vMzMxSc33VsTAkIiKqYpmZmZg2bRqio6Nx6NAhqKmp4e2330Z+fr40v/BpGTExMQgICMD06dNfeLsffvghGjZsiOjoaMTExGD27NnQ1NRE165dsWrVKhgYGCApKQlJSUnS9kaNGoUTJ04gKCgIFy5cwHvvvYd+/frhxo0bAJ498m306NHw8fFBbGwsevbsiYULF5aax+rVq7Fnzx789NNPuHbtGrZt2yY96i0/Px/9+/dHZGQktm3bhitXruCLL76QbiKNiYnBsGHD8P777+PixYsICAjA3LlzsXnzZtk2li5dCnt7e8TExGDu3Lm4ePEi3Nzc8M477+DChQvYsWMHIiIiMGnSpBfu15cZx6OJiIiq2Lvvviub/u6772BmZoYrV67A3t5eeizbxo0boaenh9atW+P27duYMGHCC203ISEBM2bMQMuWLQEAzZs3l+YplUooFApYWFhIbX/++Sd+/PFH3L59G1ZWVgCA6dOnIyQkBJs2bcKiRYvw5Zdfws3NDbNnzwYAtGjRApGRkQgJCSk1j+bNm+PNN9+EQqFA48aNpXkHDx7E6dOnERcXhxYtWgAAmjVrJs1fsWIFevfujblz50rbu3LlCpYuXQovLy8prlevXrJiesSIEfDw8ICfn5+076tXr4aLiwvWrVv30t+8VFEcMSQiIqpif/75Jzw8PNCsWTMYGBigadOmAJ4VTAAQFxeHtm3bQk9PT1rGycnphbc7bdo0fPzxx+jTpw+++OILlcvXRZ09exZCCLRo0QL16tWT/sLDw6Vl4+LiVHJ7Xq5eXl6IjY2Fra0tfH19ERoaKs2LjY1Fw4YNpaKwqLi4ODg7O8vanJ2dcePGDeTl5Ultjo6OspiYmBhs3rxZth9ubm7Iz89HfHx8qfm+yjhiSEREVMUGDRoEGxsbbNiwAVZWVsjPz4e9vb10k0RFnhynpqamslxOTo5sOiAgAB4eHti3bx8OHDiAefPmISgoCG+//Xax68zPz4e6ujpiYmJkzwMGgHr16lU41w4dOiA+Ph4HDhzAwYMHMWzYMPTp0we//PILdHV1S11WCKHyQxLF5aCvr6+yL+PGjYOvr69KbKNGjcq9D68KFoZERERV6P79+4iLi8M333yDbt26AQAiIiJkMXZ2dti6dSuePHkiFUpRUVGlrtfU1BQPHz5EZmamVBQV3pjyby1atECLFi0wdepUfPDBB9i0aRPefvttaGlpyUbcAKB9+/bIy8tDSkqKlGtRdnZ2Krk9L1cAMDAwwPDhwzF8+HAMHToU/fr1w4MHD9CmTRvcvn0b169fL3bU0M7OTqW/IiMj0aJFC5Xi9d86dOiAy5cv4/XXX39ubvT/eCmZiIioChkaGsLY2Bjffvst/vjjDxw+fFjlV7M8PDygpqaGMWPG4MqVK9i/f7/s17eK07lzZ+jp6eGTTz7BH3/8gR9++EF2Q8aTJ08wadIkHD16FLdu3cKJEycQHR2NVq1aAXh2J++jR49w6NAh/PPPP3j8+DFatGiBDz/8ECNGjMCuXbsQHx+P6OhoLF68GPv37wcA+Pr6IiQkBEuWLMH169exdu3aUr9fCDz7lbKgoCBcvXoV169fx88//wwLCws0aNAALi4u6N69O959912EhYVJI4uF6yz82dvPP/8c169fx5YtW7B27drn3pwza9YsnDx5EhMnTkRsbCxu3LiBPXv2YPLkyaUu96pjYUhERFSF1NTUEBQUhJiYGNjb22Pq1KlYunSpLKZevXrYu3cvrly5gvbt2+PTTz/F4sWLS12vkZERtm3bhv3798PBwQE//vij9MgZ4NlzD+/fv48RI0agRYsWGDZsGPr374/58+cDALp27Yrx48dj+PDhMDU1xZIlSwAAmzZtwogRI+Dv7w9bW1sMHjwYp06dgo2NDQCgS5cu+N///oc1a9agXbt2CA0NxX/+859Sc61Xrx4WL14MR0dHvPHGG7h58yb2798PNbVnZcjOnTvxxhtv4IMPPoCdnR1mzpwpjWZ26NABP/30E4KCgmBvb4/PPvsMCxYskN14Upw2bdogPDwcN27cQLdu3dC+fXvMnTsXlpaWpS73quNP4lUz/iReEfxJPCIqh1fpJ/GKunbtGlq2bIkbN27w8mgV4U/iccSQiIio1nvw4AF++eUXGBgYSCN3RFWBN58QERHVcmPGjEFMTAzWrVsHbW3tmk6HXmIsDImIiGq54ODgmk6BXhG8lExEREREAFgYEhFRHcT7Jqkq8LhiYUhERHVI4QONC38xhKgyPX78GACgqalZw5nUHH7HkIiI6gwNDQ3o6enh3r170NTUlJ6DR/QihBB4/PgxUlJS0KBBg1J/UeVlx8KQiIjqDIVCAUtLS8THx+PWrVs1nQ69ZBo0aAALC4uaTqNGsTAkIqI6RUtLC82bN+flZKpUmpqar/RIYSEWhkREVOeoqam9cr98QlQd+OUMIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgJQw4XhsWPHMGjQIFhZWUGhUGD37t2y+UIIBAQEwMrKCrq6uujRowcuX74si8nKysLkyZNhYmICfX19DB48GLdv35bFpKamwtPTE0qlEkqlEp6enkhLS5PFJCQkYNCgQdDX14eJiQl8fX2RnZ0ti7l48SJcXFygq6sLa2trLFiwAEKISusPIiIioppUo4VhZmYm2rZti7Vr1xY7f8mSJVixYgXWrl2L6OhoWFhYoG/fvnj48KEU4+fnh+DgYAQFBSEiIgKPHj2Cu7s78vLypBgPDw/ExsYiJCQEISEhiI2NhaenpzQ/Ly8PAwcORGZmJiIiIhAUFISdO3fC399fisnIyEDfvn1hZWWF6OhorFmzBsuWLcOKFSuqoGeIiIiIqp9C1JIhL4VCgeDgYAwZMgTAs9FCKysr+Pn5YdasWQCejQ6am5tj8eLFGDduHNLT02FqaoqtW7di+PDhAIA7d+7AxsYG+/fvh5ubG+Li4mBnZ4eoqCh07twZABAVFQUnJydcvXoVtra2OHDgANzd3ZGYmAgrKysAQFBQELy8vJCSkgIDAwOsW7cOc+bMwd27d6GtrQ0A+OKLL7BmzRrcvn0bCoWiTPuZkZEBpVKJ9PR0GBgYVGYXAnunVO76qsOgL2s6AyIioueq0s/vWqTWfscwPj4eycnJcHV1ldq0tbXh4uKCyMhIAEBMTAxycnJkMVZWVrC3t5diTp48CaVSKRWFANClSxcolUpZjL29vVQUAoCbmxuysrIQExMjxbi4uEhFYWHMnTt3cPPmzRL3IysrCxkZGbI/IiIiotqo1haGycnJAABzc3NZu7m5uTQvOTkZWlpaMDQ0LDXGzMxMZf1mZmaymKLbMTQ0hJaWVqkxhdOFMcUJDAyUvtuoVCphY2NT+o4TERER1ZBaWxgWKnqJVgjx3Mu2RWOKi6+MmMKr8KXlM2fOHKSnp0t/iYmJpeZOREREVFNqbWFoYWEBQHU0LiUlRRqps7CwQHZ2NlJTU0uNuXv3rsr67927J4spup3U1FTk5OSUGpOSkgJAdVTz37S1tWFgYCD7IyIiIqqNam1h2LRpU1hYWCAsLExqy87ORnh4OLp27QoA6NixIzQ1NWUxSUlJuHTpkhTj5OSE9PR0nD59Woo5deoU0tPTZTGXLl1CUlKSFBMaGgptbW107NhRijl27JjsETahoaGwsrJCkyZNKr8DiIiIiKpZjRaGjx49QmxsLGJjYwE8u+EkNjYWCQkJUCgU8PPzw6JFixAcHIxLly7By8sLenp68PDwAAAolUqMGTMG/v7+OHToEM6dO4ePPvoIDg4O6NOnDwCgVatW6NevH7y9vREVFYWoqCh4e3vD3d0dtra2AABXV1fY2dnB09MT586dw6FDhzB9+nR4e3tLI3weHh7Q1taGl5cXLl26hODgYCxatAjTpk0r8x3JRERERLWZRk1u/MyZM+jZs6c0PW3aNADAyJEjsXnzZsycORNPnjyBj48PUlNT0blzZ4SGhqJ+/frSMitXroSGhgaGDRuGJ0+eoHfv3ti8eTPU1dWlmO3bt8PX11e6e3nw4MGyZyeqq6tj37598PHxgbOzM3R1deHh4YFly5ZJMUqlEmFhYZg4cSIcHR1haGiIadOmSTkTERER1XW15jmGrwo+x7AIPseQiIjqAD7HkIiIiIheKSwMiYiIiAgAC0MiIiIiKsDCkIiIiIgAsDAkIiIiogIsDImIiIgIAAtDIiIiIirAwpCIiIiIALAwJCIiIqICLAyJiIiICAALQyIiIiIqwMKQiIiIiACwMCQiIiKiAiwMiYiIiAgAC0MiIiIiKsDCkIiIiIgAsDAkIiIiogIsDImIiIgIAAtDIiIiIirAwpCIiIiIALAwJCIiIqICLAyJiIiICAALQyIiIiIqwMKQiIiIiACwMCQiIiKiAiwMiYiIiAgAC0MiIiIiKsDCkIiIiIgAsDAkIiIiogIsDImIiIgIAAtDIiIiIirAwpCIiIiIALAwJCIiIqICLAyJiIiICAALQyIiIiIqwMKQiIiIiACwMCQiIiKiAiwMiYiIiAgAC0MiIiIiKsDCkIiIiIgAsDAkIiIiogIsDImIiIgIAAtDIiIiIirAwpCIiIiIALAwJCIiIqICLAyJiIiICEAtLwxzc3Pxn//8B02bNoWuri6aNWuGBQsWID8/X4oRQiAgIABWVlbQ1dVFjx49cPnyZdl6srKyMHnyZJiYmEBfXx+DBw/G7du3ZTGpqanw9PSEUqmEUqmEp6cn0tLSZDEJCQkYNGgQ9PX1YWJiAl9fX2RnZ1fZ/hMRERFVp1pdGC5evBjr16/H2rVrERcXhyVLlmDp0qVYs2aNFLNkyRKsWLECa9euRXR0NCwsLNC3b188fPhQivHz80NwcDCCgoIQERGBR48ewd3dHXl5eVKMh4cHYmNjERISgpCQEMTGxsLT01Oan5eXh4EDByIzMxMREREICgrCzp074e/vXz2dQURERFTFFEIIUdNJlMTd3R3m5ub47rvvpLZ3330Xenp62Lp1K4QQsLKygp+fH2bNmgXg2eigubk5Fi9ejHHjxiE9PR2mpqbYunUrhg8fDgC4c+cObGxssH//fri5uSEuLg52dnaIiopC586dAQBRUVFwcnLC1atXYWtriwMHDsDd3R2JiYmwsrICAAQFBcHLywspKSkwMDAo0z5lZGRAqVQiPT29zMuU2d4plbu+6jDoy5rOgIiI6Lmq9PO7FqnVI4ZvvvkmDh06hOvXrwMAzp8/j4iICAwYMAAAEB8fj+TkZLi6ukrLaGtrw8XFBZGRkQCAmJgY5OTkyGKsrKxgb28vxZw8eRJKpVIqCgGgS5cuUCqVshh7e3upKAQANzc3ZGVlISYmpsR9yMrKQkZGhuyPiIiIqDbSqOkESjNr1iykp6ejZcuWUFdXR15eHv773//igw8+AAAkJycDAMzNzWXLmZub49atW1KMlpYWDA0NVWIKl09OToaZmZnK9s3MzGQxRbdjaGgILS0tKaY4gYGBmD9/fnl2m4iIiKhG1OoRwx07dmDbtm344YcfcPbsWWzZsgXLli3Dli1bZHEKhUI2LYRQaSuqaExx8RWJKWrOnDlIT0+X/hITE0vNi4iIiKim1OoRwxkzZmD27Nl4//33AQAODg64desWAgMDMXLkSFhYWAB4NppnaWkpLZeSkiKN7llYWCA7OxupqamyUcOUlBR07dpVirl7967K9u/duydbz6lTp2TzU1NTkZOTozKS+G/a2trQ1tauyO4TERERVataPWL4+PFjqKnJU1RXV5ceV9O0aVNYWFggLCxMmp+dnY3w8HCp6OvYsSM0NTVlMUlJSbh06ZIU4+TkhPT0dJw+fVqKOXXqFNLT02Uxly5dQlJSkhQTGhoKbW1tdOzYsZL3nIiIiKj61eoRw0GDBuG///0vGjVqhNatW+PcuXNYsWIFRo8eDeDZpV0/Pz8sWrQIzZs3R/PmzbFo0SLo6enBw8MDAKBUKjFmzBj4+/vD2NgYRkZGmD59OhwcHNCnTx8AQKtWrdCvXz94e3vjm2++AQCMHTsW7u7usLW1BQC4urrCzs4Onp6eWLp0KR48eIDp06fD29v7pb47iYiIiF4dtbowXLNmDebOnQsfHx+kpKTAysoK48aNw2effSbFzJw5E0+ePIGPjw9SU1PRuXNnhIaGon79+lLMypUroaGhgWHDhuHJkyfo3bs3Nm/eDHV1dSlm+/bt8PX1le5eHjx4MNauXSvNV1dXx759++Dj4wNnZ2fo6urCw8MDy5Ytq4aeICIiIqp6tfo5hi8jPsewCD7HkIiI6gA+x5CIiIiIXiksDImIiIgIAAtDIiIiIirAwpCIiIiIALAwJCIiIqICLAyJiIiICAALQyIiIiIqwMKQiIiIiACwMCQiIiKiAiwMiYiIiAgAC0MiIiIiKsDCkIiIiIgAsDAkIiIiogIsDImIiIgIAAtDIiIiIirAwpCIiIiIALAwJCIiIqICLAyJiIiICAALQyIiIiIqUKHCsFevXkhLS1Npz8jIQK9evV40JyIiIiKqARUqDI8ePYrs7GyV9qdPn+L48eMvnBQRERERVT+N8gRfuHBB+v8rV64gOTlZms7Ly0NISAisra0rLzsiIiIiqjblKgzbtWsHhUIBhUJR7CVjXV1drFmzptKSIyIiIqLqU67CMD4+HkIINGvWDKdPn4apqak0T0tLC2ZmZlBXV6/0JImIiIio6pWrMGzcuDEAID8/v0qSISIiIqKaU67C8N+uX7+Oo0ePIiUlRaVQ/Oyzz144MSIiIiKqXhUqDDds2IAJEybAxMQEFhYWUCgU0jyFQsHCkIiIiKgOqlBhuHDhQvz3v//FrFmzKjsfIiIiIqohFXqOYWpqKt57773KzoWIiIiIalCFCsP33nsPoaGhlZ0LEREREdWgCl1Kfv311zF37lxERUXBwcEBmpqasvm+vr6VkhwRERERVR+FEEKUd6GmTZuWvEKFAn/99dcLJfUyy8jIgFKpRHp6OgwMDCp35XunVO76qsOgL2s6AyIioueq0s/vWqRCI4bx8fGVnQcRERER1bAKfceQiIiIiF4+FRoxHD16dKnzN27cWKFkiIiIiKjmVKgwTE1NlU3n5OTg0qVLSEtLQ69evSolMSIiIiKqXhUqDIODg1Xa8vPz4ePjg2bNmr1wUkRERERU/SrtO4ZqamqYOnUqVq5cWVmrJCIiIqJqVKk3n/z555/Izc2tzFUSERERUTWp0KXkadOmyaaFEEhKSsK+ffswcuTISkmMiIiIiKpXhQrDc+fOyabV1NRgamqK5cuXP/eOZSIiIiKqnSpUGB45cqSy8yAiIiKiGlahwrDQvXv3cO3aNSgUCrRo0QKmpqaVlRcRERERVbMK3XySmZmJ0aNHw9LSEt27d0e3bt1gZWWFMWPG4PHjx5WdIxERERFVgwoVhtOmTUN4eDj27t2LtLQ0pKWl4ddff0V4eDj8/f0rO0ciIiIiqgYVupS8c+dO/PLLL+jRo4fUNmDAAOjq6mLYsGFYt25dZeVHRERERNWkQiOGjx8/hrm5uUq7mZlZpV9K/vvvv/HRRx/B2NgYenp6aNeuHWJiYqT5QggEBATAysoKurq66NGjBy5fvixbR1ZWFiZPngwTExPo6+tj8ODBuH37tiwmNTUVnp6eUCqVUCqV8PT0RFpamiwmISEBgwYNgr6+PkxMTODr64vs7OxK3V8iIiKimlKhwtDJyQnz5s3D06dPpbYnT55g/vz5cHJyqrTkUlNT4ezsDE1NTRw4cABXrlzB8uXL0aBBAylmyZIlWLFiBdauXYvo6GhYWFigb9++ePjwoRTj5+eH4OBgBAUFISIiAo8ePYK7uzvy8vKkGA8PD8TGxiIkJAQhISGIjY2Fp6enND8vLw8DBw5EZmYmIiIiEBQUhJ07d/LSOREREb00FEIIUd6FLl68iP79++Pp06do27YtFAoFYmNjoa2tjdDQULRu3bpSkps9ezZOnDiB48ePFztfCAErKyv4+flh1qxZAJ6NDpqbm2Px4sUYN24c0tPTYWpqiq1bt2L48OEAgDt37sDGxgb79++Hm5sb4uLiYGdnh6ioKHTu3BkAEBUVBScnJ1y9ehW2trY4cOAA3N3dkZiYCCsrKwBAUFAQvLy8kJKSAgMDgzLtU0ZGBpRKJdLT08u8TJntnVK566sOg76s6QyIiIieq0o/v2uRCo0YOjg44MaNGwgMDES7du3Qpk0bfPHFF/jjjz8qrSgEgD179sDR0RHvvfcezMzM0L59e2zYsEGaHx8fj+TkZLi6ukpt2tracHFxQWRkJAAgJiYGOTk5shgrKyvY29tLMSdPnoRSqZSKQgDo0qULlEqlLMbe3l4qCgHAzc0NWVlZskvbRWVlZSEjI0P2R0RERFQbVejmk8DAQJibm8Pb21vWvnHjRty7d08avXtRf/31F9atW4dp06bhk08+wenTp+Hr6wttbW2MGDECycnJAKDyfUdzc3PcunULAJCcnAwtLS0YGhqqxBQun5ycDDMzM5Xtm5mZyWKKbsfQ0BBaWlpSTHECAwMxf/78cu45ERERUfWr0IjhN998g5YtW6q0t27dGuvXr3/hpArl5+ejQ4cOWLRoEdq3b49x48bB29tb5a5nhUIhmxZCqLQVVTSmuPiKxBQ1Z84cpKenS3+JiYml5kVERERUUypUGCYnJ8PS0lKl3dTUFElJSS+cVCFLS0vY2dnJ2lq1aoWEhAQAgIWFhZTPv6WkpEijexYWFsjOzkZqamqpMXfv3lXZ/r1792QxRbeTmpqKnJycYu/QLqStrQ0DAwPZHxEREVFtVKHC0MbGBidOnFBpP3HihOw7eC/K2dkZ165dk7Vdv34djRs3BgA0bdoUFhYWCAsLk+ZnZ2cjPDwcXbt2BQB07NgRmpqaspikpCRcunRJinFyckJ6ejpOnz4txZw6dQrp6emymEuXLskK39DQUGhra6Njx46Vts9ERERENaVC3zH8+OOP4efnh5ycHPTq1QsAcOjQIcycObNSH98ydepUdO3aFYsWLcKwYcNw+vRpfPvtt/j2228BPLu06+fnh0WLFqF58+Zo3rw5Fi1aBD09PXh4eAAAlEolxowZA39/fxgbG8PIyAjTp0+Hg4MD+vTpA+DZKGS/fv3g7e2Nb775BgAwduxYuLu7w9bWFgDg6uoKOzs7eHp6YunSpXjw4AGmT58Ob29vjgISERHRS6FCheHMmTPx4MED+Pj4SA941tHRwaxZszBnzpxKS+6NN95AcHAw5syZgwULFqBp06ZYtWoVPvzwQ1kuT548gY+PD1JTU9G5c2eEhoaifv36UszKlSuhoaGBYcOG4cmTJ+jduzc2b94MdXV1KWb79u3w9fWV7l4ePHgw1q5dK81XV1fHvn374OPjA2dnZ+jq6sLDwwPLli2rtP0lIiIiqkkVeo5hoUePHiEuLg66urpo3rw5tLW1KzO3lxKfY1gEn2NIRER1wKvyHMMKjRgWqlevHt54443KyoWIiIiIalCFbj4hIiIiopcPC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgKaNR0AlR5TsU/qOkUym33rosIfMehptMgIiIicMSQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgK1KnCMDAwEAqFAn5+flKbEAIBAQGwsrKCrq4uevTogcuXL8uWy8rKwuTJk2FiYgJ9fX0MHjwYt2/flsWkpqbC09MTSqUSSqUSnp6eSEtLk8UkJCRg0KBB0NfXh4mJCXx9fZGdnV1Vu0tERERUrepMYRgdHY1vv/0Wbdq0kbUvWbIEK1aswNq1axEdHQ0LCwv07dsXDx8+lGL8/PwQHByMoKAgRERE4NGjR3B3d0deXp4U4+HhgdjYWISEhCAkJASxsbHw9PSU5ufl5WHgwIHIzMxEREQEgoKCsHPnTvj7+1f9zhMRERFVgzpRGD569AgffvghNmzYAENDQ6ldCIFVq1bh008/xTvvvAN7e3ts2bIFjx8/xg8//AAASE9Px3fffYfly5ejT58+aN++PbZt24aLFy/i4MGDAIC4uDiEhITgf//7H5ycnODk5IQNGzbgt99+w7Vr1wAAoaGhuHLlCrZt24b27dujT58+WL58OTZs2ICMjIzq7xQiIiKiSlYnCsOJEydi4MCB6NOnj6w9Pj4eycnJcHV1ldq0tbXh4uKCyMhIAEBMTAxycnJkMVZWVrC3t5diTp48CaVSic6dO0sxXbp0gVKplMXY29vDyspKinFzc0NWVhZiYmJKzD0rKwsZGRmyPyIiIqLaSKOmE3ieoKAgnD17FtHR0SrzkpOTAQDm5uaydnNzc9y6dUuK0dLSko00FsYULp+cnAwzMzOV9ZuZmcliim7H0NAQWlpaUkxxAgMDMX/+/OftJhEREVGNq9UjhomJiZgyZQq2bdsGHR2dEuMUCoVsWgih0lZU0Zji4isSU9ScOXOQnp4u/SUmJpaaFxEREVFNqdWFYUxMDFJSUtCxY0doaGhAQ0MD4eHhWL16NTQ0NKQRvKIjdikpKdI8CwsLZGdnIzU1tdSYu3fvqmz/3r17spii20lNTUVOTo7KSOK/aWtrw8DAQPZHREREVBvV6sKwd+/euHjxImJjY6U/R0dHfPjhh4iNjUWzZs1gYWGBsLAwaZns7GyEh4eja9euAICOHTtCU1NTFpOUlIRLly5JMU5OTkhPT8fp06elmFOnTiE9PV0Wc+nSJSQlJUkxoaGh0NbWRseOHau0H4iIiIiqQ63+jmH9+vVhb28va9PX14exsbHU7ufnh0WLFqF58+Zo3rw5Fi1aBD09PXh4eAAAlEolxowZA39/fxgbG8PIyAjTp0+Hg4ODdDNLq1at0K9fP3h7e+Obb74BAIwdOxbu7u6wtbUFALi6usLOzg6enp5YunQpHjx4gOnTp8Pb25ujgERERPRSqNWFYVnMnDkTT548gY+PD1JTU9G5c2eEhoaifv36UszKlSuhoaGBYcOG4cmTJ+jduzc2b94MdXV1KWb79u3w9fWV7l4ePHgw1q5dK81XV1fHvn374OPjA2dnZ+jq6sLDwwPLli2rvp0lIiIiqkIKIYSo6SReJRkZGVAqlUhPT6/0kcZTqz2fH1TL7G44E4HvONR0GkRERKWqys/v2qRWf8eQiIiIiKoPC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAC0MiIiIiAsDCkIiIiIgKsDAkIiIiIgAsDImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqECtLgwDAwPxxhtvoH79+jAzM8OQIUNw7do1WYwQAgEBAbCysoKuri569OiBy5cvy2KysrIwefJkmJiYQF9fH4MHD8bt27dlMampqfD09IRSqYRSqYSnpyfS0tJkMQkJCRg0aBD09fVhYmICX19fZGdnV8m+ExEREVW3Wl0YhoeHY+LEiYiKikJYWBhyc3Ph6uqKzMxMKWbJkiVYsWIF1q5di+joaFhYWKBv3754+PChFOPn54fg4GAEBQUhIiICjx49gru7O/Ly8qQYDw8PxMbGIiQkBCEhIYiNjYWnp6c0Py8vDwMHDkRmZiYiIiIQFBSEnTt3wt/fv3o6g4iIiKiKKYQQoqaTKKt79+7BzMwM4eHh6N69O4QQsLKygp+fH2bNmgXg2eigubk5Fi9ejHHjxiE9PR2mpqbYunUrhg8fDgC4c+cObGxssH//fri5uSEuLg52dnaIiopC586dAQBRUVFwcnLC1atXYWtriwMHDsDd3R2JiYmwsrICAAQFBcHLywspKSkwMDAo0z5kZGRAqVQiPT29zMuU1anVns8PqmV2N5xZ0ylUSOA7DjWdAhERVaOq/PyuTWr1iGFR6enpAAAjIyMAQHx8PJKTk+Hq6irFaGtrw8XFBZGRkQCAmJgY5OTkyGKsrKxgb28vxZw8eRJKpVIqCgGgS5cuUCqVshh7e3upKAQANzc3ZGVlISYmpor2mIiIiKj6aNR0AmUlhMC0adPw5ptvwt7eHgCQnJwMADA3N5fFmpub49atW1KMlpYWDA0NVWIKl09OToaZmZnKNs3MzGQxRbdjaGgILS0tKaY4WVlZyMrKkqYzMjLKtL9ERERE1a3OjBhOmjQJFy5cwI8//qgyT6FQyKaFECptRRWNKS6+IjFFBQYGSje0KJVK2NjYlJoXERERUU2pE4Xh5MmTsWfPHhw5cgQNGzaU2i0sLABAZcQuJSVFGt2zsLBAdnY2UlNTS425e/euynbv3bsniym6ndTUVOTk5KiMJP7bnDlzkJ6eLv0lJiaWdbeJiIiIqlWtLgyFEJg0aRJ27dqFw4cPo2nTprL5TZs2hYWFBcLCwqS27OxshIeHo2vXrgCAjh07QlNTUxaTlJSES5cuSTFOTk5IT0/H6dOnpZhTp04hPT1dFnPp0iUkJSVJMaGhodDW1kbHjh1L3AdtbW0YGBjI/oiIiIhqo1r9HcOJEyfihx9+wK+//or69etLI3ZKpRK6urpQKBTw8/PDokWL0Lx5czRv3hyLFi2Cnp4ePDw8pNgxY8bA398fxsbGMDIywvTp0+Hg4IA+ffoAAFq1aoV+/frB29sb33zzDQBg7NixcHd3h62tLQDA1dUVdnZ28PT0xNKlS/HgwQNMnz4d3t7eLPaIiIjopVCrC8N169YBAHr06CFr37RpE7y8vAAAM2fOxJMnT+Dj44PU1FR07twZoaGhqF+/vhS/cuVKaGhoYNiwYXjy5Al69+6NzZs3Q11dXYrZvn07fH19pbuXBw8ejLVr10rz1dXVsW/fPvj4+MDZ2Rm6urrw8PDAsmXLqmjviYiIiKpXnXqO4cuAzzGU43MMiYioLuBzDImIiIjolVKrLyUT1VZzdl2s6RTKjaOcRET0PCwMiV4RLGaJiOh5eCmZiIiIiACwMCQiIiKiAiwMiYiIiAgAC0MiIiIiKsDCkIiIiIgAsDAkIiIiogIsDImIiIgIAAtDIiIiIirAwpCIiIiIALAwJCIiIqICLAyJiIiICAALQyIiIiIqoFHTCRARlWTOros1nUK5Bb7jUNMpEBFVGEcMiYiIiAgAC0MiIiIiKsBLyVSjhtxeUtMplNvuhjNrOgUiIqIqwRFDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCQiIiIiACwMiYiIiKgAH3BNRFSJ+PvO9DLh8fzq4YghEREREQFgYUhEREREBVgYEhEREREAFoZEREREVICFIREREREBYGFIRERERAVYGBIRERERAD7HkIjolcdn1RFRIY4YEhEREREAjhgSEVEdVBdHOYnqAhaGROU05PaSmk6h3HY3nFnTKRARUR3AS8lEREREBICFIREREREVYGFIRERERAD4HUOiVwK/F0lERGXBEUMiIiIiAsDCkIiIiIgK8FIyEdVKdfHyN8BL4ERUt7EwrICvv/4aS5cuRVJSElq3bo1Vq1ahW7duNZ0WEdUCdbGgZTFLJamLxzOwtaYTqNNYGJbTjh074Ofnh6+//hrOzs745ptv0L9/f1y5cgWNGjWq6fSIiMqtbn74E1FV4HcMy2nFihUYM2YMPv74Y7Rq1QqrVq2CjY0N1q1bV9OpEREREb0QFoblkJ2djZiYGLi6usraXV1dERkZWUNZEREREVUOXkouh3/++Qd5eXkwNzeXtZubmyM5ObnYZbKyspCVlSVNp6enAwAyMjIqPb/Mp9mVvk4iIqK6pCo+X/+9XiFElay/tmBhWAEKhUI2LYRQaSsUGBiI+fPnq7Tb2NhUSW5ERESvtFk/VenqHz58CKVSWaXbqEksDMvBxMQE6urqKqODKSkpKqOIhebMmYNp06ZJ0/n5+Xjw4AGMjY1LLCYrIiMjAzY2NkhMTISBgUGlrZfk2M/Vg/1cfdjX1YP9XD2qsp+FEHj48CGsrKwqdb21DQvDctDS0kLHjh0RFhaGt99+W2oPCwvDW2+9Vewy2tra0NbWlrU1aNCgynI0MDDgSacasJ+rB/u5+rCvqwf7uXpUVT+/zCOFhVgYltO0adPg6ekJR0dHODk54dtvv0VCQgLGjx9f06kRERERvRAWhuU0fPhw3L9/HwsWLEBSUhLs7e2xf/9+NG7cuKZTIyIiInohLAwrwMfHBz4+PjWdhoy2tjbmzZunctmaKhf7uXqwn6sP+7p6sJ+rB/v5xSnEy37fNRERERGVCR9wTUREREQAWBgSERERUQEWhkREREQEgIUhERERERVgYViHfP3112jatCl0dHTQsWNHHD9+vNT48PBwdOzYETo6OmjWrBnWr19fTZnWbeXp5127dqFv374wNTWFgYEBnJyc8Pvvv1djtnVXeY/nQidOnICGhgbatWtXtQm+JMrbz1lZWfj000/RuHFjaGtr47XXXsPGjRurKdu6rbx9vX37drRt2xZ6enqwtLTEqFGjcP/+/WrKtu45duwYBg0aBCsrKygUCuzevfu5y/BzsAIE1QlBQUFCU1NTbNiwQVy5ckVMmTJF6Ovri1u3bhUb/9dffwk9PT0xZcoUceXKFbFhwwahqakpfvnll2rOvG4pbz9PmTJFLF68WJw+fVpcv35dzJkzR2hqaoqzZ89Wc+Z1S3n7uVBaWppo1qyZcHV1FW3btq2eZOuwivTz4MGDRefOnUVYWJiIj48Xp06dEidOnKjGrOum8vb18ePHhZqamvjyyy/FX3/9JY4fPy5at24thgwZUs2Z1x379+8Xn376qdi5c6cAIIKDg0uN5+dgxbAwrCM6deokxo8fL2tr2bKlmD17drHxM2fOFC1btpS1jRs3TnTp0qXKcnwZlLefi2NnZyfmz59f2am9VCraz8OHDxf/+c9/xLx581gYlkF5+/nAgQNCqVSK+/fvV0d6L5Xy9vXSpUtFs2bNZG2rV68WDRs2rLIcXyZlKQz5OVgxvJRcB2RnZyMmJgaurq6ydldXV0RGRha7zMmTJ1Xi3dzccObMGeTk5FRZrnVZRfq5qPz8fDx8+BBGRkZVkeJLoaL9vGnTJvz555+YN29eVaf4UqhIP+/ZsweOjo5YsmQJrK2t0aJFC0yfPh1PnjypjpTrrIr0ddeuXXH79m3s378fQgjcvXsXv/zyCwYOHFgdKb8S+DlYMfzlkzrgn3/+QV5eHszNzWXt5ubmSE5OLnaZ5OTkYuNzc3Pxzz//wNLSssryrasq0s9FLV++HJmZmRg2bFhVpPhSqEg/37hxA7Nnz8bx48ehocHTVllUpJ//+usvREREQEdHB8HBwfjnn3/g4+ODBw8e8HuGpahIX3ft2hXbt2/H8OHD8fTpU+Tm5mLw4MFYs2ZNdaT8SuDnYMVwxLAOUSgUsmkhhErb8+KLaye58vZzoR9//BEBAQHYsWMHzMzMqiq9l0ZZ+zkvLw8eHh6YP38+WrRoUV3pvTTKczzn5+dDoVBg+/bt6NSpEwYMGIAVK1Zg8+bNHDUsg/L09ZUrV+Dr64vPPvsMMTExCAkJQXx8PMaPH18dqb4y+DlYfvyndx1gYmICdXV1lX95pqSkqPxrqJCFhUWx8RoaGjA2Nq6yXOuyivRzoR07dmDMmDH4+eef0adPn6pMs84rbz8/fPgQZ86cwblz5zBp0iQAzwoYIQQ0NDQQGhqKXr16VUvudUlFjmdLS0tYW1tDqVRKba1atYIQArdv30bz5s2rNOe6qiJ9HRgYCGdnZ8yYMQMA0KZNG+jr66Nbt25YuHAhR7MqAT8HK4YjhnWAlpYWOnbsiLCwMFl7WFgYunbtWuwyTk5OKvGhoaFwdHSEpqZmleVal1Wkn4FnI4VeXl744Ycf+P2gMihvPxsYGODixYuIjY2V/saPHw9bW1vExsaic+fO1ZV6nVKR49nZ2Rl37tzBo0ePpLbr169DTU0NDRs2rNJ867KK9PXjx4+hpib/CFZXVwfw/6Na9GL4OVhBNXTTC5VT4aMQvvvuO3HlyhXh5+cn9PX1xc2bN4UQQsyePVt4enpK8YW36U+dOlVcuXJFfPfdd7xNvwzK288//PCD0NDQEF999ZVISkqS/tLS0mpqF+qE8vZzUbwruWzK288PHz4UDRs2FEOHDhWXL18W4eHhonnz5uLjjz+uqV2oM8rb15s2bRIaGhri66+/Fn/++aeIiIgQjo6OolOnTjW1C7Xew4cPxblz58S5c+cEALFixQpx7tw56ZFA/BysHCwM65CvvvpKNG7cWGhpaYkOHTqI8PBwad7IkSOFi4uLLP7o0aOiffv2QktLSzRp0kSsW7eumjOum8rTzy4uLgKAyt/IkSOrP/E6przH87+xMCy78vZzXFyc6NOnj9DV1RUNGzYU06ZNE48fP67mrOum8vb16tWrhZ2dndDV1RWWlpbiww8/FLdv367mrOuOI0eOlHq+5edg5VAIwTFrIiIiIuJ3DImIiIioAAtDIiIiIgLAwpCIiIiICrAwJCIiIiIALAyJiIiIqAALQyIiIiICwMKQiIiIiAqwMCR6RTVp0gSrVq16oXVs3rwZDRo0KDUmICAA7dq1k6a9vLwwZMgQabpHjx7w8/N7oTwq6sSJE3BwcICmpqYspxf1+PFjvPvuuzAwMIBCoUBaWlqlrftlVZPHARH9PxaGRFSlpk+fjkOHDpU4f9euXfj888+l6cooWMtq2rRpaNeuHeLj47F58+ZKW++WLVtw/PhxREZGIikpCUql8rnL3Lx5EwqFArGxsZWWBxFReWnUdAJEVLmys7OhpaVV02lI6tWrh3r16pU438jIqBqzkfvzzz8xfvx4NGzYsNLX26pVK9jb21fqesuqth0DtS0fIioZRwyJarEePXpg0qRJmDRpEho0aABjY2P85z//wb9/ybJJkyZYuHAhvLy8oFQq4e3tDQDYuXMnWrduDW1tbTRp0gTLly9XWf/Dhw/h4eGBevXqwcrKCmvWrJHNX7FiBRwcHKCvrw8bGxv4+Pjg0aNHKuvZvXs3WrRoAR0dHfTt2xeJiYnSvKKXkovbx8JLiD169MCtW7cwdepUKBQKKBQKZGZmwsDAAL/88otsub1790JfXx8PHz4sdr1ZWVnw9fWFmZkZdHR08OabbyI6OhrA/4/O3b9/H6NHj4ZCoShxxHDbtm1wdHRE/fr1YWFhAQ8PD6SkpJS6P8uXL8exY8egUCjQo0cPAIBCocDu3btlsQ0aNJC227RpUwBA+/btZcsVd4l1yJAh8PLykqZLOgYiIyPRvXt36OrqwsbGBr6+vsjMzCwx98LX6ptvvoGNjQ309PTw3nvvyS6Fv0g+J06cgIuLC/T09GBoaAg3NzekpqZKy+Xn52PmzJkwMjKChYUFAgICZNt53vF469YtDBo0CIaGhtDX10fr1q2xf/9+af6VK1cwYMAA1KtXD+bm5vD09MQ///xTYn8QvYpYGBLVclu2bIGGhgZOnTqF1atXY+XKlfjf//4ni1m6dCns7e0RExODuXPnIiYmBsOGDcP777+PixcvIiAgAHPnzlUpfpYuXYo2bdrg7NmzmDNnDqZOnYqwsDBpvpqaGlavXo1Lly5hy5YtOHz4MGbOnClbx+PHj/Hf//4XW7ZswYkTJ5CRkYH333+/Qvu6a9cuNGzYEAsWLEBSUhKSkpKgr6+P999/H5s2bZLFbtq0CUOHDkX9+vWLXdfMmTOxc+dObNmyBWfPnsXrr78ONzc3PHjwADY2NkhKSoKBgQFWrVqFpKQkDB8+vNj1ZGdn4/PPP8f58+exe/duxMfHy4qg4vbB29sbTk5OSEpKwq5du8q076dPnwYAHDx4sFzLFSp6DFy8eBFubm545513cOHCBezYsQMRERGYNGlSqev5448/8NNPP2Hv3r0ICQlBbGwsJk6cWK5cissnNjYWvXv3RuvWrXHy5ElERERg0KBByMvLk5bZsmUL9PX1cerUKSxZsgQLFiwo1/E4ceJEZGVl4dixY7h48SIWL14sjVYnJSXBxcUF7dq1w5kzZxASEoK7d+9i2LBh5d43opeaIKJay8XFRbRq1Urk5+dLbbNmzRKtWrWSphs3biyGDBkiW87Dw0P07dtX1jZjxgxhZ2cnW65fv36ymOHDh4v+/fuXmM9PP/0kjI2NpelNmzYJACIqKkpqi4uLEwDEqVOnhBBCzJs3T7Rt21aaP3LkSPHWW2/J9nHKlCmyvFauXCnb7qlTp4S6urr4+++/hRBC3Lt3T2hqaoqjR48Wm+ejR4+Epqam2L59u9SWnZ0trKysxJIlS6Q2pVIpNm3aVOL+Fuf06dMCgHj48GGJMVOmTBEuLi6yNgAiODhY1vbv7cfHxwsA4ty5c7KYov0jhBBvvfWWGDlypDRd3DHg6ekpxo4dK2s7fvy4UFNTE0+ePCk273nz5gl1dXWRmJgotR04cECoqamJpKSkF8rngw8+EM7OzsVut3C9b775pqztjTfeELNmzSpxmaLHo4ODgwgICCg2du7cucLV1VXWlpiYKACIa9eulbgNolcNRwyJarkuXbpAoVBI005OTrhx44ZspMXR0VG2TFxcHJydnWVtzs7OKss5OTnJYpycnBAXFydNHzlyBH379oW1tTXq16+PESNG4P79+7LLkRoaGrLtt2zZEg0aNJCt50V16tQJrVu3xvfffw8A2Lp1Kxo1aoTu3bsXG//nn38iJydH1geampro1KlTufM6d+4c3nrrLTRu3Bj169eXLvEmJCRUbGeqSNFjICYmBps3b5a+41mvXj24ubkhPz8f8fHxJa6nUaNGsu9cOjk5IT8/H9euXXuhfApHDEvTpk0b2bSlpaXssv3zjkdfX18sXLgQzs7OmDdvHi5cuCAtGxMTgyNHjsj6o2XLlgCeHS9E9AwLQ6KXgL6+vmxaCCErJgvbyqJwuVu3bmHAgAGwt7fHzp07ERMTg6+++goAkJOTU+wyz2t7ER9//LF0OXnTpk0YNWpUidso3Nfi+qA8eWVmZsLV1RX16tXDtm3bEB0djeDgYADPLjGXh0KhUHkNivZjcdTU1Mq0XNFjID8/H+PGjUNsbKz0d/78edy4cQOvvfZaufL+938rmo+uru5zt6Wpqamy7fz8fABlOx4//vhj/PXXX/D09MTFixfh6OgofW82Pz8fgwYNkvVHbGwsbty4UeI/MIheRSwMiWq5qKgolenmzZtDXV29xGXs7OwQEREha4uMjESLFi1kyxW37sJRlDNnziA3NxfLly9Hly5d0KJFC9y5c0dlW7m5uThz5ow0fe3aNaSlpUnrKS8tLS3ZqGahjz76CAkJCVi9ejUuX76MkSNHlriO119/HVpaWrI+yMnJwZkzZ9CqVasy53L16lX8888/+OKLL9CtWze0bNmy1BtPSmNqaoqkpCRp+saNG3j8+LE0XXjXbtF9L7pcXl4eLl269NztdejQAZcvX8brr7+u8lfaHcIJCQmy1/nkyZNQU1NDixYtXiifNm3alPrYoucp6/FoY2OD8ePHY9euXfD398eGDRsA/H9/NGnSRKU/ihaxRK8yFoZEtVxiYiKmTZuGa9eu4ccff8SaNWswZcqUUpfx9/fHoUOH8Pnnn+P69evYsmUL1q5di+nTp8viTpw4gSVLluD69ev46quv8PPPP0vrfu2115Cbm4s1a9bgr7/+wtatW7F+/XqVbWlqamLy5Mk4deoUzp49i1GjRqFLly7o1KlThfa3SZMmOHbsGP7++2/ZHaOGhoZ45513MGPGDLi6upb6iBl9fX1MmDABM2bMQEhICK5cuQJvb288fvwYY8aMKXMujRo1gpaWltQHe/bskT1zsTx69eqFtWvX4uzZszhz5gzGjx8vGyEzMzODrq6udFNEenq6tNy+ffuwb98+XL16FT4+PmV6YPasWbNw8uRJTJw4URoZ27NnDyZPnlzqcjo6Ohg5ciTOnz+P48ePw9fXF8OGDYOFhcUL5TNnzhxER0fDx8cHFy5cwNWrV7Fu3boy3xVcluPRz88Pv//+O+Lj43H27FkcPnxY+ofAxIkT8eDBA3zwwQc4ffo0/vrrL4SGhmL06NHF/kOE6FXFwpColhsxYgSePHmCTp06YeLEiZg8eTLGjh1b6jIdOnTATz/9hKCgINjb2+Ozzz7DggULVO6m9ff3R0xMDNq3b4/PP/8cy5cvh5ubGwCgXbt2WLFiBRYvXgx7e3ts374dgYGBKtvS09PDrFmz4OHhAScnJ+jq6iIoKKjC+7tgwQLcvHkTr732GkxNTWXzxowZg+zsbIwePfq56/niiy/w7rvvwtPTEx06dMAff/yB33//HYaGhmXOxdTUFJs3b8bPP/8MOzs7fPHFF1i2bFm59wkAli9fDhsbG3Tv3h0eHh6YPn069PT0pPkaGhpYvXo1vvnmG1hZWeGtt94CAIwePRojR47EiBEj4OLigqZNm6Jnz57P3V6bNm0QHh6OGzduoFu3bmjfvj3mzp0LS0vLUpd7/fXX8c4772DAgAFwdXWFvb09vv76a2l+RfNp0aIFQkNDcf78eXTq1AlOTk749ddfoaFRtsfpluV4zMvLw8SJE9GqVSv069cPtra2Uu5WVlY4ceIE8vLy4ObmBnt7e0yZMgVKpRJqavwoJCqkEGX94hERVbsePXqgXbt21fZLILXd9u3bMWXKFNy5c4cPTK4CAQEB2L17N399hegVxl8+IaJa7/Hjx4iPj0dgYCDGjRvHopCIqIpw/JyIar0lS5agXbt2MDc3x5w5c2o6HSKilxYvJRMRERERAI4YEhEREVEBFoZEREREBICFIREREREVYGFIRERERABYGBIRERFRARaGRERERASAhSERERERFWBhSEREREQAWBgSERERUYH/AxTvctmi4E3PAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -2441,7 +2414,7 @@ }, { "cell_type": "code", - "execution_count": 298, + "execution_count": 104, "id": "90c4c2b5-0ede-4001-889f-749cfbd9df04", "metadata": {}, "outputs": [ @@ -2476,30 +2449,30 @@ " \n", " 0\n", " 1\n", - " 17.78\n", - " 0.96\n", - " 0.67\n", + " 8.80\n", + " 0.94\n", + " 1.02\n", " \n", " \n", " 1\n", " 2\n", - " 36.12\n", - " 2.49\n", - " 2.83\n", + " 36.16\n", + " 5.17\n", + " 4.70\n", " \n", " \n", " 2\n", " 3\n", - " 63.14\n", - " 7.29\n", - " 7.04\n", + " 61.06\n", + " 13.33\n", + " 14.62\n", " \n", " \n", " 3\n", " 4\n", - " 86.03\n", - " 29.21\n", - " 29.20\n", + " 89.86\n", + " 53.74\n", + " 53.19\n", " \n", " \n", "\n", @@ -2507,13 +2480,13 @@ ], "text/plain": [ " quartile score (%) score adjusted (%) has purchased (%)\n", - "0 1 17.78 0.96 0.67\n", - "1 2 36.12 2.49 2.83\n", - "2 3 63.14 7.29 7.04\n", - "3 4 86.03 29.21 29.20" + "0 1 8.80 0.94 1.02\n", + "1 2 36.16 5.17 4.70\n", + "2 3 61.06 13.33 14.62\n", + "3 4 89.86 53.74 53.19" ] }, - "execution_count": 298, + "execution_count": 104, "metadata": {}, "output_type": "execute_result" } @@ -2562,7 +2535,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 40, "id": "a974589f-7952-4db2-bebf-7b69c6b09372", "metadata": {}, "outputs": [], @@ -2586,46 +2559,10 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 41, "id": "dd8a52e1-d06e-4790-8687-8e58e3e6b84e", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1080/3982240549.py:7: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df_output.loc[:,\"nb_tickets_projected\"] = df_output.loc[:,nb_tickets] / duration_ratio\n", - "/tmp/ipykernel_1080/3982240549.py:8: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df_output.loc[:,\"total_amount_projected\"] = df_output.loc[:,total_amount] / duration_ratio\n", - "/tmp/ipykernel_1080/3982240549.py:10: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df_output.loc[:,\"nb_tickets_expected\"] = df_output.loc[:,score_adjusted] * df_output.loc[:,\"nb_tickets_projected\"]\n", - "/tmp/ipykernel_1080/3982240549.py:11: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df_output.loc[:,\"total_amount_expected\"] = df_output.loc[:,score_adjusted] * df_output.loc[:,\"total_amount_projected\"]\n", - "/tmp/ipykernel_1080/3982240549.py:13: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df_output.loc[:,\"pace_purchase\"] = (duration_ref/df_output.loc[:,nb_purchases]).apply(lambda x : np.nan if x==np.inf else x)\n" - ] - }, { "data": { "text/html": [ @@ -2647,16 +2584,16 @@ " \n", " \n", " \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", - " time_between_purchase\n", - " nb_tickets_internet\n", + " customer_id\n", + " street_id\n", + " structure_id\n", + " mcp_contact_id\n", " fidelity\n", + " tenant_id\n", + " is_partner\n", + " deleted_at\n", + " is_email_true\n", + " opt_in\n", " ...\n", " has_purchased\n", " has_purchased_estim\n", @@ -2673,123 +2610,123 @@ " \n", " \n", " 0\n", - " 4.0\n", - " 1.0\n", - " 100.00\n", - " 1.0\n", - " 0.0\n", - " 5.177187\n", - " 5.177187\n", - " 0.000000\n", - " 0.0\n", + " 1_8191\n", + " 8114\n", + " NaN\n", + " 834.0\n", + " 0\n", + " 1311\n", + " False\n", + " NaN\n", + " True\n", " 1\n", " ...\n", " 0.0\n", " 0.0\n", - " 0.006066\n", - " 1\n", - " 0.001713\n", - " 2.823529\n", - " 70.588235\n", - " 0.004836\n", - " 0.120890\n", - " 17.0\n", + " 0.408546\n", + " 2\n", + " 0.027066\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " NaN\n", " \n", " \n", " 1\n", - " 1.0\n", - " 1.0\n", - " 55.00\n", - " 1.0\n", - " 0.0\n", - " 426.265613\n", - " 426.265613\n", - " 0.000000\n", - " 0.0\n", + " 1_14792\n", " 2\n", + " NaN\n", + " 251178.0\n", + " 0\n", + " 1311\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", " ...\n", - " 1.0\n", " 0.0\n", - " 0.288847\n", - " 2\n", - " 0.102477\n", - " 0.705882\n", - " 38.823529\n", - " 0.072337\n", - " 3.978520\n", - " 17.0\n", + " 0.0\n", + " 0.027046\n", + " 1\n", + " 0.001118\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " NaN\n", " \n", " \n", " 2\n", - " 17.0\n", - " 1.0\n", - " 80.00\n", - " 1.0\n", - " 0.0\n", - " 436.033437\n", - " 436.033437\n", - " 0.000000\n", - " 0.0\n", + " 1_30466\n", " 2\n", + " NaN\n", + " 2355.0\n", + " 0\n", + " 1311\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", " ...\n", " 0.0\n", " 0.0\n", - " 0.103264\n", + " 0.180851\n", " 1\n", - " 0.031356\n", - " 12.000000\n", - " 56.470588\n", - " 0.376274\n", - " 1.770701\n", - " 17.0\n", + " 0.008813\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " NaN\n", " \n", " \n", " 3\n", - " 4.0\n", - " 1.0\n", - " 120.00\n", - " 1.0\n", - " 0.0\n", - " 5.196412\n", - " 5.196412\n", - " 0.000000\n", - " 0.0\n", + " 1_41898\n", + " 20244\n", + " 203714.0\n", + " 97973.0\n", + " 0\n", + " 1311\n", + " False\n", + " NaN\n", + " True\n", " 1\n", " ...\n", " 0.0\n", " 0.0\n", - " 0.008928\n", + " 0.220872\n", " 1\n", - " 0.002526\n", - " 2.823529\n", - " 84.705882\n", - " 0.007132\n", - " 0.213968\n", - " 17.0\n", + " 0.011288\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " NaN\n", " \n", " \n", " 4\n", - " 34.0\n", - " 2.0\n", - " 416.00\n", - " 1.0\n", - " 0.0\n", - " 478.693148\n", - " 115.631470\n", - " 363.061678\n", - " 0.0\n", - " 4\n", + " 1_58746\n", + " 2\n", + " NaN\n", + " 82026.0\n", + " 1\n", + " 1311\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", " ...\n", - " 1.0\n", - " 1.0\n", - " 0.992809\n", - " 4\n", - " 0.974880\n", - " 24.000000\n", - " 293.647059\n", - " 23.397112\n", - " 286.270541\n", - " 8.5\n", + " 0.0\n", + " 0.0\n", + " 0.100951\n", + " 1\n", + " 0.004502\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " NaN\n", " \n", " \n", " ...\n", @@ -2816,71 +2753,23 @@ " ...\n", " \n", " \n", - " 96091\n", - " 1.0\n", - " 1.0\n", - " 67.31\n", - " 1.0\n", - " 1.0\n", - " 278.442257\n", - " 278.442257\n", - " 0.000000\n", - " 1.0\n", + " 186115\n", + " 4_24295\n", + " 103884\n", + " NaN\n", + " 96913.0\n", + " 0\n", + " 1342\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", + " ...\n", + " 0.0\n", + " 0.0\n", + " 0.466644\n", " 2\n", - " ...\n", - " 1.0\n", - " 0.0\n", - " 0.351762\n", - " 2\n", - " 0.132353\n", - " 0.705882\n", - " 47.512941\n", - " 0.093426\n", - " 6.288478\n", - " 17.0\n", - " \n", - " \n", - " 96092\n", - " 1.0\n", - " 1.0\n", - " 61.41\n", - " 1.0\n", - " 1.0\n", - " 189.207373\n", - " 189.207373\n", - " 0.000000\n", - " 1.0\n", - " 1\n", - " ...\n", - " 0.0\n", - " 1.0\n", - " 0.567814\n", - " 3\n", - " 0.269714\n", - " 0.705882\n", - " 43.348235\n", - " 0.190387\n", - " 11.691645\n", - " 17.0\n", - " \n", - " \n", - " 96093\n", - " 0.0\n", - " 0.0\n", - " 0.00\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", - " 1\n", - " ...\n", - " 0.0\n", - " 0.0\n", - " 0.004652\n", - " 1\n", - " 0.001312\n", + " 0.034037\n", " 0.000000\n", " 0.000000\n", " 0.000000\n", @@ -2888,47 +2777,95 @@ " NaN\n", " \n", " \n", - " 96094\n", - " 1.0\n", - " 1.0\n", - " 79.43\n", - " 1.0\n", - " 1.0\n", - " 279.312905\n", - " 279.312905\n", + " 186116\n", + " 4_44443\n", + " 43315\n", + " NaN\n", + " 234734.0\n", + " 0\n", + " 1342\n", + " False\n", + " NaN\n", + " True\n", + " 0\n", + " ...\n", + " 0.0\n", + " 0.0\n", + " 0.427641\n", + " 2\n", + " 0.029211\n", " 0.000000\n", - " 1.0\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " NaN\n", + " \n", + " \n", + " 186117\n", + " 4_3343947\n", + " 2\n", + " NaN\n", + " NaN\n", + " 1\n", + " 1342\n", + " False\n", + " NaN\n", + " True\n", + " 0\n", + " ...\n", + " 0.0\n", + " 0.0\n", + " 0.468464\n", + " 2\n", + " 0.034278\n", + " 0.705882\n", + " 20.470588\n", + " 0.024196\n", + " 0.701686\n", + " 17.0\n", + " \n", + " \n", + " 186118\n", + " 4_47752\n", + " 46460\n", + " NaN\n", + " 89791.0\n", + " 0\n", + " 1342\n", + " False\n", + " NaN\n", + " True\n", " 1\n", " ...\n", " 0.0\n", " 0.0\n", - " 0.293042\n", + " 0.360100\n", " 2\n", - " 0.104362\n", - " 0.705882\n", - " 56.068235\n", - " 0.073668\n", - " 5.851420\n", - " 17.0\n", + " 0.022161\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " NaN\n", " \n", " \n", - " 96095\n", - " 0.0\n", - " 0.0\n", - " 0.00\n", - " 0.0\n", - " 0.0\n", - " 550.000000\n", - " 550.000000\n", - " -1.000000\n", - " 0.0\n", - " 2\n", + " 186119\n", + " 4_35449\n", + " 34592\n", + " NaN\n", + " 119197.0\n", + " 0\n", + " 1342\n", + " False\n", + " NaN\n", + " True\n", + " 1\n", " ...\n", " 0.0\n", " 1.0\n", - " 0.787852\n", - " 4\n", - " 0.510753\n", + " 0.728907\n", + " 3\n", + " 0.097705\n", " 0.000000\n", " 0.000000\n", " 0.000000\n", @@ -2937,92 +2874,79 @@ " \n", " \n", "\n", - "

96096 rows × 27 columns

\n", + "

186120 rows × 97 columns

\n", "" ], "text/plain": [ - " nb_tickets nb_purchases total_amount nb_suppliers \\\n", - "0 4.0 1.0 100.00 1.0 \n", - "1 1.0 1.0 55.00 1.0 \n", - "2 17.0 1.0 80.00 1.0 \n", - "3 4.0 1.0 120.00 1.0 \n", - "4 34.0 2.0 416.00 1.0 \n", - "... ... ... ... ... \n", - "96091 1.0 1.0 67.31 1.0 \n", - "96092 1.0 1.0 61.41 1.0 \n", - "96093 0.0 0.0 0.00 0.0 \n", - "96094 1.0 1.0 79.43 1.0 \n", - "96095 0.0 0.0 0.00 0.0 \n", + " customer_id street_id structure_id mcp_contact_id fidelity \\\n", + "0 1_8191 8114 NaN 834.0 0 \n", + "1 1_14792 2 NaN 251178.0 0 \n", + "2 1_30466 2 NaN 2355.0 0 \n", + "3 1_41898 20244 203714.0 97973.0 0 \n", + "4 1_58746 2 NaN 82026.0 1 \n", + "... ... ... ... ... ... \n", + "186115 4_24295 103884 NaN 96913.0 0 \n", + "186116 4_44443 43315 NaN 234734.0 0 \n", + "186117 4_3343947 2 NaN NaN 1 \n", + "186118 4_47752 46460 NaN 89791.0 0 \n", + "186119 4_35449 34592 NaN 119197.0 0 \n", "\n", - " vente_internet_max purchase_date_min purchase_date_max \\\n", - "0 0.0 5.177187 5.177187 \n", - "1 0.0 426.265613 426.265613 \n", - "2 0.0 436.033437 436.033437 \n", - "3 0.0 5.196412 5.196412 \n", - "4 0.0 478.693148 115.631470 \n", - "... ... ... ... \n", - "96091 1.0 278.442257 278.442257 \n", - "96092 1.0 189.207373 189.207373 \n", - "96093 0.0 550.000000 550.000000 \n", - "96094 1.0 279.312905 279.312905 \n", - "96095 0.0 550.000000 550.000000 \n", + " tenant_id is_partner deleted_at is_email_true opt_in ... \\\n", + "0 1311 False NaN True 1 ... \n", + "1 1311 False NaN True 1 ... \n", + "2 1311 False NaN True 1 ... \n", + "3 1311 False NaN True 1 ... \n", + "4 1311 False NaN True 1 ... \n", + "... ... ... ... ... ... ... \n", + "186115 1342 False NaN True 1 ... \n", + "186116 1342 False NaN True 0 ... \n", + "186117 1342 False NaN True 0 ... \n", + "186118 1342 False NaN True 1 ... \n", + "186119 1342 False NaN True 1 ... \n", "\n", - " time_between_purchase nb_tickets_internet fidelity ... \\\n", - "0 0.000000 0.0 1 ... \n", - "1 0.000000 0.0 2 ... \n", - "2 0.000000 0.0 2 ... \n", - "3 0.000000 0.0 1 ... \n", - "4 363.061678 0.0 4 ... \n", - "... ... ... ... ... \n", - "96091 0.000000 1.0 2 ... \n", - "96092 0.000000 1.0 1 ... \n", - "96093 -1.000000 0.0 1 ... \n", - "96094 0.000000 1.0 1 ... \n", - "96095 -1.000000 0.0 2 ... \n", + " has_purchased has_purchased_estim score quartile score_adjusted \\\n", + "0 0.0 0.0 0.408546 2 0.027066 \n", + "1 0.0 0.0 0.027046 1 0.001118 \n", + "2 0.0 0.0 0.180851 1 0.008813 \n", + "3 0.0 0.0 0.220872 1 0.011288 \n", + "4 0.0 0.0 0.100951 1 0.004502 \n", + "... ... ... ... ... ... \n", + "186115 0.0 0.0 0.466644 2 0.034037 \n", + "186116 0.0 0.0 0.427641 2 0.029211 \n", + "186117 0.0 0.0 0.468464 2 0.034278 \n", + "186118 0.0 0.0 0.360100 2 0.022161 \n", + "186119 0.0 1.0 0.728907 3 0.097705 \n", "\n", - " has_purchased has_purchased_estim score quartile score_adjusted \\\n", - "0 0.0 0.0 0.006066 1 0.001713 \n", - "1 1.0 0.0 0.288847 2 0.102477 \n", - "2 0.0 0.0 0.103264 1 0.031356 \n", - "3 0.0 0.0 0.008928 1 0.002526 \n", - "4 1.0 1.0 0.992809 4 0.974880 \n", - "... ... ... ... ... ... \n", - "96091 1.0 0.0 0.351762 2 0.132353 \n", - "96092 0.0 1.0 0.567814 3 0.269714 \n", - "96093 0.0 0.0 0.004652 1 0.001312 \n", - "96094 0.0 0.0 0.293042 2 0.104362 \n", - "96095 0.0 1.0 0.787852 4 0.510753 \n", + " nb_tickets_projected total_amount_projected nb_tickets_expected \\\n", + "0 0.000000 0.000000 0.000000 \n", + "1 0.000000 0.000000 0.000000 \n", + "2 0.000000 0.000000 0.000000 \n", + "3 0.000000 0.000000 0.000000 \n", + "4 0.000000 0.000000 0.000000 \n", + "... ... ... ... \n", + "186115 0.000000 0.000000 0.000000 \n", + "186116 0.000000 0.000000 0.000000 \n", + "186117 0.705882 20.470588 0.024196 \n", + "186118 0.000000 0.000000 0.000000 \n", + "186119 0.000000 0.000000 0.000000 \n", "\n", - " nb_tickets_projected total_amount_projected nb_tickets_expected \\\n", - "0 2.823529 70.588235 0.004836 \n", - "1 0.705882 38.823529 0.072337 \n", - "2 12.000000 56.470588 0.376274 \n", - "3 2.823529 84.705882 0.007132 \n", - "4 24.000000 293.647059 23.397112 \n", - "... ... ... ... \n", - "96091 0.705882 47.512941 0.093426 \n", - "96092 0.705882 43.348235 0.190387 \n", - "96093 0.000000 0.000000 0.000000 \n", - "96094 0.705882 56.068235 0.073668 \n", - "96095 0.000000 0.000000 0.000000 \n", + " total_amount_expected pace_purchase \n", + "0 0.000000 NaN \n", + "1 0.000000 NaN \n", + "2 0.000000 NaN \n", + "3 0.000000 NaN \n", + "4 0.000000 NaN \n", + "... ... ... \n", + "186115 0.000000 NaN \n", + "186116 0.000000 NaN \n", + "186117 0.701686 17.0 \n", + "186118 0.000000 NaN \n", + "186119 0.000000 NaN \n", "\n", - " total_amount_expected pace_purchase \n", - "0 0.120890 17.0 \n", - "1 3.978520 17.0 \n", - "2 1.770701 17.0 \n", - "3 0.213968 17.0 \n", - "4 286.270541 8.5 \n", - "... ... ... \n", - "96091 6.288478 17.0 \n", - "96092 11.691645 17.0 \n", - "96093 0.000000 NaN \n", - "96094 5.851420 17.0 \n", - "96095 0.000000 NaN \n", - "\n", - "[96096 rows x 27 columns]" + "[186120 rows x 97 columns]" ] }, - "execution_count": 107, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -3035,7 +2959,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 42, "id": "cb66a8ea-65f7-460f-b3fc-ba76a3b91faa", "metadata": {}, "outputs": [ @@ -3043,14 +2967,14 @@ "data": { "text/plain": [ "quartile\n", - "1 15.578346\n", - "2 15.403993\n", - "3 12.415869\n", - "4 5.983541\n", + "1 16.722853\n", + "2 16.568788\n", + "3 15.765899\n", + "4 13.263500\n", "Name: pace_purchase, dtype: float64" ] }, - "execution_count": 108, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -3061,7 +2985,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 43, "id": "f58f9151-2f91-45df-abb7-1ddcf0652adc", "metadata": {}, "outputs": [], @@ -3094,7 +3018,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 44, "id": "c8df6c80-43e8-4f00-9cd3-eb9022744313", "metadata": {}, "outputs": [ @@ -3132,42 +3056,42 @@ " \n", " 0\n", " 1\n", - " 53565\n", - " 55.74\n", - " 1067.91\n", - " 27626.39\n", - " 3.42\n", - " 15.58\n", + " 81622\n", + " 43.85\n", + " 263.12\n", + " 3258.54\n", + " 0.88\n", + " 16.72\n", " \n", " \n", " 1\n", " 2\n", - " 24607\n", - " 25.61\n", - " 4748.18\n", - " 169941.72\n", - " 15.27\n", - " 15.40\n", + " 60811\n", + " 32.67\n", + " 1984.56\n", + " 27052.82\n", + " 2.47\n", + " 16.57\n", " \n", " \n", " 2\n", " 3\n", - " 9716\n", - " 10.11\n", - " 11629.33\n", - " 309933.79\n", - " 32.41\n", - " 12.42\n", + " 28913\n", + " 15.53\n", + " 3476.63\n", + " 43945.79\n", + " 6.34\n", + " 15.77\n", " \n", " \n", " 3\n", " 4\n", - " 8208\n", - " 8.54\n", - " 215729.86\n", - " 10042427.50\n", - " 89.69\n", - " 5.98\n", + " 14774\n", + " 7.94\n", + " 58598.68\n", + " 523568.93\n", + " 60.03\n", + " 13.26\n", " \n", " \n", "\n", @@ -3175,19 +3099,19 @@ ], "text/plain": [ " quartile size size_perct nb_tickets_expected total_amount_expected \\\n", - "0 1 53565 55.74 1067.91 27626.39 \n", - "1 2 24607 25.61 4748.18 169941.72 \n", - "2 3 9716 10.11 11629.33 309933.79 \n", - "3 4 8208 8.54 215729.86 10042427.50 \n", + "0 1 81622 43.85 263.12 3258.54 \n", + "1 2 60811 32.67 1984.56 27052.82 \n", + "2 3 28913 15.53 3476.63 43945.79 \n", + "3 4 14774 7.94 58598.68 523568.93 \n", "\n", " revenue_recovered_perct pace_purchase \n", - "0 3.42 15.58 \n", - "1 15.27 15.40 \n", - "2 32.41 12.42 \n", - "3 89.69 5.98 " + "0 0.88 16.72 \n", + "1 2.47 16.57 \n", + "2 6.34 15.77 \n", + "3 60.03 13.26 " ] }, - "execution_count": 110, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } diff --git a/utils_CA_segment.py b/utils_CA_segment.py index 28b5d26..bab0607 100644 --- a/utils_CA_segment.py +++ b/utils_CA_segment.py @@ -13,7 +13,8 @@ import io # functions def load_train_test(type_of_activity): - BUCKET = f"projet-bdc2324-team1/Generalization/{type_of_activity}" + # BUCKET = f"projet-bdc2324-team1/Generalization/{type_of_activity}" + BUCKET = f"projet-bdc2324-team1/Generalization_v2/{type_of_activity}" File_path_train = BUCKET + "/Train_set.csv" File_path_test = BUCKET + "/Test_set.csv" @@ -31,7 +32,7 @@ def load_train_test(type_of_activity): def features_target_split(dataset_train, dataset_test): features_l = ['nb_tickets', 'nb_purchases', 'total_amount', 'nb_suppliers', 'vente_internet_max', 'purchase_date_min', 'purchase_date_max', - 'time_between_purchase', 'nb_tickets_internet', 'fidelity', 'is_email_true', 'opt_in', #'is_partner', + 'time_between_purchase', 'fidelity', 'is_email_true', 'opt_in', #'is_partner', 'nb_tickets_internet', 'gender_female', 'gender_male', 'gender_other', 'nb_campaigns', 'nb_campaigns_opened'] # we suppress fidelity, time between purchase, and gender other (colinearity issue) @@ -41,17 +42,18 @@ def features_target_split(dataset_train, dataset_test): 'opt_in', 'gender_female', 'gender_male', 'nb_campaigns', 'nb_campaigns_opened'] """ - X_train = dataset_train[features_l] + X_train = dataset_train # [features_l] y_train = dataset_train[['y_has_purchased']] - X_test = dataset_test[features_l] + X_test = dataset_test # [features_l] y_test = dataset_test[['y_has_purchased']] return X_train, X_test, y_train, y_test def load_model(type_of_activity, model): - BUCKET = f"projet-bdc2324-team1/Output_model/{type_of_activity}/{model}/" + # BUCKET = f"projet-bdc2324-team1/Output_model/{type_of_activity}/{model}/" + BUCKET = f"projet-bdc2324-team1/basique/{type_of_activity}/{model}/" filename = model + '.pkl' file_path = BUCKET + filename with fs.open(file_path, mode="rb") as f: