Chỉnh sửa chính: Tôi muốn nói lời cảm ơn lớn đến Dave & Nick cho đến nay cho câu trả lời của họ. Tin tốt là tôi đã có được vòng lặp để làm việc (nguyên tắc mượn từ bài của Giáo sư Hydnman về dự báo hàng loạt). Để củng cố các truy vấn nổi bật:
a) Làm cách nào để tăng số lần lặp tối đa cho auto.arima - có vẻ như với một số lượng lớn các biến ngoại sinh auto.arima đang đạt các lần lặp tối đa trước khi hội tụ vào một mô hình cuối cùng. Xin hãy sửa tôi nếu tôi hiểu nhầm điều này.
b) Một câu trả lời, từ Nick, nhấn mạnh rằng dự đoán của tôi về các khoảng thời gian hàng giờ chỉ xuất phát từ các khoảng thời gian hàng giờ đó và không bị ảnh hưởng bởi các lần xuất hiện trước đó trong ngày. Bản năng của tôi, từ việc xử lý dữ liệu này, nói với tôi rằng điều này thường không gây ra vấn đề quan trọng nhưng tôi sẵn sàng đề xuất về cách xử lý vấn đề này.
c) Dave đã chỉ ra rằng tôi yêu cầu một cách tiếp cận phức tạp hơn nhiều để xác định thời gian dẫn / trễ xung quanh các biến dự đoán của tôi. Có ai có bất kỳ kinh nghiệm với một cách tiếp cận lập trình cho điều này trong R không? Tất nhiên tôi hy vọng sẽ có những hạn chế nhưng tôi muốn đưa dự án này ra xa nhất có thể, và tôi không nghi ngờ rằng điều này cũng phải được sử dụng cho những người khác ở đây.
d) Truy vấn mới nhưng hoàn toàn liên quan đến nhiệm vụ trong tay - auto.arima có xem xét các biến hồi quy khi chọn đơn hàng không?
Tôi đang cố gắng dự báo các chuyến thăm đến một cửa hàng. Tôi yêu cầu khả năng tính toán cho các ngày lễ di chuyển, năm nhuận và các sự kiện lẻ tẻ (về cơ bản là ngoại lệ); trên cơ sở này, tôi tập hợp rằng ARIMAX là đặt cược tốt nhất của tôi, sử dụng các biến ngoại sinh để thử và mô hình hóa tính thời vụ cũng như các yếu tố đã nói ở trên.
Dữ liệu được ghi lại 24 giờ trong khoảng thời gian hàng giờ. Điều này đang được chứng minh là có vấn đề vì số lượng số không trong dữ liệu của tôi, đặc biệt là vào những thời điểm trong ngày có lượng truy cập rất thấp, đôi khi không có gì khi cửa hàng vừa mới mở. Ngoài ra, giờ mở cửa tương đối thất thường.
Ngoài ra, thời gian tính toán là rất lớn khi dự báo là một chuỗi thời gian hoàn chỉnh với 3 năm + dữ liệu lịch sử. Tôi hình dung rằng nó sẽ làm cho nó nhanh hơn bằng cách tính toán mỗi giờ trong ngày dưới dạng chuỗi thời gian riêng biệt và khi thử nghiệm điều này vào những giờ bận rộn hơn trong ngày dường như mang lại độ chính xác cao hơn nhưng một lần nữa chứng tỏ trở thành vấn đề với những giờ đầu / muộn mà không ' t liên tục nhận được lượt truy cập. Tôi tin rằng quy trình sẽ được hưởng lợi từ việc sử dụng auto.arima nhưng dường như nó không thể hội tụ trên một mô hình trước khi đạt số lần lặp tối đa (do đó sử dụng một điều chỉnh thủ công và mệnh đề maxit).
Tôi đã cố gắng xử lý dữ liệu 'mất tích' bằng cách tạo một biến ngoại sinh khi lượt truy cập = 0. Một lần nữa, điều này hoạt động rất tốt cho thời gian bận rộn hơn trong ngày khi thời gian duy nhất không có lượt truy cập là khi cửa hàng đóng cửa trong ngày; trong những trường hợp này, biến ngoại sinh dường như xử lý thành công điều này để dự báo về phía trước và không bao gồm ảnh hưởng của ngày trước đó đã bị đóng. Tuy nhiên, tôi không chắc chắn làm thế nào để sử dụng nguyên tắc này liên quan đến việc dự đoán giờ yên tĩnh nơi cửa hàng mở cửa nhưng không phải lúc nào cũng nhận được lượt truy cập.
Với sự giúp đỡ của bài viết của Giáo sư Hyndman về dự báo hàng loạt trong R, tôi đang cố gắng thiết lập một vòng lặp để dự báo loạt 24 nhưng dường như không muốn dự báo cho 1 giờ chiều trở đi và không thể hiểu tại sao. Tôi nhận được "Error in Optim (init [mask], armafn, method = Optim.method, hessian = TRUE ,: giá trị sai phân hữu hạn không hữu hạn [1]" nhưng vì tất cả các chuỗi đều có độ dài bằng nhau và về cơ bản tôi đang sử dụng cùng một ma trận, tôi không hiểu tại sao điều này lại xảy ra. Điều này có nghĩa là ma trận không có thứ hạng đầy đủ, phải không? Làm thế nào tôi có thể tránh điều này trong phương pháp này?
https://www.dropbox.com/s/26ov3xp4ayig4ws/Data.zip
date()
#Read input files
INPUT <- read.csv("Input.csv")
XREGFDATA <- read.csv("xreg.csv")
#Subset time series data from the input file
TS <- ts(INPUT[,2:25], f=7)
fcast <- matrix(0, nrow=nrow(XREGFDATA),ncol=ncol(TS))
#Create matrix of exogenous variables for forecasting.
xregf <- (cbind(Weekday=model.matrix(~as.factor(XREGFDATA$WEEKDAY)),
Month=model.matrix(~as.factor(XREGFDATA$MONTH)),
Week=model.matrix(~as.factor(XREGFDATA$WEEK)),
Nodata=XREGFDATA$NoData,
NewYearsDay=XREGFDATA$NewYearsDay,
GoodFriday=XREGFDATA$GoodFriday,
EasterWeekend=XREGFDATA$EasterWeekend,
EasterMonday=XREGFDATA$EasterMonday,
MayDay=XREGFDATA$MayDay,
SpringBH=XREGFDATA$SpringBH,
SummerBH=XREGFDATA$SummerBH,
Christmas=XREGFDATA$Christmas,
BoxingDay=XREGFDATA$BoxingDay))
#Remove intercepts
xregf <- xregf[,c(-1,-8,-20)]
NoFcast <- 0
for(i in 1:24) {
if(max(INPUT[,i+1])>0) {
#The exogenous variables used to fit are the same for all series except for the
#'Nodata' variable. This is to handle missing data for each series
xreg <- (cbind(Weekday=model.matrix(~as.factor(INPUT$WEEKDAY)),
Month=model.matrix(~as.factor(INPUT$MONTH)),
Week=model.matrix(~as.factor(INPUT$WEEK)),
Nodata=ifelse(INPUT[,i+1] < 1,1,0),
NewYearsDay=INPUT$NewYearsDay,
GoodFriday=INPUT$GoodFriday,
EasterWeekend=INPUT$EasterWeekend,
EasterMonday=INPUT$EasterMonday,
MayDay=INPUT$MayDay,
SpringBH=INPUT$SpringBH,
SummerBH=INPUT$SummerBH,
Christmas=INPUT$Christmas,
BoxingDay=INPUT$BoxingDay))
xreg <- xreg[,c(-1,-8,-20)]
ARIMAXfit <- Arima(TS[,i],
order=c(0,1,8), seasonal=c(0,1,0),
include.drift=TRUE,
xreg=xreg,
lambda=BoxCox.lambda(TS[,i])
,optim.control = list(maxit=1500), method="ML")
fcast[,i] <- forecast(ARIMAXfit, xreg=xregf)$mean
} else{
NoFcast <- NoFcast +1
}
}
#Save the forecasts to .csv
write(t(fcast),file="fcasts.csv",sep=",",ncol=ncol(fcast))
date()
Tôi hoàn toàn đánh giá cao những lời chỉ trích mang tính xây dựng về cách tôi sẽ thực hiện điều này và bất kỳ sự giúp đỡ nào để làm cho kịch bản này hoạt động. Tôi biết rằng có sẵn phần mềm khác nhưng tôi bị hạn chế nghiêm ngặt việc sử dụng R và / hoặc SPSS tại đây ...
Ngoài ra, tôi rất mới đối với các diễn đàn này - tôi đã cố gắng đưa ra một lời giải thích đầy đủ nhất có thể, chứng minh nghiên cứu trước đây tôi đã thực hiện và cũng cung cấp một ví dụ có thể lặp lại; Tôi hy vọng điều này là đủ nhưng xin vui lòng cho tôi biết nếu có bất cứ điều gì khác tôi có thể cung cấp để cải thiện bài viết của mình.
EDIT: Nick đề nghị tôi sử dụng tổng số hàng ngày trước. Tôi nên thêm rằng tôi đã kiểm tra điều này và các biến ngoại sinh tạo ra các dự báo nắm bắt thời vụ hàng ngày, hàng tuần và hàng năm. Đây là một trong những lý do khác mà tôi nghĩ để dự báo mỗi giờ là một chuỗi riêng biệt, như Nick cũng đã đề cập, dự báo của tôi vào 4 giờ chiều vào bất kỳ ngày nào sẽ không bị ảnh hưởng bởi các giờ trước trong ngày.
EDIT: 09/08/13, vấn đề với vòng lặp chỉ đơn giản là thực hiện với các đơn đặt hàng ban đầu tôi đã sử dụng để thử nghiệm. Tôi nên phát hiện ra điều này sớm hơn và đặt nhiều khẩn cấp hơn vào việc cố gắng auto.arima để làm việc với dữ liệu này - xem điểm a) & d) ở trên.