R Programlama Diliyle Regresyon Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Regression Problems with R Programming Language

Giriş

Rastgele Orman (RF) algoritması , 2001 yılında Breiman tarafından karar ağaçlarının bir kombinasyonu olarak önerilmiştir. RF en iyi “her ağaç, bağımsız olarak örneklenen ve ormandaki tüm ağaçlar için aynı dağılıma sahip rastgele bir vektörün değerlerine bağlı olacak şekilde ağaç belirleyicilerinin kombinasyonu” olarak tanımlanan bir topluluk makine öğrenme algoritmasıdır. Topluluk algoritması gerek regresyon gerekse sınıflandırma problemlerinde varyansı ve hatayı azaltarak daha iyi hedef değişken veya bağımlı değişkeni tahmin etmemize olanak tanır. Bunu da yeniden örnekleme yöntemi (bootstrap aggregation or bagging)’yle yapar. Bu yöntemde sırasıyla tesadüfi tekrarlı örneklem yöntemi (simple random sampling with replacement) kullanılarak veri seti alt örneklem kümelerine, diğer bir ifade ile alt örneklem ağaç kümelerine ayrılır. Bunların tamamı kurulan modelde hatayı azaltmaya yöneliktir. Anlatılanı Şekil 1 üzerinde gösterelim. Şekilde modellerin paralel düzende inşa edildiğine dikkat etmek gerekir. Modellerin oluşturulmasında çaprazlama bulunmamaktadır.

Şekil 1: Rastgele Orman Algoritmasında Yeniden Örnekleme (Bootstrapping)

RF, karar ağaçlarına dayanır. Makine öğreniminde karar ağaçları, tahmin modelleri oluşturan denetimli öğrenme tekniğidir. Bunlara karar ağaçları (decision trees) adı verilmektedir. Bu yöntemin özellikle mühendislik bilimlerinde başta sağlık sektörü olmak üzere pek çok sektörde yaygın bir şekilde kullanıldığı görülmektedir.

Rastgele orman algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan makine öğrenmenin denetimli öğrenme (supervised) kısmında yer alan tahmin oranı yüksek algoritmalardır. Burada aslında sınıflandırma ve regresyondan kasıt tahmin edilecek bağımlı veya hedef değişkenin veri tipi ifade edilmektedir. Sınıflandırma ve regresyon için kullanılan veri tipleri Şekil 2’de sunulmuştur. Cevap değişkeni ya da bağımlı değişken kategorik ise rastgele orman algoritmasında sınıflandırma, bağımlı değişken nicel ise rastgele orman algoritmasında regresyon problemini çözmüş oluyoruz. RF analizlerde uç değerler (outliers)’e duyarlı değildir.

Şekil 2: Rastgele Orman (RF) Algoritmasında Proplem Sınıfına Göre Veri Tüleri

RF’te kurulan modelin veya modellerin performansını değerlendirmede kullanılan hata metrikleri ise genel itibariyle Şekil 3’te verilmiştir. Şekil 3’te yer verilen hata metrikleri gerek makine öğrenme gerekse derin öğrenme modellerinin performansının testinde sıklıkla kullanılmaktadır.

Şekil 3: Rastgele Orman Algoritması Hata Metrikleri

Şekil 3’te sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini şimdi de ele alalım. Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris sınıflandırma problemlerinin çözümünde hata metriklerini ortaya koyarak kurulan modelin veya modellerin hata oranını değerlendirmektedir. Hata matrisinin makine ve derin öğrenme metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Aşağıda yer alan tabloda hata metriklerinin hesaplanmasına esas teşkil eden tablo verilmiştir. Bu tabloyla sınıflandırma hataları hesaplanabilmektedir. Tabloda yer verilen Tip 1 hata (Type 1 error) istatistikte alfa hatasını göstermektedir. Tip 1 hata H0 hipotezi (null hpypothesis) doğru olduğu halde reddedilmesidir. Tabloda Tip 2 hata (Type II error) olarak adlandırılan hata ise istatistikte Beta hatası olarak da bilinmektedir. Tip 2 hata ise H0 hipotezi (null hpypothesis) yanlış olduğu halde kabul edilmesidir.

Kaynak: Stanford Üniversitesi

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki metriklerden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language

Sınıflandırma Metrikleri

  • Doğruluk (Accuracy): TP+TN / TP+TN+FP+FN eşitliği ile hesaplanır. Modelin genel performansını ortaya koyar. Bu sınıflandırma metriği ile aslında biz informal bir şekilde dile getirirsek doğru tahminlerin toplam tahminler içindeki oranını hesaplamış oluyoruz.
  • Kesinlik (Precision): TP / TP+FP eşitliği ile hesaplanır. Doğru tahminlerin ne kadar kesin olduğunu gösterir.
  • Geri çağırma (Recall)TP / TP+FN eşitliği ile hesaplanır. Gerçek pozitif örneklerin oranını verir.
  • Özgünlük (Specificity): TN / TN+FP eşitliği ile hesaplanır. Gerçek negatif örneklerin oranını gösterir.
  • F1 skoru : 2TP / 2TP+FP+FN eşitliği ile hesaplanır. Dengesiz sınıflar için yararlı hibrit bir metrik olup, kesinlik (precision) ve geri çağırma (recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.
  • ROC (Receiver operating characteristic): Yukarıda karışıklık matrisinde belirtilen parametrelerden yararlanılarak hesaplanır. ROC eğrisi olarak da adlandırılmaktadır. ROC eğrileri, herhangi bir tahmin modelinin doğru pozitifler (TP) ve negatifler (TN) arasında nasıl ayrım yapabileceğini görmenin güzel bir yoludur. Sınıflandırma modellerin perfomansını eşik değerler üzerinden hesaplar. ROC iki parametre üzerinden hesaplanır. Doğru Pozitiflerin Oranı (TPR) ve Yanlış Pozitiflerin Oranı (FPR) bu iki parametreyi ifade eder. Burada aslında biz TPR ile Geri Çağırma (Recall), FPR ile ise 1-Özgünlük (Specificity)‘ü belirtiyoruz.
  • Cohen Kappa: Kategorik cevap seçenekleri arasındaki tutarlılığı ve uyumu gösterir. Cohen, Kappa sonucunun şu şekilde yorumlanmasını önermiştir: ≤ 0 değeri uyumun olmadığını, 0,01–0,20 çok az uyumu, 0,21-0,40 az uyumu, 0,41-0,60 orta, 0,61-0,80 iyi uyumu ve 0,81–1,00 çok iyi uyumu göstermektedir. 1 değeri ise mükemmel uyum anlamına gelmektedir.

Şekil 3’te yer verilen regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki metriklerden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eştiliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.

Regresyon Metrikleri

  • SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
  • MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
  • RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
  • MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
  • MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
  • Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.

Regresyon metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Metodoloji ve Uygulama Sonuçları

Bu kısımda kullanılan veri setine ve adım adım Rastgele Orman algoritmasının regresyon problemlerinin çözümünde nasıl uygulandığına yer verilmiştir. Analizde R programlama dili kullanılmıştır. Uygulamaya esas veri seti Amerikan Ulusal Ekonomik Araştırmalar Bürosu (the National Bureau of Economic Research) kısa adıyla NBER’in resmi web sitesinden alınmıştır. Web sitesinin linki: https://data.nber.org/ dir. Veri setinin alındığı linkin tam adı ise http://data.nber.org/nberces/nberces5811/naics5811.xls dir.

Veri seti 1958’den 2011’e kadar ABD imalat sektöründeki katma değer ve toplam faktör verimliliği (TFV) göstergelerinden oluşan zengin ve hacmi geniş bir veri setidir. Orjinal (ingilizce) xlsx uzantılı veri setini aşağıdaki linkten indirebilirsiniz. Veri setindeki toplam gözlem sayısı 25542, değişken sayısı ise 25’tir.

R’da analize uygun hale getirdiğim aynı veri setinin Türkçe versiyonunu ise aşağıdaki linkten indirebilirsiniz. Veri setinin Türkçeye çevrilmesinin nedeni anlaşılırlığın artırılmak istenmesidir.

Veri seti “sira” hariç 8 değişkenden oluşmakta olup, anlaşılırlığı artırmak adına Türkçeye çevrilmiştir. Değişkenlerin tamamının veri türü nicel ve sürekli olup orjinal (ingilizce) adlarıyla birlikte aşağıda verilmiştir:

  1. tistihdam: Toplam istihdamı göstermekte olup, orjinal veri setindeki adı “emp” dir. İstihdam değerleri 1000’e bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  2. maas: Sektör çalışanlarının maaşlarını göstermekte olup, orjinal veri setindeki adı “pay” dir. Maaş değerleri 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  3. iistihdam: Üretim bandında çalışanların sayısını göstermekte olup, orjinal veri setindeki adı “prode” dur. Çalışan sayısı değerleri 1000’e bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  4. icsaati: Üretim bandında çalışanların çalışma saatlerini göstermekte olup, orjinal veri setindeki adı “prodeh” dır. Çalışma saatleri 1 milyona bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  5. sbu: Üretim bandında çalışanların ücretlerini göstermekte olup, orjinal veri setindeki adı “prodew” dır. Çalışma ücretleri 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  6. netsatis: Ne satışları göstermekte olup, orjinal veri setindeki adı “vship” tir. Net satışlar 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  7. mmaliyeti: Malzeme maliyetlerini göstermekte olup, orjinal veri setindeki adı “matcost” tur. Maliyetler 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  8. katmadeger: Katma değeri göstermekte olup, orjinal veri setindeki adı “vadd” tir. Katma değer 1 milyon $’a bölünerek verilmiştir. Bağımlı / hedef değişken (target variable) olarak alınmıştır.

Çalışmanın amacı yukarıda belirtilen bağımsız değişkenler ile bağımlı değişken olan “katmadeger” değişkenini tahmin etmektir.

Metodoloji ve uygulama sonuçları başlığı altında Rastgele Orman algoritmasına üzerine kurulan modeller olabilecek en yalın şekilde karşılaştırmalı olarak ele alınmaya çalışılmıştır. Daha sonra kurulan bu modeller hata metrikleri açısından karşılaştırılmıştır.

Analize başlamadan önce analiz için yüklenecek R kütüphaneleri verelim. Ardından keşifsel veri analizi (EDA) ile veri setini tanıyalım.

Yüklenecek kütüphaneler

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","randomForest", "aod", "DescTools", "ggpurr","psych","writexl","ggfortify", "caret","Metrics", "performanceEstimation", "yardstick","MASS")

sapply(kütüphaneler, require, character.only = TRUE)

Veri setinin kaynak web sitesinden okunması

url <- "http://data.nber.org/nberces/nberces5811/naics5811.xls"
dosyaadi <- "naics5811.xls"
curl::curl_download(url, dosyaadi)
veri <- read_excel(dosyaadi)
veri

Veri setinin Türkçeye dönüştürülmesi ve analiz değişkenlerinin belirlenmesi

df<-veri[,3:10] %>% as_tibble() %>% rename(tistihdam=emp, maas=pay, iistihdam=prode, icsaati=prodh, sbu=prodw, netsatis=vship, mmaliyeti=matcost, katmadeger=vadd) %>% rowid_to_column() %>% rename(sira=rowid)
df

Veri setindeki eksik gözlemlerin (Missing Data: NA) tespit edilmesi ve veri setinden çıkarılması

#Eksik gözlemlerin (NAs) sayısının değişkene göre belirlenmesi
nan<-sapply(df, function(x) sum(is.na(x))) %>% as_tibble()
nan<-cbind(Değişken=names(df), n=nan) %>% as_tibble()
formattable(nan)

#Eksik gözlemlerin (NAs) veri setinden çıkarılması
df1<-na.omit(df)
nan1<-sapply(df1, function(x) sum(is.na(x))) %>% as_tibble()
nan1<-cbind(Değişken=names(df), n=nan1) %>% as_tibble()
formattable(nan1)

#ilk 10 kayıt
formattable(head(df1, 10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setinde değişkenlere göre belirlenen eksik veri (NA) diğer bir ifadeyle eksik gözlem sayısı aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setinde değişkenlere göre belirlenen eksik gözlemler veri setinden çıkarılmış olup aşağıdaki tabloda son durumda veri setindeki eksik gözlem sayıları gösterilmiştir.

Veri setinin xlsx dosyasına yazdırılması

İhtiyaç duymanız halinde fonksiyonu ile birlikte eksik gözlemler (NAs)’den arındırılmış veri seti aşağıdaki kod yardımıyla xlsx uzantılı olarak excel dosyasına yazdırılmıştır.

writexl::write_xlsx(df1, "verisetiturkcekayipsizveri.xlsx")

Yukarıdaki R kod bloğunun çalıştırılması ile edilen veri seti dosyası xlsx uzantılı olarak aşağıda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setinin ilk 10 satırı aşağıda verilmiştir.

Veri setindeki değişkenlerin özellikleri

str(df1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki değişkenlerin veri tipleri, gözlem sayılarıyla birlikte aşağıda verilmiştir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	25386 obs. of  9 variables:
 $ sira      : int  1 2 3 4 5 6 7 8 9 10 ...
 $ tistihdam : num  18 17.9 17.7 17.5 17.6 17.1 16.6 16 16.1 16.7 ...
 $ maas      : num  81.3 82.5 84.8 87.4 90.2 89.8 90.8 90.8 96.1 105 ...
 $ iistihdam : num  12 11.8 11.7 11.5 11.5 11 10.6 10.2 10.2 11 ...
 $ icsaati   : num  25.7 25.5 25.4 25.4 25.2 23.9 23.5 22.7 22.6 23.9 ...
 $ sbu       : num  49.8 49.4 50 51.4 52.1 52.1 52.2 51.8 53.9 61.3 ...
 $ netsatis  : num  1042 1051 1050 1120 1176 ...
 $ mmaliyeti : num  752 759 753 804 853 ...
 $ katmadeger: num  267 269 270 288 294 ...
 - attr(*, "na.action")= 'omit' Named int  1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 ...
  ..- attr(*, "names")= chr  "1729" "1730" "1731" "1732" ...

Tanımlayıcı istatistikler

ti<-describe(df1[,-1])
formattable(tibble(Değişken=names(df1[,-1]), Aralık=ti$range, Ort=ti$mean, Medyan=ti$median, Ssapma=ti$sd, Carpıklık=ti$skew, Basıklık=ti$kurtosis) %>% mutate_if(is.numeric, round, 1))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen tanımlayıcı istatistikler aşağıdaki tabloda verilmiştir.

Değişkenler arasındaki korelasyon

Nicel ve sürekli değişkenlerin korelasyon katsayılarını hesaplamak için Pearson korelasyon katsayısı kullanılmış olup, yazılan R kod bloğu aşağıdadır.

com<-round(cor(df1[,-1]), 1)
com<-cbind(Değisken=names(df[,-1]), com) %>% as_tibble()
formattable(com)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen korelasyon katsayıları aşağıdaki tabloda verilmiştir.

Veri setinin eğitilecek veri ve test setine ayrılması

set.seed(1919)
#Eğitilecek veri seti (training set)
train1 <- df1 %>% sample_frac(.70)
train1
#Test edilecek veri seti
test1  <- anti_join(df1, train1, by = 'sira')#Anti join fonksiyonu eşleşmeyen kayıtları yani geri kalan kayıtları getirir ve onları test setine atar.
test1

Model 1

1 nolu modelin oluşturulması

model1<-randomForest(katmadeger ~ ., train1[,-1])

print(model1)

summary(model1)

plot(model1, main="Model 1: Rastgele Orman (RF) Algoritmasının Hata Oranı")

Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin açıklanan varyans (% 96,05) aşağıda verilmiştir.

Call:
 randomForest(formula = katmadeger ~ ., data = train1[, -1]) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 2

          Mean of squared residuals: 956776.9
                    % Var explained: 96.05

Yukarıdaki kod bloğunun çalıştırılmasından sonra çizilen modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelindeki regresyon hata oranlarını göstermektedir. Ağaç sayısı (ntree) arttıkça hata oranı sıfıra yaklaşır ve belirli noktadan sonra durağanlaşır. Burada ağaç sayısının az olması elde edilecek sonuçların varyansını artırarak hatayı yükseltir.

1 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model1)
k<-tibble(Değişken=as.vector(row.names(k)), Dugum_Safligi=as.vector(importance(model1)))%>%arrange(desc(Dugum_Safligi))
formattable(k, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Dugum_Safligi` = color_bar("#00FF7F")
))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri düğüm saflıkları (Inc Node Purity)’na göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması

pred1<-predict(model1, test1)

karsilastirma<-tibble(Gercek=test1$katmadeger, Tahmin=pred1)

#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gercekİlk_10=Gercek, Tahminİlk_10=Tahmin) %>% mutate_if(is.numeric, round, 1)

son10<-tail(karsilastirma, 10) %>% rename(GercekSon_10=Gercek, TahminSon_10=Tahmin) %>% mutate_if(is.numeric, round, 1)

formattable(cbind(Sıra=seq(1,10),ilk10, son10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modelden elde edilen ilk ve son 10 gözlem değerleri ile tahmin değerleri aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Regresyon metrikleri

Kurulan 1 nolu modele ait hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

karsilastirma<-tibble(Gercek=test1$katmadeger, Tahmin=pred1)
metrik<-tibble(SSE=sse(karsilastirma$Gercek, karsilastirma$Tahmin), MSE=mse(karsilastirma$Gercek, karsilastirma$Tahmin),RMSE=rmse(karsilastirma$Gercek, karsilastirma$Tahmin), MAE= mae(karsilastirma$Gercek, karsilastirma$Tahmin),MAPE= mape(karsilastirma$Gercek, karsilastirma$Tahmin), Bias= bias(karsilastirma$Gercek, karsilastirma$Tahmin))%>% mutate_if(is.numeric, round, 1)
formattable(metrik)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

Çapraz performans testi (Cross validation test)

Çapraz performans testi veri setindeki gözlem sayısına ve bilgisayar işlemci kapasitelerine bağlı olarak uzun sürebilmektedir. Sabırlı olmakta fayda var 🙂

set.seed(1919)
cv<- performanceEstimation(
  PredTask(katmadeger ~ ., df1[,-1]),
    workflowVariants(learner=("randomForest")),
 EstimationTask(metrics = c("mse", "mae", "rmse"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)
plot(cv)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==

Task for estimating  mse,mae,rmse  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 

* Predictive Tasks ::  df1[, -1].katmadeger
* Workflows  ::  randomForest 

-> Task:  df1[, -1].katmadeger
  *Workflow: randomForest 
              mse       mae      rmse
avg      757383.7 195.22316  842.1489
std      399589.1  17.73925  231.3462
med      600792.8 190.91481  774.9974
iqr      722966.5  27.63886  415.4534
min      277804.7 168.18802  527.0718
max     1310045.6 222.07900 1144.5722
invalid       0.0   0.00000    0.0000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıdaki grafikte verilmiştir.

Model 2

2 nolu modelin oluşturulması

which.min(model1$mse)#1. modelde büyütülecek ağaçlarının sayısını minimum yapan hata

set.seed(1920)
model2<-randomForest(katmadeger ~ ., train1[,-1], ntree=54, mtry=8/3)#modelde mtyr her bölümde rastgele aday olarak örneklenen değişken sayısını (p=değişken sayısı/3) göstermektedir. 

print(model2)

summary(model2)

plot(model2, main="Model 2: Rastgele Orman (RF) Algoritmasının Hata Oranı")

Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin açıklanan varyans (% 97,26) aşağıda verilmiştir.

Call:
 randomForest(formula = katmadeger ~ ., data = train1[, -1], ntree = 54,      mtry = 8/3) 
               Type of random forest: regression
                     Number of trees: 54
No. of variables tried at each split: 3

          Mean of squared residuals: 719121.7
                    % Var explained: 97.26

Yukarıdaki kod bloğunun çalıştırılmasından sonra çizilen modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelindeki regresyon hata oranlarını göstermektedir. Ağaç sayısı (ntree) arttıkça hata oranı sıfıra yaklaşır ve belirli noktadan sonra durağanlaşır. Burada ağaç sayısının çok az veya fazla olması elde edilecek sonuçların varyansını artırarak hatayı yükseltebilir.

2 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model2)
k<-tibble(Değişken=as.vector(row.names(k)), Dugum_Safligi=as.vector(importance(model2)))%>%arrange(desc(Dugum_Safligi))
k

formattable(k, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Dugum_Safligi` = color_bar("#B0C4DE")
))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri düğüm saflıkları (Inc Node Purity)’na göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Regresyon metrikleri

Kurulan 2 nolu modele ait hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

pred2<-predict(model2, test1)

karsilastirma2<-tibble(Gercek=test1$katmadeger, Tahmin=pred2)

metrik<-tibble(SSE=sse(karsilastirma2$Gercek, karsilastirma2$Tahmin), MSE=mse(karsilastirma2$Gercek, karsilastirma2$Tahmin),RMSE=rmse(karsilastirma2$Gercek, karsilastirma2$Tahmin), MAE= mae(karsilastirma2$Gercek, karsilastirma2$Tahmin),MAPE= mape(karsilastirma2$Gercek, karsilastirma2$Tahmin), Bias= bias(karsilastirma2$Gercek, karsilastirma2$Tahmin))%>% mutate_if(is.numeric, round, 1)
formattable(metrik)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

set.seed(1920)
cv<- performanceEstimation(
  PredTask(katmadeger ~ ., df1[,-1]),
  workflowVariants(learner="randomForest", learner.pars=list(ntree=54, mtry=8/3)),
 EstimationTask(metrics = c("mse", "mae", "rmse"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)

#rankWorkflows(cv, top = 3)

plot(cv)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==

Task for estimating  mse,mae,rmse  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 

* Predictive Tasks ::  df1[, -1].katmadeger
* Workflows  ::  randomForest 

-> Task:  df1[, -1].katmadeger
  *Workflow: randomForest 
              mse       mae      rmse
avg      620028.2 154.33328  767.2455
std      311613.2  14.63084  186.6741
med      545472.8 154.55071  736.9520
iqr      295773.3  20.45502  201.6927
min      309424.4 123.09429  556.2593
max     1231557.9 167.92314 1109.7558
invalid       0.0   0.00000    0.0000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıdaki grafikte verilmiştir.

Sonuç

Bu çalışmada regresyon (regression) probleminin çözümüne yönelik Rastgele Orman (RF) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, kurulan regresyon modelleri içerisinde 1. modeldeki bağımsız değişkenler bağımlı değişkendeki varyansın % 96’sını, 2. model ise varyansın % 97’sini açıklamaktadır. Modellere ilişkin çapraz performans testi sonuçları aşağıdaki tabloda verilmiş olup, 2. modelde üretilen ortalamalar hatalar 1. modele göre daha az olduğu için 2. model bağımlı değişken olan “katmadeger” i daha iyi tahmin ettiği söylenebilir.

ModelMSEMAERMSE
Model 1757383.7195.2842.2
Model 2620028.2154.3767,3

Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı düşünülmektedir.

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

Bilimle ve teknolojiyle kalınız.

Saygılarımla.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

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