Prediktív analitika a webes világban - egy verseny margójára - Dmlab

Prediktív analitika a webes világban – egy verseny margójára

Nagy-Rácz István

2013.07.08. • olvasási idő:

Csapatunk egyik lelkes és nagyon tehetséges fiatal tagja nyerte meg az évente megrendezésre kerülő, kifejezetten hallgatóknak szóló Data Mining Cup 2013 adatbányászati versenyt.

A verseny kiírása során megörültünk az üzleti problémának és a valós adathalmaznak, hiszen a csapatunk jelenleg is egy olyan terméken dolgozik, amely a webes viselkedések előrejelzésében tud segítséget nyújtani az online kereskedelem szereplőinek.

A poszt további részének szerzője, a versenyen első helyezést elért megoldás megalkotója: Simon Gábor.

A Data Mining Cup egy évente megrendezésre kerülő adatbányászati verseny, amelyen egyetemi csapatok küzdenek meg egymással az elsőbbségért, egy valós üzleti probléma megoldása során. A verseny 2013-as kiírásán összesen 99 csapat indult 77 egyetemről (24 különböző országból), és az általam készített megoldás lett a Task 2 feladat győztese.

Idén egy webshop látogatóinak böngészési adatai alapján kellett megjósolni, hogy az adott böngészés (session) vásárlással végződik-e. A verseny keretében két feladat megoldására is lehetett vállalkozni. A Task 1 célja egy historikus session adatokon épített modell létrehozása volt, míg a Task 2 során egy olyan ágenst kellett megvalósítani, amely online módon, folyamatban lévő sessionök kimenetelét megjósolva működik. A két feladat értékelése külön történt.

A Task 2 megoldásához egy Java nyelven írt programot kellett elkészíteni és beküldeni. A verseny lezárása után a szervezők (a prudsys nevű német, valós idejű analitikával foglalkozó cég munkatársai) egy kiértékelést futtattak, amely során új sessionök adatait küldték az ágensnek egyenként (tranzakciónként), és visszamérték annak előrejelző teljesítményét a folyamatban lévő sessionökön. Mivel az ágensnek online módon, adaptívan kellett működnie, ezért egy session lezárásával megkapta annak kimenetelét is.

Az ágensemet a Weka nevű Java nyelvű, nyílt forráskódú gépi tanulási szoftver felhasználásával készítettem. Az ágens fogadta a bemenetként érkező session adatokat, ezeken adattranszformációkat hajtott végre, majd a Weka egyik beépített osztályozó algoritmusát használva predikciókat adott vissza a kimenetén.

A megoldásomban három olyan ötlet szerepelt, amely nagymértékben hozzásegített a győzelemhez:

  1. Tanuló algoritmusnak a Stochastic Gradient Descent-et választottam, amely egyaránt képes offline és online működésre. Ez lehetővé tette, hogy még a fejlesztés során, a Task 1 historikus adatain modelleket építhessek, amiket utána beleintegráltam az ágensbe. Az ágens kiértékelése során ezek a beépített modellek működtek, viszont a kiértékelés közben kapott adatokkal is frissítettem őket. Így tehát a kiértékelésnél nem nulláról kellett elkezdenie az ágensnek a tanulást, hanem rögtön jó predikciókat tudott adni, de a modellek folyamatos frissítésével adaptívan tudott reagálni az újonnan érkező adatokban rejlő különbségekre.
  2. Több modellt építettem ugyanazzal az algoritmussal, de a sessionök különböző részeire. Ennek hasznosságára egy példa, hogy az adatokat a sessionök kezdeténél nézve azok a látogatók, akik korábban nem vásároltak a webshopban, jóval ritkábban fejezték be a sessionjüket vásárlással. Viszont a már hosszabb ideje tartó sessionöknél, amelyekben a véletlen betévedő és gyorsan továbbálló látogatók már nem szerepeltek, az új látogatók és a visszatérő vásárlók közötti különbség jelentősen lecsökkent.  A több, a sessionök különböző részeire épített modell alkalmazásával a változók közötti összefüggések ilyen időbeli különbségeit használtam ki, és ez nagymértékben növelte a megoldásom hatékonyságát.
  3. Mivel a különféle numerikus változók (például a látogató korábbi vásárlásai alapján kapott ügyfélbesorolás) esetében a hiányzó értékek is nagy információtartalommal bírtak, ezért ahhoz, hogy az ismert és a hiányzó értékeket egyaránt felhasználhassam, az adatelőkészítés során a numerikus változókat kategorikussá alakítottam, és a hiányzó érték mindegyiknél külön kategória lett.

A verseny kiértékelése során a megoldásom 73,1%-os pontosságot ért el, megelőzve a második és a harmadik helyezett csapatokat, akik 72,6% illetve 72,4%-ot teljesítettek (a többi megoldás az első háromhoz képest még nagyobb mértékben maradt le).