这是因为 arima_model.fitted_values 是模型对已有数据的拟合值,而 arima_model.plot_predict() 是用已有数据拟合后模型预测未来的值。因此,两者的结果不同是正常现象。
如果需要使用同一数据进行拟合和预测,并且希望得到相同的结果,可以使用 SARIMAX 类中的 predict() 方法。该方法既可以进行拟合值的计算,也可以进行未来值的预测,示例如下:
import pandas as pd
import numpy as np
import statsmodels.api as sm
# 读入数据并转化为时间序列格式
df = pd.read_csv('data.csv', parse_dates=[0], index_col=0)
# 构建 SARIMAX 模型
arima_model = sm.tsa.SARIMAX(df, order=(2, 1, 1), seasonal_order=(0, 1, 1, 12))
# 拟合模型并计算拟合值
fitted_values = arima_model.fit().fittedvalues
# 预测未来值并绘制图像
predicted_values = arima_model.predict(start='2021-01-01', end='2022-01-01')
arima_model.plot_predict(start='2016-01-01', end='2022-01-01')