Applez Nous: +41 22 518 70 00
Trop souvent, le travail en Machine Learning débute dans un carnet Jupyter de manière désordonnée : nettoyages manuels, encodages isolés puis entraînement final. Lorsque ce modèle doit être mis en production, reproduire ces mêmes transformations sur les nouvelles requêtes entrantes devient une source majeure de bugs et de fuites d’informations.
La classe Pipeline encapsule toutes les étapes séquentielles de traitement (transformateurs) et le modèle final (estimateur) au sein d’un objet unique et cohérent :
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestClassifier
# Pipeline pour variables numériques
num_pipeline = Pipeline([
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())
])
# Pipeline pour variables catégorielles
cat_pipeline = Pipeline([
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder(handle_unknown='ignore'))
])
# Assembleur par colonnes
preprocessor = ColumnTransformer([
('num', num_pipeline, numeric_features),
('cat', cat_pipeline, categorical_features)
])
# Pipeline global complet
full_pipeline = Pipeline([
('preprocessor', preprocessor),
('classifier', RandomForestClassifier(n_estimators=100))
])
# Entraînement en un seul appel
full_pipeline.fit(X_train, y_train)
Ce formalisme garantit que les mêmes imputations et normalisations sont strictement appliquées à l’inférence, sans aucune divergence technique.
Une fois le pipeline entraîné et validé, il doit être persisté sur disque pour être déployé en dehors de l’environnement d’apprentissage. La bibliothèque standardisée joblib est optimisée pour sérialiser efficacement les objets Python contenant des matrices de coefficients volumineuses :
import joblib
# Sauvegarder le pipeline complet
joblib.dump(full_pipeline, 'modele_machine_learning.joblib')
# Recharger le pipeline dans une application de production
loaded_model = joblib.load('modele_machine_learning.joblib')
predictions = loaded_model.predict(new_data)