ConsigneDe la donnée brute à la prédiction : pipeline ML end-to-end
Pipeline ML end-to-end : de la donnée brute à la prédiction. Met en pratique tout ce qu'on a vu (prétraitement, split, modèle, évaluation).
1. CHARGEMENT / GÉNÉRATION des données2. EDA rapide3. SPLIT train/test (test set MIS DE CÔTÉ — touché qu'à la fin)4. PRÉTRAITEMENT dans un pipeline (scaling, encoding, imputation)5. MODÈLE avec ses hyperparamètres6. ÉVALUATION par cross-validation sur le train7. ENTRAÎNEMENT final sur 100% du train8. ÉVALUATION FINALE sur le test set9. INTERPRÉTATION (feature importance, erreurs)import numpy as np, pandas as pdfrom sklearn.model_selection import train_test_split, cross_val_scorefrom sklearn.preprocessing import StandardScalerfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import classification_reportfrom sklearn.pipeline import Pipelinenp.random.seed(42)n = 500df = pd.DataFrame({ 'heures': np.random.uniform(1, 15, n), 'exercices': np.random.randint(5, 100, n), 'note_prev': np.random.uniform(0, 20, n), 'absences': np.random.randint(0, 20, n),})df['reussite'] = ((df['heures']*2 + df['exercices']*0.3 + df['note_prev']*3 - df['absences']*5 + np.random.normal(0, 10, n)) > 50).astype(int)# 1. SplitX = df.drop('reussite', axis=1)y = df['reussite']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 2. Pipelinepipe = Pipeline([ ('scaler', StandardScaler()), ('rf', RandomForestClassifier(n_estimators=100, random_state=42))])# 3. Cross-validation sur le TRAIN seulementcv_scores = cross_val_score(pipe, X_train, y_train, cv=5)print(f'CV Accuracy: {cv_scores.mean():.4f} (+/- {cv_scores.std():.4f})')# 4. Fit final + éval sur TEST holdoutpipe.fit(X_train, y_train)y_pred = pipe.predict(X_test)print(f'Test Accuracy: {pipe.score(X_test, y_test):.4f}')print(classification_report(y_test, y_pred))# 5. Interprétation : feature importanceimportances = pipe.named_steps['rf'].feature_importances_for name, imp in sorted(zip(X.columns, importances), key=lambda x: -x[1]): print(f' {name}: {imp:.3f}')- GridSearchCV / RandomizedSearchCV : recherche d'hyperparamètres- StratifiedKFold : préserver les proportions des classes en CV- feature engineering : créer de nouvelles variables- autres modèles : XGBoost, LightGBM, neural nets- calibration de probabilité (CalibratedClassifierCV)- métriques métier (ROC-AUC, lift...)# Sauvegarder le pipeline entraînéimport joblibjoblib.dump(pipe, 'model.pkl')# Recharger plus tardpipe = joblib.load('model.pkl')pipe.predict(X_new)Tu viens de boucler 100 leçons couvrant Python de zéro jusqu'au ML complet. Pour aller plus loin : Kaggle (compétitions), papers (arxiv-sanity), libs avancées (PyTorch, TensorFlow, MLflow, Airflow).
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →