DRF: (Neredeyse) her şey için bir Rastgele Orman

Nov 27 2022
Breiman 2001'de Rastgele Orman (RF) algoritmasını tanıttığında, bunun yaratacağı muazzam etkiyi biliyor muydu? Günümüzde RF, veri biliminin birçok bölümünde yoğun olarak kullanılan bir araçtır. Nedenini anlamak kolay — RF'nin kullanımı kolaydır ve son derece geniş bir görev yelpazesinde yüksek performansıyla bilinir.
Unsplash'ta Geran de Klerk'in fotoğrafı

Breiman 2001'de Rastgele Orman (RF) algoritmasını tanıttığında, bunun yaratacağı muazzam etkiyi biliyor muydu? Günümüzde RF, veri biliminin birçok bölümünde yoğun olarak kullanılan bir araçtır. Nedenini anlamak kolay — RF'nin kullanımı kolaydır ve son derece geniş bir görev yelpazesinde yüksek performansıyla bilinir. Bu tek başına etkileyicidir, ancak onu daha da ilginç kılan şey, bu sonuçları elde etmek için genellikle herhangi bir ayar gerektirmemesidir.

Bu makalede, orijinal RF'nin oldukça büyük bir uzantısını, bu makalede yakın zamanda geliştirdiğimiz Dağılımsal Rastgele Ormanı (DRF) tartışacağız:

Dağılımsal Rastgele Ormanlar: Heterojenlik Düzeltmesi ve Çok Değişkenli Dağılımsal Regresyon (jmlr.org)

Bu makaleye de katkıda bulunan Loris Michel ile ortak çalışma . Ek kod ve bir python uygulaması burada bulunabilir:https://github.com/lorismichel/drf

Rastgele Ormanlar konusuna küçük bir girişle başlayacağız ve ardından DRF'yi geliştirmek için adımlardan geçeceğiz. Sonunda, gelecekte memnuniyetle genişleteceğimiz küçük bir örnek listesi sizi bekliyor.

Daha ileri gitmeden önce, bazı gösterimleri aradan çıkarmamız gerekiyor: Bu makalede, X , Y'ye , bir iid örneğini (yi, x i), i= gözlemleyeceğimizi varsaydığımız rasgele vektörler olarak gevşek bir şekilde atıfta bulunacağız. 1,…n. Bu, araştırma makalelerinde oldukça yaygındır. Bunun yerine rasgele değişkenlerle (yani tek değişkenli) uğraşırsak, sadece Y veya X yazarız. Veri biliminin birçok uygulamasında ana hedef, X'in bazı özelliklerinden Y'yi tahmin etmektir , diyelim ki "köpek" (Y) etiketini tahmin etmek istiyoruz. piksel yoğunluklarının bir vektörünü söyleyin ( X ). Daha az gösterişli bir şekilde formüle edilen bir tahmin, aslında neredeyse her zaman koşullu dağılımın P(Y| X = x) bir fonksiyonudur.). Bu nedenle, " X vektörü x değerine sabitlenmişse , Y'nin belirli bir dağılımsal yönü nedir?" diye soruyoruz. En belirgin örnek, koşullu ortalama veya beklentidir, yani P(Y| X = x ) dağılımı altındaki beklenen değerdir. İnsanların bir tahmin istediklerinde genellikle istedikleri şey budur. Örneğin, lineer regresyon ile tahmin yaparsak, lineer formüle bir x değeri koyarız ve tahmin olarak beklenen bir Y değeri elde ederiz. Yukarıdaki görüntü sınıflandırma örneği zaten farklıdır — burada en olası değeri, yani l'nin hangi etiket için P(Y= l | X = x) olduğunu sorabiliriz.) maksimize edildi. Uzun lafın kısası: Çoğu tahmin, koşullu bir dağılımın, genellikle koşullu beklentinin yönleridir.

Şaşırtıcı bir şekilde, insanlar daha sonra RF'nin yalnızca koşullu beklenti veya ortalama tahminler için değil, aynı zamanda (koşullu) bir dağılımın diğer yönlerini tahmin etmek için de kullanılabileceğini anladılar. Örneğin, kuantiller tahmin edilebilir ve böylece belirsizliği ölçen tahmin aralıkları elde edilebilir. DRF bu yaklaşımı yeni bir düzeye taşıyor: X özelliklerinin tipik vektörü ile birlikte çok değişkenli bir Y yanıtını besleyebilirsiniz ve daha sonra herhangi bir (gerçekleşme) x verildiğinde çok değişkenli Y'nin tüm koşullu dağılımını tahmin edecektir . Bu tahmin, basit ağırlıklar biçiminde verilir , bu da dağıtımdan simüle etmeyi veya ilgilenilen miktarları, yani “tahminleri” hesaplamayı kolaylaştırır.

Örneğin , burada RF'nin kapsamlı bir açıklaması verilmiştir , bu nedenle buna kısaca değineceğiz: Bir RF'de birkaç bağımsız karar ağacı yerleştirilmiştir. Her ağaç sadece değişkenin bir parçasını alır ve ardından sonuç uzayını X'teki özelliklere göre böler .

Bir Rastgele Orman iş başında. Her ağaca (kırmızı) yeni bir x noktası düşürülür ve bir yaprağa veya uç düğüme iner. Kaynak: Stackexchange'ten TikZ koduyla oluşturulan görüntü.

Yani yeni bir x noktasını "aşağıya bıraktığımızda" , her ağaç için bir yaprağa dönüşecektir. Bir yaprak, gözlemleri olan bir kümedir ve o yapraktaki tüm yi'lerin ortalamasını almak, bir ağaç için tahmin verir. Bu tahminlerin daha sonra nihai sonucu vermek için ortalaması alınır. Böylece, belirli bir x için, x verildiğinde Y'nin koşullu ortalamasını tahmin etmek istiyorsanız , siz:

1. Her ağacın x'ini "aşağıya bırakın" (bu, yukarıdaki şekilde kırmızı ile gösterilmiştir). Bölme kuralları X üzerinde yapıldığından , yeni x noktanız güvenli bir şekilde bir yaprak düğümde bir yere inecektir.

2. Her ağacın koşullu ortalamasının bir tahminini elde etmek için her ağaç için o yapraktaki yi yanıtlarının ortalamasını alırsınız.

3. Nihai tahmini elde etmek için her koşullu ortalamayı ağaçların üzerinden alıyorsunuz.

Daha da önemlisi, tüm ağaçların tahmininin ortalamasının alınması, varyansta belirgin bir azalmaya yol açar. Hataların tabiri caizse ''ortalaması alınır''. Bu nedenle ağaçları mümkün olduğu kadar bağımsız yapmak önemlidir.

Şimdi sadece ortalama bir tahmin yapmak için değil, bunun yerine tüm (koşullu) dağılımı tahmin etmek için bu fikrin bir uzantısı için çalışıyoruz. Yani, x test noktası için P( Y | X = x ) tahmin etmek istiyoruz . Daha önce de belirtildiği gibi, genellikle tahmin etmek istenen pek çok şey bu koşullu dağılımın doğrudan işlevleridir: (koşullu) ortalama, koşullu nicelikler, koşullu varyanslar, kovaryanslar vb. DRF'nin biçiminin, onu son teknoloji yöntemler için bile mümkün olanın ötesinde nedensel analiz için uygun hale getirdiği ortaya çıktı. Bu belgenin sonunda küçük bir örnek veriyoruz ve sonraki gönderilerde muhtemelen çok daha fazlasını veriyoruz.

Şimdilik, Dağılımsal Rastgele Ormana nasıl ulaşacağımızı adım adım türetiyoruz. İlk adım ağırlıkları almaktır.

Teori

Adım 1: Biraz kilo almak

Bunun anahtarı, RF'nin sağladığı ağırlıkları elde etmektir. Bu genellikle RF'ye ilk girişte göz ardı edilir, ancak burada hayati önem taşır:

Bir yaprak düğümdeki ortalamayı doğrudan hesaplamak yerine, ortalama hesaplaması yapılırken dolaylı olarak kullanılan ağırlıklar hesaplanır. wi( x ) ağırlığı, (1) x test noktasının ve (2) i gözleminin bir fonksiyonudur . Yani, eğer x'i düşürürsekbir ağaçtan aşağı indiğimizde hangi yaprağa düştüğünü gözlemleriz. Bu yapraktaki tüm gözlemler 1, diğer tüm gözlemler 0 alır. Dolayısıyla, gözlemlerin (1,3,10) olduğu bir yaprağa ulaşırsak, o ağaç için 1,3,10 olan gözlemlerin ağırlığı 1 olurken, diğer tüm gözlemler 0 alır. Daha sonra bu ağırlığı yaprak düğümdeki öğelerin sayısına böleriz. Önceki örnekte, yaprak düğümde 3 gözlemimiz vardı, bu nedenle 1,3, 10 gözlemlerinin ağırlıkları 1/3 iken, diğer tüm gözlemler bu ağaçta hala 0 ağırlık alıyor. Bu ağırlıkların tüm ağaçların ortalaması alınarak nihai ağırlık wi( x ) elde edilir.

Bu ağırlıklar neden faydalıdır? İlk olarak, geleneksel bir Rastgele Ormanda yaptığımız gibi ortalamayı hesaplamanın wi( x )*yi'yi özetlemekle aynı olduğu gösterilebilir . Bu biraz çirkin görünüyor, ama temelde sadece iki meblağı değiş tokuş etmekle ilgili. Dolayısıyla, bu tahmin mantıklıysa, yi'nin diğer fonksiyonlarını, örneğin yi²'yi alırsanız, verilen X'in Y²'nin ortalamasını elde etmeniz mantıklı olmalıdır . Veya siz, bir t sayısı için, I(yi<t) yani 1 ise yi < t ve 0'ı kullanabilir ve wi( x üzerinden toplamı görebilirsiniz.)I(yi<t), Y < t koşullu olasılığının bir tahmini olarak. Böylece, teoride koşullu dağılımı tam olarak karakterize eden koşullu kümülatif dağılım işlevini (cdf) doğrudan elde edebilirsiniz. İkincisi, bu ağırlıklar aslında size x sorgusuna belirli bir anlamda benzeyen gözlemler üzerinden en yakın komşu tahmini verir . Aşağıda göreceğimiz gibi, bu benzerlik ideal olarak ilişkili yi'leri koşullu dağılımdan bir iid örneği olarak görmeyi mümkün kılacak şekilde ölçülür.

Bu daha da ileri götürülebilir. Özellikle, Y'den bu ağırlıklarla örnekleme yaparsanız, koşullu dağılımın yaklaşık bir örneğini elde edersiniz. Devam etmeden önce, R'deki ünlü ranger paketini kullanarak hızlı bir örnek yapalım. Paket bu ağırlıkları doğrudan sağlamaz, bu yüzden bunları manuel olarak uygulamamız gerekir, bu burada iyi bir alıştırmadır:

library(ranger)
library(ggplot2)
n<-1000
## Simulate some data:
X<-matrix(rnorm(n*2),ncol=2)
Y=2*X[,1] + 0.5*X[,2]^2 + rnorm(n)
Y<-as.matrix(Y)
## Get a test point
x<-matrix(c(1,-0.5),ncol=2)
# Fit Random forest
RF<-ranger(Y~., data=data.frame(Y=Y, X=X),min.node.size = 10, num.trees=500)
## Get the leaf/terminal node indices of each observation in the training samples
terminalX <- predict(RF, data=data.frame(X=X), type="terminalNodes")$predictions
## Get the leaf/terminal node of the test point
terminalxnew <- predict(RF, data=data.frame(X=x), type="terminalNodes")$predictions
## For the leafs in which x ends up, what are the number of observations (we need to normalize by that)
divid<-sapply(1:ncol(terminalxnew[1,, drop=F]), function(j) {sum(terminalX[,j]==terminalxnew[1,j])} )
  
# Average the weights over the trees:
weights<-rowSums(t(sapply(1:nrow(terminalX), function(j) as.numeric(terminalX[j,]==terminalxnew[1,])/divid )), na.rm=T)/length(terminalxnew[1,])
## We can now sample according to those weights from Y
Ysample<-Y[sample(1:dim(Y)[1], prob=weights, replace = T),]
## True conditional distribution
Ytrue<-2*x[,1] + 0.5*x[,2]^2 + rnorm(n) 
p1 <- hist(Ytrue, freq=F)                     
p2 <- hist(Ysample, freq=F)                     
plot( p2, col=rgb(0,0,1,1/4), freq=F)  
plot( p1, col=rgb(1,0,0,1/4), add=T, freq=F)
## Plot the weights by looking at the point x and its nearest neighbors according to the weights
ggplot(data = data.frame(X=X), aes(x = X.1, y = X.2)) +
  geom_point(aes(alpha = exp(weights ))) + geom_point(data=data.frame(X=x), color = "red")
## Get the estimated conditional mean:
mean(Ytrue)
mean(Ysample)
sum(weights*Y)

      
                
The results of the above code: On the left, we see a plot of the Xi (the gray points) and in red the test point x. The points of the observations Xi are darker, the more weight is assigned to them by the RF. On the right, a simulation from the true conditional distribution (red) is compared against the points drawn from Y according to the weights. Image by author.

Rastgele Orman algoritmasına bakmanın başka bir yolu daha var: Bu bir homojenlik makinesi. Bir ağaçtaki her bölmede, X'teki bölme, elde edilen düğümlerdeki iki Y örneğinin mümkün olduğunca "farklı" olacağı şekilde seçilir. Aşağıdaki resim, tek değişkenli X ve Y için küçük bir örnek göstermektedir.

Bir RF'de yapılan bölmenin çizimi. Yazara göre resim.

Böyle bir örnekte, belirli bir ağaç muhtemelen resimdeki gibi X'i S'de bölecektir. Daha sonra, Xi < S olan tüm Yi, 1. düğüme ve tüm Xi >= S, 2. düğüme atılacak ve böylece veri kümeleri belirlenecektir. Bunu yeterince uzun süre yaparsak, her yaprak düğümü çok homojen bir Y örneğine sahip olacak veya başka bir deyişle, bir yaprak düğümündeki tüm yi'ler bir şekilde benzer olacaktır , çünkü tüm "farklı" gözlemler kesilmiştir. Böylece, her ağaç için, verilerinizi benzer şeylerden oluşan kovalar halinde gruplandırırsınız.

Bu neden mantıklı? Çünkü özünde, RF bir en yakın komşu algoritmasıdır. Ona bir x verirseniz, "benzer" gözlemlerle bir kovaya veya yaprağa düşene kadar ağaçlardan aşağı düşürür. Bu gözlemlerden koşullu ortalama hesaplanır. Yani her ağaçta sadece yapraktaki gözlemler dikkate alınır, başka bir şey dikkate alınmaz. Bu, mesafenin Öklid mesafesiyle ölçülmediği, ancak orman tarafından belirlendiği bir k-NN gibidir. Orman sırayla bu x i'leri "benzer" yi'lere sahip "benzer" olarak etiketlemeye karar verir. Yani x'in benzerliğii'ye ilişkili yi'ye göre karar verilir, bu, amacınız Y hakkında bir şeyler çıkarmaksa çok mantıklıdır. Aslında, k-NN yöntemleri bile "koşullu dağılım P( Y | X = x) " çizgisinde bir şeyler varsayar. i) x için , x'e yakın (Öklid mesafesinde) yaklaşık olarak aynıdır” . Aşağıdaki Şekil bunun bir örneğini göstermektedir: Örnekteki her bir x i değeri için, yi'nin örneklendiği ilişkili gerçek koşullu dağılımı görebilirsiniz . DRF'nin mükemmel bir versiyonu, ( x 1, x 4, x 6) ve ( x 3, x 5, x7) benzerdir (gerçekte Öklid uzaklıkları ne olursa olsun) ve karşılık gelen yi, (y1, y4, y6) ve (y3, y5, y7) gruplarının her birini koşullu dağılımın bir iid örneği olarak ele alın.

Örnekteki her xi değeri için, Y|X=xi'nin koşullu dağılımı gösterilir, Yi bu dağılımdan bir çekiliştir. Görüldüğü gibi, bazı dağılımlar diğerlerine daha çok benzer. Yazara göre resim.

İdeal olarak, bu, pratikte bir yaprağın içinde bulduğumuz homojen yi örneklerinin aslında koşullu dağılım Y| X=x . Bu, (ağırlıklı) ortalamanın alınmasını haklı çıkaran şeydir.

Ne yazık ki, orijinal RF'de bu yaklaşım, koşullu ortalama tahmini dışında amaçlandığı gibi çalışmaz. Yine istediğimiz, Y'nin dağılımını iki bölmede olabildiğince farklı kılan bir bölme kriteridir. Bunun yerine orijinal RF'de elde ettiğimiz şey, iki örnek arasındaki ortalama farkını olabildiğince büyük yapan bir bölünmedir . Yukarıdaki resimde, böyle bir yöntem x 2 hariç hepsini tek bir grupta toplayabilir, çünkü x 1, x 3, x 4, x 6, x7 hepsinin çok benzer araçları var. Ama elbette yukarıdaki resimde de görüldüğü gibi, bir dağılım ortalaması üzerinden tanımlanmaz. Bir normal dağılım aynı ortalamaya sahip olabilir, ancak çok farklı varyansa veya diğer momentlere sahip olabilir. Genel olarak konuşursak, aynı anlama sahip, ancak bunun dışında çok farklı olan birçok dağılımınız olabilir.

Aynı ortalamaya sahip iki dağılım. Bunlar iki farklı ülkenin gelir eşitsizlikleri olsaydı, aynı görülür müydü? Yazara göre resim.

Anahtar nokta, her bir bölünmenin, ortaya çıkan iki düğüm arasındaki dağılımdaki bir fark ölçüsüne bağlı olmasıdır. Yani sadece ortalama veya varyanstaki farklılıklar değil, dağılımdaki herhangi bir fark da tespit edilir. DRF, çekirdeklerin teorik ve pratik gücünü kullanmak için genellikle bir RF'de kullanılan bölme kriterini ayarlayarak bu sorunu çözer.ve sözde MMD kriteri. MMD çok verimli bir şekilde tahmin edilebilir ve prensip olarak dağılımdaki herhangi bir farkı tespit edebilir. Teorik olarak konuşursak, böylece her yi noktasını sonsuz boyutlu bir uzaya, Yeniden Üreten Kernel Hilbert Uzayına göndeririz ve fiilen o uzaydaki araçları karşılaştırırız. Çekirdek yöntemlerinin büyüsüyle, araçlar arasındaki bu karşılaştırma aslında dağılımların bir karşılaştırmasıdır! Bu özel uzayda dağıtımlar olduğu ortaya çıkıyor. Bunun pratikte anlamı şudur: Bir yaprak düğümü, o kovadaki yi dağılımının benzer olması anlamında, benzer x i'leri içerecektir. Böylece x i ve x verildiğinde Y'nin koşullu dağılımıj benzer, aynı grupta gruplandırılacaklar. Bu prensipte, x i ve x j Öklid uzayında birbirinden uzak olsa bile (yani k-NN anlamında en yakın komşular değillerse) doğru olabilir . Dolayısıyla, ilgilendiğimiz koşullu şeyleri hesaplamak için bu ağırlıkları kullanırsak, ilişkili yi, yj'nin dağılımları benzer olduğunda x i ve x j'yi benzer kabul eden bir en yakın komşu yöntemi kullanırız. Ve özellikle, bazı pürüzsüzlük varsayımları altında, x'in son bulduğu yaprak düğümdeki örnek, P( Y | X = x ) dağılımından yaklaşık olarak bir iid örneğidir .

3. Adım: Çok değişkenli bir yanıt kullanın

MMD ayrıca çok değişkenli dağılımları karşılaştırmaya izin verdiği için bu adım aslında kolaydır. Daha da önemlisi, dağılımlardaki farklılıklar daha da karmaşık olabileceğinden, çok değişkenli yanıtlar için ortalamadan daha fazlasını ayırt etmek daha da önemli hale gelir. Örneğin, iki çok değişkenli dağılım, tüm marjinaller için aynı ortalamaya ve varyansa, ancak öğeler arasında farklı kovaryanslara sahip olabilir.

örnekler

Küçük örnekler yapalım. Buradaki amaç, yöntem hakkında bir fikir edinmek için çok basit simüle edilmiş örnekler sağlamaktır. İlk olarak, yukarıda manuel olarak yaptığımız şeyi yeniden yapıyoruz:

library(drf)
# Fit DRF
DRF<-drf(X,Y)
weights<-predict(DRF,x)$weights[1,]
### We can now sample according to those weights from Y
Ysample<-Y[sample(1:dim(Y)[1], prob=weights, replace = T),]
## True conditional distribution
Ytrue<-2*x[,1] + 0.5*x[,2]^2 + rnorm(n) 
p1 <- hist(Ytrue, freq=F)                     
p2 <- hist(Ysample, freq=F)                     
plot( p2, col=rgb(0,0,1,1/4), freq=F)  
plot( p1, col=rgb(1,0,0,1/4), add=T, freq=F)
ggplot(data = data.frame(X=X), aes(x = X.1, y = X.2)) +
  geom_point(aes(alpha = exp(weights ))) + geom_point(data=data.frame(X=x), color = "red")
## Get the estimated conditional mean:
mean(Ytrue)
mean(Ysample)
sum(weights*Y)

Yukarıdaki kodun sonuçları: Solda, Xi'nin (gri noktalar) bir çizimini ve kırmızı olarak x test noktasının grafiğini görüyoruz. Xi gözlem noktaları daha koyu, DRF tarafından onlara daha fazla ağırlık atanır. Sağda, gerçek koşullu dağılımdan (kırmızı) bir simülasyon, ağırlıklara göre Y'den çizilen noktalarla karşılaştırılır. Yazara göre resim.

Koşullu nicelikleri de tahmin edebiliriz. Örneğin bunu yapmak, Y| değerleri için bir tahmin aralığı verir. x , böylece bu dağılımdan alınan değerler, aralıktaki zamanın yaklaşık %95'i olmalıdır:

# Predict quantiles for a test point.
quants<-predict(DRF,x, functional = “quantile”, quantiles=c(0.025, 0.975))$quantile 
q1<-quants[1]
q2<-quants[2]
mean(Ytrue >=q1 & Ytrue <=q2)

İki Boyutlu Tepki

Burada iki boyutlu bir yanıtla çılgınca zor bir örnek oluşturuyoruz ve sadece çeşitli tahminler hesaplıyoruz. İlk önce verileri simüle ediyoruz:

n<-5000
d<-2
p<-3
## Simulate X and Y
X<-matrix( cbind(runif(n)*2, rnorm(n, mean = 1), rt(n, df=8)),nrow=n)
Y<-matrix(NA, ncol=2, nrow=n)
Y[,1]<-X[,1]^2 + X[,2]*X[,1] + X[,3] + rnorm(n)
Y[,2] <- 2*Y[,1]*X[,2] + 0.1*X[,3] + rnorm(n)

Yukarıdaki kodda simüle edildiği gibi Y. Yazara göre resim.

Şimdi iki test noktası alıyoruz ve bazı çılgın tahminler yapıyoruz, çünkü şunları yapabiliriz:

library(drf)
# Fit DRF
DRF<- drf(X=X, Y=Y, num.features=200)
# Choose a few test point:
x= matrix(c(0.093, -0.5,  1.37, 0.093, 0.5,  1.37) , ncol=p, nrow=2, byrow=T)
# mean prediction
(predict(DRF, newdata=x, functional="mean")$mean)
# correlation prediction
matrix(predict(DRF, newdata=x[1,], functional="cor")$cor, nrow=d,ncol=d)
matrix(predict(DRF, newdata=x[2,], functional="cor")$cor, nrow=d,ncol=d)
# Estimated probability that Y is smaller than 0:
weightstotal<-predict(DRF, newdata=x)$weights
p1<-sum(weightstotal[1,]* (Y[,1] + Y[,2]<= 0) )
p2<-sum(weightstotal[2,]* (Y[,1] + Y[,2] <= 0) )
# Bootstrapping the estimated probability of the sum being <=0 for both points:
B<-100
pb1<-matrix(NA, ncol=1,nrow=B)
pb2<-matrix(NA, ncol=1,nrow=B)
for (b in 1:B){
  Ybx1<-Y[sample(1:n, size=n, replace=T, prob=weightstotal[1,]), ]
  Ybx2<-Y[sample(1:n, size=n, replace=T, prob=weightstotal[2,]), ]
  pb1[b] <- mean(Ybx1[,1] + Ybx1[,2] <= 0)
  pb2[b] <- mean(Ybx2[,1] + Ybx2[,2] <= 0)
}
ggplot(data.frame(x=1:2, y=c(p1, p2)), aes(x = x, y = y)) +
  geom_point(size = 4) +
  geom_errorbar(aes(ymax = c(quantile(pb1,1- 0.025), quantile(pb2, 1-0.025)), ymin = c(quantile(pb1, 0.025),quantile(pb2, 0.025) )))

İki test noktası için P(Y1 + Y2 ≤ 0| X=x) için önyüklemeli CI'ler.

Tahminden Nedensel Etkiye

İşleri daha ilginç hale getirmek için, nedensel bir etki elde etmek istediğimiz tıbbi bir örneği inceliyoruz (gerçek sorunlardan ilham almasına rağmen tamamen gerçekçi olmayan rakamlardan oluşuyor - erkeklerin ve kadınların ilaçlara gösterebileceği tepki farkı) .

Bu örnekte, bazı ilaçlarla düzenlenmesi gereken bir kan sulandırıcı etki (B) gibi bir sonucu simüle ediyoruz. Ayrıca hastaların yaşını ve cinsiyetini de biliyoruz ve şu ilişkiyi simüle ediyoruz: Bir erkek hasta için, yaştan bağımsız olarak, ilaç kan sulandırıcı etkiyi lineer olarak artırıyor. Kadın hastalar için ilaç da B'yi artırır, ancak yaşları 50'nin üzerindeyse erkeklerden daha yüksek bir ölçüde . Ancak 50'nin altındaysa etki tamamen tersine döner ve ilaç kan sulandırıcı etkiyi azaltır . Kesin veri oluşturma süreci burada:

n<-1000
# We randomly sample from different ages…
Age<-sample(20:70, n, replace=T)
# and sexes
Sex <- rbinom(n, size=1,prob=0.6) # 1=woman, 0=man
# W denotes the dosis of the medication, the causal effect we are directly interested in
W<-sample( c(5,10,50,100),n, replace=T)
# B is the thing we want to understand
B<- 60+ (0.5*W)*(Sex==0) + (-0.5*W)*(Sex==1)*(Age<50) + (0.8*W)*(Sex==1)*(Age>=50) + rnorm(n)

Yaş grubu ve cinsiyete göre ilacın simüle edilmiş etkisinin gösterimi. Yazara göre resim.

Buna DRF ile yaklaşmanın bir yolu, (1) Y =(B,W) (yani Y'miz iki boyutludur) ve X =(Yaş,Cinsiyet) almaktır, (2) belirli bir x için ağırlıkları almak ve sonra (3) bu ağırlıklarla ağırlıklandırılmış bir lineer regresyon tahmin edin. Bunun verdiği şey, X'in x'e sabitlendiği verili etkinin bir tahmin edicisidir :

get_CATE_DRF = function(fit, newdata){
 out = predict(fit, newdata)
 ret = c()
 for(i in 1:nrow(newdata)){
 ret = c(ret, lm(out$y[,1]~out$y[,2], weights=out$weights[i,])$coefficients[2])
 }
 return(ret)
}

library(drf)
# Construct the data matrices
X<-matrix(cbind(Age, Sex), ncol=2)
Y<-matrix(cbind(B,W), ncol=2)
# Fit
DRF<-drf(Y=Y, X=X)
# Get a test point (changing this test point gives different queries)
x<-matrix(c(40, 1), nrow=1)
# Get the weights
weights <- predict(DRF, newdata=x)$weights[1,]
# Study the weights
head(X[order(weights, decreasing=T),])
# Result for given test point
(CATE_DRF = get_CATE_DRF(DRF, newdata=x))

Bazı yönlerden, bu hala çok basit bir örnek ve hatta tahmin ediciler olarak yaş ve cinsiyet ile doğrusal bir regresyon iyi çalışabilir. Önemli olan, DRF'nin burada (doğrusallık gibi) ön varsayımları olmaması ve X'in etkisi doğrusal olmadığında bile ilişkileri kendi kendine öğrenmesidir. Daha küçük örneklem boyutları için bu etkiyi tahmin etmek çok daha zorlaşıyor, ancak genel yön genellikle çok da kötü değil.

Çözüm

Bu makale, Dağılımsal Rastgele Orman yöntemini açıkladı (umarım anlaşılır bir şekilde). Yöntem, her ağacın Y yanıtını X'e göre böldüğü ve benzer dağılımlara sahip gözlemlerin bir yaprak düğümde son bulduğu bir Rastgele Ormandır. Daha sonra yeni bir x noktası bir ağaca düşürülürse, Y'nin benzer koşullu dağılımına sahip diğer xi'lerle birlikte bir yaprak düğümde son bulur . Bu, tüm ağaçların ortalaması alınarak basit bir biçimde koşullu dağılımın bir tahminini veren ağırlıklarla sonuçlanır. Bu, tamamen parametrik olmayan bir P( Y | X = x) tahmini verir.) birçok ilginç miktarın tahmin edilebileceği.

Bu makalenin sonunda, çok değişkenli bir koşullu dağılımı parametrik olmayan bir şekilde tahmin etmenin göz korkutucu bir görev olduğu konusunda uyarmak istiyoruz. Özellikle çok sayıda gözlem olduğunda ve karmaşık bir ilişkiden şüphelenildiğinde anlamlıdır. Bununla birlikte, bazen Gauss dağılımına sahip doğrusal bir model varsaymak da işe yarar. DRF'yi bu kadar çok yönlü yapan şey, parametrik bir modelin daha uygun olduğu durumlarda bile, ağırlıkların yarı parametrik bir yaklaşım için hala yararlı olabilmesidir.

Orijinal makalede veya gelecekteki potansiyel Medium makalelerinde çok sayıda ek örnek bulunabilir. DRF'nin birçok veriye bağlı görevde yardımcı olacağını umuyoruz!