我一直在尝试预测不同产品组的销售收入(显示的销售收入每天汇总所有产品,例如具有不同价格的智能手机作为一组),但还没有找到正确的方法。我几乎是时间序列分析/预测和使用 Python 的新手。我尝试使用 (S)ARIMA,但没有得到有意义的结果。我认为主要问题是我的数据太稀疏,我只有大约一年半的数据点。最重要的是,时间序列波动很大。我的假设是否正确,即 ARIMA 对像我这样的数据结构有问题?(因为它使用系列的平均值?)
顶部图像是“更好”的时间序列之一,底部图像是“平均”时间序列之一。我尝试重新采样每周数据,然后我认为预测更合适,但我失去了一周平均的一些信息。对于底部示例,每周数据仍然不足以使用 ARIMA。如果可能的话,我宁愿使用每日数据。最后,我想添加外生特征,如星期几、天气、促销等
鉴于我的数据的计数性质,我有哪些选择?我真的很感激一些指示。我的研究导致了“克罗斯顿方法”。它适合我的问题吗?我需要将我的 $ 更改为销售数字吗?是否有用于 croston 的 Python 包,还是我必须使用 R?任何帮助深表感谢。
编辑
澄清不同的时间序列代表什么:两者都是不同的产品组(我有大约 10-20 个)。而我更感兴趣的预测(因为我的大部分数据看起来都是这样)是最底层的。
我为底部时间序列做了更多准备。
from statsmodels.tsa.stattools import adfuller
series = dataframe["Sales Revenue2"]
X = series.values
result = adfuller(X)
(-1.3334675205365911,
0.6137252422831784,
15,
267,
{'1%': -3.4550813975770827,
'10%': -2.5725712007462582,
'5%': -2.8724265892710914},
3623.772858172633)
所以时间序列不是静止的。
现在使用分解:
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(dataframe["Sales Revenue2"], model='additive')
fig = result.plot()
plt.show()
老实说,我还没有想出 100% 的分解。由于模式每 7 天重复一次,图片是否显示我每周有季节性?
接下来看看 ACF 和 PACF
模式告诉我什么?
然后?
我也试图区分时间序列并得到
def difference(dataset, interval=1):
diff = list()
for i in range(interval, len(dataset)):
value = dataset[i] - dataset[i - interval]
diff.append(value)
return diff
PACF 看起来很时髦。(负值在 conf 区间外从 41 增加到 48 到 -1,然后在 49 处跳到正 3,之后缓慢下降) ACF 在 conf 区间内,除了 1 阶的负值
我的下一步是尝试使用 auto.arima(在 Python 中)
我试过 m=7,对于每周的季节性?和不同的起始值。
我不明白为什么那些是最适合的订单?这与我的第一个 ACF/PACF 相比如何 - 我是否需要 dif t=7 才能看到该顺序的真正 ACF、PACF?
我还尝试在没有季节性趋势设置 m=1 的情况下进行拟合。
到没有季节性的最佳模型 (12,1,1)(该顺序如何组合在一起?) 3743 与 3738 相比的 AIC
如果有人可以指导我了解我的结果,我将不胜感激。我可以使用 ARIMA 来预测我拥有的数据吗?新的结果看起来还不错。我得到的结果大多与上一个例子相似,只是在平均值附近。但是我之前是逐步使用的,现在我明确地尝试了更高的订单。如果我的非零值更少怎么办。我的方法是将时间序列转换为计数数据的方法是什么?
再次感谢!
(由于我没有足够的声誉,我不得不剪掉一些图表。第一个时间序列现在已经消失了,因为它并没有真正关注我的主题 - 我只是想展示一个比较。我还必须剪掉差异 ACF和PACF