Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Tere kõigile! Minu nimi on Sasha, ma olen LoyaltyLabi CTO ja kaasasutaja. Kaks aastat tagasi käisime sõpradega, nagu kõik vaesed õpilased, õhtuti meie maja lähedal lähimast poest õlut ostmas. Olime väga häiritud, et jaemüüja teades, et tuleme õllele, ei teinud krõpsudele ega kreekeritele allahindlust, kuigi see oli nii loogiline! Me ei saanud aru, miks selline olukord juhtus ja otsustasime asutada oma ettevõtte. Noh, boonusena tehke endale igal reedel samadelt žetoonidelt allahindlusi.

Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Ja see kõik jõudis punktini, kus ma esitan materjali toote tehnilise külje kohta NVIDIA GTC. Meil on hea meel jagada oma tööd kogukonnaga, seega avaldan oma raporti artikli kujul.

Sissejuhatus

Nagu kõik teisedki teekonna alguses, alustasime ülevaatega, kuidas soovitussüsteeme tehakse. Ja kõige populaarsem arhitektuur osutus järgmist tüüpi:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

See koosneb kahest osast:

  1. Soovituste kandidaatide valim, kasutades lihtsat ja kiiret mudelit, tavaliselt koostöömudelit.
  2. Kandidaatide järjestamine keerukama ja aeglasema sisumudeliga, võttes arvesse kõiki võimalikke andmeid andmetes.

Edaspidi kasutan järgmisi termineid:

  • kandidaat/soovituste kandidaat — kasutaja-tootepaar, mis võiks olla tootmissoovituste hulgas.
  • kandidaatide ekstraheerimise/ekstraktori/kandidaadi ekstraheerimise meetod — protsess või meetod „soovituse kandidaatide” väljavõtmiseks olemasolevatest andmetest.

Esimene samm hõlmab tavaliselt koostööpõhise filtreerimise erinevate variatsioonide kasutamist. Kõige populaarsem - ALS. On üllatav, et enamik soovitussüsteeme käsitlevaid artikleid paljastavad koostöömudelite erinevaid täiustusi alles esimeses etapis, kuid keegi ei räägi palju teistest valimivõtumeetoditest. Meie jaoks ei töötanud ainult koostöömudelite ja nendega seotud erinevate optimeerimiste kasutamine ootuspärase kvaliteediga, mistõttu uurisime konkreetselt selle osa kohta. Ja artikli lõpus näitan, kui palju suutsime parandada ALS-i, mis oli meie lähtetase.

Enne kui asun oma lähenemisviisi kirjeldama, on oluline märkida, et reaalajas soovitustes, kui meie jaoks on oluline võtta arvesse 30 minutit tagasi toimunud andmeid, ei ole tõesti palju lähenemisviise, mis saaksid vajaliku aja jooksul töötada. Kuid meie puhul peame soovitusi koguma mitte rohkem kui üks kord päevas ja enamikul juhtudel - kord nädalas, mis annab meile võimaluse kasutada keerukaid mudeleid ja parandada kvaliteeti mitu korda.

Võtame aluseks, milliseid mõõdikuid ainult ALS näitab kandidaatide eraldamise ülesande kohta. Peamised mõõdikud, mida jälgime, on:

  • Täpsus – õigesti valitud kandidaatide osakaal valimisse kuuluvate kandidaatide hulgast.
  • Meenutamine on nende kandidaatide osakaal, kes tegelikult olid sihtvahemikus.
  • F1-skoor – F-mõõt, mis on arvutatud kahe eelmise punkti alusel.

Vaatame ka lõpliku mudeli mõõdikuid pärast gradiendi suurendamise treenimist täiendavate sisufunktsioonidega. Siin on ka kolm peamist mõõdikut:

  • precision@5 – toodete keskmine protsent 5 parima hulgast tõenäosuse järgi iga ostja kohta.
  • response-rate@5 - klientide konversioon poekülastusest vähemalt ühe personaalse pakkumise ostmiseks (5 toodet ühes pakkumises).
  • keskmine roc-auc kasutaja kohta – keskmine roc-auc iga ostja jaoks.

Oluline on märkida, et kõiki neid mõõdikuid mõõdetakse aegridade ristvalideerimine, see tähendab, et treening toimub esimesel k nädalal ja katseandmeteks võetakse k+1 nädal. Seega mõjutasid hooajalised tõusud ja mõõnad mudelite kvaliteedi tõlgendamist minimaalselt. Lisaks näitab kõigil graafikutel abstsisstell ristvalideerimisel nädala numbrit ja ordinaattelg näitab määratud mõõdiku väärtust. Kõik graafikud põhinevad ühe kliendi tehinguandmetel, et omavahelised võrdlused oleksid õiged.

Enne kui hakkame oma lähenemisviisi kirjeldama, vaatame esmalt baasjoont, mis on ALS-i koolitatud mudel.
Kandidaatide otsingumõõdikud:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Lõplikud mõõdikud:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Kõiki algoritmide teostusi käsitlen kui mingisugust ärihüpoteesi. Seega võib iga koostöömudelit väga umbkaudselt pidada hüpoteesiks, et "inimesed kipuvad ostma seda, mida nendega sarnased inimesed ostavad". Nagu ma juba ütlesin, ei piirdunud me ainult sellise semantikaga ja siin on mõned hüpoteesid, mis võrguühenduseta jaemüügi andmete puhul hästi toimivad:

  1. Mida olen juba varem ostnud.
  2. Sarnane sellele, mida ma varem ostsin.
  3. Kaua möödunud ostuperiood.
  4. Populaarne kategooria/brändi järgi.
  5. Erinevate kaupade vahelduvad ostud nädalast nädalasse (Markovi ketid).
  6. Ostjatele sarnased tooted erinevate mudelite (Word2Vec, DSSM jne) poolt ehitatud omaduste järgi.

Mida sa enne ostsid?

Kõige ilmsem heuristika, mis töötab väga hästi toidukaupade jaemüügis. Siia võtame kõik kaubad, mille kliendikaardi omanik ostis viimase K päeva jooksul (tavaliselt 1-3 nädalat), või K päeva aasta tagasi. Ainult seda meetodit rakendades saame järgmised mõõdikud:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Siin on üsna ilmne, et mida pikemaks perioodiks võtame, seda rohkem on meil meeldetuletust ja vähem täpsust ning vastupidi. Keskmiselt annab „viimased 2 nädalat“ klientidele paremaid tulemusi.

Sarnane sellele, mida ma varem ostsin

Pole üllatav, et toidukaupade jaemüügis töötab hästi see, mida ma varem ostsin, kuid kandidaatide väljavõtmine ainult sellest, mida kasutaja on juba ostnud, pole eriti lahe, sest tõenäoliselt ei üllata see ostjat mõne uue tootega. Seetõttu teeme ettepaneku seda heuristikat veidi parandada, kasutades samu koostöömudeleid. ALS-i koolituse käigus saadud vektoritest saame sarnaseid tooteid, mida kasutaja on juba ostnud. See idee on väga sarnane "sarnaste videotega" videosisu vaatamise teenustes, kuid kuna me ei tea, mida kasutaja konkreetsel hetkel sööb/ostab, saame otsida ainult sarnaseid videoid, mida ta on juba ostnud, eriti me teame juba, kui hästi see töötab. Rakendades seda meetodit kasutajatehingute puhul viimase 2 nädala jooksul, saame järgmised mõõdikud.
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

see on k — sarnaste toodete arv, mis on ostja poolt viimase 14 päeva jooksul ostetud iga toote kohta.
See lähenemine töötas eriti hästi meie kliendi puhul, kelle jaoks oli ülioluline mitte soovitada midagi, mis oli juba kasutaja ostuajaloos.

Hiline ostuperiood

Nagu juba teada saime, toimib kaupade ostmise suure sageduse tõttu esimene lähenemine meie konkreetsetele vajadustele hästi. Aga kuidas on sellise kaubaga nagu pesupulber/šampoon/jne. See tähendab, et toodetega, mida tõenäoliselt iga nädala või kahe tagant vaja ei lähe ja mida varasemad meetodid ei saa ekstraheerida. See viib järgmise ideeni - tehakse ettepanek arvutada iga toote ostuperiood keskmiselt klientidele, kes ostsid toodet rohkem k üks kord. Ja seejärel eraldage see, mis ostjal suure tõenäosusega juba otsa on saanud. Kaubale arvutatud perioodide piisavust saab oma silmaga kontrollida:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Ja siis vaatame, kas tooteperioodi lõpp jääb ajavahemikku, mil soovitused valmivad, ja proovime, mis juhtub. Seda lähenemist saab illustreerida järgmiselt:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Siin on kaks peamist juhtumit, mida võib kaaluda:

  1. Kas on vaja proovida tooteid klientidelt, kes on ostnud toodet vähem kui K korda.
  2. Kas tootest on vaja proovi võtta, kui selle perioodi lõpp langeb enne sihtintervalli algust.

Järgmine graafik näitab, milliseid tulemusi see meetod erinevate hüperparameetritega annab:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis
ft — Võtke ainult need kliendid, kes on ostnud toote vähemalt K (siin K=5) korda
tm — Võtke ainult need kandidaadid, kes jäävad sihtvahemikku

Pole üllatav, et ta suudab (0, 0) suurim tagasikutsumine ja kõige väiksem täpsus, kuna sellel tingimusel otsitakse alla kõige rohkem kandidaate. Parimad tulemused saavutatakse aga siis, kui me ei proovi tooteid klientidele, kes ostsid konkreetse toote vähem kui k kellaajad ja väljavõte, sealhulgas kaubad, mille perioodi lõpp langeb enne sihtintervalli.

Populaarne kategooria järgi

Teine üsna ilmne idee on proovida populaarseid tooteid erinevatest kategooriatest või kaubamärkidest. Siin arvutame iga ostja kohta top-k "lemmik" kategooriad/brändid ja eraldage "populaarne" sellest kategooriast/brändist. Meie puhul määrame “lemmik” ja “populaarne” toote ostude arvu järgi. Selle lähenemisviisi täiendav eelis on selle rakendatavus külmkäivituse korral. Ehk siis klientidele, kes on kas väga vähe oste teinud või pole pikka aega poes käinud või on just väljastanud kliendikaardi. Nende jaoks on lihtsam ja parem varuda esemeid, mis on klientide seas populaarsed ja millel on ajalugu. Saadud mõõdikud on järgmised:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis
Siin tähistab sõna “kategooria” järel olev arv kategooria pesastumise taset.

Üldiselt pole ka üllatav, et kitsamad kategooriad saavutavad paremaid tulemusi, sest need toovad ostjate jaoks välja täpsemad "lemmiktooted".

Erinevate kaupade vahelduvad ostud nädalast nädalasse

Huvitav lähenemine, mida ma soovitussüsteeme käsitlevates artiklites pole näinud, on üsna lihtne ja samas toimiv Markovi kettide statistiline meetod. Siin võtame 2 erinevat nädalat, seejärel ehitame igale kliendile tootepaarid [ostetud nädalal i]-[ostetud nädalal j], kus j > i, ja siit arvutame iga toote puhul järgmisel nädalal teisele tootele ülemineku tõenäosuse. See tähendab iga kaubapaari kohta producti-productj Loendame nende arvu leitud paaridesse ja jagame paaride arvuga, kus tooted oli esimesel nädalal. Kandidaatide väljavõtmiseks võtame ostja viimase kviitungi ja väljavõtte top-k kõige tõenäolisemad järgmised tooted siirdemaatriksist, mille saime. Üleminekumaatriksi koostamise protsess näeb välja järgmine:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Ülemineku tõenäosusmaatriksi tegelikest näidetest näeme järgmisi huvitavaid nähtusi:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis
Siin võib märgata huvitavaid sõltuvusi, mis ilmnevad tarbijakäitumises: näiteks tsitrusviljade armastajad või piimamargi austajad, millelt nad tõenäoliselt teisele üle lähevad. Samuti pole üllatav, et siia satuvad ka sageli korduvate ostudega tooted, nagu või.

Markovi ahelatega meetodi mõõdikud on järgmised:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis
k — toodete arv, mis ostja viimasest tehingust iga ostetud toote kohta välja otsitakse.
Nagu näeme, näitab parimat tulemust konfiguratsioon, kus k=4. Neljanda nädala hüppeline tõus on seletatav hooajalise käitumisega pühade ajal. 

Ostjatele sarnased tooted vastavalt erinevate mudelite ehitatud omadustele

Nüüd oleme jõudnud kõige keerulisema ja huvitavama osani - lähimate naabrite otsimine klientide vektorite ja erinevate mudelite järgi ehitatud toodete põhjal. Oma töös kasutame 3 sellist mudelit:

  • ALS
  • Word2Vec (Item2Vec selliste ülesannete jaoks)
  • DSSM

Oleme ALS-iga juba tegelenud, saate lugeda, kuidas see õpib siin. Word2Vec puhul kasutame mudeli tuntud teostust alates gensim. Analoogiliselt tekstidega määratleme pakkumise kui ostutšeki. Seega õpib mudel tootevektori konstrueerimisel ennustama kviitungil olevale tootele selle “konteksti” (ülejäänud tooteid kviitungil). Poodandmete puhul on parem kasutada kviitungi asemel ostja seanssi; Osoon. Ja DSSM-i on huvitavam sõeluda. Algselt kirjutasid Microsofti poisid selle otsingu mudeliks, Uurimistöö originaali saate lugeda siit. Mudeli arhitektuur näeb välja selline:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

see on Q — päring, kasutajaotsingu päring, D[i] — dokument, veebileht. Mudeli sisendiks on vastavalt päringu ja lehtede atribuudid. Iga sisendkihi järel on hulk täielikult ühendatud kihte (mitmekihiline perceptron). Järgmisena õpib mudel minimeerima koosinust mudeli viimastes kihtides saadud vektorite vahel.
Soovitusülesanded kasutavad täpselt sama arhitektuuri, ainult päringu asemel on kasutaja ja lehtede asemel tooted. Ja meie puhul muudetakse see arhitektuur järgmiseks:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Nüüd jääb tulemuste kontrollimiseks üle katta viimane punkt - kui ALS-i ja DSSM-i puhul on meil selgesõnaliselt defineeritud kasutajavektorid, siis Word2Vec puhul on meil ainult tootevektorid. Siin oleme kasutajavektori loomiseks määratlenud 3 peamist lähenemisviisi:

  1. Lihtsalt lisage vektorid, siis koosinuskauguse jaoks selgub, et me lihtsalt keskmistasime ostuajaloo tooted.
  2. Vektori liitmine teatud ajakaaluga.
  3. Kauba kaalumine TF-IDF koefitsiendiga.

Ostjavektori lineaarse kaalumise puhul lähtume hüpoteesist, et toode, mille kasutaja eile ostis, mõjutab tema käitumist rohkem kui pool aastat tagasi ostetud toode. Seega arvestame ostja eelmist nädalat koefitsiendiga 1 ja järgnevat koefitsiendiga ½, ⅓ jne:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

TF-IDF koefitsientide puhul teeme täpselt sama, mis TF-IDF-is tekstide puhul, ainult ostjat käsitleme dokumendina ja tšekki vastavalt pakkumisena, sõna on toode. Nii nihkub kasutaja vektor rohkem haruldaste kaupade poole, samas kui ostja jaoks sagedased ja tuttavad kaubad seda palju ei muuda. Seda lähenemist saab illustreerida järgmiselt:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Vaatame nüüd mõõdikuid. ALS-i tulemused näevad välja sellised:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis
Mõõdikud Item2Vec jaoks koos ostjavektori koostamise erinevate variatsioonidega:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis
Sel juhul kasutatakse täpselt sama mudelit, mis meie baasjoonel. Ainus erinevus on selles, millist k-d me kasutame. Ainult koostöömudelite kasutamiseks tuleb iga kliendi kohta võtta umbes 50-70 lähimat toodet.

Ja mõõdikud vastavalt DSSM-ile:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Kuidas kõiki meetodeid kombineerida?

Lahe, ütlete, aga mida teha nii suure hulga kandidaatide ekstraktimise tööriistadega? Kuidas valida oma andmete jaoks optimaalne konfiguratsioon? Siin on meil mitu probleemi:

  1. Iga meetodi puhul on vaja kuidagi piirata hüperparameetrite otsinguruumi. See on muidugi igal pool diskreetne, aga võimalike punktide arv on väga suur.
  2. Kuidas saate valida oma mõõdiku jaoks parima konfiguratsiooni, kasutades väikest piiratud valimit konkreetsetest meetoditest koos konkreetsete hüperparameetritega?

Esimesele küsimusele ei ole me veel lõplikult õiget vastust leidnud, seega lähtume järgmisest: iga meetodi jaoks kirjutatakse hüperparameetri otsinguruumi piiraja, olenevalt mõnest statistikast meie käsutuses olevate andmete kohta. Seega, teades inimeste käest ostude vahelist keskmist perioodi, saame aimata, millise perioodiga kasutada meetodit “mis on juba ostetud” ja “kaua möödunud ostu periood”.

Ja pärast seda, kui oleme läbinud teatud piisava arvu erinevate meetodite variatsioone, märgime järgmist: iga rakendus ekstraheerib teatud arvu kandidaate ja sellel on meie jaoks teatud võtmemõõdiku väärtus (meenutamine). Soovime saada kokku teatud arvu kandidaate, olenevalt meie lubatud arvutusvõimsusest, kõrgeima võimaliku mõõdikuga. Siin variseb probleem ilusti seljakotiprobleemiks.
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Siin on kandidaatide arv valuploki kaal ja tagasikutsumise meetod selle väärtus. Siiski on algoritmi rakendamisel veel 2 punkti, mida tuleks arvesse võtta:

  • Meetodid võivad otsitavates kandidaatides kattuda.
  • Mõnel juhul on õige võtta üks meetod erinevate parameetritega kaks korda ja esimese kandidaatväljund ei ole teise alamhulk.

Näiteks kui võtame otsimiseks erinevate intervallidega meetodi “mida olen juba ostnud” rakendamise, siis pesatakse nende kandidaatide komplektid üksteise sisse. Samal ajal ei taga erinevad parameetrid väljapääsu "perioodilistes ostudes" täielikku ristmikku. Seetõttu jagame erinevate parameetritega diskreetimismeetodid plokkideks nii, et igast plokist tahame kasutada maksimaalselt ühte ekstraheerimismeetodit konkreetsete hüperparameetritega. Selleks tuleb seljakotiprobleemi elluviimisel veidi targaks saada, kuid asümptootika ja tulemus ei muutu.

See nutikas kombinatsioon võimaldab meil saada järgmised mõõdikud võrreldes lihtsalt koostöömudelitega:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis
Lõplikes mõõdikutes näeme järgmist pilti:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Siin on aga märgata, et ärile kasulike soovituste jaoks on üks katmata punkt. Nüüd oleme just õppinud, kuidas teha suurepärast tööd, et ennustada, mida kasutaja näiteks järgmisel nädalal ostab. Aga lihtsalt allahindlust teha millelegi, mida ta juba ostab, pole eriti lahe. Kuid on lahe maksimeerida ootusi, näiteks järgmiste mõõdikute osas.

  1. Marginaal/käive põhineb isiklikel soovitustel.
  2. Keskmine kliendikontroll.
  3. Külastuste sagedus.

Seega korrutame saadud tõenäosused erinevate koefitsientidega ja reastame need ümber nii, et ülaltoodud mõõdikuid mõjutavad korrutised jõuaksid tippu. Pole olemas valmislahendust, millist lähenemist oleks kõige parem kasutada. Me isegi katsetame selliste koefitsientidega otse tootmises. Kuid siin on huvitavad tehnikad, mis annavad meile enamasti parimaid tulemusi:

  1. Korrutage toote hinna/marginaaliga.
  2. Korrutage keskmise kviitungiga, milles toode kuvatakse. Nii et tulevad kaubad, millega tavaliselt võetakse midagi muud.
  3. Korrutage selle toote ostjate keskmise külastuste sagedusega, tuginedes hüpoteesile, et see toode provotseerib inimesi selle eest sagedamini tagasi pöörduma.

Pärast koefitsientidega katsete tegemist saime tootmises järgmised mõõdikud:
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis
see on toodete üldine konversioon — ostetud toodete osakaal kõigist meie koostatud soovitustes sisalduvatest toodetest.

Tähelepanelik lugeja märkab olulist erinevust võrguühenduseta ja võrgus kasutatavate mõõdikute vahel. Seda käitumist seletatakse asjaoluga, et kõiki soovitatavaid toodete dünaamilisi filtreid ei saa mudeli koolitamisel arvesse võtta. Meie jaoks on tavaline lugu, kui pooled välja otsitud kandidaatidest saab välja filtreerida, see eripära on meie valdkonnas tüüpiline.

Tulude osas on saadud järgmine lugu, on selge, et pärast soovituste käivitamist on testgrupi tulud jõudsalt kasvamas, praegu on keskmine tulu kasv meie soovitustega 3-4%.
Kuidas oleme märkimisväärselt parandanud soovituste kvaliteeti võrguühenduseta jaemüügis

Kokkuvõtteks tahan öelda, et kui teil on vaja mittereaalajas soovitusi, võib soovituste kandidaatide ekstraheerimise katsetes leida väga suurt kvaliteeditõusu. Suur ajakulu nende põlvkonna jaoks võimaldab kombineerida palju häid meetodeid, mis kokku annavad ettevõttele suurepäraseid tulemusi.

Mul on hea meel kommentaarides vestelda kõigiga, kellele materjal tundub huvitav. Küsimusi saate esitada mulle isiklikult aadressil telegramm. Samuti jagan oma mõtteid tehisintellekti/idufirmade kohta oma telegrammi kanal - Tere tulemast :)

Allikas: www.habr.com

Lisa kommentaar