AccueilBlogTest technique XGBoost et Random Forest : entretien Data Scientist
Guide recrutement data

Test technique XGBoost et Random Forest : entretien Data Scientist

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.

Data Builder·Juin 2025·7 min de lecture·Data Scientist
Sommaire
  1. Random Forest en profondeur
  2. XGBoost et gradient boosting
  3. Hyperparamètres critiques
  4. Feature importance et SHAP
  5. Overfitting et régularisation
  6. LightGBM vs XGBoost
  7. Grille

1Random Forest : comment ça marche vraiment

Question discriminante

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}')

2XGBoost : gradient boosting avancé

Question discriminante

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 )

3Hyperparamètres critiques : lequel toucher en premier

Question discriminante

Quels hyperparamètres ajustez-vous en priorité pour un XGBoost ? Dans quel ordre ?

HyperparamètreImpactDirection si overfitting
n_estimators + learning_rateCritiqueBaisser LR, augmenter n_estimators + early stopping
max_depthFortRéduire (3-5 au lieu de 6-8)
subsampleModéréRéduire à 0.6-0.8
colsample_bytreeModéréRéduire à 0.6-0.8
min_child_weightModéréAugmenter
reg_alpha / reg_lambdaVariableAugmenter

Ordre recommandé : 1. Fixer n_estimators avec early stopping. 2. Tuner max_depth + min_child_weight. 3. Tuner subsample + colsample_bytree. 4. Affiner LR.

4Feature importance : feature_importances_ vs SHAP

Question discriminante

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')

5Diagnostiquer et corriger l overfitting

Question discriminante

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()

6LightGBM vs XGBoost : quand choisir

Question discriminante

Dans quel cas préférez-vous LightGBM à XGBoost ?

XGBoostLightGBM
VitesseModérée2-10x plus rapide
MémoireÉlevéeRéduite (histogrammes)
CatégoriellesBesoin d encodingSupport natif
Gros volumesLentExcellent
Petits datasetsBonPeut overfitter plus facilement

7Grille par niveau

NiveauMaitriseSignal GONO-GO
Juniorsklearn RandomForest, XGBoost basique, train/test splitSait entraîner un RF et un XGBoost, connaît l OOB scoreUtilise l accuracy sans vérifier l équilibre des classes
ConfirméHyperparamètres XGBoost, early stopping, SHAPUtilise early stopping, tuning avec RandomizedSearchCV, SHAP pour l explicationNe sait pas ce qu est l early stopping
SeniorLearning curves, LightGBM, SHAP interactions, productionDiagnostique l overfitting avec learning curves, compare XGBoost vs LightGBMNe sait pas expliquer la différence entre bagging et boosting

Vous recrutez un Data Scientist ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.