Feature Engineering#

Import des outils / jeu de données#

1import pandas as pd
2import seaborn as sns
3
4from src.config import data_folder
5from src.utils import init_notebook
1init_notebook()
1df = pd.read_csv(
2    f"{data_folder}/data-cleaned.csv", sep=",", index_col="ID", parse_dates=True
3)
1df.head()
Year_Birth Education Marital_Status Income Kidhome Teenhome Dt_Customer Recency MntWines MntFruits ... NumWebPurchases NumCatalogPurchases NumStorePurchases NumWebVisitsMonth AcceptedCmp3 AcceptedCmp4 AcceptedCmp5 AcceptedCmp1 AcceptedCmp2 Response
ID
5524 1957 Graduation Single 58138.0 0 0 2012-09-04 58 635 88 ... 8 10 4 7 0 0 0 0 0 1
2174 1954 Graduation Single 46344.0 1 1 2014-03-08 38 11 1 ... 1 1 2 5 0 0 0 0 0 0
4141 1965 Graduation Together 71613.0 0 0 2013-08-21 26 426 49 ... 8 2 10 4 0 0 0 0 0 0
6182 1984 Graduation Together 26646.0 1 0 2014-02-10 26 11 4 ... 2 0 4 6 0 0 0 0 0 0
5324 1981 PhD Married 58293.0 1 0 2014-01-19 94 173 43 ... 5 3 6 5 0 0 0 0 0 0

5 rows Ă— 25 columns

Création de variables#

Tableau. Variables ajoutées

| :— | :— | | NbAcceptedCampaigns | Nombre de campagnes marketing acceptées (hors variable cible) | | HasAcceptedCampaigns | Le client a déjà accepté une campagne (1) ou non (0) | | NbChildren | Nombre d’enfants au total (bas âge + adolescent) |

1## todo : faire une var somme des achats sur le web
2## todo : faire un client type par type d'achat (web / magasin) => est-ce que les gens qui achètent en web / magasin sont différents ?
3## todo : créer une variable duréeClient qui dit depuis quand le client est inscrit
1## todo: commenter la démarche
1df["NbAcceptedCampaigns"] = 0
2
3for i in range(1, 6):
4    df["NbAcceptedCampaigns"] += df[f"AcceptedCmp{i}"].astype(int)
1sns.histplot(df["NbAcceptedCampaigns"], discrete=True)
<Axes: xlabel='NbAcceptedCampaigns', ylabel='Count'>
../_images/0e791fba0915f8805bf6206bb40faed9a2b75c8fc19329c3dc4ae0db599b887d.png
1df["HasAcceptedCampaigns"] = df["NbAcceptedCampaigns"] > 0
1sns.histplot(df["HasAcceptedCampaigns"].astype(str))
<Axes: xlabel='HasAcceptedCampaigns', ylabel='Count'>
../_images/abce2383d748add9e7e5fe1f08da935dbee2710a6fdc816763e9f385e318646f.png
1df_clients = df[df["HasAcceptedCampaigns"]]
2df_not_clients = df[~df["HasAcceptedCampaigns"]]
1## todo: vérifier si par exemple Kids et Teen apportent des informations différentes => si les deux sont complémentaires, on les laisse / sinon on les supprime au profit de notre nouvelle variable
1df[["Kidhome", "Teenhome"]].value_counts().plot(kind="bar")
<Axes: xlabel='Kidhome,Teenhome'>
../_images/1136a60802fba9f587c8759fd621dc454c01d1eae275c963632f44e8ef547ec4.png
1df["NbChildren"] = df["Kidhome"].astype(int) + df["Teenhome"].astype(int)
1sns.histplot(df["NbChildren"])
<Axes: xlabel='NbChildren', ylabel='Count'>
../_images/73a73c9e9b8fdc0c877f30751989f1a9ccb6943e3580d016a8fb57a805996581.png
1## todo: créer une variable "NbAcceptedCampaignsWithResponse", qui contient donc la 6ème campagne marketing => l'objectif est de clusteriser les gens en fonction de "à quel point ils sont marketables" => c'est-à-dire, on présente nos résultats en disant sur qui il vaut mieux se concentrer pour faire des pubs
1## todo: créer une variable "RevenuePerClient" => le revenu rapporté par chaque client => ce serait plutôt juste une variable type "KPI" à afficher dans un dashboard non ?
1## todo: de même, créer une variable "RevenueWinePerClient" => le revenu de vin pour chaque client, et faire de même pour chaque produit => par la suite on pourra faire des représentations "quel client rapporte le plus de vin"

Sauvegarde du Dataframe#

1df.to_csv(f"{data_folder}/data-cleaned-feature-engineering.csv")