时间序列笔记-评估模型准确性
笔记说明
在datacamp网站上学习“Time Series with R ”track
“Forecasting Using R”课程 做的对应笔记。
学识有限,错误难免,还请不吝赐教。
学习的课程为“Forecasting Using R”,主要用forecast包。
课程参考教材Forecasting: Principles and Practice
课程中数据可在fpp2包得到
训练集与测试集
如果使用全部数据用来建立预测模型,那么评估模型准确性只能基于训练数据,这样对模型准确性的评估是不可靠的。因为总是可以通过提高模型的复杂度来使模型对于训练数据拟合度更好而造成过拟合。过拟合下模型对于未来数据的预测能力是会降低的。
也就是说模型在训练数据上“预测”表现好,并不意味着模型的准确性高。
通常的做法是将全部数据分为训练集(train set)和测试集(test set)两个部分,一部分用于建立预测模型,另一部分用于评估模型。在时间序列数据中,总是把时间在后面的部分作为测试集。
一般会将更多的数据分给训练集,分配比例可以是7:3,8:2等。
需要注意的是,在用训练集建立模型时,不能利用任何测试集数据的信息。
测量准确性的指标
用表示实际测量值,表示模型生成的预测值,表示预测误差。
常见的测量模型准确性(Accuracy)的指标有:(平均绝对尺度误差的中文可能不准确)
Mean Absolute Error 平均绝对误差:
Mean Squared Error 均方误差:
Mean Absolute Percentage Error 平均绝对百分误差:
Mean Absolute Scaled Error:平均绝对尺度误差: (Q为尺度常数)
这些指标都是越小说明模型准确性越高。
实例
vn[,"Melbourne"]
中包含Melbounrne的季度游客数据。
可以用window()
对原时间序列数据进行训练集和测试集的拆分,window()
的start= end=参数来指定选择哪部分数据
用accuracy()
可以计算出上述准确性指标,需要提供给函数的参数包括模型(forecast类对象)和实际观测值。如果提供的实际观测值比模型对象中的生成的预测值多,函数会将多的数据识别为测试集数据。
train <- window(vn[, "Melbourne"], end = c(2014, 4))
fc <- snaive(train, h = 4)
accuracy(fc, vn[, "Melbourne"])
accuracy()
的输出包括training set 和 test set的各准确性指标,这里不详细列出了。