Знание классики - база любых собеседований на все грейды в DS!
Этот материал не рассчитан на изучение тем с нуля. Это чеклист и тренажёр, по которому стоит пройтись перед техническим интервью по классическому ML. Кратко, по делу, с акцентом на то, что действительно спрашивают.
Это вторая часть вопросов по classic ML, если вы не видели первую, то обязательно читайте (там разобрал основы мл, линейные модели, метрики классификации и регресии).
А в этой части разберем:
деревья
ансамбли
метрические модели
кластеризацию
Параллельно доступно видеоинтервью с разбором тех же вопросов — обязательно смотрите и закрепляйте материал.
В Telegram-канале — регулярный контент по ML и DL, а на Boosty — разборы реальных собеседований.
Подписывайтесь, в следующих частях будем разбирать NLP и LLM - самые востребованные области в ML.
Деревья решений
Как выглядит жадный алгоритм построения решающего дерева?
Алгоритм:
Начинаем с корня — берём весь обучающий датасет
Выбираем лучший признак и значение для сплита (критерия ветвления)
Разбиваем данные на две части по этому сплиту
Повторяем шаги для каждой части — рекурсивно строим поддеревья
Останавливаемся, если выполнен критерий остановки; тогда вершина становится листом
Критерии ветвления:
gini или entropy - классификация
mse или mae - регрессия
Критерий остановки:
достигнута максимальная глубина
в узле мало или много объектов
прирост информации от нового сплита слишком мал

Какие есть критерии сплиттинга?
Gini
Интуиция: вероятность, что случайно выбранный элемент будет неправильно классифицирован, если мы выберем класс случайно по распределению в узле.


где p_i - доля i-го класса в листе.
Особенности:
Быстро считается.
Часто используется по умолчанию (например, в DecisionTreeClassifier из sklearn).
Entropy
Интуиция: мера "неопределённости" или "хаоса" — насколько непредсказуемо распределение классов.

где p_i - доля i-го класса в листе.
На практике разница в выборе критерия редко сильно влияет на итоговую модель — важнее настройка других параметров (например, глубины, минимального количества в узле и т.д.).
В чём разница между классификацией и регрессией в деревьях?
Классификация:
предсказываем метки классов
Используем gini или энтропию
самый популярный класс по объектам в листе (мода)
Регрессия:
предсказываем числовое значение
Оптимизируем mse/mae во время сплита
Используем среднее / медиану в листе как предсказание

Какие есть плюсы и минусы решающего дерева?
Плюсы:
Хорошо работают с нелинейными зависимостями
Интерпретируемость: легко объяснить, почему модель приняла решение
Работает с категориальными и числовыми признаками
Не требует нормализации данных
Минусы:
Легко переобучается, особенно при большой глубине
Плохо работает с трендами, так как не умеют экстраполировать
Очень чувствительны к гиперпараметрам
Сможет ли дерево предсказать значение меньше нуля, если оно обучалось на положительных таргетах?
Нет, не сможет, так как в качестве предсказания в регрессии мы берем среднее/медиану из всех таргетов, попавших в лист. А если у нас не было значений меньше 0, то и среднее/медиана будут больше 0.
Почему деревья не чувствительны к масштабированию признаков?
Потому что они не используют расстояния. Сплиты происходят по порогам типа: "если x > 3, то идти влево", и не важно, в каком масштабе заданы значения — хоть в сантиметрах, хоть в метрах.
Как оценить важность признаков по дереву?
Обычно важность признака измеряется как суммарное снижение impurity (Gini или энтропии), которое произошло благодаря разбиениям по этому признаку, по всем уровням дерева.
В ансамблях деревьев (например, в Random Forest) эти значения усредняются по всем деревьям.
Как глубина влияет на дерево?
Маленькая глубина → недообучение (underfitting): модель слишком простая, плохо захватывает зависимости.
Слишком большая глубина → переобучение (overfitting): модель подстраивается под шум в данных, плохо обобщает. Крайний случай, например, когда дерево поместила каждый объект обучающей выборки в отдельный лист, в таком случае у нас идеальные метрики на трейне и очень плохие на тесте.
Обычно глубина дерева — один из основных гиперпараметров для настройки


Как можно регуляризировать решающее дерево?
Ограничить максимальную глубину дерева (max_depth)
Задать минимальное количество объектов в узле (min_samples_split, min_samples_leaf)
Ограничить максимальное число признаков для выбора сплита (max_features)
Использовать pruning (обрезку лишних веток после обучения)
max_leaf_nodes — ограничивает общее число листьев в дереве
min_impurity_decrease - минимальный прирост критерия сплита
Ансамбли
Что такое бэггинг?
Бэггинг (Bagging) — это метод ансамблирования, в котором используется несколько одинаковых моделей, обученных на разных случайных подмножествах обучающих данных. Модели обучаются параллельно, а затем их прогнозы усредняются (для регрессии) или берётся мода (для классификации), чтобы получить итоговое решение.
Что такое случайные лес? Где там случайность?
Случайный лес (Random Forest) — это ансамбль решающих деревьев, построенных на случайных подмножествах данных и признаков. Случайность здесь проявляется как в процессе бутстрэппинга (создание случайных подмножеств данных), так и в случайном выборе подмножества признаков на каждом сплите дерева.
Что такое бустинг?
Бустинг — это метод ансамблирования, в котором модели обучаются последовательно. Каждая последующая модель пытается исправить ошибки предыдущих. Например, слабые модели (например, слабые деревья) обучаются на ошибках предыдущих моделей, усиливая их предсказания на тяжёлых объектах.
Почему нельзя в качестве базовых алгоритмов использовать линейные модели, например?
Потому что будет линейная комбинация линейных моделей - это бессмысленно, будет просто та же самая линейная комбинация.
Почему градиентный бустинг называется градиентным? Где там градиент?
Когда мы говорим, что обучаемся на ошибках предыдущих моделей, мы:
Мы фиксируем функцию потерь. Она зависит от целевых значений и от текущей композиции
L(y, F(x))Добавляя новый базовых алгоритм в наш ансамбль / композицию, хотим минимизировать функцию потерь
Для этого можем посчитать градиент этой функции потерь
И обучать следующее дерево на антиградиент
Таким образом мы обучаемся на ошибках, но не совсем на остатках (разницы между предсказанием и таргетом), а на значение антиградиента, что, например, для функции потерь mse одно и то же.


Что такое стекинг?
Стекинг (Stacking) — это метод ансамблирования, при котором несколько моделей обучаются на исходных данных, а затем их предсказания используются как входные данные для мета-модели (вторичного уровня). Мета-модель учится на прогнозах базовых моделей и даёт итоговое предсказание.
Как делать трейн/тест сплит для стекинга?
Для стекинга важен out-of-fold split. Каждый базовый классификатор обучается на части данных (например, с использованием кросс-валидации), а затем делает предсказания на оставшихся данных, которые не использовались в обучении. Эти предсказания (out-of-fold) используются для тренировки мета-модели.
Часто делают кросс-валидацию, чтобы в итоге обучаться на всех данных.


Что такое bias-variance decomposition? Какой тип ансамблирования, что оптимизирует?
Bias-Variance Decomposition — это концепция, которая помогает понять, как ошибки модели можно разделить на две основные составляющие:
Bias (смещение) — ошибка, возникающая, когда модель слишком простая и не может захватить все закономерности в данных. Это приводит к систематической ошибке в предсказаниях.
Variance (вариативность) — ошибка, возникающая, когда модель слишком сложная и слишком чувствительна к случайным колебаниям данных, что приводит к нестабильным и переобученным предсказаниям.
Noise (шум) — это неизбежная ошибка, которая не может быть уменьшена ни с помощью улучшения модели, ни с помощью большого объёма данных.
Полная ошибка модели может быть разложена на три части:


Бэггинг - уменьшает вариенс (в столько раз, сколько базовых алгоритмов в теории) и уже обладает низким смещением.

Бустинг имеет низкий вариенс и уменьшает смещение.
Стекинг явно ничего из этого не призван минимизировать.
Почему в Random Forest при выборе признаков на каждом сплите используют случайное подмножество признаков?
Это делается для того, чтобы снизить корреляцию между деревьями в лесу и улучшить общую производительность модели. Если все деревья будут использовать одни и те же признаки, они будут более похожи друг на друга, что приведёт к менее разнообразным решениям.
С точки зрения bias-variance decomposition мы хотим строить максимально разнообразные деревья и как можно больше их. То есть мы строим экспертов в своей области (по подмножеству данных и признаков), а потом их усредняем.
Да и просто с точки зрения логики - зачем нам строить одинаковые деревья?)
Где деревья глубже бустинг/бэггинг?
В бэггинге обычно деревья глубже, а бустинге с ограничением, чтобы не переобучаться.
Если в бустинге в какой-то момент будет переобучение - вырулить из этого никак не получится.
А в бэггинге даже если будет несколько переобученных деревьев, эффект от них может быть некритичным, так как мы берем несколько алгоритмов и усредняем их предсказаниях.
Что если сделать первое дерево очень глубоким в бэггинге/бустинге?
В бэггинге:
Если первое дерево очень глубокое, оно будет склонно к переобучению на обучающих данных, так как оно будет слишком подстраиваться под шум и выбросы в данных. Однако, поскольку в бэггинге используются ансамбли деревьев, остальные деревья будут обучаться на других подмножествах данных, и, возможно, это частично уменьшит влияние переобучения первого дерева. Но в целом такое дерево может немного ухудшить стабильность ансамбля (на сколько сильно - зависит от общего числа деревьев).
В бустинге:
Если первое дерево слишком глубокое, это может усилить переобучение с самого начала. В бустинге каждая модель обучается на ошибках предыдущей, и если первое дерево слишком сильно подгоняет данные, оно будет давать плохие результаты для последующих моделей. Если у нас первое дерево уже переобучилось - что тогда делать другим деревьям, трейн данные мы уже идеально запомнили. Поэтому в бустинге часто ограничивают глубину деревьев для предотвращения этого.
Что если убрать первое дерево в бэггинге/устинге?
В бэггинге:
Если удалить первое дерево, в ансамбле всё равно останется множество других деревьев, и они будут давать разнообразие прогнозов. Так как в бэггинге важно среднее усреднение множества деревьев, удаление одного не сильно повлияет на итоговый результат, особенно если количество деревьев велико.
В бустинге:
Если удалить первое дерево в бустинге, это сломает всю последовательность обучения, так как каждое следующее дерево пытается исправить ошибки предыдущего. Без первого дерева у модели не будет фундамента для исправления ошибок. Это нарушает основной принцип бустинга, и результат будет сильно хуже.
Можно ли переобучить бустинг? а бэггинг?
Да, бустинг переобучается, особенно при слишком большом количестве базовых алгоритмов.
Бэггинг в целом более устойчив к переобучению, поскольку каждое дерево обучается на случайных подмножествах данных. И при увеличении числа базовых алгоримтов переобучить ансамбль не получится.
В чем отличия LightGBM, XGBoost, CatBoost?
В основном в форме деревьев.
LightGBM
На каждом шаге выбираем вершину для ветвления с наилучшим скором
Дерево получается несимметричным
В этом алгоритме быстро подстраиваемся под трейн данные, поэтому можно быстрее переобучиться
Основной критерий остановки - максимальная глубина

XGBoost
Строим дерево последовательно по уровням до достижения максимальной глубины
Дерево получается симметричным, а иногда и бинарным
Такому алгоритму тяжелее переобучиться, чем LightGBM

CatBoost
Все вершини одного уровня имеют одинаковых предикат (см картинку ниже). предикат = условие ветвления
Такое жесткое ограничение является сильным регуляризатором
Также из-за отсутствия вложенных if-else ускоряется инференс дерева

Как распараллелить обучение бэггинга и бустинга
В бэггинге каждое дерево строится независимо от других, поэтому обучение можно легко распараллелить по деревьям - каждое обучается на своей бутстрэп-подвыборке.
В бустинге деревья строятся последовательно, так как каждое новое дерево исправляет ошибки предыдущего. Поэтому распараллелить обучение по деревьям нельзя.
Однако современные библиотеки реализуют внутреннюю параллелизацию — внутри одного дерева:
по узлам
при поиске сплитов
при вычислении градиентов
Как распараллелить инференс бэггинга и бустинга
В бэггинге всё просто - модели независимы, поэтому инференс можно распараллелить по деревьям и затем усреднить/проголосовать результаты.
В бустинге во время инференса деревья тоже независимы, и их можно вычислять параллельно, как в бэггинге.
Однако на практике это редко даёт значительный выигрыш, потому что деревья обычно неглубокие, и накладные расходы параллелизации перевешивают выгоду. Поэтому на практике применяют параллелизацию по данным - обрабатывают батчи объектов одновременно.
Метрические модели
Что такое метрические модели?
Метрические модели — это такие алгоритмы, которые не предсказывают параметры в привычном смысле, а делают предсказания, сравнивая расстояния между объектами. Модель не учится напрямую. Вместо этого, чтобы предсказать класс или значение для нового объекта, она смотрит на похожие объекты в обучающей выборке — и основывает своё решение на них.
Основная идея, Если два объекта «близки» друг к другу по признаковому пространству (то есть расстояние между ними мало), то их целевые значения тоже должны быть похожи.
Как работает k-nn?
1. Обучение:
Обучения как такового нет.
Модель просто запоминает все обучающие объекты и их метки классов (или значения, если это регрессия).
Чтобы классифицировать новый объект, модель ищет k ближайших объектов в обучающей выборке и голосует по их меткам.
Для регрессии — берется среднее значение у k ближайших соседей.
2. Предсказание:
Когда приходит новый объект, происходит следующее:
Вычисляется расстояние до всех объектов из обучающей выборки
— обычно Евклидово, но может быть любое (манхэттенское, косинусное и т.п.)Выбираются k ближайших соседей
-
Классификация:
Класс — тот, за который проголосовало большинство соседей (majority vote)
Можно взвешивать по расстоянию: ближние — весомее
-
Регрессия:
Предсказывается среднее значение по соседям
Или взвешенное среднее (опять же — ближние весомее)
Какое у knn время обучения и предсказания?
Обучение:
O(1) — просто запоминаем данные.
Очень быстро.
Предсказание:
-
O(n × d) на каждый запрос
где:n — число обучающих примеров
d — размерность признаков
Долго потому что при каждом предсказании нужно перебрать все точки и посчитать расстояние до каждой. Никаких предвычисленных весов, как в линейной модели.
Как можно считать расстояние?
1. Евклидово расстояние (Euclidean Distance)
Формула:

Корень из суммы квадратов разницы координат
Подходит, если признаки числовые и сравнимы по масштабу.
Обязательно делать стандартизацию, иначе один большой признак “перетянет” всё расстояние на себя. Евклидово расстояние чувствительно к масштабу признаков. Если один признак выражен в километрах, а другой — в метрах, то первый будет доминировать. Поэтому перед использованием часто нормализуют данные
2. Манхэттенское расстояние (Manhattan / L1)
Формула:

Сумма разности координат по модулю
Более устойчиво к выбросам.
Используется, когда важно учитывать абсолютные отклонения.
3. Косинусное расстояние (Cosine Distance / Similarity)
Расстояние:

Показывает угол между векторами, а не их длину. То есть оно показывает, насколько направления двух векторов похожи.
Хорошо работает в задачах с текстами, векторными представлениями, где важна направленность признаков, а не их абсолютные значения.
Используется в рекомендательных системах, NLP, кластеризации текстов.
Какие есть плюсы и минусы метрических моделей и knn в особенности?
Плюсы:
Простота — легко реализовать, легко объяснить.
Нет обучения — не нужно долго тренировать модель.
Интерпретируемость — можно объяснить решение через похожие примеры: “мы присвоили этот класс, потому что рядом был вот этот объект”.
Работают на любых признаках (если выбрать подходящую метрику): числовые, бинарные, категориальные.
Минусы:
Медленные предсказания — при большом количестве данных или признаков тормозят.
Чувствительность к масштабу признаков — без нормализации всё ломается.
Проклятие размерности — в высоких размерностях расстояния теряют смысл.
Чувствительность к шуму и выбросам — особенно при маленьком k.
Хранение всей выборки — нужны память и ресурсы для хранения и поиска.
Как масштабирование признаков влияет на K-NN? Почему?
Это критически важно. Потому что в k-NN всё зависит от расстояний между точками. Если признаки не находятся в одинаковом масштабе, один из них может целиком доминировать, даже если он вообще не важен.
Как ускорить K-NN для большого датасета?
Понижение размерности перед k-NN
Используй PCA, UMAP, TSNE, TruncatedSVD и т.п.
Уменьшаешь размерность данных → быстрее считается расстояние
Главное — сохранить "структуру близости" между точками
Можно использовать Approximate Nearest Neighbors. Annoy, HNSW (Approximate Nearest Neighbors)
Для приближенного поиска ближайших — быстрее, но с небольшой потерей точности
Например, Annoy: Можем представить обучающую выборку в виде дерева и считаем уже не по всей области, а по части выборки. Другие методы используют другие методы ограничения выборки для подсчета.
Очень хорошо работают для больших объемов данных
Где можно применять метрические модели?
Использовать в качестве бейзлайна
Если два пользователя похожи — можно рекомендовать одному, что понравилось другому
Или искать похожие товары, изображения и так далее.
Или можно искать не ближайших, а наоборот:
Если объект далеко от всех остальных — возможно, он аномален. Например, мошенническая транзакция
Кластеризация
Что такое кластеризация? Примеры задач, которые решаются с помощью кластеризации?
Это unsupervised learning, то есть обучение без учителя: нет правильных меток, и модель должна сама найти структуру в данных.
Примеры задач: Сегментация пользователей, поиск аномалий, кластеризация документов или изображений.

Объясните различия между soft и hard кластеризацией.
Hard-кластеризация (жёсткая):
Каждый объект относится только к одному кластеру.
Пример: алгоритм KMeans — каждая точка назначается ближайшему центроиду.
Подходит, когда кластеры чётко разделимы, и пересечения нет.
Soft-кластеризация (мягкая, вероятностная):
Объект может принадлежать одновременно нескольким кластерам с некоторой степенью уверенности (вероятностью).
Пример: GMM (Gaussian Mixture Models) — точка может принадлежать, например, на 70% одному кластеру и на 30% другому.
Это особенно полезно, когда границы между кластерами размытые, и данные — шумные или перекрывающиеся.
Как работает метод К-средних?
Алгоритм KMeans — это итеративный метод кластеризации, который разбивает данные на K непересекающихся кластеров, минимизируя внутрикластерную дисперсию (сумму квадратов расстояний до центроидов).
Основные шаги:
-
Инициализация:
Выбираются K случайных центров (центроидов) кластеров.
-
Присвоение:
Каждая точка назначается ближайшему центру кластера (обычно по евклидовому расстоянию).
-
Обновление:
Центры кластеров пересчитываются как среднее всех точек, попавших в кластер.
-
Повторение:
Шаги 2–3 повторяются, пока центры не перестают изменяться (или изменение меньше ε) либо не достигнуто максимальное число итераций.
Во время этого алгоритма мы минимизируем внутрикластерную дисперсию:

или сумму квадратов расстояний каждой точки до центра своего кластера
Какие есть проблемы с начальной инициализацией центров? Как можно улучшить ее?
Если инициализацию центров делать просто случайно выбирая точки в пространстве, то может возникнуть проблема того, что все центры попадут в одну место - это приводит к:
застреванию в плохих локальных минимумах
и к большему кол-ву итераций оптимизации
Поэтому придумали способ более оптимального выбора начальных центров, работает следующим образом (KMeans++ инициализация):
Первый центр выбирается случайным образом из всех точек.
Для каждой точки x, вычисляется расстояние до ближайшего уже выбранного центра — D(x)^2.
Следующий центр выбирается случайным образом, с вероятностью, пропорциональной D(x)^2. То есть, чем дальше точка от уже выбранных центров, тем выше шанс, что она станет новым центром.
Повторяем шаг 2–3, пока не выбрано K центров.
Мы стараемся разбросать начальные центры по пространству, чтобы они лучше покрывали распределение точек.
Как можно ускорить алгоритм к-средних?
-
MiniBatch KMeans
Вместо использования всего датасета на каждой итерации, берётся маленький случайный минибатч точек.
Обновления центров проводятся только по этим батчам.
Значительно снижает время одной итерации, и в среднем сходится быстрее.
KMeans++ инициализация
Уменьшение размерности
Также существуют разные эвристики, чтобы не пересчитывать расстояния до всех центров на каждом шаге
Распараллеливание
Что такое иерархическая агломеративная кластеризация, чем отличается от дивизионных алгоритмов?
Это тип кластеризации, при котором мы постепенно объединяем объекты в кластеры, начиная с того, что каждая точка — отдельный кластер, и в итоге объединяем всё в один.
Алгоритм:
Старт: каждая точка — это свой кластер.
Вычисляется расстояние между всеми кластерами.
Находим два ближайших кластера и объединяем их.
Обновляем матрицу расстояний.
Повторяем шаги 2–4, пока не останется один кластер (или не достигнут критерий остановки).
Как можно посчитать расстояние между кластерами в иерархической кластеризации?
Метод |
Как считается расстояние |
Поведение кластеров |
Single linkage |
Расстояние между двумя ближайшими точками |
Тяготеет к вытянутым/цепочкообразным кластерам |
Complete linkage |
Расстояние между двумя самыми далёкими точками |
Даёт компактные, сферические кластеры |
Average linkage |
Среднее расстояние между всеми парами точек |
Компромисс между Single и Complete |
Centroid linkage |
Расстояние между центроидами кластеров |
Может не удовлетворять треугольному неравенству |
Ward's method |
Увеличение внутрикластерной дисперсии при объединении |
Стремится минимизировать разброс внутри кластеров |
Что такое дендрограмма?
Дендрограмма — это дерево, которое показывает, как и в каком порядке происходило объединение объектов в кластеры в процессе иерархической кластеризации.

Что показывает дендрограмма:
Ось X: объекты или кластеры.
Ось Y: расстояние между кластерами в момент их объединения.
Высота ветвей: насколько "далеки" были кластеры, когда их объединили.
Обрезка дендрограммы на нужной высоте → даёт итоговые кластеры.
Какие есть критерии остановки работы иерархической кластеризации?
Фиксированное число кластеров (n_clusters)
Разрыв (gap) в дендрограмме
Порог по расстоянию между кластерами
Минимальный прирост внутрикластерной дисперсии (Ward)
Как работает алгоритм DBSCAN?
DBSCAN — это алгоритм, который ищет области с высокой плотностью точек и определяет их как кластеры, а всё остальное — как шум или выбросы.
2 гиперпараметра:
e - радиус окрестности точки
minPts - минимальное количество точек в окрестности, чтобы считать точку "основной"
3 вида точек:
внутренние / основные точки (core points)
в их окрестности больше чем minPts объектов выборкиграничные (border points)
не подходят под основные, но находятся в их окрестностишумовые точки (noise points)
точки не входящие в окрестность к основным
Алгоритм работает следующим образом:
убираем все шумовые точки
начинаем поиск в глубину из основных точек и соединяем все соседние точки и их окрестности, если соседняя точка основная
Плюсы:
Не нужно задавать число кластеров.
Устойчив к выбросам.
Хорошо находит кластер любой формы.
Минусы:
Плохо работает в высоких размерностях — из-за "проклятия размерности" плотность становится неинформативной.
Какие метрики существуют для оценки качества кластеризации?
Без учёта разметки (unsupervised)
С учётом разметки (supervised)
Среднее внутрикластерное расстояние

Сумма расстояний между точками из одного и того же кластера делится на количество пар точек, принадлежащих к одному кластеру.
Среднее межкластерное расстояние

Тут уже не максимизация, а минимизация
Коэффициент силуэта
Считаем его для каждого объекта выборки, а потом усредняем между по всей выборки.

А - среднее расстояние между объектом и всеми элементами его кластера
В - среднее расстояние между объектом и всеми элементами из ближайшего чужого кластера
Также есть и метрики для оценки качества с учетом разметки:
Гомогенность и полнота, а также их среднее гармоническое - V-мера
Как выбрать оптимальное количество кластеров?
метод локтя
коэффициент силуэта
по дендрограмме
посмотреть глазами (или LLM-кой на получившиеся кластера)
Полезные материалы, на которые я опирался для составления поста:
Учебник ШАДа
На этом в этих темах — все, смотрите разбор вопросов на ютубе!
Разборы реальных собеседований на бусти и еще больше полезного контента в тг канале, подписывайтесь, чтобы не пропустить следующие части, а они уже скоро будут)