Как машинное обучение может помочь при анализе поведения игроков |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-12-07 13:23 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 Комментарии: |
|