h2o - лучший друг маркетолога в машинном обучении

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

Сегодня мы рассмотрим платформу машинного обучения h2o. Для меня эта платформа давно уже стала эталоном того, как с минимальными усилиями (как по предобработке данных так и по моделированию и пост оценке) можно быстро делать качественное прогнозирование на данных любого масштаба.

Итак, у нас есть датасет клиентов со следующими характеристиками: 

  • Age (Возраст)
  • Income (Доход)
  • Subscribe (флаг: 1 - подписан, 0- не подписан)
Сырые данные выглядят вот так:

raw data
raw data

И мы хотим построить модель машинного обучения, которая позволит:
  1. предсказать флаг Подписки, а также 
  2. оценить качество такой модели машинного обучения.

1. Что такое h2o?

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

h2o interface

2. Загрузка данных в h2o

Загрузку данных в h2o можно осуществлять как через веб-интерфейс так и через R/Python.

Обычно я делаю очень небольшую обработку данных на R и затем загружаю эти данные в h2o.

load data to h2o from R

3. Exploratory Data Analysis (EDA) 

Прежде чем делать модерирование, рекомендуется ознакомиться с данными.

Давайте посмотрим описательные статистики:

descriptive statistics 

Мы видим, что:

  • только 42% клиентов подписаны.
  • Возраст клиентов находится в диапазоне от 25 до 75 лет. Среднее 58.
  • Доход клиентов находится в диапазоне от 50 до 200. Среднее 188.

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

Income distribution

Мы видим, что:

  • 50% клиентов имеют Доход до 107
  • клиентов с Доходом от 150 меньше 10%
4. Моделирование

Моделирование лучше начинать с простых моделей, так как их проще интерпретировать. Поэтому сегодня мы построим логистическую регрессию (GLM).

GLM model

В h2o есть огромное количество параметров (обычно 40+) для каждой модели машинного обучения. 

Сейчас мы выберем только 3 главных:
  • responce_column
    тренирую модель предсказывать колонку Subscribe

  • nfolds = 5
    использую кросс-валидация, чтобы модель была более устойчивой к новым данным

  • seed = 03040
    инициализирую модель неслучайным числом, чтобы легко воспроизводить полученный результат
5. Анализ точности модели

GLM model diagnostics

Из коробки в h2o мы получаем набор графиков и таблиц, которые позволяют нам легко и быстро оценить качество модели.

А. ROC модели = 0.67. В целом, модель отрабатывает лучше, чем случайное подбрасывание монетки (0.5), но все же... модель слабая! Вероятно, стоит поискать дополнительные признаки клиентов, которые могут позволить модели лучше разделять тех, кто подпишется и тех, кто не подпишется. 

Б. Если оптимизировать модель по метрике F1 , то:
  • мы можем предсказать подписавшихся с точностью 80% (ошибка в 20%)
  • мы можем предсказать НЕ подписавшихся с точностью 40% (ошибка в 60%)
В зависимости от стоимости ошибки (точнее предсказывать тех, кто подпишется или точне предсказывать тех, кто не подпишется), мы можем подобрать нужный нам threshold для того, чтобы максимизировать бизнес-результат.

В. Важность переменных:
  • Доход более важен, чем Возраст для предсказания флага Подписки.
Г. Gain/Lift таблица для задач директ-маркетинга:

Gain/Lift table

Прогнозирование дает выгоду в таких диапазонах:
  • максимальную выгоду от предсказания можно получить, если сделать предсказание вероятности, отсортировать по убыванию вероятности и отобрать первые 4% клиентов.

  • выгода от предсказания сохраняется, если сделать предсказание вероятности, отсортировать по убыванию вероятности и отобрать первые 30% клиентов. 
Фактически, не писав кода, я смог продемонстрировать вам базовый сценарий работы с задачей машинного обучения - классификацией. Важно также то, что я легко могу тестировать и другие алгоритмы машинного обучения не занимаясь кодированием и спецификой машинного обучения. 

Comments

Serge Stefaniv said…
Дякую вам! Кортить попробувати це рішення на практиці.
Паша, не нашел где полайкать, потому пишу спасибо тут :)

Popular posts from this blog

IV/WOE - хороший способ понять какой информацией вы обладаете

A/B-тестирование: смотреть на конверсию vs смотреть на продажи

Продуктовая аналитика: влияние продуктовых фич на ретеншн