这是我每周都有一些订单的数据集。我想预测下半年的订单。我试过建立ARIMA模型,但无法正常运作。
对于如此小的数据集,我还可以尝试其他模型吗?也许是HMM或尝试拟合多项式曲线或建立时间序列LSTM?
FW Order
1 6
2 45
3 59
4 60
5 50
6 115
7 23
8 44
9 164
10 8
11 30
12 20
13 0
14 50
15 60
16 0
17 50
18 30
19 115
20 75
21 54
22 29
23 124
24 32
25 28
答案 0 :(得分:0)
这是您的数据图。您的主要问题是,对于任何模型,实际上没有足够的数据来提供有意义的具有统计意义的预测。您的数据大多看起来像是平均值附近的白噪声,因此可以用以下形式表示:
x_t = mu + e
其中e是代表白噪声的误差项。
存在均值回归的提示,因此您可以尝试使用Ornstein Uhlenbeck模型:
dx_t = theta *(mu-x_t-1)dt + sigma * dW_t
https://en.wikipedia.org/wiki/Ornstein%E2%80%93Uhlenbeck_process
这里是编码。橙色线是预测。同样,预测并不理想,但是如果没有更多数据,您可能找不到更好的选择。
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
def least_squares_naive(s, delta=1.0):
y = s.diff().iloc[1:]
x = s.shift(1)[1:]
res = sm.OLS(y, sm.add_constant(x)).fit()
b, a = res.params
residual_df = y - (a * x + b)
se = residual_df.std(ddof=2)
lambda_ = -a / delta
mu_ = b / (lambda_ * delta)
sigma_ = se / (delta ** 0.5)
return mu_, lambda_, sigma_
list = [6,45,59,60,50,115,23,44,164,8,30,20,0,50,60,0,50,30,115,75,54,29,124,32,28]
s = pd.Series(list)
mu_, lambda_, sigma_ = least_squares_naive(s)
dx = -lambda_ * (s - mu_)
pred = (s + dx).shift()
diff = s.diff(1).dropna()
s.plot()
pred.plot()
plt.show()