Makine öğrenimi ile birkaç dönemin öngörülmesi


9

Son zamanlarda Time Series bilgimi tekrar topladım ve makine öğrenmesinin çoğunlukla yalnızca bir adım önde tahminler verdiğini fark ettim.

Bir adım önde tahminlerle kastediyorum, örneğin saatlik verilerimiz varsa, sabah 11'den 11'e ve sabah 12'den 11'e tahmin etmek için verileri kullanın.

resim açıklamasını buraya girin

Makine öğrenim yöntemleri bir adım önde tahminler üretebilir mi? H-ileriye yönelik tahminlerle, örneğin saatlik verileri varsayarak, 11,12,13,14,15,16,17 'için tahminler almak için 7 adımlı bir tahmin yapmak üzere 10: 00'dan gelen verileri kullandığımızı kastediyorum. saat.

Örnek resim: resim açıklamasını buraya girin

Ana sorumla ilgili merak ediyorum:

  • İleriye dönük tahminler yapmak için makine öğrenimi kullanan kimsenin görmemesinin nedenleri nelerdir?
  • Makine öğrenimini kullanan bir yöntem varsa, ARIMA'dan daha mı az mı daha doğrudur?

Yanıtlar:


7

(Bunun bir kısmı önceki bir yazımdan alınmıştır ) Her şeyden önce, çok aşamalı seri tahmini yapmak için iki farklı yolu ayırt etmeniz gerekir: Özyinelemeli tahmin ve doğrudan tahmin:

  • Özyinelemeli öngörmede (yinelenen öngörme olarak da adlandırılır) modelinizi yalnızca bir adım ileriye yönelik tahminler için eğitirsiniz. Eğitim bittikten sonra, istediğiniz adım tahmini ufkuna ulaşıncaya kadar son modelinizi 1 adım önde, 2 adım önde vb . Bunu yapmak için, bir sonraki adımı oluşturmak üzere birbirini izleyen her adımdan tahmini modele geri beslersiniz. Bu yaklaşım ARIMA ve üstel düzleştirme algoritmaları gibi geleneksel tahmin algoritmaları tarafından kullanılır ve ayrıca (bkz Makine Öğrenimi tabanlı tahmini için kullanılabilen bu yayını bir örnek için, ve bu yazı bazı tartışma için).n
  • Doğrudan tahmin Eğer çalıştığınız böylece (her adım için ayrı bir model eğitmek zaman "doğrudan" tahmin olduğunu yerine ulaşma adım önde yinelemeli adımları. Bkz Ben Taied vd. Direkt tahmin bir tartışma için ve daha karmaşık yaklaşımlar.nthn

Şimdi ana sorunuza cevap vermek için:

Makine öğrenim yöntemleri bir adım önde tahminler üretebilir mi?

Evet, ML yöntemleri hem yinelemeli hem de doğrudan çok aşamalı tahminleri kullanarak ileriye yönelik tahminler üretebilir. Sadece bu değil, aynı zamanda doğrudan çok aşamalı tahmin için, bunlar aslında ARIMA veya Üstel Düzeltme gibi geleneksel modellerden daha uygundur. Bununla birlikte, doğrudan çok adımlı öngörme için, modelinizi buna göre tahmin etmek ve eğitmek istediğiniz ileriye dönük adımları önceden belirtmeniz gerektiğini, yinelemeli öngörme için ise modelinizi istediğiniz sonraki adımlar için kullanabileceğinizi unutmayın. .

Dahası Chevillon & Hendry bazı durumlarda doğrudan çok adımlı öngörmenin özyinelemeli öngörmeden daha doğru olduğunu iddia eder - bu da ML'nin geleneksel yöntemlerden daha doğru olacağını ima eder.

Diğer sorularınız için:

  • İleriye dönük tahminler yapmak için makine öğrenimi kullanan kimsenin görmemesinin nedenleri nelerdir?

Birçok kişi, özellikle nöral ağları kullanarak çok adımlı tahmin için ML'yi kullanıyor: Hyndman'ın R Forecast paketinde bulunan Koronentzes'in nnfor yöntemi, Amazon'un DeepAR modeli ve diğerleri.

XGBoost birkaç Kaggle zaman serisi yarışmasında da başarıyla kullanılmıştır.

Bkz. Bontempi ve diğ. Genel bir tartışma için.

  • Makine öğrenimini kullanan bir yöntem varsa, ARIMA'dan daha mı az mı daha doğrudur?

Bu açık bir sorudur ve açıkçası verilere ve kişinin öngördüğü uygulamaya bağlıdır.


1

Son birkaç aydır anomali tespiti için zaman serileri ile oynuyorum ve deneyimlerimi sizlerle paylaşabilirim.

Birlikte çalıştığım zaman serileri, iki mevsimsellik (günlük ve haftalık), trend olmayan ve gün ışığında birçok zirve ile karakterize edildi.

Birkaç deney yaptım ve sonra LSTM sinir ağlarına dayanan bir model seçtim çünkü benim durumumda arima'dan daha iyi performans gösterdi, ancak elbette istatistikteki her şey gibi genel bir çözüm yok.

Bir nöral ağ ile gelecekte birden fazla zaman adımını tahmin etmek oldukça basittir, bir yerine N değerleri vermeniz gerekecektir ve N çıkışı gerçek N gözlemleriyle karşılaştırılacaktır.

Deneyimlerime göre, düşük bir N (1 diyelim) kullanarak, modelin, mevsimselliği gerçekten "öğrenmeden" yeniyi tahmin etmek için geçmişte kesinlikle birkaç adım kullanacağını söyleyebilirim. Öte yandan, N mutlak değerini artırarak mevsimsellikler öğrenilir, ancak genel doğruluk azalır.

Analizlerim için N = 4'ün (gelecekte 2 saat) iyi bir uzlaşma olduğunu gördüm.


1

Sorunuzu daha genel bir terimle cevaplamak için, makine öğrenimini kullanmak ve ileriye dönük adımlar tahmin etmek mümkündür . Zor kısmı, verilerinizi sahip olduğunuz bir matrise yeniden şekillendirmeniz gerektiğidir, her gözlem için gözlemin gerçek değeri ve tanımlanmış bir aralık için zaman serisinin geçmiş değerleri. Aslında, bir ARIMA modelini parametrelendirdiğiniz gibi, zaman dizinizi tahmin etmek için alakalı görünen veri aralığının ne olduğunu manuel olarak tanımlamanız gerekir. Matrisin genişliği / ufku, matrisiniz tarafından bir sonraki değeri doğru tahmin etmek için kritik öneme sahiptir. Ufkunuz kısıtlanırsa, mevsimsellik etkilerini kaçırabilirsiniz.

Bunu yaptıktan sonra, bir sonraki adımı tahmin etmek için, son gözleminize dayanarak bir sonraki ilk değeri tahmin etmeniz gerekir. Ardından, tahmini bir "gerçek değer" olarak saklamanız gerekir; bu değer , tıpkı bir ARIMA modeli gibi, bir zaman kaydırma ile ikinci sonraki değeri tahmin etmek için kullanılır . H adımlarınızı ilerletmek için işlemi h kez yinelemeniz gerekecektir. Her yineleme bir önceki öngörüye dayanacaktır.

R kodunu kullanan bir örnek aşağıdaki gibidir.

library(forecast)
library(randomForest)

# create a daily pattern with random variations
myts <- ts(rep(c(5,6,7,8,11,13,14,15,16,15,14,17,13,12,15,13,12,12,11,10,9,8,7,6), 10)*runif(120,0.8,1.2), freq = 24)
myts_forecast <- forecast(myts, h = 24) # predict the time-series using ets + stl techniques
pred1 <- c(myts, myts_forecast1$mean) # store the prediction

# transform these observations into a matrix with the last 24 past values
idx <- c(1:24)
designmat <- data.frame(lapply(idx, function(x) myts[x:(215+x)])) # create a design matrix
colnames(designmat) <- c(paste0("x_",as.character(c(1:23))),"y")

# create a random forest model and predict iteratively each value
rfModel <- randomForest(y ~., designmat)
for (i in 1:24){
  designvec <- data.frame(c(designmat[nrow(designmat), 2:24], 0))
  colnames(designvec) <- colnames(designmat)
  designvec$y <- predict(rfModel, designvec)
  designmat <- rbind(designmat, designvec)
}
pred2 <- designmat$y

#plot to compare predictions
plot(pred1, type = "l")
lines(y = pred2[216:240], x = c(240:264), col = 2)

Şimdi açık bir şekilde, bir zaman serisi modelinin veya bir makine öğrenme modelinin daha verimli olup olmadığını belirlemek için genel bir kural yoktur. Hesaplama süresi, makine öğrenme modelleri için daha yüksek olabilir, ancak diğer yandan, zaman serilerinizi kullanarak tahmin etmek için herhangi bir ek özellik ekleyebilirsiniz (örneğin, yalnızca sayısal veya mantıksal özellikler değil). Genel tavsiye, her ikisini de test etmek ve en verimli modeli seçmek olacaktır.


Gerçi zaman kaydırma olarak adlandırdığınız şeyin aslında standart bir arima'nın yaptığı şey olduğunu belirtmek isteyebilirsiniz . Bu yüzden Arima Tahminleri çok doğrusal olma eğilimindedir.
5

Evet kesinlikle. Bu adımı açıklamak için cevabımı düzenleyeceğim.
AshOfFire

1
Zaman serisi modellerinde ek özellikler de ekleyebilirsiniz.
Tim

ARIMAX ile doğru, ancak sayısal olmaları gerekir ve eklenen katsayılar bir ARMA'da kullanılan katsayılar kadar kolay yorumlanamaz.
AshOfFire
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.