5. LECKE: TÁMASZVEKTOROK (SVM, Support Vector Machines) -- Előadás 5.1. Támaszvektor osztályozásra [C18] Ez a témakör a klasszifikációhoz áll legközelebb, bár alkalmazható más területeken is (regresszió, anomália feltárás). A legegyszerűbb, bináris esetben olyan hipersíkot (a jobban elképzelhető, kétdimenziós esetben egyenest) keresünk, amely úgy osztja két részre a megfigyeléseket, hogy az egyik oldalon az y=1, a másik oldalon az y=0 eredményt adó pontok találhatóak. Ez a feladat nem mindig oldható meg hiba nélkül, és ha van megoldás, akkor az nem egyértelmű. Ez utóbbi problémára például a hipersíkhoz legközelebbi pontok hipersíktól vett távolságának maximalizálásával lehet megoldást találni. Geometriailag ez a két pontcsoport konvex burkának az olyan elszeparálását jelenti, amelynél a szeparáló hipersík mindkét halmaztól egyenlő távolságra van. Ez a hipersík éppen a két halmazt összekötő legrövidebb szakasz felező merőlegese. Ahhoz, hogy ezt a legrövidebb szakaszt megtaláljuk, csak a konvex burok néhány csúcspontjára van szükség, ezeket nevezzük támaszvektoroknak. Matematikailag egy úgynevezett kvadratikus optimalizálási feladat révén kaphatjuk meg őket, mely jól ismert operációkutatási algoritmusokkal gyorsan megoldható. A gyakorlatban a ponthalmazaink a legritkább esetben szeparálhatóak hipersíkkal. Ennél általánosabb megoldás, ha a megfigyelések magasabb hatványait is beépítjük a modellbe, azaz polinommal próbálunk szeparálni. Ezt a módszert polinomiális magfüggvény (kernel)- transzformációnak nevezik. Az adatok struktúrájától függően más magfüggvények is alkalmazhatóak, így például körkörös elrendezés esetén a sugár-bázis függvény: exp(-γ u-v ). Ezeknél a magfüggvényes módszereknél úgy transzformáljuk az adatainkat, hogy lineáris hipersíkkal szeparálhatóak legyenek az úgynevezett feature térben majd ezt visszatranszformálva már nem lineáris, hanem görbe lesz a szeparáló felület. Az ODM a lineáris mellett a Gauss magfüggvényt használja. Ez utóbbi esetben a feature tér annyi dimenziós, ahány megfigyelésünk van. Az alkalmazott algoritmus ügyel arra, hogy csak annyi adattal foglalkozzon, amennyi még nem nehezíti meg a gyors optimalizálást. Két paraméter is szabályozza a modell tulajdonságait: a komplexitás (complexity factor) azt határozza meg, hogy mennyire lehet komplex a modell ezzel ellentétes a robusztusság, ami az új adatokra történő általánosíthatóságot jelenti az adott esetben. Modellépítésnél nagy veszély, hogy túl sok esetleges paraméter kerül be a modellbe. Ezen segítenek a támaszvektorok, mert azok nincsenek túl sokan, így meglehetősen stabilak a transzformációkra. Ezzel együtt is választani kell a paraméterek lehetséges értékei közül. Ezt a legcélszerűbben a szokásos cross-validation technika alkalmazásával tehetjük meg, azaz azt a modellt választjuk, amelyik a leghatékonyabb a teszt-adatbázison. Ha még a választott magfüggvénnyel sem lehetséges a szeparálás, akkor egy megfelelő büntetőfüggvény alkalmazásával rugalmasabbá tehetjük a modellt: annál nagyobb büntetést adva, minél távolabb van a szeparáló hipersíktól a rossz oldalon levő pont. Ezek után azt a szeparációt választjuk, amelyiknek az összbüntetése minimális. A költségfüggvénnyel különböző súlyt rendelhetünk az egyes hibákhoz (alapértelmezésben mindkét hiba egységnyi költséget jelent), ezzel törekedve a súlyosabbnak gondolt hiba részarányának csökkentésére. Ez a gyakorlatban megfelel a Bayes-i megközelítésnek, ahol
valamely kimenetelt valószínűbbnek gondolunk, mint a többit és ezt az apriori (előzetes) információt figyelembe vesszük a becsléseinknél. Ha nem bináris klasszifikációt keresünk, hanem k osztály valamelyikébe szeretnénk a k megfigyeléseinket besorolni, akkor vagy páronként hasonlítunk és a kapott bináris 2 klasszifikációból választjuk azt az osztályt, ami a legtöbbször szerepelt, vagy k olyan osztályozót készítünk, amely az egyes osztályokat szeparálja a többitől. Ez utóbbi esetben az az osztály lesz a választásunk, amely a legmagasabb valószínűséget kapta. Az SVM módszer használható anomáliák felderítésére is. Ekkor nem célváltozót kell megadni, hanem a keresett extrém értékek százalékos arányát. A módszer itt úgy működik, hogy a szokásos magfüggvény segítségével definiált gömb-szerű objektumba foglalja bele a pontok nagy részét és a kimaradók lesznek a kiugró értékek. (http://www.dtreg.com/svm.htm) 5.2. Diagnosztika A felépített modell ellenőrzésére szolgál a teszt-adatbázis. A legegyszerűbb diagramok egyike a Confusion matrix, amely megmutatja, hogy az egyes osztályokhoz tartozó tényleges esetek közül hányszor volt egyezés és hányszor volt tévedés az előrejelzésben (a sorok tartalmazzák a tényadatokat, az oszlopok pedig az előrejelzéseket). Nyilván annál jobb a modell, minél nagyobb részarányban esnek a megfigyelések a főátlóra (ezek a helyes döntések). Ebből számolható a teljes pontosság (overall accuracy rate): a főátlóra eső esetek száma osztva az összes esetszámmal. A bináris célváltozó esetére számolható és grafikusan is megjeleníthető mérőszám a lift (emelés). Ha a célváltozó eredetileg nem lenne bináris, akkor is alkalmazható a módszer: előbb egy pozitívnak tekintett osztályt kell definiálnunk, majd a többi osztályt összevonva megkapjuk a szükséges bináris változót. A lift kiszámításához a pozitív célcsoportba esésük szerinti csökkenő valószínűségek alapján osztályokba soroljuk az eseteket (az első csoportba kerülnek tehát a legvalószínűbbek, és így tovább). Az osztályok száma az ODM-ben alapértelmezés szerint 10, de ez a felhasználó által módosítható. Először megkapjuk csoportonként a pozitív eseteket, ezek kumulált relatív gyakoriságát ábrázolja a Cumulative Positive Cases Chart, mint egy eloszlásfüggvényt a kvantilisek függvényében. Az ábra tehát azt adja meg, hogy az adott kvantilisig bezárólag a pozitív esetek hány százaléka volt megtalálható. Ebből adódik, hogy az utolsó kvantilisre az érték mindig 1.
5.1. ábra. A pozitív esetek kumulált diagramja A fenti ábrán jól látható, hogy az első osztályokban nagyobb a pozitív esetek gyakorisága (nagyobb az eloszlásfüggvény meredeksége). Több hivatkozás ezt az ábrát nevezi lift diagramnak. A következő diagnosztika az ODM lift-ábra, amely azt mutatja meg, hogy az egyes csoportokban mennyit javított a modell az előrejelzésen: ha például az adott osztály 40%-a volt pozitív és az ő 80%-ukat sikerült pozitívnak előrejelezni, akkor a lift értéke 80/40=2. Az alábbi ábra mutatja kvantilisenként az előzőek szerinti kumulált lift értékeket. 5.2. ábra. A lift diagramja
Az ábrák mellett táblázatok is készülnek, amelyekben az ábrák adatainak számszerű értékei mellett a valószínűségi küszöbök is szerepelnek. Ezek osztályonként azt a minimális valószínűséget adják meg, ami ahhoz kell, hogy az osztály pozitív célértékei ebbe (vagy megelőző) csoportba kerüljenek. Az ODM teszt diagramjai közül talán a legjobban használható interaktív ábra az ROC görbe. Ez lehetővé teszi a különböző vágási szintek összehasonlítását. Az ábra a false positive (hamis pozitív) döntések részarányának függvényében ábrázolja a true positive (helyes pozitív) döntések részarányát. False positive esetek azok, amikor egy nem pozitív esetet pozitívnak jelzünk, míg true positive esetben a pozitív esetet jelezzük pozitívnak. A legóvatosabb esetben semmit sem definiálunk pozitívnak (ekkor mindkét érték és így a részarány is 0). Az ehhez tartozó valószínűségi szintet tekinthetjük 1-nek, hiszen csak az efölötti valószínűséggel pozitívnak bizonyult eseteket definiáljuk pozitívnak azaz egyet sem. A másik véglet a legbátrabb eset, amikor minden megfigyelést pozitívnak deklarálunk. Ehhez a 0 valószínűségi szint tartozik, és mindkét részarány 1. Az ábrán ezeket a pontokat összekötő átlót is feltüntetik, mintegy hangsúlyozva azt a különbséget, ami ezen véletlenszerű és a modell által definiált szisztematikus klasszifikáció között van. Az interaktivitást az adja, hogy módunk van változtatni a valószínűségi szintet, azaz tetszés szerint állíthatjuk a hamis pozitív döntés részarányát és láthatjuk az ehhez tartozó helyes pozitív döntések arányát. A program minden esetben ki is számolja az éppen aktuális arányokat és a költségfüggvény értéket. 5.3. ábra. Az ROC görbe
A legegyszerűbb diagnosztika a teljes populációra számított arány. Ha megfelelőnek találtuk a modellt, akkor alkalmazhatjuk a megfelelő struktúrájú teszttáblára. Az eredmény táblában minden sorra szerepel a becsült kategória és a hozzá tartozó valószínűség. -- Gyakorlat 5.3. Támaszvektor gyakorlati megvalósítása [T8] A szokásos modell-építés menüben a klasszifikációs függvények közül választhatjuk ki a support vector machine menüpontot. Itt láthatjuk a módszer rövid leírását, miszerint az általános klasszifikáción belül olyan eljárás az svm, amely maximális pontosságra törekszik, de elkerüli a túlillesztést és alkalmazható ritka tranzakciós adatokra és szövegbányászatra is. A további leírás csupán azt az általános klasszifikációs feladatot taglalja, hogy több magyarázó (független) változó megfigyelt értéke alapján szeretnénk a nominális célváltozó értékét (amely tipikusan valamely csoportba tartozást jelent) előrejelezni. A mintapéldánál a MINING_DATA_BUILD_V adattáblát használjuk. Ennek egyértelmű azonosítója a CUST_ID, amit a Single Key sorban választhatunk ki. Ezután kattintsunk a Next gombra. A cél az értékes ügyfelek elkülönítése a többiektől. Ezt a tulajdonságot az AFFINITY_CARD=1 jelzi (AFFINITY_CARD=0 a többiekre). Ezért a célváltozónk az AFFINITY_CARD (jelöljük ki Target-nek). A többi változót szeretnénk használni a modellben, ezért azok kijelölését ne változtassuk meg. Ezután kattintsunk ismét a Next gombra. A preferált célérték a számunkra fontos részcsoporthoz tartozik, tehát legyen 1 (ezek az értékes ügyfelek) és ismét jöhet a Next gomb. Ezután egy nevet kell adnunk a munkánknak (pl. MINING_DATA_BUILD_V_SVM1). Ha gondoljuk, akkor megjegyzést is fűzhetünk a futáshoz a későbbi azonosítás kedvéért a Comment ablakba. Az utolsó ablakban vagy elindítjuk a beállított adatbányászati algoritmust az alapbeállítás beállításokkal, vagy változtatunk a paraméterértékeken az Advanced settings fülre kattintva. Először a mintavételezést állíthatjuk be. Az alapbeállítás ezt nem alkalmazza, mert az Oracle adatbányász algoritmusai a program szerzői szerint bármilyen méretű adatbázis esetén elfogadható sebességgel működnek. De lehetnek hardver (vagy idő) korlátai a teljes adatbázissal való munkának/kísérletezésnek, ezért gyakran érdemes a véletlen mintavételt alkalmazni. Itt először engedélyeznünk kell ezt a lépést, beállításaink csak ezután válnak valóban végrehajtandóvá. A teljesen véletlen mintavétel mellett a rétegzett modellt (stratified) is választhatjuk, ez különösen a ritka célértéknél (pl. csalások felderítése) lehet lényeges. Ekkor ugyanis az arányos mintavétel igen kicsi esetszámot biztosítana, ami nem teszi lehetővé a hatékony modellépítést. Ekkor a mintát úgy építi fel a program, hogy lehetőleg azonos legyen a célérték és a többi lehetséges érték gyakorisága.
Van lehetőségünk a kiugró értékek (outliers) kezelésének beállítására is. Alapértelmezésben az adott változó átlagához képest háromszoros szóráson kívül eső értékeket helyettesíti ezzel a határral. Ennek lehet haszna akkor, amikor félünk, hogy ezek valójában hibás adatok, amelyek jelentősen torzíthatják az eredményeinket, ha eredeti értékükkel szerepelnek. Ugyanakkor a fordított eset is elképzelhető, azaz, hogy ezek az értékek mégiscsak pontosak és fontos információt hordoznak éppen szélsőségességükkel. Tehát ahogy azt már korábban is írtuk, nagyon fontos az adatok előzetes vizsgálata mielőtt az adatbányászat érdemi lépéseihez nekilátnánk. A következő kérdés a hiányzó értékek kezelése. Ez önmagában is egy fontos kérdés, szakkönyvek foglalkoznak a témával. Itt értelemszerűen nincs mód a részletekbe menni. Mindenesetre az óvatosság itt is hasznos. A program alapértelmezésként a folytonos változók hiányzó értékeit az átlagukkal, míg a kategorikus változókét a móduszukkal helyettesíti. Ez logikus lehet, de problémát okozhat akkor, ha a hiányzó értékek nem teljesen véletlenszerűek, hanem összefüggést mutatnak a számunkra fontos célváltozóval. Ezzel a helyettesítéssel az összefüggést teljesen elveszíthetjük. Ezért óvatosabb lehet a hiányzó értékeket már előzetesen külön kategóriaként definiálni és így itt a modell építésnél már nem marad teendő. Ezután eldönthetjük, hogy vajon normalizáljuk-e a folytonos skálán mért változókat. Ez a legtöbb esetben célszerű, mert különben a nagy ingadozást mutató változók túlságosan dominánssá válhatnak a modellben. Ugyanakkor ezt a kérdést sem szabad mechanikusan eldönteni, mert elképzelhető, hogy indokolt az egyes változók nagyobb szerepe. Tehát itt is érdemes lehet esetleg előzetesen, az adattranszformáció során változónkénti egyedi normálás végrehajtása. Itt a normalizálást vagy a minimum-maximum skálára (azaz gyakorlatilag a (0,1) intervallumra való transzformációval vagy a valószínűségszámításban szokásosabb standardizálással valósíthatjuk meg. Ezek után az adatok tanuló- és tesztadatbázisra történő szétosztását állíthatjuk be. Az alapértelmezés 60-40%, de sokszor inkább a 70-30%-ot szokták preferálni. A véletlenítés is alapértelmezett, ettől csak akkor érdemes eltérni, ha különböző módszereket szeretnénk összehasonlítani, mert akkor mindenképpen célszerű fix mintákkal dolgozni az összehasonlíthatóság érdekében. Az advanced settings további beállításai a modell paramétereire vonatkoznak. Lehet változtatni a magfüggvény értékét (alapértelmezés szerint a program választja ki, de le lehet rögzíteni a két lehetőség lineáris, Gauss bármelyikét). A túlillesztést is paraméter kontrollálja. A tesztelésnél alkalmazott függvényeket és beállításaikat is kiválaszthatjuk. Ezekre részletesen kitérünk az eredmények bemutatásánál. A futtatásnál lehetőség van az egyes lépések egymás után, kézzel történő indítására is. Ez különösen akkor lehet hasznos, ha menet közben szeretnénk változtatni a paraméterek beállításán, de a megelőző lépések változatlanok maradnak. Az eredmények közül a legfontosabbak az előzőekben már bemutatott tesztek. Most csak az ROC görbét mutatjuk be.
5.4. ábra. ROC görbe az SVM módszernél A fenti ábrán a modell alkalmazásával kapott téves pozitív arány függvényében látjuk a valódi pozitív arányt. A piros függőleges vonal azt a vágást mutatja, ami a gyakorlatban a legjobb eredményt adja a tipikusan használt pontossági mérőszám (true positives+ true negatives)/(p+n) értelmében. Az alábbi plsql programrészlet azt mutatja be, hogyan tudunk SVM osztályozást létrehozni CREATE TABLE my_settings( setting_name VARCHAR2(30), setting_value VARCHAR2(4000)); BEGIN INSERT INTO my_settings VALUES (dbms_data_mining.algo_name, dbms_data_mining.algo_support_vector_machines); COMMIT; END; / BEGIN DBMS_DATA_MINING.CREATE_MODEL( model_name => 'my_model', mining_function => dbms_data_mining.classification, data_table_name => 'mining_data_build', case_id_column_name => 'cust_id', target_column_name => 'affinity_card', settings_table_name => 'my_settings'); END; /