Prediktív analitika a webes világban – egy verseny margójára
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:
- 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.
- 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.
- 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).