Kết hợp auto.arima () và ets () từ gói dự báo


8

Tôi đã sử dụng các hàm ets () và auto.arima () từ gói dự báo để dự báo một số lượng lớn chuỗi thời gian đơn biến. Tôi đã sử dụng chức năng sau đây để chọn giữa hai phương pháp, nhưng tôi tự hỏi liệu CrossValidated có ý tưởng nào tốt hơn (hoặc ít ngây thơ hơn) để dự báo tự động hay không.

auto.ts <- function(x,ic="aic") {
    XP=ets(x, ic=ic) 
    AR=auto.arima(x, ic=ic)

    if (get(ic,AR)<get(ic,XP)) {
        model<-AR
    }
    else {
        model<-XP
    }
        model
}

/ chỉnh sửa: Điều gì về chức năng này?

auto.ts <- function(x,ic="aic",holdout=0) {
    S<-start(x)[1]+(start(x)[2]-1)/frequency(x) #Convert YM vector to decimal year
    E<-end(x)[1]+(end(x)[2]-1)/frequency(x)
    holdout<-holdout/frequency(x) #Convert holdout in months to decimal year
    fitperiod<-window(x,S,E-holdout) #Determine fit window

    if (holdout==0) {
        testperiod<-fitperiod
    }
    else {
        testperiod<-window(x,E-holdout+1/frequency(x),E) #Determine test window
    }

    XP=ets(fitperiod, ic=ic)
    AR=auto.arima(fitperiod, ic=ic)

    if (holdout==0) {
        AR_acc<-accuracy(AR)
        XP_acc<-accuracy(XP)
    }
    else {
        AR_acc<-accuracy(forecast(AR,holdout*frequency(x)),testperiod)
        XP_acc<-accuracy(forecast(XP,holdout*frequency(x)),testperiod)
    }

    if (AR_acc[3]<XP_acc[3]) { #Use MAE
        model<-AR
    }
    else {
        model<-XP
    }
    model
}

"Nắm giữ" là số lượng thời gian bạn muốn sử dụng làm bài kiểm tra mẫu. Sau đó, hàm sẽ tính toán một cửa sổ phù hợp và một cửa sổ kiểm tra dựa trên tham số này. Sau đó, nó chạy các hàm auto.arima và ets trên cửa sổ vừa vặn và chọn một chức năng có MAE thấp nhất trong cửa sổ kiểm tra. Nếu tỷ lệ giữ bằng 0, nó sẽ kiểm tra sự phù hợp trong mẫu.

Có cách nào để tự động cập nhật mô hình đã chọn với bộ dữ liệu hoàn chỉnh không, khi nó đã được chọn?

Câu trả lời:


15

Khả năng từ hai lớp mô hình và do đó các giá trị AIC không thể so sánh được do các giả định khởi tạo khác nhau. Vì vậy, chức năng của bạn không hợp lệ. Tôi khuyên bạn nên thử hai lớp mô hình trong chuỗi của mình và xem lớp nào đưa ra dự báo ngoài mẫu tốt nhất.


Tôi đã chỉnh sửa câu hỏi của mình để bao gồm một chức năng mà tôi đã viết để làm điều đó. Liệu chức năng mới của tôi có ý nghĩa?
Zach

Nếu Holdout = 0, thì nó đang sử dụng phù hợp với mẫu thử sẽ ưu tiên cho mô hình có nhiều tham số hơn. Nhưng nếu nắm giữ> 0, điều đó có ý nghĩa, mặc dù bạn cần một mẫu nắm giữ khá lớn cho phương pháp để chọn mô hình tốt nhất một cách đáng tin cậy. Nói chung, tôi sẽ chọn mô hình để sử dụng dựa trên các cân nhắc khác thay vì chỉ xem xét hiệu suất dự báo ngoài mẫu trên một mẫu ngắn hạn từ một loạt. Ví dụ: bạn có thể xem xét hiệu suất ngoài mẫu trên toàn bộ chuỗi (thay vì một loạt tại một thời điểm) và chọn lớp mô hình tốt nhất theo cách đó.
Rob Hyndman

cảm ơn vì lời đề nghị, tôi sẽ bắt đầu đi theo hướng đó. Trong trường hợp khoản giữ của tôi bằng 0, nếu tôi đưa ra một số hình phạt cho tham số thì sao?
Zach

1
Như tôi vẫn nói, sử dụng hiệu năng ngoài mẫu trên một loạt lớn. Bạn không thể dễ dàng so sánh hiệu suất trong mẫu của hai lớp mô hình.
Rob Hyndman

Ok, cảm ơn vì tất cả những lời khuyên. Tôi sẽ sử dụng hiệu năng ngoài mẫu trên toàn bộ trang phục để chọn một lớp mô hình.
Zach
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.