Eksik değerler ve / veya düzensiz zaman serileri içeren R tahmin paketini kullanma


16

R forecastpaketinden ve örneğin zoodüzensiz zaman serileri ve eksik değerlerin enterpolasyonu için paketten etkilendim .

Benim uygulama çağrı merkezi trafik tahmini alanında, bu nedenle hafta sonları (neredeyse) her zaman eksik, hangi güzel tarafından ele alınabilir zoo. Ayrıca, bazı ayrık noktalar eksik olabilir, bunun için sadece R kullanıyorum NA.

Mesele şu: tahmin paketinin tüm güzel büyüsü eta(), auto.arima()vb. Gibi düz tsnesneler, yani eksik veri içermeyen eş zamanlı zaman serileri beklemektedir . Bence sadece eşzamanlı zaman serileri için gerçek dünya uygulamaları var, ama - bence - çok sınırlı.

Birkaç kesikli NAdeğer sorunu, sunulan enterpolasyon fonksiyonlarından herhangi birinin zooyanı sıra kullanılarak kolayca çözülebilir forecast::interp. Bundan sonra, tahmini çalıştırıyorum.

Sorularım:

  1. Daha iyi bir çözüm öneren var mı?
  2. (benim asıl sorum) En azından uygulama alanımda, çağrı merkezi trafik tahmininde (ve diğer sorun alanlarının çoğunu hayal edebildiğim kadarıyla), zaman serileri eşit değil. En azından yinelenen "iş günü" şeması veya benzeri bir şey var. Bununla başa çıkmanın ve tahmin paketinin tüm harika büyüsünü kullanmaya devam etmenin en iyi yolu nedir?

    Hafta sonlarını doldurmak, tahmini yapmak ve daha sonra NA değerlerini hafta sonlarına yeniden eklemek için verileri "sıkıştırmak" mı gerekir? (Sanırım bu bir utanç olurdu?)

    Tahmin paketini hayvanat bahçesi veya onun gibi düzensiz zaman serileri paketleriyle tamamen uyumlu hale getirme planları var mı? Evet ise, ne zaman ve hayırsa, neden olmasın?

Tahminlerde (ve genel olarak istatistiklerde) oldukça yeniyim, bu yüzden önemli bir şeyi göz ardı edebilirim.


Siteye ve öngörüye hoş geldiniz! Eşit aralıklı zaman serileri için gerçek dünya uygulamaları kesinlikle çok sınırlı değildir . Süpermarketinize tanıtım talebi ile başa çıkmak için yeterli ürüne sahip olan tahmin hakkında biraz bilgi sahibi oluyorum ve bana inanın, milyonlarca zaman serisinin (1.000 mağazada 20.000 SKU çok yaygın) gerçekten çok eşit. (Üzgünüm, ama siz bunu istediniz ...) Ama bir dakika içinde size daha yararlı bir şey bulmaya çalışacağım.
Stephan Kolassa

2
Çağrı merkezi verilerinin neden eşit olmadığına ilişkin daha açık olabilir misiniz? (Belki de "eşit aralıklı" ile ne demek istediğinizi yanlış anlıyorum.) Gördüğüm çağrı merkezi tahmin yöntemleri, gelen çağrıları genellikle "eşit aralıklı" tanımımı yerine getiren 15 dakikalık aralıklarla dolduruyor. Daha sonra, karmaşık mevsimsellikle (günlük, hafta içi, yıllık) ilgilenmeliyiz , bunun için hangi konu size yardımcı olabilir: stats.stackexchange.com/questions/44704/… Bu, sorunuza cevap veriyor mu? Değilse, başka neye ihtiyacınız olduğunu bize bildirin.
Stephan Kolassa

5
auto.arimaeksik değerleri işleyebilir.
Rob Hyndman

1
Tüm yapıcı yorumlar için teşekkürler! Stephan, verilerim iki şekilde eşitlenmedi: 1. Birçok çağrı merkezi cumartesi ve pazar günleri kapalı. Bazıları sadece pazar günleri kapalıdır. Bu nedenle, iki bitişik veri noktası arasındaki "normal" boşluk, üç gün olan Cumart'tan Mon'e kadar bir gündür. Böylece boşluk eşit değildir, yani eşit değildir. İkincisi, bir yerde rastgele eksik veriler olabilir, çünkü o gün ya da her neyse ölçüm cihazlarını açmayı unuttular. Umarım bu benim açımdan netleşir.
entreprogreur

1
Sadece (kışkırtıcı) bir düşünce. Çağrı merkezlerinin hafta sonları kapalı olduğunu söylüyorsanız. O zaman eksik verileriniz olmaz. Zaman serileriniz Mo-Fr'yi kapsıyor. 5 gün. oldukça eşitlikçi. Hafta sonları enterpolasyon yapmak bana resmi olarak yanlış geliyor, çünkü hiçbir arama yapılmadığını ve ima ettiğiniz bilgilerin yanlış olduğunu biliyorsunuz. Verileri icat ederek asla bir tahminde bulunamayacağınızı iddia ediyorum ...
anlamı anlamına geliyor

Yanıtlar:


1

Ben bir R uzmanı değilim, bu yüzden belki daha basit bir yol var ama daha önce de karşılaştım. Daha önce yaptığım, gerçek tarihler arasındaki mesafeyi (zaman birimleri cinsinden) ölçen ve bunu mevcut zaman serilerinde yeni bir sütuna kaydeden bir işlev uygulamaktır. Yani şöyle bir şeyimiz var:

index/date | value | distance  
01.01.2011 |  15   |   1  
02.01.2011 |  17   |   3  
05.01.2011 |  22   |   ..   

Bu şekilde, zaman diziniz henüz zamandaki gerçek bir nokta dizisiyle (veya yanlış biçim veya herhangi bir şeyle) ilişkili değilse, yine de onunla çalışabilirsiniz.

Ardından, sizin için yeni bir zaman serisi oluşturan bir işlev yazarsınız, şöyle:

İlk olarak, zaman dizisinin seçtiğiniz tarihler arasında kaç tane zaman birimi olacağını hesaplarsınız ve bu zaman çizelgesini hayvanat bahçesi veya ts veya boş değerlerle ne olursa olsun yaratırsınız.

İkincisi, eksik zaman serisi dizinizi alırsınız ve bir döngü kullanarak, seçtiğiniz sınırlara göre değerleri doğru zaman çizelgesine doldurun. Birim mesafesinin bir olmadığı bir güne geldiğinizde (günler (birimler) eksik), enterpolasyonlu değerleri doldurursunuz.

Şimdi, bu sizin işleviniz olduğundan, aslında enterpolasyon yapmayı seçebilirsiniz. Örneğin, mesafe iki birimden azsa, standart doğrusal enterpolasyon kullanmaya karar verirsiniz. Bir hafta eksikse, başka bir şey yaparsınız ve belirli bir eksik tarih eşiğine ulaşılırsa, veriler hakkında bir uyarı verirsiniz - gerçekten hayal etmek istediğiniz her şey.

Döngü bitiş tarihine ulaşırsa, yeni ts'nizi döndürürsünüz.

Böyle bir işlevin avantajı, boşluğun uzunluğuna bağlı olarak farklı enterpolasyonlar veya taşıma prosedürleri kullanabilmeniz ve seçtiğiniz formatta temiz bir şekilde oluşturulmuş bir seri döndürebilmenizdir. Yazıldıktan sonra, her türlü tablo verisinden temiz ve güzel kazançlar elde etmenizi sağlar. Umarım bu sana bir şekilde yardımcı olur.


Yardımcı cevap için teşekkürler, IMA! Yani, şimdi ne yapıyorum: ayrık eksik değerler için, eksik veri doldurmak için enterpolasyon (kullanıcı tarafından sağlanan "ayarlamalar" yanı sıra) kullanın. IMA, daha da geliştirmeye verdiğiniz cevabınız çok faydalı. Hafta sonu gibi "düzenli" eksik veriler için, verilerimi yalnızca öngörme amacıyla ikinci bir "sahte" ts biçimine dönüştürüyorum ve ardından sonucu tekrar "doğru" zaman serisine dönüştürüyorum. hafta sonunda. Hafta sonlarında düzenli "boşlukları" nasıl ele alacağınıza dair daha zarif bir öneri için hala minnettar olurum.
entreprogreur

@entreprogreur, cevap vermedim, IMA cevap verdi. IMA burada tam kredi alır. Biçimlendirmeyi ince ayarladım, böylece güzel görünecekti.
gung - Monica'yı eski durumuna getirin

1

Daha ileri istatistiksel tedaviden önce enterpolasyon uygularken çok dikkatli olmalısınız. İnterpolasyonunuz için yaptığınız seçim verilerinize bir önyargı getirir. Bu kesinlikle kaçınmak istediğiniz bir şeydir, çünkü tahminlerinizin kalitesini değiştirebilir. Benim görüşüme göre, zaman içinde düzenli aralıklarla ve etkinliklerde bir durmaya karşılık gelen eksik değerler için benim düşünceme göre, bu günleri modelinizden çıkarmak daha doğru olabilir. Çağrı merkezinizin küçük dünyasında (bu konuda inşa ettiğiniz model), var olmayan bir faaliyetin ölçümlerini icat etmek yerine, zamanın kapandığında sadece durduğunu düşünmek daha iyi olabilir. Öte yandan ARIMA modeli, verilerin eşit aralıklı olduğu varsayımı üzerine istatistiksel olarak oluşturulmuştur. Bildiğim kadarıyla ARIMA'nın davanıza uyumu yok. Gerçek iş günlerinde birkaç ölçüm kaçırıyorsanız, enterpolasyon kullanmak zorunda kalabilirsiniz.


0

@Remi'nin belirttiği gibi, bu verilerdeki modeli tahmin etmeden önce verileri enterpolasyona sokmam. Bu kötü bir fikir. Aşırı bir örnek: Ocak 2013 ve Ocak 2014 arasında iki veri noktanız olduğunu hayal edin. Şimdi, aralarında 10 aylık nokta enterpolasyon yapın: Şubat - Aralık 2013 arasında ve aylık tarihte regresyon çalıştırın. Gerçekte bu o kadar da kötü olmayacak, ama aynı fikir: istatistiklerinizi en iyi şekilde şişireceksiniz.

Gidilecek yol eksik verileri işleyen zaman serisi yöntemlerini kullanmaktır. Örneğin, durum uzayı yöntemleri. Astsa R paketine bir göz atın . Zaman serisi analizi üzerine mükemmel bir kitapla birlikte gelir. Bu, eksik verileri iyi işleyecektir. Matlab şimdi ssm paketinde de benzer bir işlevselliğe sahip . Modellerinizi durum uzayı formuna dönüştürmeyi öğrenmelisiniz, ancak auto.arima“sihir” den uzaklaşmak istiyorsanız bunu yine de öğrenmelisiniz .

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.