Значительная часть усилий, направленных на создание онлайн-рекомендаций, тратится на снижение рисков. Мы знаем, что юные пользователи социальных сетей часто просят совета у своих друзей, прежде чем принять какое-либо решение. Если большинство ваших друзей считают, что T. G. I. Fridays на углу вполне себе приличное заведение, то пойти туда будет менее рискованным решением, нежели в турецкое кафе в следующем квартале. Стремление избегать рисков вполне оправданно, когда речь идет о выборе чего-то дорогостоящего. Не стоит покупать машину, о происхождении которой вы ничего не знаете, а вот обед в незнакомом ресторане может привести к неожиданному открытию.
Занимающаяся видеопрокатом в сети компания Netflix использует рекомендации, чтобы помочь своим клиентам найти (и взять) фильмы, о которых они могли и не слышать. Это серьезная проблема для компании, поскольку многие клиенты, начиная пользоваться сервисом, берут сразу несколько десятков фильмов, которые они хотели посмотреть, после чего перестают пользоваться и оплачивать ежемесячную подписку. А высококачественный рекомендательный сервис может помочь Netflix удержать клиента.
Netflix дает рекомендации на основе принципа «коллективного фильтра». Принцип работает так: вы обозначаете свои предпочтения, назвав несколько фильмов, которые вам нравятся, и несколько, которые не нравятся, и система ищет пользователей с похожими на ваш вкусами, потом собирает информацию об их любимых фильмах и рекомендует вам те, что вы не видели. Вся фишка в том, как вычислить пользователей с похожими вкусами.
Один из популярных методов подобных вычислений называется «коэффициент Отиаи» или «косинус сходства». Компьютерная программа собирает ваши рейтинги ряда фильмов и сравнивает с рейтингами всех остальных пользователей. Если ваши рейтинги полностью совпали с рейтингами другого пользователя – к примеру, вы оба присвоили фильму «Касабланка» пять звезд, а киноленте «Миссия невыполнима» одну, – вы получаете одно очко. Если у вас вообще нет совпадений – получаете ноль. За этим стоят потрясающе эффектные, хоть и слегка головоломные математические расчеты. Представьте себе мир, в котором есть только два фильма – «Касабланка» и «Миссия невыполнима». Первой картине я даю пять звезд, второй одну. Теперь на графике, где «Касабланка» – это ось X, а «Миссия невыполнима» – ось Y, ставим точку в месте пересечения 5 и 1 и проводим линию, проходящую через точки 0,0 и 5,1. Получился вектор моих кинопредпочтений.
Теперь представим, что «Миссия невыполнима» вам очень понравилась, а «Касабланку» вы считаете сильно переоцененной. Тогда вы ставите точку на пересечении 1 и 5, а вектор, проходящий через 0,0 и 1,5, представляет ваши кинопредпочтения. Угол между вашим вектором и моим является мерой нашей с вами схожести, а с помощью косинуса этого угла легко будет вычислить точное выражение этой схожести в диапазоне между 0 и 1 для углов от 0 до 90 градусов. Сложность, конечно, в том, что в мире много больше двух фильмов. С помощью косинуса сходства можно добавить к нашему графику по измерению на каждый новый фильм. Поэтому, когда мы сравниваем наши с вами вкусы в кинематографе, мы играем с векторами, существующими в стотысячемерном пространстве, где на каждый фильм из коллекции Netflix приходится по одному измерению. Можете даже не пытаться представить себе стотысячемерное пространство. Достаточно будет представить трехмерное, в котором два вектора выходят из точки 0, 0, 0 и оба проходят через конкретную точку в обозначенном осями X, Y и Z пространстве. А потом просто поверьте на слово, что математически то же самое можно сделать и в гораздо более многомерном пространстве.
Отбор фильмов с помощью линейной алгебры может привести к самым неожиданным результатам. Вам нравятся старые фильмы со Стивом Мартином и японский мультсериал FLCL? Мне тоже. А еще мне нравятся эпические роуд-муви Вима Вендерса. Ни одна здравая система, основанная на истории кинематографа, не предложит вам новое немецкое кино, исходя из вашего увлечения американским фарсом и японским аниме… а вот коллективный фильтр может, если в системе будет по крайней мере несколько людей с похожими на мой вкусами.
Коллективный фильтр работает, и работает неплохо. Если вы когда-нибудь покупали книгу, рекомендованную Amazon на основе ваших предыдущих покупок, эта система знакома вам, и, скорее всего, с хорошей стороны. Однако Netflix хочет, чтобы коллективный фильтр работал еще лучше. Компания пообещала приз в 100 тысяч долларов любому, кто сможет существенно улучшить алгоритм их системы. Netflix располагает огромными массивами данных о персональных рейтингах, поэтому сравнить новый алгоритм с уже существующим не составляет труда: на основе 50 оцененных пользователем фильмов спрогнозируйте, какую оценку он поставит «Клубу “Завтрак”»? Сравните ваш прогноз с реальным поведением пользователя, и вы поймете, насколько оказались близки. Если предложенные вами прогнозы будут заметно точнее сегодняшнего алгоритма Netflix, считайте, что приз ваш.
Приз выиграла команда компьютерщиков из AT&T и Yahoo!. Ни одного концептуального прорыва они не предложили, тем не менее, найдя сотни мелких недочетов в действующем алгоритме Netflix и исправив их, они добились заметного результата. Компания выплатила полагающийся приз, система стала работать лучше, однако ничего такого сотрясающего основы представлений о коллективном фильтре мы не узнали.
Мой друг Натан Курц не входил в команду победителей, хотя в начале конкурса его алгоритмы входили в первую двадцатку претендентов. Примерно на полпути к финалу Курц понял, что его представления о проблемах рекомендации расходятся с принципами Netflix. Чтобы выиграть объявленный ими конкурс, нужно, чтобы ваш прогноз максимально точно отражал реальные рейтинги пользователей. Таким образом, сведения о том, что пользователь поставит некоему фильму три звезды, – что в качественном выражении означает «так себе», – важны не менее, чем прогноз, что пользователь, скорее всего, поставит фильму пять. Компании нужна эта информация, потому что она хочет предугадывать ваши впечатления о фильме. Но Курцу такая постановка вопроса казалась абсурдной: «Кто станет брать фильм, которому вы дадите три звезды? Мне нужно кино, которое изменит мою жизнь. Я хочу посмотреть фильм, о котором никто никогда не слышал, и полюбить его так глубоко, что придется искать других пользователей, поставивших ему пять звезд, потому что это, скорее всего, родные мне по духу люди».
В ходе обсуждения проблем среди претендентов на приз Netflix стало понятно, что существует небольшая категория фильмов, которые с большим трудом поддаются алгоритмическому подсчету. Один из таких фильмов – «Наполеон Динамит», культовая картина о взрослении в маленьком американском городке, которую пользователи Netflix либо обожают, либо ненавидят. Очень немногие ставят этому фильму три звезды, если уж вы решили поставить ему оценку, то, скорее всего, это будет либо пять, либо единица. Поскольку условием конкурса был максимально близкий прогноз по предпочтениям пользователя, проблема «Наполеона Динамита» стала для многих участников ключевой. Многие из них настраивали систему так, чтобы минимизировать влияние вызывающих наибольшие противоречия фильмов на другие прогнозы, поскольку пять звезд, поставленные «Наполеону Динамиту», практически не влияют на другие предпочтения пользователя.
Для Курца фильмы, подобные «Наполеону Динамиту», стали толчком к пониманию того, что существуют другие способы прогнозирования с помощью коллективного фильтра. Ведь можно замахнуться на высший балл и предлагать только те фильмы, которым вы поставили бы пять, при этом придется пойти на риск, что некоторые, а возможно и многие, фильмы не оправдают прогноз на высочайшую оценку. Жизнь пользователей созданной Курцем системы была бы менее предсказуемой, зато более интересной и насыщенной.
Сам Курц, к сожалению, совершенно непредсказуемо попал в полосу невезения еще до окончания конкурса Netflix. От комаров, живущих в канаве позади его дома в Лас-Крусес, Нью-Мексико, он подхватил лихорадку Западного Нила, после чего два года приходил в себя. Пока Курц боролся с болезнью, его мыслительные способности снизились. «Я уже не мог писать код, – признается он, – а уж о новом, не имеющем аналогов алгоритме не было и речи. Кроме того, я не знал, смогу ли я восстановиться, так что мне пришлось подумать о новом способе зарабатывать себе на жизнь».
Курц выбрал кулинарию и начал делать сорбет с использованием высоких технологий, которые мог бы по-настоящему оценить только Дэвид Арнольд. В его сорбете нет ни эмульгаторов, ни связующих веществ. Там только фруктовый сок, иногда подслащенный свекольным сахаром, замороженный в твердые ледяные цилиндры и измельченный специальным устройством Pacojet, которое титановым ножом перемалывает лед в два слоя микроном толщиной. В результате получается субстанция, которая тает во рту, как крем, но сохраняет вкус первоначального ингредиента.