Перейти к содержанию
Данные и AI

12 вопросов по теме «Классический ML и ансамбли» на собеседовании

В этом материале — 12 вопросов из русской колоды RecallDeck по теме «Классический ML и ансамбли». Сначала сформулируйте короткий ответ сами, затем откройте подробный разбор и проверьте примеры, ограничения и отказные случаи.

10 мин чтения12 подробных ответовПроверено 24 августа 2026
Главная мысль

Сначала зафиксируйте grain данных, допущения, метрику и риск leakage, затем обсуждайте модель, инструмент или инфраструктуру.

Вопросы и ответы

12 подробных ответов

01

Выведите аналитическое решение линейной регрессии (МНК). Когда оно неприменимо?

Короткий ответ: Минимизируем сумму квадратов ошибок ||y − Xw||²: приравниваем градиент по w к нулю и получаем нормальное уравнение XᵀXw = Xᵀy, откуда w = (XᵀX)⁻¹Xᵀy. Решение ломается, когда XᵀX вырождена — при мультиколлинеарности или p > n.

Подробно:

L(w) = ||y − Xw||² = (y − Xw)ᵀ(y − Xw)
∇w L = −2Xᵀ(y − Xw) = 0
XᵀXw = Xᵀy              ← нормальное уравнение
w* = (XᵀX)⁻¹Xᵀy
  1. Когда обратной матрицы нет — XᵀX вырождена, если фичи линейно зависимы (мультиколлинеарность) или признаков больше, чем наблюдений (p > n): решений бесконечно много.
  2. Ridge как лечение — штраф λ||w||² даёт w = (XᵀX + λI)⁻¹Xᵀy; матрица XᵀX + λI положительно определена и обратима при любом λ > 0.
  3. Градиентный спуск — при большом p обращение стоит O(p³); итеративная оптимизация дешевле и вообще не требует обратимости.

⚠️ Частая ошибка: написать формулу и не суметь ответить, когда обращение падает. Вопрос почти всегда задают ради этого продолжения.

02

Как устроена логистическая регрессия и почему её не обучают через MSE?

Короткий ответ: Линейный скор пропускается через сигмоиду: p = σ(wᵀx) — получаем вероятность класса. Обучаем максимизацией правдоподобия Бернулли, что эквивалентно минимизации log-loss — выпуклой функции. MSE поверх сигмоиды невыпукла и даёт затухающие градиенты на уверенно-неправильных ответах.

Подробно:

  1. Модель — p(y=1|x) = σ(wᵀx), где σ(z) = 1/(1+e⁻ᶻ); граница решения при этом линейна в пространстве фич.
  2. Лосс из правдоподобия — правдоподобие Бернулли ∏ pʸ(1−p)¹⁻ʸ; минус логарифм даёт log-loss −[y·log p + (1−y)·log(1−p)] — выпуклый по w, единственный минимум.
  3. Почему не MSE — (σ(wᵀx) − y)² невыпукла по w, а её градиент содержит множитель σ′(z), близкий к нулю при большом |wᵀx|: на уверенно-неправильном ответе обучение почти останавливается.
log-loss: ∇ = (p − y)·x         ← не затухает
MSE:      ∇ = (p − y)·σ′(z)·x   ← σ′ ≈ 0 на уверенных ошибках
  1. Бонус — выход интерпретируется как (примерно) калиброванная вероятность, чего нет у SVM или дерева из коробки.

⚠️ Частая ошибка: «это регрессия, она предсказывает непрерывный таргет». Это линейный классификатор; «регрессия» здесь — про регрессию логита.

03

Как решающее дерево выбирает сплиты и почему глубокие деревья переобучаются?

Короткий ответ: Жадно: в каждом узле перебираются фичи и пороги, выбирается сплит с максимальным снижением impurity (Джини или энтропия; для регрессии — MSE). Без ограничения глубины дерево доводит листья до чистоты — то есть запоминает трейн вместе с шумом.

Подробно:

  1. Критерий сплита — прирост: impurity(родителя) − взвешенная impurity(детей); Джини G = 1 − Σpₖ², энтропия −Σpₖ·log pₖ — на практике почти взаимозаменяемы.
  2. Жадность — каждый узел оптимизируется отдельно; глобально оптимальное дерево — NP-полная задача, поэтому неудачный верхний сплит никогда не пересматривается.
  3. Почему переобучение — модель кусочно-константная: при неограниченной глубине каждый лист ужимается до одного объекта → нулевая ошибка на трейне, высокая дисперсия на тесте.
Ограничение Что делает
max_depth режет число уровней
min_samples_leaf не даёт листу ужаться до 1 объекта
ccp_alpha (прунинг) срезает узлы, не окупающие сложность
Ансамбли RF/бустинг превращают слабость дерева в силу

⚠️ Частая ошибка: считать, что дерево находит «лучшее разбиение» глобально — оно жадное, и это принципиальное ограничение, а не деталь реализации.

04

В чём принципиальная разница между бэггингом и бустингом?

Короткий ответ: Бэггинг обучает независимые модели на бутстрап-выборках и усредняет — это снижает дисперсию (variance). Бустинг строит модели последовательно, каждая исправляет ошибки текущего ансамбля — это снижает смещение (bias).

Подробно:

Бэггинг (RF) Бустинг (GBM)
Обучение параллельно, независимо строго последовательно
Данные бутстрап-выборки вся выборка; фитим остатки/ошибки
Снижает дисперсию смещение
Базовая модель глубокие деревья (low bias, high variance) неглубокие (high bias, low variance)
Переобучение плато с ростом числа деревьев растёт; нужен early stopping
  1. Почему деревья разной глубины — бэггингу нужны разнообразные сильные модели: их дисперсию уберёт усреднение. Бустингу нужны слабые: смещение он уберёт сам, а лишняя ёмкость шага — прямой путь к переобучению.
  2. Следствие для практики — RF почти нечувствителен к числу деревьев; в бустинге n_estimators и learning rate — главные ручки.

⚠️ Частая ошибка: «бустинг — это бэггинг с весами». Ключ — последовательная зависимость: каждая модель видит ошибки предыдущих, а не независимую выборку.

05

Случайный лес или градиентный бустинг: что выберете и почему?

Короткий ответ: Бустинг — выше потолок качества на табличных данных, дефолтный выбор в соревнованиях и проде. Случайный лес — когда нужна робастность: он малочувствителен к гиперпараметрам и шумным таргетам, тривиально параллелится, и его тяжело переобучить.

Подробно:

Критерий Случайный лес Градиентный бустинг
Потолок качества ниже выше (SOTA на табличке)
Тюнинг почти не нужен LR, глубина, n_trees, регуляризация
Шумные таргеты устойчив: усреднение подгоняется под шум в остатках
Параллелизм по деревьям только внутри дерева
Переобучение выходит на плато требует early stopping
  1. Зачем RF подмешивает фичи (max_features) — без этого все деревья выбирали бы одни и те же сильные сплиты и были бы скоррелированы, а усреднение коррелированных моделей почти не снижает дисперсию. Подвыборка фич декоррелирует деревья — только поэтому усреднение работает.
  2. Практика — быстрый бейзлайн, шумные метки, мало времени → RF; выжать максимум на чистой табличке → CatBoost/LightGBM/XGBoost с тюнингом.

⚠️ Частая ошибка: «бустинг всегда лучше». На маленьких шумных выборках лес с дефолтами нередко обходит недотюненный бустинг.

06

Уберите первое дерево из случайного леса на 1000 деревьев и из бустинга на 1000 деревьев. Что изменится?

Короткий ответ: В лесу — почти ничего: деревья независимы, предсказание — среднее, потеря одного слагаемого сдвинет его на ~1/1000. В бустинге предсказания сломаются: каждое следующее дерево обучалось на остатках, в которые входил вклад первого, и без него вся сумма систематически смещена.

Подробно:

RF:   ŷ = (t₁ + t₂ + … + t₁₀₀₀)/1000
      убрали t₁ → сдвиг порядка вклада одного дерева

GBM:  F = f₁ + ν·f₂ + … + ν·f₁₀₀₀
      f₂ фитит y − f₁;  f₃ фитит y − f₁ − ν·f₂; …
      убрали f₁ → остальные корректируют несуществующую базу
  1. Лес — деревья обучены независимо на своих бутстрап-выборках; ансамбль — простое среднее, симметричное к любому дереву: неважно, первое оно или пятисотое.
  2. Бустинг — аддитивная модель с последовательной зависимостью; первое дерево несёт самый крупный вклад (грубое приближение таргета), дальнейшие лишь докручивают остатки. Убрать f₁ — значит сдвинуть все предсказания примерно на его вклад.
  3. Что слушает интервьюер — независимость деревьев в бэггинге против последовательной зависимости в бустинге; это вопрос про bias/variance, заданный «в лоб».

⚠️ Частая ошибка: «в обоих случаях минус одно дерево из тысячи — ничего страшного», не заметив последовательную структуру бустинга.

07

Где именно «градиент» в градиентном бустинге?

Короткий ответ: Это градиентный спуск в пространстве функций: на каждом шаге новое дерево аппроксимирует антиградиент лосса по текущим предсказаниям ансамбля (псевдоостатки), и ансамбль делает шаг F ← F + ν·h. «Дерево обучается на остатках» — точно лишь для MSE.

Подробно:

rᵢ = −∂L(yᵢ, F(xᵢ))/∂F(xᵢ)       ← псевдоостатки
hₘ ≈ argmin Σ (rᵢ − h(xᵢ))²      ← дерево фитит rᵢ
Fₘ = Fₘ₋₁ + ν·hₘ                 ← шаг спуска с LR ν

MSE:      L = ½(y−F)²  →  r = y − F   (обычный остаток)
Log-loss: r = y − p,   p = σ(F)       (ошибка вероятности)
  1. Функциональное пространство — «параметры», по которым спускаемся, — значения F(xᵢ) на объектах: антиградиент говорит, куда сдвинуть предсказание каждого объекта, а дерево обобщает эти сдвиги на новые точки.
  2. Почему это обобщение — подставив любой дифференцируемый лосс (quantile, Poisson, ranking), получаем бустинг под задачу; так устроен objective в XGBoost/LightGBM/CatBoost.
  3. Learning rate — ν и есть длина шага спуска; меньше шаг + больше деревьев = стабильнее.

⚠️ Частая ошибка: «бустинг фитит остатки» как полный ответ. Это частный случай MSE; интервьюер ждёт слов «антиградиент лосса по предсказаниям».

08

CatBoost, XGBoost, LightGBM — в чём ключевые отличия?

Короткий ответ: XGBoost — приближение второго порядка (градиент + гессиан) и явная регуляризация в objective. LightGBM — гистограммы и рост дерева по листьям (leaf-wise): самый быстрый, но легче переобучается. CatBoost — ordered boosting и упорядоченные target statistics для категорий: борется с ликом таргета, сильные дефолты.

Подробно:

XGBoost LightGBM CatBoost
Рост дерева level-wise leaf-wise симметричные (oblivious)
Категории нужен энкодинг встроенно, попроще ordered target statistics
Фишка 2-й порядок, регуляризация скорость, память ordered boosting, дефолты
Риск медленнее LightGBM переобучение на малых данных дольше учится
  1. Симметричные деревья CatBoost — на каждом уровне один и тот же сплит во всех узлах: дерево = таблица на 2^depth листьев, очень быстрый инференс и встроенная регуляризация.
  2. Leaf-wise у LightGBM — растит лист с максимальным приростом: быстрее сходится, но на малых выборках выращивает глубокие несбалансированные ветки.
  3. CIS-контекст — CatBoost — продукт Яндекса; на собеседованиях в Яндекс и его экосистему вопрос про отличия CatBoost почти гарантирован.

⚠️ Частая ошибка: «они одинаковые, разница в скорости». Различия алгоритмические: обработка категорий и защита от лика в CatBoost — отдельная идея, а не оптимизация.

09

Что такое ordered boosting в CatBoost и какую проблему он решает?

Короткий ответ: Проблему prediction shift — разновидность лика таргета: в классическом бустинге остаток объекта считается моделью, обученной в том числе на нём самом, а target statistics категорий включают его собственный таргет. CatBoost вводит случайную перестановку и для каждого объекта использует статистики и модели, обученные только на «предыдущих» объектах.

Подробно:

  1. Лик в target encoding — заменяя категорию средним таргета по всей выборке, мы записываем в фичу ответ самого объекта; на редких категориях фича почти равна таргету → блестящий трейн, провал на тесте.
  2. Ordered target statistics — статистика категории для объекта i считается только по объектам до i в случайной перестановке (плюс prior): свой таргет в свою фичу не утекает.
  3. Prediction shift в остатках — та же болезнь у псевдоостатков: остаток, посчитанный моделью, которая видела объект, систематически смещён. Ordered boosting держит набор моделей: остаток объекта i выдаёт модель, обученная на префиксе перестановки до i.
  4. Цена — дополнительные вычисления и память; на практике CatBoost усредняет по нескольким перестановкам.
перестановка:  x₃  x₇  x₁  x₅ …
stats и остаток для x₅ ← считаются только по {x₃, x₇, x₁}

⚠️ Частая ошибка: делать target encoding по всей выборке «руками» и удивляться разрыву train/test — это ровно тот лик, который CatBoost чинит из коробки.

10

Как работает k-means, как выбрать k и когда алгоритм ломается?

Короткий ответ: Алгоритм Ллойда: назначаем точки ближайшему центроиду, пересчитываем центроиды как средние, повторяем до сходимости — минимизируется внутрикластерная сумма квадратов (inertia). k выбирают по elbow, silhouette или из бизнес-логики. Ломается на несферических кластерах, разных плотностях и немасштабированных фичах.

Подробно:

for _ in range(max_iter):
    labels = closest_centroid(X, C)        # шаг назначения
    C = np.array([X[labels == j].mean(0)   # шаг обновления
                  for j in range(k)])
  1. Что оптимизируем — Σ‖xᵢ − c(xᵢ)‖²; каждый шаг не увеличивает лосс → сходимость гарантирована, но только к локальному минимуму.
  2. Выбор k — elbow (перегиб inertia), silhouette (компактность против отделимости); часто k диктует задача — столько сегментов, сколько бизнес способен обслужить.
  3. Провалы — вытянутые/кольцевые кластеры (k-means рисует диаграмму Вороного из «сфер»), разные размеры и плотности, чувствительность к инициализации (лечится k-means++) и к масштабу фич.
  4. Альтернативы — DBSCAN для произвольных форм, GMM для эллиптических кластеров и мягких принадлежностей.

⚠️ Частая ошибка: запускать на немасштабированных данных — фича с самой большой дисперсией приватизирует метрику расстояния.

11

Объясните PCA: чем являются главные компоненты математически?

Короткий ответ: Главные компоненты — собственные векторы ковариационной матрицы центрированных данных (эквивалентно — правые сингулярные векторы X из SVD), упорядоченные по убыванию собственных значений, то есть объяснённой дисперсии. Это ортогональные направления, вдоль которых данные варьируются сильнее всего.

Подробно:

центрируем X  →  C = XᵀX/(n−1)
C·vᵢ = λᵢ·vᵢ        ← vᵢ — компонента, λᵢ — её дисперсия
проекция: Z = X·V_k  (первые k собственных векторов)
  1. Оптимизационный взгляд — первая компонента максимизирует дисперсию проекции; каждая следующая делает то же при ортогональности предыдущим. Эквивалентная формулировка: PCA минимизирует ошибку реконструкции.
  2. На практике — SVD — численно устойчивее, чем явное построение ковариационной матрицы; именно так реализован sklearn.
  3. Предобработка обязательна — без центрирования первая компонента поймает среднее; без масштабирования — фичу с самой большой дисперсией.
  4. PCA не смотрит на таргет — метод unsupervised: максимум дисперсии ≠ максимум предсказательной силы, сигнал может жить в младших компонентах.

⚠️ Частая ошибка: ответ «это снижение размерности» без механизма. Интервьюер ждёт слова: собственные векторы ковариации, объяснённая дисперсия, ортогональность.

12

Можно ли бустить или бэггировать линейные модели? А kNN?

Короткий ответ: Формально да, на практике бессмысленно. Сумма линейных моделей — снова линейная модель, так что бустинг не добавит выразительности и не снизит bias. Бэггинг kNN почти не меняет kNN: это стабильный алгоритм, у него мало дисперсии, которую можно было бы срезать усреднением.

Подробно:

  1. Бустинг линейных моделей — каждый шаг добавляет wₘᵀx; итог Σwₘᵀx = (Σwₘ)ᵀx — одна линейная модель, которую можно было обучить сразу. Смещение линейного класса никуда не денется.
  2. Бэггингу нужна высокая дисперсия — усреднение снижает variance; у стабильных алгоритмов (линейные, kNN с разумным k) предсказания почти не меняются от бутстрап-выборки к выборке — усреднять нечего.
  3. Почему деревья идеальны — глубокое дерево: low bias / high variance → создано для бэггинга; неглубокое: high bias / low variance → создано для бустинга.
Базовая модель Бэггинг Бустинг
Глубокое дерево ✅ случайный лес переобучение
Неглубокое дерево мало толку ✅ GBM
Линейная мало толку остаётся линейной
kNN ≈ без изменений стабильный: не подходит

⚠️ Частая ошибка: отвечать «нельзя». Можно — вопрос проверяет, понимаете ли вы, зачем ансамбли существуют: бэггинг ест variance, бустинг ест bias.

Источники

Источники и редакционная политика

Материалы RecallDeck сопоставлены с официальной документацией и открытыми публикациями компаний, когда первичный источник доступен. Мы не связаны с упомянутыми работодателями, не публикуем конфиденциальные задания и не продаём места в подборках. Формат найма может меняться — уточняйте его у рекрутера.

От чтения к воспроизведению

Отрепетируйте полный цикл интервью.

RecallDeck возвращает сложные темы по расписанию и помогает удерживать в памяти язык, SQL, архитектуру и поведенческие истории.

Начать подготовку

Продолжить подготовку

Библиотека собеседований RecallDeck

Подробные русские ответы, разборы этапов найма и планы подготовки для российского IT-рынка.

RSS