python - Python 中的 ARIMA 模型
问题描述
我正在使用 ARIMA 在 Python 中进行预测,以下是我的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from sklearn import datasets, linear_model
from sklearn.model_selection import train_test_split
HSBC = pd.read_csv('HSBC.csv', index_col = 'Date', parse_dates = True)
HSBC2 = HSBC['Close']
result = seasonal_decompose(HSBC2, model='multiplicative', period = 1)
from pmdarima import auto_arima
import warnings
warnings.filterwarnings("ignore")
stepwise_fit = auto_arima(HSBC2, start_p = 1, start_q = 1,
max_p = 3, max_q = 3, m = 12,
start_P = 0, seasonal = True,
d = None, D = 1, trace = True,
error_action ='ignore',
suppress_warnings = True,
stepwise = True)
train = HSBC2[0:173]
test = HSBC2[173:248]
model = SARIMAX(train, order = (0, 1, 1), seasonal_order =(0,1,1,12))
result = model.fit()
start = len(train)
end = len(train) + len(test) - 1
prediction = result.predict(start,end,
typ = 'levels').rename("Predictions")
predictions.plot(legend = True)
test.plot(legend = True)
我很困惑为什么预测图的 x 轴变成数字,它应该是像测试图一样的日期。
解决方案
如果我没有错,这是由于您没有指定索引的频率。试试这个:
HSBC.index = pd.date_range(freq='d', start=HSBC.index[0], periods=len(HSBC)
请注意,如果您的索引是每日间隔的,您应该频率='d'
编辑:
所以,答案就是改变 predict 方法的参数 start 和 end 参数,例如:
start = test['Date'].iloc[0]
end = test['Date'].iloc[-1]
prediction = result.predict(start,end,
typ = 'levels').rename("Predictions")
推荐阅读
- excel - Excel 多条件函数与介于
- java - 如何在 Spring Boot 中为 dev 和 prod 环境划分 Liquibase 包结构?
- docker - 有没有办法从 dockerfile 本身执行 docker push 命令?
- r - 如何在 levelplot 中可视化对数刻度
- c++ - 整个循环花费的时间比它的迭代总和要长
- android - 从 APK 中删除未使用的 R.* 常量是否安全?
- angular - 来自主题森林或类似的角度模板
- ios - :-1: 链接器命令失败,退出代码为 1(使用 -v
- web-crawler - 测试 LinkParseFilter 的快速方法
- swift - 从远处的光线投射阴影