Interjú Nagy Gáborral, a Dataracing data science verseny 1. helyezettjével.
A Magyar Nemzeti Bank és a Budapesti Műszaki és Gazdaságtudományi Egyetem egy közösen szervezett data science versenyt hirdetett idén tavasszal, hogy a szakmai fejlődéshez és kapcsolódáshoz platformot teremtsen a magyar data science közösségnek. A Dataracing data science verseny során egy olyan modell létrehozása volt a cél, amely megbecsüli a hazai vállalatok exportbevételeinek alakulását az elmúlt évek mérleg adatai segítségével. A verseny szakmai hátterét a Dmlab szakértői adták.
A versenyre 2022. április 11-től 10 héten keresztül folyamatosan nevezhettek hazai adatelemzéssel foglalkozó szakértők és lelkes érdeklődők. A verseny folyamán 185 versenyző, összesen több mint 6000 megoldáson keresztül mérte össze szakmai tudását2. A versenyt Nagy Gábor nyerte meg, akit a versenyen elért eredményének hátteréről kérdeztünk.
Dmlab: Szia Gábor, gratulálunk az első helyhez. Elsőként mit szeretnél megosztani magadról?
Gábor: Idén leszek 40 éves. Van egy BME-s és Közgázos MSc diplomám. Az adatbányászattal, data science-szel nagyjából 14-15 éve ismerkedtem meg. Doktoranduszként sokáig tagja is voltam a BME egy adatelemzéssel foglalkozó csapatának. Most is adatelemzéssel, szoftverfejlesztéssel foglalkozok nagyrészben, már amikor nem a kislányommal játszóterezek.
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?
Nagyjából 60-70 adatbányász versenyen vettem részt eddig. Több jó helyezést sikerült már elérnem megújuló energiatermelés előrejelzés vagy credit scoring területen. Innen van némi tapasztalat. Kapcsolódó iparági ismeretként talán a számvitel szigorlatról felrémlő pár dolgot említenék csak a mérleg részeiről, de nem segítettek az ez alapján számított származtatott változók.
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?
Csináltam sok vizualizációt, de ezek főleg a tanuló és a teszt halmaz eloszlásbeli különbségeire, outlierekre vonatkoztak. A megelőző év export árbevétele a legerősebb magyarázó változó, bár ez nem volt túlságosan megrázóan érdekes. Ez egyfajta baseline. Ezen felül megyénként és szektoronként eltérő, hogy milyen baseline az, ami működik (megelőző év mediánja stb.). Érdekes volt, hogy a nyertes modell egyáltalán nem használt se szektoriális, se földrajzi jellegű kategorikus változókat. Szerintem itt még lehetne kutakodni egy kicsit, csak ahhoz jóval több adatra lenne szükség.
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?
Sok kategorikus változó éveken átívelően konstans értéket vett fel, ezeket egyesítettem és numerikussá alakítottam. Ugyanakkor a módszerek, amiket használtam, nem követelték meg ezt annyira. Inkább új változók és főleg új célváltozók fabrikálásával töltöttem az időmet.
Milyen modellezési technikákat használtál fel a verseny során? Mi alapján választottad ki a legjobbat?
Korábbi tapasztalataim alapján az ilyen jellegű versenyeken a Gradient Boosting módszerek elég jól szerepelnek. Nyilván keresztvalidációt végeztem, hogy ez kiderüljön, bár nagy meglepetés emiatt nem ért. Ugyanakkor már egy egyszerű egyváltozós lineáris regresszióval is elég jó eredményt lehet elérni, annyira erős a kapcsolat a megelőző év export árbevétele és az előre jelezni kívánt év árbevétele közt.
Hogyan védekeztél a túltanulás ellen a verseny során?
A keresztvalidáció során az 5 különböző modell outputját átlagoltam. Hanyagoltam az egzotikusabb dolgokat, mint a stacking, ami sok adat esetén szokott azért javítani. Tartózkodtam olyan transzformációktól, ami a célváltozót vagy annak valamilyen transzformáltját használja fel különböző új változók készítéséhez (pl. label encoding).
Milyen eszközöket használtál a verseny során?
Csak oldschool dolgokat. Jupyter Lab/Notebook. Ezen belül természetesen pandas. Vizualizációhoz seaborn. Keresztvalidációhoz és modell metrikák miatt scikit-learn. Lineáris modellekhez statsmodels. Gradient Boostinghoz, általánosan a modellezéshez a LightGBM. Próbálkoztam más Gradient Boosting implementációval is, mint az xgboost és a catboost, de ezek közel se adtak olyan jó eredményt, mint a LightGBM.
Milyen hardverkörnyezetben dolgoztad ki a megoldásod?
Az adathalmaz barátságos mérete miatt nem kellett nagyobb gépeket bevetni és gyorsan lehetett iterálni az ötleteken a laptopomon is, ami egy 2 éves Acer 16 GB RAM-mal és egy 4 magos i7-es processzorral. Ubuntun dolgozom.
Milyen tapasztalatokat viszel magaddal a versenyről?
Érdemes új célváltozó(k)at kreálni, ha az eredeti nem megfelelő, mint pl. most (a nyers exportárbevétel nagy értéktartományban szóródik, amin a logaritmikus vagy egyéb transzformáció sem segít sokat).
Van-e valamilyen tanácsod azoknak, akik most vágnak bele első data science versenyükbe?
Kezdd el hamar. Adj be minden nap. Találj egy egyszerű baseline-t, amihez a bonyolult modelleket hasonlíthatod. Bízz a saját keresztvalidációdban. Ne foglalkozz annyit a leaderboarddal. Iterálj az ötleteken gyorsan.
Ha lehetne egy álom versenyed, akkor milyen problémán dolgoznál a legszívesebben?
Versenyekkel kapcsolatban mindenevő vagyok, bár a hasonló tabuláris adatokon szívesebben dolgozok, mint képeken vagy hangfile-okon. Ha kicsit több infó van a változókról, azt jobban preferálom.