Dự báo một số giai đoạn với học máy


9

Gần đây tôi đã tóm tắt kiến ​​thức về Chuỗi thời gian của mình và nhận ra rằng học máy chủ yếu chỉ đưa ra một bước dự báo.

Với dự báo trước một bước, tôi có nghĩa là dự báo, ví dụ: nếu chúng ta có dữ liệu hàng giờ, hãy sử dụng dữ liệu từ 10 giờ sáng để dự báo 11 giờ sáng và 11 giờ sáng trong 12 giờ, v.v.

nhập mô tả hình ảnh ở đây

Các phương pháp học máy có thể tạo ra một dự báo trước các bước không? Với dự báo h-step-before tôi có nghĩa là, ví dụ, giả sử dữ liệu hàng giờ, chúng tôi sử dụng dữ liệu từ 10 giờ sáng để đưa ra dự báo 7 bước trước để có được ước tính cho 11,12,13,14,15,16,17 ' o đồng hồ.

Ví dụ pic: nhập mô tả hình ảnh ở đây

Liên quan đến câu hỏi chính của tôi, tôi tự hỏi:

  • Những lý do mà tôi không thấy bất cứ ai sử dụng máy học để đưa ra dự báo bước trước?
  • Nếu có một phương pháp sử dụng máy học, nó chính xác hơn hoặc ít hơn ARIMA?

Câu trả lời:


7

(Một phần trong số này được lấy từ bài đăng trước của tôi ) Trước hết, bạn cần phân biệt hai cách khác nhau để thực hiện dự báo chuỗi nhiều lần: Dự báo đệ quy và dự báo trực tiếp:

  • n
  • nthn

Bây giờ để trả lời câu hỏi chính của bạn:

Các phương pháp học máy có thể tạo ra một dự báo trước các bước không?

Có phương pháp ML có thể, và chúng có thể tạo dự báo trước các bước h bằng cách sử dụng cả dự báo đa cấp đệ quy và trực tiếp. Không chỉ vậy, đối với dự báo nhiều bước trực tiếp, chúng thực sự phù hợp với nhiệm vụ hơn so với các mô hình truyền thống như ARIMA hoặc Làm mịn theo cấp số nhân. Tuy nhiên, lưu ý rằng để dự báo nhiều bước trực tiếp, bạn cần chỉ định trước khi thực hiện các bước h trước mà bạn muốn dự báo và huấn luyện mô hình của mình cho phù hợp, trong khi để dự báo đệ quy, bạn có thể sử dụng mô hình của mình cho bất kỳ số bước nào trong tương lai bạn muốn .

Hơn nữa, Chevillon & Hendry cho rằng trong một số trường hợp, dự báo nhiều bước trực tiếp chính xác hơn dự báo đệ quy - ngụ ý rằng ML sẽ chính xác hơn các phương pháp truyền thống.

Đối với các câu hỏi khác của bạn:

  • Những lý do mà tôi không thấy bất cứ ai sử dụng máy học để đưa ra dự báo bước trước?

Nhiều người đang sử dụng ML để dự báo nhiều bước, đặc biệt là sử dụng netwroks thần kinh: Phương pháp nnetar của Hyndman có sẵn trong gói Dự báo R, gói nnfor R của Kourentze, mô hình DeepAR của Amazon và nhiều phương pháp khác.

XGBoost cũng đã được sử dụng thành công trong một vài cuộc thi chuỗi thời gian Kaggle.

Xem Bontempi et al. cho một cuộc thảo luận chung.

  • Nếu có một phương pháp sử dụng máy học, nó chính xác hơn hoặc ít hơn ARIMA?

Đó là một câu hỏi mở, và rõ ràng phụ thuộc vào dữ liệu và ứng dụng mà người ta dự báo.


1

Tôi đã chơi với chuỗi thời gian để phát hiện sự bất thường trong vài tháng qua và tôi có thể chia sẻ với bạn kinh nghiệm của mình.

Chuỗi thời gian tôi đã làm việc được đặc trưng bởi hai mùa (hàng ngày và hàng tuần), không có xu hướng và nhiều đỉnh trong ánh sáng ban ngày.

Tôi đã thực hiện một vài thí nghiệm và sau đó tôi chọn một mô hình dựa trên mạng lưới thần kinh LSTM bởi vì trong trường hợp của tôi, nó vượt trội hơn arima, nhưng tất nhiên như mọi thứ trong thống kê, không có một giải pháp chung.

Để dự đoán nhiều hơn một bước trong tương lai với mạng lưới thần kinh khá đơn giản, bạn sẽ cần xuất ra các giá trị N thay vì một và đầu ra N sẽ được so sánh với các quan sát N thực.

Từ kinh nghiệm của tôi, tôi có thể nói với bạn rằng bằng cách sử dụng N thấp (nói 1), mô hình sẽ sử dụng nghiêm ngặt vài bước thời gian trong quá khứ để dự đoán cái mới, mà không thực sự "học" tính thời vụ. Mặt khác, bằng cách tăng N quá mutch, tính thời vụ được học nhưng độ chính xác tổng thể giảm.

Với mục đích phân tích của tôi, tôi thấy N = 4 (2 giờ trong tương lai) là một sự thỏa hiệp tốt.


1

Để trả lời câu hỏi của bạn bằng một thuật ngữ tổng quát hơn, có thể sử dụng học máy và dự đoán các bước dự báo trước . Phần khó khăn là bạn phải định hình lại dữ liệu của mình thành một ma trận mà bạn có, cho mỗi lần quan sát giá trị thực của quan sát và các giá trị trong quá khứ của chuỗi thời gian cho một phạm vi xác định. Thực tế, bạn sẽ cần xác định phạm vi dữ liệu xuất hiện có liên quan để dự đoán chuỗi thời gian của mình, trên thực tế, như bạn sẽ tham số mô hình ARIMA. Độ rộng / đường chân trời của ma trận là rất quan trọng để dự đoán chính xác giá trị tiếp theo được lấy bởi ma trận của bạn. Nếu đường chân trời của bạn bị hạn chế, bạn có thể bỏ lỡ các hiệu ứng thời vụ.

Khi bạn đã thực hiện điều đó, để dự đoán bước trước, bạn sẽ cần dự đoán giá trị tiếp theo đầu tiên dựa trên quan sát cuối cùng của bạn. Sau đó, bạn sẽ phải lưu trữ dự đoán dưới dạng "giá trị thực", sẽ được sử dụng để dự đoán giá trị tiếp theo thứ hai thông qua việc dịch chuyển thời gian , giống như mô hình ARIMA. Bạn sẽ phải lặp lại quá trình h lần để có bước h trước. Mỗi lần lặp sẽ dựa vào dự đoán trước đó.

Một ví dụ sử dụng mã R sẽ là ví dụ sau.

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)

Bây giờ rõ ràng, không có quy tắc chung nào để xác định xem mô hình chuỗi thời gian hay mô hình học máy có hiệu quả hơn. Thời gian tính toán có thể cao hơn đối với các mô hình học máy, nhưng mặt khác, bạn có thể bao gồm bất kỳ loại tính năng bổ sung nào để dự đoán chuỗi thời gian của bạn bằng cách sử dụng chúng (ví dụ: không chỉ các tính năng số hoặc logic). Lời khuyên chung sẽ là kiểm tra cả hai, và chọn mô hình hiệu quả nhất.


Mặc dù bạn có thể muốn đề cập rằng những gì bạn gọi là dịch chuyển thời gian thực sự là những gì một arima tiêu chuẩn đang làm. Đó là lý do tại sao Arima-Dự đoán có xu hướng rất tuyến tính.
5th

Đúng chính xác. Tôi sẽ chỉnh sửa câu trả lời của tôi để làm rõ bước này.
AshOfFire

1
Trong các mô hình chuỗi thời gian, bạn cũng có thể bao gồm các tính năng bổ sung.
Tim

Đúng, với ARIMAX, nhưng chúng cần phải là số và các hệ số được thêm vào có thể dễ dàng được hiểu như các hệ số được sử dụng trong ARMA.
AshOfFire
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.