Sử dụng xác thực chéo k-lần để chọn mô hình chuỗi thời gian


70

Câu hỏi: Tôi muốn chắc chắn về điều gì đó, việc sử dụng xác thực chéo k-Fold với chuỗi thời gian có đơn giản không, hay người ta cần phải đặc biệt chú ý trước khi sử dụng nó?

Bối cảnh: Tôi đang lập mô hình chuỗi thời gian 6 năm (với chuỗi semi-markov), với mẫu dữ liệu cứ sau 5 phút. Để so sánh một số mô hình, tôi đang sử dụng xác thực chéo 6 lần bằng cách tách dữ liệu trong 6 năm, vì vậy các bộ đào tạo của tôi (để tính toán các tham số) có độ dài 5 năm và các bộ thử nghiệm có độ dài 1 năm. Tôi không tính đến thứ tự thời gian, vì vậy các bộ khác nhau của tôi là:

  • gấp 1: đào tạo [1 2 3 4 5], kiểm tra [6]
  • gấp 2: đào tạo [1 2 3 4 6], kiểm tra [5]
  • gấp 3: đào tạo [1 2 3 5 6], kiểm tra [4]
  • gấp 4: đào tạo [1 2 4 5 6], kiểm tra [3]
  • gấp 5: đào tạo [1 3 4 5 6], kiểm tra [2]
  • gấp 6: đào tạo [2 3 4 5 6], kiểm tra [1].

Tôi đang đưa ra giả thuyết rằng mỗi năm độc lập với nhau. Làm thế nào tôi có thể xác minh điều đó? Có tài liệu tham khảo nào cho thấy khả năng áp dụng xác nhận chéo k-lần với chuỗi thời gian.


Hãy xem bài viết này, trong đó tôi tìm thấy francescopochetti.com/
Henok S Mengistu

Câu trả lời:


69

Chuỗi thời gian (hoặc dữ liệu theo thứ tự nội tại khác) có thể có vấn đề đối với xác thực chéo. Nếu một số mô hình xuất hiện vào năm 3 và tồn tại trong các năm 4-6, thì mô hình của bạn có thể tiếp nhận nó, mặc dù đó không phải là một phần của năm 1 & 2.

Một cách tiếp cận đôi khi nguyên tắc hơn cho chuỗi thời gian là xâu chuỗi về phía trước, trong đó thủ tục của bạn sẽ giống như thế này:

  • gấp 1: đào tạo [1], kiểm tra [2]
  • gấp 2: đào tạo [1 2], kiểm tra [3]
  • gấp 3: đào tạo [1 2 3], kiểm tra [4]
  • gấp 4: đào tạo [1 2 3 4], kiểm tra [5]
  • gấp 5: đào tạo [1 2 3 4 5], kiểm tra [6]

Điều đó mô hình chính xác hơn tình huống bạn sẽ thấy tại thời điểm dự đoán, nơi bạn sẽ mô hình hóa dữ liệu trong quá khứ và dự đoán về dữ liệu hướng tới. Nó cũng sẽ cho bạn cảm giác về sự phụ thuộc của mô hình vào kích thước dữ liệu.


1
Cảm ơn. Tôi hiểu, như Zach đã nói, đó là cách kinh điển để làm điều đó. Và tôi hiểu tại sao. Vấn đề tôi gặp phải đó là, chính xác là nó sẽ tính đến sự thay đổi của kích thước dữ liệu, vì vậy tôi sẽ không nhận được lỗi tổng quát hóa "thực sự" của mô hình của mình. Nhưng một lỗi hỗn hợp: khái quát hóa và kích thước dữ liệu. Bạn có biết một số ref khác (ngoài M.Hyndman) liên quan đến xác nhận chéo trong chuỗi thời gian không? Đừng hiểu lầm tôi không phải là tôi không tin những gì bạn nói và những gì M. Hyndman đang nói, nó hoàn toàn có ý nghĩa. Tôi đơn giản muốn có một vài quan điểm về một vấn đề
Mickaël S

Tôi sợ rằng tôi không biết một tài liệu tham khảo như vậy, nhưng tôi rất muốn xem một tài liệu nếu ai đó biết.
Ken Williams

1
@Wayne, ý tôi là giải pháp này sử dụng dữ liệu đào tạo ngày càng nhiều năm ở mỗi lần. Trong dữ liệu của tôi chắc chắn có sự khác biệt giữa các năm, nhưng không có xu hướng rõ ràng hoặc thời vụ.
Mickaël S

3
@Mickael: Bạn có thể sử dụng gấp 1: train [1 2] test [3]; gấp 2: kiểm tra [2 3] [4]; gấp 3: đào tạo [3 4] kiểm tra [5], v.v., nếu bạn lo lắng về việc sử dụng ngày càng nhiều dữ liệu với mỗi lần gấp. Tôi đoán là với kỹ thuật bán MC, bạn không thể thực sự tranh giành những năm xung quanh, ngay cả khi không có xu hướng.
Wayne

3
@ MickaëlS: Tôi tìm thấy bài báo này scTHERirect.com/science/article/pii/S0020025511006773 và nghĩ rằng nó có thể được quan tâm. Họ so sánh phương pháp 'kinh điển' này với hai phương pháp khác - phương pháp 'khối tăng cường' và phương pháp 'loại bỏ sự phụ thuộc'.
thebigdog

26

Phương pháp tôi sử dụng để xác thực chéo mô hình chuỗi thời gian của mình là xác thực chéo trên cơ sở cán. Bắt đầu với một tập hợp dữ liệu nhỏ cho mục đích đào tạo, dự báo cho các điểm dữ liệu sau đó và sau đó kiểm tra độ chính xác cho các điểm dữ liệu được dự báo. Các điểm dữ liệu dự báo tương tự sau đó được đưa vào như một phần của tập dữ liệu huấn luyện tiếp theo và các điểm dữ liệu tiếp theo được dự báo.

Để làm cho mọi thứ trực quan, đây là một hình ảnh cho cùng:

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

Mã R tương đương sẽ là:

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)

Có cách nào để làm điều này cho các phương thức như hồi quy logistic bằng R không?
hlyates

1
@hlyates, theo cách hiểu của tôi thì có thể, bạn chỉ cần sửa đổi đoạn mã trên một chút. Bao gồm các pre_lr (dự đoán bằng hồi quy logistic) và thay đổi tên của các cột tương ứng.
Jatin Garg

22

Cách "hợp quy" để thực hiện xác thực chéo chuỗi thời gian (ít nhất là như được mô tả bởi @Rob Hyndman) là "cuộn" thông qua bộ dữ liệu.

I E:

  • gấp 1: đào tạo [1], kiểm tra [2]
  • gấp 2: đào tạo [1 2], kiểm tra [3]
  • gấp 3: đào tạo [1 2 3], kiểm tra [4]
  • gấp 4: đào tạo [1 2 3 4], kiểm tra [5]
  • gấp 5: đào tạo [1 2 3 4 5], kiểm tra [6]

Về cơ bản, tập huấn luyện của bạn không được chứa thông tin xảy ra sau tập kiểm tra.


13

MộtRTôiMMột(p,Cười mở miệng,q)Cười mở miệng>0Cười mở miệng

Để xác thực chéo hoạt động như một công cụ chọn mô hình, bạn cần có sự độc lập gần đúng giữa đào tạo và dữ liệu thử nghiệm. Vấn đề với dữ liệu chuỗi thời gian là các điểm dữ liệu liền kề thường phụ thuộc rất nhiều, do đó xác thực chéo tiêu chuẩn sẽ thất bại. Biện pháp khắc phục cho việc này là để lại một khoảng cách giữa mẫu thử và mẫu thử, trên cả hai mặt của mẫu thử . Lý do tại sao bạn cũng cần bỏ ra một khoảng trống trước mẫu thử là sự phụ thuộc là đối xứng khi bạn tiến lên hoặc lùi lại theo thời gian (nghĩ về tương quan).

hvvh

  • gấp 1: đào tạo [1 2 3 4 5h], kiểm tra [6]
  • gấp 2: đào tạo [1 2 3 4h h6], kiểm tra [5]
  • gấp 3: đào tạo [1 2 3h h5 6], kiểm tra [4]
  • gấp 4: đào tạo [1 2h h4 5 6], kiểm tra [3]
  • gấp 5: đào tạo [1h h3 4 5 6], kiểm tra [2]
  • gấp 6: đào tạo [h2 3 4 5 6], kiểm tra [1]

Trong đó h chỉ ra rằng các quan sát h của mẫu đào tạo bị xóa ở phía đó.


3

Như nhận xét của @thebigdog, "Về việc sử dụng xác nhận chéo để đánh giá dự báo chuỗi thời gian" của Bergmeir et al. thảo luận về xác nhận chéo trong bối cảnh chuỗi thời gian đứng yên và xác định Chuỗi chuyển tiếp (được đề xuất bởi những người trả lời khác) là không có ích. Lưu ý, Chuỗi chuyển tiếp được gọi là Đánh giá khối cuối trong bài viết này:

Sử dụng xác thực chéo 5 lần tiêu chuẩn, không thể tìm thấy hiệu quả thực tế của các phụ thuộc trong dữ liệu, liên quan đến việc lỗi cuối cùng được đánh giá thấp hay bị đánh giá quá cao. Ngược lại, đánh giá khối cuối cùng có xu hướng mang lại các biện pháp lỗi ít mạnh hơn so với xác thực chéo và xác thực chéo bị chặn.

" Đánh giá các mô hình dự báo chuỗi thời gian: Một nghiên cứu thực nghiệm về phương pháp ước tính hiệu suất " của Cerqueira et al. đồng ý với đánh giá này Tuy nhiên, đối với chuỗi thời gian không cố định, thay vào đó, họ khuyên bạn nên sử dụng biến thể trên Hold-Out, được gọi là Rep-Holdout. Trong Rep-Holdout, một điểm ađược chọn trong chuỗi thời gian Yđể đánh dấu sự bắt đầu của dữ liệu thử nghiệm. Điểm ađược xác định là trong một cửa sổ. Điều này được minh họa trong hình dưới đây:

minh họa rep-Holdout

Bài viết nói trên này dài và kiểm tra toàn diện hầu hết tất cả các phương pháp khác được đề cập trong câu trả lời cho câu hỏi này với mã có sẵn công khai . Điều này bao gồm yêu cầu @Matthias Schmidtbl cổher bao gồm các khoảng trống trước và sau khi dữ liệu thử nghiệm. Ngoài ra, tôi chỉ tóm tắt bài báo. Kết luận thực tế của bài báo liên quan đến một cây quyết định để đánh giá các mô hình chuỗi thời gian!

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.