Published on

İlk Maşın Öyrənməsi layihəsi: Problemin Tərtib edilməsi və Həll Dizaynı üçün Bələdçi

9 min read

Authors
banner

İlk Maşın Öyrənməsi layihəsi: Problemin Tərtib edilməsi və Həll Dizaynı üçün Bələdçi

İlk məqalədən sonra, mənə linkedində bir çox suallar gəldiyi üçün ikinci məqaləni yazmaq ehtiyyacı duydum. Ümumiyyətlə, uzun müddətdir diqqət edirəm ki portfolio yaratmaq istəyənlərin qarşılaşdığı ilk çətinlik layihənin necə seçilməsi ilə bağlı olur. Hər hansı bir layihədə ilk addım probleminizi müəyyənləşdirməkdir. Siz mövcud olan ən güclü alqoritmlərdən istifadə edə bilərsiniz, lakin səhv problemi həll etsəniz, nəticələr mənasız olacaq.

Bu yazıda siz işə başlamazdan əvvəl probleminiz haqqında dərindən düşünmə prosesini öyrənəcəksiniz. Bu, şübhəsiz ki, mənə görə maşın öyrənməsinin tətbiqinin ən vacib aspektidir.

Maşın öyrənməsinin biznesə inteqrasiyası mürəkkəb real dünya problemləri üçün innovativ həllərin qapılarını açıb. Problemin formalaşdırılmasına və həllinin dizaynına sistemli yanaşmaya riayət etməklə, biz maşın öyrənməsinin gücündən bir zamanlar mümkünsüz hesab edilən problemlərin öhdəsindən gəlmək üçün istifadə edə bilərik. Bu məqalədə biz üç əsas sualı cavablandırmaqla real dünya problemlərinin həlli prosesini araşdıracağıq:

Sual 1: Həll etmək istədiyin problem nədir?

İlk addım problemi müəyyənləşdirməkdir. İstənilən həllin mərkəzində dəqiq müəyyən edilmiş problem dayanır. Problemin mahiyyətini və incəliklərini aydın şəkildə başa düşmək vacibdir. Mənim portfoliomda olan əksər layihələr, süni yaradılmış dataset üzərində qurulan real biznes keyslərin həllidir.

Ümumiyyətlə, layihənin əhatə dairəsini müəyyən etməzdən əvvəl, ilk növbədə başa düşməliyik ki:

Problem nədir? Niyə problemi həll etmək lazımdır? Bu problem maşın öyrənməsi həllini tələb edirmi? Potensial həll necə istifadə edilə bilər?

İlk olaraq, problemi müəyyənləşdirin və bunu mütləq şəkildə biznes baxımından reallığını müəyyənləşdirin, mümkün qədər konkret olun. Məsələn, mənim layihələrimdən birində Əli və Nino kitab mağazaları şəbəkəsi üçün yeni nəşr olunmuş kitabın hansı filiala neçəsini göndərməli olduğunu, hər filial üçün satış proqnozu problemini həll etmişdim. Yeni bir məhsulun satışını proqnozlaşdırmaq çətin bir işdir, çünki təxminlərinizi əsaslandırmaq üçün keçmiş performansınız yoxdur.

İstifadə etdiyim dataset isə, Əli və Nino çox filiallı kitab mağazasının satış məlumatlarına əsaslanırdı. Dataset ayda 90 min unikal müştəri və gündə 170-dən çox sifariş olan 23.345 kitabdan ibarət olub süni şəkildə yaradılsa da, yanaşma real hallara tətbiq oluna bilər və hətta proqnozun dəqiqliyindəki kiçik təkmilləşdirmə şirkət mənfəətinin əhəmiyyətli dərəcədə artmasına səbəb ola bilər.

Ən əsası, şirkətin aşağıdakı suallarına cavab tapmağa kömək edəcək:

  • Daha əvvəl bu məhsulu satmamışam, tələbat necə olacaq?

  • Bu məhsulu sifariş etsəm, neçə ədəd hansı filiala göndərməliyəm?

Məqsədlər hər bir biznes və ya istifadəçi üçün fərqlidir. Məsələn, bu, bir təşkilat üçün mənfəəti artırmaq və digəri üçün müştəri saxlamağı artırmaq ola bilər. Hər bir müştərinin və ya istifadəçinin məqsədlərini müəyyənləşdirməlisiniz. Problemi dəqiq başa düşdükdən sonra, verilən vaxt çərçivəsində layihənin əlçatanlığını təmin etmək üçün ümumi problemi daha kiçik iş parçalarına bölmək lazım ola bilər.

Oxşar həllər

İkinci olaraq diqqət edin ki, bu problem üçün başqa hansı həlləri görmüsünüz və ya həll etməyə çalışdığınız problemin həlli kimi düşünə bilərsiniz. Bu sizə həllin texniki arxitekturasını qurarkən çox ehtiyac olacaq. Mütləq şəkildə, layihəyə başlamazdan öncə benchmark yaradılmalı, digər mühəndislərin problemə yanaşması müəyyənləşdirilməlidir.

Sual 2: Niyə problemi həll etmək lazımdır?

İkinci addım problemin həllini niyə istədiyiniz və ya ehtiyacınız olduğunu dərindən düşünməkdir. Problemin həllinin aktuallığı çox vaxt onun təsirlərindən və nəticələrindən irəli gəlir. Problemi həll etmək üçün motivasiyanızı nəzərdən keçirin. Problem həll olunanda hansı ehtiyac ödəniləcək? Yoxsa ancaq texniki bacarıqlarınızı inkişaf etdirmək üçün bu problemi həll etmək istəyirsiniz?

Maşın öyrənməsi ilə real dünya problemlərinin həlli yalnız rəqəmlərin və alqoritmlərin tətbiqindən ibarət deyil; ideal halda həyat və təcrübələri yaxşılaşdırmaqdan ibarətdir. Bu prosesin əsas aspektlərindən biri son istifadəçiləri - gündəlik həyatları həll olunan problemlərdən təsirlənən fərdləri fəal şəkildə dinləməkdir.

Aşağıdakı suallar maraqlı tərəflərin perspektivlərini başa düşmək üçün müzakirəyə rəhbərlik etməyə kömək edə bilər:

  • Gündəlik həyatınızda problemlə bağlı qarşılaşdığınız ən böyük çətinliklər hansılardır?

  • Hazırda problemin yaratdığı çətinliklərin öhdəsindən necə gəlirsiniz və ya onları idarə edirsiniz? Hazırladığınız həll yolları və ya strategiyalarınız varmı?

  • Problem ilə bağlı əsas məqsədləriniz və ya arzularınız hansılardır? Uğurlu nəticəni nə hesab edərdiniz?

  • Problemin ideal həllini necə təsəvvür edirsiniz? Bu həll hansı xüsusiyyətlərə və ya keyfiyyətlərə malik olacaq?

Sual 3: Problemi necə həll edə bilərəm?

Bu üçüncü və son addımında problemi necə həll edəcəyinizi araşdırın. Əslində mənə görə ən önəmli addım da elə budur. ML layihələrinin (fərqi yoxdur, bu sizin sadəcə həvəs üçün işlədiyiniz layihədir yoxsa korperativ layihədir) vacib vəzifələrindən biri mümkün olan ən yüksək məlumat keyfiyyət standartlarını təmin etmək və saxlamaqdır. Dünyadakı şirkətlər məlumatların əldə edilməsi prosesi ilə məşğul olmaq üçün müxtəlif yanaşmalar tətbiq edirlər.

Bununla belə, standart yanaşma 1999-cu ildə Brüsseldə təqdim edilən CRISP-DM metodudur.

CRISP-DM metodologiyası aşağıdakı kimidir:

  • Biznes problemini başa düşmək
  • Əlimizdəki datanı başa düşmək
  • Datanı hazırlamaq
  • Modelləmə
  • Modelin performansını ölçmə
  • Modeli deploy etmə

Bu ümumiləşdirilmiş addımlara nəzər salaq.

1. Əlimizdəki datanı başa düşmək

Bu, layihənin həyat dövrünün ilkin və ən sadə addımıdır. Bu addımın əsas məqsədi müxtəlif mənbələrdən dataları toplamaqdır. Siz artıq bilməlisiniz ki, istifadə edəcəyiniz data haradansa scraping olunmalıdır mı, süni şəkildə yaradılmalıdır mı, digər mənbədən mi gəlir və s.

Ola bilər ki, sizin layihəniz üçün istifadə edə biləcəyiniz data haradasa mövcuddur. Məsələn mənim bir layihəm var; sağlamlığınızla bağlı şikayətinizi hansı həkimə ünvanlayacağınızı bilmədiyiniz halda, sualı yazırsız, model sizi uyğun həkimə yönləndirir. Təbii ki, hazırda Azərbaycan tibbi problemlərin təsnifatı üçün açıq məlumat toplusu yoxdur. Bu problemi həll etmək üçün istifadəçilər tərəfindən 19 tibb bölməsində 27k sualın verildiyi və tibbi ekspertlər tərəfindən cavablandırıldığı Python-dan istifadə edərək m.tibb.az saytını scrape etmişəm.

2. Datanı hazırlamaq

Növbəti addım datanın təmizlənməsi və hazırlanmasıdır. Bu o deməkdir ki, əlinizdə olan datanın əhəmiyyətsiz və faydasız hissələrini təmizləməsəniz, model nəticələri dəqiq olmayacaq və heç bir məna daşımayacaq. Bu addım “Garbage in, garbage out” fəlsəfəsini əks etdirir.

İlkin mərhələdə bütün datanı topladıqdan sonra əsas məqsəd əsas problemi həll etmək üçün hansı dataya ehtiyacınız olduğunu müəyyən etməkdir. Siz həmçinin datanı təmizləmək və filtrləməkdən başqa, onu mövcud formadan standart formata çevirməlisiniz.

Yaxşı olar ki, datanın əhəmiyyətli tendensiyalarını və nümunələrini müəyyən etmək üçün vizuallaşdırılmanı həyata keçirin. Sadəcə olaraq datanın barchart və ya xətt diaqramı şəklində göstərmək sizə əlinizdəki datanın əhəmiyyətini və qarşılıqlı asılılığını daha yaxşı təsəvvür etməyə imkan verəcək.

Feature engineering adlandırdığımız bu addım əsas diqqət etməli olduğumuz hissədir. Məsələn, Feature Engineering and Selection: A Practical Approach for Predictive Models kitabında Kuhn və Johnson düzgün featureların müəyyən edilməsi, yaradılması və seçilməsi üçün çox yaxşı analitik perspektiv təqdim edirlər. Bu çərçivədə, onlar məlumatları yenidən strukturlaşdırmaq üçün riyazi və texniki mülahizələrdən istifadə edərək, feature engineeringə sistemli yanaşma təqdim edirlər. Xüsusilə, datasetdə bir çox featureda üzrə eyni məlumatın yaratdığı biasın müəyyən edilməsi və aradan qaldırılması üçün qeyd edilmiş nüanslara diqqət etməyinizi tövsiyə edirəm.

Datanın alqoritmlərə təqdim edilməsi ilə bağlı texniki problemləri həll etməklə yanaşı, biz maşın üçün insan anlayışını və sağlam düşüncəni kodlaşdırmaq üçün feature engineerindən istifadə edə bilərik. Məsələn, (qriqorian təqvimi üçün) dekabrın ardınca yanvar gəlir və dekabrın 12, yanvarın isə 1 rəqəmi ilə təmsil olunduğunu güman etmək ağlabatan görünür. Məsələn, 12/30, 12/31 və 1/1, bir alqoritmin yanvarın ilk gününün dekabrın son günündən sonra gəldiyini başa düşməsini necə gözləmək olar?

Başqa bir nümunə istiqaməti ehtiva edən, çox vaxt 0' və 360' arasında skalyar dəyər kimi və ya bəzən kompas istiqaməti və ya fərqli nöqtələr arasında əlaqə kimi təqdim olunan məlumatlarla əlaqədardır. Məsələn, miqyasın əks tərəflərində olan 359' və 1' dərəcələri yaxındırlar və hər ikisi demək olar ki, tam şimala (0'± 1') uyğundur. Bu sirkulyarlığı nəzərə almaq üçün məlumatları yenidən tərtib etsək, daha yaxşı nəticələr əldə edəcəyik.

Feature engineering vaxt aparan və çətin tapşırıqdır. Yaxşı nəticələr əldə etmək üçün çoxlu təcrübə və domen anlayışı tələb olunur.

Datanın artırılması

Fərz edin ki, siz müxtəlif cinslərdə olan itləri klassifikasiya edən bir layihə üzərində işləyirsiniz. Siz it təsvirlərinin datasetini topladınız, lakin o, nisbətən kiçikdir və işıqlandırma şəraiti, bucaqlar və fonlar baxımından müxtəlifliyə malik deyil. Modelinizin geniş real dünya ssenariləri üçün yaxşı ümumiləşdirə bilməsini təmin etmək üçün siz datanın artırılması üsullarından istifadə etməlisiniz.

Bu kimi problemləri həll etmək üçün Shorten və Khoshgoftaar tərəfindən data augmentation texnikası inkişaf etdirilib. Datanın artırılması trainingdə istifadə ediləcək əlavə nümunələr yaratmaq üçün mövcud nümunələrin dəyişdirilməsindən istifadə prosesidir.

Biz daha möhkəm və ümumi modellər etmək üçün aşağıdakı şəkildə göstərilən kimi artırma proseslərindən istifadə edirik. İdeya ondan ibarətdir ki, train datasetimizdə daha geniş müxtəliflik olarsa, model daha yaxşı nəticə göstərəcək.

3. Modelləmə

Layihənin həyat dövrünün bu addımı ən maraqlı və vacibdir, çünki sehr burada baş verir :). Bir çox hallarda müxtəlif mənbələrdən data topladıqdan sonra birbaşa bu mərhələyə keçilir. Unutmayın ki, bu sizə dəqiq nəticə verməyəcək.

İlk olaraq bu suala cavab verək, ML modelini faydalı və ya faydasız edən nədir? ML ənənələri deyir ki, faydalı model yaxşı ümumiləşdirən modeldir: model öyrədilmədiyi və heç vaxt görmədiyi vəziyyətlərin öhdəsindən effektiv şəkildə gəlməlidir. Lakin, əslində, modelləri faydalı edən və ya yararsız edən bir sıra digər xüsusiyyətlər var.

Faydalı bir model təqdim etmək üçün siz çoxlu sayda namizəd modelləri yaratmalı, onları düzgün qiymətləndirməli, ən yaxşı olanı seçməlisiniz. Bundan əlavə, ciddi qiymətləndirmə prosesi olmadan, modeliniz real istifadədə olduqda yararsız ola bilər və ya maraqlı tərəflərin model haqqında məsuliyyətli və düzgün seçimlər etdiyinizə inandırmaqda çətinlik çəkə bilərsiniz.

Aşağıdakı şəkildə bütün maraqlı tərəflərin ehtiyaclarına uyğun modelləşdirmə işlərinin aparılması üçün lazımlı nüanslar qeyd olunub. Əla model sadəcə əla nəticəsi olan model deyil, maraqlı tərəflərin də əla olduğunu təsdiq edə biləcəyi bir modeldir.

modeling

Maşın öyrənmə modellərinin qurulmasında əsas addımlar bunlardır:

  • 1. Problem üçün ən yaxşı nəticə verən alqoritmin tapılması

Maşın öyrənmə modellərinin qurulması üçün bir neçə alqoritm var. Bununla belə, problemi ən yaxşı həll edən və datasetimizə uyğun gələn alqoritmdən istifadə etməlisiniz. Problemi həll edə biləcək əvvəlcədən hazırlanmış bir model ola bilər.

Overfitting, data leakage kimi ümumi problemlərin olmamasına xüsusi diqqət yetirilməlidir.

  • 2. Modelin yoxlanılması və sınaqdan keçirilməsi

Modelinizi train etdikdən sonra onun işlədiyinə əmin olmaq üçün test etməlisiniz. Bu, modeldə test datasetini sınaqdan keçirməklə edilə bilər.

Burada modeli mümkün qədər çox sınaqdan keçirin. Məqsəd modelin problemi həll etmək üçün kifayət qədər düzgün işlədiyini və hansı hallarda düzgün olub olmadığını müəyyən etmək olmalıdır. Model testi olduqca təkrarlanan və vaxt aparan ola bilər. Fərqli datasetlərlə ilə sınaqdan keçirərkən qeydləri saxlamalısınız. Mən Weights & Biases istifadə edirəm, bu kimi alətlər testlərinizi izləmək üçün əladır.

Modelin performansını ölçərkən accuracy, f1_score, recall və s. kimi metriclərdən əlavə də diqqət etməli olduğunuz nüanslar var:

  • İzahat/şəffaflıq: Modelin proqnozları asan şəkildə maraqlı tərəflərə izah edilə bilir mi? Yoxsa qurduğunuz model blackbox həlldir. Yaxşı olar ki, məsələn customer churn modeli qurursunuzsa, istənilən halda modelin hər hansı şəxsin niyə şirkəti tərk edəcəyini proqnozlaşdırmasını izah edə biləsiniz. Bunun üçün bir neçə alət var, mən explainerdashboard istifadə edirəm.

  • Gecikmə: Modelin gecikmə müddəti biznes tələbinə uyğun olmalıdır.

  • Xərc: Xərci mütləq şəkildə öncədən düşünməlisiniz, modeli işə salmaq üçün istifadə etdiyiniz infrastrukturun dəyəri çox yüksək ola bilər. Məsələn, mənim səslə adlı layihəm var - bu layihəni mən Google cloud üzərində deploy etmişdim və günlük xərcim ~45 dollara yaxın idi. Hansı ki, öncədən bunu gözləmədiyim üçün layihəni productiondan çıxarmalı oldum.

  • Datanın məxfiliyi/təhlükəsizliyi: Modeldə istifadə olunan məlumatlar tam şəkildə qorunur mu?

  • Productionda möhkəmlik: Yüksək tənzimlənmiş həll real dünyada necə deyərlər kövrək ola bilər ki, bu da öncədən bir neçə testlə yoxlanılmalıdır.

Modelin deploy edilməsi ilə bağlı isə başqa məqalədə daha geniş danışmaq istəyirəm. :)

Hər birinizə uğurlar arzulayıram, növbəti məqalələrdə görüşənədək!

© 2023 Nijat Zeynalov