Классическая ML на собеседовании Data Scientist
Зачем классику спрашивают на собесе DS
90% production-моделей DS — это не нейросети, а классическая ML: линейные модели, деревья, градиентный бустинг (XGBoost / LightGBM / CatBoost). На бизнес-данных табличного формата они почти всегда выигрывают у deep learning.
На собесе Data Scientist классическую ML спрашивают в двух режимах: как понимаешь основы (junior) и как выбираешь модель под задачу (senior). Без классики не пройти ни одну DS-вакансию.
Линейные модели
Линейная регрессия: y = β₀ + β₁x₁ + ... + βₙxₙ + ε. Минимизирует MSE. Обучение — нормальные уравнения или градиентный спуск.
Логистическая регрессия: для бинарной классификации. Линейная комбинация → сигмоида → вероятность. Минимизирует log-loss.
Когда использовать:
- baseline на любой задаче
- скоринг (важна интерпретируемость, регулятор требует объяснимости)
- маленькие данные (linear почти не overfit)
Когда не подходят:
- сильные нелинейности (без feature engineering)
- большие категориальные фичи без encoding
- сложные взаимодействия признаков
Подробнее — регуляризация L1/L2 на собесе DS.
Деревья решений
Дерево решений делит пространство признаков на области с похожим target. Жадно выбирает split, минимизирующий impurity (Gini / Entropy для классификации, MSE для регрессии).
Плюсы:
- интерпретируемое (можно нарисовать)
- не нуждается в нормализации
- работает с категориальными признаками
Минусы:
- легко overfit (особенно без max_depth)
- нестабильное (маленькое изменение в данных → другое дерево)
- слабый baseline сам по себе
Подробнее — bagging vs boosting на собесе DS.
Random Forest
Bagging деревьев: каждое обучается на random sample (bootstrap) + random subset фичей на каждом split.
Что снижает: variance (за счёт усреднения). Bias почти не меняется vs одного дерева.
Гиперпараметры, которые могут спросить:
n_estimators(число деревьев): 100-500 типичноmax_depth: ограничивает глубинуmin_samples_leaf: минимум объектов в листеmax_features:sqrt(n_features)для классификации,n_features/3для регрессии
Feature importance: среднее decrease impurity по всем split на каждом дереве. Robust, но biased в сторону continuous и high-cardinality фичей.
Gradient Boosting
Главный рабочий конь production DS. Каждое следующее дерево исправляет ошибки предыдущего:
F_m(x) = F_{m-1}(x) + η * h_m(x)где h_m обучается на residuals (для регрессии) или градиенте loss (общий случай).
Что снижает: bias (за счёт итеративного добавления слабых моделей).
XGBoost vs LightGBM vs CatBoost:
| Speed | Сategoricals | Memory | Особенности | |
|---|---|---|---|---|
| XGBoost | Medium | One-hot | Medium | Industry standard |
| LightGBM | Fast | Native | Low | Histogram-based, быстрый |
| CatBoost | Medium | Native (best) | Medium | Symmetric trees, ordered boosting |
Когда какой: CatBoost для категориальных-heavy данных. LightGBM для скорости. XGBoost для портабельности.
Подробнее — gradient boosting и XGBoost, boosting pitfalls.
Интерпретация моделей
На собесе ждут не «модель работает», а «понимаю, почему работает».
SHAP values: game-theoretic feature attribution. Для каждого предсказания показывает, сколько каждая фича добавила к итоговому скору. Стандарт для скоринга и регулятора.
Permutation importance: случайно перемешиваем значения фичи → смотрим падение метрики. Если падение большое — фича важна.
Partial Dependence Plot (PDP): среднее предсказание модели при фиксированной фиче и усреднении остальных. Показывает marginal effect.
ICE plot: PDP, но отдельной кривой для каждого объекта. Показывает, насколько marginal effect стабилен.
Типичные вопросы
«Какую модель выберешь для классификации фрода?»
Шаги: имбаланс (fraud rate 0.1%-1%) → CatBoost / LightGBM с class_weight. Метрика — PR-AUC (не ROC-AUC, на имбалансе врёт). Порог — по precision-recall trade-off бизнеса.
«Почему CatBoost обычно лучше XGBoost?»
Native обработка категориальных через ordered target encoding. Меньше overfit на noisy фичах. Symmetric trees ускоряют inference.
«Что происходит с linear regression на 1M фичей и 1k объектах?»
Сильный overfit. Решение: L1 регуляризация (Lasso) для feature selection, или просто меньше фичей. Логистическая регрессия с L2 — то же самое, но для классификации.
«Bagging vs boosting — когда что?»
Bagging (random forest) — снижает variance, parallel training, robust baseline. Boosting (XGBoost) — снижает bias, sequential training, обычно лучше на бизнес-задачах при правильном tuning.
Частые ошибки
- «Возьму нейронку». Для табличных данных классика почти всегда лучше. Объясни trade-off, прежде чем тянуть deep learning
- Игнор feature engineering. «Просто закину фичи в CatBoost» — junior. Senior строит фичи под задачу
- Без интерпретации. ROC-AUC 0.85 без SHAP — для скоринга мало
- Не учесть imbalance. Accuracy на 99% fraud = 99% — модель просто угадывает большинство
- Default-параметры.
XGBClassifier()без tuning — оставляет производительность на столе
FAQ
Сколько алгоритмов нужно знать наизусть?
Глубоко: linear / logistic regression, decision trees, random forest, XGBoost / LightGBM / CatBoost. На senior — добавь SVM, KNN, Naive Bayes на уровне «когда используют».
Нужно ли уметь выводить gradient descent?
Junior — нет, понимание интуиции достаточно. Senior — вывод gradient descent и логистической регрессии желателен.
CatBoost от Яндекса — это плюс для собеса там?
Знание CatBoost глубже среднего — да, ценится. Но не «только CatBoost», основа должна быть универсальной.
Linear regression vs logistic regression — основная разница?
Linear — predicts continuous target. Logistic — predicts probability of class через sigmoid поверх линейной комбинации.
Когда XGBoost проигрывает классике?
На очень маленьких выборках (< 1k объектов) логрег с L2 часто стабильнее. На очень больших разреженных данных (текст) — линейные модели с TF-IDF.