SaaS (от англ. site as a service — сайт как сервис) — способ предоставления программного обеспечения пользователю с помощью сайта в сети интернет. В этом случае пользователь не должен устанавливать себе никакого программного обеспечение, а возможный обмен между различными пользователями данного сервиса становится очень простым. В качестве типичных представителей данного способа предоставления программного обеспечения можно привести: онлайн-кинотеатры, социальные сети и другие часто используемые сервисы. При этом некоторые пользователи со временем теряют интерес к сервису или уходят по каким-либо иным причинам. Иногда данных пользователей можно удержать, предоставив им дополнительные преимущества, например, скидку на пользование платным продуктом. Таким образом, ранее предсказание ухода пользователя становится актуальной задачей и успешно решается с помощью алгоритмов машинного обучения, речь о которых и пойдет далее.
Многие SaaS сайты предоставляют платную подписку для своих услуг. Однако пользователи, пользующиеся данным сервисом, могут хотеть уйти. Это может происходить по разными причинам: недовольство качеством услуг за назначенную цену или низкий в целом уровень обслуживания, недостаточное количество функций или отсутствие необходимости в данном сервисе. При возможности заранее предсказать уход того или иного пользователя, оказывается возможным осуществлять некоторые проактивные действия по его удержанию, что зачастую выгодно.
Возможные пути решения данной проблемы.
В качестве возможных методов предсказания, уйдет пользователь или нет в ближайшее время, можно использовать построение сложных моделей, однако зачастую ресурсы, потраченные на исследование и построение таких моделей могут быть высоки и оказаться невыгодными. Поэтому идея использовать машинное обучения для данной задачи кажется перспективной. Для выбора подходящего метода, проведен исследование.
Задача предсказания уходов пользователей.
Задача предсказания уходов пользователей в ближайшее время представима в виде задачи классификации. Каждый пользователь является объектом и представляется в виде набора некоторых признаков. При этом пользователь относится к одному из двух классов 0 или 1, в зависимости от того, уйдет он в ближайшее время или нет. При этом для классификации можно использовать различные алгоритмы и трудно заранее сказать, какой из них будет эффективнее. Для этого исследуем следующие алгоритмы: метод опорных векторов, решающие деревья, случайный лес и библиотеку xgboost, реализующую бустинг деревьев с помощью оптимизации целевой функции градиентным спуском.
Исследование эффективности алгоритмов.
В качестве входных данных взят массив, представляющий собой заходы пользователей сайта Wild Apricot за последние 16 месяцев. В качестве выходных классов взяты следующие: 1, если пользователь уйдет в ближайшие два месяца, 0 — если этого не произойдет. Тестирование алгоритмов делится на два этапа: обучение на тренировочной выборке и тестирование алгоритма на сбалансированной тестовой выборке с построением матрицы ошибок (у которой в шапке указываются предсказанные классы, а в первом столбце — действительные, то есть, правильные), а также считается средняя точность алгоритма и доверительный интервал для точности. Всего проводится 10 тестирований. Выборка объектов для тестового набора происходит методом hold-out и каждый запуск перед обучением случайно откладывается 100 объектов класса 1 и 100 объекта класса 2 для последующего тестирования на них обученного алгоритма.
Метод опорных векторов.
Метод опорных векторов (англ. SVM, support vector machine) — семейство алгоритмов обучения с учителем (англ. supervised learning), которые используются для задач классификации и регрессии. Основная идея метода — перевод исходных векторов в пространство более высокой размерности и поиск разделяющей гиперплоскости с максимальным зазором в этом пространстве. Для анализа использовалась реализация алгоритма из пакета scikit learn для языка Python с параметрами по умолчанию:
from sklearn import svm
clf = svm.SVC()
При исследовании данного метода получена матрица ошибок, показанная в таблице 1.
Таблица 1
Матрица ошибок метода опорных векторов
|
0 |
1 |
0 |
992 |
8 |
1 |
675 |
325 |
А также средняя точность 0.65 и доверительный интервал (при доверительной вероятности 0.95) для точности — (0.64, 0.68). Такая низкая точность обуславливается, вероятной невозможностью линейно разделить данные классы.
Метод решающих деревьев.
Метод решающих деревьев — средство поддержки принятия решений, использующееся в статистике и анализе данных для прогнозных моделей. Структура дерева представляет собой «листья» и «ветки». На ребрах («ветках») дерева решения записаны атрибуты, от которых зависит целевая функция, в «листьях» записаны значения целевой функции, а в остальных узлах — атрибуты, по которым различаются случаи. Чтобы классифицировать новый случай, надо спуститься по дереву до листа и выдать соответствующее значение. Подобные деревья решений широко используются в интеллектуальном анализе данных. Для данной задачи использовались решающие деревья из пакета scikit learn с параметрами по умолчанию:
from sklearn import tree
clf = tree.DecisionTreeClassifier()
И полученная матрица ошибок представлено в таблице 2.
Таблица 2
Матрица ошибок метода решающих деревьев
|
0 |
1 |
0 |
975 |
25 |
1 |
548 |
452 |
А также средняя точность 0.71 и доверительный интервал (при доверительной вероятности 0.95) для точности — (0.69, 0.73). Как видно, точность уже возросла, потому что используется нелинейное разделение, однако все еще высока, что обуславливается проблемами переобучения решающих деревьев.
Метод случайного леса.
Метод случайного леса — алгоритм машинного обучения, предложенный Лео Брейманом и Адель Катлер, заключающийся в использовании комитета (ансамбля) решающих деревьев. Алгоритм сочетает в себе две основные идеи: метод бэггинга Бреймана, и метод случайных подпространств. Алгоритм применяется для задач классификации, регрессии и кластеризации. Его реализация также есть в пакете scikit learn, чем и воспользуемся, причем выберем количество деревьев в комитете равным 100, что оптимально для данной задачи:
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators = 100)
Проведем эксперимент и построим матрицу ошибок. Она приведена в таблице 3.
Таблица 3
Матрица ошибок для метода случайного леса
|
0 |
1 |
0 |
978 |
22 |
1 |
489 |
511 |
Среднюю точность посчитаем из таблицы 3 и получим 0.74 и доверительный интервал (0.72, 0.76) — при доверительной вероятности 0.95. Точность, как видно, выше, чем у метода решающих деревьев, однако все еще низка из-за проблем с переобучением.
Метод градиентного бустинга деревьев.
Метод градиентного бустинга деревьев из библиотеки xgboost — метод, основанный на использовании приемов бустинга ансамбля деревьев с использованием оптимизации целевой функции, которая также включает в себя регуляризацию. Оптимизация, что отличительно, производится с помощью градиентного спуска к экстремуму целевой функции. При использовании данного метода получим матрицу ошибок, представленную в таблице 4.
Таблица 4
Матрица ошибок для метода градиентного бустинга
|
0 |
1 |
0 |
966 |
34 |
1 |
299 |
701 |
А также среднюю точность 0.83 при доверительном интервале с доверительной вероятностью 0.95, равным (0.82, 0.86). Как видно, результаты получились гораздо лучше, что обусловлено хорошей стойкостью алгоритма к переобучению в сочетании с возможностью нелинейного разделения классов.
Заключение.
Были рассмотрены различные методы предсказания уходов пользователей интернет сервиса по их количеству заходов на протяжении последних 16 месяцев. В ходе исследования получено, что данная задача плохо решается с помощью линейных методов классификации, а также способствует переобучению некоторых алгоритмов. Однако метод градиентного бустинга ансамблей решающих деревьев успешно может быть применим для решения данной задачи.
Литература:
- Eric Matthes Python Crash Course: A Hands-On, Project-Based Introduction to Programming / Eric Matthes — No Starch Press, 2015. – 560 с.
- Christopher Bishop Pattern Recognition and Machine Learning (Information Science and Statistics) / Christopher Bishop — Springer, 2007. — 738 с.