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

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

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

З цієї статті ви дізнаєтеся, як на базі Cloud Platform налаштувати середовище для підтримки базової системи рекомендацій, яку з часом можна буде доопрацювати і розширити.

У ній описується рішення для сайту агентства з оренди нерухомості, що дозволяє підбирати і пропонувати рекомендації користувачам.



Хто не знайомий з хмарної платформою Google Cloud Platform — загляньте на серію вебінарів
[19 Січня, четвер, 11:00 Мск]
Огляд можливостей хмарної платформи Google Cloud Platform
  • Що таке Google Cloud Platform, в чому його переваги та унікальні характеристики
  • Огляд інфраструктурних сервісів Google Cloud (IaaS/PaaS, Storage, Networking)
  • Огляд Big Data і Machine Learning сервісів Google Cloud


[3 лютого, п'ятниця, 11:00 Мск]
Хмарні інфраструктурні сервіси Google Cloud Platform
  • Інфраструктура як сервіс (IaaS): надання обчислювальні потужності в оренду
  • NoOps/PaaS рішення на основі Google App Engine
  • Google Container Engine — рішення для оркестрации Docker контейнерів


[17 лютого, п'ятниця, 11:00 Мск]
Інструменти для роботи з Big Data і Machine Learning від Google Cloud Platform
  • BigQuery — Data warehousing рішення для зберігання та вибірки великих масивів даних в хмарі
  • Dataproc — хмарні Hadoop кластери
  • Dataflow — ETL інструментарій для обробки потокових і пакетних даних
  • CloudML — платформа для розробки і тренування моделей машинного навчання
  • Також на даному вебінарі ми розглянемо різні аспекти використання сервісів зберігання даних в GCP


[2 березня, четвер, 11:00 Мск]
Практичний семінар — покрокова демонстрація одного з сервісів GCP
  • Ми запланували сесію з демонстрацією по кроках одного з інструментів GCP.
  • Якого саме — вирішуєте ви. Ми будемо збирати ваші побажання і виберемо самий цікавий і популярний інструмент.

Вебінари ведуть
Олег Івонін
@GoogleAmsterdam

Cloud Web Solutions Engineer
Олег займається розробкою інструментів для аналізу вартості конфігурацій і планування архітектури хмарних рішень на основі Google Cloud Platform. Розробки Олега використовуються в публічно доступних інструментах GCP, наприклад Google Cloud Platform Pricing Calculator
Дмитро Новаковський
@GoogleAmsterdam

Customer Engineer
Дмитро займається підтримкою продажів і розробкою архітектурних рішень для бізнес-замовників Google Cloud Platform. Основний фокус Дмитра знаходиться в області інфраструктурних сервісів: Google Compute Engine (GCE), Google App Engine (ПФУ) і Google Container Engine (GKE/Kubernetes).

Можливо, по мірі прочитання статті, у вас виникне бажання відтворити цей сценарій в Google Cloud Platform — перейшовши по посилання ви отримаєте 300$ для тестування сервісів GCP протягом 60 днів
Сценарій
Анна шукає житло на час відпустки на спеціалізованому сайті. Раніше вона вже орендувала житло через цей сайт і залишила кілька відгуків, тому в системі достатньо даних, щоб підібрати рекомендації на основі її переваг. Судячи з оцінок в профілі Анни, зазвичай вона знімає будинку, а не квартири. Система повинна запропонувати їй щось із цієї ж категорії.

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

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


Архітектуру подібної системи, що схематично можна представити так:


Кожний етап можна налаштувати у відповідності з конкретними вимогами. Система складається з наступних елементів:

  • Front-end. Масштабована інтерфейсна частина, де фіксуються всі дії користувача, тобто здійснюється збір даних.
  • Storage. Постійне сховище, доступне для платформи машинного навчання. Завантаження даних в нього може включати кілька етапів, наприклад імпорт, експорт і перетворення даних.
  • Machine learning. Платформа машинного навчання, де виконується аналіз зібраних даних та підбір рекомендацій.
  • Другий елемент Storage. Ще одне сховище, яке використовується інтерфейсної частини в реальному часі або постфактум – в залежності від того, коли потрібно надати рекомендації.
Вибір компонентів
Щоб отримати швидкий, зручний, недорогий і точне рішення, були обрані Google App Engine, Google Cloud SQL і Apache Spark на базі Google Compute Engine. Конфігурація створена з допомогою скрипта bdutil.

Сервіс App Engine дозволяє обробляти десятки тисяч запитів в секунду. При цьому він простий в управлінні і дозволяє швидко написати і запустити код для виконання будь-яких завдань – від створення сайту до запису даних у внутрішнє сховище.

Сервіс Cloud SQL також дозволяє спростити створення нашого рішення. В ньому можна розгорнути 32-ядерні віртуальні машини з ОЗП об'ємом до 208 ГБ і збільшити обсяг сховища за запитом до 10 ТБ з 30 операціями вводу-виводу в секунду на кожен ГБ і тисячами одночасних підключень. Цього з надлишком вистачить для розглянутої системи, а також для багатьох інших реальних випадків. До того ж Cloud SQL підтримує прямий доступ з Spark.

Spark вигідно відрізняється від класичного обробника Hadoop: його продуктивність вище в 10-100 разів, в залежності від конкретного рішення. Бібліотека Spark MLlib дозволяє аналізувати сотні мільйонів оцінок за лічені хвилини і частіше запускати алгоритм, щоб підтримувати актуальність рекомендацій. Для Spark характерні більш прості моделі програмування, більш зручні API і більш універсальний мову. Для обчислень цей фреймворк максимальною мірою задіює оперативну пам'ять, що дозволяє зменшити кількість звернень до диску. Він також гранично скорочує кількість операцій вводу-виводу. У цьому рішенні для хостингу аналітичної інфраструктури використовується Compute Engine. Це дозволяє істотно знизити витрати, оскільки тарифікується щохвилини за фактом використання.

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


Збір даних
Система рекомендацій може збирати дані про користувачів на основі неявної (поведінка) або явної інформації (оцінки і відгуки).

Збирати дані про поведінку досить просто, оскільки всі дії можна реєструвати в журналах без участі самих користувачів. Недоліком такого підходу є те, що зібрані дані складніше аналізувати, наприклад виявляти ті дані, які представляють найбільший інтерес. Приклад аналізу даних про явні дії з використанням записів журналів доступний тут.

Збирати оцінки і відгуки складніше, оскільки більшість користувачів залишають їх неохоче. Тим не менш, саме такі дані краще всього допомагають зрозуміти переваги клієнтів.

Зберігання даних
Чим більше даних буде доступно алгоритмами, тим точніше будуть рекомендації. Це означає, що дуже скоро вам доведеться почати роботу з великими даними.

Від того, на основі яких даних ви створюєте рекомендації, залежить вибір використовуваного типу сховища. Це може бути база даних NoSQL, SQL або навіть сховище об'єктів. Крім об'єму і типу даних потрібно враховувати такі фактори, як зручність впровадження, можливість інтеграції в існуючу середу і підтримка перенесення.

Масштабована керована база даних відмінно підходить для зберігання призначених для користувача оцінок і дій, так як вона простіше в експлуатації і дозволяє приділяти більше часу. Cloud SQL не тільки відповідає цим вимогам, але і дозволяє спростити завантаження даних з 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. Оскільки завдання Spark виконуються паралельно, цей конектор повинен бути доступний для всіх екземплярів кластера.

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

  • Своєчасність. Як швидко додаток повинен виробляти рекомендації?
  • Фільтрація даних. Буде додаток виробляти рекомендації, спираючись тільки на смаки користувача, на думки інших користувачів чи на схожість товарів?
Своєчасність
Перше, з чим потрібно визначитися, – це як скоро користувач повинен отримувати рекомендації. Відразу ж, в момент перегляду сайту, або пізніше, по електронній пошті? У першому випадку, природно, аналіз повинен бути більш оперативним.

  • Аналіз в реальному часі передбачає обробку даних в момент їх створення. У системах такого типу, як правило, використовуються інструменти, здатні обробляти і аналізувати потоки подій. Рекомендації в цьому випадку виробляються моментально.

  • Пакетний аналіз передбачає періодичну обробку даних. Цей підхід доречний, коли необхідно зібрати достатньо даних, щоб отримати актуальний результат, наприклад дізнатися обсяг продажів за день. Рекомендації в цьому випадку виробляються постфактум і надаються у форматі електронної розсилки.

  • Аналіз майже в реальному часі передбачає оновлення аналітичних даних кожні кілька хвилин або секунд. Такий підхід дозволяє надавати рекомендації протягом однієї користувацької сесії.
Можна вибрати будь-яку категорію своєчасності, однак для інтернет-продажів найкраще підходить щось середнє між пакетним аналізом і аналізом майже в реальному часі – в залежності від обсягу трафіку і типу оброблюваних даних. Аналітична платформа може працювати безпосередньо з базою даних або з дампом, періодично зберігається в постійному сховище.

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

  • Контентний, коли рекомендації підбираються за атрибутами, тобто за подібністю з товарами, які користувач переглядає або оцінює.
  • Кластерний, коли відбираються товари, що добре поєднуються між собою. При цьому думки і дії користувачів не враховуються.
  • Коллаборатівний, коли відбираються товари, які дивляться або вибирають користувачі з аналогічними смаками.
Cloud Platform підтримує всі три типи, однак для цього рішення був обраний алгоритм колаборативної фільтрації, реалізований на базі Apache Spark. Детальніше про тематичній і кластерної фільтрації див. приложении.

Коллаборативная фільтрація дозволяє абстрагуватися від атрибутів товару та робити прогнози з урахуванням смаків користувача. Цей підхід ґрунтується на припущенні, що переваги двох користувачів, яким сподобалися однакові товари, будуть збігатися і надалі.

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



У колаборативної фільтрації застосовується два основних методи:

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

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

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

  • Ранг – кількість невідомих нам чинників, якими він керувався при виставленні оцінки. Зокрема, сюди можна віднести вік, стать та місцезнаходження. В якійсь мірі, чим вище ранг, тим точніше рекомендація. Мінімальне значення цього параметра буде 5; ми будемо збільшувати його з кроком 5 до тих пір, поки різниця в якості рекомендацій не почне зменшуватись (або поки вистачить пам'яті і процесорної потужності).

  • Лямбда – параметр регуляризації, що дозволяє уникнути перенавчання, тобто ситуації з великою дисперсією і малі зміщенням. Дисперсія – це розкид зроблених прогнозів (після декількох проходів) щодо теоретично вірного значення для конкретної точки. Зсув – віддаленість прогнозів від істинного значення. Перенавчання спостерігається, коли модель добре працює на навчальних даних з відомим рівнем шуму, а в реальності показує погані результати. Чим більше лямбда, тим менше перенавчання, але вище зміщення. Для тестування рекомендуються значення 0,01, 1 і 10.
На діаграмі показані різні співвідношення дисперсії і зміщення. Центр мішені – значення, яке потрібно передбачити з допомогою алгоритму.



  • Ітерація – число проходів навчання. В даному прикладі слід виконати 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

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) – абстракція, що дозволяє працювати з елементами паралельно. RDD являє собою колекцію даних тільки для читання, створену на базі постійного сховища. Такі колекції можуть аналізуватися в пам'яті, що дозволяє виконувати итеративную обробку.

Як ви пам'ятаєте, для вибору кращої моделі необхідно розділити набори даних на три вибірки. В наступному коді використовується допоміжна функція, яка довільно поділяє неперекрывающиеся значення в процентному співвідношенні 60/20/20:

pyspark/app_collaborative.py

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

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

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

pyspark/find_model_collaborative.py

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

def howFarAreWe(model, against, sizeAgainst):
# Ignore the column rating 
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

# 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

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

Запуск вирішення
Покрокові інструкції по запуску рішення, що дозволяє виробити і показати рекомендації для окремого користувача, доступні в GitHub.

Останній фрагмент коду SQL-запиту отримує найбільш актуальні рекомендації з бази даних і показує їх на стартовій сторінці Анни.

Приклад результату виконання запиту в консолі Cloud Platform або клієнта MySQL:



Результати запиту можна додати на стартову сторінку сайту, щоб з більшою ймовірністю зацікавити користувача та підвищити рівень конверсії:



На основі сценарію, в якому описувалася наявна інформація про Анну, система підібрала пропозиції, які їй цікаві.

Моніторинг завдань
Моніторинг в конфігурації bdutil
Раніше ви вже підключалися до головного примірнику по SSH. В Spark є консоль управління, яка дозволяє відслідковувати виконувані завдання через веб-інтерфейс.

За замовчуванням консоль доступна через порт 8080. Вам потрібно буде відкрити доступ до цього порту для кожного екземпляра. Інструкції з додавання правила брандмауера доступні тут. Щоб відкрити консоль, введіть в адресний рядок браузера зовнішній IP-адресу примірника (наприклад, 1.2.3.4:8080). На скріншоті нижче в консолі Spark доступні три розділи з інформацією про робочих вузлах, а також запущених і завершених додатках.



Консоль Spark

Моніторинг в Cloud Dataproc
Детальніше про виведення результатів і веб-інтерфейси можна прочитати в документації Cloud Dataproc.

Керівництво
Повне керівництво з інструкціями по налаштуванню і прикладами вихідного коду доступно GitHub.

Додаток
Перехресна фільтрація
З прикладу вище ви дізналися, як створити ефективне масштабоване рішення для підбору рекомендацій на основі колаборативної фільтрації. Щоб рекомендації були ще більш точними, можна відфільтрувати результати, отримані за допомогою інших методів. Мова піде про двох інших основних типах фільтрації: тематичній і кластерної. Поєднання цих підходів дозволяє надавати користувачам більш якісні рекомендації.


Контентна фільтрація
Цей тип фільтрації дозволяє підбирати рекомендації для об'єктів з атрибутами і невеликою кількістю користувальницьких оцінок. Подібність об'єктів визначається на основі їх атрибутів. Навіть при наявності великої користувацької бази кількість оброблюваних атрибутів залишається на прийнятному рівні.

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

Як правило, для визначення подібності двох товарів спочатку обчислюється коефіцієнт Отиаи, а потім виконується пошук найближчих сусідів:



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


Розглянемо наступну матрицю:


Схожість між P1 і P2 обчислюється за такою формулою:


Систему контентної фільтрації можна створити з використанням різних інструментів. Ось два приклади:

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

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

Примітка Для роботи бібліотеки 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.

Softline — Google Cloud Premier Partner
Softline є найбільшим в Росії і країнах СНД постачальником корпоративних сервісів Google і єдиним партнером зі статусом Google Cloud Premier Partner. Компанія в різні роки була відзначена як кращий партнер року в сегменті Enterprise, партнер року по регіону EMEA в сегменті SMB.


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.