Le Data Scientist est souvent le profil le plus difficile à évaluer correctement. Voici la structure complète d un test technique rigoureux, de la statistics au déploiement.
Un Data Scientist qui ne peut déployer aucun modèle en production est un coût. Un Data Scientist qui déploie des modèles sans comprendre les statistiques sous-jacentes est un risque. On évalue les deux dimensions.
Quelle est la différence entre précision (precision) et rappel (recall) ? Dans quel cas privilégiez-vous l un ou l autre ?
from sklearn.metrics import classification_report, confusion_matrix
import numpy as np
# La matrice de confusion
# TP = vrais positifs, FP = faux positifs
# FN = faux négatifs, TN = vrais négatifs
# Précision = TP / (TP + FP)
# Question : parmi les positifs prédits, combien sont vrais ?
# À maximiser quand les faux positifs sont coûteux
# Ex : détection de spam (envoyer un vrai email en spam = grave)
# Rappel = TP / (TP + FN)
# Question : parmi les vrais positifs, combien sont détectés ?
# À maximiser quand les faux négatifs sont coûteux
# Ex : détection de cancer (manquer un vrai cancer = grave)
# F1 = 2 * (Précision * Rappel) / (Précision + Rappel)
# Compromis entre précision et rappelComment choisissez-vous entre un Random Forest et un XGBoost ? Et entre l un et une régression logistique ?
| Algorithme | Forces | Faiblesses | Quand l utiliser |
|---|---|---|---|
| Régression Logistique | Interprétable, rapide, base probabiliste | Linéaire, peu performant sur données complexes | Baseline, features peu corrélées, besoin d explication |
| Random Forest | Robuste, peu de tuning, OOB error | Lent sur gros volumes, peu interprétable | Données tabulaires, baseline solide |
| XGBoost / LightGBM | Performances maximales, gère les nulls | Surapprentissage facile, tuning complexe | Compétitions, production, gros volumes |
| Réseaux de neurones | Images, texte, séries temporelles | Données, compute, boîte noire | Données non structurées, gros volumes |
Qu est-ce que le data leakage dans l évaluation d un modèle ? Comment l évitez-vous ?
from sklearn.model_selection import cross_val_score, StratifiedKFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
# Pipeline : garantit que le prétraitement est fait
# séparément sur chaque fold (pas de leakage)
pipeline = Pipeline([
('scaler', StandardScaler()),
('model', LogisticRegression())
])
# Stratified K-Fold : respecte la proportion de classes
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(pipeline, X, y, cv=cv, scoring='roc_auc')
print(f'AUC: {scores.mean():.3f} (+/- {scores.std():.3f})')
# Learning curve : détecter l overfitting
from sklearn.model_selection import learning_curve
train_sizes, train_scores, val_scores = learning_curve(
pipeline, X, y, cv=cv, scoring='roc_auc'
)Pourquoi les cas métiers sont-ils plus discriminants que les questions algorithmiques ?
Quelles questions posez-vous pour évaluer la capacité de déploiement ?
| Compétence | Junior DS | Confirmé DS | Senior DS |
|---|---|---|---|
| Statistiques | Precision/Recall, bases proba | Tests stat, AUC-ROC, classes déséquilibrées | Statistiques bayésiennes, tests A/B rigoureux |
| ML algorithmique | sklearn, RandomForest, régression | XGBoost tuning, feature engineering, SHAP | Algorithmes avancés, NLP/CV, deep learning |
| Évaluation | Train/test split, accuracy | CV stratifiée, métriques adaptées, leakage | Learning curves, production monitoring |
| Production | Notion de déploiement | FastAPI + Docker + MLflow | MLOps complet, CI/CD ML, monitoring drift |
| Communication | Explique son modèle | Présente les résultats aux métiers | Cadre et priorise les projets data science |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.