Construction d'un moteur de recommandation pour Hybris, à partir des actions de l'utilisateur sur le sites (Business events, Collaborative filtering, Spark MLLib)
3. 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. 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. 5
#yTechParis
Le merchandising
Une politique efficace de
prix, de discounts et de
promotions
Ensemble des efforts, moyens et techniques mis en œuvre pour vendre
7. 7
#yTechParis
Et surtout la combinaison du tout.
Décider à quel moment,
à quel utilisateur présenter
tel produit, telle promotion…
Le merchandising
8. 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
11. 11
#yTechParis
Concept: Collaborative Filtering, Similarités
Détecter des similarités
à partir des actions et
comportements des
utilisateurs dans la vraie vie.
Détecter des similarités à partir des
caractéristiques (product features/categories)
des produits
Merchandising par recommandation
13. 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
17. 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
18. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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