Machine Learning (ML) I. fejezet – ismerkedés az alapokkal –

Ez a cikk egy több fejezetes gépi tanulásról szóló cikksorozat első fejezet. A jelenleg elérhető fejezetek:

  1. Machine Learning (ML) I. fejezet – ismerkedés az alapokkal
  2. Machine Learning (ML) II. fejezet – lineáris regresszió

Sokszor hallottam, olvastam már, hogy a Machine Learning (ML), magyarul: Gépi tanulás, lényegében egy olyan szintje az informatikának és az adatelemzésnek, amely már sokkal inkább tudományos tapasztalatokat igényel, mintsem programozói ismereteket. Sok esetben valamiféle mesterséges intelligenciának tekintik a ML-t (nem alaptalanul), amely abból a szempontból igaz is lehet, hogy a hétköznapi életben ismert és használt gépi tanuláson alapuló megoldások (pl. beszédfelismerés, képeken arcfelismerés, stb.) valóban mesterséges intelligenciára és gépi tanulásra épülne. Ettől függetlenül a gépi tanulás egyébként közel sem annyira nagy ördöngösség ami miatt tudományos fokozat kellene a megértéséhez és használatához.

Mindenek előtt tisztázzuk, hogy mi is az a gépi tanulás: Adott egy adatkör aminek az adattartalma között bizonyos logikai összefüggések lehetnek. Ezeket az összefüggéseket lehet modellezni egy statikus adathalmazon, azonban ha az adatkör tartalma folyamatosan változik, akkor lépnek be a képbe a gépi tanulási megoldások, aminek a lényege, hogy ezen összefüggések a folyamatosan változó adatok fényében folyamatosan újraértelmeződjenek. Az egész maszlagnak a célja a precíz jóslás. Tehát ha ML segítségével megértjük az elemi adatok közötti kapcsolatokat, akkor ezek alapján predikciókat tehetünk arra, hogy bizonyos paraméterek változása hogyan hat ki az teljes adatkörre. Ez így elsőre elég tudományosnak hangozhat. Holott valójában csak arról van szó, hogy pl regresszió útján keresünk az adatkörön belül korrelációkat. (ez mennyivel kevésbé tudományos, ugye?) Tehát, hogy milyen adatváltozás kell ahhoz, hogy valamilyen másik adat is hasonlóképpen változzon. A Machine Learning lényege az ideális adatmodell megtalálás, ehhez az adatkör bizonyos (kisebb, általában 20-30%) részét történik a tanulás, majd a nagyobb (maradék) részét a megtanult adatmodell tesztelése. Célszerű, hogy mindjárt az elején legyen egy sejtésünk arról, hogy az adatkör melyik adata (oszlopa) az ami kapcsán feltételezzük, hogy az függőségben áll a többi oszloptól.

Alapvetően két nagy csoportba sorolhatók a gépi tanulási modellek, ezek: felügyelt és felügyelet nélküli modellek. Előbbi (felügyelet) lényege, hogy a pontosan tudjuk azt, hogy mi tekinthető jónak és vagy regresszió vagy osztályzási módszerek segítségével ezt vizsgáljuk. Amikor a vizsgált kimenet diszkrét (tehát eldönthető hogy jó vagy nem jó), akkor használjuk az osztályozó algoritmusokat, ha a kimenet folytonos, akkor pedig a regressziót.

Utóbbi esetben (felügyelet nélküli) már teljesen a gépre bízzuk a kiértékelést is, ennek megfelelően az algoritmusok folyamatosan hozzáillesztik az adatkör változásaihoz azt a feltételt is, hogy mit tekint jónak avagy rossznak. Jellemzően ez utóbbi csoportba sorolhatók a PCA, Anomáliaanalízis és klaszterezési algoritmusok. A felügyelet nélküli (unsupervised learning) algoritmusok esetén az ML-nek a “saját kárán” kell megtanulnia, hogy az egyes adatokat miként kell értékelni és ez milyen mértékben járul hozzá a célhoz. Erre egy nagyon “egyszerű” és manapság divatos példa a robotika.

Adott egy négy lábú robot, ami csak annyit tud, hogy megadott cél felé kell haladnia. A mozgáshoz tudja, hogy milyen módon tudja a lábait mozgatni, de azt nem tudja, hogy hogyan tud előre haladni. A felügyelet nélküli ML lényegében elkezd tanuló adatokat gyűjteni, mozgatja a lábait és nézi, hogy milyen mozdulatokkal halad a cél felé. Majd folyamatosan pontosítja a mozgást a legideálisabb sebesség elérése érdekében. Majd jön a jófej mérnök, aki leállítja a robotot és a négy lába közül egyet kiszed. Ezt követően a robot ML-je azt tapasztalja, hogy a korábbi összerakott alrogitmus már nem ideális, hiszen nem halad a cél felé, ezért elkezdi újra a tanulási fázist és kioptimalizálja az előre haladás céljából legrelevánsabb algoritmust , majd újra elindul.

Azonban mielőtt nagyon belemélyednénk a gépi tanulásba fontos, hogy rendelkezzünk elemezhető adatokkal. Az elemezhető adatokat pedig megfelelően elő kell készíteni. A legtöbb machine learning (ML) modell elvár ez bizonyos formátumra hozott adatkört (dataset), amit ha nem megfelelően állítunk elő, akkor az ML modell hibázni fog, téves következtetéseket von le.

commercial break...

Ezek adatelőkészítési folyamatot ‘data preprocessing’-nek nevezik. Ennek főbb lépései:

  • dataset előállítása: Ahhoz, hogy lehessen bármit is elemezni, előbb rendelkeznünk kell az adatokkal. A tanuláshoz előkészítendő adatkör legyen letisztult, csak azt tartalmazza ami releváns az elemzés szempontjából. A dataset egy vagy több függő változót (dependant variable) tartalmazhat, valamint további olyan adatokat amikről feltételezzük, hogy függőségben vannak a függő változókkal. A gépi tanulás célja, hogy ezen feltételezéseket bizonyítsa, majd később ezen függőségek alapján megjósolja a függő változók alakulását. Vegyünk egy nagyon egyszerű példát:

Adott egy munkahely, ahol több ezer szakember dolgozik. A munkaügyi (HR) terület arra lesz figyelmes, hogy a cégben rendszeresen vannak olyan időszakok, amikor jelentősen megugrik a fluktuáció (elvándorlás, munkahelyváltás). A HR azzal a feltételezéssel el, hogy lehet valamilyen konkrét oka annak, hogy kialakulnak ezek a csúcsidőszakok és szeretné, ha ezek a jövőben előre jelezhetővé válnának. Ennek érdekében összeraknak egy dataset-et, amiben napi bontásban minden releváns adatot összegyűjtenek a távozókról. Beleértve azt, hogy hónapja dolgoztak a cégnél, mikor volt az utolsó fizetésük, prémiumuk, milyen lett az adott munkavállaló területének legutóbbi elégedettségi felmérési eredménye, milyen értékelést kapott a munkavállaló a legutósó teljesítmény értékelésen, stb. Mivel itt ismert a cél (alacsony fluktuáció) és a dependant variable (fluktuáció mértéke %), ezért egyszerű lineáris regresszióval megállapítható, hogy van-e olyan mutató vagy mutatók összessége az adatkörben ami függőségben van a fluktuáció mértékében. Ha talál ilyen mutatót az ML (pl. utolsó béremelés óta eltelt hónapok + összes ledolgozott hónap aránya), akkor ennek realtime alakulása a jövőben akár hónapokkal az exodus előtt tudja jelezni, hogy mikor érdemes beleavatkozni a HR területnek a folyamatokba, hogy elkerülje a magasabb fluktuációt.

  • missing data: Az ML modellek működésének egyik legfontosabb előfeltétele, hogy  minden elemi adatsor teljes legyen. Tehát a fenti példánál maradva, ha pl egy adott hónapban nem áll rendelkezésre valami miatt az adott hónapra vonatkozó bérfejlesztések adata, akkor ezt az adatot elő kell állítani. Mivel itt nincs meg a szükséges adat, ezért a modell szempontjából leginkább “ártalmatlan” módon lehet ezt megtenni. Ez lehet egy eszerű átlagszámításból az összes korábbi és későbbi adat segítségével, vagy lehet medián meghatározással, esetleg azzal, hogy melyik érték a leggyakoribb az adatsorban.
  • categorical variable: A dataset egy bizonyos része általában mérhető adatokból (pl számokból, százalékos értékekből, stb.) áll, viszont megint más része kategorizálható adatokból. Ilyen lehet pl. egy személy neme, származási országa, stb. Egy igazán komplex függőség meghatározásánál a kategorizálható változók igen komoly szerepet kaphatnak, éppen ezért fontos, hogy ezek megfelelő módon legyenek reprezentálva az adat előkészítés során. A kategorizálás lényege, hogy olyan számszerű adatokat rendelünk az adott változóhoz, amelyet ennél fogva képes megemészteni az ML modell. Ennek két módja van: igaz/hamis értékként kezelni, vagy amennyiben kettőnél több opció áll rendelkezésre, akkor azokat elemi igaz/hamis tagokra kell bontani. Tehát ha pl  relevánsnak tartjuk a vizsgálat szempontjából a származási országot, akkor ezt fel kell bontani annyi lehetséges oszlopra, amennyi lehetséges ország szerepel az eredeti adatsorban és minden egyes ország oszlopa esetén igaz/hamis feltételezést tenni.

Miért fontos igaz/hamis tagokra bontani a kategorizálható változókat? Azért, mert a legtöbb ML algoritmus egy számszerű skála esetén (ahol a 1 jelenti pl Magyarországot, a 6 pedig Németországot) súlyozza a magasabb értékeket és így eltorzulhat a feltételezés. Tehát a képletben a 6-os értéket képviselő Németország hatszor fontosabb lesz mint az 1-es értéket képviselő Magyarország.

  • training sets and testing sets: A dataset-et célszerűen fel kell bontani egy tanuló és a tesztelési darabra. Bár ezen kettő adatkör aránya különböző implementációkban jelentősen eltérhet, de nagy általánosságban elmondható, hogy a teljes dataset 1/4 része legyen a tanuló (traninig) set és a 3/4 pedig a teszt set. Ez az arány garantálja, hogy a tanulási fázisban legjobbként azonosított modell igazolásához bőséges adat fog rendelkezésre állni a teszt adatkörből. Ha a modell kiállja a tesztet is, akkor máris lehet használni a friss adatok alapján a predikciók előállításához.
  • Standardizáció és normalizáció: A dataset paraméterei (oszlopai) kapcsán releváns információ lehet azok lehetséges értékei közötti távolság. Pl ha az egyik oszlop a munkavállalók életkorát tartalmazza, akkor itt a legidősebb és a legfiatalabb munkavállaló életkorának különbsége sem fogja meghaladni a 60-as. Ezzel szemben, ha egy másik oszlopban a munkavállaló bére szerepel, akkor itt a diferencia akár több százezet vagy akár millió forint is lehet. Ezek a taltalmas tartomány eltérések szintén negatívan tudják befolyásolni az értékeléseket, ezért célszerű ezeket standardizálni. Ehhez az egyik leggyakrabban használt módszer az Euklidiszi távolság kiküszöbölés. De számos más módszer is létezik, a cél az előzetes elemzésnél megharázoni a legideálisabb normalizációs vagy standardizációs metódust.

Eddig a bevezető. A következő fejezettől már konkrét ML technológiák és azok gyakorlati használata lesz bemutatva.

Bookmark the permalink.

Szólj hozzá: