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

ПРОБЛЕМА. Учитывая наблюдения за поведением пользователей в прошлом, можно предсказать, какие другие вещи понравятся тому же пользователю. Например, исходя из истории просмотров Али (Парк Юрского периода, Энн Холл), понравится ли ему «Матрица» или «Ящики гнева»?

Мы можем графически представить пользовательские предпочтения в виде связей с «людьми» с одной стороны и «вещами» с другой, такими как фильмы. Здесь прочность соединений визуально представлена ​​толщиной линий.

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

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

Мы используем матрицу, которая представляет собой набор чисел, организованных в строки и столбцы, где строки — это пользователи, а столбцы — элементы (в данном случае ' фильмы») и каждая ячейка в этой матрице содержит число, описывающее, насколько каждому человеку нравится тот или иной фильм, например, мы можем использовать шкалу от 0 до 4 где 0 — ненавижу, 2 — нейтрально, 4 — нравится.

В любой момент будет некоторый набор данных о предпочтениях пользователя и фильмов, но он будет неполным, потому что каждый пользователь видел и оценивал только несколько фильмов. Таким образом, проблема сводится к предсказанию этих отсутствующих значений. Как мы должны делать эти предсказания?

Фильтрация на основе содержания.

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

Он начинается с маркировки каждого человека и фильмов некоторыми известными атрибутами или тем, что мы называем функциями, такими как «экшн» и «комедия», что означает, что если Али любит «комедию» и ненавидит «экшн», мы можем представить это как [3, 0]. Каждый фильм также сопоставляется с каждой функцией таким же образом. Например, в «Матрице» нет комедии и много действия, поэтому мы можем обозначить ее как [0, 4].

Чтобы определить, понравится ли фильм кому-то, мы перемножаем эти факторы. Таким образом, мы можем представить силу связи между Али и Матрицей как [3x0 + 0x4 = 0]. Так что наша оценка такова, что она будет ненавидеть фильм.

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

Первая определяет сопоставления между пользователем и функциями, а вторая матрица отображает фильмы и функции, и, перемножая эти матрицы вместе (умножение матриц), мы можем получить предполагаемую силу связи между любым человеком и фильмом.

Мы можем нормализовать наши данные, чтобы значения находились в диапазоне от 0 до 4.

Это один из способов решения проблемы, известной как фильтрация контента.

Проблема в том, что это слишком упрощенно и не очень точно, потому что в фильме явно есть более важные черты, чем просто комедия или боевик. Очевидный способ улучшить это просто включить больше функций.

Когда Netflix начинал, он делал именно это: он просил новых пользователей заполнить длинный список вопросов об их предпочтениях, прежде чем предлагать им предлагаемые фильмы. Это приводит к необходимости собирать все эти данные о предпочтениях пользователей. Это не только обременительно для пользователей, но и чревато неудачами, поскольку мы не всегда хорошо описываем собственные предпочтения. Иногда мы просто не можем объяснить, почему нам что-то нравится, мы просто любим. Это подводит нас к другому подходу, который называется Совместная фильтрация.

Совместная фильтрация основана на идее, что вам, вероятно, что-то понравится, людям с похожими привычками просмотра также понравится. Эта идея была популяризирована в статье 2009 года Коэна Белла и Криса Волински.

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

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

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

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