Кейс 1. Логистическая регрессия для оттока клиентов

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

Именно поэтому логистическая регрессия здесь подходит особенно хорошо.

Цель кейса

Построить простую модель, которая по поведению пользователя оценивает вероятность его ухода, и понять, как эта вероятность формируется из признаков.

Важно сразу отметить: цель кейса не в точности предсказаний. Данные игрушечные, модель упрощена. Задача – увидеть механику логистической регрессии в действии и связать формулу с практическим смыслом.

Сценарий и признаки

Каждый пользователь описывается тремя числовыми признаками:

  • количество входов в систему,

  • средняя длительность сессии,

  • количество дней с момента регистрации.

Формально один объект выглядит так:

x = [logins, avgSession, daysFromSignup]

Целевая переменная y принимает значение 1, если пользователь ушел, и 0, если он остался.

Мы хотим по вектору xx получить вероятность ухода.

Логистическая регрессия в чистом PHP

В самом простом виде логистическая регрессия – это линейная комбинация признаков, к которой применяется сигмоида. Никакой магии.

Сначала определим вспомогательные функции.

Сигмоида превращает любое число в вероятность от 0 до 1:

Скалярное произведение – это линейная часть модели:

Подготовим небольшой датасет:

Инициализируем веса и смещение:

Обучение происходит с помощью градиентного спуска по log loss. Внутри цикла нет ничего неожиданного: считаем предсказание, ошибку и двигаем веса в сторону уменьшения ошибки.

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

Этот пример намеренно прост. Он показывает ключевую идею: логистическая регрессия – это линейная модель плюс сигмоида и правильная функция потерь. Всё остальное – детали реализации.

chevron-rightКейс 1. Полный пример кода.hashtag

Тот же кейс с RubixML

В реальных проектах редко пишут логистическую регрессию вручную. Гораздо удобнее использовать готовые библиотеки.

Тот же самый кейс с RubixML выглядит заметно короче:

RubixML скрывает детали оптимизации, но концептуально это та же самая модель: линейная комбинация признаков, сигмоида и decision boundary.

Визуализация decision boundary для кейса оттока

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

  • количество входов за последний месяц,

  • количество дней с момента регистрации.

Среднюю длительность сессии можно зафиксировать или исключить из визуализации. Тогда каждый пользователь становится точкой на плоскости признаков.

В этом случае decision boundary логистической регрессии задается уравнением:

w1x1+w2x2+b=0w₁·x₁ + w₂·x₂ + b = 0

Геометрически это прямая, которая делит пространство на две области. По одну сторону находятся пользователи с вероятностью ухода больше 0.5, по другую – с вероятностью меньше 0.5.

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

14.4 Граница принятия решения об оттоке

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

В более высоких размерностях decision boundary перестает быть линией, но логика остается той же – это гиперплоскость в пространстве признаков.

Выводы

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

Мы можем смотреть на веса признаков, менять порог принятия решения, объяснять поведение модели бизнесу и принимать решения не "в лоб", а с учетом риска. Именно за это логистическую регрессию до сих пор любят – несмотря на все более сложные модели.

circle-info

Чтобы самостоятельно протестировать этот код, установите примеры из официального репозитория GitHubarrow-up-right или воспользуйтесь онлайн-демонстрациейarrow-up-right для его запуска.

Last updated