auto.arima 和预测

机器算法验证 r 预测 有马
2022-03-16 06:14:37

我对 ARIMA 方法真的很陌生,并且正在尝试预测电力负荷。我已经整合了:电力负荷、温度、工作日(虚拟)、公共假期和学校假期。我的模型尝试在一天中的每个小时执行具有线性回归的非季节性 ARIMA。

这是我的 24 小时(上午 6 点)之一的示例代码:

# ElecLoad contains hourly loads and other data for 2005 and 2006 (=2*365*24 entries):
# 1. Electricity load in MW
# 2. Day of week: sunday=0, monday=1, etc 
# 3. Hour of the day: 0 -> 23
# 4. Public Holiday: 1 if Public Holiday, 0 otherwise
# 5. School vacation: 1 if no scool
# 6. Temperature in °F

# Create the week matrix = dumy variables for the weekdays
weekmatrix<-model.matrix(~as.factor(ElecLoad[,2]))
#Remove intercept
weekmatrix<-weakmatrix[,-1]

#Generate FullTable
FullTable<-cbind(load=ElecLoad[,1], weekmatrix, ElecLoad[,4],
                 ElecLoad[,3],ElecLoad[,5],ElecLoad[,5]^2, ElecLoad[,6])
colnames(FullTable)<-c("Load","mon","tue","wed","thu","fri","sat",
                       "SchoolHol","PubHol","Temp","Temp2","Hour")

#Create the xreg = substed for a specific hour of the day (column 12 = Hour)
xreg<-subset(FullTable[,2:11], FullTable[,12] == 7)

#Create the Load time serie, also a subset of the full table
LoadTs<-ts(subset(FullTable[,1], FullTable[,12] == 7),start=1,frequency=1)

#Launch of auto.arima
ArimaLoad<-auto.arima(LoadTs, xreg=xreg, lambda=0)

当我尝试使用与 2 年相同的数据进行预测时xreg,这是我的输出

plot(forecast(ArimaLoad,xreg=xreg), include=0)

在此处输入图像描述

当我尝试绘制拟合时,它看起来与我原来的负载相同

plot(fitted(ArimaLoad))

在此处输入图像描述

我不明白为什么与具有相同矩阵prediction()的 有很大不同。这是正常行为吗,如何改进我的模型以更好地适应实际情况?fitted()xreg


非常感谢你的支持。

我不确定我是否从您的建议中理解了所有内容。

你的意思是我应该建立第一个模型来预测每日平均负载(我更喜欢平均值而不是总和,因为由于 DST,有些日子没有 24 小时......)。该模型将是确定性的,但我看不出您在考虑哪种模型?多元线性回归好吗?我更喜欢考虑 log(load) 来使不同的参数相乘,我认为这更适合现实。那么我应该有 24 小时模型,取每日平均值,然后以某种季节性影响进行拆分?我应该在某处使用 ARIMA 模型吗?我不相信月份会产生影响,在我看来,没有理由认为 1 月份的消费比 8 月份更重要,除非我们考虑温度和假期的影响。一天中的时间与“ 这是我每小时都考虑特定模型的原因。同样的方式,弱者的每一天都是不同的。

我在同一小时(上午 7:00)尝试了多元线性回归,结果看起来还不错。

#Create the frame.data
Load<-subset(FullTable[,1], FullTable[,12] == 7)
FullData<-cbind(LogLoad=log(Load), xreg)
FrameData<-data.frame(FullData)

# multilinear regression
mlin<-lm(LogLoad ~ mon+tue+wed+thu+fri+sat+SchoolHol+PubHol+Temp+`Temp2`, FrameData)
plot(exp(mlin$model$LogLoad), type="l",col="blue")
lines(exp(fitted(mlin)), col="red")

在此处输入图像描述

如果我重复使用相同的数据条目(2005-2006)并且看起来与蓝色的原始负载不远(对于一个简单的模型来说没有那么糟糕),那么红色的 fit() 现在与 predict() 完全相同。我仍然不完全理解为什么它不能与 ARIMA 一起使用,因为它还考虑了多线性回归。

现在我的“简单”模型已经考虑了几个参数,比如温度、假期、学校一周中的一天和一天中的小时(当地时间,而不是 UCT)。如何进一步改进我的模型?如何确保参数不变?有具体的方法吗?

1个回答

原因是 ARIMA 是自动投影的,它使用最近的数据来计算过去值的加权平均值。预测时,前一步用于预测第二步等。这会导致接近渐近线的长期预测。拟合时,使用实际历史来预测下一个点。你应该做的是建立一个集成模型,包括确定性结构,如星期几、星期几系数的变化、考虑到假期等任何事件的月/周影响,并包括任何需要的可以检测并无缝整合的电平变化或本地时间趋势。此外,每月的特定日子和特定的星期可能会发挥作用。这是按小时和按日计算的。此外,将每日总和历史及其预测用作每个 24 小时模型的可能预测变量。确保验证 25 个模型中的每一个模型的参数都不会随时间变化,并且 25 个模型中的每一个模型的误差方差不会随时间变化。最后,您可能需要采用父母对孩子或孩子对父母的策略来调和任何差异。我们使用这些程序非常成功,您也应该成功。最后,您可能需要采用父母对孩子或孩子对父母的策略来调和任何差异。我们使用这些程序非常成功,您也应该成功。最后,您可能需要采用父母对孩子或孩子对父母的策略来调和任何差异。我们使用这些程序非常成功,您也应该成功。