Data Mining
Game development
August 2012 13

Предсказание ухода лояльных игроков в ММО

В прошлой статье я описал, как мы в Иннове используем data mining для предсказания ухода новичков, только начинающих свой путь в ММОРПГ Aion, на основе логов их действий за пару часов или дней, проведенных в игре. Но у нас также есть и ветераны, посвятившие игре месяцы и годы, и они тоже иногда уходят. Мы уже научились с высокой точностью предсказывать угасание их интереса теми же методами data mining.

Технические детали


Ничего не изменилось с прошлой статьи, под датамайнинг у нас по-прежнему два блэйда Dual Xeon E5630 32Gb RAM, 10 Tb холодного хранилища для исходных и промежуточных данных, 3 Tb горячего хранилища в RAID10 SAS массиве для рабочих данных. Оба сервера под MS SQL 2008R2 – один под БД и один под Analysis Services. Программная часть решения – стандартный пакет Business Intelligence от Microsoft, входящий в SQL Server.

Входные данные – логи активности за 6 месяцев для 38.000 увлеченных игроков.

Что считать уходом


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



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



Что считать моментом ухода – 25 августа, формально последний день игры? Или, например, 16-е, когда мы не видели человека в игре уже неделю? Или 31 июля, первый раз, когда она не запускала игру уже 7 дней подряд? Мы пробовали разные гипотезы, и самые простые не сработали вообще. Предсказывать, что определенный день будет последним днем игры, нам удавалось с печальной точностью 65%.

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

Следующим шагом было обрубание хвоста по эмпирическим правилам, чтобы попробовать добраться до истинного дня, с которого активности начала падать. Самым эффективным был подход «последний день игры, когда суммарная активность за последние 30 суток стала меньше 9 дней», давшим точность порядка 80%. Но эмпирический подход плохо работал для лояльных, но не очень активных игроков, так что пришлось думать дальше.

Переход к сегментированию


Успехом стал переход от бинарного мышления «ушел/остался» к использованию наших уже существующих кластеров активности, от ситуации «игрок покинул нашу игру» к «активность игрока падает ниже порога вероятного ухода». Мы уже пару лет как используем метрику частоты использования (в западной литературе frequency) – число дней активности за последние 30 календарных дней. Проще говоря, мы видим человека в игре каждый день, через день, пару дней в неделю или вообще раз в месяц. По частоте мы строим кластеры активности, сегментируя аудиторию:



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

Новым подходом стало предсказание тех игроков, которым грозит падение в Яму через две недели, для сегментов [7-9], [10-15] и [16-20], и через 3 недели для сегмента [21-25]. То есть мы ищем игроков, теряющих момент импульса, чья активность должна сильно упасть в течение следующей пары недель:



Выбор метрик


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

  • Активность в чате – приватные сообщения, чат клана и общий чат
  • Сбор ресурсов и крафтинг
  • PvP и PvE инстансы
  • Оставшиеся дни оплаченной подписки
  • Максимальный уровень персонажа

Математика


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



Например, мы использовали скользящую сумму игровых дней за 30 календарных, линейно приближенную методом наименьших квадратов, который отлично считается прямо в T-SQL. На вход в модели data mining идут коэффициенты прямой. А для анализа посуточного времени, проведенного в игре, добавился еще шаг выбрасывания дней неактивности:



ETL был фактически переделан заново и все данные перезакачены, но подход был однозначно правильным, первые же прогоны дали на кластере [16-20] на сырых, вручную ненастроенных моделях точность под 80%. Попробовав в итоге более 30 различных метрик, с разными периодами и способами агрегации и подсчета, мы пришли к 80-90% точности предсказания падения в Яму для всех сегментов активности. Уже хороший результат, но мы желали большего. И пару месяцев бились над улучшением точности, пока не пришли к еще одной идее.

Назад в прошлое


Если отложить наши данные по оси времени, то картина была такая:



Нулевая точка – это день, в который мы делаем прогноз на 2-3 недели вперед (в зависимости от сегмента, как описывалось ранее). На вход моделям подаются различные метрики, рассчитанные за разные периоды, например первая производная от скользящего среднего игрового времени за игровой день, рассчитанного за Х дней. Что важно: все метрики считались от точки ноль – за 3 дня, 5 дней и т.д.

Свежей мыслью было заглянуть детальнее прошлое. Например, мы могли бы рассчитать ту же производную от скользящего среднего игрового времени за игровой день за 7 дней, но 14 дней назад — за две недели до нулевой точки. Помните про длинный хвост угасающей активности игрока? По сути, мы придумали рассечение хвоста на составные части и их независимый анализ моделями датамайнинга. Мы попробовали несколько вариантов периодов и глубины прошлого, в частности эффективными были выборки (7,-21) — за семь дней глубиной 21 день назад, (7,-14), (7,-7) и (14,-14).



Эта идея стала прорывной, повысившей точность до 95% почти по всем сегментам:



В черном ящике


Самый поразительный результат данного проекта — итоговые data mining модели, с наилучшими результатами по точности и ошибкам второго рода, целиком базировались на различных математических комбинациях и вычислениях всего от двух метрик – суточной активности и игрового времени!

Для разных сегментов разные метрики были ключевыми в моделях. Например, для [21-25] оказались нужны абсолютно все наши вычисления из детального прошлого. Но для [7-9] важными оказались приближения за 30 дней наряду с ближайшим прошлым – данными за 3 и 5 дней до нулевой точки. Все модели базировались на производных, значениях в точке ноль и коэффициентах линейного приближения – все намного более сложно, чем простые мгновенные значения, которыми мы оперировали при прогнозах по новичкам. Пример итоговой модели (картинка кликабельна):



И если у вас сложилось впечатление, что это какой-то черный ящик с магической математикой, то мы полностью разделяем такое мнение, для нас это черный ящик. Еще при прогнозах по новичкам мы удивились, как мало наш дата майнинг говорит о причинах уходов; мы с высокой точностью уходы предсказывали, но не имели понятия почему так происходит. Но для новичков мы хотя бы получили много данных по их стилям игры и используемым игровым возможностям, и на основе этих данных сделали нашу систему индивидуальных email подсказок. Для ветеранов же мы полностью провалили получение хоть каких-то человеко-читаемых результатов. Это прекрасный, на 95% точный, но полностью непрозрачный черный ящик.

Резюме


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

Этот data mining проект получился намного более сложным, чем предсказания по новичкам. Больше времени ушло на эксперименты и тонкую настройку, но в итоге 95% порог точности был достигнут. Самое интересное, что вообще никакие специфичные для Аиона метрики не попали в финальные модели. Прогнозирование идет исключительно по производным метрикам от суточной активности и проведенному в игре времени, применимым не только для любой игры, но, уверен, и для любого веб-сервиса.
+67
14.9k 221
Comments 86
Top of the day