AUC değeriyle bireysel sürücüleri değerlendirmek doğru mu?

Aug 18 2020

Temel olarak, her biri birden çok değişkenden oluşan üç farklı sürücünün önemini belirlemek için AUC'nin kullanımı hakkında şefimle bir görüşmem var. Genel model için AUC değerine bakabileceğimi ve ardından bir seferde yalnızca bir sürücü kullanarak benzer bir modeli çalıştırmaya çalışabileceğimi, her sürücü için AUC değerini elde edebileceğimi ve ardından her sürücünün önemini değerlendirebileceğimi iddia ediyor.

Inherent driver: 2 variables
Static driver: 2 variables
Dynamic driver: 7 variables

Dolayısıyla, ikili bir ElasticNet modelinden elde ettiğim AUC çıktım şu olacaktır:

Overall AUC score (all drivers included): 0.89

Sonra aynı ElasticNet modelini gerçekleştiriyorum, ancak sadece inherent driverve bağımlı değişkende seçili iki değişkenim var. Ve sonraki sürücüler vb. İle devam edin. AUC değerleri aşağıdaki gibidir:

Inherent driver:                          0.58
Static driver:                            0.67
Dynamic driver:                           0.88
  1. O halde sonuç bana dynamic drivergörece daha önemli olduğumu mu yoksa 0'ı 1'den ayırt etmede daha iyi olduğunu mu söylüyor ?
  2. Bu istatistiksel olarak sağlam bir yöntem mi? Değilse başka nasıl değerlendirebilirim?

DÜZENLE:

       V1  dependent  V2    V3    V4     V5    V6     V7    V8   V9     V10   V11
1      -1.3     0     494.  34.1  2.23   43.0  4.58   46.7  283. 0.442  34.5   0
2      -4.2     0     231.  16.9  1.01   69.4  0      66.4  277. 0.959  11.1   0
3     -11.7     0     646.  132.  20.5   88.0  0.063  34.0  291. 5.63   21     0
4      -9.3     0     44.0  16.4  0.397  39.1  2.37   77.6  279. 7.24   31.8   0
5     -14.2     0     88.2  128.  40.6   83.4  1.09   47.2  284. 8.23   2.92   0
6      19.4     0     382.  49.4  1.15   54.4  0.914  53.6  279. 3.03   16.8   1

df <- df %>% select(V1, dependent, V2, V3, V4, V5, V6, V7, V8, V9, V11, V12)
training.samples <- df$dependent %>% createDataPartition(p = 0.8, list = FALSE) train <- df[training.samples, ] test <- df[-training.samples, ] x.train <- data.frame(train[, names(train) != "dependent"]) x.train <- data.matrix(x.train) y.train <- train$dependent
x.test <- data.frame(test[, names(test) != "dependent"])
x.test <- data.matrix(x.test)
y.test <- test$dependent list.of.fits.overall.model <- list() for (i in 0:10){ fit.name <- paste0("alpha", i/10) list.of.fits.overall.model[[fit.name]] <- cv.glmnet(x.train, y.train, type.measure = c("auc"), alpha = i/10, family = "binomial", nfolds = 10, foldid = foldid, parallel = TRUE) } predicted <- predict(list.of.fits.overall.model[[fit.name]], s = list.of.fits.overall.model[[fit.name]]$lambda.1se, newx = x.test, type = "response")
#PLOT AUC
pred <- prediction(predicted, y.test)
perf <- performance(pred, "tpr", "fpr")
plot(perf)
abline(a = 0, b = 1, lty = 2, col = "red")
auc_ROCR <- performance(pred, measure = "auc")
auc_ROCR <- [email protected][[1]]
auc_ROCR

Şimdi tüm elastik-ağ modelleme prosedürünü (optimum sırt / kement değiş tokuşu ve optimal ceza değeri için arama) sadece iki değişkenle tekrarlıyorum. Temel olarak aşağıdakileri değiştiriyorum:

df.inherent <- df %>% select(V1, dependent, V2)
training.samples <- df.inherent$dependent %>% createDataPartition(p = 0.8, list = FALSE) train <- df.inherent[training.samples, ] test <- df.inherent[-training.samples, ] x.train <- data.frame(train[, names(train) != "dependent"]) x.train <- data.matrix(x.train) y.train <- train$dependent
x.test <- data.frame(test[, names(test) != "dependent"])
x.test <- data.matrix(x.test)
y.test <- test$dependent list.of.fits.inherent <- list() for (i in 0:10){ fit.name <- paste0("alpha", i/10) list.of.fits.inherent[[fit.name]] <- cv.glmnet(x.train, y.train, type.measure = c("auc"), alpha = i/10, family = "binomial", nfolds = 10, foldid = foldid, parallel = TRUE) } predicted <- predict(list.of.fits.inherent[[fit.name]], s = list.of.fits.inherent[[fit.name]]$lambda.1se, newx = x.test, type = "response")

Sonunda, @EDM'nin yorumlarda sorgulandığı son şey.

Yanıtlar

2 EdM Aug 20 2020 at 00:47

Modellemeniz için cezalandırmanın önemli olduğu göz önüne alındığında, potansiyel olarak iyi bir yoldasınız, ancak EAA'nın kalite ölçütünüzdeki potansiyel hata hakkındaki bilgileri dahil etmeniz gerekiyor. Bu tahminlerin ne kadar değişken olabileceğini bilmiyorsanız, AUC 0,58 ile 0,67 arasında bir değeri karşılaştıramazsınız.

Bunu halletmenin basit bir yolu, işlemi şu anda gerçekleştirdiğiniz tek bir bölüm yerine birden çok (örneğin birkaç yüz) test / eğitim bölmesiyle tekrarlamaktır. Birkaç bin vakanın altında herhangi bir şeye sahip veri kümelerinde tek test / tren bölünmeleri güvenilmez olabilir . (11 tahminciye sahip cezasız bir modele güvenilir bir şekilde uyması için azınlık sınıfında muhtemelen 200'den az vakaya ihtiyacınız olacağından, birkaç bin vakanız olmadığını ve bu nedenle her durumda daha fazla yeniden örnekleme yapmanız gerektiğini varsayıyorum.) tahmin alt kümeleri arasındaki herhangi bir farkın istatistiksel olarak güvenilir olup olmadığını ölçmek için (birkaç yüz) test seti AUC değerleri arasındaki değişkenlik.

Birden çok test / tren bölünmesi yerine önyüklemeye dayalı benzer bir yaklaşımla daha iyi durumda olabilirsiniz. İlk önce tüm verileri tam bir modele uyacak şekilde kullanırsınız. Bu şekilde, yaklaşımınızın aksine, oluşturmak için mevcut tüm verileri kullanan ve belirli bir test / eğitim ayrımının değişkenlerine bağlı olmayan tam bir model elde edersiniz.

Daha sonra tüm modelleme sürecini (seçim alphave lambdadahili çapraz doğrulama dahil) veri setinin birkaç yüz önyükleme örneği üzerinde tekrarlarsınız ve tüm veri setini her durumda test seti olarak kullanırsınız. İlgili tüm popülasyondan birden fazla örnek üzerinde model oluşturmaya ve ardından bunları popülasyon üzerinde test etmeye benzer olan önyükleme ilkesi altında . Böylece, modelleme sürecinin kalitesine ilişkin makul bir tahmin elde edersiniz: katsayı değerlerinde iyimserlik (aşırı uyum) ve kalite ölçümünüzün tahminlerindeki önyargı ve değişkenlik.

Eğer son tedbir olarak AUC kullanmayı tercih bile modelleme, açısından, sen çapraz doğrulama seçimi için kriter olarak yerine AUC sapma olmak kullanarak olmalı alphave lambda. AUC (veya C-endeksi) , modeller arasında ayrım yapmak için çok hassas değildir . Ayrıca, lambda.1sebu durumda iyi bir seçim olup olmadığını dikkatlice düşünün . Bu, cimri bir model elde etmenize yardımcı olur, ancak başlamak için çok az tahmin ediciyle (ikinci örneğinizde yalnızca 2), lambda.minçapraz doğrulama hatasını en aza indiren değerle çok daha iyi durumda olabilirsiniz (yine, en iyi sonuç sapma ile yapılır. değerlendirme AUC ile yapılmalıdır).