Bir Data Scientistin qorxulu yuxusu - Çatışmayan verilənlər!

Nijat Zeynalov
7 min readNov 12, 2019

--

Ağdam, Azərbaycan

Data Science-lə maraqlanırsınızsa və ya yeni başlamısınızsa, bilməlisiniz ki, işinizin 80- 90% -i verilənlərin təmizlənməsi olacaq. Bəs, verilənlərin təmizlənməsi üçün ayırdığımız bu sıxıcı saatları necə qısaltmalı? Yaxşı olmazdı mı, enerjimizi layihəmiz üçün kritik önəm daşıyan qalan 10 %-ə sərf edək?

Verilənlərin təmizlənməsi prosesinin və buna ayıracağımız zamanın nə qədər önəmli olduğunu bu yaxınlarda qalibi olduğumuz “Open Data Hackathon for Municipalities” hackathonunda daha çox fərqinə vardım. 26 saat fasiləsiz davam edən hackathonda layihə mövzumuz son 15 ildə Latviyada fəailiyyəti dayandırılan məktəblərin bütün verilənlərindən istifadə edərək, hazırda mövcud olan bir məktəbin növbəti ildə bağlanmaq ehtimalını təsbit edən prediktiv model yaratmaq idi və komandada mənim əsas vəzifəm ən sıxıcı iş olan verilənlərin təmizlənməsi idi. Bu 10 saata yaxın zamanımı aldı, çünki həm ilk dəfə bu qədər veriləni bir arada görürdüm, həm də datasetlər arasında uyğunsuzluq, nəzərə alınacaq sayda null və təkrarlanan qiymətlər mövcud idi.

“Open Data Hackathon for Municipalities”, Valmiera, Latvia

Məqalənin daha anlaşıqlı olması üçün aşağıdakı başlıqlar üzrə hissələrə ayırmışam:

  1. Verilənlərin standart formada olmasının önəmi
  2. Çatışmayan verilənlər dedikdə nə nəzərdə tutulur?
  3. Çatışmayan verilənləri hansı kateqoriyalara və necə bölə bilərik?
  4. Datasetimizdə çatışmayanlar verilənlər random şəkildə mi mövcuddur?
  5. Çatışmayan verilənlərin silinməsi metodları
  6. Çatışmayan verilənlərin imputasiya metodları

1. Verilənlərin standart formada olmasının önəmi

Verilənlərimizin standart formada olması ona görə önəmlidir ki, növbəti addımlarda Maşın Öyrənməsi alqoritmlərini tədbiq etdikdə daha dəqiq model qura bilək. Bir məsələni də nəzərə almalıyıq ki, real layihələrdə verilənlərimizlə bağlı bütün problemləri ilk mərhələdə aşkar etmək, təəssüf ki, mümkün deyil. Bunun üçün Verilənlərin təmizlənməsi-> Verilənlərin modelləşdirilməsi-> Performans tənzimlənməsi periodik prosessini hazırlamalısınız.

Verilənlərin təmizlənməsi prosesində statistik nəzəriyyələri bilməyinizin üstünlüyü var. Çatışmayan verilənlərlə düzgün şəkildə davranmaq statistik bilik tələb edir, ancaq statistik nəzəriyyələr əsasında hazırlanmış bir çox alqoritm bu böyük problemin həllində işimizi xeyli asanlaşdırır.

2. Çatışmayan verilənlər dedikdə nə nəzərdə tutulur?

Adına çatışmayan dediyimiz bu verilənlər bütün formalarda və ölçülərdə ola bilər. Verilənlərin keyfiyyətini dəyərləndirmək üçün gərəkli olan çatışmayan verilənlər, statistik analiz və maşın öyrənməsində geniş yayılmış bir problemdir. Aşağıdakı nümunədə gördüyünüz kimi, 1-ci sətirdə bütün verilənlər mövcuddur, təkcə Fizika sütununda verilən yoxdur. Və ya 2-ci sətirə baxaq, birdən çox sütun üzrə çatışmayan verilənimiz var. Həmçinin, 3-cü sətrdəki kimi, birçox sütun üzrə 0 qiymətini alan verilənimiz ola bilər. Buna uyğun çox nümunə göstərə bilərik.

Qiymət cədvəli

3. Çatışmayan verilənləri hansı kateqoriyalara və necə bölə bilərik?

Çatışmayan verilənləri tam şəkildə qavramaq üçün, bu çatışmayan verilənlərin meydana gəlməsinin səbəblərini müəyyən etmək lazımdır ki, burada ilk addım ümumi verilənlərimizi və daha əhəmiyyətlisi verilənlərin toplanması prosesini başa düşməyimizdir. Yəni, verilənlərin mənbəyi haradır? Biz əlimizdə olan verilənlərə əsasən qənaətə gəlməliyik ki, çatışmayan verilənimizi nə ilə əvəz etsək, bu ümumi prossesə ciddi təsir göstərməz? Çatışmayan verilənlərin təbiəti və ya mexanizmi üç əsas sinfə (kateqoriyaya) bölünə bilər:

1-Çatışmayan verilənlər tamamilə randomdur (MCAR): Bu o deməkdir ki, çatışmayan verilənlər nə bizdə olan (görə bildiyimiz) verilənlərlə, nədəki digər çatışmayan verilənlərlə bağlı deyil və verilənin çatışmazlığı tamamilə sistemsiz (random) şəkildə baş verir. Məsələn, fərz edək ki, 12 yaşlı uşaqlar arasında piylənmənin səbəbini təyin edən bir araşdırma hazırlayırıq. Valideynlər uşaqlarını araşdırma üçün klinikaya aparmağı unudarlarsa, bu zaman çatışmayan verilənlər bu kateqoriyaya aiddir.

2-Çatışmayan verilənlər randomdur (MAR): Bu o deməkdir ki, çatışmayan verilənlər digər çatışmayan verilənlərlə deyil, bizdə olan (görə bildiyimiz) bir neçə verilənlə bağlıdır. Yuxarıdakı araşdırmanı yenidən etdiyimizi düşünək və fərz edək ki, bu dəfə valideynlər başqa şəhərə köçdükləri üçün uşaqlar araşdırmaya cəlb olunmayıblar. Aydındır ki, burada çatışmayan verilənlərin araşdırma ilə heç bir əlaqəsi yoxdur.

3-Çatışmayan verilənlər random deyil(MNAR): Çatışmayan verilənlər nə MCAR, nə də MAR olduqda mövcuddur. Burada çatışmayan verilənlər həm (bizdə olan) görə bildiyimiz verilənlərlə, həm də digər çatışmayan verilənlərlə əlaqədardır. MNAR-a misal olaraq valideynlərin araşdırmanın ümumi mühitindən razı olmaması və övladlarının bu araşdırma ilə təhqir olunduqlarını düşündükləri üçün araşdırmaya qatılmamalırını göstərə bilərik.

Datasetimizdə olan çatışmayan verilənlər üçün hansı metodu tətbiq etməyi seçməyin ən asan yolu, yuxarıda da qeyd etdiyim kimi, verilənin toplanması prosessini izləmək və başa düşmək lazımdır. Çatışmayan verilən mexanizminin metodunu seçmək üçün ikinci üsul statistik testdir. Bu üsul, əsasən mexanizmin MAR və ya MCAR olub olmadığını anlamağa çalışarkən istifadə olunur.

4. Datasetimizdə çatışmayanlar verilənlər random şəkildə mi mövcuddur?

Datasetimizdə olan çatışmayan verilənlərimizin təsadüfi (random) olub-olmadığını anlamaq üçün impyute modulundan istifadə edərək, Roderick J. A. Little-ın MCAR testini tətbiq edə bilərik. Bu testin teorik izahı sadə şəkildə belədir: Əvvəlcə verilənlərin ortalamasını çatışmayan verilənlərlə birgə, daha sonra isə verilənlərin ortalamasın çatışmayan verilənlər olmadan hesablayın. Əgər bu iki qiymət eyni və ya yaxındırsa, o zaman bu o deməkdir ki, sizin çatışmayan verilənləriniz tamamilə randomdur. Əgər siz R istifadəçisisinizsə, bunun üçün BaylorEdPsych paketində olan LittleMCAR() funksiyasından istifadə edə bilərsiniz. Əgər p dəyəri 0,05-dən böyükdürsə, bu o deməkdir ki, çatışmayan verilənləriniz tamamilə randomdur.

5. Çatışmayan verilənlərin silinməsi metodları

List əsasında silmə- Bu metoda əsasən, əgər sətir üzrə bir və ya daha çox verilən çatışmırsa, ümumilikdə həmin sətri datasetimizdən silməliyik. Bəs bu metodun mənfi cəhəti nədir? Bir nüansı qeyd edim ki, statistikanın gücünə böyük həcmli datasetlərdə daha yaxşı şahid ola bilərsiniz, bu metod isə verilənin bir çatışmayan qiymətinə görə həmin veriləni ümumilikdə sildiyi üçün bu datasetin həcminin kiçilməsinə səbəb olacaq.

Cüt silinmə- Burada çatışmayan verilənləri analiz şərtinə uyğun olaraq datasetdən silirik. Bu iki metod arasındakı fərq ondan ibarətdir ki, list əsasında silmə metodunda sətir üzrə bir və ya daha çox verilən çatışmadıqda ümumilikdə həmin sətri datasetimizdən silməliyiksə, cüt silinmə metodunda sətri silməyimiz üçün sətir üzrə bütün verilənlər çatışmamalıdır. Bu iki metod arasındakı fərqi daha yaxşı başa düşməyimiz üçün kiçik bir dataset yaradaq:

Aşağıdakı şəkildən də gördüyümüz kimi, çatışmayan verilənləri df.dropna() ilə sildikdə, bir çatışmayan verilən (NaN dəyəri) olduqda belə sətir tamamilə silinir.(Bu list əsasında silmə metodudur)

List əsasında silmə metodu

Çatışmayan verilənləri df.dropna(how =’all’) ilə sildikdə isə, yalnız bütün dəyərləri çatışmayan (NaN) olan sətirlər silinir.(Bu cüt silinmə metodudur)

Cüt silinmə metodu

İndi isə bu iki nəticə arasında olan müqayisəyə baxaq:

Sütunların silinməsi- Bu metod, sütun dəyişənləri üzrə verilənlərin 60 % və daha çox hissəsi çatışmadıqda tətbiq olunur və istifadəsi aşağıdakı kimidir:

dataset.drop('sutun_adi', axis=1, inplace=True)

Bu metodun ən böyük mənfi cəhəti ondan ibarətdir ki, biz sildiyimiz bu dəyişənin datasetimizdəki digər dəyişənlərə olan təsirini bilməkdə çətinlik çəkirik.

6. Çatışmayan verilənlərin imputasiya metodları

Ortalama, orta qiymət və mod metodu

Bu metod haqqında danışmazdan öncə, bu terminlərlə yaxından tanış olaq.

Ortalama- verilənlərin cəminin sayına olan nisbətidir. Məsələn: 7, 9 və 2 ədədlərinin ortalaması (7+9+2)/3=6 dır.

Orta qiymət- verilənləri sıraladıqda ortada olan verilənə bərabərdir. Məsələn: 7, 9 və 2 ədədlərinin orta qiyməti 7-dir. Əgər verilənlərin sayı cüt sayda olarsa, orta qiyməti tapdıqda ortada olan iki ədədi toplayıb ikiyə bölərək nəticəni əldə edə bilərik.

Mod- verilənlərin içində ən çox sayda mövcud olan, ən çox təkrarlanan say nəzərdə tutulur. Məsələn: 7, 9, 2, 7 ədədlərinin mod qiyməti 7-dir, çünki 7 ədədi digərləri ilə müqayisədə ən çox təkrar olunandır.

İndi isə bu metod haqqında: Bu metodun üstünlüyü ondadır ki, həyata keçirmək çox asandır. Ancaq bir çox mənfi cəhət var. Bu metod standart xətanı kiçildir və nəticədə, əksər hipetiz testləri və güvən intervalının hesablanması mümkünsüz olur. Çatışmayan verilənlər tamamilə random olduqda, bu metoddan istifadə etmək daha faydalıdır. Pythonda istifadəsi:

df.Sutun_Adi.fillna(df.Sutun_Adi.mean(), inplace=True)
df.Sutun_Adi.fillna(df.Sutun_Adi.median(), inplace=True)
df.Sutun_Adi.fillna(df.Sutun_Adi.mode(), inplace=True)

Reqressiya ilə imputasiya

Bu imputasiya metodu bizdə mövcud olan verilənlərdən istifadə edərək, reqressiya modeli qurmaq və bu modeldən alınan praqnozlaşdırılan dəyəri çatışmayan verilənlərlə əvəz etməkdir. Scikit-learn preprocessing Imputer funksiyasından bu məqsəd üçün istifadə edilə bilər. Pythonda istifadəsi aşağıdakı şəkildədir:

from sklearn.linear_model import LinearModel
from sklearn.preprocessing import Imputer
from sklearn.pipeline import Pipelineimp=Imputer(missing_values="NaN", strategy="mean", axis=0)
linmodel = LinearModel()
steps=[('imputation',imp),('linear_regression',linmodel)]
pipeline=Pipeline(steps)
X_train, X_test, Y_train, Y_test=train_test_split(X, y, test_size=0.3, random_state=42)
pipeline.fit(X_train, Y_train)
y_pred=pipeline.predict(X_test)
pipeline.score(X_test, Y_test)

KNN (Ən yaxın qonşular) imputasiyası

Bu imputasiyada çatışmayan verilənlər kNN alqoritminə əsaslanır. Bu imputasiyanı böyük ölçülü datasetlərdə tətbiq etmək elə də tövsiyyə olunmur, çünki, bu datasetlərdə tətbiq çox zamanımızı ala bilər və dəqiqlik elə də yüksək olmayacaq. Pythonda istifadəsi:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import Imputer
from sklearn.pipeline import Pipelinek_range=range(1,26)for k in k_range:
imp=Imputer(missing_values=”NaN”, strategy=”mean”, axis=0)
knn=KNeighborsClassifier(n_neighbors=k)
steps=[(‘imputation’,imp),(‘K-Nearest Neighbor’,knn)]
pipeline=Pipeline(steps)
X_train, X_test, Y_train, Y_test=train_test_split(X, y, test_size=0.3, random_state=42)
pipeline.fit(X_train, Y_train)
y_pred=pipeline.predict(X_test)
pipeline.score(X_test, Y_test)

Çoxsaylı imputasiya

Bu imputasiya metodu birçox reqressiya modeli tətbiq edərək işləyir və hər çatışmayan verilən, mövcud olan verilənlərdən asılı olaraq şərti olaraq modelləşdirilir. Bu metod digər metodlarla müqayisədə bir çox üstünlüyə malikdir. Lakin ən böyük dezavantajı odur ki, digər imputasiya metodları kimi nəzəri əsaslara malik deyil. Bu metod geniş mövzunu əhatə etdiyindən haqqında ayrıca məqalə yazmağı düşünürəm, lakin onu qeyd edim ki, çoxsaylı imputasiya üçün aşağıdakı addımları həyata keçirmək lazımdır:

  1. mice () istifadə edərək verilənləri qiymətləndirməli;
  2. with() istifadə edərək model qurulmalı;
  3. pool () istifadə edərək bütün modulları birləşdirməli.

Əgər çatışmayan verilənləriniz MAR və ya MCAR-dırsa, verilənlərinizə silmə metodunu, əks halda imputasiya metodunu tətbiq edin.

7. Ədəbiyyat

Bu məqalənin yazılması zamanı aşağıdakı ədəbiyyatlardan istifadə olunmuşdur:

  1. Missing data: our view of the state of the art. [Schafer JL, Graham JW; Psychol Methods. 2002]
  2. Flexible Imputation of Missing Data. Second Edition. [Chapman & Hall/CRC. Boca Raton, FL.; Van Buuren, S. (2018) ]
  3. A comparison of inclusive and restrictive strategies in modern missing data procedures.[ Collins LM, Schafer JL, Kam CM; Psychol Methods. 2001]
  4. Multiple Imputation For Missing Data: What Is It And How Can I Use It?. [ Jeffrey C. Wayman, Ph.D; Annual Meeting of the American Educational Research Association, Chicago, IL. 2003]
  5. https://medium.com/ibm-data-science-experience

Son Söz

Sonda bir məsələni təkrarlayım ki, çatışmayan verilənlərlə işləmək və verilənlərin təmizlənməsi Data Scientistin işinin ən önəmli qismidir. Təmiz verilənlərinizin olması Maşın öyrənmə alqoritmlərinizin daha yaxşı işləməsi deməkdir. Verilənlərinizin təmizlənməsi prosesinin əvvəlində hansı kateqoriyada (MCAR, MAR, MNAR) olmasını bilməyiniz və prossesi ona uyğun davam etdirməyiniz önəmlidir.

Belə, əziz oxucular! ümid edirəm, məqalə faydalı oldu. Məqalədə əgər hər hansı səhv, təhrif və s. olduğunu düşünürsünüzsə, zəhmət olmasa şərh bölməsinə qeyd edin. Növbəti məqalələrdə görüşənədək!

--

--