การแก้ไขที่สำคัญ: ฉันต้องการจะพูดขอบคุณมากสำหรับเดฟและนิคจนถึงตอนนี้สำหรับคำตอบของพวกเขา ข่าวดีก็คือฉันได้วนไปทำงาน (หลักการยืมมาจากโพสต์ของศ. Hydnman ในการพยากรณ์ชุด) ในการรวมการสืบค้นที่คงค้าง:
a) ฉันจะเพิ่มจำนวนการทำซ้ำสูงสุดสำหรับ auto.arima ได้อย่างไร - ดูเหมือนว่ามีตัวแปรภายนอกจำนวนมาก auto.arima กำลังกดปุ่มการทำซ้ำสูงสุดก่อนที่จะมาบรรจบกับรุ่นสุดท้าย โปรดแก้ไขฉันหากฉันเข้าใจผิด
b) หนึ่งคำตอบจาก Nick เน้นว่าการคาดคะเนของฉันสำหรับช่วงเวลารายชั่วโมงนั้นมาจากช่วงเวลารายชั่วโมงเท่านั้นและไม่ได้รับอิทธิพลจากเหตุการณ์ที่เกิดขึ้นก่อนหน้านี้ในวันนั้น สัญชาตญาณของฉันจากการจัดการกับข้อมูลนี้บอกฉันว่าสิ่งนี้ไม่ควรทำให้เกิดปัญหาสำคัญ แต่ฉันเปิดรับข้อเสนอแนะเกี่ยวกับวิธีจัดการกับสิ่งนี้
c) เดฟชี้ให้เห็นว่าฉันต้องการวิธีการที่ซับซ้อนกว่านี้ในการระบุเวลารอคอย / เวลาล่าช้าโดยรอบตัวแปรตัวทำนายของฉัน ใครบ้างมีประสบการณ์กับวิธีการเขียนโปรแกรมนี้ใน R? ฉันคาดหวังว่าจะมีข้อ จำกัด แต่ฉันต้องการใช้โครงการนี้ให้ไกลที่สุดเท่าที่จะทำได้และฉันไม่สงสัยเลยว่าสิ่งนี้จะต้องใช้กับผู้อื่นที่นี่เช่นกัน
d) แบบสอบถามใหม่ แต่เกี่ยวข้องกับงานที่ทำโดยอัตโนมัติ - auto.arima พิจารณาผู้จดทะเบียนเมื่อเลือกคำสั่งซื้อหรือไม่
ฉันพยายามที่จะคาดการณ์การเข้าชมร้านค้า ฉันต้องการความสามารถในการบัญชีสำหรับวันหยุดที่เคลื่อนไหวปีอธิกสุรทินและกิจกรรมประปราย บนพื้นฐานนี้ฉันรวบรวมว่า ARIMAX เป็นทางออกที่ดีที่สุดของฉันโดยใช้ตัวแปรภายนอกเพื่อลองและจำลองแบบฤดูกาลตามฤดูกาลรวมถึงปัจจัยต่างๆดังกล่าวข้างต้น
ข้อมูลจะถูกบันทึกตลอด 24 ชั่วโมงทุก ๆ ชั่วโมง นี่เป็นการพิสูจน์ว่าเป็นปัญหาเนื่องจากจำนวนศูนย์ในข้อมูลของฉันโดยเฉพาะอย่างยิ่งในช่วงเวลาของวันที่เห็นปริมาณการเข้าชมต่ำมากบางครั้งก็ไม่มีเลยเมื่อเปิดร้าน นอกจากนี้เวลาเปิดทำการค่อนข้างไม่แน่นอน
นอกจากนี้เวลาในการคำนวณยังมีขนาดใหญ่มากเมื่อทำการคาดการณ์ว่าเป็นอนุกรมเวลาที่สมบูรณ์หนึ่งชุดที่มีข้อมูลย้อนหลัง 3 ปี + ฉันคิดว่ามันจะทำให้เร็วขึ้นโดยการคำนวณแต่ละชั่วโมงของวันเป็นอนุกรมเวลาที่แยกจากกันและเมื่อทดสอบสิ่งนี้ในชั่วโมงที่ยุ่งมากของวันดูเหมือนว่าจะให้ความแม่นยำสูงกว่า แต่พิสูจน์อีกครั้งว่าเป็นปัญหาของชั่วโมงแรก ไม่ได้รับการเข้าชมอย่างสม่ำเสมอ ฉันเชื่อว่ากระบวนการนี้จะได้รับประโยชน์จากการใช้ auto.arima แต่ดูเหมือนว่าจะไม่สามารถมาบรรจบกับโมเดลก่อนที่จะถึงจำนวนสูงสุดของการทำซ้ำ (ดังนั้นการใช้แบบพอดีกับตัวเองและข้อ Maxit)
ฉันพยายามจัดการข้อมูล 'ขาดหายไป' โดยการสร้างตัวแปรภายนอกสำหรับเมื่อมีการเยี่ยมชม = 0 อีกครั้งสิ่งนี้ใช้งานได้ดีสำหรับช่วงเวลาที่ยุ่งมากของวันเมื่อมีเวลาเพียงครั้งเดียวที่ไม่มีการเข้าชมคือเมื่อร้านถูกปิดในวันนั้น ในกรณีเหล่านี้ตัวแปรภายนอกประสบความสำเร็จดูเหมือนว่าจะจัดการสิ่งนี้สำหรับการคาดการณ์ล่วงหน้าและไม่รวมถึงผลกระทบของวันก่อนหน้านี้ที่ถูกปิด อย่างไรก็ตามฉันไม่แน่ใจว่าจะใช้หลักการนี้อย่างไรในการคาดการณ์ชั่วโมงที่เงียบกว่าซึ่งเป็นร้านค้าที่เปิด แต่ไม่ได้รับการเข้าชมทุกครั้ง
ด้วยความช่วยเหลือของโพสต์โดยศาสตราจารย์ Hyndman เกี่ยวกับการพยากรณ์แบบเป็นชุดใน R ฉันพยายามตั้งวงวนการพยากรณ์ 24 ชุด แต่ดูเหมือนว่าจะไม่คาดการณ์ตั้งแต่ 1 ทุ่มเป็นต้นไปและไม่สามารถหาสาเหตุได้ ฉันได้รับ "ข้อผิดพลาดในการเพิ่มประสิทธิภาพ (init [mask], armafn, method = optim.method, hessian = TRUE,: ค่าที่ไม่แตกต่างกันแน่นอนไม่ จำกัด [1]" แต่เนื่องจากชุดทั้งหมดมีความยาวเท่ากันและฉันใช้เป็นหลัก เมทริกซ์เดียวกันฉันไม่เข้าใจว่าทำไมมันถึงเกิดขึ้นนี่หมายความว่าเมทริกซ์นั้นไม่ได้อยู่ในอันดับเต็มเลยฉันจะหลีกเลี่ยงสิ่งนี้ในวิธีนี้ได้อย่างไร
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()
ฉันขอขอบคุณคำวิจารณ์ที่สร้างสรรค์อย่างเต็มที่เกี่ยวกับวิธีการที่ฉันทำเกี่ยวกับเรื่องนี้และความช่วยเหลือใด ๆ ในการทำให้สคริปต์นี้ทำงาน ฉันทราบว่ามีซอฟต์แวร์อื่นที่ใช้ได้ แต่ฉัน จำกัด การใช้ R และ / หรือ SPSS อย่างเคร่งครัดที่นี่ ...
นอกจากนี้ฉันยังใหม่กับฟอรัมเหล่านี้ - ฉันพยายามอธิบายอย่างเต็มที่ให้มากที่สุดแสดงให้เห็นถึงงานวิจัยก่อนหน้านี้ที่ฉันได้ทำไปและยังเป็นตัวอย่างที่ทำซ้ำได้; ฉันหวังว่านี่จะเพียงพอ แต่โปรดแจ้งให้เราทราบหากมีสิ่งอื่นที่ฉันสามารถให้บริการเพื่อปรับปรุงเมื่อโพสต์ของฉัน
แก้ไข: Nick แนะนำให้ฉันใช้ผลรวมรายวันก่อน ฉันควรเพิ่มว่าฉันได้ทดสอบสิ่งนี้แล้วและตัวแปรภายนอกสร้างการคาดการณ์ที่จับภาพรายวันรายสัปดาห์และรายปี นี่เป็นหนึ่งในเหตุผลอื่นที่ฉันคิดว่าจะคาดการณ์ในแต่ละชั่วโมงว่าเป็นซีรีย์ที่แยกจากกันตามที่นิคพูดถึงการคาดการณ์ของฉันในเวลา 16.00 น. ในวันใดก็ตามจะไม่ได้รับอิทธิพลจากชั่วโมงก่อนหน้าในวันนั้น
แก้ไข: 09/08/13 ปัญหาเกี่ยวกับการวนซ้ำนั้นเป็นเพียงการทำตามคำสั่งซื้อดั้งเดิมที่ฉันใช้ในการทดสอบ ฉันควรจะเห็นสิ่งนี้เร็วกว่านี้และเร่งด่วนมากขึ้นเกี่ยวกับการพยายาม auto.arima เพื่อทำงานกับข้อมูลนี้ - ดูจุด a & d) ด้านบน