R’da Karar Ağacı Üzerine Bir Vaka Çalışması: A Case Study on Decision Tree in R

Günümüzde veri madenciliği uygulamalarının yaygınlaşması ve büyük veri kavramının öne çıkmasıyla birlikte analiz metotları da değişmiştir.

Bugüne kadar genellikle bulut (cloud) veri tabanları üzerindeki veri setleri indirilerek analize konu ediliyordu. Ancak gelişen teknoloji veri madenciliği yöntemlerinde de önemli değişiklikler ve bazı soruları beraberinde getirmiştir. Bu sorulardan bazıları şöyledir:

  1. Online veya offline olarak dokümanlarda analize konu edilecek veri metin verisi ise nasıl analiz edilecektir?
  2. Aynı zamanda metin verisiyle birlikte numerik veri içiçe geçmişse, yani hibrit bir veri türüyle karşı karşıya kalınırsa nasıl bir yöntem izlenecektir?
  3. Ya da xlsx, txt, csv ve diğer uzantılı dokümanlar online bir platform üzerinde ise nasıl analiz edilecektir?

İşte bu soruların cevabı istatistik biliminden de beslenerek ancak ondan öte bilgisayar mühendisliği alanına giren veri madenciliğinde yatmaktadır. Bu soruların arttırılması mümkündür.

Veri madenciliğin temel amacı veriyi analize uygun hale getirmektir. Bu amaçla geliştirilmiş bir çok programlama dili bulunmaktadır. Örnek uygulama yapılacak bu çalışma kapsamında kullanılacak programlama dili R olmakla birlikte Python, Julia gibi diğer programlama dilleri de kullanılabilmektedir.

Karar ağaçları hem sınıflandırma (kategorik veriler) hemde regresyon (numerik veriler) problemlerin çözümünde kullanılabilen veri madenciliği ve makine öğrenme algoritmasıdır. Çok güçlü algoritmalar olan karar ağaçları kompleks ve büyük veri setlerinin çözümünde oldukça yararlanılan denetimli öğrenme algoritmaları ailesine aittir. Bunun yanında karar ağaçları rastgele orman (random forests) algoritmalarının temel bileşenleridir.

Karar ağaçları karar destek aracı olması yanında alınan kararların görselleştirilmesine de olanak tanır. Bir karar ağacının mimarisi Şekil 1’de verilmiştir.

Şekil 1: Karar Ağacının Mimarisi (Decision Tree Architecture)

Bir karar ağacı temel olarak 4 ana düğüm (node)’den oluşur. Bunlar sırasıyla kök (root) düğüm, iç düğümler ve yaprak (leaf) düğümlerden oluşur. Bu düğümler dallar aracılığıyla birbirine bağlanır. Şekil 1’deki karar ağacı iki daldan oluşmaktadır. Terminal ve yaprak düğümleri karar düğümleridir. Şekil 1’de kök düğümden sonraki iki kısım dalları, dalların uzantıları ise yaprakları göstermektedir. Biçimsel olarak ağaçtan, işleyiş olarak ise insan karar verme süreçinden ilham almaktadır.

Karar ağaçlarında hedef değişken (target variable) kategorik ise sınıflandırma algoritması, numerik (sürekli veya kesikli) değişken ise regresyon algoritması kullanılır. Karar ağaçları pek çok alanda kullanılmakla birlikte aşağıda belirtilen bir çok alanda kendine uygulama alanı bulmaktadır:

  1. İmalat sanayi
  2. Astronomi
  3. Moleküler biyololoji
  4. Biyomedikal mühendisliği
  5. Eczacılık
  6. Planlama
  7. Tıp

Çalışma kapsamında özgün bir çalışma olması adına ABD Tarım Departmanı Ekonomik Araştırma Servisi (United States Department of Agriculture Economic Research Service) internet sayfasında yer alan ABD Eyalet ve İlçe Düzeyi İşsizlik ve Medyan Hanehalkı Geliri (Unemployment and median household income for the U.S., States, and counties) veri seti kullanılmıştır. Kullanılan veri setinin indirilebilir linkine aşağıda yer verilmiştir.

https://www.ers.usda.gov/webdocs/DataFiles/48747/Unemployment.xls?v=9115.7

Çalışma kapsamında veri seti içerisindeki 2018 yılına ait işssizlik oranı hesaplanmasında kullanılan veriler alınmıştır. Veri setinde İşsizlik oranı verisi ile birlikte bu verinin (Unemployment Rate) hesaplanmasına temel oluşturan değişkenler sırasıyla şöyledir:

  1. İşgücü (Labor Force)
  2. İstihdam (Employment)
  3. İşsizlik (Unemployment)

Amaç: 2018 İşsizlik Oranı verileri ordinal kategorik veriye dönüştürülerek karar ağacı algoritmalarından sınıflandırma algoritması ile bağımlı değişkenin ne kadarlık bir doğrulukla tahmin edileceğini ortaya koymak amaçlanmıştır. Burada, işsizlik oranı (unemployment rate) kategorik veriye dönüştürülerek hedef değişken olarak belirlenmiştir.

R programlama dili kullanılarak R kod blokları ve R kod bloklarının çalıştırılmasıyla elde edilen çıktı (output)’lara aşama aşama yer verilerek gösterilmiştir.

R Kod Bloğu 1 (R1)

R1 run edilerek yukarıda bahsedilen siteden veri seti online kaynaktan okunmuştur. Ancak bilgisayara indirilmemiştir.

library(readxl)# Excel dokümanlarını okumak için
url <- "https://www.ers.usda.gov/webdocs/DataFiles/48747/Unemployment.xls?v=9115.7"
destfile <- "Unemployment_xls_v_9115.xls"
curl::curl_download(url, destfile)
Unemployment<- read_excel(destfile, range = "A8:BB3283")#Veri setindeki ilgili hücrelerdeki verileri almak için
Unemployment

R Kod Bloğu 2 (R2)

R2’nin çalıştırılması ile sırasıyla;

  1. Veri setindeki değişken isimleri verilmiştir.
  2. Veri setinin kaç değişkenden ve gözlemden oluştuğu verilmiştir.
  3. library(tidyr) ve library(dplyr) paketleri yüklenerek eksik verilerin (Missing Data: NA) olduğu satırlar çıkarılmıştır.
  4. NA (Not Available) değerleri çıkarıldıktan sonraki gözlem sayısı gözden geçirilmiştir.
  5. Veri setinden 2018 yılına ait değişkenler alınmıştır.
  6. 2018 yılına ait veri setinin tanımlayıcı istatistikleri verilmiştir.
  7. 2018 yılına ait veri setindeki değişken adları değiştirilmiştir.
  8. 2018 yılına ait veri setinin ilk 6 satırı verilmiştir.
  9. 2018 yılı veri setindeki işsizlik oranı (unemployment rate) değişkeni “Low”, “Middle”, “High” ve “Very High” olarak kategorize edilerek tanımlayıcı istatistikleri verilmiştir.
  10. Analiz kapsamında değerlendirilecek değişkenler ve bunlara ait veri seti esnek ve gelişmiş tablo içine alınarak ilk 6 satırı verilmiştir.
names(Unemployment)
str(Unemployment)#3275 obs. of  54 variables:
library(tidyr)
library(dplyr)
df<-Unemployment %>% drop_na()#Missing Data (NA) olan değerler veri setinden çıkarılmıştır.
str(df)# NA değerleri çıkarıldıktan sonraki gözlem değerleri gözden geçirilmiştir.

df1<-df[, 51:54]#2018 yılı değişkenlerinin olduğu sütunların seçilmesi
df1
summary(df1)#2018 yılı işsizlik veri seti tanımlayıcı istatistikleri

df2<-df1 %>% rename(Labor_Force=Civilian_labor_force_2018, Employed=Employed_2018,Unemployed=Unemployed_2018, Unemployment_Rate= Unemployment_rate_2018)#değişken adlarının değiştirilmesi
names(df2)#Değişkenlerin yeni adları

library(tibble)#esnek ve gelişmiş tablo oluşturmak için
df_20<-cut(df2$Unemployment_Rate, breaks = 4, labels = c("Low", "Middle", "High", "Very High"))#İşsizlik oranı verisinin kategorize edilerek ordinal veri türüne dönüştürülmesi için

library(Hmisc)
describe(df_20)#Kategorize edilen veriye ait tanımlayıcı istatistikleri vermek için

t10<-tibble(Labor_Force=df2$Labor_Force, Employment=df2$Employed, Unemployment=df2$Unemployed, Classification=df_20)#Gelişmiş ve esnek tablo formatı içine analiz kapsamında değerlendirilecek değişkenler ve bunlara ait veri seti alınmıştır.

library(formattable)
formattable(head(t10))# Veri setinin ilk 6 satırını vermek için

R2 kod bloğunun çalıştırılmasından sonra elde edilen çıktılar (outputs) sırasıyla aşağıda verilmiştir.

Değişken isimleri: Output (O1)

 [1] "FIPS"                            "State"                           "Area_name"                      
 [4] "Rural_urban_continuum_code_2013" "Urban_influence_code_2013"       "Metro_2013"                     
 [7] "Civilian_labor_force_2007"       "Employed_2007"                   "Unemployed_2007"                
[10] "Unemployment_rate_2007"          "Civilian_labor_force_2008"       "Employed_2008"                  
[13] "Unemployed_2008"                 "Unemployment_rate_2008"          "Civilian_labor_force_2009"      
[16] "Employed_2009"                   "Unemployed_2009"                 "Unemployment_rate_2009"         
[19] "Civilian_labor_force_2010"       "Employed_2010"                   "Unemployed_2010"                
[22] "Unemployment_rate_2010"          "Civilian_labor_force_2011"       "Employed_2011"                  
[25] "Unemployed_2011"                 "Unemployment_rate_2011"          "Civilian_labor_force_2012"      
[28] "Employed_2012"                   "Unemployed_2012"                 "Unemployment_rate_2012"         
[31] "Civilian_labor_force_2013"       "Employed_2013"                   "Unemployed_2013"                
[34] "Unemployment_rate_2013"          "Civilian_labor_force_2014"       "Employed_2014"                  
[37] "Unemployed_2014"                 "Unemployment_rate_2014"          "Civilian_labor_force_2015"      
[40] "Employed_2015"                   "Unemployed_2015"                 "Unemployment_rate_2015"         
[43] "Civilian_labor_force_2016"       "Employed_2016"                   "Unemployed_2016"                
[46] "Unemployment_rate_2016"          "Civilian_labor_force_2017"       "Employed_2017"                  
[49] "Unemployed_2017"                 "Unemployment_rate_2017"          "Civilian_labor_force_2018"      
[52] "Employed_2018"                   "Unemployed_2018"                 "Unemployment_rate_2018"

Gözlem ve Değişken Sayısı: Output 2 (O2)

Veri seti görüleceği üzere 54 değişken 3275 gözlemden oluşmaktadır. Aynı zamanda O2’de değişkenlerin veri türü de görülmektedir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	3275 obs. of  54 variables:
 $ FIPS                           : num  0 1000 1001 1003 1005 ...
 $ State                          : chr  "US" "AL" "AL" "AL" ...
 $ Area_name                      : chr  "United States" "Alabama" "Autauga County, AL" "Baldwin County, AL" ...
 $ Rural_urban_continuum_code_2013: num  NA NA 2 3 6 1 1 6 6 3 ...
 $ Urban_influence_code_2013      : num  NA NA 2 2 6 1 1 6 6 2 ...
 $ Metro_2013                     : num  NA NA 1 1 0 1 1 0 0 1 ...
 $ Civilian_labor_force_2007      : num  1.52e+08 2.18e+06 2.44e+04 8.27e+04 1.03e+04 ...
 $ Employed_2007                  : num  1.45e+08 2.09e+06 2.36e+04 8.01e+04 9.68e+03 ...
 $ Unemployed_2007                : num  7034959 86485 806 2560 650 ...
 $ Unemployment_rate_2007         : num  4.6 4 3.3 3.1 6.3 4.1 3.2 9.4 6.2 3.9 ...
 $ Civilian_labor_force_2008      : num  1.54e+08 2.18e+06 2.47e+04 8.32e+04 1.02e+04 ...
 $ Employed_2008                  : num  1.45e+08 2.05e+06 2.34e+04 7.94e+04 9.27e+03 ...
 $ Unemployed_2008                : num  8900745 123012 1267 3851 894 ...
 $ Unemployment_rate_2008         : num  5.8 5.7 5.1 4.6 8.8 5.8 4.7 10.5 8.5 5.7 ...
 $ Civilian_labor_force_2009      : num  1.54e+08 2.16e+06 2.47e+04 8.25e+04 1.00e+04 ...
 $ Employed_2009                  : num  1.40e+08 1.92e+06 2.23e+04 7.44e+04 8.57e+03 ...
 $ Unemployed_2009                : num  14230757 238252 2402 8048 1431 ...
 $ Unemployment_rate_2009         : num  9.3 11 9.7 9.8 14.3 13.3 10 15.6 16.4 11.1 ...
 $ Civilian_labor_force_2010      : num  1.54e+08 2.20e+06 2.57e+04 8.35e+04 1.02e+04 ...
 $ Employed_2010                  : num  1.39e+08 1.96e+06 2.34e+04 7.51e+04 8.96e+03 ...
 $ Unemployed_2010                : num  14862528 231483 2282 8339 1262 ...
 $ Unemployment_rate_2010         : num  9.63 10.5 8.9 10 12.3 11.4 9.8 11.8 13.6 11.4 ...
 $ Civilian_labor_force_2011      : num  1.55e+08 2.20e+06 2.58e+04 8.50e+04 9.85e+03 ...
 $ Employed_2011                  : num  1.41e+08 1.99e+06 2.37e+04 7.74e+04 8.71e+03 ...
 $ Unemployed_2011                : num  13840507 212257 2159 7627 1137 ...
 $ Unemployment_rate_2011         : num  8.95 9.6 8.4 9 11.5 10.5 8.7 11.6 12.5 10.3 ...
 $ Civilian_labor_force_2012      : num  1.55e+08 2.18e+06 2.57e+04 8.44e+04 9.36e+03 ...
 $ Employed_2012                  : num  1.43e+08 2.00e+06 2.40e+04 7.81e+04 8.28e+03 ...
 $ Unemployed_2012                : num  12518793 173047 1779 6349 1079 ...
 $ Unemployment_rate_2012         : num  8.07 8 6.9 7.5 11.5 8.5 6.9 10.4 11.5 8.9 ...
 $ Civilian_labor_force_2013      : num  1.55e+08 2.17e+06 2.58e+04 8.53e+04 9.10e+03 ...
 $ Employed_2013                  : num  1.44e+08 2.02e+06 2.42e+04 7.96e+04 8.17e+03 ...
 $ Unemployed_2013                : num  11467541 156957 1605 5654 931 ...
 $ Unemployment_rate_2013         : num  7.38 7.2 6.2 6.6 10.2 7.9 6.3 9.4 10.3 8.8 ...
 $ Civilian_labor_force_2014      : num  1.56e+08 2.16e+06 2.56e+04 8.64e+04 8.84e+03 ...
 $ Employed_2014                  : num  1.46e+08 2.01e+06 2.41e+04 8.11e+04 7.91e+03 ...
 $ Unemployed_2014                : num  9618992 146552 1495 5301 932 ...
 $ Unemployment_rate_2014         : num  6.17 6.8 5.8 6.1 10.5 7.2 6.1 8.8 8.6 8 ...
 $ Civilian_labor_force_2015      : num  1.57e+08 2.16e+06 2.56e+04 8.77e+04 8.61e+03 ...
 $ Employed_2015                  : num  1.49e+08 2.03e+06 2.43e+04 8.29e+04 7.85e+03 ...
 $ Unemployed_2015                : num  8287559 131395 1330 4859 765 ...
 $ Unemployment_rate_2015         : num  5.28 6.1 5.2 5.5 8.9 6.6 5.4 7.9 7.6 7 ...
 $ Civilian_labor_force_2016      : num  1.59e+08 2.18e+06 2.60e+04 9.07e+04 8.42e+03 ...
 $ Employed_2016                  : num  1.51e+08 2.05e+06 2.46e+04 8.58e+04 7.72e+03 ...
 $ Unemployed_2016                : num  7727644 127238 1321 4831 700 ...
 $ Unemployment_rate_2016         : num  4.87 5.8 5.1 5.3 8.3 6.4 5.4 6.8 6.9 6.5 ...
 $ Civilian_labor_force_2017      : num  1.60e+08 2.18e+06 2.60e+04 9.21e+04 8.32e+03 ...
 $ Employed_2017                  : num  1.53e+08 2.08e+06 2.50e+04 8.83e+04 7.83e+03 ...
 $ Unemployed_2017                : num  6980076 96567 1014 3748 486 ...
 $ Unemployment_rate_2017         : num  4.36 4.4 3.9 4.1 5.8 4.4 4 4.9 5.5 5 ...
 $ Civilian_labor_force_2018      : num  1.62e+08 2.20e+06 2.60e+04 9.38e+04 8.37e+03 ...
 $ Employed_2018                  : num  1.55e+08 2.11e+06 2.50e+04 9.05e+04 7.94e+03 ...
 $ Unemployed_2018                : num  6296445 86490 942 3393 433 ...
 $ Unemployment_rate_2018         : num  3.9 3.9 3.6 3.6 5.2 4 3.5 4.7 4.8 4.7 ...

Eksik Verilerin (Missing Data: NA) Veri Setinden Çıkarılması: Output 3 (O3)

O3’te eksik veriler veri setinden çıkarılarak gözlem sayısı yeniden güncellenmiştir. Yeni durumda veri setindeki gözlem sayısı 3275’ten 3214’e düşmüştür.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	3214 obs. of  54 variables:
 $ FIPS                           : num  1001 1003 1005 1007 1009 ...
 $ State                          : chr  "AL" "AL" "AL" "AL" ...
 $ Area_name                      : chr  "Autauga County, AL" "Baldwin County, AL" "Barbour County, AL" "Bibb County, AL" ...
 $ Rural_urban_continuum_code_2013: num  2 3 6 1 1 6 6 3 6 6 ...
 $ Urban_influence_code_2013      : num  2 2 6 1 1 6 6 2 5 6 ...
 $ Metro_2013                     : num  1 1 0 1 1 0 0 1 0 0 ...
 $ Civilian_labor_force_2007      : num  24383 82659 10334 8791 26629 ...
 $ Employed_2007                  : num  23577 80099 9684 8432 25780 ...
 $ Unemployed_2007                : num  806 2560 650 359 849 ...
 $ Unemployment_rate_2007         : num  3.3 3.1 6.3 4.1 3.2 9.4 6.2 3.9 6.5 4.2 ...
 $ Civilian_labor_force_2008      : num  24687 83223 10161 8749 26698 ...
 $ Employed_2008                  : num  23420 79372 9267 8241 25453 ...
 $ Unemployed_2008                : num  1267 3851 894 508 1245 ...
 $ Unemployment_rate_2008         : num  5.1 4.6 8.8 5.8 4.7 10.5 8.5 5.7 14.4 5.7 ...
 $ Civilian_labor_force_2009      : num  24703 82451 10003 8742 26480 ...
 $ Employed_2009                  : num  22301 74403 8572 7581 23832 ...
 $ Unemployed_2009                : num  2402 8048 1431 1161 2648 ...
 $ Unemployment_rate_2009         : num  9.7 9.8 14.3 13.3 10 15.6 16.4 11.1 19.6 11.7 ...
 $ Civilian_labor_force_2010      : num  25713 83459 10221 8934 24906 ...
 $ Employed_2010                  : num  23431 75120 8959 7914 22460 ...
 $ Unemployed_2010                : num  2282 8339 1262 1020 2446 ...
 $ Unemployment_rate_2010         : num  8.9 10 12.3 11.4 9.8 11.8 13.6 11.4 14.9 10.6 ...
 $ Civilian_labor_force_2011      : num  25836 85045 9849 8933 25123 ...
 $ Employed_2011                  : num  23677 77418 8712 7996 22939 ...
 $ Unemployed_2011                : num  2159 7627 1137 937 2184 ...
 $ Unemployment_rate_2011         : num  8.4 9 11.5 10.5 8.7 11.6 12.5 10.3 12 9.7 ...
 $ Civilian_labor_force_2012      : num  25740 84414 9362 8798 24960 ...
 $ Employed_2012                  : num  23961 78065 8283 8047 23244 ...
 $ Unemployed_2012                : num  1779 6349 1079 751 1716 ...
 $ Unemployment_rate_2012         : num  6.9 7.5 11.5 8.5 6.9 10.4 11.5 8.9 9.9 8 ...
 $ Civilian_labor_force_2013      : num  25810 85280 9099 8705 24887 ...
 $ Employed_2013                  : num  24205 79626 8168 8016 23325 ...
 $ Unemployed_2013                : num  1605 5654 931 689 1562 ...
 $ Unemployment_rate_2013         : num  6.2 6.6 10.2 7.9 6.3 9.4 10.3 8.8 8 6.6 ...
 $ Civilian_labor_force_2014      : num  25592 86384 8845 8559 24527 ...
 $ Employed_2014                  : num  24097 81083 7913 7942 23023 ...
 $ Unemployed_2014                : num  1495 5301 932 617 1504 ...
 $ Unemployment_rate_2014         : num  5.8 6.1 10.5 7.2 6.1 8.8 8.6 8 6.7 5.8 ...
 $ Civilian_labor_force_2015      : num  25613 87741 8613 8576 24485 ...
 $ Employed_2015                  : num  24283 82882 7848 8009 23163 ...
 $ Unemployed_2015                : num  1330 4859 765 567 1322 ...
 $ Unemployment_rate_2015         : num  5.2 5.5 8.9 6.6 5.4 7.9 7.6 7 6 5.4 ...
 $ Civilian_labor_force_2016      : num  25966 90670 8417 8623 24623 ...
 $ Employed_2016                  : num  24645 85839 7717 8067 23298 ...
 $ Unemployed_2016                : num  1321 4831 700 556 1325 ...
 $ Unemployment_rate_2016         : num  5.1 5.3 8.3 6.4 5.4 6.8 6.9 6.5 5.5 5 ...
 $ Civilian_labor_force_2017      : num  25972 92090 8317 8550 24725 ...
 $ Employed_2017                  : num  24958 88342 7831 8174 23726 ...
 $ Unemployed_2017                : num  1014 3748 486 376 999 ...
 $ Unemployment_rate_2017         : num  3.9 4.1 5.8 4.4 4 4.9 5.5 5 4.1 4.1 ...
 $ Civilian_labor_force_2018      : num  25957 93849 8373 8661 25006 ...
 $ Employed_2018                  : num  25015 90456 7940 8317 24128 ...
 $ Unemployed_2018                : num  942 3393 433 344 878 ...
 $ Unemployment_rate_2018         : num  3.6 3.6 5.2 4 3.5 4.7 4.8 4.7 3.9 3.6 ...

2018 Veri Setindeki Değişkenlerin Tanımlayıcı İstatistikleri: Output (O4)

 Civilian_labor_force_2018 Employed_2018     Unemployed_2018    Unemployment_rate_2018
 Min.   :    102           Min.   :     98   Min.   :     4.0   Min.   : 1.300        
 1st Qu.:   4961           1st Qu.:   4730   1st Qu.:   208.0   1st Qu.: 3.100        
 Median :  11423           Median :  10962   Median :   496.5   Median : 3.900        
 Mean   :  50628           Mean   :  48638   Mean   :  1989.8   Mean   : 4.294        
 3rd Qu.:  31052           3rd Qu.:  29739   3rd Qu.:  1288.8   3rd Qu.: 4.900        
 Max.   :5136341           Max.   :4896512   Max.   :239829.0   Max.   :19.900    

2018 Veri Setindeki Değişkenlerin Adlarının Değiştirilmesi: Output (O4)

[1] "Labor_Force"       "Employed"          "Unemployed"        "Unemployment_Rate"

2018 Veri Setindeki İlk 6 Satır: Output (O5)

Labor_Force Employed Unemployed Unemployment_Rate
25957	25015	942	3.6	
93849	90456	3393	3.6	
8373	7940	433	5.2	
8661	8317	344	4.0	
25006	24128	878	3.5	
4776	4552	224	4.7	

2018 Veri Setindeki İşsizlik Oranı Değişkeninin Kategorize Edilmesi : Output (O7)

2018 yılı veri setindeki işsizlik oranı (unemployment rate) değişkeni “Low”, “Middle”, “High” ve “Very High” olarak kategorize edilerek tanımlayıcı istatistikleri aşağıda verilmiştir.

df_20 
       n  missing distinct 
    3214        0        4 
                                                  
Value            Low    Middle      High Very High
Frequency       2856       304        43        11
Proportion     0.889     0.095     0.013     0.003

2018 Veri Setinin Revizyonlardan Sonraki İlk 6 Satırı: Output (O8)

R Kod Bloğu 3 (R3)

R3’nin çalıştırılması ile sırasıyla;

  1. Değişkenler arasındaki ilişkiler işsizlik oranı sınıflandırılması temelinde log dönüşümü de uygulanarak karşılaştırmalı olarak çoklu saçılım grafikleriyle verilmiştir.
#Yüklü değilse indiriniz: install.packages("tidyverse")
##Yüklü değilse indiriniz: install.packages("ggplot2")
library(ggplot2)

#Yüklü değilse indiriniz: install.packages("ggpubr")
library(ggpubr)

#Değişkenler arasındaki ilişkiler işsizlik oranı sınıflandırılması temelinde çoklu saçılım grafiklerle verilmiştir.
v1<-t10%>%ggplot(aes(x=Labor_Force, y=Employment, color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))


v2<-t10%>%ggplot(aes(x=log(Labor_Force), y=log(Employment), color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

ggarrange(v1, v2, ncol = 1, nrow = 2, common.legend = TRUE)

v3<-t10%>%ggplot(aes(x=Labor_Force, y=Unemployment, color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

v4<-t10%>%ggplot(aes(x=log(Labor_Force), y=log(Unemployment), color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

ggarrange(v3, v4, ncol = 1, nrow = 2, common.legend = TRUE)

v5<-t10%>%ggplot(aes(x=Employment, y=Unemployment, color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

v6<-t10%>%ggplot(aes(x=log(Employment), y=log(Unemployment), color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

ggarrange(v5, v6, ncol = 1, nrow = 2, common.legend = TRUE)

Değişkenler Arasındaki İlişkilerin Çoklu Saçılım Grafiklerle Gösterimi: Output (O9)

R Kod Bloğu 4 (R4)

R4’ün çalıştırılması ile sırasıyla;

  1. Değişkenler arasındaki ilişkiler işsizlik oranı sınıflandırılması temelinde log dönüşümü de uygulanarak karşılaştırmalı olarak çoklu saçılım grafiklerle R3’tekine alternatif olarak verilmiştir.
#Ayrıksı eksenler oluşturarak çoklu saçılım grafikleri oluşturma

v11<-t10%>%ggplot(aes(x=Labor_Force, y=Employment, color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v11

v12<-t10%>%ggplot(aes(x=log(Labor_Force), y=log(Employment), color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v12

v13<-t10%>%ggplot(aes(x=Labor_Force, y=Unemployment, color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v13


v14<-t10%>%ggplot(aes(x=log(Labor_Force), y=log(Unemployment), color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v14

v15<-t10%>%ggplot(aes(x=Employment, y=Unemployment, color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v15

v16<-t10%>%ggplot(aes(x=log(Employment), y=log(Unemployment), color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v16

Değişkenler Arasındaki İlişkilerin Çoklu Saçılım Grafiklerle Alternatif Gösterimi: Output (O10)

Genel olarak R3 ve R4 kod bloklarının çalıştırılmasıyla elde edilen saçılım grafiklerden değişken veri setlerine logaritmik (log) dönüşüm uygulandığında değişkenler arasında pozitif korelasyon olduğu görülmektedir.

Buraya kadar yapılan işlemlerde daha çok veriyi online bir kaynaktan okuma, verinin temizlenmesi ve değişkenler arasındaki ilişkilerin gösterimi adı altında veri madenciliği işlemleri yapılmıştır. Burada veri madenciliği konu alanı altında pek çok diğer işlem de yapılabilir. Bu durum verinin türüne, kaynağına, analizin ve araştırmanın amacına göre farklılık göstermektedir. Bu aşamadan sonra ise analize uygun hale getirilen veri yine veri madenciliği algoritmalarından olan karar ağacı algoritması kullanılarak analiz edilecektir.

R Kod Bloğu 5 (R5): Karar Ağacı Oluşturma-1

R5’in çalıştırılmasıyla;

  1. Veri seti basit tesadüfi örneklem çekilerek eğitilecek ve test edilecek veri setine ayrılır. Daha sonra veri setindeki “Classification” değişkeni hedef değişken belirlenerek modele sokulmuştur. Elde edilen sonuçlar karar ağacında görselleştirildikten sonra hata ve doğruluk oranları verilmiştir.
library(DMwR2)#Karar ağacı kütüphanesini yüklemek için
set.seed(1923)
n=NROW(t10)#veri setindeki satır sayısı
SRS <- sample(sample(1:n, size = round(0.7*n), replace=FALSE))#veri setinden basit tesadüfi örneklem çekilerek eğitilecek veri seti ve test setine ayırmak için
training <- t10[SRS, ]#eğitilecek veri seti
test <- t10[-SRS, ]#test edilecek veri seti
model <- rpartXse(Classification ~ ., training, se=0.5)

pred1 <- predict(model, test, type="class")
head(pred1)

library(rpart.plot)#karar ağacının görselleştirilmesi için
prp(model, type=0, extra=101)

(cm <- table(pred1, test$Classification))

error_rate<-100*(1-sum(diag(cm))/sum(cm))

print(paste('Error Rate is %', round(error_rate))) # the error rate (hata oranı)
accuracy_test <- sum(diag(cm)) / sum(cm)
print(paste('Accuracy for test is %', 100*accuracy_test))#Accuracy rate(doğruluk oranı)

Kurulan modele ilişkin karar ağacı aşağıdaki gibidir.

Modele ilişkin hata oranı (error rate) ve doğruluk oranı (accuracy rate) aşağıda verilmiştir. Kurulan model % 5 hata oranı (error rate) ve % 95 doğruluk oranı (accuracy rate) ise hedef değişkeni tahmin etmiştir.

pred1       Low Middle High Very High
  Low       845     25    0         0
  Middle      9     67    5         1
  High        0      1    7         3
  Very High   0      0    0         1
[1] "Error Rate is % 5"
[1] "Accuracy for test is % 95"

R Kod Bloğu 6 (R6): Karar Ağacı Oluşturma2

R6’nın çalıştırılmasıyla;

  1. Veri seti basit tesadüfi örneklem çekilerek eğitilecek ve test edilecek veri setine ayrılır. Daha sonra veri setindeki “Classification” değişkeni hedef değişken belirlenerek numerik değişkenlere logaritmik (log) dönüşüm uygulanarak modele sokulmuştur. Elde edilen sonuçlar karar ağacında görselleştirildikten sonra hata ve doğruluk oranları verilmiştir.
lf<-log(t10$Labor_Force)
e<-log(t10$Employment)
u<-log(t10$Unemployment)
t11<-tibble(Labor_Force=lf, Employment=e, Unemployment=u, Classification=t10$Classification)

set.seed(1071)
n=NROW(t11)#veri setindeki satır sayısı
SRS <- sample(sample(1:n, size = round(0.7*n), replace=FALSE))#veri setinden basit tesadüfi örneklem çekilerek eğitilecek veri seti ve test setine ayırmak için
training <- t11[SRS, ]#eğitilecek veri seti
test <- t11[-SRS, ]#test edilecek veri seti
model <- rpartXse(Classification ~ ., training, se=0.5)

pred1 <- predict(model, test, type="class")
head(pred1)

library(rpart.plot)#karar ağacının görselleştirilmesi için
prp(model, type=0, extra=101)

(cm <- table(pred1, test$Classification))

error_rate<-100*(1-sum(diag(cm))/sum(cm))

print(paste('Error Rate is %', round(error_rate))) # the error rate (hata oranı)
accuracy_test <- sum(diag(cm)) / sum(cm)
print(paste('Accuracy for test is %', 100*accuracy_test))#Accuracy rate(doğruluk oranı)

Log dönüşümü uygulanarak kurulan modele ilişkin karar ağacı aşağıdaki gibidir.

Log dönüşümü uygulandıktan sonra modele ilişkin hata oranı (error rate) ve doğruluk oranı (accuracy rate) aşağıda verilmiştir. Kurulan model % 5 hata oranı (error rate) ve % 95 doğruluk oranı (accuracy rate) hedef değişkeni tahmin etmiştir. Elde edilen sonuçlar log dönüşümü uygulanmadan önceki elde edilen sonuçlarla aynıdır.

pred1       Low Middle High Very High
  Low       849     24    0         0
  Middle     14     60    3         0
  High        0      3    9         0
  Very High   0      0    1         1
[1] "Error Rate is % 5"
[1] "Accuracy for test is % 95"

R Kod Bloğu 7 (R7): Karar Ağacı Oluşturma3

R7’nin çalıştırılmasıyla;

  1. Veri seti basit tesadüfi örneklem çekilerek eğitilecek ve test edilecek veri setine ayrılır. Daha sonra veri setindeki “Classification” değişkeni hedef değişken belirlenerek numerik değişkenler normalize edilerek modele sokulmuştur. Elde edilen sonuçlar karar ağacında görselleştirildikten sonra hata ve doğruluk oranları verilmiştir.
lf<-scale(t10$Labor_Force)
e<-scale(t10$Employment)
u<-scale(t10$Unemployment)
t12<-tibble(Labor_Force=lf, Employment=e, Unemployment=u, Classification=t10$Classification)

set.seed(1331)
n=NROW(t12)
SRS <- sample(sample(1:n, size = round(0.7*n), replace=FALSE))#veri setinden basit tesadüfi örneklem çekilerek eğitilecek veri seti ve test setine ayırmak için
training <- t12[SRS, ]#eğitilecek veri seti
test <- t12[-SRS, ]#test edilecek veri seti
model <- rpartXse(Classification ~ ., training, se=0.5)

pred1 <- predict(model, test, type="class")
head(pred1)

library(rpart.plot)#karar ağacının görselleştirilmesi için
prp(model, type=0, extra=101)

(cm <- table(pred1, test$Classification))

error_rate<-100*(1-sum(diag(cm))/sum(cm))

print(paste('Error Rate is %', round(error_rate))) # the error rate (hata oranı)
accuracy_test <- sum(diag(cm)) / sum(cm)
print(paste('Accuracy for test is %', 100*accuracy_test))#Accuracy rate(doğruluk oranı)

Veri seti normalize edilerek kurulan modele ilişkin karar ağacı aşağıdaki gibidir.

Veri seti normalize edildikten sonra modele ilişkin hata oranı (error rate) ve doğruluk oranı (accuracy rate) aşağıda verilmiştir. Kurulan model % 5 hata oranı (error rate) ve % 95 doğruluk oranı (accuracy rate) ile hedef değişkeni tahmin etmiştir. Elde edilen sonuçlar önceki sonuçlarla aynıdır.

pred1       Low Middle High Very High
  Low       850     23    0         0
  Middle     13     63    6         2
  High        0      0    4         3
  Very High   0      0    0         0
[1] "Error Rate is % 5"
[1] "Accuracy for test is % 95"

R Kod Bloğu 8 (R8): Karar Ağacı Oluşturma-4

R8’in çalıştırılmasıyla;

  1. İlk olarak “Classification” değişkenine temel oluşturan işssizlik oranı (unemployment rate) değişkeni ve bağımlı değişkenlerin logaritmik dönüşümü yapılmıştır. Daha sonra veri seti basit tesadüfi örneklem çekilerek eğitilecek ve test edilecek veri setine ayrılmıştır. Elde edilen sonuçlar karar ağacında görselleştirildikten sonra hata ve doğruluk oranları verilmiştir.
df_20_log<-cut(log(df2$Unemployment_Rate), breaks = 4, labels = c("Low", "Middle", "High", "Very High"))

t_log<-tibble(Labor_Force=log(df2$Labor_Force), Employment=log(df2$Employed), Unemployment=log(df2$Unemployed), Classification=df_20_log)

set.seed(2001)
n=NROW(t_log)
SRS <- sample(sample(1:n, size = round(0.7*n), replace=FALSE))
training <- t_log[SRS, ]
test <- t_log[-SRS, ]
model <- rpartXse(Classification ~ ., training, se=0.5)

pred1 <- predict(model, test, type="class")
head(pred1)

library(rpart.plot)#karar ağacının görselleştirilmesi için
prp(model, type=0, extra=101)

(cm <- table(pred1, test$Classification))

error_rate<-100*(1-sum(diag(cm))/sum(cm))

print(paste('Error Rate is %', round(error_rate))) # the error rate (hata oranı)
accuracy_test <- sum(diag(cm)) / sum(cm)
print(paste('Accuracy for test is %', 100*accuracy_test))#Accuracy rate(doğruluk oranı)

Veri setindeki değişkenlerin tamamına logaritmik (log) dönüşüm uygulandıktan sonra kurulan modele ilişkin karar ağacı aşağıdaki gibidir.

Veri setinin tamanına log dönüşümü uygulandıktan sonra modele ilişkin hata oranı (error rate) ve doğruluk oranı (accuracy rate) aşağıda verilmiştir. Kurulan model % 10 hata oranı (error rate) ve % 90 doğruluk oranı (accuracy rate) ile hedef değişkeni tahmin etmiştir.

pred1       Low Middle High Very High
  Low        62     15    0         0
  Middle     29    647   27         0
  High        0     14  153         8
  Very High   0      0    1         8
[1] "Error Rate is % 10"
[1] "Accuracy for test is % 90"

Yapılan işlemlerden sonra örneklem seçimi ile elde edilen en düşük CP (Complexity Paramater) değeri ile yeni model inşa edilir. Daha sonra aşırı öğrenme (overfitting) ve eksik öğrenmeyi (underfitting) önlemek için ağaç budama (pruning) işlemi yapılarak karar ağacı sonlandırılır.

Örnek uygulama kapsamında yukarıda kurulan modeller diğer makine öğrenme ve derin öğrenme yöntemleri ile de analiz edilerek elde edilen sonuçlar kıyaslanarak buradaki problemin çözümünde en iyi yöntem belirlenebilir.

Faydalı olması ve farkındalık oluşturulması dileğiyle.

Saygılarımla.

Yararlanılan Kaynaklar

cs229-notes-dt.pdf erişimi için tıklayın

https://www.ers.usda.gov/data-products/county-level-data-sets/download-data/

https://www.r-project.org/

https://www.python-course.eu/Decision_Trees.php

https://tevfikbulut.com/2019/12/03/web-uzerindeki-verinin-kesifsel-analizine-yonelik-bir-vaka-calismasi-a-case-study-for-exploratory-analysis-of-data-on-the-web/

Medium.com adresinde görüntüleyin

https://www.guru99.com/

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s