神经网络模型
预测组合
Bagging
预测现实
时间序列通常可以按照各种感兴趣的属性自然地进行分类,如组织结构、地理位置或地理结构、产品层次结构。
澳大利亚分为八个地理区域(一些称为州,另一些称为地区),每个区域都有自己的政府和一些经济和行政自治机构。这些中的每一个可以按兴趣进一步细分为更小的部分,称为区。
商业规划者和旅游部门对整个澳大利亚,各州和地区以及各区的预测很感兴趣。在这个例子中,我们主要关注国内旅游的季度需求,以澳大利亚人出门在外的过夜数来衡量。
有六个州:新南威尔士州(NSW),昆士兰州(QLD),南澳大利亚州(SAU),维多利亚州(VIC),西澳大利亚州(WAU)和其他州(OTH)。对于其中的每一个州,我们考虑以下这些区的游客过夜数。
州 | 区 |
---|---|
NSW | 大都会(NSWMetro),北海岸(NSWNthCo),南海岸(NSWSthCo),南部内陆(NSWSthIn),北部内陆(NSWNthIn) |
QLD | 大都会(QLDMetro),中部(QLDCntrl),北海岸(QLDNthCo) |
SAU | 大都会(SAUMetro),海岸(SAUCoast),内陆(SAUInner) |
VIC | 大都会(VICMetro),西海岸(VICWstCo),东海岸(VICEstCo),内陆(VICInner) |
WAU | 大都会(WAUMetro),海岸(WAUCoast),内陆(WAUInner) |
OTH | 大都会(OTHMetro),非大都会(OTHNoMet) |
hts()
library(hts)tourism.hts <- hts(visnights, characters = c(3, 5))tourism.hts %>% aggts(levels=0:1) %>% autoplot(facet=TRUE) + xlab("年份") + ylab("百万") + ggtitle("游客过夜数")+ theme(plot.title = element_text(hjust = 0.5))
forecast(tourism.hts, method="bu", fmethod="arima")
## Hierarchical Time Series ## 3 Levels ## Number of nodes at each level: 1 6 20 ## Total number of series: 27 ## Number of observations in each historical series: 76 ## Number of forecasts per series: 8 ## Top level series of forecasts: ## Qtr1 Qtr2 Qtr3 Qtr4## 2017 90.76257 72.40181 76.00051 78.42748## 2018 90.16914 72.78868 75.65169 78.33982
forecast(tourism.hts, method="tdfp", fmethod="arima")
## Hierarchical Time Series ## 3 Levels ## Number of nodes at each level: 1 6 20 ## Total number of series: 27 ## Number of observations in each historical series: 76 ## Number of forecasts per series: 8 ## Top level series of forecasts: ## Qtr1 Qtr2 Qtr3 Qtr4## 2017 95.65193 78.02317 82.30592 83.67373## 2018 97.22648 79.59772 83.88048 85.24828
forecast(tourism.hts, method="mo", fmethod="arima", level=1)
## Hierarchical Time Series ## 3 Levels ## Number of nodes at each level: 1 6 20 ## Total number of series: 27 ## Number of observations in each historical series: 76 ## Number of forecasts per series: 8 ## Top level series of forecasts: ## Qtr1 Qtr2 Qtr3 Qtr4## 2017 93.32627 75.70450 79.51271 81.15298## 2018 93.90874 76.57744 80.37253 82.02744
forecast(tourism.hts, method="comb", fmethod="arima")
## Hierarchical Time Series ## 3 Levels ## Number of nodes at each level: 1 6 20 ## Total number of series: 27 ## Number of observations in each historical series: 76 ## Number of forecasts per series: 8 ## Top level series of forecasts: ## Qtr1 Qtr2 Qtr3 Qtr4## 2017 92.55729 74.59201 78.37077 80.33918## 2018 92.75248 75.35934 78.79227 80.88062
train <- window(tourism.hts, end = c(2014, 4))test <- window(tourism.hts, start = 2015)fcsts.opt <- forecast(train, h = 8, method = "comb", fmethod = "arima")fcsts.bu <- forecast(train, h = 8, method = "bu", fmethod = "arima")cbind(accuracy(fcsts.opt, test, levels = 0), accuracy(fcsts.bu, test, levels = 0))
## Total Total## ME 8.338903 8.521813## RMSE 8.708361 8.894777## MAE 8.338903 8.521813## MAPE 10.232566 10.453860## MPE 10.232566 10.453860## MASE 2.552022 2.607999
自下而上法 |
最优调和法 |
|||
---|---|---|---|---|
MAPE | MASE | MAPE | MASE | |
总计 | 10.45 | 2.61 | 10.23 | 2.55 |
州 | 12.01 | 1.71 | 11.93 | 1.73 |
底层 | 13.92 | 1.29 | 13.86 | 1.29 |
所有序列 | 13.37 | 1.43 | 13.29 | 1.44 |
神经网络可以被理解为是一种分层的“神经元”网络结构。
预测变量(或输入)构成底层,响应变量(或输出)构成顶层。还可能存在包含“隐藏神经元”的中间层。
最简单的网络不包含中间的隐藏层,等价于线性回归。
与线性回归等价的简单神经网络。
如果我们增加一个包含隐藏神经元的中间层,神经网络就成为非线性形式。
包含4个输入及1个隐藏层的神经网络,其中隐藏层中包含3个隐藏神经元。
函数 nnetar()
可用于拟合 NNAR( p,P,k) m 模型。
使用神经网络进行预测的时候,计算会迭代进行。比如向前预测一步时,我们只需要将历史数据作为输入。向前预测两步时,需要将历史数据和向前一步预测值作为神经网络的输入。这样的迭代会继续向后进行,直到所有需要的预测值都被计算出来。
太阳的表面含有磁区,这些磁区看起来像黑色的点。它们会影响无线电波的传播,因此电信公司喜欢预测太阳黑子的活动,以便为将来的困难做好准备。太阳黑子的一个周期为9到14年。下图中展示了 NNAR(10,6) 模型未来30年的预测值。我们进行了lambda=0
的Box-Cox 变换,以确保预测值始终为正数值。
fit <- nnetar(sunspotarea, lambda=0)autoplot(forecast(fit,h=30)) + xlab("时间") + ylab("太阳黑子活动")
把不同的模型组合在一起进行预测通常会得到比最优预测更优的结果。
简单组合: fc=1P∑Pi=1fi。
基于回归的组合: fc=∑Pi=1βifi。
基于特征的组合: fc=∑Pi=1ωifi。
我们使用以下模型进行预测: ETS , ARIMA , STL-ETS , NNAR 和 TBATS ;我们对过去5年(60个月)的观察结果进行比较。
train <- window(auscafe, end=c(2012,9))h <- length(auscafe) - length(train)ETS <- forecast(ets(train), h=h)ARIMA <- forecast(auto.arima(train, lambda=0, biasadj=TRUE), h=h)STL <- stlf(train, lambda=0, h=h, biasadj=TRUE)NNAR <- forecast(nnetar(train), h=h)TBATS <- forecast(tbats(train, biasadj=TRUE), h=h)Combination <- (ETS[["mean"]] + ARIMA[["mean"]] + STL[["mean"]] + NNAR[["mean"]] + TBATS[["mean"]])/5autoplot(auscafe) + autolayer(ETS, series="ETS", PI=FALSE) + autolayer(ARIMA, series="ARIMA", PI=FALSE) + autolayer(STL, series="STL", PI=FALSE) + autolayer(NNAR, series="NNAR", PI=FALSE) + autolayer(TBATS, series="TBATS", PI=FALSE) + autolayer(Combination, series="Combination") + xlab("年") + ylab("十亿美元") + ggtitle("澳大利亚外出就餐月支出")
c(ETS=accuracy(ETS, auscafe)["Test set","RMSE"], ARIMA=accuracy(ARIMA, auscafe)["Test set","RMSE"], `STL-ETS`=accuracy(STL, auscafe)["Test set","RMSE"], NNAR=accuracy(NNAR, auscafe)["Test set","RMSE"], TBATS=accuracy(TBATS, auscafe)["Test set","RMSE"], Combination=accuracy(Combination, auscafe)["Test set","RMSE"])
## ETS ARIMA STL-ETS NNAR TBATS Combination ## 0.13699696 0.15919858 0.19310148 0.33548889 0.09406039 0.07217230
参考预测组合综述论文:
Xiaoqian Wang, Rob Hyndman, Feng Li, Yanfei Kang (2023). Forecast combinations: an over 50-year review. International Journal of Forecasting 39(4): 1518-1547. https://yanfei.site/docs/paper/fcreview.pdf
bootseries <- bld.mbb.bootstrap(debitcards, 10) %>% as.data.frame() %>% ts(start=2000, frequency=12)autoplot(debitcards) + autolayer(bootseries, colour=TRUE) + autolayer(debitcards, colour=FALSE) + xlab("时间") + ylab("Bootstrap 序列") + guides(colour="none")
Bootstrap 得到的时间序列可以用来提高预测的准确性。
如果我们对每一个 Bootstrap 时间序列进行预测,并对预测结果进行平均,那么我们会得到相比直接对原始时间序列进行预测更好的预测结果。
这个过程称为"bagging"。
etsfc <- debitcards %>% ets() %>% forecast(h=36)baggedfc <- debitcards %>% baggedETS() %>% forecast(h=36)autoplot(debitcards) + autolayer(baggedfc$mean, series="BaggedETS") + autolayer(etsfc$mean, series="ETS") + guides(colour=guide_legend(title="Forecasts")) + xlab("时间") + ylab("借记卡月支出")
"In theory, there is no difference between theory and practice. But, in practice, there is."
-- Benjamin Brewster (1882).
周数据很难进行预测是因为季节周期(一年中的周数)非常大且非整数。一年中的平均周数是 52.18 。我们考虑的大多数方法都是基于整数季节周期进行的。即使我们将周数据的季节周期近似为52,大多数方法也难以有效地处理这么大的季节周期数据。
STL 分解,并将非季节性方法应用于季节调整数据
动态谐波回归模型
gasoline %>% stlf() %>% autoplot() + xlab("时间")
日数据和日以下数据难以预测的原因与周数据相比则有所不同 —— 它们通常涉及多个季节模式,所以我们需要使用一种能处理这种复杂季节性数据的方法。
STL、动态谐波回归或者 TBATS。
适用于常规季节性的时间序列。捕捉像复活节、农历新年这些移动事件的季节性是十分困难的。即使有月度数据也很棘手,因为这些节日可能在三月或四月(复活节),一月或二月(农历新年),也可能在一年中的任何时候。
处理移动节日的最佳方法是使用虚拟变量作为协变量,此时可以使用动态回归模型/其他形式的回归模型,在此模型中,自变量中可以包含描述节日效应的虚拟变量(也可以是傅里叶项)。
productC %>% croston() %>% autoplot() + xlab("时间") + ggtitle('某石油公司润滑剂销量')
参考 tsintermittent
包。
如何使用很少的数据点来拟合时间序列模型?
取决于要估计的模型参数的数量和数据的随机性。
对于 ARIMA 建模通常给出最小样本量为30。
对于数据量有限的数据,推荐简单模型。
大多数时间序列模型对长期时间序列都不适用。
如何处理这些问题取决于模型的目的。可以使用更加灵活和复杂的模型,但这仍然需要假定模型结构适用于整个数据周期。更好的方法通常是允许模型本身随时间变化。
如果你只对预测接下来的少数观测值感兴趣,一个简单的方法就是抛弃最早的观测值,只用最近的观测值拟合模型。
当缺失值引发报错时,至少有两种方法可以解决问题。首先,假如有足够长的观测序列可以用来进行有意义的预测时,我们可以只选取最后一个缺失值之后的数据部分。或者,我们可以用估计值替换缺失值。na.interp()
函数可以实现这个过程。
函数 tsoutliers()
函数用于识别离群值,并提供可能的替换值。
另一个有用的函数是 tsclean()
,它能够标识并替换离群值,也能够替换缺失值。
gold2 <- na.interp(gold)autoplot(gold2, series="Interpolated") + autolayer(gold, series="Original") + scale_color_manual(values=c(`Interpolated`="red",`Original`="gray")) + xlab("时间")
tsoutliers(gold)
## $index## [1] 770## ## $replacements## [1] 494.9
gold %>% tsclean() %>% ets() %>% forecast(h=50) %>% autoplot() + xlab("时间")
预测组合 (M 竞赛)
No-Free-Lunch(M4 竞赛)
任选感兴趣领域的时间序列数据,根据其特点,选择适当的预测方法完成预测。报告应使用规定封面,内容详实,包括且不限于:
研究意义
研究方法
研究结果
结论
神经网络模型
预测组合
Bagging
预测现实
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
o | Tile View: Overview of Slides |
s | Toggle scribble toolbox |
Esc | Back to slideshow |
神经网络模型
预测组合
Bagging
预测现实
时间序列通常可以按照各种感兴趣的属性自然地进行分类,如组织结构、地理位置或地理结构、产品层次结构。
澳大利亚分为八个地理区域(一些称为州,另一些称为地区),每个区域都有自己的政府和一些经济和行政自治机构。这些中的每一个可以按兴趣进一步细分为更小的部分,称为区。
商业规划者和旅游部门对整个澳大利亚,各州和地区以及各区的预测很感兴趣。在这个例子中,我们主要关注国内旅游的季度需求,以澳大利亚人出门在外的过夜数来衡量。
有六个州:新南威尔士州(NSW),昆士兰州(QLD),南澳大利亚州(SAU),维多利亚州(VIC),西澳大利亚州(WAU)和其他州(OTH)。对于其中的每一个州,我们考虑以下这些区的游客过夜数。
州 | 区 |
---|---|
NSW | 大都会(NSWMetro),北海岸(NSWNthCo),南海岸(NSWSthCo),南部内陆(NSWSthIn),北部内陆(NSWNthIn) |
QLD | 大都会(QLDMetro),中部(QLDCntrl),北海岸(QLDNthCo) |
SAU | 大都会(SAUMetro),海岸(SAUCoast),内陆(SAUInner) |
VIC | 大都会(VICMetro),西海岸(VICWstCo),东海岸(VICEstCo),内陆(VICInner) |
WAU | 大都会(WAUMetro),海岸(WAUCoast),内陆(WAUInner) |
OTH | 大都会(OTHMetro),非大都会(OTHNoMet) |
hts()
library(hts)tourism.hts <- hts(visnights, characters = c(3, 5))tourism.hts %>% aggts(levels=0:1) %>% autoplot(facet=TRUE) + xlab("年份") + ylab("百万") + ggtitle("游客过夜数")+ theme(plot.title = element_text(hjust = 0.5))
forecast(tourism.hts, method="bu", fmethod="arima")
## Hierarchical Time Series ## 3 Levels ## Number of nodes at each level: 1 6 20 ## Total number of series: 27 ## Number of observations in each historical series: 76 ## Number of forecasts per series: 8 ## Top level series of forecasts: ## Qtr1 Qtr2 Qtr3 Qtr4## 2017 90.76257 72.40181 76.00051 78.42748## 2018 90.16914 72.78868 75.65169 78.33982
forecast(tourism.hts, method="tdfp", fmethod="arima")
## Hierarchical Time Series ## 3 Levels ## Number of nodes at each level: 1 6 20 ## Total number of series: 27 ## Number of observations in each historical series: 76 ## Number of forecasts per series: 8 ## Top level series of forecasts: ## Qtr1 Qtr2 Qtr3 Qtr4## 2017 95.65193 78.02317 82.30592 83.67373## 2018 97.22648 79.59772 83.88048 85.24828
forecast(tourism.hts, method="mo", fmethod="arima", level=1)
## Hierarchical Time Series ## 3 Levels ## Number of nodes at each level: 1 6 20 ## Total number of series: 27 ## Number of observations in each historical series: 76 ## Number of forecasts per series: 8 ## Top level series of forecasts: ## Qtr1 Qtr2 Qtr3 Qtr4## 2017 93.32627 75.70450 79.51271 81.15298## 2018 93.90874 76.57744 80.37253 82.02744
forecast(tourism.hts, method="comb", fmethod="arima")
## Hierarchical Time Series ## 3 Levels ## Number of nodes at each level: 1 6 20 ## Total number of series: 27 ## Number of observations in each historical series: 76 ## Number of forecasts per series: 8 ## Top level series of forecasts: ## Qtr1 Qtr2 Qtr3 Qtr4## 2017 92.55729 74.59201 78.37077 80.33918## 2018 92.75248 75.35934 78.79227 80.88062
train <- window(tourism.hts, end = c(2014, 4))test <- window(tourism.hts, start = 2015)fcsts.opt <- forecast(train, h = 8, method = "comb", fmethod = "arima")fcsts.bu <- forecast(train, h = 8, method = "bu", fmethod = "arima")cbind(accuracy(fcsts.opt, test, levels = 0), accuracy(fcsts.bu, test, levels = 0))
## Total Total## ME 8.338903 8.521813## RMSE 8.708361 8.894777## MAE 8.338903 8.521813## MAPE 10.232566 10.453860## MPE 10.232566 10.453860## MASE 2.552022 2.607999
自下而上法 |
最优调和法 |
|||
---|---|---|---|---|
MAPE | MASE | MAPE | MASE | |
总计 | 10.45 | 2.61 | 10.23 | 2.55 |
州 | 12.01 | 1.71 | 11.93 | 1.73 |
底层 | 13.92 | 1.29 | 13.86 | 1.29 |
所有序列 | 13.37 | 1.43 | 13.29 | 1.44 |
神经网络可以被理解为是一种分层的“神经元”网络结构。
预测变量(或输入)构成底层,响应变量(或输出)构成顶层。还可能存在包含“隐藏神经元”的中间层。
最简单的网络不包含中间的隐藏层,等价于线性回归。
与线性回归等价的简单神经网络。
如果我们增加一个包含隐藏神经元的中间层,神经网络就成为非线性形式。
包含4个输入及1个隐藏层的神经网络,其中隐藏层中包含3个隐藏神经元。
函数 nnetar()
可用于拟合 NNAR( p,P,k) m 模型。
使用神经网络进行预测的时候,计算会迭代进行。比如向前预测一步时,我们只需要将历史数据作为输入。向前预测两步时,需要将历史数据和向前一步预测值作为神经网络的输入。这样的迭代会继续向后进行,直到所有需要的预测值都被计算出来。
太阳的表面含有磁区,这些磁区看起来像黑色的点。它们会影响无线电波的传播,因此电信公司喜欢预测太阳黑子的活动,以便为将来的困难做好准备。太阳黑子的一个周期为9到14年。下图中展示了 NNAR(10,6) 模型未来30年的预测值。我们进行了lambda=0
的Box-Cox 变换,以确保预测值始终为正数值。
fit <- nnetar(sunspotarea, lambda=0)autoplot(forecast(fit,h=30)) + xlab("时间") + ylab("太阳黑子活动")
把不同的模型组合在一起进行预测通常会得到比最优预测更优的结果。
简单组合: fc=1P∑Pi=1fi。
基于回归的组合: fc=∑Pi=1βifi。
基于特征的组合: fc=∑Pi=1ωifi。
我们使用以下模型进行预测: ETS , ARIMA , STL-ETS , NNAR 和 TBATS ;我们对过去5年(60个月)的观察结果进行比较。
train <- window(auscafe, end=c(2012,9))h <- length(auscafe) - length(train)ETS <- forecast(ets(train), h=h)ARIMA <- forecast(auto.arima(train, lambda=0, biasadj=TRUE), h=h)STL <- stlf(train, lambda=0, h=h, biasadj=TRUE)NNAR <- forecast(nnetar(train), h=h)TBATS <- forecast(tbats(train, biasadj=TRUE), h=h)Combination <- (ETS[["mean"]] + ARIMA[["mean"]] + STL[["mean"]] + NNAR[["mean"]] + TBATS[["mean"]])/5autoplot(auscafe) + autolayer(ETS, series="ETS", PI=FALSE) + autolayer(ARIMA, series="ARIMA", PI=FALSE) + autolayer(STL, series="STL", PI=FALSE) + autolayer(NNAR, series="NNAR", PI=FALSE) + autolayer(TBATS, series="TBATS", PI=FALSE) + autolayer(Combination, series="Combination") + xlab("年") + ylab("十亿美元") + ggtitle("澳大利亚外出就餐月支出")
c(ETS=accuracy(ETS, auscafe)["Test set","RMSE"], ARIMA=accuracy(ARIMA, auscafe)["Test set","RMSE"], `STL-ETS`=accuracy(STL, auscafe)["Test set","RMSE"], NNAR=accuracy(NNAR, auscafe)["Test set","RMSE"], TBATS=accuracy(TBATS, auscafe)["Test set","RMSE"], Combination=accuracy(Combination, auscafe)["Test set","RMSE"])
## ETS ARIMA STL-ETS NNAR TBATS Combination ## 0.13699696 0.15919858 0.19310148 0.33548889 0.09406039 0.07217230
参考预测组合综述论文:
Xiaoqian Wang, Rob Hyndman, Feng Li, Yanfei Kang (2023). Forecast combinations: an over 50-year review. International Journal of Forecasting 39(4): 1518-1547. https://yanfei.site/docs/paper/fcreview.pdf
bootseries <- bld.mbb.bootstrap(debitcards, 10) %>% as.data.frame() %>% ts(start=2000, frequency=12)autoplot(debitcards) + autolayer(bootseries, colour=TRUE) + autolayer(debitcards, colour=FALSE) + xlab("时间") + ylab("Bootstrap 序列") + guides(colour="none")
Bootstrap 得到的时间序列可以用来提高预测的准确性。
如果我们对每一个 Bootstrap 时间序列进行预测,并对预测结果进行平均,那么我们会得到相比直接对原始时间序列进行预测更好的预测结果。
这个过程称为"bagging"。
etsfc <- debitcards %>% ets() %>% forecast(h=36)baggedfc <- debitcards %>% baggedETS() %>% forecast(h=36)autoplot(debitcards) + autolayer(baggedfc$mean, series="BaggedETS") + autolayer(etsfc$mean, series="ETS") + guides(colour=guide_legend(title="Forecasts")) + xlab("时间") + ylab("借记卡月支出")
"In theory, there is no difference between theory and practice. But, in practice, there is."
-- Benjamin Brewster (1882).
周数据很难进行预测是因为季节周期(一年中的周数)非常大且非整数。一年中的平均周数是 52.18 。我们考虑的大多数方法都是基于整数季节周期进行的。即使我们将周数据的季节周期近似为52,大多数方法也难以有效地处理这么大的季节周期数据。
STL 分解,并将非季节性方法应用于季节调整数据
动态谐波回归模型
gasoline %>% stlf() %>% autoplot() + xlab("时间")
日数据和日以下数据难以预测的原因与周数据相比则有所不同 —— 它们通常涉及多个季节模式,所以我们需要使用一种能处理这种复杂季节性数据的方法。
STL、动态谐波回归或者 TBATS。
适用于常规季节性的时间序列。捕捉像复活节、农历新年这些移动事件的季节性是十分困难的。即使有月度数据也很棘手,因为这些节日可能在三月或四月(复活节),一月或二月(农历新年),也可能在一年中的任何时候。
处理移动节日的最佳方法是使用虚拟变量作为协变量,此时可以使用动态回归模型/其他形式的回归模型,在此模型中,自变量中可以包含描述节日效应的虚拟变量(也可以是傅里叶项)。
productC %>% croston() %>% autoplot() + xlab("时间") + ggtitle('某石油公司润滑剂销量')
参考 tsintermittent
包。
如何使用很少的数据点来拟合时间序列模型?
取决于要估计的模型参数的数量和数据的随机性。
对于 ARIMA 建模通常给出最小样本量为30。
对于数据量有限的数据,推荐简单模型。
大多数时间序列模型对长期时间序列都不适用。
如何处理这些问题取决于模型的目的。可以使用更加灵活和复杂的模型,但这仍然需要假定模型结构适用于整个数据周期。更好的方法通常是允许模型本身随时间变化。
如果你只对预测接下来的少数观测值感兴趣,一个简单的方法就是抛弃最早的观测值,只用最近的观测值拟合模型。
当缺失值引发报错时,至少有两种方法可以解决问题。首先,假如有足够长的观测序列可以用来进行有意义的预测时,我们可以只选取最后一个缺失值之后的数据部分。或者,我们可以用估计值替换缺失值。na.interp()
函数可以实现这个过程。
函数 tsoutliers()
函数用于识别离群值,并提供可能的替换值。
另一个有用的函数是 tsclean()
,它能够标识并替换离群值,也能够替换缺失值。
gold2 <- na.interp(gold)autoplot(gold2, series="Interpolated") + autolayer(gold, series="Original") + scale_color_manual(values=c(`Interpolated`="red",`Original`="gray")) + xlab("时间")
tsoutliers(gold)
## $index## [1] 770## ## $replacements## [1] 494.9
gold %>% tsclean() %>% ets() %>% forecast(h=50) %>% autoplot() + xlab("时间")
预测组合 (M 竞赛)
No-Free-Lunch(M4 竞赛)
任选感兴趣领域的时间序列数据,根据其特点,选择适当的预测方法完成预测。报告应使用规定封面,内容详实,包括且不限于:
研究意义
研究方法
研究结果
结论