Çapraz doğrulama zaman serisi analizi


37

Sınıflandırma ve regresyon için tahmine dayalı modeller oluşturmak için R'deki şapka paketini kullanıyorum . Caret, çapraz doğrulama veya önyükleme kayışı yoluyla model hiper parametrelerini ayarlamak için birleştirilmiş bir arayüz sağlar. Örneğin, sınıflandırma için basit bir 'en yakın komşular' modeli oluşturuyorsanız, kaç tane komşu kullanmalısınız? 2? 10? 100? Caret, verilerinizi yeniden örnekleyerek, farklı parametreler deneyerek ve hangisinin en iyi tahmine dayalı doğruluğu sağladığına karar vermek için sonuçları bir araya getirerek bu soruyu cevaplamanıza yardımcı olur.

Bu yaklaşımı seviyorum, çünkü model hiper parametrelerini seçmek için sağlam bir metodoloji sunuyor ve son hiper parametrelerini seçtikten sonra, sınıflandırma modelleri için doğruluğu kullanarak modelin ne kadar iyi olduğunu belirten çapraz onaylanmış bir tahmin sunuyor ve regresyon modelleri için RMSE.

Şimdi, muhtemelen rastgele bir orman kullanarak, bir regresyon modeli oluşturmak istediğim bazı zaman serisi verilerim var. Verilerimin doğası göz önüne alındığında modelimin öngörücü doğruluğunu değerlendirmek için iyi bir teknik nedir? Eğer rastgele ormanlar zaman serisi verisine gerçekten uygulanmazsa, zaman serisi analizi için doğru bir topluluk modeli oluşturmanın en iyi yolu nedir?


Soruyu gerçekten ilginç buldum. Bir soruyu takip etmek için işaretleyebileceğim bir yol var mı?
mariana soffer

1
@ mariana soffer Yukarı / aşağı okların altındaki 'Yıldız' simgesini tıklayın.
Zach,

4
Caret şimdi zaman serisi çapraz onaylamayı destekliyor - r-bloggers.com/time-series-cross-validation-5
captain_ahab

1
@Zach Bu 'eski bir yazı ama merak ediyorum yeni düşüncelerin var mı? Ardışık model geçerliliği konusunda yapılan son çalışmaların farkında mısınız?
horaceT

Yanıtlar:


10

"Klasik" k-kez çapraz doğrulama tekniği, mevcut veri setindeki her numunenin bir model yetiştirmek için (k-1) -times ve test etmek için 1 kez kullanılmasına dayanır. “Gelecekteki” verilerde zaman serisi modellerini doğrulamak çok önemli olduğundan, bu yaklaşım modelin istikrarına katkıda bulunmayacaktır.

Pek çok (en?) Zaman serisinin önemli bir özelliği, bitişik değerler arasındaki korelasyondur. IrishStat'ın belirttiği gibi, önceki okumaları model adayınızın bağımsız değişkenleri olarak kullanırsanız, bu korelasyon (veya bağımsızlık eksikliği) önemli bir rol oynar ve k-kez çapraz onaylamanın iyi bir fikir olmamasının bir başka nedenidir.

Bu sorunun üstesinden gelmenin bir yolu, verileri "aşırı örneklemektir" ve onu yeniden düzenlemektir. Dekorelasyon işlemi başarılı olursa, zaman serilerinde çapraz doğrulama kullanmak daha az sorunlu hale gelir. Ancak, gelecekteki verileri kullanarak modeli doğrulama konusunu çözmeyecektir.

Açıklamalar

Gelecekteki verilerine modeli doğrulayarak manken yapımı, test, ince ayar vb sırasında mevcut değildi yeni veriler için bekleyen ve bu konuda onu doğrulayarak, modeli inşa anlamına yeni veriler.

Verileri aşırı örnekleyerek, pratik olarak ihtiyaç duyulandan çok daha yüksek frekansta zaman serisi verilerini toplamaktan bahsediyorum. Örneğin: saatlik değişikliklerle gerçekten ilgilendiğiniz zaman, her 5 saniyede bir hisse senedi fiyatlarının örneklenmesi. Burada “örnekleme” derken “enterpolasyon”, “tahmin etme” demek istemiyorum. Veriler daha yüksek frekansta ölçülemezse, bu teknik anlamsızdır.


Gelecekteki verilere ilişkin bir modeli doğrulamanın 'klasik' yolu nedir? 'Fazla numune alma' ile ne demek istiyorsunuz? Teşekkür ederim!
Zach

Gerçek dünya zaman serisi verilerinin (özellikle finansal verilerin) istatistiksel özelliklerinin örnekleme sıklığına bağlı olarak değişebileceği belirtilmelidir. Birçok finansal zaman serisi için, periyodu ve periyodu ile örneklenen standart sapmalar arasında basit bir ilişkisi yoktur . Aslında, standart sapma örnekleme frekansı arttıkça artma eğilimindedir. Benzer şekilde korelasyon, örnekleme frekansı arttıkça azalır (bu, genel olarak Epps etkisi olarak bilinir ) ppTTppT
Chris Taylor,

@bgbg Benzer bir problemle karşı karşıyayım ve gönderinizi yeni buldum. Örnekleme ve dekorla ilgili zaman serisi verilerinin örneklendirilmesinden bahsedebilir misiniz? Zaman serisindeki hafızanın yeterince kısa olması durumunda (bir arimaya uyduğunu gösterebiliyorsa), yalnızca "çakışan olmayan" örnekler alabilir ve normal çapraz doğrulama yapabilir. Herhangi bir düşünce takdir etti.
horaceT

9

http://robjhyndman.com/researchtips/crossvalidation/ , zaman serilerinin çapraz doğrulaması için hızlı bir ipucu içerir. Zaman serileri verileri için rastgele orman kullanımı ile ilgili olarak… modelin önyükleme örnekleri kullanılarak takıldığı göz önüne alındığında garip bir seçim olmasına rağmen emin değilim. Yapay Sinir Ağları gibi ML teknikleri gibi (örneğin, örnek pdf ) kullanılabilecek klasik zaman serileri yöntemleri (örn. ARIMA) vardır . Belki de zaman serisi uzmanlarından bazıları, ML tekniklerinin zaman serisine özgü algoritmalara göre ne kadar iyi çalıştığı hakkında yorum yapabilir.


2
Bu hemen hemen baştaki çiviyi vuruyor. Makine Öğrenme tekniklerini zaman serisi analizine uygulamaya çalışıyorum.
Zach

Daha önce tahmin için rastgele ormanları kullanarak başarı elde ettim. Çıkış: biomedcentral.com/1471-2105/15/276
captain_ahab

6

İşte zaman serisi modellerinin çapraz onaylanması için bazı örnek kodlar . Ben blogumda bu kodun genişletilmiş birleşmeyle, foreach paketi kadar hız şeyler ve çapraz doğrulama olası bir xreg dönem için izin.

İşte Rob Hyndman'ın blogundaki kodun bir kopyası:

library(fpp) # To load the data set a10
plot(a10, ylab="$ million", xlab="Year", main="Antidiabetic drug sales")
plot(log(a10), ylab="", xlab="Year", main="Log Antidiabetic drug sales")

k <- 60 # minimum data length for fitting a model
n <- length(a10)
mae1 <- mae2 <- mae3 <- matrix(NA,n-k,12)
st <- tsp(a10)[1]+(k-2)/12

for(i in 1:(n-k))
{
  xshort <- window(a10, end=st + i/12)
  xnext <- window(a10, start=st + (i+1)/12, end=st + (i+12)/12)
  fit1 <- tslm(xshort ~ trend + season, lambda=0)
  fcast1 <- forecast(fit1, h=12)
  fit2 <- Arima(xshort, order=c(3,0,1), seasonal=list(order=c(0,1,1), period=12), 
      include.drift=TRUE, lambda=0, method="ML")
  fcast2 <- forecast(fit2, h=12)
  fit3 <- ets(xshort,model="MMM",damped=TRUE)
  fcast3 <- forecast(fit3, h=12)
  mae1[i,1:length(xnext)] <- abs(fcast1[['mean']]-xnext)
  mae2[i,1:length(xnext)] <- abs(fcast2[['mean']]-xnext)
  mae3[i,1:length(xnext)] <- abs(fcast3[['mean']]-xnext)
}

plot(1:12, colMeans(mae1,na.rm=TRUE), type="l", col=2, xlab="horizon", ylab="MAE",
     ylim=c(0.65,1.05))
lines(1:12, colMeans(mae2,na.rm=TRUE), type="l",col=3)
lines(1:12, colMeans(mae3,na.rm=TRUE), type="l",col=4)
legend("topleft",legend=c("LM","ARIMA","ETS"),col=2:4,lty=1)

Sonuçlar


Selam Zach. Zaman serili regresyon modeline uygun terim sayısını tespit etmek için Hyndman kodunun biraz farklı bir versiyonunu uyguladım. Ne yazık ki, CV hata grafiği, terimlerin sayısını doğru bir şekilde seçmem konusunda bana soru soran birkaç yerel minima gösterdi. Tam sorun burada açıklanmıştır . Daha önce benzer bir şeyle karşılaştın mı?
jroberayalas,

5

Zaman serisi verileriniz varsa, "serbestlik derecesi problemi" olabilir. Örneğin, saatlik aralıklarla 4 gözleminiz varsa ve 1 dakikalık aralıklarla 241 gözlem kullanmaya karar verirseniz, 241 gözleminiz vardır, ancak bunlar bağımsız değildir. Bu 241 değerleri / ölçümleri analitik bir pakete gönderdiğinizde, paket, kendi sihrini gerçekleştirmeye devam ettikçe, bunların 241 bağımsız değerler olmasını bekleyebilir. Zaman serisi verileriniz varsa, analizlerinizi yükseltmeniz gerekebilir. Bahsettiğiniz programı bilmiyorum ama benim açımdan makul bir tahmin (yanlış olabilir!) Testlerinin (F testleri / T testleri ... vb.) Muhtemelen sorun kümenize uygulanmadığını tahmin ediyorum.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.