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.
. Ngoài các biến hồi quy đáng kể (lưu ý cấu trúc chì và độ trễ thực tế đã bị bỏ qua), có các chỉ số phản ánh tính thời vụ, thay đổi cấp độ, hiệu ứng hàng ngày, thay đổi hiệu ứng hàng ngày và giá trị bất thường không phù hợp với lịch sử. Các số liệu thống kê mô hình là 
. Một loạt các dự báo trong 360 ngày tới được hiển thị ở đây 
. Biểu đồ thực tế / phù hợp / dự báo tóm tắt gọn gàng kết quả
Khi đối mặt với một vấn đề cực kỳ phức tạp (như vấn đề này!), Người ta cần phải thể hiện với rất nhiều sự can đảm, kinh nghiệm và hỗ trợ năng suất máy tính. Chỉ cần tư vấn cho quản lý của bạn rằng vấn đề có thể giải quyết được nhưng không nhất thiết phải sử dụng các công cụ nguyên thủy. Tôi hy vọng điều này mang lại cho bạn sự khích lệ để tiếp tục nỗ lực vì những bình luận trước đây của bạn rất chuyên nghiệp, hướng đến việc làm giàu và học tập cá nhân. Tôi sẽ thêm rằng người ta cần biết giá trị dự kiến của phân tích này và sử dụng nó làm hướng dẫn khi xem xét phần mềm bổ sung. Có lẽ bạn cần một tiếng nói lớn hơn để giúp "đạo diễn" của bạn hướng tới một giải pháp khả thi cho nhiệm vụ đầy thách thức này.