Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Hej alla! Jag heter Sasha, jag är CTO och medgrundare på LoyaltyLab. För två år sedan gick jag och mina vänner, precis som alla fattiga studenter, på kvällen och tog en öl till närmaste butik nära huset. Vi var mycket upprörda över att återförsäljaren, som visste att vi skulle komma för öl, inte erbjöd rabatt på chips eller kex, även om detta är så logiskt! Vi förstod inte varför den här situationen uppstår och beslutade att skapa ett eget företag. Tja, som en bonus, skriv ut rabatter till dig själv varje fredag ​​för samma marker.

Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Och allt kom till den grad att jag pratar med material om den tekniska sidan av produkten på NVIDIA GTC. Vi delar gärna vårt arbete med samhället, så jag lägger upp min rapport i form av en artikel.

Inledning

Som alla i början av resan började vi med en översikt över hur rekommendatorsystem är gjorda. Och arkitekturen av följande typ visade sig vara den mest populära:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Den består av två delar:

  1. Sampling av kandidater för rekommendationer genom en enkel och snabb modell, vanligtvis i samarbete.
  2. Rangordning av kandidater efter en mer komplex och långsammare innehållsmodell, med hänsyn till alla möjliga funktioner i datan.

Här och nedan kommer jag att använda följande termer:

  • kandidat/kandidat för rekommendationer - ett par användarprodukter, som potentiellt kan komma in i rekommendationer i produktionen.
  • kandidatextraktion/extraktor/kandidatextraktionsmetod — En process eller metod för att extrahera "kandidater för rekommendationer" från tillgängliga data.

I det första steget används vanligtvis olika varianter av kollaborativ filtrering. Den mest populära - ALS. Överraskande nog avslöjar de flesta artiklar om rekommendatorsystem bara olika förbättringar av samarbetsmodeller i det första skedet, men ingen talar om andra provtagningsmetoder. För oss fungerade inte tillvägagångssättet att bara använda samarbetsmodeller och olika optimeringar med dem med den kvalitet som vi förväntade oss, så vi grävde i forskningen specifikt på denna del. Och i slutet av artikeln kommer jag att visa hur mycket vi kunde förbättra ALS, vilket var vår baslinje.

Innan jag går vidare till att beskriva vårt tillvägagångssätt är det viktigt att notera att med realtidsrekommendationer, när det är viktigt för oss att överväga data som hände för 30 minuter sedan, finns det verkligen inte många tillvägagångssätt som kan fungera i rätt tid. Men i vårt fall måste vi samla in rekommendationer inte mer än en gång om dagen, och i de flesta fall - en gång i veckan, vilket ger oss möjlighet att använda komplexa modeller och multiplicera kvaliteten.

Låt oss ta som baslinjen vilka mått som endast ALS visar på uppgiften att extrahera kandidater. De viktigaste mätvärdena vi övervakar är:

  • Precision - andelen korrekt utvalda kandidater från de provtagna.
  • Recall - andelen kandidater som hände av de som faktiskt var i målintervallet.
  • F1-poäng - F-poäng beräknat på de två föregående poängen.

Vi kommer också att titta på mätvärdena för den slutliga modellen efter träningsgradientförstärkning med ytterligare innehållsfunktioner. Det finns också 3 huvudmått:

  • precision@5 — genomsnittlig procentandel av träffar från topp 5 efter sannolikhet för varje kund.
  • response-rate@5 — konvertering av köpare från ett besök i butiken till köp av minst ett personligt erbjudande (ett erbjudande innehåller 5 produkter).
  • avg roc-auc per användare - medium roc-auc för varje köpare.

Det är viktigt att notera att alla dessa mätvärden mäts på korsvalidering av tidsserier, det vill säga träning sker under de första k veckorna, och k + 1 veckor tas som testdata. Säsongsbetonade upp-/nedgångar hade alltså en minimal effekt på tolkningen av modellernas kvalitet. Vidare, på alla diagram, kommer abskissaxeln att indikera veckonummer vid korsvalidering, och ordinataaxeln kommer att indikera värdet på det angivna måttet. Alla grafer är baserade på transaktionsdata från en kund, så att jämförelsen mellan dem är korrekt.

Innan vi börjar beskriva vårt tillvägagångssätt, låt oss först ta en titt på baslinjen, som är den ALS-tränade modellen.
Kandidatextraktionsstatistik:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Slutliga mätvärden:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Jag behandlar alla implementeringar av algoritmer som någon form av affärshypotes. Sålunda, mycket grovt, kan alla samarbetsmodeller betraktas som en hypotes att "människor tenderar att köpa det som människor gillar att de köper". Som jag sa, vi begränsade oss inte till sådan semantik, och här är några hypoteser som fortfarande fungerar coolt på data i offline-handeln:

  1. Vad har du köpt tidigare.
  2. Liknar det jag köpte innan.
  3. Perioden för ett långt tidigare köp.
  4. Populär efter kategori/märke.
  5. Alternativa inköp av olika varor från vecka till vecka (Markov-kedjor).
  6. Liknande produkter som köpare, enligt de egenskaper som byggs av olika modeller (Word2Vec, DSSM, etc.).

Vad köpte du innan

Den mest uppenbara heuristiken som fungerar väldigt bra i dagligvaruhandeln. Här tar vi alla varor som stamkortsinnehavaren köpte de senaste K-dagarna (vanligtvis 1-3 veckor), eller K-dagar för ett år sedan. Genom att endast använda denna metod får vi följande mätvärden:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Det är ganska uppenbart här att ju mer vi tar perioden, desto mer återkallelse och mindre precision har vi och vice versa. Bättre resultat i genomsnitt för kunder ger de "senaste 2 veckorna".

Liknar det jag köpte innan

Inte överraskande fungerar "vad har köpt tidigare" bra för dagligvaruhandeln, men att bara extrahera kandidater från det som användaren redan har köpt är inte särskilt coolt, eftersom det är osannolikt att det kommer att vara möjligt att överraska köparen med någon ny produkt. Därför föreslår vi att denna heuristik förbättras något med samma samarbetsmodeller. Från de vektorer som vi fick under ALS-utbildningen kan du få liknande produkter som användaren redan har köpt. Denna idé är mycket lik "liknande videor" i videoinnehållsvisningstjänster, men eftersom vi inte vet vad användaren äter/köper vid ett visst tillfälle, kan vi bara leta efter något som liknar det han redan har köpt, speciellt eftersom vi redan vet hur bra det fungerar. Genom att använda den här metoden på användartransaktioner under de senaste två veckorna får vi följande mätvärden:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Här k - antalet liknande produkter som hämtas för varje produkt köpt av köparen under de senaste 14 dagarna.
Detta tillvägagångssätt fungerade särskilt bra för oss på en kund som var kritisk till att inte alls rekommendera det som redan fanns i användarens köphistorik.

Långt över köpperioden

Som vi redan har fått reda på, på grund av den höga frekvensen av att köpa varor, fungerar det första tillvägagångssättet bra för våra detaljer. Men hur är det med varor som tvättpulver/schampo/etc. Det vill säga med produkter som sannolikt inte kommer att behövas var eller varannan vecka och som tidigare metoder inte kan extrahera. Detta innebär följande idé - det föreslås att beräkna inköpsperioden för varje produkt i genomsnitt för köpare som köpte produkten mer k en gång. Och ta sedan ut det som med största sannolikhet köparen redan har tagit slut. De beräknade perioderna för varor kan kontrolleras med ögonen för tillräcklighet:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Och sedan får vi se om slutet av produktperioden faller inom tidsintervallet när rekommendationerna kommer att vara i produktion och ta prov på vad som faller. Tillvägagångssättet kan illustreras så här:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Här har vi två huvudfall som kan övervägas:

  1. Om man ska prova produkter för kunder som köpt produkten mindre än K gånger.
  2. Om produkten ska provas om slutet av dess period infaller före början av målintervallet.

Följande graf visar vilka resultat en sådan metod uppnår med olika hyperparametrar:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel
ft - Ta bara köpare som köpt produkten minst K (här K = 5) gånger
tm — Ta bara kandidater som faller inom målintervallet

Inte överraskande, kunna (0, 0) den största minns och den minsta precision, eftersom de flesta kandidaterna under detta villkor extraheras. Bäst resultat erhålls dock när vi inte provar produkter för kunder som köpt en viss produkt mindre än k tider och utvinna bland annat varor vars periodslut faller före målintervallet.

Populär efter kategori

En annan ganska uppenbar idé är att prova populära produkter i olika kategorier eller märken. Här räknar vi för varje kund topp-k "favorit" kategorier/varumärken och extrahera "populära" från den kategorin/varumärket. I vårt fall definierar vi "favorit" och "populär" med antalet produktköp. En ytterligare fördel med detta tillvägagångssätt är dess tillämpbarhet i ett kallstartfall. Det vill säga för kunder som har gjort antingen väldigt få inköp, eller inte varit i butiken på länge, eller i allmänhet bara har utfärdat ett stamkort. För dem är det lättare och bäst att kasta in varor från populära bland köpare med en befintlig historia. Mätvärdena är följande:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel
Här betyder siffran efter ordet "kategori" kategorins kapslingsnivå.

I allmänhet är det inte heller förvånande att smalare kategorier ger bättre resultat, eftersom de extraherar mer exakta "favorit"-produkter för köpare.

Alternativa inköp av olika varor från vecka till vecka

Ett intressant tillvägagångssätt som jag inte sett i artiklar om rekommenderarsystem är en ganska enkel och samtidigt fungerande statistisk metod av Markov-kedjor. Här tar vi 2 olika veckor, sedan bygger vi för varje kund par av produkter [köpt i vecka i]-[köpt i vecka j], där j > i, och härifrån beräknar vi för varje produkt sannolikheten att byta till en annan produkt nästa vecka. Det vill säga för varje par varor produkti-produktj räkna deras antal i de hittade paren och dividera med antalet par, där produkti var den första veckan. För att extrahera kandidater tar vi den sista kontrollen av köparen och får topp-k de mest troliga nästa produkterna från övergångsmatrisen vi fick. Processen att bygga en övergångsmatris ser ut så här:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Från verkliga exempel i matrisen av övergångssannolikheter ser vi följande intressanta fenomen:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel
Här kan du märka intressanta beroenden som avslöjas i konsumentbeteende: till exempel citrusälskare eller ett märke av mjölk, från vilket de med största sannolikhet byter till en annan. Det är inte heller förvånande att varor med höga återköp, som smör, också hamnar här.

Måtten i metoden med Markov-kedjor är följande:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel
k - antalet produkter som hämtas för varje köpt vara från köparens senaste transaktion.
Som vi kan se visar konfigurationen med k=4 det bästa resultatet. Piggen vid vecka 4 kan förklaras av säsongsbeteende kring helgdagar. 

Liknande produkter till köpare, enligt egenskaper byggda av olika modeller

Så vi kommer till den svåraste och mest intressanta delen - sökandet efter de närmaste grannarna i vektorerna för köpare och produkter byggda enligt olika modeller. I vårt arbete använder vi tre sådana modeller:

  • ALS
  • Word2Vec (Item2Vec för sådana uppgifter)
  • DSSM

Vi har redan behandlat ALS, du kan läsa om hur det lär sig här. När det gäller Word2Vec använder vi den välkända implementeringen av modellen från gensim. I analogi med texterna definierar vi erbjudandet som ett köpkvitto. När man konstruerar produktvektorn lär sig modellen alltså att förutsäga dess "kontext" för produkten i kvittot (resten av varorna i kvittot). I e-handelsdata är det bättre att använda köparens session istället för ett kvitto, killarna från Ozon. Och DSSM är mer intressant att ta isär. Det skrevs ursprungligen av killarna från Microsoft som en sökmodell, du kan läsa den ursprungliga forskningsartikeln här. Modellens arkitektur ser ut så här:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Här Q - fråga, användarens sökfråga, D[i] - dokument, webbsida. Ingången av modellen tar emot tecken på begäran respektive sidor. Varje ingångsskikt följs av ett antal helt anslutna skikt (flerskiktsperceptron). Därefter lär sig modellen att minimera cosinus mellan vektorerna som erhålls i de sista lagren av modellen.
Rekommendationsuppgifterna använder exakt samma arkitektur, men istället för en begäran finns det en användare och istället för sidor finns det produkter. Och i vårt fall omvandlas denna arkitektur till följande:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Nu, för att kontrollera resultaten, återstår det att täcka den sista punkten - om vi i fallet med ALS och DSSM uttryckligen har definierat användarvektorer, så har vi i fallet med Word2Vec bara produktvektorer. Här, för att bygga en användarvektor, har vi identifierat tre huvudsakliga tillvägagångssätt:

  1. Lägg bara till vektorerna, sedan visar det sig för cosinusavståndet att vi precis har beräknat ett genomsnitt av produkterna i shoppinghistorien.
  2. Summering av vektorer med viss tidsviktning.
  3. Vägning av gods med TF-IDF koefficient.

Vid linjär viktning av köparvektorn utgår vi från hypotesen att produkten som användaren köpte igår har ett större inflytande på hans beteende än produkten som han köpte för sex månader sedan. Så vi betraktar köparens föregående vecka med en koefficient på 1, och vad som hände sedan med koefficienter på ½, ⅓, etc.:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

För TF-IDF-koefficienter gör vi exakt samma sak som i TF-IDF för texter, bara vi betraktar köparen som ett dokument, respektive kvittot som ett erbjudande, ordet är en produkt. Så användarvektorn kommer att skifta mer mot sällsynta varor, och varor som är frekventa och bekanta för köparen kommer inte att förändra det mycket. Tillvägagångssättet kan illustreras så här:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Låt oss nu titta på måtten. Så här ser ALS-resultaten ut:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel
Mätvärden av Item2Vec med olika varianter av att konstruera köparvektorn:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel
I det här fallet används exakt samma modell som i vår baslinje. Den enda skillnaden är vilket k vi kommer att använda. För att endast använda samarbetsmodeller måste du ta cirka 50-70 närmaste produkter för varje kund.

Och DSSM-statistik:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Hur kombinerar man alla metoder?

Coolt, säger du, men vad ska man göra med en så stor uppsättning av kandidatextraktionsverktyg? Hur väljer man den optimala konfigurationen för dina data? Här har vi flera problem:

  1. Det är nödvändigt att på något sätt begränsa sökutrymmet för hyperparametrar i varje metod. Det är naturligtvis diskret överallt, men antalet möjliga poäng är väldigt stort.
  2. Hur väljer man den bästa konfigurationen för ditt mått med ett litet begränsat urval av specifika metoder med specifika hyperparametrar?

Vi har ännu inte hittat ett otvetydigt korrekt svar på den första frågan, så vi utgår från följande: för varje metod skrivs en hyperparametersökutrymmesbegränsare, beroende på viss statistik på de data som vi har. Genom att känna till den genomsnittliga perioden mellan köp från människor kan vi gissa med vilken period vi ska använda metoden "vad som redan har köpts" och "perioden för ett långt tidigare köp".

Och efter att vi har gått igenom ett tillräckligt antal variationer av olika metoder, noterar vi följande: varje implementering extraherar ett visst antal kandidater och har ett visst värde av måtten (återkallelse) som är nyckeln för oss. Vi vill få ett visst antal kandidater totalt, beroende på vår tillåtna beräkningskraft, med högsta möjliga mått. Här faller problemet fint ihop i ryggsäcksproblemet.
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Här är antalet kandidater vikten av götet, och metodåterkallelsen är dess värde. Det finns dock ytterligare två punkter som bör beaktas när du implementerar algoritmen:

  • Metoder kan ha överlappning i kandidaterna de drar ut.
  • I vissa fall kommer det att vara korrekt att ta en metod två gånger med olika parametrar, och kandidaterna vid utgången av den första kommer inte att vara en delmängd av den andra.

Till exempel, om vi tar implementeringen av metoden "vad som redan har köpts" med olika intervall för extraktion, kommer deras uppsättningar av kandidater att kapslas in i varandra. Samtidigt ger olika parametrar i de "periodiska köpen" vid utgången inte en fullständig korsning. Därför delar vi upp samplingsmetoder med olika parametrar i block så att vi från varje block vill ta högst en extraktionsmetod med specifika hyperparametrar. För att göra detta måste du lura lite i implementeringen av ryggsäcksproblemet, men asymptotiken och resultatet kommer inte att förändras från detta.

En sådan smart kombination gör att vi kan få följande mätvärden i jämförelse med helt enkelt samarbetsmodeller:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel
På de slutliga måtten ser vi följande bild:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Men här kan du se att det finns en avslöjad punkt för rekommendationer som är användbara för företag. Nu har vi precis lärt oss hur man coolt förutsäger vad användaren kommer att köpa, till exempel nästa vecka. Men att bara ge rabatt på att han kommer att köpa ändå är inte särskilt coolt. Men det är coolt att maximera förväntningarna, till exempel på följande mätvärden:

  1. Marginal/omsättning baserat på personliga rekommendationer.
  2. Genomsnittlig kontroll av köpare.
  3. besöksfrekvens.

Så vi multiplicerar de erhållna sannolikheterna med olika koefficienter och rangordnar dem så att toppen inkluderar produkter som påverkar måtten ovan. Det finns ingen färdig lösning här, vilket tillvägagångssätt är bättre att använda. Även vi experimenterar med sådana koefficienter direkt i produktionen. Men här är några intressanta knep som oftast ger oss de bästa resultaten:

  1. Multiplicera med artikelns pris/marginal.
  2. Multiplicera med den genomsnittliga kontrollen där produkten förekommer. Så varorna kommer ut som de brukar ta något annat med.
  3. Multiplicera med den genomsnittliga besöksfrekvensen av köpare av denna produkt, baserat på hypotesen att denna produkt provocerar oftare returer för den.

Efter att ha experimenterat med koefficienter fick vi följande mått i produktionen:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel
Här övergripande produktomvandling - andelen köpta produkter från alla produkter i de rekommendationer som vi genererade.

En uppmärksam läsare kommer att märka en betydande skillnad mellan offline- och onlinemätvärden. Detta beteende förklaras av att inte alla dynamiska filter för produkter som kan rekommenderas kan tas med i beräkningen när man tränar modellen. Det är en normal historia för oss när hälften av de extraherade kandidaterna kan filtreras bort, en sådan specificitet är typisk i vår bransch.

När det gäller intäkter erhålls följande historia, det är tydligt att efter lanseringen av rekommendationerna växer testgruppens intäkter kraftigt, nu är den genomsnittliga ökningen av intäkterna med våra rekommendationer 3-4%:
Hur vi dramatiskt förbättrade kvaliteten på rekommendationer i offlinehandel

Avslutningsvis vill jag säga att om du behöver rekommendationer som inte är realtids, så återfinns en mycket stor kvalitetshöjning i experiment med att extrahera kandidater för rekommendationer. En stor mängd tid att generera dem gör det möjligt att kombinera många bra metoder, vilket sammantaget kommer att ge häftiga resultat för verksamheten.

Jag kommer gärna att chatta i kommentarerna med alla som tycker att materialet är intressant. Du kan ställa frågor till mig personligen telegram. Jag delar också med mig av mina tankar om AI/startups i min telegram kanal – välkommen 🙂

Källa: will.com

Lägg en kommentar