Bagaimana Random Forests tidak peka terhadap outlier?

33

Saya telah membaca di beberapa sumber, termasuk yang satu ini , bahwa Random Forests tidak sensitif terhadap pencilan (dalam cara Regresi Logistik dan metode ML lainnya, misalnya).

Namun, dua intuisi mengatakan sebaliknya:

  1. Setiap kali pohon keputusan dibangun, semua poin harus diklasifikasikan. Ini berarti bahwa outlier akan diklasifikasikan, dan karenanya akan memengaruhi pohon keputusan tempat mereka dipilih selama peningkatan.

  2. Bootstrapping adalah bagian dari bagaimana RandomForest melakukan sub-sampling. Bootstrap rentan terhadap pencilan.

Apakah ada cara untuk merekonsiliasi intuisi saya tentang kepekaannya terhadap outlier, dengan sumber yang tidak setuju?

Hunle
sumber
Jawabannya, di bawah, sangat bagus. Jawaban intuitif adalah bahwa pohon keputusan bekerja pada pemisahan dan pemisahan tidak peka terhadap pencilan: perpecahan hanya harus jatuh di mana saja di antara dua kelompok titik untuk membaginya.
Wayne
Jadi saya kira jika min_samples_leaf_nodeini 1, maka bisa rentan terhadap outlier.
Hunle
ya min_samples dan sampel bootstrap dapat sepenuhnya menghapus pengaruh outlier 1b dalam regresi RF
Soren Havelund Welling
Beberapa ahli statistik mendapatkan visi terowongan pada inliers tersebut, yang dapat diprediksi dan dipahami. Hargai outlier sebagai 'tidak dikenal' dan bertanya-tanya apakah model bisnis Anda rapuh terhadap mereka. Beberapa pencilan pada dasarnya tidak dapat diprediksi, tetapi dampaknya sangat nyata ... parafrase dari N. Taleb, 'Black Swan'
Soren Havelund Welling

Jawaban:

21

Intuisi Anda benar. Jawaban ini hanya menggambarkannya pada contoh.

Memang merupakan kesalahpahaman umum bahwa CART / RF entah bagaimana kuat untuk outlier.

Untuk mengilustrasikan kurangnya kekokohan RF terhadap keberadaan outlier tunggal, kita dapat (secara ringan) memodifikasi kode yang digunakan dalam jawaban Soren Havelund Welling di atas untuk menunjukkan bahwa satu outlier 'y' cukup untuk sepenuhnya mempengaruhi model RF yang dipasang. Misalnya, jika kita menghitung kesalahan prediksi rata-rata dari pengamatan yang tidak terkontaminasi sebagai fungsi jarak antara pencilan dan sisa data, kita dapat melihat (gambar di bawah) yang memperkenalkan pencilan tunggal (dengan mengganti salah satu pengamatan asli dengan nilai arbitrer pada ruang 'y') cukup untuk menarik prediksi model RF secara sewenang-wenang jauh dari nilai-nilai yang akan mereka miliki jika dihitung berdasarkan data asli (tidak terkontaminasi):

 library(forestFloor)
library(randomForest)
library(rgl)
set.seed(1)

X = data.frame(replicate(2,runif(2000)-.5))
y = -sqrt((X[,1])^4+(X[,2])^4)
X[1,]=c(0,0);
y2<-y
rg<-randomForest(X,y)   #RF model fitted without the outlier
outlier<-rel_prediction_error<-rep(NA,10)

for(i in 1:10){
    y2[1]=100*i+2
    rf=randomForest(X,y2)   #RF model fitted with the outlier
    rel_prediction_error[i]<-mean(abs(rf$predict[-1]-y2[-1]))/mean(abs(rg$predict[-1]-y[-1]))
    outlier[i]<-y2[1]
}
plot(outlier,rel_prediction_error,type='l',ylab="Mean prediction error (on the uncontaminated observations) \\\ relative to the fit on clean data",xlab="Distance of the outlier")

masukkan deskripsi gambar di sini

Berapa jauh? Dalam contoh di atas, pencilan tunggal telah banyak mengubah fit sehingga kesalahan prediksi rata-rata (pada yang tidak terkontaminasi) sekarang adalah 1-2 urutan besarnya lebih besar daripada seharusnya, seandainya model telah dipasang pada data yang tidak terkontaminasi.

Jadi tidak benar bahwa pencilan tunggal tidak dapat mempengaruhi kecocokan RF.

Selain itu, seperti yang saya tunjukkan di tempat lain , outlier yang jauh lebih sulit untuk berurusan dengan ketika ada potensi beberapa dari mereka (meskipun mereka tidak perlu menjadi besar proporsi dari data untuk efek mereka muncul). Tentu saja, data yang terkontaminasi dapat mengandung lebih dari satu pencilan; untuk mengukur dampak beberapa pencilan pada kesesuaian RF, bandingkan plot di sebelah kiri yang diperoleh dari RF pada data yang tidak terkontaminasi dengan plot di sebelah kanan yang diperoleh dengan mengubah 5% nilai respons secara sewenang-wenang (kode berada di bawah jawaban) .

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Akhirnya, dalam konteks regresi, penting untuk menunjukkan bahwa outlier dapat menonjol dari sebagian besar data baik dalam desain dan ruang respon (1). Dalam konteks spesifik RF, outlier desain akan memengaruhi estimasi parameter-hiper. Namun, efek kedua ini lebih nyata ketika jumlah dimensi besar.

Apa yang kami amati di sini adalah kasus khusus dari hasil yang lebih umum. Sensitivitas ekstrim terhadap pencilan metode pemasangan data multivariat berdasarkan fungsi kehilangan cembung telah ditemukan kembali beberapa kali. Lihat (2) untuk ilustrasi dalam konteks spesifik metode ML.

Edit.

t

s=argmakss[halL.var(tL.(s))+halRvar(tR(s))]

tL.tRstL.tRshalL.tL.halR=1-halL.tR. Kemudian, seseorang dapat memberikan ketahanan spasi "y" ke pohon regresi (dan dengan demikian RF) dengan mengganti fungsional varians yang digunakan dalam definisi asli dengan alternatif yang kuat. Ini pada dasarnya pendekatan yang digunakan dalam (4) di mana varians digantikan oleh M-estimator skala.

  • (1) Menyingkap Multivarian Outliers dan Leverage Points. Peter J. Rousseeuw dan Bert C. van Zomeren Jurnal Asosiasi Statistik Amerika Vol. 85, No. 411 (Sep., 1990), hlm. 633-639
  • (2) Kebisingan klasifikasi acak mengalahkan semua pemacu potensial cembung. Philip M. Long dan Rocco A. Servedio (2008). http://dl.acm.org/citation.cfm?id=1390233
  • (3) C. Becker dan U. Gather (1999). Titik Masking Breakdown dari Aturan Identifikasi Outlier Multivariat.
  • (4) Galimberti, G., Pillati, M., & Soffritti, G. (2007). Pohon regresi yang kuat berdasarkan pada M-estimators. Statistica, LXVII, 173–190.

    library(forestFloor)
    library(randomForest)
    library(rgl)
    set.seed(1)

    X<-data.frame(replicate(2,runif(2000)-.5))
    y<--sqrt((X[,1])^4+(X[,2])^4)
    Col<-fcol(X,1:2) #make colour pallete by x1 and x2
    #insert outlier2 and colour it black
    y2<-y;Col2<-Col
    y2[1:100]<-rnorm(100,200,1);    #outliers
    Col[1:100]="#000000FF" #black

    #plot training set
    plot3d(X[,1],X[,2],y,col=Col)
    rf=randomForest(X,y)    #RF on clean data
    rg=randomForest(X,y2)   #RF on contaminated data
    vec.plot(rg,X,1:2,col=Col,grid.lines=200)
    mean(abs(rf$predict[-c(1:100)]-y[-c(1:100)]))
    mean(abs(rg$predict[-c(1:100)]-y2[-c(1:100)]))
pengguna603
sumber
Terima kasih atas jawaban terinci Anda. Jika ada beberapa pencilan dalam ruang dimensi tinggi yang sama, itu menimbulkan pertanyaan apa kriteria kita untuk memanggil "pencilan"? Dalam hal ini, saya bertanya-tanya parameter hiper apa yang mungkin diatur sehingga saya dapat menentukan beberapa jenis kriteria untuk outlier a priori?
Hunle
1
Saya telah menambahkan komentar saya sebelumnya ke jawaban saya. Saya harap sekarang melakukan pekerjaan yang lebih baik untuk menjawab pertanyaan Anda!
user603
1
Terima kasih. Apa yang ada pdan sdalam formula?
Hunle
1
Mengapa outlier gabungan (1a + 2) buruk? Dalam contoh Anda, model RF cocok dengan struktur data dengan sempurna, 99,99% OOB MSE. Struktur model tanah tengah antara dua cluster cukup kasar, ya, dan lebih merupakan produk dari model daripada data. Tapi, tidak ada inferensi dan / atau prediksi yang seharusnya ada di area yang tidak diketahui ini, jadi tidak masalah. Kekokohan mutlak terhadap outlier pasti untuk mengabaikan peristiwa yang jarang terjadi tetapi mungkin penting. Kebanyakan algos ML secara default akan mengambil posisi di tengah antara ketahanan dan 'fleksibilitas' tetapi dapat disesuaikan untuk meningkatkan ketahanan.
Soren Havelund Welling
1
@ user603 Tidak ada yang bisa ditambahkan ke diskusi teknis, selain itu Heart of Darkness adalah buku favorit saya sebagai anak-anak, dengan The Trial karya Franz Kafka sebentar lagi (mungkin pertama jika selesai dan mungkin ditulis dalam bahasa Inggris - lalu lagi, mungkin sudah sepantasnya itu tidak selesai d). Saya tidak benar-benar memikirkannya dari sudut pandang luar, selain itu saya menganggap Heart of Darkness dan The Trials sebagai (baik) pencilan di antara lautan "literatur serius" BS. Saya harus membaca dan melakukan BS pencitraan gelap-terang dan analisis seperti pada.
Mark L. Stone
11

outlier 1a: Outlier ini memiliki satu atau lebih nilai fitur ekstrim dan ditempatkan jauh dari sampel lain. Pencilan akan mempengaruhi pemisahan awal pohon seperti sampel lainnya, jadi tidak ada pengaruh yang kuat. Ini akan memiliki kedekatan yang rendah dengan sampel lain, dan hanya akan menentukan struktur model di bagian jauh dari ruang fitur. Selama prediksi sebagian besar sampel baru cenderung tidak mirip dengan pencilan ini, dan jarang akan berakhir di simpul terminal yang sama. Selain itu pohon keputusan menganggap fitur seolah-olah mereka ordinal (peringkat). Nilainya lebih kecil / sama dengan atau lebih besar dari break point, sehingga tidak masalah jika nilai fitur merupakan pencilan ekstrim.

outlier 1b: Untuk klasifikasi satu sampel tunggal dapat dianggap sebagai outlier, ketika tertanam di tengah banyak sampel dari kelas yang berbeda. Saya jelaskan sebelumnya bagaimana model RF default akan dipengaruhi oleh satu sampel kelas ganjil ini, tetapi hanya sangat dekat dengan sampel.

outlier 2: Outlier ini memiliki nilai target ekstrem yang mungkin jauh lebih tinggi daripada nilai-nilai lainnya, tetapi nilai-nilai fitur normal. Sebagian kecil .631 pohon akan memiliki simpul terminal dengan sampel ini. Struktur model akan terpengaruh secara lokal dekat dengan pencilan. Perhatikan struktur model dipengaruhi terutama sejajar dengan sumbu fitur, karena node dibagi secara un-variately.

y=(x14+x24)12x1x2

masukkan deskripsi gambar di sini

library(forestFloor)
library(randomForest)
library(rgl)
set.seed(1)

X = data.frame(replicate(2,runif(2000)-.5))
y = -sqrt((X[,1])^4+(X[,2])^4)^1
Col = fcol(X,1:2) #make colour pallete by x1 and x2
#insert outlier2 and colour it black
X[1,] = c(0,0);y[1]=2 ;Col[1] = "#000000FF" #black

#plot training set
plot3d(X[,1],X[,2],y,col=Col)

rf = randomForest(X,y)
vec.plot(rf,X,1:2,col=Col,grid.lines = 400)

EDIT: komentar ke pengguna603

Ya untuk outlier ekstrim pada skala target, orang harus mempertimbangkan untuk mengubah skala target sebelum menjalankan RF. Saya menambahkan di bawah ini fungsi robustModel () yang mengubah randomForest. Solusi lain adalah membuat log transformasi sebelum pelatihan.

.
##---code by user603
library(forestFloor)
library(randomForest)
library(rgl)
set.seed(1)

X<-data.frame(replicate(2,runif(2000)-.5))
y<--sqrt((X[,1])^4+(X[,2])^4)
Col<-fcol(X,1:2) #make colour pallete by x1 and x2

#insert outlier2 and colour it black
y2<-y;Col2<-Col
y2[1:100]<-rnorm(100,200,1);    #outliers
Col2[1:100]="#000000FF" #black
##---

#function to make models robust
robustModel = function(model,keep.outliers=TRUE) {
  f = function(X,y,lim=c(0.1,.9),keep.outliers="dummy",...) {
  limits = quantile(y,lim)
  if(keep.outliers) {#keep but reduce outliers
  y[limits[1]>y] = limits[1] #lower limit
  y[limits[2]<y] = limits[2] #upper limit
  } else {#completely remove outliers
    thrashThese = mapply("||",limits[1]>y,limits[2]>y)
    y = y[thrashThese]
    X = X[thrashThese,]
  }
  obj = model(x=X,y=y,...)
  class(obj) = c("robustMod",class(obj))
  return(obj)
  }
  formals(f)$keep.outliers = keep.outliers
  return(f)
}

robustRF = robustModel(randomForest) #make RF robust
rh = robustRF(X,y2,sampsize=250)     #train robustRF
vec.plot(rh,X,1:2,col=Col2)          #plot model surface
mean(abs(rh$predict[-c(1:100)]-y2[-c(1:100)]))

masukkan deskripsi gambar di sini

Soren Havelund Welling
sumber
Anda menulis "tidak ada prediksi lain yang akan terpengaruh". Jika Anda menggeser outlier tunggal Anda untuk menempatkan y[1]=200Anda akan melihat bahwa itu sendirian menyebabkan kesalahan prediksi pada pengamatan yang tidak terkontaminasi untuk melompat dengan faktor 20!
user603
@ user603 Benar itu, Dalam kasus seperti itu skala target dapat diubah secara monoton sebelum diserahkan ke RF. Saya menambahkan 'robustModel: membuat model kuat' untuk jawaban saya ..... tentu saja untuk memprediksi outlier target acak (s) (tipe 2) tetap tidak mungkin, tetapi struktur model yang tersisa tidak harus menderita
Soren Havelund Welling
Transformasi log tidak, secara umum, solusi terhadap outlier (hanya menyembunyikan masalah). Penguatan RF yang Anda usulkan pada dasarnya adalah pendekatan yang dianjurkan dalam Galimberti, G., Pillati, M., & Soffritti, G. (lihat jawaban saya). Perbedaan utama adalah bahwa pendekatan '' robustModel "Anda memiliki titik rincian maksimum 25% pada ruang respons (dapat bertahan 25% atau sewenang-wenang 'outlier') sedangkan mereka memiliki bdp 50%. Perhatikan bahwa tidak ada pendekatan kuat untuk pencilan dalam ruang desain
user603
8

Ini bukan algoritma Acak Hutan itu sendiri yang kuat untuk outlier, tetapi dasar pelajar itu didasarkan pada: pohon keputusan . Pohon keputusan mengisolasi pengamatan atipikal menjadi daun kecil (yaitu, ruang bagian kecil dari ruang asli). Selanjutnya, pohon keputusan adalah model lokal . Tidak seperti regresi linier, di mana persamaan yang sama berlaku untuk seluruh ruang, model yang sangat sederhana dipasang secara lokal untuk setiap subruang (yaitu, untuk setiap daun).

  • Dalam kasus regresi, umumnya model regresi orde sangat rendah (biasanya hanya rata-rata pengamatan di daun).
  • Untuk klasifikasi, itu adalah suara terbanyak.

Oleh karena itu, untuk regresi misalnya, nilai-nilai ekstrem tidak mempengaruhi keseluruhan model karena mereka mendapatkan rata-rata secara lokal. Jadi kesesuaian dengan nilai-nilai lain tidak terpengaruh.

Sebenarnya, properti yang diinginkan ini dibawa ke struktur seperti pohon lainnya, seperti dendogram. Hierarchical clustering, misalnya, telah lama digunakan untuk pembersihan data karena secara otomatis mengisolasi pengamatan menyimpang ke dalam kelompok-kelompok kecil. Lihat misalnya Loureiro et al. (2004). Deteksi outlier menggunakan metode clustering: aplikasi pembersihan data .

Jadi, secara singkat, RF mewarisi ketidakpekaannya terhadap pencilan dari partisi rekursif dan pemasangan model lokal .

Perhatikan bahwa pohon keputusan memiliki bias yang rendah tetapi model varians tinggi: strukturnya cenderung berubah pada modifikasi kecil dari set pelatihan (penghapusan atau penambahan beberapa pengamatan). Tapi ini tidak boleh disalahartikan dengan sensitivitas terhadap pencilan, ini adalah masalah yang berbeda.

Antoine
sumber
Saya benar-benar mempertimbangkan menggunakan metode pengelompokan, seperti yang Anda sarankan, untuk mendeteksi outlier. Tapi kemudian, saya tidak yakin di mana menerapkan pengelompokan. Haruskah ini diterapkan labeledatau unlabeleddata? Dan bagaimana pengelompokan ini dapat dicapai pada data heterogen yang berisi fitur kategorikal dan numerik?
Hunle