сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Классический ML

Кластеризация и обучение без учителя

Зачем это спрашивают

Кластеризация приходит на собес переодетой в продуктовую задачу: «сегментируй пользователей». Проверяют два умения. Понимаешь ли ты, какие допущения делает метод - k-means не универсальный нож, - и умеешь ли выбирать число кластеров не пальцем в небо.

Бонус-раунд почти всегда про картинки: что на проекции можно читать буквально, а что окажется артефактом самой проекции.

// Типовые формулировки: «как выберешь число кластеров?», «почему k-means не сработал на этих данных?», «что показывает t-SNE и чему на нём верить?».

k-means: простой, быстрый и капризный

Работает он в два шага, которые крутятся по кругу. Раскидай точки по ближайшим центрам, потом пересчитай каждый центр как среднее его точек. Повторяй, пока центры не перестанут двигаться. Всё. Центр кластера называют центроидом, и он не обязан совпадать ни с одной реальной точкой.

Теперь капризы, из-за которых метод и спрашивают. Число кластеров k надо назвать заранее. Результат зависит от того, куда центры поставили изначально - это лечит умная инициализация k-means++. И самое коварное: расстояния тут евклидовы, поэтому без масштабирования признаков кластеры соберутся по тому признаку, у которого шкала крупнее. Зарплата в рублях просто задавит возраст в годах.

// А главное допущение вот какое: k-means ищет кластеры округлые и примерно одного размера. Кольца, полумесяцы, вытянутые ленты, области разной плотности - всё это он разрежет неправильно и даже не пожалуется.

центроид
центр кластера, посчитанный как среднее всех его точек
инерция
суммарная удалённость точек от своих центров; с ростом k всегда падает

Когда форма кластера не шар

DBSCAN (density-based spatial clustering of applications with noise) устроен иначе: он не делит пространство, а ищет сгущения. Точка считается ядром, если рядом с ней, в радиусе eps, набралось хотя бы min_samples соседей; из таких ядер кластеры и разрастаются. Число кластеров искать не надо, он находит его сам, форма может быть любой, а одинокие точки честно помечаются шумом. Слабое место одно, но существенное: если в данных есть и плотные, и разреженные группы, единый радиус на всех не натянешь.

Иерархическая кластеризация строит дерево слияний - дендрограмму: сначала каждая точка сама себе кластер, потом ближайшие сливаются, и так до одного общего. Разрезав дерево на нужной высоте, получаешь любое число кластеров, а заодно видишь вложенность - сегменты внутри сегментов. Платишь скоростью: от квадрата числа объектов и выше.

// Практичный выбор без страданий: округлые сегменты пользователей - k-means; произвольная форма и шум, например гео-точки или поиск аномалий - DBSCAN; нужна вложенность и данных немного - иерархическая.

// Есть и мягкий вариант: GMM (gaussian mixture model) описывает данные смесью нормальных распределений, и точка получает не ярлык, а вероятности принадлежать каждому кластеру. Кластеры при этом могут быть вытянутыми эллипсами, а не только шарами; k-means оказывается его жёстким частным случаем.

eps и min_samples
радиус и минимум соседей в нём - так DBSCAN и определяет, что область плотная

Снижение размерности: PCA против t-SNE

PCA (principal component analysis) решает такую задачу: у тебя пятьдесят признаков, а нарисовать хочется на плоскости. Метод ищет направление, вдоль которого данные разбросаны сильнее всего, объявляет его первой новой осью, потом ищет следующее по разбросу среди перпендикулярных - и так далее. Держишь первые две-три оси и получаешь проекцию, которая сохранила максимум различий между объектами. Данные перед этим обязательно центрируют и обычно масштабируют, а сколько осей оставить, решают по доле удержанного разброса.

t-SNE и UMAP работают иначе: они не проецируют, а стараются расположить точки на плоскости так, чтобы соседи остались соседями. Картинка получается красивая, кластеры видны отчётливо. Но за эту красоту приходится платить.

// Правило чтения такой карты стоит запомнить дословно. «Эти точки рядом, значит похожи» - верить можно. «Этот кластер дальше от того, значит различие больше» - верить нельзя, расстояния и размеры пятен на проекции ничего не значат.

объяснённая дисперсия
какую долю общего разброса данных удержали оставленные оси

Как отвечать: «Как выберешь число кластеров для k-means?»

Одной инерцией его не выбрать: она падает с ростом k всегда, вплоть до кластера на каждую точку. Поэтому смотрю на локоть - место, где падение резко замедляется, - и на silhouette, который меряет, насколько кластеры отделены друг от друга. Но финальное слово я отдаю интерпретируемости: сегменты должны различаться так, чтобы по ним можно было действовать по-разному, иначе это красивая математика без применения. И перед всем этим обязательно масштабирую признаки, иначе кластеры соберутся по признаку с самой крупной шкалой. А если число кластеров в задаче в принципе не задано и форма у них хитрая, попробую DBSCAN, ему k не нужен.

Названы формальные критерии и сразу сказано, что решают не они. Это ответ человека, который сегменты потом кому-то показывал.

На чём валят

  • k-means без масштабирования признаков: кластеры соберутся по тому, у кого шкала крупнее.
  • Читать расстояния между кластерами на t-SNE-карте как настоящую близость: это артефакт проекции.
  • PCA без центрирования данных: первая ось уедет в сторону среднего вместо направления наибольшего разброса.
  • Выбирать k по одной инерции: она падает всегда, поэтому лучшего k так не найти в принципе.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 23, остальные разбираются в тренажёре.

  1. #unsupervised1 / 5
    DBSCAN пометил половину точек как шум. Какие два гиперпараметра и в какую сторону стоит крутить в первую очередь?
    A)Увеличить eps или уменьшить min_samples — критерий плотности сейчас слишком строгий
    B)Уменьшить eps и увеличить min_samples — сделать критерий плотности ещё строже
    C)Увеличить число кластеров k в настройках алгоритма
    D)Сменить метрику с евклидовой на косинусную — параметры плотности не при чём
    показать ответ и разбор
    +A)Увеличить eps или уменьшить min_samples — критерий плотности сейчас слишком строгий

    // разбор: Точка становится core-точкой, если в радиусе eps есть min_samples соседей; шум — те, кто не дотянулся ни до одного кластера. Слишком маленький eps или большой min_samples делают критерий плотности жёстким. Подбор eps удобно начинать с k-distance графика (перегиб кривой расстояний до k-го соседа).

  2. #unsupervised2 / 5
    Чем обучение без учителя отличается от обучения с учителем?
    A)Без учителя — это когда в данных меньше тысячи строк
    B)С учителем модель учится без разметки, без учителя — на размеченных данных
    C)Обучение без учителя возможно нейросетями
    D)Нет таргета: модель ищет структуру в самих данных — кластеры, плотность, направления, аномалии
    показать ответ и разбор
    +D)Нет таргета: модель ищет структуру в самих данных — кластеры, плотность, направления, аномалии

    // разбор: С учителем есть правильный ответ (таргет) и ошибка меряется относительно него. Без учителя ответа нет — алгоритм ищет структуру: кластеризация (сегменты юзеров), снижение размерности (PCA), поиск аномалий (фрод). Оценивать сложнее: «правильных кластеров» никто не разметил, поэтому метрики косвенные.

  3. #unsupervised3 / 5
    Как на практике выбирают число кластеров k для k-means?
    A)Elbow по инерции + silhouette + здравый смысл задачи; формально «правильного k» не существует
    B)По эмпирической формуле k = √(n/2): она даёт правильный порядок числа кластеров для большинства датасетов
    C)K равно числу признаков в данных
    D)Максимизируют инерцию по всем k
    показать ответ и разбор
    +A)Elbow по инерции + silhouette + здравый смысл задачи; формально «правильного k» не существует

    // разбор: Инерция монотонно падает с ростом k, поэтому смотрят на «локоть» — где падение резко замедляется; silhouette даёт независимую проверку разделимости. Финальное слово за задачей: маркетингу нужно 4 понятных сегмента, а не 17 математически красивых. Единственно верного k не существует — это свойство кластеризации, а не недоработка.

  4. #unsupervised4 / 5
    Что делает PCA с данными?
    A)Кластеризует объекты вдоль главных осей
    B)Отбирает подмножество наиболее информативных исходных признаков, не изменяя сами значения — компактный feature selection
    C)Строит новые оси — линейные комбинации признаков, упорядоченные по объяснённой дисперсии; хвост можно отбросить
    D)Приводит все признаки к нулевому среднему и единичной дисперсии
    показать ответ и разбор
    +C)Строит новые оси — линейные комбинации признаков, упорядоченные по объяснённой дисперсии; хвост можно отбросить

    // разбор: PCA поворачивает систему координат: первая компонента — направление максимальной дисперсии, каждая следующая ортогональна предыдущим. Оставив топ-k компонент, сжимаем данные с минимальной потерей дисперсии. Важно: компоненты — смеси исходных признаков, интерпретация «что это за ось» требует смотреть на нагрузки (loadings).

  5. #unsupervised5 / 5
    Silhouette score объекта равен 0.9, около 0, −0.4. Как читать эти три значения?
    A)0.9 — почти наверняка выброс; −0.4 — объект идеально кластеризован; ровно 0 — численная ошибка расчёта самой метрики
    B)0.9 — плотно в своём кластере; около 0 — на границе двух кластеров; −0.4 — похоже, отнесён не к своему кластеру
    C)Значения сравнимы внутри одного кластера, по отдельности не читаются
    D)Silhouette неотрицателен по определению — значения −0.4 встречается редко
    показать ответ и разбор
    +B)0.9 — плотно в своём кластере; около 0 — на границе двух кластеров; −0.4 — похоже, отнесён не к своему кластеру

    // разбор: s = (b − a) / max(a, b), где a — средняя дистанция до своего кластера, b — до ближайшего чужого. Близко к 1 — свой кластер ощутимо ближе; около 0 — границы кластеров смыкаются; отрицательное — чужой кластер ближе своего, объект вероятно не на месте. Средний silhouette по выборке — критерий выбора k.

дальше

Теорию прочитали. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.