Кейс 1. Логистическая регрессия для оттока клиентов
Отток пользователей – одна из самых типичных задач бинарной классификации. Пользователь либо остается в продукте, либо уходит. При этом нас интересует не просто ответ "да или нет", а вероятность ухода: насколько риск высок и стоит ли реагировать.
Именно поэтому логистическая регрессия здесь подходит особенно хорошо.
Цель кейса
Построить простую модель, которая по поведению пользователя оценивает вероятность его ухода, и понять, как эта вероятность формируется из признаков.
Важно сразу отметить: цель кейса не в точности предсказаний. Данные игрушечные, модель упрощена. Задача – увидеть механику логистической регрессии в действии и связать формулу с практическим смыслом.
Сценарий и признаки
Каждый пользователь описывается тремя числовыми признаками:
количество входов в систему,
средняя длительность сессии,
количество дней с момента регистрации.
Формально один объект выглядит так:
x = [logins, avgSession, daysFromSignup]Целевая переменная y принимает значение 1, если пользователь ушел, и 0, если он остался.
Мы хотим по вектору x получить вероятность ухода.
Логистическая регрессия в чистом PHP
В самом простом виде логистическая регрессия – это линейная комбинация признаков, к которой применяется сигмоида. Никакой магии.
Сначала определим вспомогательные функции.
Сигмоида превращает любое число в вероятность от 0 до 1:
Скалярное произведение – это линейная часть модели:
Подготовим небольшой датасет:
Инициализируем веса и смещение:
Обучение происходит с помощью градиентного спуска по log loss. Внутри цикла нет ничего неожиданного: считаем предсказание, ошибку и двигаем веса в сторону уменьшения ошибки.
Теперь можно сделать прогноз для нового пользователя:
Этот пример намеренно прост. Он показывает ключевую идею: логистическая регрессия – это линейная модель плюс сигмоида и правильная функция потерь. Всё остальное – детали реализации.
Тот же кейс с RubixML
В реальных проектах редко пишут логистическую регрессию вручную. Гораздо удобнее использовать готовые библиотеки.
Тот же самый кейс с RubixML выглядит заметно короче:
RubixML скрывает детали оптимизации, но концептуально это та же самая модель: линейная комбинация признаков, сигмоида и decision boundary.
Визуализация decision boundary для кейса оттока
Чтобы сделать поведение модели наглядным, полезно временно упростить задачу и оставить только два признака. Например:
количество входов за последний месяц,
количество дней с момента регистрации.
Среднюю длительность сессии можно зафиксировать или исключить из визуализации. Тогда каждый пользователь становится точкой на плоскости признаков.
В этом случае decision boundary логистической регрессии задается уравнением:
Геометрически это прямая, которая делит пространство на две области. По одну сторону находятся пользователи с вероятностью ухода больше 0.5, по другую – с вероятностью меньше 0.5.
Важно подчеркнуть: хотя граница линейна, вероятность меняется плавно. Чем дальше точка от границы, тем увереннее модель в своем прогнозе.

Такая визуализация хорошо иллюстрирует ключевую идею логистической регрессии: модель линейно разделяет пространство признаков, но результат интерпретируется через вероятность, а не через жесткое правило.
В более высоких размерностях decision boundary перестает быть линией, но логика остается той же – это гиперплоскость в пространстве признаков.
Выводы
Этот кейс показывает, почему логистическая регрессия так часто используется для задач оттока. Она проста, интерпретируема и сразу работает с вероятностями.
Мы можем смотреть на веса признаков, менять порог принятия решения, объяснять поведение модели бизнесу и принимать решения не "в лоб", а с учетом риска. Именно за это логистическую регрессию до сих пор любят – несмотря на все более сложные модели.
Чтобы самостоятельно протестировать этот код, установите примеры из официального репозитория GitHub или воспользуйтесь онлайн-демонстрацией для его запуска.
Last updated