使用Holt-Winters在Python中进行预测

Wer*_*ern 24 python statistics forecasting

我一直在尝试使用Holt-Winters算法的这种实现来进行Python中的时间序列预测,但是遇到了障碍......基本上,对于某些(正)输入系列,它有时会预测负数,这应该清楚不是这样的.即使预测不是负面的,它们有时也是非常不准确的 - 比它们应该的数量级更高/更低.为算法提供更多的数据周期似乎没有帮助,实际上往往会使预测变得更糟.

我正在使用的数据具有以下特征,可能是问题:

  • 非常频繁地采样(每15分钟一个数据点,而不是示例使用的月度数据) - 但从我所读到的,Holt-Winters算法应该没有问题.也许这表明实施存在问题?

  • 有多个周期 - 每日峰值(即每96个数据点)以及周末数据的每周周期显着低于工作日数据 - 例如工作日可以在4000左右达到峰值但周末达到峰值1000 - 但即使我只给出它是工作日的数据,我遇到了负数问题.

对于Holt-Winters算法的实现或使用,我是否还缺少一些东西?我不是统计学家,所以我使用上面链接中指出的alpha,beta和gamma的'默认'值 - 这可能是问题,是否有更好的方法来计算这些值?

或者......有没有比Holt-Winters更好的算法?最后,我只想根据历史数据创建合理的预测.我尝试过单指数和双指数平滑,但(据我所知)并不支持数据的周期性.

任何帮助/输入将不胜感激!

Mu *_*ind 2

我尝试生成随机数据,直到得到有趣的结果。在这里,我输入了所有正数并得到了负预测:

y = [0.92, 0.78, 0.92, 0.61, 0.47, 0.4, 0.59, 0.13, 0.27, 0.31, 0.24, 0.01]
holtwinters(y, 0.2, 0.1, 0.05, 4)

...
forecast: -0.104857182966
forecast: -0.197407475203
forecast: -0.463988558577
forecast: -0.258023593197
Run Code Online (Sandbox Code Playgroud)

但请注意,预测符合数据的负斜率。

这可能是您正在谈论的数量级:

y = [0.1, 0.68, 0.15, 0.08, 0.94, 0.58, 0.35, 0.38, 0.7, 0.74, 0.93, 0.87]
holtwinters(y, 0.2, 0.1, 0.05, 4)

...
forecast: 1.93777559066
forecast: 3.11109138055
forecast: 0.910967977635
forecast: 0.684668348397
Run Code Online (Sandbox Code Playgroud)

但我不确定你如何认为它非常不准确或判断它“应该”更低。


每当你推断数据时,你都会得到一些令人惊讶的结果。您是否更担心实现可能不正确或者输出不具有适合您的特定用途的良好属性?