Exemple de code Python pour monter un modèle de machine learning : débutant, expérimenté, expert
Ce qu’il faut retenir
En pratique
Ce tutoriel est utile si vous devez mettre en place un outil, un environnement ou une brique technique sans perdre du temps sur les mauvais choix.
- Quand utiliser cette approche
- Prerequis utiles
- Erreurs frequentes
- Points de vigilance en entreprise
Pourquoi un simple exemple de code Python machine learning ne suffit pas en entreprise
Un modèle machine learning Python se monte vite en environnement de test. En revanche, dès qu’il touche un flux métier, un reporting, un contrôle opérationnel ou une décision récurrente, les enjeux changent. Le sujet n’est plus seulement de faire prédire un modèle, mais de savoir quelles données entrent, quelles règles s’appliquent, qui reprend la main en cas d’écart et comment le résultat est exploité.
Dans un contexte B2B, il faut arbitrer entre trois trajectoires :
- Débutant : valider rapidement une intuition ou une faisabilité.
- Expérimenté : structurer un premier code robuste, relançable et lisible.
- Expert : préparer un usage sérieux avec pipeline, traçabilité, validation et séparation claire des étapes.
Le point clé : un script trop simple peut créer un faux sentiment de maîtrise. C’est souvent là que commencent les dérives de qualité, les reprises manuelles et les débats sans fin entre métier, data et IT.
Prérequis avant d’écrire la première ligne
Avant de chercher un exemple code Python machine learning, il faut poser le cadre. En intervention directe, sans couche agence, c’est généralement là que se joue la moitié de la réussite.
Prérequis minimum :
- Un objectif métier formulé clairement : classification, prévision, détection d’écart, score de risque, recommandation simple.
- Un jeu de données identifiable, avec une cible définie si le cas est supervisé.
- Une compréhension des variables disponibles et de leur qualité.
- Un environnement Python propre : version maîtrisée, librairies figées, notebook ou script selon l’usage.
- Un critère d’évaluation cohérent avec le métier : précision, rappel, erreur moyenne, stabilité, interprétabilité.
Installation type :
python -m venv .venv source .venv/bin/activate pip install pandas scikit-learn numpy joblib
Erreurs fréquentes dès cette étape :
- Prendre une donnée disponible au lieu de prendre une donnée exploitable.
- Mélanger données d’entraînement et données de test.
- Choisir une métrique technique sans lien avec la décision métier.
- Construire un POC sans prévoir qui l’exécutera, quand et sur quelle source.
Niveau débutant : un modèle simple pour valider une idée
Ce niveau est pertinent pour un premier cadrage, un atelier métier ou une vérification rapide de faisabilité. Il ne faut pas lui demander plus. L’objectif est de tester une hypothèse, pas d’industrialiser.
Cas typique : prédire un segment client, classer un dossier simple, estimer une catégorie de ticket ou vérifier qu’un signal existe dans les données.
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score # Chargement des données d'exemple data = load_iris() X = data.data y = data.target # Séparation entraînement / test X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) # Entraînement du modèle model = RandomForestClassifier(random_state=42) model.fit(X_train, y_train) # Prédiction predictions = model.predict(X_test) # Évaluation accuracy = accuracy_score(y_test, predictions) print(f"Accuracy : {accuracy:.2f}")
Ce que ce code fait bien :
- Il montre la logique générale : données, séparation, entraînement, prédiction, évaluation.
- Il permet une montée en compétence rapide pour un profil python machine learning débutant.
Ses limites :
- Aucune gestion de données réelles.
- Aucun contrôle de qualité des colonnes.
- Pas de pipeline de prétraitement.
- Pas de sauvegarde de modèle ni de reproductibilité complète.
En entreprise, ce niveau suffit pour dire : oui, il y a peut-être un signal. Il ne suffit pas pour dire : on peut s’appuyer dessus en exploitation.
Niveau expérimenté : structurer le code pour un premier usage métier crédible
Ici, on passe d’un script de démonstration à un code plus propre, capable de gérer un vrai dataset tabulaire avec préparation des données et pipeline reproductible. C’est souvent le bon niveau pour un pilote métier sérieux.
Cas typique : score simple sur données CRM, contrôle automatisé sur des flux internes, première classification sur historique d’événements.
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import OneHotEncoder, StandardScaler from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report from joblib import dump # Exemple de chargement # df = pd.read_csv("donnees_metier.csv") df = pd.DataFrame({ "age": [34, 45, 29, 50, 41, None], "revenu": [32000, 54000, 28000, 61000, 49000, 45000], "segment": ["A", "B", "A", "B", "C", "A"], "cible": [0, 1, 0, 1, 1, 0] }) X = df.drop(columns=["cible"]) y = df["cible"] numeric_features = ["age", "revenu"] categorical_features = ["segment"] numeric_transformer = Pipeline(steps=[ ("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler()) ]) categorical_transformer = Pipeline(steps=[ ("imputer", SimpleImputer(strategy="most_frequent")), ("onehot", OneHotEncoder(handle_unknown="ignore")) ]) preprocessor = ColumnTransformer(transformers=[ ("num", numeric_transformer, numeric_features), ("cat", categorical_transformer, categorical_features) ]) pipeline = Pipeline(steps=[ ("preprocessor", preprocessor), ("model", RandomForestClassifier(random_state=42)) ]) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) pipeline.fit(X_train, y_train) predictions = pipeline.predict(X_test) print(classification_report(y_test, predictions, zero_division=0)) dump(pipeline, "modele_metier.joblib")
Pourquoi ce niveau compte :
- Les transformations sont intégrées au pipeline.
- Le comportement est plus stable face aux données manquantes.
- Le modèle peut être sauvegardé et rejoué.
- Le code est plus lisible pour une revue croisée entre data, DSI et métier.
Point de vigilance : même à ce niveau, il manque encore la gestion des versions de données, les tests, les logs détaillés et la surveillance des dérives. Mais pour un premier usage interne bien cadré, c’est souvent un niveau pertinent.
Niveau expert : préparer un code ML Python exploitable, traçable et gouvernable
Le niveau expert n’est pas une question de sophistication algorithmique. C’est une question de maîtrise opérationnelle. Le code doit être découpé, testable, configurable et compatible avec un cycle d’exploitation réel. C’est là que la seniorité fait gagner du temps : on traite les dépendances, les risques de reprise et la trajectoire de mise en production avant qu’ils ne deviennent coûteux.
Exemple simplifié d’organisation :
from dataclasses import dataclass from pathlib import Path import pandas as pd from sklearn.model_selection import train_test_split from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import OneHotEncoder, StandardScaler from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import roc_auc_score from joblib import dump @dataclass class Config: target_column: str = "cible" model_path: str = "artifacts/modele.joblib" test_size: float = 0.2 random_state: int = 42 def load_data() -> pd.DataFrame: return pd.DataFrame({ "age": [34, 45, 29, 50, 41, 38, 52, 27], "revenu": [32000, 54000, 28000, 61000, 49000, 46000, 67000, 30000], "segment": ["A", "B", "A", "B", "C", "B", "C", "A"], "cible": [0, 1, 0, 1, 1, 1, 1, 0] }) def build_pipeline() -> Pipeline: numeric_features = ["age", "revenu"] categorical_features = ["segment"] numeric_transformer = Pipeline(steps=[ ("imputer", SimpleImputer(strategy="median")), ("scaler", StandardScaler()) ]) categorical_transformer = Pipeline(steps=[ ("imputer", SimpleImputer(strategy="most_frequent")), ("onehot", OneHotEncoder(handle_unknown="ignore")) ]) preprocessor = ColumnTransformer(transformers=[ ("num", numeric_transformer, numeric_features), ("cat", categorical_transformer, categorical_features) ]) return Pipeline(steps=[ ("preprocessor", preprocessor), ("model", RandomForestClassifier(random_state=42)) ]) def train_and_save(config: Config) -> float: df = load_data() X = df.drop(columns=[config.target_column]) y = df[config.target_column] X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=config.test_size, random_state=config.random_state, stratify=y ) pipeline = build_pipeline() pipeline.fit(X_train, y_train) proba = pipeline.predict_proba(X_test)[:, 1] score = roc_auc_score(y_test, proba) Path("artifacts").mkdir(exist_ok=True) dump(pipeline, config.model_path) return score if __name__ == "__main__": config = Config() auc = train_and_save(config) print(f"AUC : {auc:.3f}")
Ce qui change réellement :
- Le code est organisé en fonctions réutilisables.
- La configuration est explicite.
- Le modèle est enregistré dans un répertoire prévu.
- Le choix de métrique est plus cohérent pour un cas probabiliste.
- La base est prête pour ajouter logs, tests, CI/CD, suivi de dérive et orchestration.
Pour un code ml python expert, la vraie question n’est pas seulement la performance. C’est la capacité à expliquer, rejouer, auditer et maintenir le comportement du modèle dans le temps.
Comment choisir le bon niveau selon votre contexte métier
Le bon arbitrage dépend moins de la taille du dataset que du risque métier et du mode d’exploitation.
Choisissez le niveau débutant si :
- vous êtes en phase d’exploration ;
- vous devez vérifier une intuition rapidement ;
- aucune décision opérationnelle ne dépend encore du résultat.
Choisissez le niveau expérimenté si :
- vous lancez un pilote ;
- vous devez partager le code avec d’autres parties prenantes ;
- les données réelles comportent des manques, des catégories et des règles de préparation.
Choisissez le niveau expert si :
- le modèle alimente un processus récurrent ;
- le résultat entre dans un contrôle, un reporting ou une aide à la décision ;
- vous avez des enjeux de gouvernance, d’auditabilité, de maintenance ou de reprise.
Erreurs fréquentes en entreprise :
- Industrialiser trop tôt un modèle encore mal cadré.
- Rester trop longtemps sur un notebook non versionné.
- Confondre score technique correct et usage métier fiable.
- Ignorer les dépendances amont : qualité des extractions, fréquence de mise à jour, référentiels, règles de calcul.
Dans la pratique, un freelance senior apporte surtout de la valeur au moment où il faut relier le code, les contraintes métier et l’exploitation cible. C’est rarement l’algorithme seul qui bloque ; c’est le passage entre idée, pilote et production.
FAQ
Quel est le meilleur exemple de code Python machine learning pour commencer ?
Pour commencer, un script simple avec scikit-learn suffit, à condition de comprendre sa limite. Il permet d’apprendre la logique générale d’un modèle, mais il ne couvre ni la qualité des données, ni les contrôles, ni les exigences d’exploitation. En contexte d’entreprise, il faut rapidement passer à un pipeline structuré.
Quand faut-il passer d'un code débutant à un modèle plus expert ?
Il faut changer de niveau dès que le modèle sort du cadre exploratoire. Si le code doit être rejoué, partagé, audité ou intégré à un processus métier, un simple script devient fragile. Le passage au niveau expérimenté ou expert se justifie par la fréquence d’usage, le risque métier et la nécessité de gouvernance.
Le plus difficile dans un modèle machine learning Python est-il l'algorithme ?
Non, pas dans la majorité des cas B2B. Le plus difficile est souvent le cadrage : qualité des sources, règles métier, préparation des données, traçabilité, tests et conditions de reprise. Un modèle moyen mais bien exploité apporte plus de valeur qu’un algorithme sophistiqué branché sur des données instables.
Besoin d'un cadrage avant de mettre cela en place ?
Autres contenus utiles
Ces contenus complémentaires permettent d’approfondir le sujet sans alourdir la navigation principale du site.
