yrecommender, machine learning sur hybris
TRANSCRIPT
1
#yTechParis
Machine Learning sur hybris ecommerce
[Y]recommend
erPrésenté par Yawo KPOTUFE Hybris expert / Solution architect
2
#yTechParis
Notre cible en image
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