Dự báo chuỗi thời gian hàng giờ với định kỳ hàng ngày, hàng tuần và hàng năm


12

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 ra, tôi đã thử sử dụng fourier để chăm sóc tính thời vụ nhưng trả về cùng một lỗi "Lỗi trong tối ưu (init [mask], armafn, method = Optim.method, hessian = TRUE ,: giá trị sai phân hữu hạn không hữu hạn [1]" ngay cả khi được sử dụng như một ma trận riêng mà không có biến ngoại sinh nào khác. Làm ơn ai đó có thể giúp tôi giải thích về lý do tại sao lại như vậy không?
krcooke

bạn có thể tải lại dữ liệu?
MyHeadHurts

Câu trả lời:


4

Thật không may, nhiệm vụ của bạn là thất bại vì bạn bị hạn chế ở R và SPSS. Bạn cần xác định cấu trúc mối quan hệ chính và độ trễ cho từng sự kiện / ngày lễ / biến ngoại sinh có thể xảy ra. Bạn cần phát hiện Xu hướng thời gian có thể mà SPSS không thể thực hiện. Bạn cần kết hợp Xu hướng / Dự đoán hàng ngày vào từng dự báo hàng giờ để cung cấp dự báo tổng hợp.reeconciled. Bạn cần quan tâm đến việc thay đổi các tham số và thay đổi phương sai. Hi vọng điêu nay co ich. Chúng tôi đã mô hình hóa loại dữ liệu này trong nhiều năm theo cách tự động, tất nhiên là theo các điều khiển do người dùng chỉ định tùy chọn.

EDIT: Như OP yêu cầu, tôi trình bày ở đây một phân tích điển hình. Tôi lấy một cái nếu giờ bận rộn hơn và phát triển một mô hình hàng ngày. Trong một phân tích đầy đủ, tất cả 24 giờ sẽ được phát triển và cũng là một mô hình hàng ngày để điều hòa các dự báo. Sau đây là một danh sách một phần của mô hình nhập mô tả hình ảnh ở đây. 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à nhập mô tả hình ảnh ở đây. Một loạt các dự báo trong 360 ngày tới được hiển thị ở đây nhập mô tả hình ảnh ở đây. Biểu đồ thực tế / phù hợp / dự báo tóm tắt gọn gàng kết quảnhập mô tả hình ảnh ở đâyKhi đố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.

Sau khi xem xét Tổng số hàng ngày và mỗi trong số 24 Mô hình hàng giờ, tôi chắc chắn sẽ phản ánh rằng Số lượt truy cập đang bị sụt giảm nghiêm trọng! Loại phân tích này của một người mua tiềm năng sẽ đề xuất không mua trong khi người bán sẽ khôn ngoan tăng gấp đôi nỗ lực bán doanh nghiệp dựa trên dự báo rất tiêu cực này.


Xin chào Dave, cảm ơn rất nhiều vì đã dành thời gian đọc câu hỏi của tôi và trả lời. Tôi hiểu rằng phần mềm của bạn vượt lên trên và vượt ra ngoài mọi lựa chọn thay thế nhưng rất tiếc không phải là một lựa chọn cho tôi trong thời điểm hiện tại. Biết các khả năng của R có lời khuyên nào bạn có thể cung cấp cho tôi để cải thiện những gì tôi đã làm không? Trân trọng,
krcooke

@krcooke Bạn có thể kiểm tra mối tương quan chéo giữa các lượt truy cập và khách hàng tiềm năng / độ trễ thay thế xung quanh mỗi biến hồi quy của bạn để xác định phản hồi phù hợp. Tôi hoàn toàn đồng ý với Nick rằng một số biến hồi quy có thể hữu ích trong một số giờ nhưng không phải cho những người khác. Bạn có thể lập mô hình mỗi giờ một cách riêng biệt. Phát hiện 4 loại ngoại lệ (Xung, Thay đổi cấp độ, Xung theo mùa và Xu hướng thời gian) không khả dụng trong SAS khi bạn có nguyên nhân & có thể không có trong SPSS.I đã tải xuống dữ liệu của bạn và sẽ sử dụng AUTOBOX .Chúng tôi luôn tìm kiếm "dữ liệu khó khăn" như của bạn để làm cứng các phân tích của chúng tôi.
IrishStat

Xin chào Dave, tôi sẽ xem những gì tôi có thể làm xung quanh việc phân tích các biến hồi quy. Tôi cảm thấy rằng các biến hồi quy mà tôi đã sử dụng rất 'chuẩn' và có khả năng ảnh hưởng đến tất cả các cửa hàng như vậy. Tôi đã sử dụng ngân hàng kỳ nghỉ cuối tuần tưng bừng như một ví dụ trong bình luận của Nick; điều này rất có thể sẽ được hưởng lợi từ việc sử dụng các biến hồi quy nhưng hiện tại tôi chưa bao gồm điều này. Và tôi rất quan tâm để xem bạn có thể làm gì với dữ liệu! Cảm ơn một lần nữa.
krcooke

7
" Thật không may, nhiệm vụ của bạn là thất bại vì bạn bị hạn chế ở R và SPSS. " - nhận xét này, không may đi quá xa; bất kỳ ngôn ngữ hoàn chỉnh Turing nào cũng có thể thực hiện bất kỳ thuật toán nào được viết bằng bất kỳ thuật toán nào khác, ngay cả khi nó chỉ được lập trình bằng mã máy bằng cách lật các công tắc & được thực hiện hoàn toàn trong Lego. Không có phép tính nào có thể được thực hiện ở cái này mà không thể thực hiện ở cái khác. Trừ khi bạn yêu cầu các thuộc tính ma thuật cho AUTOBOX, tôi tin rằng những gì bạn có thể muốn nói điều gì đó như "đã có sẵn như các chức năng trong phân phối vanilla" là sự khác biệt.
Glen_b -Reinstate Monica

@Glen_b Điều tôi có thể nói là hỏa lực trong các bản phân phối vanilla mà bạn đang sử dụng không đủ để giải quyết vấn đề trong tay trừ khi bạn có nhiều thời gian để viết các thủ tục mới.
IrishStat

10

Đây không phải là nhiều hơn một bó ý kiến ​​nhưng nó sẽ quá dài cho định dạng đó. Tôi không hơn một chuỗi thời gian nghiệp dư, nhưng tôi có một số gợi ý đơn giản.

  1. Bạn có thể đang theo đơn đặt hàng ở đây, nhưng tôi nghĩ rằng điều này cần một số tăng cường về những gì bạn mong đợi để đạt được và những gì quan trọng nhất đối với bạn. Thật không may, các chuyến thăm dự báo là một mục tiêu mờ nhạt. Ví dụ: giả sử là 4 giờ chiều và bạn muốn dự báo các lượt truy cập trước một giờ. Bạn có thực sự cần một siêu mô hình kết hợp điều trị cho toàn bộ loạt phim trước đó không? Điều này phải xuất phát từ việc xem xét các mục tiêu thực tế và / hoặc khoa học thực tế, có thể được quy định bởi cấp trên hoặc khách hàng của bạn hoặc có thể là của chính bạn với tư cách là nhà nghiên cứu. Tôi nghi ngờ nhiều khả năng các mô hình khác nhau là cần thiết cho các mục đích khác nhau.

  2. Việc tách ra hàng giờ dường như được thúc đẩy bởi ý tưởng cắt giảm tính toán mà không xem xét nhiều đến mức độ ý nghĩa của nó. Vì vậy, hàm ý là bạn không (sẽ không) sử dụng thông tin từ đầu ngày hôm nay để dự đoán những gì xảy ra lúc 4 giờ chiều, chỉ là tất cả các quan sát 4 giờ chiều trước đó? Dường như với tôi rằng cần phải nói nhiều.

  3. Bạn rõ ràng là một người học theo chuỗi thời gian (và tôi đang đặt mình ngang hàng) nhưng không người học nào nên bắt đầu với một vấn đề lớn như vậy. Có thật không! Bạn có rất nhiều dữ liệu, bạn có định kỳ theo nhiều thang điểm, bạn có sự bất thường về giờ mở cửa và ngày lễ, bạn có các biến ngoại sinh: bạn đã chọn một vấn đề rất khó khăn. (Còn về xu hướng thì sao?) Thật dễ để nói, nhưng rõ ràng nó đã vượt qua bạn cho đến nay: trước tiên bạn có thể phải làm việc với các phiên bản rất đơn giản của vấn đề và cảm nhận làm thế nào để phù hợp với các mô hình đơn giản hơn. Việc ném mọi thứ vào một mô hình phức tạp lớn rõ ràng là không hoạt động tốt, và một cái gì đó hoàn toàn đơn giản hơn dường như được yêu cầu, hoặc nhận ra rằng dự án có thể quá tham vọng.


Xin chào Nick, 1- Quả thực tôi đang theo lệnh! Mục tiêu là cố gắng xây dựng một mô hình để nó không có xu hướng dự báo quá mức đáng kể (dẫn đến lãng phí giờ nhân viên) hoặc dự báo dưới mức (để nhân viên không bị quá lời). 2- Tôi đã xem xét điều này nhưng sẽ đào sâu hơn để hiểu những gì tôi được / mất theo cách này. Dự báo là một loạt có vẻ giống như một 'siêu mẫu' khi bạn đặt nó. 3- Tôi nhận thấy điều này là vô cùng khó khăn và hiện tại tôi đang vượt quá cân nặng của mình, nhưng tôi hoàn toàn cởi mở với một giải pháp đơn giản hơn cũng sẽ hiệu quả với tôi ở đây. Rất cám ơn cho những suy nghĩ của bạn, Nick.
krcooke

Về mặt các giải pháp đơn giản hơn, tôi không thể thực hiện các kỹ thuật làm mịn theo cấp số nhân theo cách mà giai đoạn cuối tuần tưng bừng năm ngoái khiến năm nay (cùng kỳ) dự báo quá mức. Do các loại ngoại lệ có liên quan, tôi cảm thấy như mình hoàn toàn phải sử dụng các biến ngoại sinh. Bạn có ý tưởng nào khác mà tôi có thể khám phá không?
krcooke

Tất cả những gì tôi có thể nói là những gì tôi sẽ làm nếu tôi theo đơn đặt hàng và có chính xác thông tin bạn cung cấp ở đây. Bản năng của tôi sẽ là người đầu tiên tổng hợp thành tổng số hàng ngày và làm việc với những người đó. Thế là đủ khó. Ở đây rất dễ bị chỉ trích ở đây ....
Nick Cox

Xin chào Nick, Lỗi của tôi, đáng lẽ tôi đã tuyên bố rằng tôi đã thử điều này. Với tổng số hàng ngày kết quả xuất hiện hợp lý. Hợp lý là từ khóa bởi vì, như cả bạn và Dave đã tuyên bố, có rất nhiều điều cần được xem xét ở đây. Nếu đó là mối quan tâm, tôi có thể chạy lại dữ liệu hàng ngày và chứng minh rằng nó đang nắm bắt được tính thời vụ hàng tuần, hàng tháng và hàng năm. Đó là lý do tại sao sau đó tôi nghĩ dự báo mỗi giờ là một chuỗi hàng ngày.
krcooke

Một trong những vấn đề tôi gặp phải, như đã đề cập trong bài đăng đầu tiên, đó là auto.arima đạt các lần lặp tối đa trước khi hội tụ, đó là lý do tại sao tôi sử dụng các tham số khá khái quát với Arima (). Bất kỳ hướng dẫn nào về cách tôi có thể vượt qua điều này sẽ được đánh giá rất cao!
krcooke
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.