375 lines
39 KiB
Plaintext
375 lines
39 KiB
Plaintext
{
|
|
"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": "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": 3,
|
|
"id": "27002f2f-a78a-414c-8e4f-b15bf6dd9e40",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/tmp/ipykernel_23374/1677066092.py:7: DtypeWarning: Columns (11,40) 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_23374/1677066092.py:12: DtypeWarning: Columns (40) 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": 4,
|
|
"id": "c3928b55-8821-46da-b3b5-a036efd6d2cf",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>event_type_id</th>\n",
|
|
" <th>name_event_types</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>2.0</td>\n",
|
|
" <td>offre muséale individuel</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>4.0</td>\n",
|
|
" <td>spectacle vivant</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>5.0</td>\n",
|
|
" <td>offre muséale groupe</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>NaN</td>\n",
|
|
" <td>NaN</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"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": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"dataset_train[['event_type_id', 'name_event_types']].drop_duplicates()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"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": 6,
|
|
"id": "b4078b8e-2172-47e6-9f92-106dc3015fc9",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"228.0"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"dataset_train['y_has_purchased'].sum()"
|
|
]
|
|
},
|
|
{
|
|
"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.967882\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.967882\n",
|
|
"purchase_date_max 0.967882\n",
|
|
"time_between_purchase 0.967882\n",
|
|
"nb_tickets_internet 0.000000\n",
|
|
"name_event_types 0.967882\n",
|
|
"avg_amount 0.967882\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.856471\n",
|
|
"mcp_contact_id 0.297844\n",
|
|
"last_buying_date 0.642312\n",
|
|
"max_price 0.642312\n",
|
|
"ticket_sum 0.000000\n",
|
|
"average_price 0.107403\n",
|
|
"fidelity 0.000000\n",
|
|
"average_purchase_delay 0.642312\n",
|
|
"average_price_basket 0.642312\n",
|
|
"average_ticket_basket 0.642312\n",
|
|
"total_price 0.534909\n",
|
|
"purchase_count 0.000000\n",
|
|
"first_buying_date 0.642312\n",
|
|
"country 0.066622\n",
|
|
"tenant_id 0.000000\n",
|
|
"gender_label 0.000000\n",
|
|
"gender_female 0.000000\n",
|
|
"gender_male 0.000000\n",
|
|
"gender_other 0.000000\n",
|
|
"country_fr 0.066622\n",
|
|
"nb_campaigns 0.000000\n",
|
|
"nb_campaigns_opened 0.000000\n",
|
|
"time_to_open 0.553988\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": 11,
|
|
"id": "2ce94258-e2d1-472a-81fc-fc11e247b423",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"121789.0"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"len(dataset_train) - dataset_train['y_has_purchased'].sum()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "34bae3f7-d579-4f80-a38d-a83eb5ea8a7b",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Accuracy: 0.9986037223669636\n",
|
|
"Confusion Matrix:\n",
|
|
" [[128000 37]\n",
|
|
" [ 142 19]]\n",
|
|
"Classification Report:\n",
|
|
" precision recall f1-score support\n",
|
|
"\n",
|
|
" 0.0 1.00 1.00 1.00 128037\n",
|
|
" 1.0 0.34 0.12 0.18 161\n",
|
|
"\n",
|
|
" accuracy 1.00 128198\n",
|
|
" macro avg 0.67 0.56 0.59 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": 10,
|
|
"id": "ccc78c36-3287-46e6-89ac-7494c1a7106a",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 2 Axes>"
|
|
]
|
|
},
|
|
"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
|
|
}
|