Проект классификации наук о данных.

Чтобы узнать о мотивации и деловых аспектах этого проекта, пожалуйста, смотрите мой сопровождающий медиа пост. Код этого проекта можно найти на github.

Дизайн

Мой проект представляет собой классификационную модель для определения вероятности того, что буктокеру понравится конкретная книга На дороге Джеллико (2006 г.), которая имеет рейтинги от 48 тысяч пользователей Goodreads на основе их истории чтения.

Каждое наблюдение является рецензентом книги, который должен быть классифицирован как любящий книгу, если они оценили ее на 4–5 звезд (1), и не понравившиеся книге, если они оценили ее на 1–3 звезды (0).

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

Данные

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

Goodreads.com ограничивает количество отображаемых отзывов до 200, поэтому, опробовав различные сочетания порядка сортировки (по умолчанию/самые новые/самые старые) и звездного рейтинга (1–5 звезд), я смог собрать 4351 отчетливый отзыв со сбалансированным классы и соответствующая информация:

  • Обзоры целевой книги с рейтингом рецензентов и идентификатором пользователя. (4351, 2).
  • История чтения рецензентов с идентификаторами книг. (458921, 11).
  • Данные из книг, которые рецензенты читали в прошлом. (8503, 15).

Особенности уровня Reader-Books

Я начал с нескольких функций на уровне читателей, объединив их читательское поведение по всем книгам, которые они прочитали, и проверил их производительность.

  • Как они оценили книгу. - Определить смещение рейтинга. Щедры ли они на оценки?
  • Как их рейтинг отличался от среднего рейтинга книги. — Больше информации о рейтинговом поведении. Щедры ли они в оценках даже для книг с низким рейтингом? Они склонны быть более критичными, чем средний читатель?
  • Сколько книг они прочитали. — Они плодовитые читатели?
  • Длина книги. — Они склонны читать длинные романы или повести?
  • Количество рецензий на книгу. — Читают ли они бестселлеры?

Различные модели были обучены этим функциям, при этом классификатор Random Forest показал наилучшую производительность при проверке данных, как показано на кривой ROC ниже. Это ближайший к верхнему левому углу, где могла бы быть идеальная модель. Модель, достигающая этого, означала бы, что у нас может быть жесткий порог классификации, который фиксирует все истинные положительные результаты, не обнаруживая никаких ложных срабатываний.

Особенности уровня Reader-Books-Genres

Хотя эти функции предоставляли ценную информацию, мне хотелось большей детализации, чтобы уловить вкусы читателей. Поэтому я сделал агрегацию на уровне поджанров. Каждая книга имеет десять поджанров, связанных с ней. «Историческая» и «романтическая» книга может сильно отличаться от «исторической» и «документальной» или «романтической» и «фэнтезийной». То, что они прочитали одно из них, и то, насколько они были критичны, может дать нам важную информацию о читателе. Но попытка собрать эту информацию сопряжена с некоторыми проблемами, поэтому я сосредоточился на том, чтобы расставить приоритеты в данных с наиболее актуальной информацией.

Выбор модели: Отсутствует структурно важная информация.

Имея 460 уникальных поджанров, в большинстве точек данных отсутствует информация для большинства жанров, поэтому количественная оценка их отношения к конкретному поджанру представляет собой сложную задачу. Простое использование количества книг, которые они прочитали о поджанре, не говорит нам, понравился он им или нет. Их средний рейтинг для этого жанра является лучшим показателем, и тот факт, что у них нет оценок для этого жанра, также является ценной информацией, это данные, которые отсутствуют не случайно (MNAR). Тот факт, что читатель не оценил ни одну книгу в жанре фэнтези, говорит нам кое-что об их вкусах и отличается от критической оценки. Так что отбрасывание поджанров с большей частью отсутствующей информации или приписывание отсутствующих значений было неправильным решением. Вместо этого я использовал модель XGBoost, так как она изучает направления ветвления для отсутствующих значений во время обучения. Такая модель может узнать, в каком направлении двигаться, когда отсутствует рейтинг для поджанра.

Излишние жанры

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

Правильно фиксировать поведение читателей. Учитывая распределение рейтинга книг.

Сравнивая оценку читателя со средней оценкой этой книги, мы узнаем, критикуют ли они эту книгу или хвалят ее, но, сопоставляя ее с распределением оценок книги, мы рассматриваем новое измерение: насколько распространена/редка эта оценка.

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

Тестирование влияния инженерных метрик

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

Мы узнали, что для некоторых читателей «перцентильные» точки данных повлияли на модель больше, чем любая другая жанровая метрика, и имеют более широкое среднее влияние (функции упорядочены по важности, по убыванию). Это подтверждает, что процентили для каждого жанра лучше всего подходят для прогнозирования поведения читателей.

Снижение размерности: выбор жанра

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

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

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

Об этом свидетельствует приведенный ниже сюжет Shap Beeswarm, где жанр «Культурная › Австралия», который не входит в число 50 наиболее распространенных жанров, занимает третье место по значимости. То, что такие книги действительно нравились в прошлом (ярко-розовые точки), означает более высокую вероятность того, что целевая книга понравится, а наоборот – не любить (синие точки) или вообще не читать их (серые точки). Это на самом деле имеет смысл, так как целевая книга установлена ​​​​в Австралии.

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

Настройка гиперпараметров

Гиперпараметры настраивались путем повторения различных параметров с 10-кратной перекрестной проверкой с ранней остановкой, а затем выполнялись рандомизированные поиски наиболее эффективных или близких к ним значений.

Как только я сузил гиперпараметры, которые минимизировали логистические потери в тестовом наборе, я переобучил модель, чтобы включить эти данные и протестировал производительность на никогда не виденном проверочном наборе. Новая модель имела показатель точности 0,67, но скорректировав пороговое значение для присвоения положительному классу («книга понравится») только тем читателям, у которых вероятность того, что книга понравится более 80%, оценка повышается до . 79. Это означает, что 79% читателей, которые прогнозировали, что им понравится книга, действительно понравились ей.

Заключение

Конечная цель этого проекта — выбрать группу читателей, которые вряд ли создадут негативный контент о книге в социальных сетях, чтобы отправить им ее печатные копии. Нам не нужно определять всех читателей, которым книга понравится, но избегать тех, кому книга не понравится. 21% читателей, отнесенных окончательной моделью к положительному классу, дали ложноположительный результат и фактически поставили книге неблагоприятную оценку. Это ни в коем случае не идеально, но превосходит наивное предположение.

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