Кластеризация и обучение без учителя
Кластеризация приходит на собес переодетой в продуктовую задачу: «сегментируй пользователей». Проверяют два умения. Понимаешь ли ты, какие допущения делает метод - 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, остальные разбираются в тренажёре.
- 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-го соседа).
- Чем обучение без учителя отличается от обучения с учителем?A)Без учителя — это когда в данных меньше тысячи строкB)С учителем модель учится без разметки, без учителя — на размеченных данныхC)Обучение без учителя возможно нейросетямиD)Нет таргета: модель ищет структуру в самих данных — кластеры, плотность, направления, аномалии
показать ответ и разбор
+D)Нет таргета: модель ищет структуру в самих данных — кластеры, плотность, направления, аномалии// разбор: С учителем есть правильный ответ (таргет) и ошибка меряется относительно него. Без учителя ответа нет — алгоритм ищет структуру: кластеризация (сегменты юзеров), снижение размерности (PCA), поиск аномалий (фрод). Оценивать сложнее: «правильных кластеров» никто не разметил, поэтому метрики косвенные.
- Как на практике выбирают число кластеров k для k-means?A)Elbow по инерции + silhouette + здравый смысл задачи; формально «правильного k» не существуетB)По эмпирической формуле k = √(n/2): она даёт правильный порядок числа кластеров для большинства датасетовC)K равно числу признаков в данныхD)Максимизируют инерцию по всем k
показать ответ и разбор
+A)Elbow по инерции + silhouette + здравый смысл задачи; формально «правильного k» не существует// разбор: Инерция монотонно падает с ростом k, поэтому смотрят на «локоть» — где падение резко замедляется; silhouette даёт независимую проверку разделимости. Финальное слово за задачей: маркетингу нужно 4 понятных сегмента, а не 17 математически красивых. Единственно верного k не существует — это свойство кластеризации, а не недоработка.
- Что делает PCA с данными?A)Кластеризует объекты вдоль главных осейB)Отбирает подмножество наиболее информативных исходных признаков, не изменяя сами значения — компактный feature selectionC)Строит новые оси — линейные комбинации признаков, упорядоченные по объяснённой дисперсии; хвост можно отброситьD)Приводит все признаки к нулевому среднему и единичной дисперсии
показать ответ и разбор
+C)Строит новые оси — линейные комбинации признаков, упорядоченные по объяснённой дисперсии; хвост можно отбросить// разбор: PCA поворачивает систему координат: первая компонента — направление максимальной дисперсии, каждая следующая ортогональна предыдущим. Оставив топ-k компонент, сжимаем данные с минимальной потерей дисперсии. Важно: компоненты — смеси исходных признаков, интерпретация «что это за ось» требует смотреть на нагрузки (loadings).
- 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.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.