ID работы: 14726136

Гарри Поттер и Анализ Данных

Статья
R
В процессе
35
автор
Пэйринг и персонажи:
Размер:
планируется Мини, написана 91 страница, 8 частей
Описание:
Посвящение:
Примечания:
Публикация на других ресурсах:
Уточнять у автора / переводчика
Поделиться:
Награды от читателей:
35 Нравится 71 Отзывы 8 В сборник Скачать

Гарри Поттер знакомится с профессором Трелони || ПЕРВЫЕ ПОПЫТКИ ОБУЧИТЬ МОДЕЛИ МАШИННОГО ОБУЧЕНИЯ

Настройки текста

Тили-тили трали-вали Мы модельки обучили, ими лайки предсказали Тили-тили, трали-вали А они нас обманули, много MAE показали Па-рам-пам-пам, Па-рам-пам-пам

Ну во-первых, я молодец, осилил-таки предыдущую часть. А вы, если осилили её, ещё большие молодцы, так как у меня от этих таблиц глаза плавятся. Во-вторых, для понимания дальнейшего анализа, придётся немного понять, что такое машинное обучение (эти ваши нейронные сети, хотя до них я пока не добрался). Итак, звучит очень страшно, но на деле всё куда проще. Модель машинного обучения — далее просто модель, это специальная программа, которая предсказывает значение. Как она работает? Очень просто — мы ей суём данные, и она предсказывает целевое значение — в нашем случае, количество лайков. Предсказывает, естественно, неточно. Просто невозможно точно по имеющимся данным их предсказать, на количество лайков влияет очень много факторов (в том числе, и сам текст фанфика, кто бы мог подумать?). Модели бывают разные и качество модели определяют по ошибке — чем меньше ошибка, тем лучше. Ошибка берётся средняя — в нашем случае берётся MAE (mean absolute error) — грубо говоря, насколько лайков в среднем ошибается модель. Если она сделала 9 абсолютно точных предсказаний и в 1 ошиблась на 1000 лайков, то MAE будет 100. Чтобы научиться предсказывать, модель учится. Сейчас попробую объяснить: по сути модель это сложная математическая формула с параметрами. Например, формула y = 5x — это формула без параметров, а формула y = ax — формула с параметром a. Можно менять этот параметр и значение изменится. Модели — это тоже формулы, но очень сложные, и суть обучения заключается в том, что ей дают кусок данных с уже известными ответами и она старается подобрать такие параметры, чтобы ошибка была наименьшей. Да, нейронные сети также работают. От самой модели, а также кучи нюансов зависит то, насколько хорошо модель будет работать. Для каждого набора данных подходит своя модель, а может и никакая не подходить — бывают данные, которые вообще сложно предсказать! И зачем это нам нужно? Казалось бы, задача — анализ данных, а не попытка предсказать, сколько ваш фанфик заработает лайков. Но во-первых, мне самому интересно, а во-вторых, теоретически с помощью модели можно сделать разные интересные выводы. Тут ещё есть пара нюансов. А именно — утечка данных. Например, в прошлой главе я анализировал такой параметр, как количество лайков, которые получает фанфик за страницу. Для анализа это интересно, а вот для модели — это плохо. Любая более или менее продвинутая модель сможет очень точно вычислить количество лайков благодаря этому параметру, да вот только мы не можем узнать его, не зная количества лайков заранее! Как проверяется модель? Тоже просто. Разбиваем выборку на две части — обучающая и тестовая. Тестовая — это обычно 20% (выборка разбивается случайным образом, грубо говоря, перемешивается). Дальше предсказания делаются на тестовой выборке и получается узнать как бы модель работала на реальных данных. Предварительные результаты Я подготовил данные и обучил несколько моделей, покрутив их параметры. Для этого я удалил все признаки зависящие от лайков, а также и награды от греха подальше, удалил все «горячие» работы и «переводы», так как интересней предсказывать всё же оригинальные работы. Также удалил все работы, имеющие больше 1000 лайков, чтобы выбросы не завышали ошибку. Для начала я обучил кукольную модель. Суть её в том, что я делаю «предсказание», говоря что все работы наберут среднее или медианное количество лайков. Это не настоящая модель, скорее ленивое предсказание, модель без модели. Нужно это для того, чтобы проверить, работает ли моя модель вообще? Так называемая проверка на адекватность. Лучше себя показала кукольная модель, предсказывающая медиану — её ошибка MAE = 89.8, то есть, если всегда предсказывать медиану, то ошибка в среднем будет 89.8 лайков (на всякий случай поясняю — чем меньше MAE, тем лучше). Линейная регрессия показала 86.4. Совсем чуть-чуть лучше. Линейная регрессия, это такая модель, которая берёт все признаки, умножает их на число (которое и подбирает) и добавляет ещё какое-то число. Жаль, что она показала столь низкий результат — её очень легко интерпретировать, то есть наглядно увидеть, какой признак на что влияет. Дерево решений показало 84.1 — уже есть прогресс, но пока мало. CatBoost показал 78.2 И лучшей на данный момент моделью оказался… Случайный лес — он показал 74.9 Это уже заметно лучше, чем «кукольная» модель, но не так уж и сильно лучше. Для тех, кто понимает в машинном обучении: я подбирал параметры через GreedSearch. Пока я не делал нормирование выборки и не занимался feature-инжинирингом (ну то есть, совсем чуть-чуть, например, создавая такие признаки, как длина части и т.п.). Что в планах? Нормировать-таки выборку (вдруг улучшит показометры?), попробовать обучить нейронную сеть, возможно-таки посоздавать признаки. А также, в будущем задействовать текст названия фанфиков и текст краткого описания, попробовать ещё несколько моделей. Таки какие ваши выводы и для чего это надо? Вывод раз: данные действительно нелинейны. Грубо говоря, нет такого, чтобы какой-то фактор сам по себе хорошо влиял на популярность фанфика, а какой-то — однозначно плохо. Например, у нас есть два пейринга А и Б, и две метки жанра — В и Г. А + В даст много лайков, А + Г напротив мало, Б + В даст средне лайков и Б + Г опять много. То есть, один и тот же жанр, одна и та же направленность в разных ситуациях ведёт себя хорошо или плохо. Вывод два: данные не очень легко предсказываются. То есть, они довольно хаотичны, на них влияет множество факторов. Надеюсь, смогу вылечить это дальше копаясь с моделью и фичами + анализом текста. Вывод три: таки с помощью модуля shap я вытащил значимость признаков (правда из CatBoosta, а не леса, так как из леса не вышло вытащить). Это не слишком надёжные сведения, так как модель не слишком хорошо предсказывает, и тем не менее это есть. Значимость признака — это то, насколько он в целом влияет на количество лайков (как в плюс, так и в минус). Сделаю замечания, что для категорий признаки будут вида «относится ли работа к такой-то категории», наример признак «Является ли направленность Слэшем». Вот самые важные признаки с точки зрения модели, в порядке убывания (второе число — параметр важности):

Количество страниц 44.21 Работа Завершена 19.62 Длина главы 14.28 «Возраст работы» 11.93 Гарри Поттер в списке персонажей 11.22 Количество частей 9.21 Работа Слэш 8.68 Гарри Поттер/Том Марволо Реддл в списке пейрингов 7.42 ООС в списке жанров 6.52 ОЖП в списке персонажей 6.44 Количество персонажей 5.97 Попаданчество в списке жанров 5.93 AU в списке жанров 5.81 Работа Джен 4.57 Счастливый финал в списке жанров 4.50 PWP в списке жанров 4.35 Юмор в списке жанров 4.00 Количество жанров 3.64 Драма в списке жанров 3.60 Рейтинг за секс в списке жанров 3.58 Работа имеет рейтинг NC-17 3.41 Гермиона Грейнджер в списке персонажей 3.23 Дамбигад в списке жанров 2.82 Длина названия 2.81

Как вы понимаете, это самые важные признаки, а не все. Всего их технически >400... Замечу, что например, важность признака «Гарри Поттер в списке персонажей» означает само влияние этого признака, то есть важно и то что Поттер в списке, и то что он НЕ в списке. Также важность не показывает как именно влияет признак. Это тоже есть, но сложно описать в цифре. Пока пусть так будет.
Отношение автора к критике
Приветствую критику в любой форме, укажите все недостатки моих работ.
Права на все произведения, опубликованные на сайте, принадлежат авторам произведений. Администрация не несет ответственности за содержание работ.