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.
1Ce qu on évalue vraiment
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.
- Fondations stat — distributions, tests d hypothèses, intervalle de confiance
- ML supervisé — classification et régression, choix d algorithme, hyperparamètres
- Évaluation rigoureuse — métriques adaptées au problème, validation croisée, overfitting
- Déploiement — packaging, API, monitoring
2Fondations statistiques : ce qu on teste
Question discriminante
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 rappel
- Classes déséquilibrées — l accuracy est trompeuse si 95% des exemples sont négatifs. Utiliser F1, AUC-ROC, ou PR-AUC
- Seuil — ajuster le seuil de décision selon le coût métier des erreurs
3Épreuve Machine Learning
Question discriminante
Comment 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 |
4Évaluation rigoureuse des modèles
Question discriminante
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'
)
- Data leakage — fitter le scaler sur tout le dataset avant le split = le modèle voit des informations du test set
- Solution — utiliser un Pipeline sklearn qui applique le prétraitement dans chaque fold
- Temporal leakage — pour les séries temporelles, ne jamais utiliser un KFold aléatoire. Utiliser TimeSeriesSplit
5Cas métier : la partie la plus discriminante
Question discriminante
Pourquoi les cas métiers sont-ils plus discriminants que les questions algorithmiques ?
- Format — 'vous travaillez pour un e-commerce. Le taux de conversion baisse de 15% ce mois-ci. Comment analysez-vous le problème ?' Durée : 20-30 minutes
- Ce qu on évalue — structuration du problème avant de coder, choix des métriques, hypothèses formulées, cohérence de la démarche
- Signal Senior — commence par définir les métriques et les hypothèses avant d ouvrir un notebook. Pose des questions sur les données disponibles
- Signal Junior — ouvre un notebook et commence à coder sans se poser les bonnes questions
- NO-GO — utilise la précision comme seule métrique sur un problème déséquilibré sans le mentionner
6Capacité à déployer
Question discriminante
Quelles questions posez-vous pour évaluer la capacité de déploiement ?
- 'Comment packagez-vous un modèle sklearn pour la production ?' — réponse attendue : joblib/pickle + API FastAPI + Docker
- 'Comment détectez-vous que votre modèle se dégrade en production ?' — réponse attendue : monitoring des distributions d input, suivi des métriques sur les données labelisées récentes
- 'Quelle est la différence entre MLOps 0 et MLOps 2 ?' — révèle la culture d industrialisation
- Red flag — ne sait pas ce qu est un modèle en production, pense que Jupyter est suffisant pour déployer
7Grille de décision GO / NO-GO
| 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 |
- Questions de conception ML - Comment modeliseriez-vous le churn ? Commence par le probleme business, pas par l algorithme. Signal GO : decompose en sous-problemes, discute les contraintes
- Stats et probabilites - Expliquez le p-value simplement. La reponse revele si le candidat comprend vraiment ou recite une definition
- Trade-offs algorithmiques - Quand preferez-vous un modele simple (regression logistique) a un modele complexe (XGBoost) ? Signal GO : cite l interpretabilite, la maintenabilite, la regulation
- Production awareness - Comment geriez-vous le drift de modele en production ? Les profils sans experience prod ne savent pas repondre concretement
- Communication - Expliquez votre dernier projet ML a un non-technique. Les meilleurs Data Scientists translatent les resultats en impact business chiffre
1What We Actually Evaluate
A Data Scientist who cannot deploy any model to production is a cost. A Data Scientist who deploys models without understanding the underlying statistics is a risk. We evaluate both dimensions.
- Stat foundations — distributions, hypothesis testing, confidence intervals
- Supervised ML — classification and regression, algorithm selection, hyperparameters
- Rigorous evaluation — problem-adapted metrics, cross-validation, overfitting
- Deployment — packaging, API, monitoring
2Statistical Foundations: What We Test
Discriminating question
What is the difference between precision and recall? In which case do you favor one over the other?
from sklearn.metrics import classification_report, confusion_matrix
import numpy as np
# The confusion matrix
# TP = true positives, FP = false positives
# FN = false negatives, TN = true negatives
# Precision = TP / (TP + FP)
# Question: among predicted positives, how many are true?
# Maximize when false positives are costly
# Ex: spam detection (sending a real email to spam = serious)
# Recall = TP / (TP + FN)
# Question: among true positives, how many are detected?
# Maximize when false negatives are costly
# Ex: cancer detection (missing a real cancer = serious)
# F1 = 2 * (Precision * Recall) / (Precision + Recall)
# Trade-off between precision and recall
- Imbalanced classes — accuracy is misleading if 95% of examples are negative. Use F1, AUC-ROC, or PR-AUC
- Threshold — adjust the decision threshold based on the business cost of errors
3Machine Learning Test
Discriminating question
How do you choose between a Random Forest and XGBoost? And between either of those and logistic regression?
| Algorithm | Strengths | Weaknesses | When to use it |
|---|
| Logistic Regression | Interpretable, fast, probabilistic foundation | Linear, poor performance on complex data | Baseline, low-correlation features, explainability needed |
| Random Forest | Robust, minimal tuning, OOB error | Slow on large volumes, low interpretability | Tabular data, solid baseline |
| XGBoost / LightGBM | Maximum performance, handles nulls | Easy overfitting, complex tuning | Competitions, production, large volumes |
| Neural Networks | Images, text, time series | Data, compute, black box | Unstructured data, large volumes |
4Rigorous Model Evaluation
Discriminating question
What is data leakage in model evaluation? How do you avoid it?
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: ensures preprocessing is done
# separately on each fold (no leakage)
pipeline = Pipeline([
('scaler', StandardScaler()),
('model', LogisticRegression())
])
# Stratified K-Fold: preserves class proportions
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: detect overfitting
from sklearn.model_selection import learning_curve
train_sizes, train_scores, val_scores = learning_curve(
pipeline, X, y, cv=cv, scoring='roc_auc'
)
- Data leakage — fitting the scaler on the entire dataset before the split = the model sees information from the test set
- Solution — use a sklearn Pipeline that applies preprocessing within each fold
- Temporal leakage — for time series, never use a random KFold. Use TimeSeriesSplit
5Business Case: The Most Discriminating Part
Discriminating question
Why are business cases more discriminating than algorithmic questions?
- Format — 'you work for an e-commerce company. The conversion rate drops 15% this month. How do you analyze the problem?' Duration: 20-30 minutes
- What we evaluate — problem structuring before coding, metric selection, formulated hypotheses, consistency of the approach
- Senior signal — starts by defining metrics and hypotheses before opening a notebook. Asks questions about available data
- Junior signal — opens a notebook and starts coding without asking the right questions
- NO-GO — uses accuracy as the only metric on an imbalanced problem without mentioning it
6Deployment Capability
Discriminating question
What questions do you ask to assess deployment capability?
- 'How do you package a sklearn model for production?' — expected answer: joblib/pickle + FastAPI + Docker
- 'How do you detect that your model is degrading in production?' — expected answer: monitoring input distributions, tracking metrics on recently labeled data
- 'What is the difference between MLOps 0 and MLOps 2?' — reveals the industrialization culture
- Red flag — does not know what a production model is, thinks Jupyter is sufficient for deployment
7GO / NO-GO Decision Grid
| Skill | Junior DS | Mid-level DS | Senior DS |
|---|
| Statistics | Precision/Recall, probability basics | Stat tests, AUC-ROC, imbalanced classes | Bayesian statistics, rigorous A/B testing |
| Algorithmic ML | sklearn, RandomForest, regression | XGBoost tuning, feature engineering, SHAP | Advanced algorithms, NLP/CV, deep learning |
| Evaluation | Train/test split, accuracy | Stratified CV, adapted metrics, leakage | Learning curves, production monitoring |
| Production | Basic deployment knowledge | FastAPI + Docker + MLflow | Full MLOps, CI/CD ML, drift monitoring |
| Communication | Explains their model | Presents results to business stakeholders | Frames and prioritizes data science projects |
- ML design questions - How would you model churn? Start with the business problem, not the algorithm. GO signal: breaks it down into sub-problems, discusses constraints
- Stats and probabilities - Explain p-value simply. The answer reveals whether the candidate truly understands or is reciting a definition
- Algorithmic trade-offs - When do you prefer a simple model (logistic regression) over a complex one (XGBoost)? GO signal: mentions interpretability, maintainability, regulation
- Production awareness - How would you handle model drift in production? Profiles without prod experience cannot answer concretely
- Communication - Explain your last ML project to a non-technical person. The best Data Scientists translate results into quantified business impact