Előző cikkünkben kiemelkedő érdeklődés övezte az Exceles predikciós megközelítést, mostani írásunkban viszont alternatívát adunk azoknak, akik el akarnak indulni a fejlett adatelemzés irányába. A nemzetközi trend az, hogy a hagyományos üzleti elemzők (Business Analyst) egyre inkább kezdenek elmozdulni az Excel világából és továbbképzik magukat adatelemzővé (Data Analyst), esetleg még tovább, feketeöves adattudóssá (Data Scientist).
Az interneten terjed még az ún. „citizen data scientist” kifejezés is. A Gartner piackutató cég definíciója szerint ők azok az üzleti felhasználók, akik fejlett statisztikai modelleket futtatnak (vagy akár hoznak létre), de elsődleges feladatuk a statisztikai elemzésen kívül esik.[1] A Gartner a „citizen data scientist” fogalmat tipikusan az üzleti elemzőkhöz köti. Megjegyezzük, hogy ennek a fogalomnak vannak ellenzői is, akik úgy érvelnek, hogy ez nem más, mint a hagyományos üzleti elemzői (Business Analyst) feladatkör kiegészítése. Továbbá felhívják a figyelmet arra, hogy a statisztikai alapismeretek nélkül még célszoftverekkel is félrevezető elemzések (pl. álkorrelációk, angolul „spurious correlation”) készülhetnek.[2] Álkorrelációkkal persze tele van az internet, az alábbi oldal ezekről készített mulatságos összefoglalót: http://www.tylervigen.com/spurious-correlations. A fogalmat illetően nem kívánunk állást foglalni, az viszont egyértelműen látszik, hogy egyre több elemző egyre több vállalatnál használ munkája során különféle data sciece / machine learning platformot, valamint egyre népszerűbbek az adatelemzéssel foglalkozó online kurzusok is.
Cikkünkben először megnézzük, mi is az a data science / machine learning platform. Majd egy népszerű, jelenleg személyes használatra ingyenes data science platform, a KNIME segítségével mutatunk egy lehetséges alkalmazási példát. Ez még az Excel mágusok életét is megkönnyítheti, és az első lépés lehet az Excelen túli világba. Útra fel!
Ezen platformok használata a programozási ismeretekkel nem feltétlenül rendelkező felhasználó/adatelemző számára is lehetővé teszi, hogy ún. építőkövekből (node-okból ~ egy elemzési funkció) tetszőleges nagyságú és felhasználói igény szerinti komplexitású munkafolyamatot (workflow) állítson össze.
A munkafolyamatok kialakításával kezelhetővé, könnyen és gyorsan elemezhetővé válnak a legkülönbözőbb adatforrások. Fontos, hogy ezek az eszközök kifejezetten az adatok mögött rejlő mintázatok azonosításában erősek, ami által az adatok mögött meghúzódó információ kiaknázhatóvá válik, ezáltal érdemben támogatva az üzleti döntéseket.
Adatbányászati eszközökkel oldhatók meg többek között az olyan típusú feladatok, mint a vevők szegmentálása a differenciált ügyfélkiszolgálás érdekében, a hiteligénylők klasszifikálása a jobb hitelbírálat érdekében vagy épp az értékesítés előrejelzése a működőtőke optimalizálása érdekében. Ezek olyan elemzések, amelyek már „kinövik” az Excel adta lehetőségeket, túlmutatnak azon.
A szoftverfejlesztő vállalatok mára számos ún. „önkiszolgáló” predikciós eszközt kifejlesztettek, ma már itt is inkább a bőség zavara okozza a problémát.
A Gartner legutóbbi (2019. január) felmérése alapján az alábbi (nem open-source) adatbányász eszközök kerültek be a Magic Quadrant-ba:
A Gartner Magic Quadrant két szempont szerint, kvalitatív módszerekkel értékeli a szoftverszállítókat:[3]
A két szempont szerint négy kategóriát különít el a Gartner: 1) vezetők (leaders), 2) kihívók (challengers), 3) piaci rész szereplők (niche players), 4) vizionálók (visionaries). A 2x2-es mátrix jobb felső sarkában vannak azok a szereplők, akik mind jövőkép, mind pedig végrehajtási képesség szempontjából jelenleg a legérdekesebbek, legjobbak a piacon a Gartner értékelése alapján.
A klasszikus BI megoldásokat szállító nagy cégek (IBM, SAS, Microsoft) mellett a TIBCO, RapidMiner[4] és a KNIME az, amelyeket a Gartner elemzése alapján érdemes kiemelni. Ezek közül is kitűnik a KNIME, amely bár a Leader kategória legfiatalabb tagja[5], már az előző években is a jobb felső sarokban „lakott”, azonban 2019-re abszolút kategóriagyőztessé vált.
A továbbiakban egy lehetséges felhasználási példát mutatunk be a fiatal KNIME-mal, amely ideális választás lehet az adatbányászat iránt érdeklődő, programozási tudással nem rendelkező kezdők számára is. Az alapszoftver (KNIME Analytics Platform) mindenki számára ingyenesen letölthető és korlátozásmentesen (sem időbeli, sem funkcionális, sem adatméretbeli korlátok) használható egy rövid regisztrációt követően[6]. Az elemzési logika alapvetően platformfüggetlen, jellemzően a többi eszközben is megvalósítható.
Hogyan döntse el egy bank, hogy egy új, bejövő ügyfélnek nyújtson-e hitelt? Vagy, hogy egy már meglévő ügyfél fizetésképtelen lesz-e? Ezekre a kérdésekre – de általánosabban: egy igen/nem válaszú kérdésre (klasszifikáció) – keressük a választ adatelemzés és logisztikus regresszió segítségével[7]. Ebben a példában bemutatjuk, hogyan állítsunk össze ehhez egy alapmodellt a KNIME segítségével.
Példánkban egy bank 850 ügyfeléről vannak historikus adataink. Egy csv fájlban az ügyfelek személyes leíró adatai, egy excel fájlban pedig a jövedelmére és hiteltörténetére vonatkozó adatai állnak rendelkezésünkre:
Változó | Változó tartalma | Adattábla |
age | életkor | személyes adatok (csv) |
ed | iskolai végzettség | személyes adatok (csv) |
employ | évek száma a jelenlegi munkahelyen | személyes adatok (csv) |
address | hány éve él lakhelyén | személyes adatok (csv) |
income | jövedelem | hiteltörténet adatok (xlsx) |
debtinc | adósság és jövedelem aránya | hiteltörténet adatok (xlsx) |
creddebt | hitelkártya adósság | hiteltörténet adatok (xlsx) |
otherdebt | egyéb adósság | hiteltörténet adatok (xlsx) |
default | fizetésképtelen lett-e | hiteltörténet adatok (xlsx) |
A 850-ből 150 ügyfél fizetésképtelenségre vonatkozó (default) adata hiányzik. Ezt a 150 új ügyfelet fogjuk klasszifikálni egy logisztikus regresszió segítségével. Magyarul arra adunk becslést, hogy a meglévő adatainkban rejlő mintázatok alapján a 150 új ügyfél közül ki fog várhatóan fizetésképtelen lenni, ha hitelezünk neki. Tehát választ tudunk adni arra a kérdésre, hogy kinek adjunk, és kinek ne adjunk hitelt a múltbeli tapasztalatok alapján.
Első lépésként egy File Reader és egy Excel Reader node segítségével a két forrásból betöltjük az adatainkat KNIME-ba. Azonban mivel egy adattáblában szeretnénk látni az adatokat, a Joiner node használatával összekötjük a két táblát. Esetünkben – az egyszerűség kedvéért - a két fájlban ugyanolyan sorrendben szerepelnek az ügyfelekhez tartozó adatok, így a Joiner node a sorszám alapján feleltette meg őket egymásnak. Adott esetben lehetőség van más típusú összekötésre is.
Az adatok betöltése után a 150 hiányzó/üres „default” ügyféladatot a KNIME nem üres adatként értelmezi, hanem „NA” -ként, emiatt a default változónak három lehetséges értéket tulajdonít (Yes/No/NA). Annak érdekében, hogy az NA-kat hiányzó/üres adatként értelmezze (ekkor tudunk rá predikciót készíteni), a Table Creator node-dal készítünk egy 1x2-es táblát, aminek első oszlopába NA-t írunk, a másodikba pedig semmit (üres adat) majd a Cell Replacer Node-dal a default oszlop minden olyan adatát, amely megfelel az 1x2-es táblázatunk első cellájának (NA) kicserélünk a másodikra (üres adat).
A következő lépésben a Row Filter node segítségével szétszedjük az adattáblát két részre az ügyfelek mentén vágva: egy 700 soros részre, amelyen a modellt építjük, valamint egy 150 soros részre, amelyen ezt követően a modellt alkalmazzuk.
A modellépítéshez a 700 sorunkat is két részre szedjük a Partitioning node-dal, az ügyfelek 80%-át használjuk a logit regresszió tanításához (Train Set), a maradék 20%-án (Test Set) pedig teszteljük a modellt. Továbbá beállítjuk, hogy a két részben (Train és Test Set) a default aránya hasonló legyen, valamint a reprodukálhatóság érdekében beállítunk egy random seed-et is. A modell a tanuló idősoron tanul (arra optimalizálja az illeszkedést), majd egy ettől független teszt idősoron kerül visszamérésre a modell várható pontossága. A Test adatokon visszamért pontosság alapján képet kapunk arról, hogy a modellünk mennyire pontosan jelez előre nem hozzáférhető adatokon. Ebből következtethetünk arra is, hogy mennyire lesz pontos a modell az új adaton (esetünkben 150 bejövő ügyfél adatán).
Most következne a logisztikus regresszió, azonban ahhoz tudnunk kellene, hogy milyen változókat (prediktorokat) használjunk. A KNIME-ban nincs olyan node, amely kiválasztaná, hogy mely magyarázó változókra van szükségünk. Lehetséges azonban a KNIME-ban R kód futtatása is, így most ezt használva egy iteratív eljárást alkalmazunk ahhoz, hogy megtaláljuk, mely változók beépítésével kapjuk a legjobb modellt. Miután meggyőződtünk arról, hogy az R bővítmények hozzá vannak adva a KNIME-hoz (file-install KNIME extensions), az R Learner és az Add Table To R node-okat használjuk. Az R kiterjesztésnél a kódban az adattáblánkra knime.in néven kell hivatkozni.
Kimenetelként egy ugyanolyan R Workspace képet kapunk, mint amilyet az R-ben is kapnánk. A modellszelekciós algoritmus alapján az age, debtinc, address, creddebt és employ változókat érdemes felhasználnunk modellünkben.
A kiválasztott változókat megadjuk a Logistic Regression Lerner node-ban, ezt követően pedig a Logistic Regression Predictor node az adattáblánkhoz hozzáadja új oszlopként a becsléseket (figyeljünk, hogy ezt már a „20%-os” teszt adatokkal kössük össze). Végül a modellt elmentjük a PMML Writer node-dal, hogy azt majd a 150 bejövő ügyfélre (és a későbbi „új” ügyfelekre) alkalmazhassuk.
Az új adattáblánkban szerepelnek az eredeti default (csődös / nem csődös) értékek és már a becsült értékek is, így a 700 soros táblánk 20%-án (a tesztadatokon) megvizsgáljuk, mennyire jó a modellünk. A Scorer node-dal ún. konfúziós mátrixot[8] készíthetünk, amely összefoglalóan megmutatja, hogy a modellünk 115 esetben eltalálta, hogy fizetésképtelen lett-e az ügyfél, 25 esetben pedig nem. Ez alapján a modell pontossága (accuracy) 82.14%, ami magasnak mondható (ez minden esetben üzleti igény kérdése), így alkalmazzuk a modellt a 150 bejövő ügyfélre is. A konfúziós mátrixról leolvasható még két fontos statisztikai mutató is: az első- és a másodfajú hiba.
Elsőfajú hibát (fals pozitív eset) akkor vétünk, amikor egy ügyfélre azt becsüli a modell, hogy default-os, de valójában nem az (2/(101+2) = 1,9%). Ezzel szemben másodfajú hibának (fals negatív eset) számít, amikor a modell azt becsüli azt ügyfélről, hogy nem lesz fizetésképtelen (default-os), de valójában az lesz ((23/(23+14) = 62,2%)). Mind az első-, mind a másodfajú hibának van költsége: az elsőnek a nem megkötött jó üzlet elbukott haszna mint alternatív költség, a másodiknak pedig a megkötött rossz üzlet költsége (behajtási költségek, nem behajtott kölcsön stb).
A korábban elmentett modellt behívjuk a PMML Reader node-dal. A PMML Predictor node alkalmazza a modellünket a megfelelő adatokra, ami esetünkben értelemszerűen a 150 bejövő (hiányzó default-os) ügyfél. A modell új ügyfelekre történő futtatásával az adattáblánkban egy oszlop jelenik meg, ami a „default” változó modell általi becslése.
A vissza nem fizetett hitelek óriási veszteséget jelentenek a bankok számára. A leegyszerűsített példán bemutatott módszer segít kideríteni egy (leendő) ügyfélről, hogy az fizetésképtelen lesz-e, ezzel jelentős összegeket megtakarítva a banknak, csökkentve a potenciális nem fizető ügyfelek számát. Mivel azonban egy modell sem tökéletes, továbbra is lesznek olyanok, akiknek hitelt fog nyújtani a bank, pedig nem fogják visszafizetni, és olyanok is, akiknek nem nyújt hitelt, pedig jó adósok lettek volna (lásd konfúziós mátrix). Ezek arányát (első és másodfajú hiba) általában egymás kárára tudja optimalizálni egy bank a modell átparaméterezésével.
Gulyás Attila az IFUA Horváth & Partners Data Scientistje
Illés Gábor az IFUA Horváth & Partners Business Analystje
[2] https://www.kdnuggets.com/2016/03/mirage-citizen-data-scientist.html
[3] https://www.gartner.com/doc/2560415/gartner-evaluates-vendors-markets-magic
[4] Érdekességként érdemes megjegyezni, hogy a RAPIDMINER-nek egy korábbi felvásárlás révén, Budapesten is működik fejlesztő bázisa, a termék dinamikus fejlődésen megy keresztül, és könnyen hozzájuthatunk a legújabb fejlesztések béta verziójának teszteléséhez.
[5] Várakozásaink szerint a Dataiku és az Alteryx esélyes várományosai jövőre a Leader pecsétnek, látva a termékeket, a fejlődési pályájukat, és a mögé állt fejlesztési finanszírozást.
[6] Láttunk már korábban ehhez hasonló üzleti modellt a RAPIDMINER esetében a Community vs. Enterprise Edition megközelítéssel, ezekben az esetekben az az irány látszik, hogy minél több fejlesztési erőforrást fordítanak a termékre, annál inkább átfordul a Community egyfajta Trial Version megközelítésbe (azaz időben korlátos lesz az ingyenes használat), hosszú távon az a várakozásunk, hogy a KNIME esetében is ez esélyes. Egyelőre nem ez a helyzet, így személyes fejlődésre kiválóan alkalmas, Enterprise megoldásokra pedig a KNIME is a Server megoldását javasolja, ami természetesen fizetős szolgáltatás.
[7] Természetesen egy valós projekthelyzetben maga a modellválasztás, ill. a validációs kritériumok ellenőrzése fontos szakasza a projektnek, itt ettől eltekintünk, mivel a cél a folyamat és a megközelítés bemutatása, nem a legjobb modell kialakítása.
[8] Egy jó értelmező cikk a confusion matrix-ról https://towardsdatascience.com/understanding-confusion-matrix-a9ad42dcfd62