月度趋势与 fb 先知-解读图表

数据挖掘 Python 时间序列 可视化 数据分析 预报
2021-09-15 21:48:10

我的月度数据在一列中有月/年,另一列有价格。我想在 python 中使用 fb 先知库获得年度趋势(如何使用库中的月度数据在本页末尾解释)。

这是我的代码:

import fbprophet
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('data.csv', sep=';')
data_prophet = fbprophet.Prophet(interval_width=0.95, changepoint_range=0.9, changepoint_prior_scale=0.15, seasonality_mode='multiplicative', n_changepoints=100)
data_prophet.fit(data)

# Make a future dataframe for 5 years
data_forecast = data_prophet.make_future_dataframe(periods=12 * 5, freq='M')
# Make predictions
data_forecast = data_prophet.predict(data_forecast)

#Plot
data_prophet.plot(data_forecast, xlabel = 'Date', ylabel = 'Price')
plt.show()

data_prophet.plot_components(data_forecast)
plt.show()

这就是我得到的: 在此处输入图像描述 在此处输入图像描述

乍一看,年度趋势的最小值/最大值似乎对应于月中,但它们每个月都不在同一点。选秀权稍微改变了一点。

如何绘制正确的年度图?这对月度数据有意义吗?

1个回答

如您提供的链接中所述,当您尝试查看以下时间步发生的情况时,您将遇到每月数据的问题他们没有使用与您完全相同的图表,但他们说:“在每个月初有数据点的地方,季节性的不确定性很低”。这似乎是这里发生的事情:在您的图表上,您可以看到每月没有季节性影响,因为乘法系数似乎在每个月初为 1:

月初亮点

在每月时间步长之下,似乎存在波动。我不是 100% 确定,但它可能是龙格现象的一个实际例子,在进行插值时会出现振荡。下面是 Runge 函数的图形示例:当您尝试使用多项式对其进行近似时会出现一些振荡,并且与直觉相反,当您尝试通过增加估计节点的数量来改进模型时,这些振荡的大小可能会增加。

                           

这可能是这里发生的情况,因为您没有完全平坦的效果,并且插值会在您的每月日期之间产生波动。

一般来说,对于先知框架,您提供的链接中提到了处理此问题的方法:

  • 如果您只想获得每月效果,请使用每月回归量。如前所述:“这种方法将避免上面看到的月内不可识别性。如果要添加每月额外的回归量,请务必使用 yearly_seasonality=False 。”
  • 只做每月预测,这可以通过将频率传递给 make_future_dataframe (freq='MS')

显然,主要的替代方案是使用另一个框架,它可能对它的确切作用更加透明。