- PVSM.RU - https://www.pvsm.ru -

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform)

С помощью сервисов Google Cloud Platform можно создать эффективную масштабируемую систему рекомендаций для интернет-магазина.

На рынке интернет-торговли сложилась интересная ситуация. Хотя общий денежный поток вырос, увеличилось и количество продавцов. Это привело к тому, что доля каждого магазина уменьшилась, а конкуренция между становится все напряженнее. Один из способов увеличить средний размер покупки (а значит, и прибыль) – предлагать покупателям дополнительные товары, которые могут их заинтересовать.

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

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

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 1

Кто не знаком с облачной платформой Google Cloud Platform - загляните на серию вебинаров

[19 Января, четверг, 11:00 Мск]
Обзор возможностей облачной платформы Google Cloud Platform [1]

  • Что такое Google Cloud Platform, в чем его преимущества и уникальные характеристики
  • Обзор инфраструктурных сервисов Google Cloud (IaaS/PaaS, Storage, Networking)
  • Обзор Big Data и Machine Learning сервисов Google Cloud

[3 февраля, пятница, 11:00 Мск]
Облачные инфраструктурные сервисы Google Cloud Platform [2]

  • Инфраструктура как сервис (IaaS): предоставление вычислительные мощности в аренду
  • NoOps/PaaS решения на основе Google App Engine
  • Google Container Engine — решения для оркестрации Docker контейнеров

[17 февраля, пятница, 11:00 Мск]
Инструменты для работы с Big Data и Machine Learning от Google Cloud Platform [3]

  • BigQuery — Data warehousing решение для хранения и выборки больших массивов данных в облаке
  • Dataproc — облачные Hadoop кластеры
  • Dataflow — ETL инструментарий для обработки потоковых и пакетных данных
  • CloudML — платформа для разработки и тренировки моделей машинного обучения
  • Также на данном вебинаре мы рассмотрим различные аспекты использования сервисов хранения данных в GCP

[2 марта, четверг, 11:00 Мск]
Практический семинар — пошаговая демонстрация одного из сервисов GCP [4]

  • Мы запланировали сессию с демонстрацией по шагам одного из инструментов GCP.
  • Какого именно — решаете вы. Мы будем собирать ваши пожелания и выберем самый интересный и популярный инструмент.

    

Вебинары ведут

Олег Ивонин

@GoogleAmsterdam
Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 2
Cloud Web Solutions Engineer
Олег занимается разработкой инструментов для анализа стоимости конфигураций и планирования архитектуры облачных решений на основе Google Cloud Platform. Разработки Олега используются в публично доступных инструментах GCP, например Google Cloud Platform Pricing Calculator

Дмитрий Новаковский

@GoogleAmsterdam
Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 3
Customer Engineer
Дмитрий занимается поддержкой продаж и разработкой архитектурных решений для бизнес-заказчиков Google Cloud Platform. Основной фокус Дмитрия находится в области инфраструктурных сервисов: Google Compute Engine (GCE), Google App Engine (GAE) и Google Container Engine (GKE/Kubernetes).

Возможно, по мере прочтения статьи, у вас возникнет желание воссоздать данный сценарий в Google Cloud Platform — перейдя по ссылке [5] вы получите 300$ для тестирования сервисов GCP в течение 60 дней

Сценарий

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

Обзор решения

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

Обработка данных в такой системе обычно выполняется в четыре этапа: сбор, хранение, анализ, подбор рекомендаций (см. рисунок ниже).

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 4

Архитектуру подобной системы схематично можно представить так:

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 5

Каждый этап можно настроить в соответствии с конкретными требованиями. Система состоит из следующих элементов:

  • Front-end. Масштабируемая интерфейсная часть, где фиксируются все действия пользователя, то есть осуществляется сбор данных.
  • Storage. Постоянное хранилище, доступное для платформы машинного обучения. Загрузка данных в него может включать несколько этапов, например импорт, экспорт и преобразование данных.
  • Machine learning. Платформа машинного обучения, где выполняется анализ собранных данных и подбор рекомендаций.
  • Второй элемент Storage. Ещё одно хранилище, которое используется интерфейсной частью в реальном времени или постфактум – в зависимости от того, когда нужно предоставить рекомендации.

Выбор компонентов

Чтобы получить быстрое, удобное, недорогое и точное решение, были выбраны Google App Engine [6], Google Cloud SQL [7] и Apache Spark [8] на базе Google Compute Engine [9]. Конфигурация создана с помощью скрипта bdutil.

Сервис App Engine позволяет обрабатывать десятки тысяч запросов в секунду. При этом он прост в управлении и позволяет быстро написать и запустить код для выполнения любых задач – от создания сайта до записи данных во внутреннее хранилище.

Сервис Cloud SQL также позволяет упростить создание нашего решения. В нем можно развернуть 32-ядерные виртуальные машины с ОЗУ объемом до 208 ГБ и увеличить объем хранилища по запросу до 10 ТБ с 30 операциями ввода-вывода в секунду на каждый ГБ и тысячами одновременных подключений. Этого с избытком хватит для рассматриваемой системы, а также для многих других реальных случаев. К тому же Cloud SQL поддерживает прямой доступ из Spark.

Spark выгодно отличается от классического обработчика Hadoop: его производительность выше в 10-100 раз, в зависимости от конкретного решения. Библиотека Spark MLlib [10] позволяет анализировать сотни миллионов оценок за считанные минуты и чаще запускать алгоритм, чтобы поддерживать актуальность рекомендаций. Для Spark характерны более простые модели программирования, более удобные API и более универсальный язык. Для вычислений этот фреймворк в максимальной степени задействует оперативную память, что позволяет уменьшить число обращений к диску. Он также предельно сокращает число операций ввода-вывода. В рассматриваемом решении для хостинга [11] аналитической инфраструктуры используется Compute Engine. Это позволяет существенно снизить расходы, поскольку оплата начисляется поминутно по факту использования.

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

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 6

Сбор данных

Система рекомендаций может собирать данные о пользователях на основе неявной (поведение) или явной информации (оценки и отзывы).

Собирать данные о поведении довольно просто, поскольку все действия можно регистрировать в журналах без участия самих пользователей. Недостатком такого подхода является то, что собранные данные сложнее анализировать, например выявлять те данные, которые представляют наибольший интерес. Пример анализа данных о явных действиях с использованием записей журналов доступен здесь [12].

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

Хранение данных

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

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

Масштабируемая управляемая база данных отлично подходит для хранения пользовательских оценок и действий, так как она проще в эксплуатации и позволяет уделять больше времени. Cloud SQL [13] не только отвечает этим требованиям, но и позволяет упростить загрузку данных из Spark.

В примере кода ниже представлены схемы таблиц Cloud SQL. В таблицу Accommodation заносится арендуемый объект недвижимости, а в таблицу Rating – пользовательская оценка этого объекта.

CREATE TABLE Accommodation
(
  id varchar(255),
  title varchar(255),
  location varchar(255),
  price int,
  rooms int,
  rating float,
  type varchar(255),
  PRIMARY KEY (ID)
);

CREATE TABLE Rating
(
  userId varchar(255),
  accoId varchar(255),
  rating int,
  PRIMARY KEY(accoId, userId),
  FOREIGN KEY (accoId)
    REFERENCES Accommodation(id)
);

Spark может извлекать данные из разных источников, например из Hadoop HDFS или Cloud Storage. В рассматриваемом решении данные извлекаются напрямую из Cloud SQL с помощью коннектора JDBC [14]. Поскольку задания Spark выполняются параллельно, этот коннектор должен быть доступен для всех экземпляров кластера.

Анализ данных

Для успешного анализа необходимо четко сформулировать требования к работе приложения, а именно:

  • Своевременность. Как быстро приложение должно вырабатывать рекомендации?
  • Фильтрация данных. Будет ли приложение вырабатывать рекомендации, опираясь только на вкусы пользователя, на мнения других пользователей или на сходство товаров?

Своевременность

Первое, с чем нужно определиться, – это как скоро пользователь должен получать рекомендации. Сразу же, в момент просмотра сайта, или позднее, по электронной почте? В первом случае, естественно, анализ должен быть более оперативным.

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

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

Фильтрация данных

Фильтрация – ключевой компонент системы рекомендаций. Вот основные подходы к фильтрации:

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

Cloud Platform поддерживает все три типа, однако для данного решения был выбран алгоритм коллаборативной фильтрации, реализованный на базе Apache Spark. Подробнее о контентной и кластерной фильтрации см. в приложении [15].

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

Данные об оценках и действиях можно представить как набор матриц, а товары и пользователей – как величины. Система будет заполнять недостающие ячейки в матрице, стараясь предсказать отношение пользователя к товару. Ниже приведены два варианта одной матрицы: в первом показаны существующие оценки; во втором они обозначены единицей, а отсутствующие оценки – нулем. То есть второй вариант представляет собой таблицу истинности, где единица указывает на взаимодействие пользователей с товаром.

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 7

В коллаборативной фильтрации применяется два основных метода:

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

В рассматриваемом решении используется модельный метод на основе пользовательских оценок.

Все средства анализа, необходимые для данного решения, доступны в PySpark [16], программном интерфейсе Python для Spark. Scala и Java открывают дополнительные возможности; см. документацию по Spark [17].

Обучение моделей

В Spark MLlib для обучения моделей используется алгоритм ALS (Alternating Least Squares). Чтобы достичь оптимального соотношения между смещением и дисперсией, нам необходимо настроить значения следующих параметров:

  • Ранг – количество неизвестных нам факторов, которыми пользователь руководствовался при выставлении оценки. В частности, сюда можно отнести возраст, пол и местонахождение. В какой-то мере, чем выше ранг, тем точнее рекомендация. Минимальное значение этого параметра будет 5; мы будем увеличивать его с шагом 5 до тех пор, пока разница в качестве рекомендаций не начнет уменьшаться (или пока хватит памяти и процессорной мощности).
  • Лямбда – параметр регуляризации, позволяющий избежать переобучения, то есть ситуации с большой дисперсией и малым смещением. Дисперсия – это разброс сделанных прогнозов (после нескольких проходов) относительно теоретически верного значения для конкретной точки. Смещение – удаленность прогнозов от истинного значения. Переобучение наблюдается, когда модель хорошо работает на учебных данных с известным уровнем шума, а в реальности показывает плохие результаты. Чем больше лямбда, тем меньше переобучение, но выше смещение. Для тестирования рекомендуются значения 0,01, 1 и 10.

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

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 8

  • Итерация – число проходов обучения. В данном примере следует выполнить 5, 10 и 20 итераций для разных комбинаций параметров «Ранг» и «Лямбда».

Ниже приведен примерный код для запуска модели обучения ALS в Spark.

from pyspark.mllib.recommendation import ALS
model = ALS.train(training, rank = 10, iterations = 5, lambda_=0.01)

Выбор модели

Для коллаборативной фильтрации на базе алгоритма ALS используется три набора данных:

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

Чтобы выбрать лучшую модель, нужно вычислить среднеквадратичную ошибку (RMSE), взяв за основу рассчитанную модель, проверочную выборку и ее размер. Чем меньше RMSE, тем точнее модель.

Вывод рекомендаций

Чтобы ускорить вывод результатов анализа, их следует загрузить в базу данных с возможностью запроса по требованию. Для этого отлично подойдет Cloud SQL. Используя Spark 1.4, можно записывать результаты анализа напрямую в базу данных из PySpark.

Схема таблицы Recommendation выглядит следующим образом:

CREATE TABLE Recommendation
(
  userId varchar(255),
  accoId varchar(255),
  prediction float,
  PRIMARY KEY(userId, accoId),
  FOREIGN KEY (accoId)
    REFERENCES Accommodation(id)
);

Анализ кода

Теперь рассмотрим код для обучения моделей.

Извлечение данных из Cloud SQL

Контекст Spark SQL позволяет легко подключиться к экземпляру Cloud SQL через коннектор JDBC. Данные загружаются в формате DataFrame.

pyspark/app_collaborative.py [18]

jdbcDriver = 'com.mysql.jdbc.Driver'
jdbcUrl    = 'jdbc:mysql://%s:3306/%s?user=%s&password=%s' % (CLOUDSQL_INSTANCE_IP, CLOUDSQL_DB_NAME, CLOUDSQL_USER, CLOUDSQL_PWD)
dfAccos = sqlContext.load(source='jdbc', driver=jdbcDriver, url=jdbcUrl, dbtable=TABLE_ITEMS)
dfRates = sqlContext.load(source='jdbc', driver=jdbcDriver, url=jdbcUrl, dbtable=TABLE_RATINGS)

Преобразование DataFrame в RDD и создание наборов данных

В основе работы Spark лежит концепция RDD (Resilient Distributed Dataset) [19] – абстракция, позволяющая работать с элементами параллельно. RDD представляет собой коллекцию данных только для чтения, созданную на базе постоянного хранилища. Такие коллекции могут анализироваться в памяти, что позволяет выполнять итеративную обработку.

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

pyspark/app_collaborative.py [18]

rddTraining, rddValidating, rddTesting = dfRates.rdd.randomSplit([6,2,2])

Примечание. В таблице Rating столбцы должны идти в следующем порядке: accoId, userId, rating. Это связано с тем, что алгоритм ALS делает прогнозы, опираясь на заданные пары «товар/пользователь». Если порядок нарушен, можно либо изменить базу данных, либо переупорядочить столбцы с помощью функции map в RDD.

Подбор параметров для обучения моделей

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

pyspark/find_model_collaborative.py [20]

for cRank, cRegul, cIter in itertools.product(ranks, reguls, iters):

  model = ALS.train(rddTraining, cRank, cIter, float(cRegul))
  dist = howFarAreWe(model, rddValidating, nbValidating)
  if dist < finalDist:
    print("Best so far:%f" % dist)
    finalModel = model
    finalRank  = cRank
    finalRegul = cRegul
    finalIter  = cIter
    finalDist  = dist

Примечание. Функция howFarAreWe использует модель, чтобы прогнозировать оценки в проверочной выборке, основываясь только на парах «товар/пользователь».

pyspark/find_model_collaborative.py [20]

def howFarAreWe(model, against, sizeAgainst):
  # Ignore the rating column  
  againstNoRatings = against.map(lambda x: (int(x[0]), int(x[1])) )

  # Keep the rating to compare against
  againstWiRatings = against.map(lambda x: ((int(x[0]),int(x[1])), int(x[2])) )

  # Make a prediction and map it for later comparison
  # The map has to be ((user,product), rating) not ((product,user), rating)
  predictions = model.predictAll(againstNoRatings).map(lambda p: ( (p[0],p[1]), p[2]) )

  # Returns the pairs (prediction, rating)
  predictionsAndRatings = predictions.join(againstWiRatings).values()

  # Returns the variance
  return sqrt(predictionsAndRatings.map(lambda s: (s[0] - s[1]) ** 2).reduce(add) / float(sizeAgainst))

Расчет наиболее точных прогнозов для пользователя

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

pyspark/app_collaborative.py [18]

# Build our model with the best found values
# Rating, Rank, Iteration, Regulation
model = ALS.train(rddTraining, BEST_RANK, BEST_ITERATION, BEST_REGULATION)

# Calculate all predictions
predictions = model.predictAll(pairsPotential).map(lambda p: (str(p[0]), str(p[1]), float(p[2])))

# Take the top 5 ones
topPredictions = predictions.takeOrdered(5, key=lambda x: -x[2])
print(topPredictions)

schema = StructType([StructField("userId", StringType(), True), StructField("accoId", StringType(), True), StructField("prediction", FloatType(), True)])

dfToSave = sqlContext.createDataFrame(topPredictions, schema)
dfToSave.write.jdbc(url=jdbcUrl, table=TABLE_RECOMMENDATIONS, mode='overwrite')

Сохранение наиболее точных прогнозов

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

pyspark/app_collaborative.py [18]

dfToSave = sqlContext.createDataFrame(topPredictions, schema)
dfToSave.write.jdbc(url=jdbcUrl, table=TABLE_RECOMMENDATIONS, mode='overwrite')

Запуск решения

Пошаговые инструкции по запуску решения, позволяющего выработать и показать рекомендации для отдельного пользователя, доступны в GitHub [21].

Последний фрагмент кода SQL-запроса получает наиболее актуальные рекомендации из базы данных и показывает их на стартовой странице Анны.

Пример результата выполнения этого запроса в консоли Cloud Platform или клиенте MySQL:

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 9

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

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 10

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

Мониторинг заданий

Мониторинг в конфигурации bdutil

Ранее вы уже подключались к головному экземпляру по SSH. В Spark имеется консоль управления, которая позволяет отслеживать выполняемые задания через веб-интерфейс.

По умолчанию консоль доступна через порт 8080. Вам нужно будет открыть доступ к этому порту для каждого экземпляра. Инструкции по добавлению правила брандмауэра доступны здесь [22]. Чтобы открыть консоль, введите в адресную строку браузера внешний IP-адрес экземпляра [23] (например, 1.2.3.4 [24]:8080). На скриншоте ниже в консоли Spark доступны три раздела с информацией о рабочих узлах, а также запущенных и завершенных приложениях.

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 11

Консоль Spark

Мониторинг в Cloud Dataproc

Подробнее о выводе результатов и веб-интерфейсах можно прочитать в документации по Cloud Dataproc.

Руководство

Полное руководство с инструкциями по настройке и примерами исходного кода доступно в GitHub [21].

Приложение

Перекрестная фильтрация

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

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 12

Контентная фильтрация

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

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

Как правило, для определения сходства двух товаров сначала вычисляется коэффициент Отиаи, а затем выполняется поиск ближайших соседей:

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 13

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 14

Результатом будет число в диапазоне от 0 до 1. Чем ближе к 1, тем выше сходство товаров.

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 15

Рассмотрим следующую матрицу:

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 16

Сходство между P1 и P2 вычисляется по следующей формуле:

Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 17

Систему контентной фильтрации можно создать с использованием различных инструментов. Вот два примера:

git clone https://github.com/apache/mahout.git mahout

export MAHOUT_HOME=/path/to/mahout
export MAHOUT_LOCAL=false #For cluster operation
export SPARK_HOME=/path/to/spark
export MASTER=spark://hadoop-m:7077 #Found in Spark console

Примечание. Для работы библиотеки Mahout требуется Maven.

Кластеризация

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

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

from pyspark.mllib.clustering import KMeans, KMeansModel
clusters = KMeans.train(parsedData, 2,
                        maxIterations=10,
                        runs=10,
                        initializationMode="random")

Как улучшить результат?

Чтобы сделать рекомендации ещё более точными, при анализе можно учитывать такие дополнительные факторы, как история его заказов и обращений в службу поддержки, а также демографическую информацию (например, возраст, местоположение и пол). Зачастую эти данные уже хранятся в системах управления взаимодействием с клиентами (CRM) или планирования бизнес-ресурсов (ERP).

Следует также учитывать, что на решение пользователя могут повлиять внешние факторы. При выборе мест для отдыха многие клиенты, особенно семьи с маленькими детьми, ищут экологически чистые районы. В нашем примере можно получить дополнительное конкурентное преимущество, если интегрировать в систему рекомендаций на базе Cloud Platform сторонний API, например Breezometer [27].

Softline - Google Cloud Premier Partner

Softline является крупнейшим в России и странах СНГ поставщиком корпоративных сервисов Google и единственным партнером со статусом Google Cloud Premier Partner. Компания в разные годы была отмечена как лучший партнер года в сегменте Enterprise, партнер года по региону EMEA в сегменте SMB.
Система рекомендаций интернет магазина на основе методов машинного обучения в Compute Engine (Google Cloud Platform) - 18
    

Автор: Softline

Источник [28]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/234613

Ссылки в тексте:

[1] Обзор возможностей облачной платформы Google Cloud Platform: https://goo.gl/sPkA9j

[2] Облачные инфраструктурные сервисы Google Cloud Platform: https://goo.gl/uzI3A9

[3] Инструменты для работы с Big Data и Machine Learning от Google Cloud Platform: https://goo.gl/VUW9OE

[4] Практический семинар — пошаговая демонстрация одного из сервисов GCP: https://goo.gl/0vMPLz

[5] ссылке: https://goo.gl/iSW6EC

[6] Google App Engine: https://cloud.google.com/appengine/docs

[7] Google Cloud SQL: https://cloud.google.com/sql/docs

[8] Apache Spark: https://spark.apache.org/

[9] Google Compute Engine: https://cloud.google.com/compute/docs

[10] Spark MLlib: https://spark.apache.org/mllib/

[11] хостинга: https://www.reg.ru/?rlink=reflink-717

[12] здесь: https://cloud.google.com/solutions/real-time/fluentd-bigquery

[13] Cloud SQL: https://cloud.google.com/sql/

[14] коннектора JDBC: https://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases

[15] приложении: https://cloud.google.com/solutions/recommendations-using-machine-learning-on-compute-engine#Appendix

[16] PySpark: https://spark.apache.org/docs/latest/api/python/pyspark.html

[17] документацию по Spark: https://spark.apache.org/docs/latest/programming-guide.html#initializing-spark

[18] pyspark/app_collaborative.py: https://github.com/GoogleCloudPlatform/spark-recommendation-engine/blob/master/pyspark/app_collaborative.py

[19] RDD (Resilient Distributed Dataset): https://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds

[20] pyspark/find_model_collaborative.py: https://github.com/GoogleCloudPlatform/spark-recommendation-engine/blob/master/pyspark/find_model_collaborative.py

[21] GitHub: https://github.com/GoogleCloudPlatform/spark-recommendation-engine

[22] здесь: https://cloud.google.com/compute/docs/networking?hl=en#addingafirewall

[23] внешний IP-адрес экземпляра: https://cloud.google.com/compute/docs/instances-and-network#externaladdresses

[24] 1.2.3.4: http://1.2.3.4

[25] Использование метода попарной схожести для подбора рекомендаций в Twitter: https://blog.twitter.com/2014/all-pairs-similarity-via-dimsum

[26] Библиотека Mahout: https://mahout.apache.org/

[27] Breezometer: https://www.breezometer.com/

[28] Источник: https://habrahabr.ru/post/319704/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best