K-Means всегда даёт K кластеров, но не гарантирует их осмысленность. Узнайте, как проверять стабильность и применять в продакшене. Читайте!
Представьте: вы просите алгоритм разбить клиентов на 5 групп, и он послушно выдаёт 5 кластеров с центроидами и метрикой качества. Но откуда вы знаете, что эти группы действительно существуют? K-Means ответит на вопрос «как лучше разбить данные на 5 компактных групп», но не на ваш исходный вопрос «есть ли здесь вообще 5 групп?». Это разные вопросы, и только один из них — ваш.
K-Means предполагает, что кластеры имеют округлую форму и примерно одинаковый размер. Из-за этого он режет вытянутые или цепочечные структуры на несколько «красивых» шариков, а затем рапортует об успехе. Если ваши реальные сегменты — например, паттерн «медленной эскалации», который змеёй тянется по метрикам, — K-Means разрежет его на три аккуратных блоба и скажет, что всё отлично.
Второе допущение — одинаковый масштаб групп. Если один сегмент огромен, а другой — всего несколько аккаунтов, алгоритм может выдать странные разбиения, потому что минимизирует сумму квадратов расстояний до центроидов. В результате вы получите группы, которые не соответствуют бизнес-смыслу, но выглядят убедительно.
Число кластеров K — входной параметр, а не результат работы алгоритма. Метод локтя и силуэтные оценки помогают спорить о выборе K, но это эвристики, а не оракулы. K — это ваше предположение о структуре данных, обёрнутое в алгоритм.
Механически K-Means итеративно повторяет: разместить центроиды, назначить точки, сдвинуть центроиды к среднему, повторять до сходимости. Это алгоритм Ллойда — эвристика. Глобальная оптимизация K-Means NP-трудна, поэтому вы получаете локальный оптимум, зависящий от инициализации. Запуски с разными начальными условиями дают разные кластеры. k-means++ и множественные рестарты помогают, но «помогают» — честное слово.
Что именно минимизируется? Сумма квадратов внутрикластерных расстояний — инерция. И тут есть подвох: оптимальная инерция никогда не возрастает с ростом K. При K = n каждая точка — свой кластер, инерция равна нулю. Поэтому нельзя выбрать K простой минимизацией целевой функции. Метод локтя существует именно потому, что метрика не может ответить на бизнес-вопрос — приходится искать точку, где добавление сложности перестаёт окупаться.
Я использую слово SEARCH как личную стенографию для способа, которым каждый алгоритм без учителя приходит к ответу:
Четыре стратегии поиска ответов без меток, и K-Means — якорь, с которым я сравниваю остальные: большинство из них лучше всего понимать как реакцию на то, что K-Means делает неправильно.
Без меток нет метрики точности, которая поймала бы вас. Сигнал неудачи — не ошибка, а правдоподобная сегментация, которая тихо не соответствует реальности.
Конкретный пример из моей практики: кластеризация ИТ-аккаунтов для презентации QBR. K-Means выдаёт «5 клиентских сегментов». Презентация уходит в свет. Стратегия строится на этих сегментах. Никто не спрашивает, отражает ли K=5 реальную структуру или кластеры режут все важные бизнес-границы — потому что результат выглядит как инсайт, и нет «золотого стандарта», который бы его опозорил.
В обучении с учителем плохую модель ловит тестовый набор. В обучении без учителя тестовый набор — это встреча с заинтересованными сторонами через три месяца.
Относитесь к результату K-Means как к генератору гипотез, а не как к отчёту. Прежде чем что-то downstream начнёт потреблять кластеры:
Блок с учителем научил меня, что порог — это бизнес-решение. Блок без учителя начинается с более сложной версии: иногда сам вопрос — это бизнес-решение. K-Means ответит на любое K, которое вы ему дадите. Ответственный выбор K — ваша работа, а не его.
Воспринимайте кластеры как гипотезу, а не как отчёт. Прежде чем что-либо downstream начнёт их потреблять: проверьте стабильность на ресемплах и переинициализациях, читайте силуэтные оценки по каждому кластеру, а не только среднюю, и назовите каждый кластер одним предложением, которое узнает руководитель направления. Если кластер нельзя назвать — это артефакт.
Первая ошибка — представлять K как то, что алгоритм «обнаружил». K — это ваш вход и ваша гипотеза; локоть и силуэт — аргументы, а не оракулы. Полезно знать, почему: оптимальная инерция никогда не убывает с ростом K, поэтому целевая функция сама по себе никогда не выберет K за вас.
Вторая ошибка — описывать алгоритм Ллойда так, будто он находит глобально оптимальную кластеризацию. Задача K-Means в общем случае NP-трудна, поэтому Ллойд сходится к локальному оптимуму, зависящему от инициализации. Множественные инициализации и k-means++ снижают чувствительность, но не меняют сути проблемы.
Третья, и её легче всего упустить, — пропуск нормализации признаков для алгоритма, основанного на расстояниях.
Сегментация аккаунтов или клиентов для моделей покрытия · профили рабочих нагрузок для планирования ёмкости · первичная проверка структуры перед проектированием размеченного набора для обучения с учителем.
Серия: о том, на что делают ставки ML-алгоритмы, взгляд эксплуатации. Предыдущая часть: SVM. Следующая: DBSCAN — первый алгоритм вообще без функции потерь.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →