Ответ
В зависимости от задачи, данных и требований к интерпретируемости я применял широкий спектр моделей:
Для задач классификации:
- Логистическая регрессия: Мой выбор для базового решения, пилотных проектов или когда критически важна интерпретируемость коэффициентов. Использую с L1/L2 регуляризацией.
- Случайный лес (Random Forest): Отлично работает «из коробки» на табличных данных со смешанными типами признаков, устойчив к выбросам и переобучению. Часто использую для получения baseline и анализа важности признаков (
feature_importances_). - Градиентный бустинг (XGBoost, LightGBM, CatBoost): Это мои основные инструменты для соревнований и production-задач, где важна максимальная точность. LightGBM — для скорости на больших данных, CatBoost — для работы с категориальными признаками без предобработки.
Для задач регрессии:
- Линейная регрессия / Ridge / Lasso: Основные модели, когда ожидается линейная зависимость или нужен простой, интерпретируемый прогноз. Lasso полезен для отбора признаков.
- Градиентный бустинг для регрессии: Аналогично классификации, XGBoost Regressor часто показывает наилучшие результаты на нетривиальных зависимостях.
Пример пайплайна сравнения моделей для классификации:
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from xgboost import XGBClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
models = {
"Logistic Regression": LogisticRegression(max_iter=1000, C=0.1),
"Random Forest": RandomForestClassifier(n_estimators=100, random_state=42),
"XGBoost": XGBClassifier(n_estimators=100, use_label_encoder=False, eval_metric='logloss')
}
for name, model in models.items():
scores = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc')
print(f"{name}: Средний ROC-AUC = {np.mean(scores):.4f} (+/- {np.std(scores):.4f})")
Выбор всегда обосновывается через кросс-валидацию и метрики бизнес-задачи (AUC-ROC, F1, MAE).