Zaman serisi tahmini için veri kümesini nasıl bölerim?


22

Pastaneden tarihi satış verilerim var (günlük, 3 yıldan fazla). Şimdi gelecekteki satışları tahmin etmek için bir model oluşturmak istiyorum (hafta içi, hava değişkenleri vb. Özellikleri kullanarak).

Modelleri yerleştirmek ve değerlendirmek için veri setini nasıl bölmeliyim?

  1. Kronolojik bir tren / validasyon / test bölümü olması gerekiyor mu?
  2. Daha sonra hiperparametreyi tren ve validasyon seti ile ayarlayabilir miyim?
  3. (İç içe geçmiş) çapraz doğrulama, zaman serisi sorunu için kötü bir strateji midir?


EDIT

@ ene100 tarafından önerilen URL'yi takip ettikten sonra karşılaştığım bazı bağlantılar:

  • Rob Hyndman teoride ve pratikte "haddeleme tahmini orijini" ni tarif ediyor (R kodu ile)
  • Haddeleme öngörme orijini için diğer terimler "ileriye yönelik optimizasyondur" ( burada veya burada ), "yuvarlanma ufku" veya "hareketli menşe" dir
  • Bu tekniklerin yakın gelecekte scikit-learning'e entegre olmayacağı görülüyor, çünkü “bu tekniklerin talebi ve seminalitesi belirsiz” ( burada belirtiliyor ).

Ve bu , zaman serisi çapraz doğrulama için başka bir öneri.

Yanıtlar:


8

Rob Hyndman'ın blogundaki bu bağlantı yararlı olabilecek bazı bilgilere sahiptir: http://robjhyndman.com/hyndsight/crossvalidation/

Tecrübelerime göre, verileri kronolojik kümelere (yıl 1, yıl 2 vb.) Bölmek ve zaman içinde parametre kararlılığını kontrol etmek çok sağlam bir şey oluşturmakta çok yararlıdır. Ayrıca, verileriniz mevsimsel ise veya gruplara ayırmanın başka bir açık yoluna sahipse (örneğin coğrafi bölgeler), o zaman bu alt gruplarda parametre stabilitesini kontrol etmek ayrıca modelin ne kadar sağlam olacağını ve uygun olup olmadığını belirlemek için yardımcı olabilir ayrı veri kategorileri için ayrı modeller.

İstatistiksel testlerin faydalı olabileceğini düşünüyorum, ancak sonuçta "koku testi" ni geçmesi gerekiyor.


3

1) Teknik olarak konuşursak, eğer AIC ve benzer kriterler kullanıyorsanız, örnekleme denemenize gerek yoktur, çünkü fazladan takma önlemeye yardımcı olurlar.

3) Standart CV'yi nasıl yapabileceğinizi anlamıyorum, çünkü bazı eksik değerleri olan bir zaman serisi modeli eğitimi anlamına geliyor. Bunun yerine, eğitim için yuvarlanan bir pencere kullanmayı deneyin ve yanıtı pencereyi takip eden bir veya daha fazla noktadan tahmin edin.


3
Zaman serilerindeki AIC, genellikle bir dönem ilerideki tahmin hatasına dayanır. Dinamik n-vadeli gelecek tahmin performansı hakkında pek bir şey anlatmıyor. Dolayısıyla, kesinlikle yeterli değil.
Aksakal

Bir referans verebilir misiniz?
James

1

Sorunlara genellikle Bayes bakış açısıyla yaklaşıyorum. Bu durumda, aşırı kullanma kullanmayı düşünürdüm bir strateji olarak . Bu, verileriniz için bir olasılık oluşturmak anlamına gelir, ancak sonuçlarınızın bazılarını atlayın. Bu değerleri eksik olarak kabul edin ve karşılık gelen değişkenleri kullanarak bu eksik sonuçları modelleyin. Sonra hangi verinin çıkarıldığı üzerinden döndürün. Bunu, örneğin 10 katlı bir CV prosedürünün içinde yapabilirsiniz.

Bir örnekleme programının içine uygulandığında, bu, her adımda ihmal edilen veri değerinizin (parametrelerinizin yanı sıra) bir aday değeri çizdiğiniz ve önerilen modelinize karşı olasılığını değerlendirdiğiniz anlamına gelir. Durağanlık elde ettikten sonra, tahmin hatasını değerlendirmek için kullanabileceğiniz modelinize verilen karşı örneklenmiş değerlere sahipsiniz: bu örnekler "modelim bu değerlerin yokluğunda nasıl görünürdü?" Sorusuna cevap verir. Bu tahminlerin, katsayı tahminlerinde mevcut olan belirsizlikten de belirsizliği miras alacağını unutmayın; bu nedenle, öngörülen değerlerin tümünü topladığınızda, örneğin 1 Mart 2010'da, o tarih için bir tahmin dağılımına sahip olacaksınız .

Bu değerlerin örneklenmiş olması gerçeği , her adımda örneklenmiş bir sonuç değerine sahip olduğunuz için, eksiksiz bir veri serisinin mevcut olmasına bağlı olan (örneğin, hareketli ortalama) hala kullanabileceğiniz anlamına gelir.


1

Senin durumunda çok fazla seçenek yok. Görünüşe göre sadece bir fırınınız var. Bu nedenle, örnek dışı bir test yapmak için tek seçeneğiniz zaman ayırmadır, yani eğitim örneği başlangıçta zamanın son dönemlerine kadar olacaktır ve bu noktadan bugüne kadar elde tutma.

Modeliniz zaman serisi değilse, o zaman farklı bir hikaye. Örneğin, satışlarınız varsayt=f(t)+εt, nerede f(t) mevsimsel aptallar, hava durumu vb. gibi farklı dışsal şeylerin bir işlevidir. ys<t, o zaman bu dinamik bir zaman serisi modeli değildir. Bu durumda, elde tutma örneğini günlerin rasgele altkümesi, geçmişin herhangi bir döneminden bir ay gibi farklı şekillerde oluşturabilirsiniz.


Gelecek vaat ediyor. Y_s <= t içindeki "s" alt öğesi nedir?
Ocak'ta 15:15

Eğer zaman tahmin ediyorsanız to zaman hiçbirini kullanmıyorsun ys, nerede s<t.
Aksakal

Sanırım unlu satışlarım eksojen faktörlere bağlı. Hisse senedi fiyatları gibi kesinlikle dinamik bir zaman serisi modeli olduğunu sanmıyorum. Verilerime göre, her zamanki 5 katlı CV'ye sahip Ortalama Ortalama Hatası, burada tarif edildiği gibi kıvrımların kronolojik sırasını koruyan 5 katlı zaman serisi CV'den sadece biraz daha büyüktür (ör., ExtraTreesRegressor için 30.7 ve 33.8) . Bunun dinamik bir model için ampirik olarak test etmenin geçerli bir yolu olup olmadığından emin değil misiniz?
02:15 'de 02

ARIMA gibi bir şey dinamik bir model olacaktır. Satışlar genellikle kalıcı, yani bugünün satışları dünkü gibidir.
Aksakal

0

Yasal Uyarı: Burada anlatılan yöntem olup değil Edebiyatının kapsamlı okuma dayalı. Bu, homojen olmayan veri kaynaklarının varlığında bir problemin olduğu, nispeten kısa giriş penceresi uzunlukları olan (çok uzun zaman aralıklarına göre düşük / düşük bağımlılık olduğu varsayılarak) çok değişkenli zaman ölçümleri analizi için bir K-kat CV yöntemini doğaçlama girişimimdir. veri toplama dönemi.

İlk olarak, gözlem dizisi, window_length uzunluğunda bir dizi gözlem tarihçesine ve pencereler arasında adım 1'e (adımsız) dönüştürülür. Daha sonra, ilke, pencere veri setini window_length'ten (ancak model örneklerinin sayısından daha fazla) çok daha uzun "shards" olarak bölmek ve parçaları (oyun kartları gibi) model örneklerini ayırmak için doğrulama verileri olarak dağıtmaktır. Modellerin daha temiz bir şekilde ayrılmasını sağlamak için, her eğitimin başlangıcında window_length karantina penceresi tüm eğitimlerden uzak tutulur.

Modeller, kendileri dışındaki tüm kırıklar üzerinde eğitilmiş ve doğrulama, kendi kırıkları üzerinde gerçekleştirilmiştir. Modellerin toplanmasının / derlenmesinin onaylanması, her bir kırığın ilgili alt modeli tarafından ele alındığı tüm kırıklar üzerindeki doğrulama hatasını toplayarak yapılır. Görünmeyen veriler üzerinde test, tüm eğitilmiş modellerin çıktılarının bir ortalaması (veya diğer uygun bir kombinasyon) kullanılarak yapılabilir.

Bu yöntem, tüm veri toplama süresi boyunca aynı olan sisteme (ve veri kaynaklarına) olan bağımlılığı azaltmayı amaçlamaktadır. Ayrıca verilerin her kaba kısmına model üzerinde aynı etkiye sahip olması amaçlanmıştır. Karantina pencerelerinin eğitime zarar vermesine izin vermemek için, kırılma uzunluğunun (tipik olarak) günlük, haftalık ve yıllık çevrimler gibi verilerde (görünmesi beklenen) görünen sürelerle çok iyi hizalanmadığı bir noktadır.

Topluluk modeli belki de tamamen yeni verileri kötü şekilde ele alabilir. (Henüz bilmiyorum.)

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.