Здравствуйте, я Кристиан Раддер, я один из основателей OkCupid. Сейчас это один из крупнейших сайтов знакомств в США. Как многие на этом сайте, я математик, и логично, что мы аналитически подходим к любви. Мы называем это алгоритмом совмещения. В общем, алгоритм OkCupid помогает нам определить, стоит ли паре людей сходить на свидание. Мы построили на этом весь наш бизнес. Алгоритм — умное словечко, и люди любят бросаться им как чем-то сложным, но на самом деле это просто упорядоченная, пошаговая инструкция для решения проблемы. Ей вовсе не нужно быть сложной. В этом уроке я объясню, как мы пришли к такому алгоритму, и вы увидите, как всё работает. А почему вообще важны алгоритмы? Зачем вообще этот урок? Обратите внимание на фразу, сказанную мной ранее: пошаговые инструкции для решения проблем, и, как известно, компьютеры прекрасно с этим справляются. Компьютер без алгоритма — по сути, дорогое пресс-папье. А раз компьютеры встречаются на каждом шагу, алгоритмы тоже повсюду. Математика алгоритма OkCupid удивительно проста. Немного сложения, умножения и чуть-чуть квадратных корней. Хотя при его разработке была сложность в понимании того, как взять нечто загадочное — привлекательность — и разбить на части, с которыми может работать компьютер. Сначала для совмещения людей потребовались их данные, что-то, с чем мог бы работать алгоритм. Лучший способ быстро их получить — просто попросить. И мы решили, что OkCupid будет задавать вопросы вроде: «Хотите ли вы когда-нибудь завести детей?», «Как часто вы чистите зубы?», «Нравятся ли вам фильмы ужасов?» А также важные вещи вроде: «Верите ли вы в Бога?» Многие вопросы хороши для поиска совпадений, то есть когда оба человека отвечают одинаково. Например, два человека, которым нравятся ужастики, наверняка более совместимы, чем те, у кого вкусы различаются. Но как насчёт вопроса вроде: «Любите ли вы быть в центре внимания?» Если оба партнёра отвечают «да», у них будут огромные проблемы. Мы сразу поняли это и решили, что нам нужно больше информации в каждом вопросе. Нужно просить людей не только выбрать свой ответ, но и ответ, который они бы хотели получить от партнёра. Это сработало отлично, но нам нужно было ещё одно измерение. Одни ответы говорят о человеке больше, чем другие. Например, вопрос о политике: «Что хуже: сжечь книгу или флаг?», мог бы сказать больше, чем предпочтения в фильмах. И неверно придавать вопросам одинаковый вес, поэтому мы добавили заключительный пункт. В каждом вопросе, задаваемом OkCupid, можно отметить, насколько важен для вас тот или иной аспект, — в диапазоне от безразличия до обязательности. Теперь для каждого вопроса у нас есть три вещи в алгоритме: первое — ваш ответ; второе — предпочтительный ответ потенциального партнёра и третье — важность этого вопроса для вас. С помощью этой информации OkCupid может понять, как сложатся отношения между людьми. Алгоритм оперирует числами и выдаёт результат. В качестве примера посмотрим на вашу совместимость с другим человеком, назовём его «B». Процент совместимости с «B» основывается на вопросах, на которые вы оба ответили. Назовём набор общих вопросов «S». Для простоты мы возьмём маленький набор «S», всего из двух общих вопросов, и вычислим совместимость на их основе. Вот наши два вопроса. Первый, допустим: «Насколько вы грязнуля?» Возможные ответы: «грязнуля», «средне» и «очень аккуратный». Пусть вы «очень аккуратный» и хотели бы, чтобы партнёр ответил так же, а вопрос для вас очень важен. В общем, вы аккуратист. Вы чистюля и хотите, чтобы партнёр тоже был чистюлей. Допустим, «В» немного другой. Он ответил, что сам он «очень аккуратный», но «средняя» аккуратность его устроит в качестве ответа от партнёра, а сам вопрос для него не очень важен. Посмотрим на второй вопрос, мы его уже упоминали: «Вам нравится быть в центре внимания?» Ответы только «да» и «нет». Вы ответили «нет», хотите, чтобы партнёр ответил «нет», а вопрос не очень важен. Теперь «В»: он ответил «да», хочет, чтобы партнёр ответил «нет», потому что хочет быть в центре внимания, а вопрос для него достаточно важен. Давайте это всё вычислим. Первый шаг, поскольку мы используем компьютеры, — присвоить числовые значения понятиям вроде «достаточно важно» и «очень важно», так как компьютеры понимают только числа. В OkCupid мы используем такие величины: «безразлично» — это 0, «не очень важно» — это 1, «достаточно важно» — это 10, «очень важно» — 50 и «обязательно» — 250. Теперь алгоритм делает два вычисления. Первое: насколько ответы «B» удовлетворяют вас, то есть сколько из возможных баллов «B» получил по вашим меркам? Итак, вы обозначили, что ответ «В» на первый вопрос про чистоплотность был очень важен для вас. Он стоит 50 баллов, и «В» ответил верно. Второй вопрос стоит всего 1 балл, потому что вы сказали, что он не очень важен, а ответ «В» не подошёл. Ответы «В» набрали 50 из 51 возможных баллов. Это на 98% удовлетворительно. Довольно хорошо. Второй пункт в алгоритме выясняет, насколько вы подходите «В». «В» дал 1 балл вашему ответу про чистоплотность и 10 ответу на второй вопрос. Из этих 11 баллов, поскольку 1 плюс 10, вы заработали 10, вы удовлетворили друг друга во втором вопросе. Ваши ответы составляют 10 из 11, что на 91% подходит «В». Это неплохо. Последний шаг: взять проценты совместимостей и получить одно число для вас обоих. Чтобы это сделать, алгоритм перемножает ваши баллы и извлекает N-ный корень, где N — число вопросов. Поскольку «S», число вопросов, всего 2, процент совместимости равняется квадратному корню от 98%, умноженному на 91%. Это 94%. 94% — ваша совместимость с «В». Это математическое выражение вашей возможности счастья друг с другом, основанное на том, что мы знаем. Почему алгоритм умножает вместо того чтобы, например, выводить среднее между баллами и заниматься извлечением корней? Эта формула — среднее геометрическое, это отличный способ сочетать значения из больших диапазонов и с очень разными свойствами. То есть она идеальна для романтических соответствий. Есть широкие диапазоны и кучи разных данных — о кино, политике, религии — обо всём. Это имеет смысл на уровне интуиции. Два человека, удовлетворяющих друг друга на 50%, более совместимы, чем два других, чей результат — 0 и 100, потому что симпатия должна быть взаимной. После небольшой корректировки предела погрешности, в случае, если количество вопросов невелико, как и у нас в примере, всё готово. Когда OkCupid находит пары, он проходит через описанные выше шаги. Сначала он собирает данные о ваших ответах, потом совмещает ваши варианты и предпочтения простыми, математическими способами. Возможность брать явления реального мира и делать их понятными микрочипу — самый важный навык в наши дни. Вы пользуетесь предложениями, чтобы рассказать историю человеку, а алгоритмами — чтобы рассказать историю компьютеру. Если вы выучите язык, вы можете рассказывать ваши истории. Я надеюсь, это окажется вам полезным.