灰色模型就是当有很多未知因素左右变量时,对变量进行预测的建模。以灰色系统中单序列一阶线性微分方程模型GM(1,1)模型最为常用,具体介绍看该论文。
MATLAB封装好的gm11.m
函数可在这里下载,已经验证。
接下来我们检验下预测的效果,我们先对于没有什么规律的数据进行预测看看,因为有规律的数据譬如GDP年增长,人口增长之类的还是蛮准的。
一、无规律的数据
例如,一个早上7点50的石家庄到深圳的航班到达深圳的时间,我统计了7月2号到7月21号的所有时间,然后我们预测7月22号飞机什么时候到达。用上面的gm11
函数gm11(data, 1)
即可得到大概是11:41到。但是这种预测有没有含金量很难讲,毕竟基于20天的平均飞行时间,我也能得到类似的结果11:46。于是我决定用已有的数据进行验证,即用7月2号到4号的数据预测7月5号的,然后得出预测的绝对残差,毕竟我们知道7月5号的到达时间,然后依次类推,直到用7月2号到7月20号的数据预测7月21号的到达时间为止,我们分别用两种方法,平均值法和灰色预测法,结果大跌眼镜。
灰色模型预测竟然整体看起来还不如平均值预测的准一点。
代码如下:
%从7点50的飞行时间(分钟,包括延误之类的)
data = [293 341 173 183 316 170 155 343 297 185 185 157 193 264 298 221 238 231 203 280]'
error_gm = [];
error_avg = [];
for i =3:19
data_sample = data(1:i,:);
predict_gm = gm11(data_sample,1);
predict_avg = mean(data_sample);
error_gm = [error_gm; abs(predict_gm - data(i+1))];
error_avg = [error_avg; abs(predict_avg - data(i+1))];
end
二、有规律的数据
然后我们对有规律的数据进行预测看看,用网上的一个公司利润的例子,
灰色预测的就好多了,平均值估计就没意义了,因为年利润一直在增长。