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
Étape | Outils utilisés | Objectif |
---|---|---|
Chargement des données | pandas , train_test_split | Structurer les données |
Prétraitement | SimpleImputer , OneHotEncoder , StandardScaler , ColumnTransformer | Nettoyer & transformer |
Modélisation | RandomForest , Pipeline | Apprendre un modèle robuste |
Évaluation | confusion_matrix , classification_report | Analyser les résultats |
Validation croisée | cross_val_score , GridSearchCV | Éviter le surapprentissage |
Sauvegarde | joblib | Ré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 desimages
avec des pipelines avancés - Coupler avec MLFlow pour le tracking d’expériences