Python中多季节预测的Holt-Winters方法
我的数据:我有两个季节性模式在我的每小时数据中...分别是每日和每周的模式。举个例子...我数据中的每一天在小时上大致都有相同的形状。不过,像星期六和星期天这样的特定日子,数据会有增加,而且小时的形状也会稍微不同。
(我使用的是霍尔特-温特斯方法,具体可以在这里找到:https://gist.github.com/andrequeiroz/5888967)
我运行了这个算法,设置每个季节24个周期,预测了7个季节(1周)。我发现它会对工作日的预测过高,而对周末的预测过低,因为它是根据星期五的曲线来估计星期六的曲线,而不是结合星期五和前一天(星期六的前一天)的曲线。那么,有什么好的方法可以在我的数据中加入一个次要周期,比如同时考虑24和7吗?我是否应该使用其他的算法?
1 个回答
一种明显的方法来考虑不同的形状,就是只用一种周期,但让它的周期是7天24小时,这样你就可以把整周当作一个形状来预测。
你有没有试过线性回归?它的意思是预测的值是一个线性趋势加上一些额外的变量贡献。最简单的例子就是趋势加上每天的贡献。这样你就可以写成:
Y = X*t + c + A*D1 + B*D2 + ... F * D6 (+ 噪声)
在这里,你用线性回归来找出X、c和A...F的最佳值。t代表时间,从0开始,依次加1、2、3……一直往下数,所以X的拟合值给你一个趋势。c是一个常数,它会把所有预测的Y值往上或往下移动。D1在星期二时设为1,其他时候设为0;D2在星期三时设为1,其他时候设为0……D6在星期天时设为1,其他时候设为0,所以A到F的部分就是给除了星期一以外的其他天的贡献。我们不为星期一设定一个变量,因为如果这样做,就无法区分c这个常数。如果你把c加1,同时把每个A到F减1,预测结果是不会改变的。
希望你现在能明白,我们可以增加23个变量来考虑每天24小时的形状,总共可以有46个变量来考虑每个工作日和每个周末的24小时形状。
你最好找一个统计软件来帮你处理这些,比如免费的R软件包(http://www.r-project.org/)。虽然它有一点学习曲线,但你可能能找到一些书籍或文章,教你如何用它进行这种预测。
无论你做什么,我建议你不断地用历史数据来检查预测方法——人们发现,实际上最准确的预测方法往往是出乎意料的简单。