Есть несколько отличных инструментов для A / B-тестирования, которые позволяют автоматически представлять выбор различных вариантов - будь то макет, цвета, шрифты или контент. Они определяют, какой из них наиболее эффективен, и вы принимаете окончательное решение о том, какой один выбрать.

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

Индивидуальный опыт

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

Выбор может быть любым - новостными статьями, песнями, изображениями, продуктами, твитами или любыми другими данными.

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

Учитывая эти варианты, мы хотим изменить порядок в зависимости от личности посетителя.

Для вариантов от A до F они будут отображаться по-разному для этих трех групп пользователей:

Машинное обучение может узнать о ваших пользователях

Первое, что нам нужно сделать, это узнать о наших пользователях.

Мы можем начать со случайного изменения порядка выбора и отслеживания вовлеченности (вероятно, кликов), как это делает A / B-тестирование.

Разница в том, что мы также будем собирать некоторые измеримые данные о пользователе, которые могут начать формировать модель их интересов. Например, мы можем знать их возраст, местонахождение или предыдущую историю покупок. Цель здесь - подумать о том, какие свойства могут быть важны при адаптации опыта.

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

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

Обучение применимо и к другим пользователям

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

Например, учитывая следующую простую таблицу данных о некоторых пользователях:

Name    City     AgeGroup   Loved
--------------------------------------------------------------------
Mat     London   30-40      The Matrix + 28 Days Later
David   London   30-40      The Matrix + 28 Days Later
Piotr   Warsaw   20-30      The Matrix + Jack Strong
Paweł   Warsaw   20-30      The Matrix + Jack Strong
Bill    London   60-70      Jack Strong + Das Boot

Какие фильмы вы бы посоветовали Петру и Павлу?

Учитывая их возрастную группу и тот факт, что им понравилась «Матрица», вероятно, разумно порекомендовать им «28 дней спустя».

Если у нового пользователя есть следующие свойства, какие фильмы вы бы порекомендовали?

Name    City     AgeGroup   Loved
--------------------------------------------------------------------
Peter   London   60-70      ?

Поскольку он живет в Лондоне и принадлежит к той же возрастной группе, что и Билл, мы можем порекомендовать Джека Стронга и Das Boot.

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

Здесь машинное обучение может работать лучше, чем люди.

Наградить модель

Как только мы сможем делать прогнозы, нам нужно отслеживать, успешны они или нет.

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

Наша модель будет замечать закономерности и делать более точные прогнозы в будущем.

Познакомьтесь с ящиком предложений

Suggestionbox - это инструмент от Machine Box, который предоставляет модель машинного обучения именно для этого варианта использования. Для взаимодействия с блоком вы используете простой JSON API.

Ввод этой единственной строки в терминал загрузит и запустит для вас Suggestionbox (при условии, что вы установили Docker):

docker run -p 8080:8080 -e "MB_KEY=$MB_KEY" machinebox/suggestionbox

Если у вас нет MB_KEY - который вам нужен для разблокировки коробки - вы можете получить его с веб-сайта Machine Box.

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

Создать модель

Хотя вы можете создавать модели через API, гораздо проще перейти к http://localhost:8080 и создать модель с помощью консоли.

Я собираюсь создать модель под названием Жанры с пятью вариантами.

Делать предсказания

Теперь наша модель готова начать делать прогнозы.

Конечно, поначалу они не будут очень хорошо информированы, но очень быстро Suggestionbox заметит закономерности в наградах, и мы начнем видеть, как прогнозы становятся все лучше и лучше.

Попробуйте бесплатный симулятор

Suggestionbox поставляется со встроенным симулятором, так что вы можете фактически имитировать реальную активность пользователя, чтобы увидеть, как модель может принять форму. Если вы хотите попробовать это, вы можете сделать это из консоли на http://localhost:8080/console.

Подключение нашей веб-страницы

Нашему JavaScript нужно сделать две вещи:

  1. Попросите модель сделать прогноз и используйте его, чтобы определить порядок элементов на нашей странице,
  2. Когда пользователь успешно взаимодействует с элементом, наградите модель, чтобы она могла учиться.

Предположим, у нас есть объект user, содержащий некоторые соответствующие свойства:

var user = {
    age: 30,
    city: "London",
    interests: ["music", "movies", "politics"]
}

ВНИМАНИЕ! Код JavaScript на этой странице прост и медвежат. Вместо этого вам следует использовать любую технологию пользовательского интерфейса, с которой вы знакомы больше всего.

Сделать прогноз

Чтобы сделать прогноз, мы могли бы сделать что-то вроде этого:

Этот код превращает наш объект user в запрос прогноза и отправляет запрос AJAX к конечной точке /suggestionbox/models/{model_id}/predict.

Помощник makeRequest можно заменить вызовом $ .ajax в jQuery или любым другим API удаленных данных, предоставляемым вашей инфраструктурой пользовательского интерфейса.

Результаты будут выглядеть примерно так:

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

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

Значения reward_id используются для выдачи вознаграждений, если пользователь задействует любой из этих вариантов.

Изменить порядок элементов

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

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

В то же время мы собираемся захватить идентификаторы вознаграждения в объекте, привязанном к идентификатору выбора. Это упростит поиск идентификаторов наград позже.

Наградить модель

Когда пользователь щелкает один из вариантов, мы вызываем эту функцию, которая делает запрос AJAX для вознаграждения модели:

Эта функция просто создает объект запроса вознаграждения, который содержит соответствующий идентификатор (мы ищем его через наш объект rewardIDs) и value, который в большинстве случаев равен 1.

Мы отправляем POST-запрос на /suggestionbox/models/{model_id}/rewards, прежде чем приступить к своим делам.

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

Полный пример

Посмотрите полный пример, проверив игрушку с предложением страницы на GitHub.

Нужна помощь в реализации чего-то подобного?

Наша команда весь день тусуется в Machine Box Community Slack, приглашение на которое вы можете получить сегодня.

Что такое Machine Box?

Machine Box помещает современные возможности машинного обучения в контейнеры Docker, так что разработчики, такие как вы, могут легко включить обработку естественного языка, распознавание лиц, распознавание объектов и т. Д. В свои собственные приложения очень быстро.

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