Как выбиралась модель в вашем рабочем ML-проекте?

«Как выбиралась модель в вашем рабочем ML-проекте?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моём последнем проекте по прогнозированию оттока клиентов (бинарная классификация) выбор модели проходил в несколько этапов.

Контекст: Данные — табличные, около 100k строк и 50 признаков (микс числовых и категориальных). Требовалась умеренная интерпретируемость.

Процесс выбора:

  1. Бейзлайн: Начал с LogisticRegression и DecisionTreeClassifier, чтобы понять сложность задачи. F1-score был около 0.65.
  2. Ансамбли: Перешёл к RandomForestClassifier и GradientBoostingClassifier (XGBoost). Они показали значительный прирост (F1 ~ 0.82). Gradient Boosting был немного лучше.
  3. Сравнение и тонкая настройка: Сравнил несколько бустинговых фреймворков, используя кросс-валидацию по стратегированной разбивке (по времени).
import xgboost as xgb
from lightgbm import LGBMClassifier
from sklearn.metrics import classification_report

# После предобработки и feature engineering
models_to_tune = {
    'XGBoost': xgb.XGBClassifier(objective='binary:logistic', n_estimators=200),
    'LightGBM': LGBMClassifier(n_estimators=200, verbose=-1)
}

for name, model in models_to_tune.items():
    model.fit(X_train, y_train,
              eval_set=[(X_val, y_val)],
              early_stopping_rounds=20,
              verbose=False)
    y_pred = model.predict(X_val)
    print(f'n--- {name} ---')
    print(classification_report(y_val, y_pred))
  1. Критерии выбора:
    • Метрика: Основной была F1-score (важен баланс precision/recall).
    • Скорость: LightGBM обучался и предсказывал в ~1.5 раза быстрее XGBoost на наших данных.
    • Интерпретируемость: Использовал SHAP для объяснения предсказаний LightGBM, что удовлетворило бизнес-требования.

Итог: Выбрал LightGBM из-за лучшего баланса скорости, точности и возможности интерпретации. После GridSearch для гиперпараметров модель вышла в A/B-тест.