Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Salut tout le monde! Je m'appelle Sasha, je suis CTO et co-fondatrice de LoyaltyLab. Il y a deux ans, mes amis et moi, comme tous les étudiants pauvres, allions le soir boire de la bière au magasin le plus proche de la maison. Nous étions très mécontents que le détaillant, sachant que nous viendrions prendre de la bière, n'offre pas de rabais sur les chips ou les craquelins, alors que c'est tellement logique ! Nous n'avons pas compris pourquoi cette situation se produisait et avons décidé de créer notre propre entreprise. Eh bien, en prime, écrivez des rabais pour vous-même tous les vendredis pour ces mêmes jetons.

Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Et tout est arrivé au point que je parle avec du matériel sur le côté technique du produit à Conditions générales NVIDIA. Nous sommes heureux de partager notre travail avec la communauté, je poste donc mon rapport sous forme d'article.

introduction

Comme tout le monde au début du voyage, nous avons commencé par un aperçu de la façon dont les systèmes de recommandation sont créés. Et l'architecture du type suivant s'est avérée être la plus populaire :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Il se compose de deux parties :

  1. Échantillonnage des candidats pour recommandations par un modèle simple et rapide, généralement collaboratif.
  2. Classement des candidats par un modèle de contenu plus complexe et plus lent, prenant en compte toutes les caractéristiques possibles dans les données.

Ici et ci-dessous, j'utiliserai les termes suivants :

  • candidat / candidat aux recommandations - un couple utilisateur-produit, qui peut potentiellement rentrer dans les préconisations en production.
  • extraction des candidats/extracteur/méthode d'extraction des candidats — un processus ou une méthode pour extraire des « candidats à des recommandations » à partir des données disponibles.

Lors de la première étape, différentes variantes de filtrage collaboratif sont généralement utilisées. Le plus populaire - SLA. Étonnamment, la plupart des articles sur les systèmes de recommandation ne révèlent diverses améliorations des modèles collaboratifs qu'à la première étape, mais personne ne parle d'autres méthodes d'échantillonnage. Pour nous, l'approche consistant à n'utiliser que des modèles collaboratifs et diverses optimisations avec eux n'a pas fonctionné avec la qualité que nous attendions, nous avons donc approfondi la recherche spécifiquement sur cette partie. Et à la fin de l'article, je montrerai à quel point nous avons pu améliorer la SLA, qui était notre base de référence.

Avant de passer à la description de notre approche, il est important de noter qu'avec les recommandations en temps réel, lorsqu'il est important pour nous de prendre en compte les données qui se sont produites il y a 30 minutes, il n'y a vraiment pas beaucoup d'approches qui peuvent fonctionner au bon moment. Mais, dans notre cas, nous ne devons pas collecter les recommandations plus d'une fois par jour et, dans la plupart des cas, une fois par semaine, ce qui nous donne la possibilité d'utiliser des modèles complexes et de multiplier la qualité.

Prenons comme référence les métriques que seule ALS montre sur la tâche d'extraction des candidats. Les mesures clés que nous surveillons sont :

  • Précision - la proportion de candidats correctement sélectionnés parmi ceux échantillonnés.
  • Rappel - la proportion de candidats qui se sont produits parmi ceux qui se trouvaient réellement dans l'intervalle cible.
  • F1-score - F-score calculé sur les deux points précédents.

Nous examinerons également les métriques du modèle final après l'entraînement du renforcement du gradient avec des fonctionnalités de contenu supplémentaires. Il existe également 3 métriques principales :

  • precision@5 — pourcentage moyen de hits parmi les 5 premiers par probabilité pour chaque client.
  • response-rate@5 — conversion des acheteurs d'une visite en magasin en achat d'au moins une offre personnelle (une offre contient 5 produits).
  • roc-auc moy par utilisateur - moyen roc-auc pour chaque acheteur.

Il est important de noter que toutes ces mesures sont mesurées sur validation croisée de séries chronologiques, c'est-à-dire que la formation a lieu au cours des k premières semaines et que k + 1 semaines sont prises comme données de test. Ainsi, les hauts/bas saisonniers ont eu un effet minime sur l'interprétation de la qualité des modèles. De plus, sur tous les graphiques, l'axe des abscisses indiquera le numéro de la semaine dans la validation croisée, et l'axe des ordonnées indiquera la valeur de la métrique spécifiée. Tous les graphiques sont basés sur les données transactionnelles d'un client, de sorte que la comparaison entre eux est correcte.

Avant de commencer à décrire notre approche, examinons d'abord la ligne de base, qui est le modèle formé ALS.
Métriques d'extraction de candidats :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Mesures finales :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Je traite toutes les implémentations d'algorithmes comme une sorte d'hypothèse commerciale. Ainsi, très grossièrement, tout modèle collaboratif peut être considéré comme une hypothèse selon laquelle « les gens ont tendance à acheter ce que les gens comme eux achètent ». Comme je l'ai dit, nous ne nous sommes pas limités à une telle sémantique, et voici quelques hypothèses qui fonctionnent toujours bien sur les données dans le commerce hors ligne :

  1. Qu'avez-vous acheté avant.
  2. Semblable à ce que j'ai acheté avant.
  3. La période d'un achat passé depuis longtemps.
  4. Populaire par catégorie/marque.
  5. Achats alternés de différents biens d'une semaine à l'autre (chaînes de Markov).
  6. Produits similaires aux acheteurs, selon les caractéristiques construites par différents modèles (Word2Vec, DSSM, etc.).

Qu'avez-vous acheté avant

L'heuristique la plus évidente qui fonctionne très bien dans la grande distribution. Ici, nous prenons tous les biens que le titulaire de la carte de fidélité a achetés au cours des K derniers jours (généralement 1 à 3 semaines) ou des K jours il y a un an. En appliquant uniquement cette méthode, nous obtenons les métriques suivantes :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Il est bien évident ici que plus on prend de période, plus on a de rappel et moins de précision et inversement. De meilleurs résultats en moyenne pour les clients donnent les « 2 dernières semaines ».

Semblable à ce que j'ai acheté avant

Sans surprise, pour l'épicerie, "ce qui a été acheté avant" fonctionne bien, mais extraire les candidats uniquement de ce que l'utilisateur a déjà acheté n'est pas très cool, car il est peu probable qu'il soit possible de surprendre l'acheteur avec un nouveau produit. Par conséquent, nous proposons d'améliorer légèrement cette heuristique en utilisant les mêmes modèles collaboratifs. À partir des vecteurs que nous avons reçus lors de la formation ALS, vous pouvez obtenir des produits similaires à ceux que l'utilisateur a déjà achetés. Cette idée est très similaire aux "vidéos similaires" dans les services de visionnage de contenu vidéo, mais comme nous ne savons pas ce que l'utilisateur mange/achète à un moment donné, nous ne pouvons rechercher que quelque chose de similaire uniquement à ce qu'il a déjà acheté, d'autant plus que nous savons déjà à quel point cela fonctionne. En appliquant cette méthode sur les transactions des utilisateurs au cours des 2 dernières semaines, nous obtenons les métriques suivantes :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

il est k - le nombre de produits similaires récupérés pour chaque produit acheté par l'acheteur au cours des 14 derniers jours.
Cette approche a particulièrement bien fonctionné pour nous sur un client qui était essentiel de ne pas recommander du tout ce qui figurait déjà dans l'historique d'achat de l'utilisateur.

Période d'achat passée depuis longtemps

Comme nous l'avons déjà découvert, en raison de la fréquence élevée d'achat de biens, la première approche fonctionne bien pour nos spécificités. Mais qu'en est-il des produits comme la lessive en poudre/shampooing/etc. C'est-à-dire avec des produits qui ne seront probablement pas nécessaires toutes les semaines ou deux et que les méthodes précédentes ne peuvent pas extraire. Cela implique l'idée suivante - il est proposé de calculer la période d'achat de chaque produit en moyenne pour les acheteurs qui ont acheté le produit plus k une fois. Et puis extrayez ce dont l'acheteur est probablement déjà à court. Les délais calculés pour les marchandises peuvent être vérifiés de visu pour s'assurer qu'ils sont adéquats :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Et puis nous verrons si la fin de la période du produit tombe dans l'intervalle de temps où les recommandations seront en production et échantillonnerons ce qui tombe. L'approche peut être illustrée comme ceci :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Nous avons ici 2 cas principaux qui peuvent être envisagés :

  1. S'il faut échantillonner des produits pour les clients qui ont acheté le produit moins de K fois.
  2. S'il faut échantillonner le produit si la fin de sa période tombe avant le début de l'intervalle cible.

Le graphique suivant montre les résultats obtenus par une telle méthode avec différents hyperparamètres :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne
ft - Ne prendre que les acheteurs ayant acheté le produit au moins K (ici K = 5) fois
tm — Ne prenez que les candidats qui tombent dans l'intervalle cible

Sans surprise, capable (0, 0) plus grand rappeler et le plus petit avec précision, car sous cette condition, le plus de candidats sont extraits. Cependant, les meilleurs résultats sont obtenus lorsque nous n'échantillonnons pas les produits pour les clients qui ont acheté un produit particulier moins de k fois et extraire, entre autres, les marchandises dont la fin de période tombe avant l'intervalle cible.

Populaire par catégorie

Une autre idée assez évidente consiste à échantillonner des produits populaires dans différentes catégories ou marques. Ici on calcule pour chaque client top-k catégories/marques "favoris" et extrayez "populaire" de cette catégorie/marque. Dans notre cas, nous définissons "favori" et "populaire" par le nombre d'achats de produits. Un avantage supplémentaire de cette approche est son applicabilité dans un cas de démarrage à froid. C'est-à-dire pour les clients qui ont effectué soit très peu d'achats, soit n'ont pas été dans le magasin depuis longtemps, soit en général n'ont émis qu'une carte de fidélité. Pour eux, il est plus facile et préférable d'ajouter des produits populaires auprès des acheteurs ayant un historique existant. Les mesures sont les suivantes :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne
Ici, le nombre après le mot "catégorie" signifie le niveau d'imbrication de la catégorie.

En général, il n'est pas non plus surprenant que des catégories plus étroites obtiennent de meilleurs résultats, car elles extraient des produits « préférés » plus précis pour les acheteurs.

Alterner les achats de biens différents d'une semaine à l'autre

Une approche intéressante que je n'ai pas vue dans les articles sur les systèmes de recommandation est une méthode statistique assez simple et en même temps fonctionnelle des chaînes de Markov. Ici on prend 2 semaines différentes, puis pour chaque client on construit des paires de produits [acheté la semaine i]-[acheté la semaine j], où j > i, et à partir de là, nous calculons pour chaque produit la probabilité de passer à un autre produit la semaine prochaine. Autrement dit, pour chaque paire de biens producti-productj compter leur nombre dans les paires trouvées et diviser par le nombre de paires, où produire était dans la première semaine. Pour extraire les candidats, nous prenons le dernier chèque de l'acheteur et obtenons top-k les prochains produits les plus probables de la matrice de transition que nous avons obtenus. Le processus de construction d'une matrice de transition ressemble à ceci :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

À partir d'exemples réels dans la matrice des probabilités de transition, nous voyons les phénomènes intéressants suivants :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne
Ici, vous pouvez remarquer des dépendances intéressantes qui se révèlent dans le comportement des consommateurs : par exemple, les amateurs d'agrumes ou d'une marque de lait, à partir desquels ils passent très probablement à une autre. Il n'est pas non plus surprenant que les articles avec des achats répétés élevés, comme le beurre, se retrouvent également ici.

Les métriques de la méthode avec chaînes de Markov sont les suivantes :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne
k - le nombre de produits récupérés pour chaque article acheté depuis la dernière transaction de l'acheteur.
Comme nous pouvons le voir, la configuration avec k=4 montre le meilleur résultat. Le pic à la semaine 4 peut s'expliquer par le comportement saisonnier autour des vacances. 

Produits similaires aux acheteurs, selon les caractéristiques construites par différents modèles

Nous arrivons donc à la partie la plus difficile et la plus intéressante - la recherche des voisins les plus proches dans les vecteurs d'acheteurs et de produits construits selon différents modèles. Dans notre travail, nous utilisons 3 modèles de ce type :

  • SLA
  • Word2Vec (Item2Vec pour de telles tâches)
  • DSSM

Nous avons déjà traité de la SLA, vous pouvez lire comment elle apprend ici. Dans le cas de Word2Vec, nous utilisons l'implémentation bien connue du modèle de gensim. Par analogie avec les textes, nous définissons l'offre comme un reçu d'achat. Ainsi, lors de la construction du vecteur produit, le modèle apprend à prédire son «contexte» pour le produit dans le reçu (le reste des marchandises dans le reçu). Dans les données de commerce électronique, il vaut mieux utiliser la session de l'acheteur au lieu d'un reçu, les gars de Ozone. Et DSSM est plus intéressant à démonter. Il a été écrit à l'origine par les gars de Microsoft en tant que modèle de recherche, vous pouvez lire le document de recherche original ici. L'architecture du modèle ressemble à ceci :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

il est Q - requête, requête de recherche de l'utilisateur, D[je] - document, page web. L'entrée du modèle reçoit respectivement les signes de la requête et des pages. Chaque couche d'entrée est suivie d'un certain nombre de couches entièrement connectées (perceptron multicouche). Ensuite, le modèle apprend à minimiser le cosinus entre les vecteurs obtenus dans les dernières couches du modèle.
Les tâches de recommandation utilisent exactement la même architecture, mais au lieu d'une requête, il y a un utilisateur, et au lieu de pages, il y a des produits. Et dans notre cas, cette architecture se transforme comme suit :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Maintenant, pour vérifier les résultats, il reste à couvrir le dernier point - si dans le cas de l'ALS et du DSSM, nous avons défini explicitement des vecteurs utilisateur, alors dans le cas de Word2Vec, nous n'avons que des vecteurs produits. Ici, pour construire un vecteur utilisateur, nous avons identifié 3 approches principales :

  1. Ajoutez simplement les vecteurs, puis pour la distance cosinus, il s'avère que nous venons de faire la moyenne des produits dans l'historique des achats.
  2. Sommation de vecteurs avec une certaine pondération temporelle.
  3. Pesage de marchandises avec coefficient TF-IDF.

Dans le cas de la pondération linéaire du vecteur acheteur, on part de l'hypothèse que le produit que l'utilisateur a acheté hier a une plus grande influence sur son comportement que le produit qu'il a acheté il y a six mois. On considère donc la semaine précédente de l'acheteur avec un coefficient de 1, et ce qui s'est passé ensuite avec des coefficients de ½, ⅓, etc. :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Pour les coefficients TF-IDF, nous faisons exactement la même chose que dans TF-IDF pour les textes, seulement nous considérons l'acheteur comme un document, et le reçu comme une offre, respectivement, le mot est un produit. Ainsi, le vecteur utilisateur se déplacera davantage vers les biens rares, et les biens fréquents et familiers à l'acheteur ne le modifieront pas beaucoup. L'approche peut être illustrée comme ceci :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Voyons maintenant les métriques. Voici à quoi ressemblent les résultats de l'ALS :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne
Métriques par Item2Vec avec différentes variantes de construction du vecteur acheteur :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne
Dans ce cas, exactement le même modèle est utilisé que dans notre ligne de base. La seule différence est le k que nous allons utiliser. Afin d'utiliser uniquement des modèles collaboratifs, vous devez prendre environ 50 à 70 produits les plus proches pour chaque client.

Et les métriques DSSM :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Comment combiner toutes les méthodes ?

Cool, dites-vous, mais que faire avec un si grand nombre d'outils d'extraction de candidats ? Comment choisir la configuration optimale pour vos données ? Ici nous avons plusieurs problèmes :

  1. Il est nécessaire de limiter d'une manière ou d'une autre l'espace de recherche des hyperparamètres dans chaque méthode. Elle est, bien sûr, discrète partout, mais le nombre de points possibles est très grand.
  2. Comment choisir la meilleure configuration pour votre métrique en utilisant un petit échantillon limité de méthodes spécifiques avec des hyperparamètres spécifiques ?

Nous n'avons pas encore trouvé de réponse correcte sans ambiguïté à la première question, nous procédons donc comme suit : pour chaque méthode, un limiteur d'espace de recherche d'hyperparamètres est écrit, en fonction de certaines statistiques sur les données dont nous disposons. Ainsi, connaissant le délai moyen entre les achats auprès des personnes, on peut deviner avec quelle période utiliser la méthode « ce qui a déjà été acheté » et « la période d'un achat passé depuis longtemps ».

Et après avoir parcouru un nombre suffisant de variations de différentes méthodes, nous remarquons ce qui suit : chaque implémentation extrait un certain nombre de candidats et a une certaine valeur de la métrique (rappel) qui est clé pour nous. Nous voulons obtenir un certain nombre de candidats au total, en fonction de notre puissance de calcul autorisée, avec la métrique la plus élevée possible. Ici, le problème s'effondre joliment dans le problème du sac à dos.
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Ici, le nombre de candidats est le poids du lingot, et le rappel de méthode est sa valeur. Cependant, il y a 2 autres points qui doivent être pris en compte lors de la mise en œuvre de l'algorithme :

  • Les méthodes peuvent avoir un chevauchement dans les candidats qu'elles retirent.
  • Dans certains cas, il sera correct de prendre une méthode deux fois avec des paramètres différents, et les candidats à la sortie de la première ne seront pas un sous-ensemble de la seconde.

Par exemple, si nous prenons la mise en œuvre de la méthode "ce qui a déjà été acheté" avec différents intervalles d'extraction, alors leurs ensembles de candidats seront imbriqués les uns dans les autres. Dans le même temps, différents paramètres dans les "achats périodiques" à la sortie ne donnent pas une intersection complète. Par conséquent, nous divisons les méthodes d'échantillonnage avec différents paramètres en blocs de sorte qu'à partir de chaque bloc, nous voulons prendre au plus une approche d'extraction avec des hyperparamètres spécifiques. Pour ce faire, vous devez ruser un peu dans l'implémentation du problème du sac à dos, mais les asymptotiques et le résultat n'en changeront pas.

Une telle combinaison intelligente nous permet d'obtenir les métriques suivantes en comparaison avec des modèles simplement collaboratifs :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne
Sur les mesures finales, nous voyons l'image suivante :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

Cependant, vous pouvez voir ici qu'il existe un point non couvert pour les recommandations utiles aux entreprises. Maintenant, nous venons d'apprendre à prédire froidement ce que l'utilisateur achètera, par exemple la semaine prochaine. Mais juste donner un rabais sur le fait qu'il achètera de toute façon n'est pas très cool. Mais c'est cool de maximiser l'attente, par exemple, des métriques suivantes :

  1. Marge/chiffre d'affaires basé sur des recommandations personnelles.
  2. Chèque moyen des acheteurs.
  3. fréquence de visite.

Nous multiplions donc les probabilités obtenues par différents coefficients et les reclassons de manière à ce que le top comprenne les produits qui affectent les métriques ci-dessus. Il n'y a pas de solution toute faite ici, quelle approche est préférable d'utiliser. Même nous expérimentons de tels coefficients directement dans la production. Mais voici quelques astuces intéressantes qui nous donnent le plus souvent les meilleurs résultats :

  1. Multipliez par le prix/la marge de l'article.
  2. Multipliez par le contrôle moyen dans lequel le produit se produit. Ainsi, les marchandises sortiront avec lesquelles ils prennent habituellement autre chose.
  3. Multipliez par la fréquence moyenne des visites des acheteurs de ce produit, en partant de l'hypothèse que ce produit provoque pour lui des retours plus fréquents.

Après avoir expérimenté les coefficients, nous avons obtenu les métriques suivantes en production :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne
il est conversion globale du produit - la part des produits achetés de tous les produits dans les recommandations que nous avons générées.

Un lecteur attentif remarquera une différence significative entre les mesures hors ligne et en ligne. Ce comportement s'explique par le fait que tous les filtres dynamiques de produits pouvant être recommandés ne peuvent pas être pris en compte lors de l'apprentissage du modèle. C'est une histoire normale pour nous lorsque la moitié des candidats extraits peuvent être filtrés, une telle spécificité est typique de notre industrie.

En termes de revenus, l'histoire suivante est obtenue, il est clair qu'après le lancement des recommandations, les revenus du groupe de test augmentent fortement, maintenant l'augmentation moyenne des revenus avec nos recommandations est de 3-4% :
Comment nous avons considérablement amélioré la qualité des recommandations dans le commerce de détail hors ligne

En conclusion, je tiens à dire que si vous avez besoin de recommandations non en temps réel, une très forte augmentation de la qualité est constatée dans les expériences d'extraction de candidats pour les recommandations. Une grande quantité de temps pour les générer permet de combiner de nombreuses bonnes méthodes, qui au total donneront des résultats intéressants pour l'entreprise.

Je serai heureux de discuter dans les commentaires avec tous ceux qui trouvent le matériel intéressant. Vous pouvez me poser des questions en personne télégramme. Je partage également mes réflexions sur l'IA/les startups dans mon canal de télégramme - bienvenue 🙂

Source: habr.com

Ajouter un commentaire