Это третья публикация в рамках помощи участникам конкурса «SAP Кодер-2017».
Каждое предприятие в процессе своей жизнедеятельности генерирует значительное количество данных, как «больших», так и не очень. Эти данные часто можно использовать для получения нового знания, которое, в свою очередь может оказать существенное влияние на стратегию развития бизнеса или тактику поведения в некоторые локальные моменты работы. Сейчас, в связи с развитием вычислительной техники и ростом объема накопленных данных, большое развитие получили численные методы, позволяющие извлекать полезную информацию из массива «сырых» данных и использовать ее в различных бизнес-сценариях.
![](https://habrastorage.org/files/85a/71a/d54/85a71ad54be34ddbb22888ad1e7f73f3.jpg)
SAP Cloud Platform имеет, наряду с другими встроенными сервисами, инструментарий предиктивной аналитики, позволяющий строить и использовать построенные модели в созданных на платформе (и вне ее) бизнес-задачи. Набор прогнозных инструментов, входящий в сервис на дату публикации поста, состоит из следующих элементов:
- Clustering – классический кластерный анализ и сегментация базы объектов с большим количеством атрибутов-классификаторов;
- Forecasts – построение прогнозов на базе временных рядов;
- Key Influencers – поиск наиболее влияющих на целевую функцию параметров;
- Outliers – поиск нестандартных паттернов в наборе данных (выявление мошенничеств, ошибок ввода и пр.);
- Recommendation – построение моделей продуктовых рекомендаций на базе истории покупок (чеков);
- Scoring Equation – построение и экстракция уравнения, позволяющего вычислять целевую функцию аналитически и встраивать ее в собственное приложение;
- What If – анализ «что-если», позволяющий предполагать последствия совершения тех или иных действий, базируясь на истории поведения объекта
Актуальный список методов и их описание можно посмотреть по ссылке.
Одна из задач на конкурс SAP Кодер предполагает использование модели рекомендаций. Здесь мы расскажем, как построить подобную модель в Predictive сервисе SCP. Первое, с чего стоит начать – это подготовка данных для «тренировки» модели. В случае сервиса Recommendation под тренировкой подразумевается поиск пар товаров (продающихся вместе) и построение списка рекомендаций конкретным клиентам (например, участникам программы лояльности).
Исходные данные
Исходные данные для построения модели просты – это кассовые чеки магазина. Они должны содержать следующие параметры:
- userID – номер участника программы лояльности (уникальный идентификатор покупателя)
- itemID – код товара (SKU)
- purchaseDate – дата транзакции (чека)
Загрузить эти данные в систему, не имея доступа к файловой системе сервера, проще всего через функцию Import/Export в HANA Studio (Eclipse). Для этого необходимо:
- Подготовить данные в файле формата CSV.
- Создать на SCP новую базу данных HANA MDC. В нашем случае она называется h1
- Создать схему данных, в которой мы будем проводить наши эксперименты. Мы создали схему PROBA
- Создать таблицу для помещения исходных данных, здесь PROBA.SALES_DATA. В таблице должно быть несколько ключевых полей, в нашем случае это RID – номер участника программы лояльности, RDATE, TRIME, RDATETIME – дата и время транзакции в разных форматах, важна только RDATETIME, SKU – артикул товара.
Дополнительно в нашей базе данных содержится таблица PRODUCTS – из двух полей – код и название товара.
- Выгрузить таблицу SALES_DATA на локальный диск с помощью функции Export. Спуститься по структуре каталогов до файлов с описанием экспорта
- В файл data.csv поместить данные в формате CSV
- В файле data.ctl поменять разделитель полей CSV на необходимый
- В файле data.info изменить данные о размере файла data.csv и количестве строк в нем
- Загрузить данные с помощью функции Import с заменой существующего объекта в базе данных
Настройка сервиса
Прежде, чем приступить к построению модели, необходимо произвести базовые настройки сервиса Predictive. По умолчанию сервис выключен, первое, что надо сделать – включить сервис
![](https://habrastorage.org/getpro/habr/post_images/409/7d6/eba/4097d6eba9ca84c613323ba47853e1c4.png)
![](https://habrastorage.org/getpro/habr/post_images/ba0/322/258/ba0322258c32e3f27fed7e43b26b0824.png)
Система спросит, стоит ли устанавливать обновления. Правильный ответ – да. После этого необходимо развернуть сервис на вашем эккаунте пользователя, для этого необходимо ввести логин и пароль, используемые для входа на SCP.
![](https://habrastorage.org/getpro/habr/post_images/1f0/1a9/78d/1f01a978db84574529eb2a89a00c37b8.png)
После разворачивания сервиса нажимаем на ссылку Java Dashboard
![](https://habrastorage.org/getpro/habr/post_images/9a7/18b/977/9a718b977aecaac7a94dc106e0157af0.png)
И присваиваем своему пользователю-разработчику обе указанные роли: C4PA-User, C4PA-Admin
![](https://habrastorage.org/getpro/habr/post_images/be8/9e8/169/be89e816926e012c70becf58448dbdbb.png)
Следующим шагом мы должны привязать SCP Predictive service к нашей базе данных
![](https://habrastorage.org/getpro/habr/post_images/63f/c81/4a9/63fc814a9e855ec397527194a0ec3b4a.png)
Для этого в базе данных желательно создать технического пользователя, в нашем случае PROBA_U
![](https://habrastorage.org/getpro/habr/post_images/617/340/1bb/6173401bb4c2264962b68f80ee9589a6.png)
и присвоить ему необходимые для запуска предиктивного сервиса полномочия. При создании пользователя HANA спросит начальный пароль, чтобы изменить его (и входить в базу автоматически от имени Predictive Service), необходимо один раз войти в систему от имени этого пользователя. Для этого надо создать новое подключение к облачному источнику данных в HANA Studio и войти в базу данных, изменив начальный пароль.
![](https://habrastorage.org/getpro/habr/post_images/b64/c89/160/b64c89160d485e224d5aef1d0926ff3a.png)
После создания технического пользователя (или решения использовать существующего) привязываем сервис к конкретной схеме базы данных.
![](https://habrastorage.org/getpro/habr/post_images/1e7/9ef/a5f/1e79efa5fb7cca209497165072bfd24c.png)
При этом используем данные технического пользователя, Data Source оставляем по умолчанию — .
![](https://habrastorage.org/getpro/habr/post_images/ef6/97a/9b1/ef697a9b1e2190103060cfb34c23252f.png)
После разворачивания сервиса на эккаунте разработчика и привязки базы данных рестартуем сервис – последовательно нажимаем кнопки Stop и Start.
![](https://habrastorage.org/getpro/habr/post_images/b4d/142/ca0/b4d142ca0200582461e0b4c6b00e9396.png)
После перезапуска сервиса появится ссылка на java-приложение, позволяющее управлять сервисом, контролировать его и использовать в разработке приложений
![](https://habrastorage.org/getpro/habr/post_images/2f3/4e2/07c/2f34e207c6d41c9cda2a361d0a7bb07b.png)
После вызова ссылки система предлагает нам две панели, одна для разработки, другая для мониторинга сервиса
![](https://habrastorage.org/getpro/habr/post_images/30c/f9b/c0f/30cf9bc0ff2c34ef20aa1ecb26bb776a.png)
При нажатии на панель Administration, приложение выдает массу мониторинговой информации о Predictive service, которую можно использовать для анализа, однако для нашего случая основной панелью является «Predictive Services API Documentation»
![](https://habrastorage.org/getpro/habr/post_images/273/ee0/672/273ee067259b097543618ba24b0071fc.png)
Построение и использование модели рекомендаций
Посмотрим на наши чеки в более приспособленном для человеческого взгляда виде. Для этого создадим представление данных в виде
CREATE VIEW "PROBA"."SALESWPROD" ( "RID",
"USER_ID",
"RDATE",
"RTIMESTAMP",
"ITEMS",
"SKU_ID",
"SKU_NAME" ) AS SELECT
T0."RID" ,
t0."USER_ID",
T0."RDATE",
TO_TIMESTAMP(T0."RDATETIME"),
T0."ITEMS",
T0."SKU",
T1."SKU_NAME"
from "PROBA"."SALES_DATA" T0
inner join "PROBA"."PRODUCTS" T1 on T0."SKU" = T1."SKU_ID" WITH READ ONLY
Это view не нужно нам для решения нашей задачи, но позволяет наглядно увидеть чеки с позициями продаж (SKU)
![](https://habrastorage.org/getpro/habr/post_images/701/722/bf6/701722bf6fd59b29fa1d462ae982fe79.png)
Запускаем «Predictive Services API Documentation». На этой странице приложения Predictive Service собраны все включенные в него математические методы и точки доступа к каждому из них (endpoints).
Начнем с создания источника данных для предиктивной модели. Для этого нажимаем на закладку POST у точки доступа /api/analytics/dataset
![](https://habrastorage.org/getpro/habr/post_images/d64/41c/b38/d6441cb3867741d02012d1d4d3920df9.png)
и меняем параметр hanaURL в JSON-шаблоне, с помощью которого передаются все параметры в Perdictive service. Нажимаем POST, дожидаемся ответа сервера со статусом 200. В ответ сервер возвращает также JSON-файл, в котором сообщает информацию о подключенном источнике (количество строк, количество и тип поле и т.д., и, главное, ID датасета. Этот ID нам надо запомнить, в дальнейшем мы будем использовать его при создании модели рекомендации. Закрываем данную форму нажатием кнопки close в правом верхнем углу.
![](https://habrastorage.org/getpro/habr/post_images/2ec/4db/c0b/2ec4dbc0b89f62329b2fc58e808c89f4.png)
![](https://habrastorage.org/getpro/habr/post_images/cbc/ec2/015/cbcec2015df19918feb1e593eb1f7943.png)
Возвращаемся на основную страницу Predictive Service и переходим к созданию модели. Для этого нажимаем закладку POST у ссылки /api/analytics/recommendations/recommender. Открывается страница настройки модели рекомендаций. Параметры построения будущей модели задаются в JSON-формате. Все возможные параметры модели описаны в документации по адресу https://help.hana.ondemand.com/c4pa/frameset.htm?ee805144d197482abef88bfad8d895da.html.
Это
- UserColumn – поле с номером участника программы лояльности
- itemColumn – SKU
- dateColumn – дата транзакции
- startDate – дата начала данных для расчета
- endDate – дата окончания данных для расчета
Дополнительно можно менять параметры, описывающие математику модели. Для нашей модели мы возьмем следующие параметры:
![](https://habrastorage.org/getpro/habr/post_images/e9a/bef/3bf/e9abef3bf079c068d72a3c08f3ac2c3d.png)
Запускаем построение модели и получаем отклик. Ключевой момент – записать ID модели
![](https://habrastorage.org/getpro/habr/post_images/b2d/fe0/5c8/b2dfe05c8e2d9d480924b6d5511c7c61.png)
С помощью ссылки /api/analytics/recommendations/recommender/{jobID} можно посмотреть статус построенной модели, указав 15 в качестве ID. Для нашей модели статус следующий
![](https://habrastorage.org/getpro/habr/post_images/b4b/c63/045/b4bc63045b8f90183f2609da2bcdf487.png)
Видим, что количество SKU, встречающихся в одной корзине с другими составляет 2777 штук, на базе чего удалось найти 9633 правил рекомендаций. С помощью ссылки /api/analytics/recommendations можно протестировать полученную модель. Здесь необходимо ввести следующие параметры:
- itemList – SKU, уже лежащие в корзине
- maxItems – максимальное количество возвращаемых рекомендаций
- recommenderID – ID модели, построенной на предыдущем шаге
- userID – номер участника программы лояльности
Указывать можно либо оба параметра itemList и userID, либо только один из них. При указании только одного параметра система выдаст предупреждение, но позволит продолжить работу.
Проверим модель с SKU 5000267097428
![](https://habrastorage.org/getpro/habr/post_images/a8e/1b0/f7c/a8e1b0f7cff71ff9442cea768b1f9099.png)
в ответ получаем
![](https://habrastorage.org/getpro/habr/post_images/a14/5bb/1bf/a145bb1bf4d2e125e90d2a9d896bb3fd.png)
Посмотрим, что это такое
![](https://habrastorage.org/getpro/habr/post_images/5cc/31a/b89/5cc31ab8969167cc7b420f337fcbbaf3.png)
Таким образом, получаем, что при покупке виски неплохо бы порекомендовать покупателю еще и сухого вина.
Рекомендательная модель может также быть запущена в пакетном режиме, сгенерировав таблицу рекомендаций для всех пользователей программы лояльности. Для этого нажимаем закладку POST на ссылке /api/analytics/recommendations/batch
![](https://habrastorage.org/getpro/habr/post_images/8af/421/1c3/8af4211c36dd32e31a0910235a096ed4.png)
Затем указываем таблицу, в которую надо поместить наши рекомендации
![](https://habrastorage.org/getpro/habr/post_images/2c1/2ef/81e/2c12ef81efc6d69fd1f6ccefd3c2eed2.png)
И запускаем расчет. Сервис создает таблицу и для каждого пользователя рассчитывает рекомендованный товар, который может быть приобретен с большей вероятностью.
![](https://habrastorage.org/getpro/habr/post_images/dd4/2da/9d5/dd42da9d585ce1e4ef66da1b3d41f14e.png)
Таки образом, Predictive service позволяет очень быстро настроить и использовать некоторые наиболее часто употребляемые математические методы для построения предиктивных моделей, годных к применению в реальном бизнесе.
Поделиться с друзьями