我可以使用哪种模型来预测这些数据?

时间:2018-06-22 04:15:51

标签: python machine-learning time-series models data-science

这是我每周都有一些订单的数据集。我想预测下半年的订单。我试过建立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

1 个答案:

答案 0 :(得分:0)

enter image description here

这是您的数据图。您的主要问题是,对于任何模型,实际上没有足够的数据来提供有意义的具有统计意义的预测。您的数据大多看起来像是平均值附近的白噪声,因此可以用以下形式表示:

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()

enter image description here