İlk Kaggle təcrübəm
Salam hər kəsə! Bu həftəm kifayət qədər dinamik və ağır olduğundan dolayı bloqumu gecikdirməli oldum.
Elə təkcə iki günümü Elektron Hökumət Portalı tərəfindən "AI for Dİgital Government" konfransı çərçivəsində təşkil olunan "Kaggle" müsabiqəsinə sərf etdim. Etiraf etməliyəm ki, yorucu, amma bir o qədər də maraqlı bir təcrübə oldu. Daha əvvəl Kaggle ilə tanışlığım var idi, lakin mənim üçün ilk belə böyükmiqyaslı müsabiqə məhz bu oldu. Bir neçə həftə öncə isə "McKinsey" tərəfindən təşkil olunan "WomenHack 2021" müsabiqəsində iştirak etmişdim. Qeyd edim ki, həmin müsabiqə "AnalyticsVidhya" platforması üzərində keçirilirdi.
Məhz bu müsabiqələrdən sonra istədim qazandığım bəzi təcrübələri sizinlə bölüşüm. Nəzərə alsaq ki, komandamız bu müsabiqədə ilk 3 pillədən birini deyil, məhz 15-ci yeri tutub, mən sizə necə qalib gəlməkdən daha çox, necə məğlub olmamaq barədə danışa bilərəm. Bir sözlə, iştirak etdiyim iki "Hackaton" arasında hansı səhvləri düzəldərək daha yaxşı nəticə əldə etməkdə komandama necə kömək etdim.
İlk öncə bir "Hackaton"-a qoşulduğunuz zaman, vaxtın doğru idarəsi üçün planlama önəmlidir. Bundan ötrü də yarışın şərtləri, müddəti, və s, barədə detalları diqqətlə oxuyun və maksimum məlumat əldə edin. Əgər imkan varsa, daha əvvəl təşkil olunmuş oxşar müsabiqələrlə bağlı araşdırma aparmaq yaxşı olar. Əsas məqsəd daha çox "data"-ya sahib olmaqdır.
Əgər bu komanda yarışıdırsa, o zaman öz komandanızda müxtəlifliyi qorumağa çalışın. Yəni komandada həm data analitikası, həm modelləşdirmə, həm də biznes analizi üzrə bacarıqlara sahib şəxslərin iştirakı sizə üstünlük qazandıracaq. "Kaggle" müsabiqələrində iştirak etmək üçün mütləq "developer", və ya "data scientist" olmaq məcburiyyətində deyilsiniz.
Komandanı qurduqdan sonra isə sizə təqdim olunan məhdud vaxt müddətini nəzərə alaraq, bəzi edə biləcəyiniz işləri yarış başlamadan, hətta heç qəbul cavabını almadan başlaya bilərsiniz. Məsələn,
a. bəzi "Kaggle" müsabiqələrinə nəzər salmaq,
b. onlayn kurslara müraciət etmək,
c. ehtiyacınız ola biləcəyini düşündüyünüz kodları öncədən yazıb saxlamaq,
d. "package"-ləri yükləmək, kompüterin yaddaşını artırmaq üçün bəzi faylları silmək kimi.
Bu sizə yarış boyu daha sakit işləmək imkanı yaradacaq.
Yarış başladıqdan sonra datanı yaxşı analiz edin, ancaq ondan qabaq dəyişənləri yaxşı öyrənin. Əlinizdə neçə element var və mənası nədir.
Daha sonra isə "Explatory Data Analysis" (yəni tətqiqat məqsədli data təhlili) prosesi və "feature generation" (yeni dəyişənlərin yaradılması) prosesi gəlir. Bu proses sizin zamanınız əsas hissəni alacaq və bu zamandan ən səmərəli şəkildə istifadə edib datanı dərinliyi ilə öyrənmək lazımdır. Data çox böyük deyilsə, "MS Excel" vasitəsilə bunu rahatlıqla etmək mümkündür, lakin çox böyük datalar üçün "R" və "Python"-dan istifadə etmək daha yaxşıdır, çünki datanın həcmi böyüdükcə və tərkibindəki funksiyaların sayı artdıqca "Excel" proqramı dayanır. Datanı analiz edərkən, dəyişənlərin bir-biri arasındakı əlaqəni, datadakı "N/A" dəyərlərin sayını, ədədi və kateqorik dəyişənləri müəyyənləşdirin. Daha geniş analiz üçün isə mütləq biznes yanaşmasına ehtiyac var.
Əgər data "time-series" (zamandan asılı) datadırsa, bu zaman müxtəlif dəyərlərin zamanla necə dəyişdiyinə baxmaq faydalı olar. Bəzən modelləşdirmə zamanı bütün datanı istifadə etmək yerinə son bir neçə ilin (və ya elə 1 ilin) datasını istifadə etmək daha yaxşı nəticə verir.
İlkin dəyişənlər ilə tanış olduqdan və datanı analiz etdikdən sonra daha çox dəyişən ("feature") yaradın. Bu modelin daha yaxşı işləməsinə kömək edəcək. Bəzən analiz nəticəsində və ya modelin nəticəsinin "metric"-lər (göstəricilər) vasitəsilə ölçülməsi zamanı bəzi dəyişənlərin çıxarılmasının modeli yaxşılaşdırdığını da görmək olur.
Əgər "Python" üzrə bilikləriniz zəifdirsə, sizə yarışmadan bir neçə gün qabaq "pandas", "numpy", "matplotlib. pyplot" və "seaborn" üzərində bir az işləyəsiniz. "Jupyter Notebook" üzərində işləməyi tam öyrənmək isə təqribi 4 saat vaxtınızı alacaq.
Məhdud zaman çərçivəsində edilən səhvlərdən biri modelin öyrənmə prosesi üçün düzgün zaman qiymətləndirməsi aparmamağımızdır. Əgər öyrənmə prosesi uzun çəkirsə, yarışmanın əvvəlində belə modellərdən istifadə edin, sona doğru isə yeni model istifadə etmək əvəzinə əvvəlki modellərdən ən yaxşılarını seçib təkmilləşdirin.
Ümumiyytlə, qısamüddətli (24 -48 saat arası) yarışma boyu bir neçə fərqli model istifadə etmək yerinə, 1 və ya 2 model seçib, həmin modellərin parametrlərini dəyişərək "tune" etmək (yaxşılaşdırmaq) məsləhətdir. Əgər hər komanda üzvünün ayrı kompüteri varsa, əlbəttə modelləri paralel şəkildə "run" etmək vaxt baxımından kömək edəcək.
Gələk modelin ölçülməsinə. Müsabiqənin real layihələdən əsas bir fərqi də odur ki, hansı "metric"-dən istifadə edəcəyinizə siz yox, təşkilatçılar qərar verir. Ona görə də doğru göstəricini seçmək üçün əlavə vaxt sərf etmirsiniz. Əsas proses "train-test split"- i doğru etməkdir. Müsabiqədə sizə "train" və "test" data təqdim olunur. Train datada həm dəyişənlər həm də "target", ya da digər adı ilə desək, "label" olur. "Label" bizim axtardığımız nəticə, yəni asılı dəyişəndir. Məsələn, verilən imtahan nəticələri, iş təcrübəsi və təhsil səviyyəsinə əsasən namizədin işə qəbul edilmə ehtimalını tapırsınız. Burada işə qəbul olub-olmaması (0 və ya 1) "target" hesab olunur. "Test" datada həmin "target" verilmədiyinə görə biz əlimizdəki train datasını öyrənmə və "validation" (yoxlama) prosesi üçün iki hissəyə ayırmalıyıq. Əgər data zamandan asılı "time-series" datadırsa, və test data train datadan sonrakı dövrü əhatə edirsə, o zaman train datanı hissələrə ayırarkən zaman ardıcıllığına fikir vermək lazımdır. "Test" datanın hansı ayları əhatə etdiyini də nəzərə almaq yaxşı olar. Buna əsasən əlimizdəki train datanı bölərkən, "validation" üçün biz də həmin ayları isitifadə edə bilərik. "Validation" üçün seçdiyimiz datanın test dataya bənzəməsi bizə daha yaxşı müqayisə üçün kömək edəcək. Əgər əsas test və train data təsadüfü şəkildə ayrılıbsa, siz də təsadüfi bölgü aparın.
Müxtəlif modellərdən, "test-train split" üsullarından və fərqli parametrlərdən istifadə zamanı hər bir dəyişikliyi ayrılıqda yadda saxlayın. Çünki hansı modelin nəticəsinin ən yaxşı olacağını hələ bilmirsiniz. və hər bir modeli ayrılıqda yadda saxlamaq lazımdır. Hər "submission" edildikdə isə "description" bölməsində həmin nəticənin hansı modelə aid olduğu ilə bağlı qeydlər aparın ki, yarışın sonunda seçim etmək asan olsun.
Adətən müsabiqələrdə nəticəniz yer tutanda, sizdən modellə bağlı fayllar tələb olunur, ona görə istifadə etdiyiniz əlavə dataları, "notebook"-ları yüklədikcə xüsusi bir qovluqda asanlıqla tapa biləcəyiniz şəkildə yerləşdirin. Kodların mümkün qədər səliqəli olmasına fikir verin. yarışın sonuna doğru bunun faydasını görəcəksiniz. Əlavə olaraq, modeldə bütün təsadüfiliklərin qarşısını alın. Modellərdə, "train" və "validation" datasının bölünməsində "random seed" və ya "random state" parametrlərini hansısa bir rəqəm vasitəsilə sabitləşdirin.
Müsabiqədə sizə təqdim olunan test data "leaderboard" nəticəsi üçün "public" və "private" olaraq iki hissəyə ayrılır. Siz nəticəni "submit" etdikdə, bu "public leaderboard"-da qiymətləndilir. Yarış bitdikdən sonra isə "private leaderboard" nəticələri görünür. Əgər modelin göstəricisi (F1 score, accuracy, auc, roc və s.) "public leaderboard"-da getdikcə daha çox artırsa, bu "overfitting" probleminə gətirib çıxara bilər. Və "private leaderboard"-da nəticənizin aşağı düşmə ehtimalı var.
Yarışın əvvəlində "submission" sayına fikir verin. Bəzən elə olur ki, saat limiti olur və müəyyən zamandan sonra bu say yenidən bərpa olunur. Məsələn, saat 00:00-a qədər 20, həmin saatdan sonra yenidən 20 "submission" haqqınız olur. Bu halda əgər vaxta az qalıbsa, həmin 20 "submission"-dan maksimum effektiv istifadə edin. Modelləriniz sizi qane etməsə belə, bu şəkildə "test" datanı öyrənmək imkanınız ola bilər. "Validaion" data üzərində əldə etdiyiniz göstərici ilə, "public leaderboard" "score"-nu müqayisə edin, əgər onlar arasında düz mütənasib əlaqə varsa, bu düz yolda olduğunuza işarədir.
"Leaderboard"-da test datanın "public" və "private" dataya hansı nisbətdə bölünməsi qeyd olunur. Əgər "public" data 50%-dən aşağıdırsa, deməli "private leaderboard" üçün nəticələr çox dəyişkən ola bilər. Həddindən artıq submission etmək və modeli "public" dataya uyğunlaşdırmaq "overfitting"-ə səbəb ola bilər ki, bu da "private leaderboard"-da nəticəni aşağı salar. Ona görə də modeli yaxşılaşdırmaq üçün "public leaderboard"-u əsas götürməkdən daha çox, ümumi keyzlə bağlı məntiqi fikir yürütmək, yeni dəyişənlər yaratmaq, və datanı mənimsəmək daha effektiv olar.
İki "Hackaton"-dan öyrəndiklərim hələki bu qədərdir. Danışdıqlarımızı ümumiləşdirsək, bizə lazım olanlar:
Zamanın doğru idarəedilməsi;
Komanda birliyi və iş bölgüsü;
Data analizinə və "feature generation" prosesinə çox zaman ayırmaq;
Keyzi başa düşmək və hadisəyə məntiqi cəhətdən yanaşmaq;
Bir çox model seçməkdənsə, bir modeli təkmilləşdirmək;
Doğru "train" və "validation" data bölgüsü aparmaq;
Səliqəli işləmək və heç bir materialı yarışdan pncə silməmək;
Hər müsabiqədən materialları və qeydləri növbətu müsabiqələr üçün saxlamaq və yenidən onlara nəzər salmaq;
Araşdırma etməkdir.
"Kaggle" müsabiqələrində yaxşı nəticə göstərə bilmək üçün istifadə edib faydasını gördüyüm bu kursun keçidini də sizinlə bölüşürəm. Ümid edirəm ki, faydalı olar:
Özünüzə yaxşı baxın.
Xudahafiz!
Comments