Interjú Unyi Dániellel, a Dataracing 2023 data science verseny 3. helyezettjével
A Magyar Nemzeti Bank és a Budapesti Műszaki és Gazdaságtudományi Egyetem idén ősszel újra megszervezte a Dataracing data science versenyt, hogy a szakmai fejlődéshez és kapcsolódáshoz platformot teremtsen a magyar data science közösségnek. A Dataracing 2023 data science verseny során egy olyan modell létrehozása volt a cél, amely a lakossági hitelállomány adatait felhasználva becslést ad arra, hogy kik azok, akik nem tudják tovább fizetni a hiteleiket. A versenyre 2023. október 27-től 5 héten keresztül folyamatosan nevezhettek hazai adatelemzéssel foglalkozó szakértők és lelkes érdeklődők. A verseny folyamán 108 versenyző, összesen több mint 3200 megoldáson keresztül mérte össze szakmai tudását. A versenyen idén a harmadik helyet Unyi Dániel vitte haza. A versenyen elért eredményének hátteréről kérdeztük.
Dmlab: Szia Dániel, gratulálunk a harmadik helyhez. Elsőként mit szeretnél megosztani magadról?
Dániel: A BME-TMIT tanszékén, a SmartLab kutatócsoportban vagyok főállású doktorandusz. Kutatási témám hálózatok elemzése deep learning módszerekkel, amiért nagyon lelkesedem. A kidolgozott módszereket használjuk például felhőszolgáltatások optimalizálásához vagy az emberi agy fejlődésének vizsgálatához is. Korábban pár évig szoftverfejlesztőként dolgoztam, előtte pedig biomérnöknek tanultam. Szabadidőmben szeretek focizni, kirándulni, társasozni.
Volt-e korábbi tapasztalatod vagy bármilyen a verseny témájához kapcsolódó iparági ismereted, amely segített, hogy sikeres legyél ezen a versenyen?
Nyilván sokat segített, hogy a BME-s kutatási projektek és céges együttműködések miatt a data science a mindennapjaim részét képezi. Viszont versenyeken korábban csak kétszer indultam. Az egyik épp az előző Dataracing idején futott, a MICCAI konferencia szervezésében: agyi MRI felvételek alapján kellett életkorra vonatkozó regressziót végezni. Ott szűkösen, de sikerült elcsípni az első helyet.
Hitelbedőléssel kapcsolatos adatokkal még nem foglalkoztam, inkább a legjobb gyakorlatokra és a józan észre támaszkodtam a verseny során.
Csináltál-e feltáró adatelemzést az adatokon? Mi volt a legérdekesebb észrevétel/összefüggés, amit az adatokban találtál?
Először is végiggondoltam, melyik változó mit jelenthet, megnéztem az eloszlásukat és a hiányzó értékek számát. Fontos volt realizálni, hogy több hitel tartozhat egy személyhez, illetve több személy tartozhat egy hitelhez.
Mivel a megközelítésem túlélés analízisre alapult, azt is megnézegettem, hogy az egyes változókon belül a különböző kategóriák (pl. különböző bankok, vagy különböző életkorú személyek) milyen valószínűséggel eredményeznek hitelbedőlést egy adott időszakban. Itt már látszódott, hogy mely változók használhatók kifejezetten jól a célváltozó predikciójára.
Végeztél-e bármilyen adatelőkészítést az adatokon? Automatikusat vagy a domaint megismerve szakértői adatelőkészítést csináltál?
Pótoltam a hiányzó értékeket, ahol nem volt jobb ötletem, ott a numerikus változóknál mediánt, a kategorikus változóknál móduszt használtam. Amelyik változónak nem volt predikciós ereje, azt eldobtam. Fabrikáltam új változókat is, de mélyebb szakértelem nem volt mögötte. Tulajdonképpen aki nálam kevésbé ért a hitelekhez, annak a helyében én kétszer is meggondolnám, hogy felvegyen-e egyáltalán.
Milyen modellezési technikákat használtál fel a verseny során? Mi alapján választottad ki a legjobbat?
A legjobb beadásaimban a végső modell, amivel megbecsültem a hitelbedőlés valószínűségét, gradient boosting-on alapult (XGBoost könyvtár). Ennek nem csak az előkészített adatok kerültek a bemenetére, hanem egy túlélés analízist végző modell kimenete is. Próbálkoztam gradient boosting és deep learning alapú túlélés prediktorokkal is. Ami közös az ilyen modellekben, hogy a kimenetük egy túlélési görbe, mely azt becsüli, hogy adott időintervallumban mekkora a bedőlés valószínűsége.
Hogyan védekeztél a túltanulás ellen a verseny során?
Ami bevált, az az early stopping és a nagyon erős regularizáció voltak. Például mindegyik döntési fa csak a sorok és az oszlopok felét használhatta, és L1/L2 regularizálva is voltak. A hiperparamétereket keresztvalidációval határoztam meg, de beadások előtt a teljes adathalmazon újratanítottam a modellt a meghatározott hiperparaméterekkel.
Milyen eszközöket használtál a verseny során?
Standard Python-os csomagokat: pandas, seaborn, scikit-learn, XGBoost, PyTorch.
Milyen hardverkörnyezetben dolgoztad ki a megoldásod?
A megszokott “vason”, egy tanszéki szerveren (12 db i7-es, 128 GB RAM, 4 db GPU). Amúgy a laptopom simán elég lett volna, tényleg csak a megszokás miatt használtam a szervert. A neurális hálókat GPU-n tanítottam be.
Milyen tapasztalatokat viszel magaddal a versenyről?
Mikor értesültem a versenyről, eldöntöttem, hogy nem vágok bele, mert se időm, se esélyem. Aztán félidő környékén mégiscsak megnéztem az adatokat. Aztán még egy kicsit nézegettem. Aztán már látni akartam, milyen eredményt tud egy logisztikus regresszió. És beszippantott. Sajnos csak az utolsó két hétben csináltam gőzerővel, így sok ötletre végül nem maradt időm.
Ezen kicsit bosszankodom, de ez elhanyagolható amellett, amennyire örülök a 3. helynek.
Van-e valamilyen tanácsod azoknak, akik most vágnak bele első data science versenyükbe?
Ne a pénzért vágj bele, hanem mert érdekel. Akkor tudsz jó helyezést elérni, ha egész nap azon kattogsz, hogyan tudnál még egy kicsit javítani a pontosságon. Másképp nem megy.
Ha lehetne egy álom versenyed, akkor milyen problémán dolgoznál a legszívesebben?
Legjobban az élettani folyamatok feltárása és a betegségek diagnosztikája érdekel, ilyen jellegű adathalmazokkal foglalkozom a legszívesebben. Szerencsére sok verseny van a témában, tabuláris adatok mellett gyakran idősoros, hálózatos vagy képszerű (pl. röntgen, MRI) adatokkal. Csak az időt kell megtaláljam, amikor nekikezdek egynek-egynek.