Сегментация клиентов на Python: от квантилей до K-Means

Практический курс для начинающих по основам разделения данных с использованием Python, Pandas и Scikit-learn. Вы научитесь сегментировать клиентов методами квантилей, равных интервалов и K-Means для создания персонализированных предложений в маркетинге и IT.

1. Основы разделения выборки и сегментации клиентов

Основы разделения выборки и сегментации клиентов

Сегментация клиентов — это процесс разделения всей аудитории потребителей на отдельные группы (сегменты), участники которых обладают схожими характеристиками, потребностями или паттернами поведения. В современном бизнесе, будь то IT-разработка, электронная коммерция или маркетинг, персонализация предложений является ключом к повышению лояльности и увеличению прибыли. Невозможно создать идеальный продукт или рекламное сообщение, которое одинаково хорошо подойдет студенту с минимальным доходом и топ-менеджеру крупной корпорации.

Для решения этой задачи аналитики данных используют различные математические и алгоритмические подходы. Выбор конкретного метода зависит от структуры данных и бизнес-цели.

!Схема сегментации клиентов

Метод равных интервалов

Метод равных интервалов — это самый базовый способ разделения количественных данных. Его суть заключается в том, что весь диапазон значений признака (от минимального до максимального) делится на заданное количество отрезков одинаковой длины.

Математически ширина каждого интервала вычисляется по следующей формуле:

Где: * — ширина одного интервала; * — максимальное значение в выборке; * — минимальное значение в выборке; * — желаемое количество групп (сегментов).

Представим, что вы анализируете возраст пользователей вашего мобильного приложения. Минимальный возраст составляет 18 лет, а максимальный — 58 лет. Вы хотите разделить аудиторию на 4 возрастные группы. Ширина интервала составит: (58 - 18) / 4 = 10 лет. Таким образом, получатся группы: 18-28 лет, 28-38 лет, 38-48 лет и 48-58 лет.

Этот метод отлично работает для равномерно распределенных данных, таких как возраст, время суток или количество дней с момента последней покупки. В библиотеке Pandas для реализации этого подхода используется функция cut.

Главный недостаток метода равных интервалов — его крайняя чувствительность к выбросам (аномально большим или маленьким значениям).

> Если в выборке из 1000 человек со средним доходом 50 000 руб. окажется один миллиардер с доходом 1 000 000 000 руб., метод равных интервалов создаст огромные пустые диапазоны, и 999 человек попадут в одну единственную группу, что сделает сегментацию абсолютно бесполезной.

Метод квантилей

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

Если мы делим выборку на 4 части, такие квантили называются квартилями (каждая группа содержит ровно 25% клиентов). Если на 10 частей — децилями (по 10% клиентов).

Рассмотрим пример с доходами. У нас есть 5 клиентов с ежемесячным доходом: 20 000 руб., 25 000 руб., 30 000 руб., 40 000 руб. и 5 000 000 руб. Если мы хотим разделить их на две равные группы (используя медиану, которая является 50-м перцентилем), мы просто отсортируем список и проведем черту посередине. В первую группу попадут клиенты с доходом до 30 000 руб., во вторую — с доходом от 30 000 руб. и выше. Аномальный доход в 5 миллионов никак не исказит границы для большинства пользователей.

В Python для квантильного разделения применяется функция qcut.

Сравнение методов разделения

Для наглядности сопоставим оба подхода в таблице:

| Характеристика | Метод равных интервалов (pd.cut) | Метод квантилей (pd.qcut) | | :--- | :--- | :--- | | Принцип деления | Одинаковая ширина числового диапазона | Одинаковое количество объектов в группе | | Размер групп | Может сильно отличаться (от 0 до 100% выборки) | Всегда строго одинаковый (например, по 25%) | | Отношение к выбросам | Сильно искажает результаты | Устойчив к выбросам (робастен) | | Идеальное применение | Возраст, время, равномерные метрики | Доход, LTV, количество покупок, RFM-анализ |

Кластеризация методом K-Means

Методы cut и qcut отлично работают, когда нам нужно сегментировать клиентов по одному конкретному признаку (только по возрасту или только по доходу). Но поведение людей в реальном мире многомерно. Маркетологам часто нужно найти группы клиентов, учитывая одновременно частоту покупок, средний чек, время на сайте и количество возвратов.

Здесь на помощь приходит машинное обучение без учителя, а именно алгоритм K-Means (К-средних). Это алгоритм кластеризации, который группирует объекты так, чтобы внутри одной группы они были максимально похожи друг на друга, а сами группы максимально отличались между собой.

Алгоритм работает по следующим шагам:

  • Исследователь заранее задает количество кластеров .
  • Алгоритм случайным образом выбирает точек в пространстве данных. Эти точки называются центроидами (центрами будущих кластеров).
  • Каждый клиент привязывается к тому центроиду, к которому он геометрически ближе всего.
  • После того как все клиенты распределены, алгоритм вычисляет новый центр тяжести для каждой группы и перемещает центроид туда.
  • Шаги 3 и 4 повторяются до тех пор, пока центроиды не перестанут сдвигаться.
  • Важнейшее правило при использовании K-Means: данные необходимо масштабировать (стандартизировать). Алгоритм измеряет расстояния между точками. Если средний чек измеряется в десятках тысяч рублей, а количество покупок — в единицах, то без масштабирования алгоритм будет обращать внимание только на деньги, полностью игнорируя частоту покупок.

    Пример реализации на Python с использованием библиотеки Scikit-learn:

    В результате выполнения этого кода алгоритм четко разделит клиентов на две группы: «редкие покупатели с низким чеком» и «лояльные VIP-клиенты».

    Понимание этих трех подходов — от простых интервалов до машинного обучения — дает мощный фундамент для глубокой аналитики. Разделяя аудиторию на осмысленные сегменты, вы можете настраивать таргетированную рекламу, разрабатывать индивидуальные email-рассылки и адаптировать интерфейс IT-продуктов под конкретные нужды пользователей.

    2. Метод квантилей

    Метод квантилей

    При анализе данных о клиентах исследователи часто сталкиваются с проблемой неравномерного распределения. В предыдущем материале упоминалось, что базовый метод равных интервалов крайне уязвим к выбросам — аномально высоким или низким значениям. Если попытаться разделить пользователей по уровню дохода на равные числовые отрезки, один миллионер исказит всю картину, оставив большинство сегментов пустыми.

    Для решения этой проблемы в математической статистике и анализе данных применяется метод квантилей. Этот подход позволяет группировать клиентов не по ширине числового диапазона, а по количеству объектов в каждой группе.

    Суть квантильного разделения

    Квантиль — это значение, которое делит отсортированный набор данных на определенные части так, чтобы в каждой части находилось заданное количество наблюдений.

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

    Математически квантиль уровня (где ) — это такое число, ниже которого находится доля всех данных выборки, а выше — доля .

    !Интерактивная визуализация квантилей

    В зависимости от того, на сколько частей мы делим выборку, квантили имеют специальные названия:

    * Медиана (квантиль ) — делит выборку ровно пополам. 50% значений меньше медианы, 50% — больше. * Квартили — три значения, которые делят данные на 4 равные части (по 25% в каждой). * Децили — девять значений, делящих выборку на 10 равных частей (по 10%). * Перцентили — девяносто девять значений, делящих данные на 100 частей (по 1%).

    > «В статистике медиана часто говорит о реальном положении дел гораздо больше, чем среднее арифметическое. Если в бар заходит Билл Гейтс, в среднем все посетители бара становятся миллионерами. Но медианный доход посетителей при этом практически не меняется». > > Билл Гейтс и статистика)

    Сравнение терминологии

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

    | Доля данных | Квантиль | Перцентиль | Специальное название | Значение для бизнеса | | :--- | :--- | :--- | :--- | :--- | | 25% | | 25-й | Первый квартиль | Граница отсечения «отстающих» клиентов | | 50% | | 50-й | Медиана | Типичный, среднестатистический клиент | | 75% | | 75-й | Третий квартиль | Граница перехода в категорию лояльных | | 90% | | 90-й | Девятый дециль | VIP-сегмент, приносящий основную прибыль |

    Практическое применение в маркетинге и IT

    В сфере продаж и разработки программного обеспечения квантильное разделение является фундаментом для RFM-анализа (Recency, Frequency, Monetary). Это метод сегментации, при котором клиентов оценивают по давности последней покупки, частоте транзакций и общей сумме потраченных денег.

    Допустим, у IT-компании есть SaaS-продукт (программное обеспечение по подписке). Аналитику нужно выделить сегмент пользователей, которым стоит предложить скидку на годовой тариф.

    Если использовать среднее значение активности, то несколько корпоративных клиентов, использующих систему круглосуточно, завысят планку. Обычные активные пользователи покажутся «спящими». Применив квартили, аналитик гарантированно выделит ровно 25% самых активных пользователей, 25% умеренно активных и так далее, независимо от того, насколько сильно отличаются их абсолютные показатели.

    !Схема разделения пользователей на квартили

    Реализация на Python: библиотека Pandas

    Для разделения данных на квантильные корзины в библиотеке Pandas используется функция qcut. Она принимает на вход одномерный массив данных (столбец таблицы) и количество групп, на которые нужно разбить выборку.

    Рассмотрим пример. У нас есть данные о годовом доходе 8 клиентов. Мы хотим разделить их на 4 категории (квартили) для создания персонализированных предложений: базовых, стандартных, премиальных и VIP.

    В результате выполнения этого кода клиенты с доходом 15 000 и 18 000 попадут в «Базовый» сегмент, а клиенты с доходом 55 000 и 120 000 — в «VIP». Обратите внимание: разрыв между 55 тысячами и 120 тысячами огромен, но алгоритм поместил их в одну группу, так как его задача — обеспечить равное количество людей в каждом сегменте (по 25% от общего числа).

    Вычисление точных границ с помощью NumPy

    Иногда аналитику не нужно сразу присваивать текстовые ярлыки клиентам. Бывает необходимо просто узнать сами пороговые значения (границы), чтобы использовать их в дальнейшем коде — например, в условных операторах if/else при разработке бэкенда приложения.

    Для быстрого математического расчета границ идеально подходит библиотека NumPy и ее функция quantile.

    Важное правило при работе с NumPy: параметр всегда должен находиться в диапазоне от до . Если по привычке передать значение (подразумевая 50%), интерпретатор Python выдаст ошибку ValueError.

    Работа с пропущенными значениями (NaN)

    В реальных базах данных IT-компаний часто встречаются пропуски. Например, клиент зарегистрировался, но еще не совершил ни одной покупки, и в поле суммы стоит NaN (Not a Number — не число).

    Если передать массив с пропусками в стандартную функцию np.quantile(), результатом вычисления также станет nan. Это может сломать логику работы программы. Чтобы избежать этой ловушки, следует использовать специальную функцию nanquantile, которая автоматически игнорирует пустые ячейки при расчетах.

    Понимание метода квантилей позволяет бизнесу уйти от субъективных оценок. Вместо того чтобы маркетолог «на глаз» решал, что лояльный клиент — это тот, кто купил 5 раз, данные сами подсказывают объективные границы. Разделив аудиторию на статистически обоснованные сегменты, можно переходить к более сложным многомерным методам анализа поведения.

    3. Метод равных интервалов

    Метод равных интервалов

    При анализе пользовательского поведения и сегментации клиентской базы исследователи регулярно сталкиваются с необходимостью упростить данные. В предыдущем материале мы выяснили, что метод квантилей идеально подходит для ситуаций, когда нужно получить группы с одинаковым количеством клиентов, игнорируя сильный разброс в цифрах. Однако бизнес-логика не всегда опирается на количество людей в группе. Часто маркетологам и аналитикам требуются жесткие, математически выверенные числовые рамки.

    Для решения таких задач применяется метод равных интервалов (в англоязычной литературе часто используется термин equal-width binning). Этот подход позволяет разбить весь доступный диапазон значений на заданное количество отрезков одинаковой ширины, независимо от того, сколько именно клиентов попадет в каждый из них.

    > Дискретизация — это процесс математического преобразования непрерывных числовых переменных (например, точного возраста или суммы покупок до копеек) в дискретные категории (группы или корзины) путем разделения всего диапазона значений на последовательные непересекающиеся интервалы.

    Математическая основа метода

    Суть метода равных интервалов предельно проста и напоминает деление обычной школьной линейки на сантиметры. Алгоритм находит самое маленькое и самое большое значение в выборке, вычисляет разницу между ними, а затем делит это расстояние на желаемое количество групп.

    Формула для расчета ширины одного интервала выглядит следующим образом:

    где — ширина одного интервала, — максимальное значение в исследуемой выборке, — минимальное значение в выборке, — заданное аналитиком количество групп (интервалов).

    Рассмотрим работу формулы на конкретном примере. Представьте, что вы анализируете возраст пользователей нового мобильного приложения. Самому младшему зарегистрированному пользователю 18 лет, а самому старшему — 68 лет. Вы хотите разделить аудиторию на 5 возрастных групп для настройки таргетированной рекламы.

    Подставляем значения в формулу: .

    Ширина каждого интервала составит ровно 10 лет. Таким образом, алгоритм создаст следующие сегменты: 18–28 лет, 28–38 лет, 38–48 лет, 48–58 лет и 58–68 лет. При этом в группе «18–28 лет» может оказаться 10 000 человек, а в группе «58–68 лет» — всего 50. Для данного метода неравномерное распределение людей по корзинам является абсолютно нормальным результатом.

    !Гистограмма, демонстрирующая разделение данных на равные интервалы

    Применение в маркетинге и IT

    Метод равных интервалов незаменим в ситуациях, когда границы категорий имеют самостоятельный физический или бизнес-смысл.

    * Анализ времени активности: Разделение суток на равные 4-часовые интервалы (00:00–04:00, 04:00–08:00 и так далее) для выявления пиковых нагрузок на серверы IT-компании. * Программы лояльности: Создание фиксированных уровней скидок. Например, за каждые потраченные 10 000 рублей клиент получает новый статус. Интервалы жестко зафиксированы: 0–10 000, 10 000–20 000, 20 000–30 000. * Ценовое сегментирование: Группировка товаров в каталоге интернет-магазина по ценовым диапазонам (до 1000 руб., 1000–2000 руб., 2000–3000 руб.), чтобы пользователям было удобнее использовать фильтры.

    Сравнение подходов к сегментации

    Чтобы лучше понимать, когда использовать изученные методы, рассмотрим их ключевые отличия в сводной таблице:

    | Характеристика | Метод равных интервалов | Метод квантилей | | :--- | :--- | :--- | | Принцип деления | Одинаковая ширина числового диапазона | Одинаковое количество объектов в группе | | Уязвимость к выбросам | Очень высокая (выбросы искажают границы) | Низкая (выбросы игнорируются) | | Размер групп | Разный (одни группы могут быть пустыми) | Одинаковый (строго по % в каждой) | | Идеальный сценарий | Возрастные группы, временные отрезки, сетки тарифов | Анализ доходов, RFM-анализ, поиск VIP-клиентов |

    Реализация на Python: функция pd.cut

    В библиотеке Pandas для разделения данных на равные интервалы используется функция cut. В отличие от qcut, которая ориентируется на квантили, cut работает исключительно с абсолютными значениями.

    Рассмотрим базовый пример. У нас есть база данных с суммами покупок клиентов за месяц, и мы хотим автоматически разбить их на 3 категории: с низким, средним и высоким чеком.

    Алгоритм найдет минимум (15) и максимум (90). Разница составит 75. Разделив 75 на 3 группы, мы получим ширину интервала 25. Границы будут следующими: 15–40, 40–65, 65–90. Клиенты автоматически получат соответствующие текстовые метки.

    Пользовательские границы интервалов

    Функция cut обладает мощной особенностью: параметр bins может принимать не только целое число (количество групп), но и список конкретных границ. Это критически важно для бизнеса, где пороги сегментации уже утверждены руководством.

    Допустим, маркетинговый отдел постановил, что «Новички» — это те, кто совершил от 0 до 5 покупок, «Активные» — от 5 до 15, а «Лояльные» — от 15 до 50.

    Обратите внимание на параметр right=False. В математике интервалы могут быть открытыми и закрытыми. По умолчанию Pandas включает правую границу в интервал (то есть интервал выглядит как ). Если мы передаем right=False, интервал становится закрытым слева и открытым справа. Это означает, что клиент с 5 покупками попадет не в группу «Новичок» (от 0 до 4.99), а в группу «Активный» (от 5 до 14.99). Понимание этого нюанса убережет разработчика от логических ошибок при начислении бонусных баллов клиентам.

    Проблема выбросов (аномалий)

    Главный недостаток метода равных интервалов — его крайняя чувствительность к выбросам. Выброс — это значение, которое аномально сильно отличается от большинства других данных в выборке.

    Представьте, что вы анализируете зарплаты 100 сотрудников IT-стартапа. 99 человек зарабатывают от 2 000 до 5 000 долл. в месяц. Но в данных также присутствует зарплата генерального директора — 100 000 долл.

    Если вы попытаетесь разделить эту выборку на 3 равных интервала с помощью pd.cut, алгоритм послушно выполнит математическую задачу. Максимум равен 100 000, минимум — 2 000. Ширина интервала составит примерно 32 666 долл.

    В результате вы получите следующие сегменты:

  • От 2 000 до 34 666 долл. (сюда попадут 99 сотрудников).
  • От 34 666 до 67 333 долл. (здесь будет 0 человек).
  • От 67 333 до 100 000 долл. (здесь будет 1 директор).
  • Такая сегментация абсолютно бесполезна для аналитики. Она не позволяет увидеть разницу между джуниорами (2 000 долл.) и сеньорами (5 000 долл.), так как все они слились в одну гигантскую корзину. Именно поэтому перед применением метода равных интервалов данные необходимо очищать от аномалий, либо использовать метод квантилей, который мы разбирали ранее.

    Разделение выборки по одному признаку (доходу, возрасту или количеству покупок) — это отличный старт. Однако поведение реальных клиентов редко описывается одной переменной. Пользователь может иметь высокий доход, но редко заходить на сайт. Или наоборот: покупать часто, но на маленькие суммы. Чтобы сегментировать аудиторию сразу по множеству параметров и находить скрытые поведенческие паттерны, простых интервалов недостаточно. Для этого в машинном обучении применяются алгоритмы кластеризации.

    4. Кластеризация методом K-Means

    Кластеризация методом K-Means

    При анализе пользовательского поведения аналитики часто начинают с простых подходов. Разделение базы на равные интервалы или использование квантилей отлично работает, когда мы оцениваем клиентов по одному конкретному признаку — например, только по доходу или только по возрасту. Однако в реальном бизнесе поведение человека редко описывается одной цифрой.

    Клиент может иметь высокий доход, но совершать покупки крайне редко. Другой пользователь может покупать часто, но на минимальные суммы, при этом активно взаимодействуя со службой поддержки. Чтобы создать по-настоящему персонализированные предложения, маркетологам и разработчикам необходимо сегментировать аудиторию сразу по множеству параметров. Для решения этой задачи применяется кластеризация — процесс группировки объектов на основе их многомерного сходства.

    > Кластеризация относится к методам машинного обучения без учителя (unsupervised learning). Это означает, что алгоритм самостоятельно ищет скрытые закономерности в данных, не имея заранее подготовленных правильных ответов или размеченных категорий habr.com.

    Один из самых популярных, интуитивно понятных и быстрых алгоритмов для этой задачи — метод K-Means (или алгоритм k-средних).

    Суть алгоритма K-Means

    Главная цель K-Means — разбить множество клиентов на заданное количество групп (кластеров) так, чтобы внутри одной группы люди были максимально похожи друг на друга, а сами группы кардинально различались между собой skillfactory.ru.

    Буква «K» в названии означает количество кластеров, которое аналитик должен задать заранее. Слово «Means» (средние) указывает на математический принцип поиска центра каждой группы.

    Работа алгоритма состоит из нескольких последовательных шагов:

  • Инициализация: Алгоритм случайным образом выбирает точек в пространстве данных. Эти точки называются центроидами — они служат временными центрами будущих кластеров.
  • Распределение: Каждый клиент в базе данных привязывается к тому центроиду, который находится к нему ближе всего.
  • Пересчет центров: После того как все клиенты распределены, алгоритм вычисляет истинный геометрический центр для каждой получившейся группы. Центроиды перемещаются в эти новые координаты.
  • Итерация: Шаги 2 и 3 повторяются. Клиенты снова привязываются к обновленным центроидам, а центроиды снова сдвигаются. Процесс останавливается, когда центроиды перестают менять свое положение — это означает, что алгоритм сошелся.
  • !Интерактивная визуализация алгоритма K-Means

    Математика сходства: Евклидово расстояние

    Как алгоритм понимает, какой клиент «ближе» к центроиду? В машинном обучении сходство измеряется через математическое расстояние между точками в пространстве признаков. Самый распространенный способ — вычисление евклидова расстояния.

    Формула для двух признаков (например, возраста и суммы покупок) выглядит так:

    Где — расстояние между двумя объектами, и — значения первого признака для первого и второго объекта соответственно, и — значения второго признака.

    Рассмотрим пример. У нас есть Клиент А (20 лет, совершил 5 покупок) и Клиент Б (23 года, совершил 9 покупок). Подставим их данные в формулу:

    Расстояние между этими клиентами равно 5 условным единицам. Алгоритм вычисляет такие расстояния от каждого клиента до каждого центроида, чтобы найти минимальное.

    Проблема масштаба и подготовка данных

    Формула расстояния скрывает в себе серьезную ловушку, о которой часто забывают новички. Представьте, что вы кластеризуете клиентов по двум параметрам: возрасту (от 18 до 60 лет) и годовому доходу (от 500 000 до 5 000 000 рублей).

    Разница в возрасте между двумя людьми может составлять 10 лет, а разница в доходе — 1 000 000 рублей. При возведении в квадрат в формуле расстояния миллионы полностью поглотят десятки. Алгоритм решит, что возраст вообще не имеет значения, и разделит людей только по доходу.

    Чтобы этого избежать, перед применением K-Means данные необходимо масштабировать (стандартизировать). Этот процесс приводит все переменные к единому масштабу (обычно со средним значением 0 и стандартным отклонением 1), сохраняя при этом пропорции и отношения между объектами.

    Как выбрать количество кластеров: Метод локтя

    Самый частый вопрос при работе с K-Means: как узнать правильное значение ? Если выбрать 2 кластера, сегментация может получиться слишком грубой. Если 20 — маркетологи не смогут придумать 20 разных стратегий.

    Для поиска оптимального количества групп используется метод локтя (elbow method). Его суть заключается в многократном запуске алгоритма с разным количеством кластеров (от 1 до, например, 10) и измерении ошибки для каждого варианта.

    Ошибка измеряется как сумма квадратов расстояний от каждой точки до центра её кластера (эта метрика называется Inertia). Чем больше кластеров, тем меньше ошибка. Однако на определенном этапе добавление новых кластеров перестает давать существенное улучшение. На графике этот момент выглядит как изгиб руки — «локоть».

    !График метода локтя для выбора количества кластеров

    Реализация на Python: Scikit-learn

    Перейдем к практике. Представим, что мы работаем в IT-продукте по подписке. У нас есть данные об активности пользователей: количество дней с момента последней авторизации (Recency), количество сессий за месяц (Frequency) и суммарное время в приложении в минутах (Duration).

    Для работы нам понадобятся библиотеки pandas для управления данными и scikit-learn для машинного обучения.

    В этом коде мы сначала изолировали числовые признаки, затем пропустили их через StandardScaler. После этого мы инициализировали модель KMeans с двумя кластерами. Параметр random_state фиксирует случайность начального разброса центроидов, чтобы результаты были воспроизводимы, а n_init=10 заставляет алгоритм запуститься 10 раз с разными начальными точками и выбрать лучший результат.

    Метод fit_predict одновременно обучает модель и возвращает номера кластеров (0 или 1) для каждого пользователя.

    Интерпретация результатов для бизнеса

    Получить колонку с цифрами 0 и 1 недостаточно. Аналитик должен перевести математику на язык бизнеса. Для этого мы можем посмотреть на средние значения признаков в каждом кластере.

    Результат группировки покажет нам четкую картину:

    | Кластер | Дней с логина (ср.) | Сессий в месяц (ср.) | Время в приложении (ср.) | Бизнес-интерпретация | | :--- | :--- | :--- | :--- | :--- | | 0 | 52.5 | 2.0 | 27.5 | Оттекающие пользователи. Редко заходят, проводят мало времени. Требуется email-рассылка с реактивацией и скидкой. | | 1 | 2.5 | 24.2 | 1400.0 | Ядро аудитории. Заходят каждый день, сидят долго. Им можно предлагать премиум-функции (upsell) и просить оставить отзыв. |

    Сравнение методов сегментации

    Чтобы закрепить материал всего модуля, сопоставим изученные подходы:

    * Метод равных интервалов (pd.cut): Делит один признак на равные математические отрезки. Идеален для создания тарифных сеток или возрастных групп. Уязвим к выбросам. * Метод квантилей (pd.qcut): Делит один признак на группы с равным количеством людей. Отлично подходит для выделения топ-10% платящих клиентов. Игнорирует аномалии. * K-Means: Группирует клиентов по множеству признаков одновременно. Находит скрытые поведенческие паттерны. Требует масштабирования данных и подбора количества кластеров.

    Кластеризация открывает двери к глубокой персонализации. Вместо того чтобы отправлять одинаковые push-уведомления всей базе, IT-компания может автоматически распределять пользователей по кластерам в реальном времени и адаптировать интерфейс приложения под нужды конкретной группы habr.com.

    5. Практическая реализация на Python

    Практическая реализация на Python

    Анализ данных приносит реальную пользу бизнесу только тогда, когда теоретические концепции превращаются в работающий код. Для маркетологов, менеджеров по продажам и разработчиков программного обеспечения умение сегментировать аудиторию означает возможность предлагать нужный продукт правильному человеку в подходящее время.

    В арсенале аналитика есть три базовых инструмента для решения этой задачи: метод равных интервалов, метод квантилей и алгоритм K-Means. Для их применения стандартом индустрии является язык программирования Python и его мощные библиотеки.

    > Библиотека Pandas предоставляет высокоуровневые структуры данных для быстрого анализа, NumPy отвечает за быстрые математические вычисления, а Scikit-learn содержит готовые реализации алгоритмов машинного обучения habr.com.

    Подготовка набора данных

    Любая аналитическая работа начинается с данных. Представим базу пользователей IT-продукта. У нас есть информация о возрасте клиентов, их ежемесячном доходе и поведенческих метриках: количестве дней с последнего захода в приложение и суммарном времени использования за месяц.

    Создадим синтетический набор данных с помощью Pandas. В реальной практике эти данные обычно загружаются из базы данных SQL или CSV-файла с помощью функции pd.read_csv().

    В этом наборе данных намеренно присутствует аномалия: пользователь под номером 106 зарабатывает 500 000 рублей, что значительно превышает доходы остальных. Это поможет нам наглядно увидеть разницу между методами разделения выборки при практическом применении.

    Метод равных интервалов: Сегментация по возрасту

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

    Для реализации используется функция pd.cut(). Она принимает на вход колонку данных и количество требуемых интервалов (или точный список границ).

    Как алгоритм рассчитывает границы под капотом? Он находит минимальное и максимальное значение возраста. В нашем случае это 19 и 50 лет. Разница составляет 31 год. При делении на 3 интервала ширина каждого составит примерно 10,3 года.

    * Первый интервал: от 19 до 29,3 лет. * Второй интервал: от 29,3 до 39,6 лет. * Третий интервал: от 39,6 до 50 лет.

    Если клиенту 25 лет, он попадает в первую группу. Если 34 года — во вторую. Этот метод удобен своей абсолютной предсказуемостью, но он совершенно не учитывает плотность распределения людей внутри этих рамок. Если бы 90% наших пользователей были младше 25 лет, две другие группы оказались бы практически пустыми.

    Метод квантилей: Устойчивая сегментация по доходу

    Когда данные содержат сильные выбросы (как наш клиент с доходом 500 000 рублей), метод равных интервалов дает сбой. Если разделить доходы от 45 000 до 500 000 на три равные части, большинство обычных пользователей окажутся в одной «бедной» группе, а миллионер — в отдельной. Для бизнеса такая сегментация бесполезна, так как она не позволяет дифференцировать основную массу клиентов.

    Здесь на помощь приходит метод квантилей, реализованный через функцию pd.qcut(). Он делит выборку так, чтобы в каждой группе оказалось строго одинаковое количество людей.

    Алгоритм сортирует всех пользователей по возрастанию дохода и делит список на три равные части. Поскольку у нас 8 пользователей, в каждой группе окажется примерно по 2-3 человека.

  • Низкий доход: пользователи с доходом 45 000, 50 000 и 60 000 рублей.
  • Средний доход: пользователи с доходом 80 000, 90 000 и 110 000 рублей.
  • Высокий доход: пользователи с доходом 120 000 и 500 000 рублей.
  • Аномальный доход в 500 000 рублей не исказил общую картину. Маркетологи получили три сбалансированных сегмента. Теперь отдел продаж может разработать три разных тарифных плана для IT-продукта, понимая, что в каждом сегменте есть реальная аудитория.

    !Схема выбора метода сегментации

    Многомерная кластеризация: K-Means для анализа поведения

    Предыдущие методы работали только с одним признаком (одномерное пространство). Но поведение клиента в IT-сфере описывается множеством метрик. Чтобы найти скрытые паттерны, объединяющие пользователей по нескольким параметрам одновременно, применяется машинное обучение.

    Алгоритм K-Means группирует объекты на основе их математического сходства. Перед его использованием данные необходимо обязательно масштабировать.

    > Масштабирование (стандартизация) выравнивает веса признаков. Без этого алгоритм посчитает признак с большими числами (например, доход в сотнях тысяч) более важным, чем признак с малыми числами (например, дни с последнего логина) towardsdatascience.com.

    Для стандартизации используется класс StandardScaler из библиотеки Scikit-learn.

    Разберем ключевые параметры модели KMeans: * Параметр n_clusters задает желаемое количество групп (в нашем случае ). * Параметр random_state фиксирует генератор случайных чисел для начального положения центроидов. Это гарантирует, что при повторном запуске кода результаты не изменятся. * Параметр n_init=10 указывает алгоритму запуститься 10 раз с разными начальными точками и выбрать наилучший результат. * Метод fit_predict выполняет сразу два действия: обучает модель на масштабированных данных и возвращает массив с номерами кластеров (0 или 1) для каждого пользователя.

    Бизнес-интерпретация кластеров

    Машинное обучение выдает лишь цифры. Задача аналитика — перевести их на язык бизнеса. Для этого вычисляются средние значения признаков внутри каждого кластера с помощью группировки.

    Предположим, расчеты показали следующие результаты:

    * Кластер 0: В среднем 27 дней с последнего логина, 17 минут в приложении. * Кластер 1: В среднем 1.7 дня с последнего логина, 192 минуты в приложении.

    Теперь мы можем дать сегментам осмысленные названия и разработать стратегию:

  • Кластер 0 («Спящие пользователи»): Редко заходят и быстро уходят. Стратегия: отправить push-уведомление с промокодом или email-рассылку с описанием новых функций продукта для реактивации.
  • Кластер 1 («Активное ядро»): Пользуются приложением постоянно и подолгу. Стратегия: предложить премиум-подписку, попросить оставить отзыв в магазине приложений или пригласить в программу бета-тестирования.
  • Определение оптимального количества кластеров в коде

    В примере выше мы жестко задали количество кластеров . Но в реальных задачах заранее неизвестно, на сколько групп лучше разбить аудиторию. Для программного поиска оптимального значения используется атрибут inertia_ объекта модели K-Means.

    > Инерция (Inertia) — это сумма квадратов расстояний от каждой точки данных до центра её кластера. Чем меньше инерция, тем плотнее и однороднее получились группы medium.com.

    Напишем цикл, который обучит модель для разного количества кластеров (от 1 до 5) и сохранит значения ошибки:

    Анализируя вывод этого кода, аналитик ищет точку, где резкое падение ошибки сменяется плавным снижением (метод локтя). Если при переходе от 2 к 3 кластерам инерция падает незначительно, значит, оптимальное количество сегментов равно двум. Это защищает бизнес от создания избыточного количества маркетинговых стратегий, которые будут слишком похожи друг на друга.

    Сводный анализ инструментов

    Выбор конкретного инструмента зависит от бизнес-задачи и структуры исходных данных. Для наглядности сопоставим изученные подходы.

    | Характеристика | Метод равных интервалов (pd.cut) | Метод квантилей (pd.qcut) | K-Means (KMeans) | | :--- | :--- | :--- | :--- | | Количество признаков | Один (одномерный анализ) | Один (одномерный анализ) | Множество (многомерный анализ) | | Принцип разделения | Равные математические шаги | Равное количество объектов | Геометрическое сходство | | Отношение к выбросам | Сильно искажает результаты | Игнорирует аномалии | Чувствителен, требует обработки | | Типичная задача | Возрастные группы, тарифные сетки | Рейтинги (Топ-20%), сегментация по доходу | Поведенческие паттерны, персонализация | | Сложность реализации | Низкая (одна функция) | Низкая (одна функция) | Средняя (требует масштабирования) |

    В реальных проектах эти методы часто комбинируются. Например, аналитик может сначала отфильтровать аномалии с помощью квантилей, затем разбить пользователей на возрастные группы равными интервалами, и уже внутри каждой возрастной группы провести поведенческую кластеризацию с помощью K-Means. Такой комплексный подход позволяет создавать максимально точные и эффективные персонализированные предложения.