John

Tevfik Bulut

Data Scientist

Web Site

Linkedin

RPubs

Contact

İçindekiler

1.Intro

Missing observations in the variables in the data set, in other words missing data, come at the beginning of the problems faced by data scientists or academicians and field workers dealing with data analysis. Although there are many methods among the missing data assignment methods in the literature, some of the prominent methods are as follows:

  1. Assign mean values to missing observations
  2. Assigning 0 to missing observations
  3. Assign median value to missing observations
  4. Assignment to missing observations by PMM method
  5. Assignment to missing observations by regression method
  6. Assigning missing observations by EM (Expectation-Maximization) method

Apart from these mentioned methods, machine learning algorithms or methods can also be used to assign missing data. Some of them can be summarized as follows:

Info!
  1. Assigning missing observations with decision trees method
  2. Assigning missing observations with KNN (K Nearest Neighbor) method
  3. Assignment to missing observations with Random Forest (RF) algorithm

In this study, missing data assignment methods will be discussed and the methods to be applied will be decision trees, KNN and RF machine learning methods. In the study, the data set will be produced synthetically. In other words, it will be hypothetical. Now we can move on to the application steps in order.

2.Giriş

Veri bilimcilerin ya da veri analizleriyle uğraşan akademi ve saha çalışanların karşılaştığı problemlerin başında veri setindeki değişkenlerde eksik gözlemlerle diğer bir deyişle missing data gelmektedir. Literatürde eksik veri atama yöntemleri arasında bir çok yöntem bulunmakla birlikte öne çıkan yöntemlerden bazıları şöyledir:

  1. Eksik gözlemlere ortalama değer atama
  2. Eksik gözlemlere 0 değeri atama
  3. Eksik gözlemlere median değeri atama
  4. Eksik gözlemlere PMM yöntemi ile atama
  5. Eksik gözlemlere regresyon yöntemi ile atama
  6. Eksik gözlemlere EM (Expectation-Maximization) yöntemi ile atama

Bahsedilen bu yöntemlerin dışında eksik veri atama yöntemlerinden makine öğrenme algoritmalarından ya da yöntemlerinden de yararlanabilmektedir. Bunlardan bazıları ise şöyle özetlenebilir:

Info!
  1. Karar ağaçları (decision trees) yöntemi ile eksik gözlemlere atama yapma
  2. KNN (K Nearest Neighbor) yöntemi ile eksik gözlemlere atama yapma
  3. Rastgele orman (RF) algoritması ile eksik gözlemlere atama

Sayılan bu yöntemleri artırmak mümkündür. Bu çalışma kapsamında eksik veri atama yöntemleri olarak üzerinde uygulama yapılacak yöntemler ise karar ağaçları, KNN ve RF makine öğrenme yöntemleri olacaktır. Çalışmada örnek uygulama yapılacak veri seti sentetik olarak üretilecektir. Diğer bir deyişle hipotetik olacaktır. Şimdi sırasıyla uygulama adımlarına geçebiliriz.

2.1.Yüklenen Kütüphaneler

R programlama dilinin kullanıldığı bu çalışmada eksik veri atamaları için ağırlıklı olarak mice ve VIM kütüphaneleri kullanılmıştır.

library<-c("crosstalk","dplyr","tibble","tidyr","ggplot2","formattable","ggthemes","readr","readxl","ggpubr", "ggstance", "stringr","explore", "lubridate","tidytext", "scales", "data.table", "pastecs", "writexl", "kableExtra", "reshape2", "GGally", "VIM","mice")
yükle<-sapply(library, require, character.only = TRUE)

#Kütüphane yüklenme durumunu gösteren tablo
 
tablo=suppressWarnings(yükle, classes = "warning")
   
isim=names(tablo)
   
deger=as_tibble(tablo)
   
data.frame(Sıra=1:length(isim), Kütüphane=isim, Durumu=deger$value) %>% mutate(Durumu=if_else(Durumu==TRUE, "Yüklendi", "Paket Kurulumu Gerekli")) %>% kbl() %>%  
kable_styling(bootstrap_options = c("striped", "hover"))
Sıra Kütüphane Durumu
1 crosstalk Yüklendi
2 dplyr Yüklendi
3 tibble Yüklendi
4 tidyr Yüklendi
5 ggplot2 Yüklendi
6 formattable Yüklendi
7 ggthemes Yüklendi
8 readr Yüklendi
9 readxl Yüklendi
10 ggpubr Yüklendi
11 ggstance Yüklendi
12 stringr Yüklendi
13 explore Yüklendi
14 lubridate Yüklendi
15 tidytext Yüklendi
16 scales Yüklendi
17 data.table Yüklendi
18 pastecs Yüklendi
19 writexl Yüklendi
20 kableExtra Yüklendi
21 reshape2 Yüklendi
22 GGally Yüklendi
23 VIM Yüklendi
24 mice Yüklendi

2.2.Tesadüfi sentetik (hipotetik) veri üretme

Bu kısımda 4 değişkenden oluşan bir veri seti basit tekrarlı örneklem yöntemi kullanılarak üretilmiştir.

atama=c(1:10000, rep(NA, 10000))
set.seed(61)#aynı sonuçları almak için
v1=sample(atama, 1000, replace=TRUE)
v2=sample(atama, 1000, replace=TRUE)
v3=sample(atama, 1000, replace=TRUE)
v4=sample(atama, 1000, replace=TRUE)
veri<-cbind(v1, v2,v3,v4) %>% as_tibble()


veri %>% 
head(20) %>%
kbl() %>%  
kable_styling(bootstrap_options = c("striped", "hover"))#ilk 20 gözlem
v1 v2 v3 v4
1066 4703 NA 6745
2794 4877 6961 NA
NA NA 5195 NA
8980 NA NA NA
4962 475 NA 7929
5451 NA NA NA
NA NA NA 8980
NA NA 7764 5097
NA 9736 2428 5648
NA 9363 NA 1057
7758 820 726 1659
6592 38 5296 NA
8060 184 NA NA
4891 NA 9332 NA
4879 6856 2118 NA
NA NA NA 9575
NA NA NA 2694
6555 3404 NA NA
3901 NA 8710 3917
9358 NA 8097 1597

2.3.Tanımlayıcı istatistikler

Bu kısımda veri setine ilişkin merkezi eğilim ve yayılım ölçüleri verilmiştir.

options(scipen = 999)
stat.desc(veri, basic=TRUE, p=0.95) %>% 
kable() %>% 
kable_styling(bootstrap_options = c("striped", "hover"))
v1 v2 v3 v4
nbr.val 498.0000000 498.0000000 501.0000000 522.0000000
nbr.null 0.0000000 0.0000000 0.0000000 0.0000000
nbr.na 502.0000000 502.0000000 499.0000000 478.0000000
min 12.0000000 38.0000000 1.0000000 10.0000000
max 9985.0000000 9960.0000000 9989.0000000 9944.0000000
range 9973.0000000 9922.0000000 9988.0000000 9934.0000000
sum 2478128.0000000 2504549.0000000 2407742.0000000 2566469.0000000
median 4872.5000000 5079.5000000 4745.0000000 4898.0000000
mean 4976.1606426 5029.2148594 4805.8722555 4916.6072797
SE.mean 127.8930035 130.6419597 130.0439593 126.8412392
CI.mean.0.95 251.2776013 256.6786091 255.4999465 249.1831284
var 8145596.9278644 8499526.1690343 8472627.1036487 8398301.3752252
std.dev 2854.0492161 2915.3946849 2910.7777489 2897.9822938
coef.var 0.5735444 0.5796918 0.6056711 0.5894272

2.4.Eksik gözlemleri gösterme

Info! Burada veri setinde değişkene göre eksik gözlem sayısı ile ilgili değişkendeki toplam gözlem sayısı içindeki oranı verilmiştir.

veri %>% explore_all()

3.Uygulama

3.1.Karar ağaçları ile eksik veri atama

dt<-mice(veri, method = "cart")
## 
##  iter imp variable
##   1   1  v1  v2  v3  v4
##   1   2  v1  v2  v3  v4
##   1   3  v1  v2  v3  v4
##   1   4  v1  v2  v3  v4
##   1   5  v1  v2  v3  v4
##   2   1  v1  v2  v3  v4
##   2   2  v1  v2  v3  v4
##   2   3  v1  v2  v3  v4
##   2   4  v1  v2  v3  v4
##   2   5  v1  v2  v3  v4
##   3   1  v1  v2  v3  v4
##   3   2  v1  v2  v3  v4
##   3   3  v1  v2  v3  v4
##   3   4  v1  v2  v3  v4
##   3   5  v1  v2  v3  v4
##   4   1  v1  v2  v3  v4
##   4   2  v1  v2  v3  v4
##   4   3  v1  v2  v3  v4
##   4   4  v1  v2  v3  v4
##   4   5  v1  v2  v3  v4
##   5   1  v1  v2  v3  v4
##   5   2  v1  v2  v3  v4
##   5   3  v1  v2  v3  v4
##   5   4  v1  v2  v3  v4
##   5   5  v1  v2  v3  v4
kable(head(mice::complete(dt,1),20)) %>%  
kable_styling(bootstrap_options = c("striped", "hover"))# Atama sonrası ilk 20 gözlem
v1 v2 v3 v4
1066 4703 3503 6745
2794 4877 6961 9634
7876 9736 5195 96
8980 4480 8791 2613
4962 475 7395 7929
5451 5640 3672 2689
4024 1206 5292 8980
6209 7395 7764 5097
7829 9736 2428 5648
5534 9363 196 1057
7758 820 726 1659
6592 38 5296 8980
8060 184 7034 2368
4891 9478 9332 7387
4879 6856 2118 883
2731 3737 7388 9575
6460 9599 2776 2694
6555 3404 4282 4687
3901 5895 8710 3917
9358 9037 8097 1597

3.2.KNN (K Nearest Neighbor) algoritması ile eksik veri atama

Info! KNN algortiması hem sınıflandırma hem de regresyon problemlerinin çözümünde kullanılabilmektedir. Buradan bakıldığında hem kategorik hem de sürekli ve kesikli nitelikte olan değişkenlerde eksik veri gözlemlerinin atanmasında alternatif non-parametrik denetimli (supervised) yöntemlerden birisidir.

Info! Esas olarak özellik benzerliğine dayanmaktadır. KNN, bir veri noktasının komşusuna ne kadar benzediğini kontrol eder ve veri noktasını en çok benzediği sınıfa göre sınıflandırır.

eksikknn <- kNN(veri)
eksikknn[,1:4] %>% 
head(20) %>% 
kable() %>%  
kable_styling(bootstrap_options = c("striped", "hover")) #ilk 20 gözlem
v1 v2 v3 v4
1066 4703 4437 6745
2794 4877 6961 1974
6324 2115 5195 2802
8980 3487 6443 2413
4962 475 9037 7929
5451 7332 1474 5638
6828 5071 3840 8980
7829 8593 7764 5097
4711 9736 2428 5648
5348 9363 3117 1057
7758 820 726 1659
6592 38 5296 2689
8060 184 6363 8145
4891 8661 9332 5710
4879 6856 2118 6167
6988 2044 8365 9575
4756 2465 3815 2694
6555 3404 9751 6620
3901 2139 8710 3917
9358 3880 8097 1597

3.3.Rastgele orman algoritması (RF) ile eksik veri atama

rfdf <- mice(veri, meth = "rf", ntree = 50, seed = 61)#ntree yetiştirilecek ağaç sayısını göstermektedir.
## 
##  iter imp variable
##   1   1  v1  v2  v3  v4
##   1   2  v1  v2  v3  v4
##   1   3  v1  v2  v3  v4
##   1   4  v1  v2  v3  v4
##   1   5  v1  v2  v3  v4
##   2   1  v1  v2  v3  v4
##   2   2  v1  v2  v3  v4
##   2   3  v1  v2  v3  v4
##   2   4  v1  v2  v3  v4
##   2   5  v1  v2  v3  v4
##   3   1  v1  v2  v3  v4
##   3   2  v1  v2  v3  v4
##   3   3  v1  v2  v3  v4
##   3   4  v1  v2  v3  v4
##   3   5  v1  v2  v3  v4
##   4   1  v1  v2  v3  v4
##   4   2  v1  v2  v3  v4
##   4   3  v1  v2  v3  v4
##   4   4  v1  v2  v3  v4
##   4   5  v1  v2  v3  v4
##   5   1  v1  v2  v3  v4
##   5   2  v1  v2  v3  v4
##   5   3  v1  v2  v3  v4
##   5   4  v1  v2  v3  v4
##   5   5  v1  v2  v3  v4
kable(head(mice::complete(rfdf,1),20)) %>%  
kable_styling(bootstrap_options = c("striped", "hover"))# Atama sonrası ilk 20 gözlem
v1 v2 v3 v4
1066 4703 9642 6745
2794 4877 6961 9661
188 9941 5195 3447
8980 3404 5081 2167
4962 475 8742 7929
5451 2539 761 3045
5725 4349 1558 8980
7515 9490 7764 5097
4577 9736 2428 5648
7311 9363 2619 1057
7758 820 726 1659
6592 38 5296 9646
8060 184 5124 8948
4891 573 9332 6024
4879 6856 2118 3166
6686 7373 6708 9575
4149 4670 5850 2694
6555 3404 2676 4762
3901 2248 8710 3917
9358 8042 8097 1597

4.Sonuç

Özetle, bu çalışma kapsamında eksik veri atama yöntemler olarak karar ağaçları, KNN ve RF makine öğrenme yöntemleri kullanarak veri setindeki eksik gözlemlere değerler atanmıştır.

Faydalı olması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Yararlanılan Kaynaklar