XGBoost et Random Forest sont les algorithmes les plus utilisés en data science tabulaire. En entretien, on va au-delà de l usage basique : hyperparamètres, diagnostics, SHAP.
Quelle est la différence entre le bagging et le boosting ? Pourquoi Random Forest est-il robuste à l overfitting ?
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
rf = RandomForestClassifier(
n_estimators=200, # nombre d arbres (plus = mieux, mais rendements décroissants)
max_features='sqrt', # features aléatoires par split (clé du RF)
max_depth=None, # arbres profonds par défaut
min_samples_leaf=1, # régularisation : augmenter si overfitting
oob_score=True, # Out-Of-Bag : estimation gratuite de la généralisation
n_jobs=-1, # utiliser tous les coeurs
random_state=42
)
rf.fit(X_train, y_train)
print(f'OOB score: {rf.oob_score_:.3f}') # pas besoin de CV séparée
# Cross-validation
scores = cross_val_score(rf, X, y, cv=5, scoring='roc_auc')
print(f'CV AUC: {scores.mean():.3f}')Comment XGBoost améliore-t-il le gradient boosting classique ?
import xgboost as xgb
from sklearn.model_selection import RandomizedSearchCV
# Configuration typique de production
model = xgb.XGBClassifier(
n_estimators=500,
learning_rate=0.05, # faible = moins d overfitting, besoin de plus d arbres
max_depth=6, # profondeur (3-8 typique)
subsample=0.8, # fraction des lignes par arbre
colsample_bytree=0.8, # fraction des features par arbre
reg_alpha=0.1, # L1 regularization
reg_lambda=1.0, # L2 regularization
early_stopping_rounds=50, # stop si pas d amélioration
eval_metric='auc',
random_state=42
)
# Early stopping : éviter l overfitting automatiquement
model.fit(
X_train, y_train,
eval_set=[(X_val, y_val)],
verbose=100
)Quels hyperparamètres ajustez-vous en priorité pour un XGBoost ? Dans quel ordre ?
| Hyperparamètre | Impact | Direction si overfitting |
|---|---|---|
| n_estimators + learning_rate | Critique | Baisser LR, augmenter n_estimators + early stopping |
| max_depth | Fort | Réduire (3-5 au lieu de 6-8) |
| subsample | Modéré | Réduire à 0.6-0.8 |
| colsample_bytree | Modéré | Réduire à 0.6-0.8 |
| min_child_weight | Modéré | Augmenter |
| reg_alpha / reg_lambda | Variable | Augmenter |
Ordre recommandé : 1. Fixer n_estimators avec early stopping. 2. Tuner max_depth + min_child_weight. 3. Tuner subsample + colsample_bytree. 4. Affiner LR.
Pourquoi préférez-vous SHAP aux feature importances natives de scikit-learn ?
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
# Feature importance globale
shap.summary_plot(shap_values, X_test, max_display=15)
# Explication individuelle
shap.waterfall_plot(shap.Explanation(
values=shap_values[0],
base_values=explainer.expected_value,
data=X_test.iloc[0],
feature_names=X_test.columns.tolist()
))
# Interaction entre features
shap.dependence_plot('age', shap_values, X_test,
interaction_index='nb_achats')Comment détectez-vous l overfitting ? Quels outils utilisez-vous ?
from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt
train_sizes, train_scores, val_scores = learning_curve(
model, X, y,
cv=5, scoring='roc_auc',
train_sizes=np.linspace(0.1, 1.0, 10),
n_jobs=-1
)
# Overfitting : train score >> val score
# Underfitting : les deux scores sont bas
# Bonne fit : train et val convergent
plt.plot(train_sizes, train_scores.mean(axis=1), label='Train')
plt.plot(train_sizes, val_scores.mean(axis=1), label='Validation')
plt.xlabel('Taille du training set')
plt.ylabel('AUC')
plt.legend()Dans quel cas préférez-vous LightGBM à XGBoost ?
| XGBoost | LightGBM | |
|---|---|---|
| Vitesse | Modérée | 2-10x plus rapide |
| Mémoire | Élevée | Réduite (histogrammes) |
| Catégorielles | Besoin d encoding | Support natif |
| Gros volumes | Lent | Excellent |
| Petits datasets | Bon | Peut overfitter plus facilement |
| Niveau | Maitrise | Signal GO | NO-GO |
|---|---|---|---|
| Junior | sklearn RandomForest, XGBoost basique, train/test split | Sait entraîner un RF et un XGBoost, connaît l OOB score | Utilise l accuracy sans vérifier l équilibre des classes |
| Confirmé | Hyperparamètres XGBoost, early stopping, SHAP | Utilise early stopping, tuning avec RandomizedSearchCV, SHAP pour l explication | Ne sait pas ce qu est l early stopping |
| Senior | Learning curves, LightGBM, SHAP interactions, production | Diagnostique l overfitting avec learning curves, compare XGBoost vs LightGBM | Ne sait pas expliquer la différence entre bagging et boosting |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.