Prediktív analitikai megoldások tesztelése | Dmlab

Prediktív analitikai megoldások tesztelése

Gáspár Csaba

2013.04.29. • olvasási idő:

A legtöbb esetben olyan adatbányászati projekteken dolgozunk, ahol egy-egy olyan elemzési feladatot kell megoldani, ahol a megoldásunk hatékonyságát “elég” egy független teszthalmazon tesztelni. Persze többféleképpen is tesztelünk, hogy érvényes, stabil megoldást kapjunk, ami valós összefüggések modellezése által képes predikálni egy-egy felügyelt tanulási feladatban.

Kép forrása: https://arabedrossian.org/

De mi történik akkor, mikor új eljárás feljesztésébe kezdünk? Ekkor a célunk, hogy legyen egy jól implementált, minden esetben a matematikai értelemben rögzített specifikációnak megfelelő algoritmusunk. Hogyan nézzük meg, hogy egy adott implementáció tényleg megfelel a specifikációnak?

Ez egy látszólag triviális feladat, de gondoljuk végig hogy mennyiben más, mint a poszt elején megadott: ott szinte mindegy, hogy azt csinálja egy eljárás, mint amit hiszünk róla, hiszen a lényeg, hogy ténylegesen hatékonyan működjön az adott teszthalmazon (persze nem ilyen triviális a feladat, hiszen a későbbi alkalmazási rétegben sem szabad hibáznia). De ha egy döntési fa eggyel több vagy kevesebb szintet épít, mint amit mi eredetileg gondoltunk, nem gond. A szoftver íróit úgy tekintjük, hogy elvégezték a tesztelést és akár fekete dobozként is tekinthetünk implementációs szempontból az adott algoritmusra.

Szóval mit tegyünk, ha új eljárást implementálunk? Vegyük azt a esetet, amiben most mi is vagyunk: egy tőlünk független programozó csapat implementálja az eljárásokat, akik nem is feltétlenül értik minden részletében melyik részlépés milyen célt szolgál a specifikációban. Tesztelés kapcsán jönnek a jó programozói gondolatok: legyenek unit tesztjeink, smoke tesztjeink, stb., illetve adjunk nekik néhány olyan bemenetet, amin meg tudjuk “kézzel” határozni, hogy mi a kívánt kimenet. Ugye itt minden adatbányásznak el kezd viszketni a tenyere: mekkora az az adathalmaz, ami értelmes méretű és “kézzel”/”papíron” kiszámítható rá egy-egy komplexebb eljárás kívánt kimenete. Ugye itt némi numerikus hibákkal is számolni kell, az még kezelhető, de nagy adathalmazt legyártani nehéz, valós adatok esetén lehetetlen.

Adatbányászként persze tudunk speciálisan tesztelni is: az eljárást úgy paraméterezzük, hogy már meglévő eljárások működésére hasonlítson a kimenet és nézzük a kimenetek korrelációját, el tudunk rejteni egy-egy feladatban erős összefüggéseket és megfigyeljük tényleg megtalálja-e az algoritmus ezeket; lépésenként végigkövetjük a logokat, hogy tényleg azt csinálja-e az eljárás, mint amit elvárunk tőle.

Jók ezek a megoldások, de látszik, hogy nem garantálják a tökéletességet. Nektek van tapasztalatotok, sztoritok a témához? Biztos vagyok benne, hogy más is belefutott már ilyen szituációba, kíváncsi lennék, hogyan bírkóztatok meg vele. Mi a tapasztalat a “gyári” eljárásokkal, tapasztalataitok szerint mennyire vannak azok kitesztelve?