我可以用什么样的模型来预测这些数据?

2024-04-25 22:45:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我每周收到的一些订单的数据集。我想预测下半年的订单。我试过建立一个ARIMA模型,但它不起作用。你知道吗

对于这样一个小的数据集,我还可以尝试其他模型吗?也许是一个隐马尔可夫模型,或者尝试拟合多项式曲线,或者建立一个时间序列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


Tags: 数据订单模型时间order序列曲线lstm
1条回答
网友
1楼 · 发布于 2024-04-25 22:45:17

enter image description here

这是你的数据图。你的主要问题是没有足够的数据,任何模型都无法给出有意义的统计意义的预测。你的数据看起来就像是平均值周围的白噪声,所以你可以用:

x\u t=mu+e

其中e是表示白噪声的误差项。你知道吗

有一个均值回归的暗示,所以你可以尝试一个Ornstein-Uhlenbeck模型:

dx\u t=θ*(mu-x\u t-1)dt+sigma*dW\u 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

相关问题 更多 >