Zaman serisi model seçimi için k-kat çapraz doğrulama kullanma


70

Soru: Bir şeyden emin olmak istiyorum, zaman serileri ile k-fold cross-geçerlilik kullanımı basit mi, yoksa kullanmadan önce özel bir dikkat gösterilmesi gerekiyor mu?

Arkaplan: Her 5 dakikada bir veri örneği ile 6 yıllık bir zaman serisini (yarı markov zinciri ile) modelleyeceğim. Birkaç modeli karşılaştırmak için, verileri 6 yıl içinde ayırarak 6 kat çapraz doğrulama kullanıyorum, bu nedenle eğitim setlerim (parametreleri hesaplamak için) 5 yıl uzunluğunda ve test setlerinin uzunluğu 1 yıl. Zaman sırasını dikkate almıyorum, bu yüzden farklı setlerim:

  • kat 1: eğitim [1 2 3 4 5], test [6]
  • kat 2: eğitim [1 2 3 4 6], test [5]
  • kat 3: eğitim [1 2 3 5 6], test [4]
  • kat 4: eğitim [1 2 4 5 6], test [3]
  • kat 5: eğitim [1 3 4 5 6], test [2]
  • kat 6: eğitim [2 3 4 5 6], test [1].

Her yıl birbirinden bağımsız olduğu hipotezini yapıyorum. Bunu nasıl doğrulayabilirim? Zaman serileri ile k-kat çapraz doğrulama uygulanabilirliğini gösteren herhangi bir referans var mı?


Ben Helful buldum bu makalede, bir göz atın francescopochetti.com/...
Henok S Mengistu'dan

Yanıtlar:


69

Zaman serileri (veya kendinden sipariş verilen diğer veriler) çapraz doğrulama için sorunlu olabilir. Bazı modeller 3. yılda ortaya çıkarsa ve 4-6.

Zaman serileri için bazen daha ilkeli olan bir yaklaşım, prosedürünüzün böyle bir şey olacağı ileri zincirlemedir:

  • kat 1: eğitim [1], test [2]
  • 2. kat: eğitim [1 2], test [3]
  • 3. kat: eğitim [1 2 3], test [4]
  • kat 4: eğitim [1 2 3 4], test [5]
  • kat 5: eğitim [1 2 3 4 5], test [6]

Bu, tahmin verilerinde göreceğiniz durumu daha doğru bir şekilde modelleyerek geçmiş veriler üzerinde modelleme yapacağınız ve ileriye dönük verileri tahmin edebileceğiniz bir modeldir. Ayrıca, modellemenizin veri boyutuna bağımlılığı hakkında bir fikir verecektir.


1
Teşekkürler. Anlıyorum, Zach'in dediği gibi, bunu yapmanın kurallı yolu. Ve nedenini anlıyorum. Bununla ilgili problemim, veri büyüklüğünün değişimini hesaba katacağı gerçeğidir, bu yüzden modelimin "gerçek" genelleme hatasını alamayacağım. Ancak karışık bir hata: genelleme ve veri boyutu. Zaman serilerindeki çapraz onaylama ile ilgili başka referanslar (M.Hyndman dışında) biliyor musunuz? Beni yanlış anlamayın, söylediklerinize ve M. Hyndman'ın söylediklerine güvenmiyorum, mükemmel bir anlam ifade ediyor. Bir problem üzerine birkaç bakış açısına sahip olmak isterdim
Mickaël S

Korkarım böyle bir referans bilmiyorum ama bir başkası tanıyorsa bir tanesini görmek isterim.
Ken Williams

1
@Wayne, bu çözümün her katmanda daha fazla yıllarca eğitim verisi kullandığını kastediyorum. Verilerimde yıllar arasında kesinlikle farklılıklar var, ancak belirgin bir eğilim veya mevsimsellik yok.
Mickaël S

3
@Mickael: Kat 1'i kullanabilirsiniz: tren [1 2] testi [3]; kat 2: tren [2 3] testi [4]; kat 3: her katla birlikte daha fazla veri kullanmaktan endişe ediyorsanız, [3 4] testi [5], vb. Tahminime göre, yarı-MC tekniği ile, hiçbir eğilim olmasa bile, yıllar boyunca gerçekten mücadele edemezsiniz.
Wayne

3
@ MickaëlS: Bu makaleyi sciencedirect.com/science/article/pii/S0020025511006773 olarak buldum ve ilgini çekebileceğini düşündüm. Bu 'kanonik' yaklaşımı diğer iki yöntemle karşılaştırırlar - bir 'blok boostrap' ve 'bağımlı bırakma' yaklaşımı.
thebigdog 25:13

26

Zaman serisi modelimi çapraz doğrulama için kullandığım yöntem, yuvarlanma esasına göre çapraz doğrulamadır. Eğitim amaçlı küçük bir veri alt kümesiyle başlayın, sonraki veri noktalarını önceden tahmin edin ve ardından öngörülen veri noktalarının doğruluğunu kontrol edin. Aynı öngörülen veri noktaları daha sonra bir sonraki eğitim veri setinin bir parçası olarak dahil edilir ve sonraki veri noktaları tahmin edilir.

Her şeyi sezgisel hale getirmek için, işte aynısı için bir resim:

görüntü tanımını buraya girin

Eşdeğer bir R kodu şöyle olacaktır:

i <- 36    #### Starting with 3 years of monthly training data 
pred_ets <- c()
pred_arima <- c()
while(i <= nrow(dt)){
  ts <- ts(dt[1:i, "Amount"], start=c(2001, 12), frequency=12)

  pred_ets <- rbind(pred_ets, data.frame(forecast(ets(ts), 3)$mean[1:3]))
	  pred_arima <- rbind(pred_arima, data.frame(forecast(auto.arima(ts), 3)$mean[1:3]))

  i = i + 3
}
names(pred_arima) <- "arima"
names(pred_ets) <- "ets"

pred_ets <- ts(pred_ets$ets, start=c(2005, 01), frequency = 12)
	pred_arima <- ts(pred_arima$arima, start=c(2005, 01), frequency =12)

accuracy(pred_ets, ts_dt)
accuracy(pred_arima, ts_dt)

Bunu kullanarak R kullanarak lojistik regresyon gibi yöntemler için herhangi bir yolu var mı?
21'de

1
@hlyates, Anladığım kadarıyla, yukarıdaki kodu biraz değiştirmeniz gerekiyor. Pred_lr (lojistik regresyona göre tahminler) ekleyin ve sütunların adını buna göre değiştirin.
Jatin Garg

22

Zaman serisi çapraz doğrulama (en azından @Rob Hyndman tarafından tanımlandığı şekilde) yapmanın "kanonik" yolu , veri kümesi boyunca "yuvarlanmaktır".

yani:

  • kat 1: eğitim [1], test [2]
  • 2. kat: eğitim [1 2], test [3]
  • 3. kat: eğitim [1 2 3], test [4]
  • kat 4: eğitim [1 2 3 4], test [5]
  • kat 5: eğitim [1 2 3 4 5], test [6]

Temel olarak, eğitim setiniz test setinden sonra oluşan bilgileri içermemelidir.


13

Çoğu durumda zaman serileri çapraz doğrulama için "gelecek" veri bloklarının kullanılmasında yanlış bir şey yoktur. Çoğu durumda, genellikle kullandığımız modeller olan sabit veri modellerine bakarım. Örneğin, bir ile bir , serinin farklarını alır ve artıklara sabit veriler için bir model uydurursunuz.d > 0 dARIMA(p,d,q)d>0d

Çapraz doğrulamanın model seçme aracı olarak çalışması için, eğitim ve test verileri arasında yaklaşık bağımsızlığa ihtiyacınız vardır. Zaman serisi verilerindeki sorun, bitişik veri noktalarının genellikle oldukça bağımlı olmalarıdır, bu nedenle standart çapraz doğrulama başarısız olur. Bunun çözümü , test numunesinin her iki tarafında test numunesi ile eğitim numuneleri arasında bir boşluk bırakılmasıdır . Test örneğinden önce de bir boşluk bırakmanızın nedeni, zaman içinde ileri veya geri hareket ettiğinizde bağımlılığın simetrik olmasıdır (korelasyonu düşünün).

Bu yaklaşımı olarak adlandırılan yaklaşımı çapraz doğrulama (bırakmak silin üzerinden test numunesinin iki tarafında gözlemler) ve açıklanan bu kağıt. Örnekte, bu şuna benzer:v hhvvh

  • kat 1: eğitim [1 2 3 4 5 saat], test [6]
  • kat 2: eğitim [1 2 3 4 sa. h6], test [5]
  • kat 3: eğitim [1 2 3h h5 6], test [4]
  • kat 4: eğitim [1 2h h4 5 6], test [3]
  • kat 5: eğitim [1 saat h3 4 5 6], test [2]
  • kat 6: eğitim [h2 3 4 5 6], test [1]

H'nin eğitim örneğine ait gözlemlerin bu tarafta silindiğini gösterdiği yerde.


3

@ Thebigdog tarafından yorumlandığı gibi, Bergmeir ve ark. Çapraz zamanlamayı durağan zaman serileri bağlamında tartışır ve İleri Zincirleme'nin (diğer cevaplayıcılar tarafından önerilen) yararsız olduğunu belirler. Not: İleri Zincirleme, bu yazıda Son Blok Değerlendirmesi olarak adlandırılmıştır:

Standart 5 katlı çapraz doğrulama kullanıldığında, son hatanın yetersiz veya az tahmin edilip edilmediğine ilişkin olarak verilerdeki bağımlılıkların pratik bir etkisi bulunamamıştır. Aksine, son blok değerlendirmesi çapraz onaylama ve bloklama çapraz onaylamadan daha az sağlam hata önlemleri verme eğilimindedir.

" Zaman serisi tahmin modellerini değerlendirme: Performans tahmini yöntemleri üzerine ampirik bir çalışma " Cerqueira ve ark. bu değerlendirmeye katılır. Ancak, durağan olmayan zaman serileri için, bunun yerine Bekletme, Bekletme olarak adlandırılan bir varyasyon kullanılması önerilir. Rep-Holdout'ta, azaman serilerinde Ytest verilerinin başlangıcını işaretlemek için bir nokta seçilir . Noktanın abir pencere içinde olduğu belirlenir. Bu, aşağıdaki şekilde gösterilmektedir:

tekrar tutma resmi

Söz konusu bu makale uzun ve kapsamlı bir şekilde bu soruya verilen cevapların hemen hemen hepsinde kamuya açık kodlarla belirtilen tüm yöntemleri test ediyor . Bu, @Mattia Schmidtblaicher'in test verilerinden önce ve sonra boşluklar içerme iddiasını içerir. Ayrıca, sadece yazıyı özetledim. Makalenin asıl sonucu, zaman serisi modellerini değerlendirmek için bir karar ağacı içerir!

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.