{ "cells": [ { "cell_type": "markdown", "id": "ac01a6ea-bef6-4ace-89ff-1dc03a4215c2", "metadata": {}, "source": [ "# Segmentation des clients par régression logistique" ] }, { "cell_type": "code", "execution_count": 1, "id": "bca785be-39f7-4583-9bd8-67c1134ae275", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import os\n", "import s3fs\n", "import re\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n", "from sklearn.preprocessing import StandardScaler\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "id": "59ce5096-4e2c-45c1-be78-43e14db4142c", "metadata": {}, "outputs": [], "source": [ "# # modification des variables categorielles\n", " \n", "# ### variable gender\n", "# df1_customer_product[\"gender_label\"] = df1_customer_product[\"gender\"].map({\n", "# 0: 'female',\n", "# 1: 'male',\n", "# 2: 'other'\n", "# })\n", " \n", "# ### variable country -> on indique si le pays est france\n", "# df1_customer_product[\"country_fr\"] = df1_customer_product[\"country\"].apply(lambda x : int(x==\"fr\") if pd.notna(x) else np.nan)\n", "\n", "# # Création des indicatrices de gender\n", "# gender_dummies = pd.get_dummies(df1_customer_product[\"gender_label\"], prefix='gender').astype(int)\n", " \n", "# # Concaténation des indicatrices avec le dataframe d'origine\n", "# df1_customer_product = pd.concat([df1_customer_product, gender_dummies], axis=1)" ] }, { "cell_type": "code", "execution_count": 3, "id": "3bf57816-b023-4e84-9450-095620bddebc", "metadata": {}, "outputs": [], "source": [ "# Create filesystem object\n", "S3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n", "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL})" ] }, { "cell_type": "code", "execution_count": 4, "id": "27002f2f-a78a-414c-8e4f-b15bf6dd9e40", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_7740/1677066092.py:7: DtypeWarning: Columns (21,39) 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_7740/1677066092.py:12: DtypeWarning: Columns (21,39) have mixed types. Specify dtype option on import or set low_memory=False.\n", " dataset_test = pd.read_csv(file_in, sep=\",\")\n" ] } ], "source": [ "# Importation des données\n", "BUCKET = \"projet-bdc2324-team1/1_Output/Logistique Regression databases - First approach\"\n", "\n", "FILE_PATH_S3 = BUCKET + \"/\" + \"dataset_train.csv\"\n", "\n", "with fs.open(FILE_PATH_S3, mode=\"rb\") as file_in:\n", " dataset_train = pd.read_csv(file_in, sep=\",\")\n", "\n", "FILE_PATH_S3 = BUCKET + \"/\" + \"dataset_test.csv\"\n", "\n", "with fs.open(FILE_PATH_S3, mode=\"rb\") as file_in:\n", " dataset_test = pd.read_csv(file_in, sep=\",\")\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "c3928b55-8821-46da-b3b5-a036efd6d2cf", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_type_idname_event_types
02.0offre muséale individuel
14.0spectacle vivant
25.0offre muséale groupe
3NaNNaN
\n", "
" ], "text/plain": [ " event_type_id name_event_types\n", "0 2.0 offre muséale individuel\n", "1 4.0 spectacle vivant\n", "2 5.0 offre muséale groupe\n", "3 NaN NaN" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset_train[['event_type_id', 'name_event_types']].drop_duplicates()" ] }, { "cell_type": "code", "execution_count": 6, "id": "7e8a9d4d-7e55-4173-a7f4-8b8baa9610d2", "metadata": {}, "outputs": [], "source": [ "#Choose type of event \n", "type_event_choosed = 5\n", "\n", "dataset_test = dataset_test[(dataset_test['event_type_id'] == type_event_choosed) | np.isnan(dataset_test['event_type_id'])]\n", "dataset_test['y_has_purchased'] = dataset_test['y_has_purchased'].fillna(0)\n", "dataset_train = dataset_train[(dataset_train['event_type_id'] == type_event_choosed) | np.isnan(dataset_train['event_type_id'])]\n", "dataset_train['y_has_purchased'] = dataset_train['y_has_purchased'].fillna(0)" ] }, { "cell_type": "code", "execution_count": 7, "id": "e20ced8f-df1c-43bb-8d15-79f414c8225c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "customer_id 0.000000\n", "event_type_id 0.950522\n", "nb_tickets 0.000000\n", "nb_purchases 0.000000\n", "total_amount 0.000000\n", "nb_suppliers 0.000000\n", "vente_internet_max 0.000000\n", "purchase_date_min 0.950522\n", "purchase_date_max 0.950522\n", "time_between_purchase 0.950522\n", "nb_tickets_internet 0.000000\n", "name_event_types 0.950522\n", "avg_amount 0.950522\n", "birthdate 0.961918\n", "street_id 0.000000\n", "is_partner 0.000000\n", "gender 0.000000\n", "is_email_true 0.000000\n", "opt_in 0.000000\n", "structure_id 0.863048\n", "profession 0.952160\n", "language 0.991778\n", "mcp_contact_id 0.297275\n", "last_buying_date 0.611718\n", "max_price 0.611718\n", "ticket_sum 0.000000\n", "average_price 0.102225\n", "fidelity 0.000000\n", "average_purchase_delay 0.611718\n", "average_price_basket 0.611718\n", "average_ticket_basket 0.611718\n", "total_price 0.509493\n", "purchase_count 0.000000\n", "first_buying_date 0.611718\n", "country 0.063488\n", "age 0.961918\n", "tenant_id 0.000000\n", "nb_campaigns 0.000000\n", "nb_campaigns_opened 0.000000\n", "time_to_open 0.543355\n", "y_has_purchased 0.000000\n", "dtype: float64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset_train.isna().sum()/len(dataset_train)" ] }, { "cell_type": "code", "execution_count": 8, "id": "34bae3f7-d579-4f80-a38d-a83eb5ea8a7b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 0.9985491193310349\n", "Confusion Matrix:\n", " [[127988 49]\n", " [ 137 24]]\n", "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0.0 1.00 1.00 1.00 128037\n", " 1.0 0.33 0.15 0.21 161\n", "\n", " accuracy 1.00 128198\n", " macro avg 0.66 0.57 0.60 128198\n", "weighted avg 1.00 1.00 1.00 128198\n", "\n" ] } ], "source": [ "\n", "reg_columns = ['nb_tickets', 'nb_purchases', 'total_amount', 'nb_suppliers', 'vente_internet_max', 'nb_tickets_internet', 'opt_in', 'fidelity', 'nb_campaigns', 'nb_campaigns_opened']\n", "\n", "X_train = dataset_train[reg_columns]\n", "y_train = dataset_train['y_has_purchased']\n", "X_test = dataset_test[reg_columns]\n", "y_test = dataset_test['y_has_purchased']\n", "\n", "# Fit and transform the scaler on the training data\n", "scaler = StandardScaler()\n", "\n", "# Transform the test data using the same scaler\n", "X_train_scaled = scaler.fit_transform(X_train)\n", "X_test_scaled = scaler.fit_transform(X_test)\n", "\n", "# Create and fit the linear regression model\n", "logit_model = LogisticRegression(penalty='l1', solver='liblinear', C=1.0)\n", "logit_model.fit(X_train_scaled, y_train)\n", "\n", "y_pred = logit_model.predict(X_test_scaled)\n", "\n", "#Evaluation du modèle \n", "accuracy = accuracy_score(y_test, y_pred)\n", "conf_matrix = confusion_matrix(y_test, y_pred)\n", "class_report = classification_report(y_test, y_pred)\n", "\n", "print(\"Accuracy:\", accuracy)\n", "print(\"Confusion Matrix:\\n\", conf_matrix)\n", "print(\"Classification Report:\\n\", class_report)" ] }, { "cell_type": "code", "execution_count": 9, "id": "ccc78c36-3287-46e6-89ac-7494c1a7106a", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['Class 0', 'Class 1'], yticklabels=['Class 0', 'Class 1'])\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Actual')\n", "plt.title('Confusion Matrix')\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.6" } }, "nbformat": 4, "nbformat_minor": 5 }