Andego Tanácsadó Kft.
  • Bemutatkozunk
  • Tanácsadás
    • Adatbányászat
    • Hálózatelemzés
    • Weblog elemzés
    • CRM
  • Megoldások
    • Csalásdetektálás
    • Céginformációs szolgáltatás
    • Cégcsoport detektálás
    • Kockázati Modul
  • Oktatás
    • Szemináriumos naptár
    • Microsoft Akadémia
      • Excel
      • Power Pivot
      • Machine Learning
    • Open Source adatbányászat
      • R
      • Rapid Miner
    • Adatbányászat
    • Hálózatkutatás
  • Kapcsolat
  • Andego Blog
Andego Tanácsadó Kft.
  • Bemutatkozunk
  • Tanácsadás
    • Adatbányászat
    • Hálózatelemzés
    • Weblog elemzés
    • CRM
  • Megoldások
    • Csalásdetektálás
    • Céginformációs szolgáltatás
    • Cégcsoport detektálás
    • Kockázati Modul
  • Oktatás
    • Szemináriumos naptár
    • Microsoft Akadémia
      • Excel
      • Power Pivot
      • Machine Learning
    • Open Source adatbányászat
      • R
      • Rapid Miner
    • Adatbányászat
    • Hálózatkutatás
  • Kapcsolat
  • Andego Blog
  • Home
  • Blog
  • Adatbányászok doppingja

Adatbányászok doppingja

2019. augusztus 16. péntek Bejegyezte hadhazi

Egy korábbi blog bejegyzésben (Kaggle átok) szó volt arról, hogy a Kaggle versenyeknek "köszönhetően" háttérbe szorult a túltanulás ellenőrzése és kezelése. Pedig ez egy valós veszély, mivel minden elemzőnek elsődleges célja a minél jobb modell építése, akár  túltanulás árán is. Kicsit hasonlít a helyzet az élsportra. Ott is a teljesítmény hajszolása a cél, nagy a kísértés a versenyzők számára, hogy tiltott eszközöket vegyenek igénybe. Ott ezt doppingnak hívják. De mi a helyzet az adatbányászoknál?

Kezdjük az alapoknál – mit is nevezünk túltanulásnak? (Az angol szakirodalomban overfitting kifejezés terjedt el, ami jobban kifejezi a jelenség lényegét). Néhány alapdefiníció:

  • Tanító és teszt adatbázis: a tanító adatbázis az, ahol az összefüggéseket keressük (tanítás),  a teszt adatbázis az, ahol ezeket az összefüggéseket ellenőrizzük, validáljuk.
  • Kiértékelő függvény: a prediktív modellek legtöbb esetben olyan "fekete-dobozok", amelyek rengeteg összefüggést egyesítenek egyetlen függvénybe. Igen nehéz ilyenkor egyesével ellenőrizni minden egyes összefüggés érvényességét a teszt adatbázison. Vannak azonban kiértékelő függvények, melyek a modellek pontosságát számolják ki (különböző metódus alapján). Több ilyen függvény van, mi a továbbiakban az AUC függvényt használjuk. Egy modell annál jobb, minél közelebb van AUC értéke 1-hez, és annál rosszabb, minél közelebb 0.5-höz (ez alatt normális esetben nem vehet fel értéket a függvény).

A túltanulás a fentiek alapján objektíven mérhető. Ha az AUC érték a tanító és teszt adatbázison megegyezik (vagy közel megegyezik), akkor nem történt túltanulás, azonban ha a teszt adatbázison az AUC érték lényegesen kisebb, mint a tanító adatbázison, akkor túltanulás történt.

Na, de mi okozhatja a túltanulást? Sok múlik azon, hogy milyen algoritmust választunk. Vannak olyan algoritmusok, melyekre ez a jelenség nem jellemző (ilyen pl. a logisztikus regresszió). De vannak olyan algoritmusok, melyeknél elég gyakran előfordul a túltanulás. Az egyik ilyen a napjainkban igen népszerű Gradient Boosting algoritmus. Ez a hibrid modellek családjába tartozik, mely általában döntési fákra épül. A részletekbe nem akarok belemenni (akit érdekel, bőven meríthet a Google találatokból), ami most minket érdekel, hogy amikor egy ilyen modellt építünk, akkor rengeteg paramétert állíthatunk be, de ezek közül alapvetően 2 befolyásolja a modell felépítését és teljesítményét:

  • fa mélysége: milyen mélységű döntési fákat építsen az algoritmus
  • iteráció szám: hányszor építsen döntési fát

Általában igaz, hogy a fenti 2 paraméter növelésével kezd el nőni a túltanulás foka. Nézzünk erre egy egyszerű példát. A vizsgált adatbázis a Kaggle egyik verseny feladata (Santander Bank által kiírt prediktív modellezés), 200.000 rekordból áll, a célváltozó 2 értékű (0-1 érték), az 1-esek aránya 10%. Az adatbázist véletlenszerűen két részre osztottam 70%-30% arányban (70% a tanító adatbázis). Majd a tanító adatbázison Python-ban futtattam a Gradient Boosting algoritmust különböző paraméterezés mellett. A kapott modellt kiértékeltem az AUC függvénnyel mind a tanító, mind a teszt adatbázison, majd az alábbi táblázatba gyűjtöttem ezeket az értékeket:

A futtatás során a fa mélysége 1-től 4 értéket vehetett fel, míg az iterációk száma 5, 10, 20, 50, 100, 150 és 300 értéket. A bal felső sarokban a világos kék mezőkben a <0,610, 0610> pár azt mutatja, hogy 1-es famélység és 5-ös iterációszám mellett mind a tanító (train), mind a teszt (test) adatbázison az AUC érték 0,61 volt, azaz a fenti paraméterezésű modellnél nem tapasztalható túltanulás. A jobb alsó sarokban a sötétkék mezőkben <0,942, 0,880> pár azt mutatja, hogy a 4-es famélység és 300-as iteráció mellett mi volt az AUC érték a két adatbázison. Itt elég jelentős eltérés látható. Aki Kaggle versenyen részt vett, az tudja, hogy 0,01 századnyi értékű eltérés is már elég jelentős tud lenni – egy kis túlzással akár az első és utolsó között lehet ekkora különbség.

Hogy tisztuljon a kép, elkészítettem a következő táblázatot:

Az értékek az első táblázat alapján kerültek kiszámolása ("train AUC"- "test AUC"), paraméter páronként a tanító és teszt AUC értékének különbségét tartalmazza. Minél nagyobb ez az érték, annál nagyobb volt a túltanulás mértéke. A könnyebb átláthatóság kedvéért beszíneztem a táblázatot:

  • zöld szín: a cella értéke kisebb 0,005-nél (nincs túltanulás)
  • sárga szín: a cella értke 0,005-0,015 közé esik (enyhe túltanulás)
  • narancs szín: a cella értéke 0,015-0,04 közé esik (túltanulás)
  • piros szín: a cella értéke nagyobb 0,04-nél (erős túltanulás).

Mindenki kedvére elemezheti a táblát (pl. a fa mélység növelése vagy az iteráció szám növeli jobban a túltanulást?), de hogy tisztábban lássunk, az alábbi táblában a teszt adatbázis AUC értékeit gyűjtöttem a színezéssel együtt:

És akkor vegyük elő a dopping hasonlatot. Dopping mentes az a „versenyző”, aki olyan modellt készít, ami a zöld tartományban van. Itt a dopping jelentése tehát az, hogy olyan paraméterezést alkalmaz a versenyző, ahol a tanító és teszt adatbázis AUC értéke nagyon különbözik egymástól. Nézzük, az analógia megáll-e a lábán?

Tudjuk, ha egy sportoló egyre több és több doppingszert használ, úgy a teljesítménye is egyre nő (Amstrong, Kristin Otto, stb). A Gradient Boosting paraméterezésnél ugyanezt látjuk, csak itt a doppingszer a fa mélységének és/vagy iteráció számának növelése. Ahogy nő a dopping szint (dopping szint = színek), úgy nő a teljesítmény is! Jelen esetben egy doppingmentes versenyző ("zöld") maximum 0,805-ös teljesítményre képes, egy enyhén doppingoló ("sárga") 0,838-at, aki durvábban nyomja ("narancs") akár 0,874-et is elérheti, és aki kőkeményen kokszol ("piros"), az akár 0,880 szintre is eljuthat.

Ahogy az élsportban vita tárgya, hogy legyen doppingellenőrzés vagy ne, úgy itt is lehet azon vitatkozni, hogy a túltanulást eleve rossznak tekintsük, vagy elfogadható. Az igaz, hogy a piros tartományban a tanító és a teszt AUC értéke között jelentős a különbség, de mégiscsak a 0,880 a legmagasabb érték a teszt adatokon!

Ha valaki Kaggle versenyen indul, és egy piros modellel nyer, akkor ez senkit sem érdekel (ahogy Usain Bolt világcsúcsánál se érdekelt senkit, hogy doppingolt vagy sem). Más a helyzet, ha éles projekten dolgozunk, és a cél nem egy egyszeri „csúcsdöntés”, hanem egy használható modell építése. Ekkor mindenképp javaslom, hogy maradjunk a zöld, esetleg a sárga tartományon belül. Két példát is mutatok.

1. példa – kis méretű adatbázis, célváltozó eloszlása: 1-es érték 1,5%-a a sokaságnak.

Az adatbázisra nyugodtan mondhatjuk, hogy „dopping érzékeny”. A paraméterek nagyon kicsi növelésével az "erősen doppingolt" tartományba jutunk. Ha a jobb oldali táblát nézzük, akkor azt látjuk, hogy dopping mentesen elérhető a 0,815 AUC szint, de "brutális adagolás" mellett elérhető akár a 0,864-es szint.  Ilyen adatbázis esetén az elsődleges cél az adatbázis tisztítása, képzett változók létrehozása, majd az így előállított adatbázison egyszerű modellek építése.

2. példa – nagy méretű adatbázis, célváltozó eloszlása: 1-es érték 0,7%-a a sokaságnak.

Ez egy érdekes adatbázis, több szempontból is. Ami számunkra tanulságos lehet, hogy itt a dopping szint növelése nem igazán „térül” meg, azaz hiába növeljük a paramétereket, a teljesítmény alig javul – sőt a sárga, narancs és piros tartomány között alig van érdemi különbség (0,916-0,918-0,913). Ilyenkor mindenképp érdemes a sárga tartományban maradni, mivel minimális túltanulás mellett kihozható a legjobb teljesítmény az adatokból.

Zárásként néhány fontos megjegyzés.

  • Az adatbányászati modellezés nem csak a paraméterek állítgatása. Ennél sokkal összetettebb feladat, kezdve az adatok tisztításán át az adatok feldolgozásán keresztül a modellek finomhangolásáig. A fenti gondolatmenet már egy olyan adatbázist vett alapul, amelyet az modellezés szempontjából véglegesnek tekintünk (vagy majdnem véglegesnek). A túltanulás és dopping analógiának kizárólag ilyen kontextusban van értelme.
  • A színhatárok meghúzása önkényes volt, igaz, gyakorlati tapasztalat van benne. Ezeket lehet természetesen jobbra-balra tolni, de a célom magának a módszernek a bemutatása volt, nem a túltanulás határának pontos eltalálása.

 

Blog
adatbányászat, Gradient Boosting, overfitting, túltanulás
Létezik prediktív modell? Avagy mit csinálnál a Mátrixban?
Adatok hulladékgazdálkodása

Legutóbbi bejegyzések

  • Így olvastok Ti!
  • Mennyit keres egy programozó?
  • A rosszat tudod javítani – a jót nem!
  • Mihez is ért a Data Scientist?
  • Adatok hulladékgazdálkodása

evolve theme by Theme4Press  •  Powered by WordPress