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

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


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.


Источник: dtf.ru

Комментарии: