python - 无法预测测试数据时间序列 ARIMA
问题描述
我正在尝试使用 ARIMA 模型来预测股票价格数据,具体来说,我正在使用 auto_arima。我的目标是预测未来 30 天的股价,并将其与测试数据进行比较。
这是我使用的代码:
#general
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
%matplotlib inline
import yfinance as yf
ticker = "0118.KL"
data = yf.Ticker(ticker)
df = data.history(start="2019-01-01",end="2020-04-30")
df = df.filter(items=['Close'])
train = df[:-30]
test = df[-30:]
from pmdarima import auto_arima
model = auto_arima(train,trace=True,m=7,error_action='ignore', suppress_warnings=True)
model.fit(train)
forecast = model.predict(n_periods=30)
forecast = pd.DataFrame(forecast,index = test.index,columns=['Prediction'])
plt.plot(test, label='Valid')
plt.plot(forecast, label='Prediction')
plt.show()
关于如何更好地适应的任何想法?感谢您的阅读。
解决方案
在预测之前,您需要检查您的模型是否已准备好进行预测。1)检查模型的诊断
model.plot_diagnostics(figsize=(8,8))
检查残差是否呈正态分布,残差是否存在相关性。
2)获取模型的统计信息
model.summary()
这显示了 AIC 分数和 Ljung-Box(Prob(Q)) 和 Jarque-Bera (Prob(JB)) 统计量。您可以使用 p 值确认残差中的残差分布和相关性。如果满足所有这些条件,您可以使用模型进行预测。否则您需要调整参数。
推荐阅读
- java - BigDecimal.setScale() 不返回正确的结果
- mysql - 如何查找发生行锁争用的表名?
- python - 如何按行获得组中的百分比?
- python - Python - 运行代码时控制台中未出现 While 循环
- node.js - Axios - 使用 url + 变量发送获取请求
- open-liberty - 将 openliberty 与 IBM Extreme scale 网格缓存集成
- excel - 使用 Excel 进行 GROUP BY 并查找日期 WHERE MAX
- amazon-web-services - 使用 AWS Lambda 按顺序处理来自 SQS 队列的元素
- python - Python中的多维列表控件
- jquery - 无法读取未定义的属性“调用”。检查元素“UnitName”时发生异常,检查“minLength”方法