Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Salutare tuturor! Numele meu este Sasha, sunt CTO și co-fondator la LoyaltyLab. În urmă cu doi ani, eu și prietenii mei, ca toți studenții săraci, mergeam seara să cumpărăm bere la cel mai apropiat magazin de lângă casa noastră. Am fost foarte supărați că retailerul, știind că vom veni la bere, nu a oferit reducere la chipsuri sau biscuiți, deși asta era atât de logic! Nu am înțeles de ce se întâmplă această situație și am decis să ne înființăm propria companie. Ei bine, ca bonus, oferă-ți reduceri în fiecare vineri la aceleași jetoane.

Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Și totul a ajuns la punctul în care prezint material din partea tehnică a produsului la NVIDIA GTC. Suntem bucuroși să împărtășim munca noastră cu comunitatea, așa că îmi public raportul sub forma unui articol.

Introducere

La fel ca toți ceilalți la începutul călătoriei, am început cu o prezentare generală a modului în care sunt realizate sistemele de recomandare. Și cea mai populară arhitectură s-a dovedit a fi următorul tip:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Este format din două părți:

  1. Eșantionarea candidaților pentru recomandări folosind un model simplu și rapid, de obicei unul colaborativ.
  2. Clasificarea candidaților cu un model de conținut mai complex și mai lent, luând în considerare toate caracteristicile posibile din date.

În continuare voi folosi următorii termeni:

  • candidat/candidat pentru recomandări — o pereche utilizator-produs care ar putea fi inclusă în recomandări în producție.
  • extragerea candidaților/extractorul/metoda de extracție a candidaților — un proces sau o metodă pentru extragerea „candidaților de recomandare” din datele disponibile.

Primul pas implică de obicei utilizarea diferitelor variante de filtrare colaborativă. Cel mai popular - ALS. Este surprinzător că majoritatea articolelor despre sistemele de recomandare dezvăluie doar diverse îmbunătățiri ale modelelor colaborative în prima etapă, dar nimeni nu vorbește prea mult despre alte metode de eșantionare. Pentru noi, abordarea de a folosi doar modele colaborative și diverse optimizări cu acestea nu a funcționat cu calitatea la care ne așteptam, așa că ne-am săpat în cercetările în mod special pe această parte. Și la sfârșitul articolului voi arăta cât de mult am reușit să îmbunătățim ALS, care a fost punctul nostru de bază.

Înainte de a trece la descrierea abordării noastre, este important să remarc că în recomandările în timp real, când este important pentru noi să luăm în considerare datele care au apărut acum 30 de minute, într-adevăr nu există multe abordări care să poată funcționa în timpul necesar. Dar, în cazul nostru, trebuie să colectăm recomandări nu mai mult de o dată pe zi și, în majoritatea cazurilor - o dată pe săptămână, ceea ce ne oferă posibilitatea de a folosi modele complexe și de a îmbunătăți calitatea de mai multe ori.

Să luăm drept bază ce valori arată numai ALS cu privire la sarcina de a extrage candidați. Valorile cheie pe care le monitorizăm sunt:

  • Precizie - proporția candidaților selectați corect dintre cei eșantionați.
  • Reamintirea este proporția de candidați care s-au întâmplat din cei care au fost de fapt în intervalul țintă.
  • Scorul F1 - Măsura F calculată pe cele două puncte anterioare.

Ne vom uita, de asemenea, la valorile modelului final după antrenamentul de creștere a gradientului cu funcții suplimentare de conținut. Există, de asemenea, 3 metrici principale aici:

  • precizie@5 - procentul mediu de produse din primele 5 din punct de vedere al probabilității pentru fiecare cumpărător.
  • response-rate@5 - conversia clienților de la o vizită la magazin la achiziționarea a cel puțin o ofertă personală (5 produse într-o singură ofertă).
  • avg roc-auc per user - medie roc-auc pentru fiecare cumpărător.

Este important de reținut că toate aceste valori sunt măsurate validarea încrucișată a seriilor de timp, adică antrenamentul are loc în primele k săptămâni, iar k+1 săptămână este luată ca date de testare. Astfel, suișurile și coborâșurile sezoniere au avut un impact minim asupra interpretării calității modelelor. În continuare, pe toate graficele, axa absciselor va indica numărul săptămânii în validare încrucișată, iar axa ordonatelor va indica valoarea metricii specificate. Toate graficele se bazează pe datele tranzacțiilor de la un client, astfel încât comparațiile între ele să fie corecte.

Înainte de a începe să descriem abordarea noastră, ne uităm mai întâi la linia de bază, care este un model antrenat de ALS.
Valori de recuperare a candidaților:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Valori finale:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Tratez toate implementările algoritmilor ca pe un fel de ipoteză de afaceri. Astfel, foarte aproximativ, orice model de colaborare poate fi considerat ca o ipoteză că „oamenii tind să cumpere ceea ce cumpără oameni asemănători lor”. După cum am spus deja, nu ne-am limitat la o astfel de semantică și iată câteva ipoteze care funcționează bine cu datele din retailul offline:

  1. Pe care l-am cumpărat deja.
  2. Similar cu ceea ce am cumpărat înainte.
  3. Perioada unei achiziții trecute de mult.
  4. Popular după categorie/marcă.
  5. Achiziții alternative de diferite bunuri de la o săptămână la alta (lanțuri Markov).
  6. Produse asemanatoare cumparatorilor, dupa caracteristicile construite de diferite modele (Word2Vec, DSSM etc.).

Ce ai cumparat inainte?

Cea mai evidentă euristică care funcționează foarte bine în comerțul cu amănuntul. Aici luăm toate bunurile pe care deținătorul cardului de fidelitate le-a achiziționat în ultimele K zile (de obicei 1-3 săptămâni), sau K zile în urmă cu un an. Aplicând numai această metodă, obținem următoarele metrici:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Aici este destul de evident că, cu cât luăm perioada mai lungă, cu atât avem mai multă reamintire și cu atât avem mai puțină precizie și invers. În medie, „ultimele 2 săptămâni” oferă rezultate mai bune pentru clienți.

Similar cu ceea ce am cumpărat înainte

Nu este surprinzător că pentru comerțul cu amănuntul „ce am cumpărat înainte” funcționează bine, dar extragerea candidaților numai din ceea ce utilizatorul a cumpărat deja nu este foarte mișto, deoarece este puțin probabil să surprindă cumpărătorul cu un produs nou. Prin urmare, ne propunem să îmbunătățim ușor această euristică folosind aceleași modele colaborative. Din vectorii pe care i-am primit în timpul instruirii ALS, putem obține produse similare cu cele achiziționate deja de utilizator. Această idee este foarte asemănătoare cu „videoclipurile similare” din serviciile de vizualizare a conținutului video, dar din moment ce nu știm ce mănâncă/cumpără utilizatorul la un moment dat, putem doar să căutăm altele similare cu ceea ce a cumpărat deja, mai ales întrucât noi Știm deja cât de bine funcționează. Aplicând această metodă asupra tranzacțiilor utilizatorilor din ultimele 2 săptămâni, obținem următoarele valori:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Aici k — numărul de produse similare care sunt preluate pentru fiecare produs achiziționat de cumpărător în ultimele 14 zile.
Această abordare a funcționat în special pentru clientul nostru, pentru care era esențial să nu recomande nimic din istoricul de achiziții al utilizatorului.

Perioada de achiziție cu întârziere

După cum am aflat deja, din cauza frecvenței mari de achiziție a bunurilor, prima abordare funcționează bine pentru nevoile noastre specifice. Dar ce zici de bunuri precum praf de spălat/șampon/etc. Adică, cu produse care este puțin probabil să fie necesare la fiecare săptămână sau două și pe care metodele anterioare nu le pot extrage. Acest lucru duce la următoarea idee - se propune să se calculeze perioada de achiziție a fiecărui produs în medie pentru clienții care au achiziționat produsul mai mult k o singura data. Și apoi extrageți ceea ce cel mai probabil cumpărătorul a rămas deja fără. Perioadele calculate pentru mărfuri pot fi verificate cu ochii pentru adecvare:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Și apoi ne vom uita dacă sfârșitul perioadei de produs se încadrează în intervalul de timp în care recomandările vor fi în producție și vom proba ce se întâmplă. Abordarea poate fi ilustrată astfel:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Aici avem 2 cazuri principale care pot fi luate în considerare:

  1. Este necesar să eșantionați produse de la clienții care au achiziționat produsul de mai puțin de K ori?
  2. Este necesară eșantionarea unui produs dacă sfârșitul perioadei sale se încadrează înainte de începutul intervalului țintă.

Următorul grafic arată ce rezultate obține această metodă cu diferiți hiperparametri:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline
ft — Luați numai clienții care au achiziționat produsul de cel puțin K (aici K=5) ori
tm — Luați doar candidații care se încadrează în intervalul țintă

Nu este de mirare că este capabil (0, 0) cel mai mare rechemare iar cel mai mic precizie, deoarece în această condiție sunt recuperați cei mai mulți candidați. Cu toate acestea, cele mai bune rezultate sunt obținute atunci când nu eșantionăm produse pentru clienții care au cumpărat un anumit produs mai puțin de k ori și extrage, inclusiv mărfuri, al cărui sfârșit de perioadă se încadrează înainte de intervalul țintă.

Popular după categorie

O altă idee destul de evidentă este de a proba produse populare din diferite categorii sau mărci. Aici calculăm pentru fiecare cumpărător sus-k categorii/mărci „preferate” și extrageți „populare” din această categorie/marcă. În cazul nostru, vom determina „favorit” și „popular” în funcție de numărul de achiziții ale produsului. Un avantaj suplimentar al acestei abordări este aplicabilitatea sa în cazul pornirii la rece. Adică pentru clienții care fie au făcut foarte puține achiziții, fie nu au mai fost de mult timp în magazin, fie tocmai au eliberat un card de fidelitate. Pentru ei, este mai ușor și mai bine să stoceze articole care sunt populare în rândul clienților și au un istoric. Valorile rezultate sunt:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline
Aici numărul de după cuvântul „categorie” înseamnă nivelul de imbricare al categoriei.

În general, nu este de mirare că categoriile mai restrânse obțin rezultate mai bune, deoarece extrag produse „preferate” mai precise pentru cumpărători.

Achiziții alternative de diferite bunuri de la o săptămână la alta

O abordare interesantă pe care nu am văzut-o în articolele despre sistemele de recomandare este o metodă statistică destul de simplă și în același timp funcțională a lanțurilor Markov. Aici luăm 2 săptămâni diferite, apoi pentru fiecare client construim perechi de produse [cumpărat în săptămâna i]-[cumpărat în săptămâna j], unde j > i, iar de aici calculăm pentru fiecare produs probabilitatea de a trece la alt produs săptămâna viitoare. Adică pentru fiecare pereche de mărfuri producti-productj Numărăm numărul lor în perechile găsite și împărțim la numărul de perechi, unde produse a fost în prima săptămână. Pentru a extrage candidați, luăm ultima chitanță a cumpărătorului și extragem sus-k cele mai probabile următoarele produse din matricea de tranziție pe care le-am primit. Procesul de construire a unei matrice de tranziție arată astfel:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Din exemple reale din matricea probabilității de tranziție, vedem următoarele fenomene interesante:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline
Aici puteți observa dependențe interesante care se dezvăluie în comportamentul consumatorului: de exemplu, iubitorii de citrice sau o marcă de lapte de la care este probabil să treacă la alta. De asemenea, nu este surprinzător faptul că aici ajung și produse cu o frecvență mare de achiziții repetate, precum untul.

Valorile din metoda cu lanțuri Markov sunt următoarele:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline
k — numărul de produse care sunt preluate pentru fiecare produs achiziționat din ultima tranzacție a cumpărătorului.
După cum putem vedea, cel mai bun rezultat este arătat de configurația cu k=4. Creșterea din săptămâna 4 poate fi explicată prin comportamentul sezonier în preajma sărbătorilor. 

Produse asemanatoare cumparatorilor, dupa caracteristicile construite de diferite modele

Acum am ajuns la partea cea mai dificilă și interesantă - căutarea celor mai apropiați vecini pe baza vectorilor clienților și a produselor construite după diverse modele. În munca noastră, folosim 3 astfel de modele:

  • ALS
  • Word2Vec (Item2Vec pentru astfel de sarcini)
  • DSSM

Ne-am ocupat deja de ALS, puteți citi despre cum învață aici. În cazul Word2Vec, folosim binecunoscuta implementare a modelului din gensim. Prin analogie cu textele, definim oferta ca chitanta de cumparare. Astfel, atunci când construiește un vector de produs, modelul învață să prezică pentru produsul din chitanță „contextul” acestuia (produsele rămase din bon). În datele de comerț electronic, este mai bine să folosiți sesiunea cumpărătorului în loc de chitanță; băieții de la Ozon. Și DSSM este mai interesant de analizat. Inițial, a fost scris de băieții de la Microsoft ca model de căutare, Puteți citi documentul original de cercetare aici. Arhitectura modelului arată astfel:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Aici Q — interogare, interogare de căutare utilizator, D[i] — document, pagină de internet. Intrarea în model este atributele cererii și, respectiv, paginilor. După fiecare strat de intrare există un număr de straturi complet conectate (perceptron multistrat). În continuare, modelul învață să minimizeze cosinusul dintre vectorii obținuți în ultimele straturi ale modelului.
Sarcinile de recomandare folosesc exact aceeași arhitectură, doar că în locul unei solicitări există un utilizator, iar în loc de pagini sunt produse. Și în cazul nostru, această arhitectură este transformată în următoarea:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Acum, pentru a verifica rezultatele, rămâne să acoperim ultimul punct - dacă în cazul ALS și DSSM avem vectori de utilizator definiți în mod explicit, atunci în cazul Word2Vec avem doar vectori de produs. Aici, pentru a construi vectorul utilizator, am definit 3 abordări principale:

  1. Doar adăugați vectorii, apoi pentru distanța cosinus se dovedește că pur și simplu am făcut media produselor din istoricul achizițiilor.
  2. Însumare vectorială cu o anumită ponderare în timp.
  3. Cântărirea mărfurilor cu coeficient TF-IDF.

În cazul ponderării liniare a vectorului cumpărător, pornim de la ipoteza că produsul pe care utilizatorul l-a cumpărat ieri are o influență mai mare asupra comportamentului său decât produsul pe care l-a cumpărat în urmă cu șase luni. Deci luăm în considerare săptămâna anterioară a cumpărătorului cu cote de 1 și ce s-a întâmplat în continuare cu cote de ½, ⅓ etc.:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Pentru coeficienții TF-IDF procedăm exact la fel ca în TF-IDF pentru texte, doar că considerăm cumpărătorul drept document, iar cecul ca ofertă, respectiv cuvântul este un produs. În acest fel, vectorul utilizatorului se va deplasa mai mult către bunuri rare, în timp ce bunurile frecvente și familiare pentru cumpărător nu îl vor schimba prea mult. Abordarea poate fi ilustrată astfel:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Acum să ne uităm la valorile. Iată cum arată rezultatele ALS:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline
Valori pentru Item2Vec cu diferite variante de construire a vectorului cumpărător:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline
În acest caz, se folosește exact același model ca în linia noastră de bază. Singura diferență este care k vom folosi. Pentru a utiliza doar modele colaborative, trebuie să luați aproximativ 50-70 de produse cele mai apropiate pentru fiecare client.

Și metrici conform DSSM:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Cum să combinați toate metodele?

Mișto, spuneți, dar ce să faceți cu un set atât de mare de instrumente de extracție a candidaților? Cum alegi configurația optimă pentru datele tale? Aici avem mai multe probleme:

  1. Este necesar să se limiteze cumva spațiul de căutare pentru hiperparametri în fiecare metodă. Este, desigur, discret peste tot, dar numărul de puncte posibile este foarte mare.
  2. Folosind un mic eșantion limitat de metode specifice cu hiperparametri specifici, cum puteți selecta cea mai bună configurație pentru valoarea dvs.?

Nu am găsit încă un răspuns definitiv corect la prima întrebare, așa că pornim de la următoarele: pentru fiecare metodă se scrie un limitator de spațiu de căutare hiperparametric, în funcție de unele statistici asupra datelor pe care le avem. Astfel, cunoscând perioada medie dintre achizițiile de la oameni, putem ghici cu ce perioadă să folosim metoda „ceea ce a fost deja cumpărat” și „perioada unei achiziții trecute de mult”.

Și după ce am trecut printr-un anumit număr adecvat de variații ale diferitelor metode, notăm următoarele: fiecare implementare extrage un anumit număr de candidați și are o anumită valoare a metricii cheie pentru noi (recall). Dorim să obținem în total un anumit număr de candidați, în funcție de puterea noastră de calcul permisă, cu cea mai mare măsură posibilă. Aici problema se prăbușește frumos în problema rucsacului.
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Aici numărul de candidați este greutatea lingoului, iar metoda de retragere este valoarea acestuia. Cu toate acestea, mai sunt 2 puncte care ar trebui luate în considerare la implementarea algoritmului:

  • Este posibil ca metodele să se suprapună în candidații pe care îi preiau.
  • În unele cazuri, va fi corect să luați o metodă de două ori cu parametri diferiți, iar rezultatul candidat din prima nu va fi un subset al celui de-al doilea.

De exemplu, dacă luăm implementarea metodei „ce am cumpărat deja” cu intervale diferite de recuperare, atunci seturile lor de candidați vor fi imbricate unul în celălalt. În același timp, diferiți parametri în „achizițiile periodice” la ieșire nu asigură intersecția completă. Prin urmare, împărțim abordările de eșantionare cu parametri diferiți în blocuri astfel încât din fiecare bloc să dorim să luăm cel mult o abordare de extracție cu hiperparametri specifici. Pentru a face acest lucru, trebuie să deveniți puțin inteligent în implementarea problemei rucsacului, dar asimptoticele și rezultatul nu se vor schimba.

Această combinație inteligentă ne permite să obținem următoarele valori în comparație cu modelele pur și simplu colaborative:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline
În metrica finală vedem următoarea imagine:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

Cu toate acestea, aici puteți observa că există un punct descoperit pentru recomandări care sunt utile pentru afaceri. Acum tocmai am învățat cum să facem o treabă grozavă de a prezice ce va cumpăra utilizatorul, de exemplu, săptămâna viitoare. Dar pur și simplu acordarea unei reduceri la ceva pe care el îl va cumpăra deja nu este foarte tare. Dar este grozav să maximizăm așteptările, de exemplu, pentru următoarele valori:

  1. Marja/cifra de afaceri bazată pe recomandări personale.
  2. Verificare medie a clientului.
  3. Frecvența vizitelor.

Așa că înmulțim probabilitățile obținute cu diferiți coeficienți și le reordonăm astfel încât produsele care afectează metricile de mai sus să ajungă în vârf. Nu există o soluție gata făcută pentru care abordare este cea mai bună de utilizat. Chiar și experimentăm cu astfel de coeficienți direct în producție. Dar iată tehnici interesante care de cele mai multe ori ne oferă cele mai bune rezultate:

  1. Înmulțiți cu prețul/marja produsului.
  2. Înmulțiți cu chitanța medie în care apare produsul. Deci vor veni bunuri, cu care de obicei iau altceva.
  3. Înmulțiți cu frecvența medie a vizitelor de către cumpărătorii acestui produs, pe baza ipotezei că acest produs îi determină pe oameni să se întoarcă mai des pentru el.

După efectuarea experimentelor cu coeficienți, am obținut următoarele metrici în producție:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline
Aici conversia globală a produselor — ponderea produselor achiziționate din toate produsele în recomandările pe care le-am generat.

Cititorul atent va observa o diferență semnificativă între valorile offline și online. Acest comportament se explică prin faptul că nu toate filtrele dinamice pentru produsele care pot fi recomandate pot fi luate în considerare la antrenamentul modelului. Pentru noi, este o poveste normală când jumătate dintre candidații recuperați pot fi filtrați; această specificitate este tipică în industria noastră.

În ceea ce privește veniturile, se obține următoarea poveste, este clar că după lansarea recomandărilor, veniturile grupului de testare sunt în creștere puternică, acum creșterea medie a veniturilor cu recomandările noastre este de 3-4%:
Cum am îmbunătățit dramatic calitatea recomandărilor în retailul offline

În concluzie, vreau să spun că dacă aveți nevoie de recomandări non-real, atunci o creștere foarte mare a calității poate fi găsită în experimentele de extragere a candidaților pentru recomandări. O cantitate mare de timp pentru generarea lor face posibilă combinarea multor metode bune, care în total vor da rezultate excelente pentru afacere.

Voi fi bucuros să discut în comentarii cu oricine consideră materialul interesant. Îmi puteți adresa întrebări personal la telegramă. Îmi împărtășesc și gândurile despre AI/startup-uri în mine canal telegram - Bine ati venit :)

Sursa: www.habr.com

Adauga un comentariu