作者简介:黄天元,复旦大学博士生。 他热爱数据科学和开源工具 (R)。 他致力于利用数据科学快速积累行业经验优势和科学知识发现。 他的兴趣包括但不限于信息测量、机器学习、数据可视化、应用统计建模、知识图谱等,是《R语言数据高效处理指南》(《R语言数据高效处理指南》)的作者。语言资料》(黄天源)【摘要书评试读】-京东图书)。 知乎专栏:R语言数据挖掘。 邮箱:欢迎合作交流。
模型建立后,可以通过预测值与实际值的差异来评估模型的效果。 数值因变量的评估方法有很多种,包括MASE/MAPE/MAE/RMSE等,我常用的是RMSE。
对于各个指标的介绍,这里不再赘述。 您可以参考:
1. AI技术大本营:避坑指南:如何选择合适的预测评估指标? | 程序员评论(中文)
2.3.4 | :和(英语)
在fpp2包中,可以使用函数来计算模型的精度:
library(fpp2)
# 抽取目标序列
beer2 <- window(ausbeer,start=1992,end=c(2007,4))
# 分别利用平均值、简单方法、季节简单方法进行拟合,预测时长为10个时间单位
beerfit1 <- meanf(beer2,h=10)
beerfit2 <- rwf(beer2,h=10)
beerfit3 <- snaive(beer2,h=10)
# 进行可视化
autoplot(window(ausbeer, start=1992)) +
autolayer(beerfit1, series="Mean", PI=FALSE) +
autolayer(beerfit2, series="Naïve", PI=FALSE) +
autolayer(beerfit3, series="Seasonal naïve", PI=FALSE) +
xlab("Year") + ylab("Megalitres") +
ggtitle("Forecasts for quarterly beer production") +
guides(colour=guide_legend(title="Forecast"))
# 提取验证集
beer3 <- window(ausbeer, start=2008)
# 预测集与验证集进行比较,计算各项评价指标
accuracy(beerfit1, beer3)
accuracy(beerfit2, beer3)
accuracy(beerfit3, beer3)
得到的核心结果如下:
可视化结果
准确度结果
以上方法都是基于之前的大序列,然后预测未来的连续序列并评估其效果。 事实上,评估设计还可以使用交叉验证(cross-)。 例如,如果有10天的数据,那么前3天的数据用于预测第4天,前4天的数据用于预测第5天...前9天的数据用于预测第10天天,然后将这些预测的残差组合起来作为预测的最终结果。 示意图如下:
原图链接:
例如,如果我们使用漂移预测方法来预测下一个时间单元,则使用CV设计的RMSE计算方法为:
goog200 %>% tsCV(forecastfunction=rwf, drift=TRUE, h=1) -> e
e^2 %>% mean(na.rm=TRUE) %>% sqrt()
#> [1] 6.233
tsCV函数的第一个参数是序列,第二个是预测函数,后面是预测函数的其他参数,输出是残差。 将残差平方再平均再开运算,这就是RMSE。
有时候我想用这个模型来预测后面更多时间单位的值,比如8,那么例子如下:
e <- tsCV(goog200, forecastfunction=naive, h=8)
# Compute the MSE values and remove missing values
mse <- colMeans(e^2, na.rm = T)
# Plot the MSE values against the forecast horizon
data.frame(h = 1:8, MSE = mse) %>%
ggplot(aes(x = h, y = MSE)) + geom_point()
可以看出,预测时间长度越长,模型的准确度可能越低(MSE越高)。