Yrecommender, machine learning sur Hybris

Preview:

Citation preview

1

#yTechParis

Machine Learning sur hybris ecommerce

[Y]recommend

erPrésenté par Yawo KPOTUFE Hybris expert / Solution architect

2

#yTechParis

Notre cible en image

SAP SAP
Utiliser l'en-tête du template #yTech
SAP SAP
Recadrage de l'imageSuppression de l'effet reflet

3

#yTechParis

Partie I – Savoir plus pour vendre plus Partie II – Hybris Business Events data Partie III – Data Mining, création des Modèles Partie IV – Exploitation dans Hybris Partie V – Perspectives & Live Demo Partie VI – Questions

Agenda

4

#yTechParis

1 – Le merchandising 2 – Outils Hybris pour le merchandising 3 – Solutions tierces (compario, fredhopper) 4 – Concept: Collaborative Filtering, Similarités 5 – Exemples de Netflix, Amazon 6 – Hybris Business Events 7 – Recommandations avec Business events

Savoir plus pour vendre plus

5

#yTechParis

Le merchandising

Une politique efficace deprix, de discounts et de promotions

Ensemble des efforts, moyens et techniques mis en œuvre pour vendre

6

#yTechParis Un design et un packaging

séduisants

Le merchandising

7

#yTechParis Et surtout la combinaison du tout.

Décider à quel moment,à quel utilisateur présentertel produit, telle promotion…

Le merchandising

8

#yTechParis

SAP Hybris Marketing extensions Classiques: PDP, PLP, Facets Product References sur le Product (administrable en hmc)

Similar, Accessory Up-sell, Cross-sell, …

Hot Folders pour l’intégration de ProductReferences CMS Components

Outils Hybris pour le merchandising

9

#yTechParis

Solutions tierces: Sparkow (ex compario)

10

#yTechParis

Solutions tierces: SDL (ex Fredhopper)

11

#yTechParis

Concept: Collaborative Filtering, Similarités

Détecter des similarités

à partir des actions et comportements desutilisateurs dans la vraie vie.

Détecter des similarités à partir des

caractéristiques (product features/categories) des produits

Merchandising par recommandation

12

#yTechParis

Success stories: Netflix & Amazon

AmazonProduct recommandation system

NetflixMovie recommender engine

13

#yTechParis

Capture les actions des utilisateurs (view, buy, …) Similaire à un certain degré à google analytics Possibilité de définir de nouveaux events Tracking basé sur Piwik (un puissant moteur gratuit d’analytics) Gestion du flux d’events via Spring integration Plusieurs outputs possibles

Stream (ex: Storm, Spark Stream) File (ex: Logger) Queue (ex: RabbitMQ, Kafka) Database (ex: MySQL, Oracle, Mongo, Hbase, Cassandra)…

Hybris Business events

14

#yTechParis

Hybris Business eventsEvents supportés Out Of The Box

15

#yTechParis

Hybris Business eventsArchitecture

16

#yTechParis

Recommandations avec Business events

a. Récolter des business events

b. Calculer les recommandations

17

#yTechParis

1 – Préparation des données 2 – Le stockage des données 3 – Hbase, une solution Big Data 4 – Schema des tables Hbase 5 – Yrecommender: notre table ‘view’

Hybris Business Events data

(Extract Transform Load)(Big Data

Storage)(Google Big

Tables)

18

#yTechParis

Phase très importante de Machine Learning Données erronées ou mal structurées = Big Fail ! Collecte des données des events via Spring integration Transformation aux structures de données des algorithmes Nettoyage des données erronées Stockage persistant des données (Databases, files, …)

Préparation des données

19

#yTechParis

Problématique de taille illimitée (terabytes en quelques années) Limites du modèle relationnel :

Scalability Distribution Fast query Schema-flexibles tables

Le stockage des données

20

#yTechParis

Solution basée sur les recherches de Google Big Table Supporte des milliards lignes X des millions de colonnes ! Ecriture et lecture strictement consistents Schéma flexible en famille de colonne … Supporte Hadoop (Jobs MapReduce)

Failover automatique sur le cluster de servers (region servers)

Partitionnement automatique des tables (sharding)

Offre un shell en ruby, une API Java et un accès Thrift

Hbase, une solution NoSQL - Big Data

21

#yTechParis Les column families (cf) sont définies dans le schema

Chaque couple row/cf est une sorte de HashMap libre La cf peut contenir ainsi des champs différents par row

Schema des tables Hbase

22

#yTechParis

Row key construite à partir des infos de chaque event 3 columns families (cf) définies: u,p, et c (user, product et cart) Chaque row peut définir les champs de ses cfs Données vérifiables via le shell hbase (requête de scan) Script shell Yrecommender: > transforme les derniers business events, les charge dans Hbase et les archive:

https://github.com/yawo/yreco/blob/master/scripts/tsv.extract.sh

[Y]recommender: notre table ‘view’

Rows Column families

u (user) p (product) c (cart/order)

Row key • id• name• …

• id• name• …

• id• total• …

23

#yTechParis

1 – Le framework de calcul distribué Spark 2 – Concepts: RDD 3 – Quelques algorithmes: ALS, FP-Growth 4 – L’approche Yrecommender 5 – Evaluation d’erreurs et ajustements

Data Mining, création des Modèles

24

#yTechParis

Framework de calcul très rapide en cluster Pionner dans le monde du Machine Learning 100x plus rapide que Hadoop sur certains algorithmes Dispose de plusieurs composants dont:

Spark core pour le processing en parallèle de données MLLib, une librairie d’algorithmes de machine learning

Fournit les algorithmes dont nous avons besoin: Recommandations par Collaborative filtering Similarités Bundles frequents par FP-Growth

Le framework de calcul distribué Apache Spark

25

#yTechParis

Spark utilise une abstraction de collection parallèle File, Array, Hbase table, MySQL, etc. -> RDD RDD supporte des fonctions parallélisées comme:

• foreach, map, flatMap, collect, filter, count, aggregate, reduce, …

Concept: RDD

26

#yTechParis ALS pour Alternating Least Squares

Algorithme phare de recommendation ALS opère sur un RDD de Rating Rating = note (action) d’un utilisateur sur un élement Modélisation Rating pour Yrecommender:

user = colonne u:id de la table ‘view’ de Hbase item = colonne p:id de la table ‘view’ de Hbase rating = 1 (indique que la PDP est vue).

En scala: class Rating(user:Int, item:Int, rating:Double)

Quelques Algorithmes: ALS

27

#yTechParis FP-Growth pour Frequent Pattern Growth

Algorithme phare de détection de fréquence Intérêt: détecte les bundles/promos intéressants FP-Growth opère sur un RDD de Transactions (liste de

produits) Transactions = liste des produits d’un

utilisateur Modélisation Transactions pour Yrecommender:

liste des colonnes p:id de la table ‘view’ de Hbase groupés par u:id

En scala: class List[Int]( item1, item2, item3,…)

Quelques Algorithmes: FP-Growth

28

#yTechParis

Charger les view events depuis Hbase dans Spark Mapper les codes produits à des Int Récupérer les ratings et les transactions Appliquer les algorithmes

Calculer les recommandations Calculer les similarités Calculer les patterns (bundles) fréquents

Générer des outputs csv pour exploitation Code source: https://github.com/yawo/yreco/blob/master/src/main/scala/com/yreco/RecommenderDemo.scala

L’approche générale Yrecommender

29

#yTechParis

Le Machine Learning ne vient pas des Mayas! (pas une prophétie)

Méthodes d’évaluation d’erreurs d’un model À vue d’oeil L’erreur quadratique moyenne (MSE, utilisé en statistique)

Les algorithmes permettent le “Tuning” des paramètres Diminuer les erreurs en affinant les paramètres Tester différentes facettes de models

Evaluation d’erreurs et ajustements

30

#yTechParis

1 – Batch mode: Génération des résultats en csv

2 – => Exploitation dans Hybris via Hotfolder 3 – Real time mode: Finagle ThriftServer 4 – => Exploitation dans Hybris via Spring 5 – Possibilités: Solr, RestServer / Cronjob,

Crontab…

Exploitation dans Hybris

31

#yTechParis

Les models restent internes à la JVM Spark (classes java) Besoin de formats exploitables depuis Hybris Compiler les résultats les plus significatifs

Définir des seuils de pertinence (en fonction des algorithmes) Tenir compte de l’aspect distribué des données…

Plusieurs options d’output possibles: csv, parquet, sql, etc

Approche Yrecommender: Ex format = productCode, similarProductCode

Batch mode: Génération des résultats en csv

32

#yTechParis

Une nouvelle extension de plus sur terre: yrecommender

Config hotfolder (code source: https://goo.gl/MeSNae) Importer des ProductReferences (relation dans les deux sens)

Exploitation dans Hybris via Hotfolder

33

#yTechParis

Apache Thrift = sorte de corba, avec idl, cross language

Outils de génération server/client vers plusieurs langages Twitter Finagle = framework de services RPC

Destiné à la JVM Basé sur les Futures pour un multithreading clean… Supporte thrift, rest http, sockets, … Supporte des filters,

Yrecommender expose les models via un server Thrift code source: https://goo.gl/bCQmIp

Real time mode: Finagle Thrift Server

34

#yTechParis

Ajouter le client Thrift généré (sous forme de jar) à Hybris Exposer le client sous forme de service via Spring

code source: https://goo.gl/6acykF

Exploitation dans Hybris via Spring

35

#yTechParis

Exposer un serveur Rest Embarqué avec finagle Externe avec tomcat

Indexer les résultats de models dans Solr ou Elasticsearch

Streamer les events vers Spark (par ex avec Kafka et Spark Streaming)

Automatiser tout le process depuis les events jusqu’aux csvs

Unix crontab (ou équivalent windows) pour la mise à jour des models

Hybris dynamic cronjob avec triggers

Possibilités: Solr, RestServer / Cronjob, Crontab

36

#yTechParis

Outils: Hybris, Spark 1.5, Hbase, Bash (ou powershell)

Environnement de démo : Ubuntu, Hybris 5.7, scala 2.11 Github code spark: https://github.com/yawo/yreco Github extension yrecommender:

Live Demo

https://github.com/yawo/yrecommender-hybris-extension

37

#yTechParis

Questions

Recommended