DataCraft Non classé Construire un pipeline de machine learning de A à Z avec scikit-learn

Construire un pipeline de machine learning de A à Z avec scikit-learn

Le Machine Learning ne se limite pas à entraîner un modèle : c’est tout un processus structuré allant de la collecte des données jusqu’à la mise en production. Dans cet article, nous allons voir comment Construire un pipeline de machine learning de A à Z avec scikit-learn, l’une des bibliothèques les plus utilisées en Data Science.


🧭 Objectif de cet article

Montrer pas à pas comment structurer un projet de Machine Learning proprement avec scikit-learn, en respectant les bonnes pratiques :

  • Nettoyage et transformation des données
  • Entraînement du modèle
  • Évaluation
  • Automatisation avec un pipeline

🧪 Étape 1 : Chargement des données

On utilise ici le dataset « Titanic » pour illustrer, mais ce pipeline est applicable à tout dataset tabulaire.

import pandas as pd
from sklearn.model_selection import train_test_split

df = pd.read_csv("titanic.csv")
X = df.drop("Survived", axis=1)
y = df["Survived"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

🧹 Étape 2 : Prétraitement des données

➕ Problèmes typiques :

  • Valeurs manquantes
  • Variables catégorielles
  • Normalisation des valeurs numériques

🛠️ Scikit-learn fournit tout ce qu’il faut :

from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder

# Colonnes à traiter
num_cols = ['Age', 'Fare']
cat_cols = ['Sex', 'Embarked']

# Pipelines pour chaque type
num_pipeline = Pipeline([
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])

cat_pipeline = Pipeline([
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('encoder', OneHotEncoder(handle_unknown='ignore'))
])

# Fusion dans un seul transformateur
preprocessor = ColumnTransformer([
    ('num', num_pipeline, num_cols),
    ('cat', cat_pipeline, cat_cols)
])

🧠 Étape 3 : Modélisation

On peut maintenant ajouter notre modèle dans un pipeline complet :

from sklearn.ensemble import RandomForestClassifier

model = Pipeline([
    ('preprocessing', preprocessor),
    ('classifier', RandomForestClassifier(n_estimators=100, random_state=42))
])

✅ Étape 4 : Entraînement et évaluation

from sklearn.metrics import classification_report, confusion_matrix

model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

🧪 Étape 5 : Validation croisée et tuning

from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
print("Accuracy moyenne :", scores.mean())

Pour aller plus loin : GridSearchCV permet d’optimiser automatiquement les hyperparamètres :

from sklearn.model_selection import GridSearchCV

param_grid = {
    'classifier__n_estimators': [50, 100, 200],
    'classifier__max_depth': [None, 5, 10]
}

grid_search = GridSearchCV(model, param_grid, cv=3, scoring='accuracy')
grid_search.fit(X_train, y_train)

print("Meilleurs paramètres :", grid_search.best_params_)

💾 Étape 6 : Sauvegarder et recharger le pipeline

import joblib

joblib.dump(grid_search.best_estimator_, "best_model.pkl")

# Plus tard...
model = joblib.load("best_model.pkl")

🧩 Étape 7 : Utilisation en production

Utiliser le pipeline simplifie énormément la prédiction sur de nouvelles données :

new_data = pd.DataFrame({
    'Age': [29],
    'Fare': [100],
    'Sex': ['male'],
    'Embarked': ['S']
})

prediction = model.predict(new_data)
print("Survived ?", prediction[0])

📌 Récapitulatif du pipeline ML

ÉtapeOutils utilisésObjectif
Chargement des donnéespandas, train_test_splitStructurer les données
PrétraitementSimpleImputer, OneHotEncoder, StandardScaler, ColumnTransformerNettoyer & transformer
ModélisationRandomForest, PipelineApprendre un modèle robuste
Évaluationconfusion_matrix, classification_reportAnalyser les résultats
Validation croiséecross_val_score, GridSearchCVÉviter le surapprentissage
SauvegardejoblibRéutiliser le modèle
Production.predict()Prédire simplement

🚀 Aller plus loin

  • Utiliser d’autres modèles : LogisticRegression, XGBoost, GradientBoostingClassifier
  • Ajouter du FeatureSelection dans le pipeline
  • Gérer des textes ou des images avec des pipelines avancés
  • Coupler avec MLFlow pour le tracking d’expériences

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Related Post