Как машинное обучение может помочь при анализе поведения игроков

Практический пример на основе матчей NHL.

Data scientist из Zynga Бен Вебер на сайте Gamasutra опубликовал текст о попытке создать метод анализа на основе машинного обучения, который позволит собирать информацию о результатах игровых сессий и соединять их в понятную структуру. Бен показал результаты своей работы на примере датасета о ключевых моментах из матчей NHL. По словам исследователя, этот подход можно применять для анализа поведения в мобильных играх.

Как машинное обучение может помочь при анализе поведения игроков

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

По словам разработчика, он использует библиотеку Featuretools, чтобы значительно сократить время на построение прогностических моделей, и это открывает новый класс проблем для специалистов по data science. Вместо построения прогнозных моделей для отдельных игр и конкретных ответов, сейчас создаются пайплайны машинного обучения, которые могут быть применены к широкому набору проблем.

Автоматизированное конструирование признаков — это процесс создания векторов из тысяч или даже миллионов точек данных для каждого пользователя. Такой подход вдохновлён методами синтеза признаков из глубокого обучения, но фокусируется только на этапе генерации признаков, а не на подгонке модели.

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

Модели склонностей (Propensity Models): какие действия выполняют пользователи? Прогнозирование вероятных действий пользователей полезно для персонализации игрового процесса. Бен использовал библиотеку Featuretools, чтобы автоматизировать разработку признаков для построения моделей склонностей во всех играх Zynga.

Как машинное обучение может помочь при анализе поведения игроков

Рекомендации: какие действия должны быть предписаны? Коллаборативная фильтрация — это ценный инструмент, чтобы предложить игрокам персонализированный контент. Вместо использования перечня прошлых покупок в качестве вектора функций для коллаборативной фильтрации, Бен изучил некоторые прокси-переменные.

Как машинное обучение может помочь при анализе поведения игроков

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

Как машинное обучение может помочь при анализе поведения игроков

Обнаружение аномалий: какие пользователи дают плохой результат? В любой онлайн-среде есть плохие акторы. Бен вместе с командой пробовал применить глубокое обучение для решения этой проблемы. С помощью автокодирования на сгенерированных наборах признаков им удалось создать инструмент для маркировки проблемных пользователей.

Как машинное обучение может помочь при анализе поведения игроков

Разработка признаков — один из основных этапов в рабочем процессе машинного обучения, где необработанные данные преобразуются в «резюме» по игроку. Такие сводки могут использоваться в качестве входных данных для контролируемых и неконтролируемых алгоритмов обучения.

Бен привёл пример того, как его команда выполняет этот шаг, используя примеры данных из датасета NHL Kaggle, в котором собраны детализированные игровые события за последние двадцать лет профессиональных хоккейных матчей.

Бен использует Python для большинства анализов и PySpark для масштабирования пайплайнов машинного обучения. Главная задача в таких пайплайнах — это извлечение данных из хранилища. Обычно разработчики получают данные из «озера данных» на S3, но в этом примере будут использоваться локальные файлы, загруженные из датасета Kaggle. В приведённом ниже фрагменте кода Python показано, как загрузить эти файлы в виде датафреймов Pandas и удалить посторонние столбцы.

# load CSV files into Pandas data frames import pandas as pd game_df = pd.read_csv("game.csv") plays_df = pd.read_csv("game_plays.csv") # clean up the data frame and show the results plays_df = plays_df.drop(['secondaryType', 'periodType', 'dateTime', 'rink_side'], axis=1).fillna(0) plays_df.head()

Датафрейм game_df предоставляет сводки хоккейных матчей, в то время как датафрейм plays_df содержит подробные игровые события, такие как вбрасывания и броски. Последняя команда в приведённом выше фрагменте отображает первые пять игровых записей.

Вот эти записи
Вот эти записи

Цель Бена и его команды состоит в том, чтобы перевести детализированные события из узкого и глубокого формата в мелкий и широкий, где одна строка содержит сотни столбцов и результатов одной игры. Чтобы выполнить этот процесс, они используют двухэтапное преобразование, в котором сначала кодируют набор столбцов, а затем выполняют глубокий синтез функций на датафреймах с результатами.

Например, для датасета NHL нужно закодировать столбцы «events» и «description». Featuretools предоставляет функцию encode_features для преобразования столбцов со многими возможными значениями в фиктивные столбцы с двоичными значениями. Прежде чем использовать эту функцию, нужно закодировать датафрейм plays как множество сущностей, которое предоставляет метаданные о датафреймах библиотеке Featuretools.

Во фрагменте кода ниже показано, как создать множество сущностей для датафрейма plays; указать, какие столбцы являются категориальными; закодировать столбцы «events» и «description». Результатом является более широкий фрейм данных с фиктивными переменными для этих столбцов.

# load the featuretools library import featuretools as ft from featuretools import Feature # create an entity set and list the categorical variables es = ft.EntitySet(id="plays") es = es.entity_from_dataframe(entity_id="plays", dataframe=plays_df ,index="play_id", variable_types = { "event": ft.variable_types.Categorical, "description": ft.variable_types.Categorical }) # one-hot encode the features and show the results f1 = Feature(es["plays"]["event"]) f2 = Feature(es["plays"]["description"]) encoded, defs = ft.encode_features(plays_df, [f1, f2], top_n=10) encoded.head()

Выходные данные этого фрагмента показаны в таблице ниже. Датафрейм содержит то же количество записей, что и раньше, но теперь в нём 36, а не 18 столбцов.

Как машинное обучение может помочь при анализе поведения игроков

Теперь можно выполнить глубокий синтез функций с помощью функции dfs в Featuretools. В приведённом ниже фрагменте кода показано, как преобразовать датафрейм с фиктивными переменными в множество сущностей, а затем нормализовать его. Функция normalize_entity указывает, что записи игр должны быть сгруппированы в наборы с помощью столбца game_id. После запуска dfs на результирующем множестве сущностей получится датафрейм с одной записью на игру и сотнями столбцов, описывающих действия в матче.

# create an entity set from the one-hot encoding es = ft.EntitySet(id="plays") es = es.entity_from_dataframe(entity_id="plays", dataframe=encoded, index="play_id") # group play events into sets of games es = es.normalize_entity(base_entity_id="plays", new_entity_id="games", index="game_id") # perform feature synthesis and show the results features,transform=ft.dfs(entityset=es, target_entity="games",max_depth=2) features.head(2)

Результирующий датафрейм со сгенерированными функциями показан в таблице ниже. Датафрейм plays теперь состоит не из 36 столбцов, а переведён в датафрейм game summary с более чем 200 столбцами.

Как машинное обучение может помочь при анализе поведения игроков

Этот способ помогает автоматизировать большую часть процесса сбора информации о поведении пользователей. Здесь был рассмотрен пример с игровыми данными NHL, но тот же процесс может быть применён к отслеживанию событий для мобильных игр. Полный код примера доступен на GitHub.

2121
17 комментариев

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

6
Ответить

А вообще если приводить более приземленный пример, то тот же анализ поведения позволяет узнать, как сделать микротранзакции более привлекательным для игроков. И это мне вообще не нравится, если честно

3
Ответить

Любая власть всегда озабочена контролем населения, так что можешь ожидать еще худших нововведений. 

1
Ответить

Кратко: в статье написано о том, как разводить игроков на мобилочках на бабки еще эффективнее

4
Ответить

проблема в том, что там даже этого не написано)

Ответить

Была (и слава, блять, б-гу, сдохла) такая контора как Scientific Revenue. Вот их рекламный ролик для ознакомления.  https://vimeo.com/154271693  

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

Учитывая то, что Зинга - компания, пилящая мобилки, в которых (и это Истина В Последней Инстанции) самая сраная, самая жестокая, самая наглая и, к сожалению, прибыльная, монетизация, мне страшно, что СайнтификРевенью переродится. И не дай б-г, это увидят ЕА, Активижн и прочие так называемые триплэй-корпорации, желающие заработать все деньги. 

3
Ответить

Они уже над этим работают. См патент на систему матчмейкинга от Activision 

Ответить