ARMA模型预测图表与训练测试数据坐标轴不匹配问题求助
问题排查与解决方案
你的图表坐标轴偏移的核心原因是预测结果的绘图逻辑错误,同时存在几个细节问题导致显示异常,以下是具体修正步骤:
1. 修正预测结果的绘图逻辑
当前代码中这一行存在严重逻辑错误:
plt.plot(y_pred_out, test['visit_count'], color='green', label = 'Predictions')
这行代码错误地将y_pred_out(带日期索引的预测值序列)当作X轴,把test['visit_count'](测试集真实值)当作Y轴绘制,直接导致坐标轴错位。
正确做法是直接绘制y_pred_out——它的索引已经和测试集日期对齐,无需额外传入X轴数据:
plt.plot(y_pred_out, color='green', label = 'Predictions')
2. 调整图例显示位置
你把plt.legend()放在了plt.show()之后,此时绘图窗口已关闭,图例无法显示。需将其移到plt.show()之前:
plt.ylabel('Number of Class') plt.xlabel('date') plt.xticks(rotation=45) plt.title("Train/Test split for Class Data") plt.legend() # 移至show之前 plt.show()
3. 验证日期索引一致性
确保训练集、测试集和预测结果的日期索引为统一的datetime类型,避免因类型不一致导致轴对齐问题。可在拆分数据集后添加验证代码:
# 检查索引类型 print("训练集索引类型:", train.index.dtype) print("测试集索引类型:", test.index.dtype) print("预测结果索引类型:", y_pred_out.index.dtype) # 若存在日期缺失(如示例中2021-09-03无数据),建议补全缺失日期: # idx = pd.date_range(start=data3.index.min(), end=data3.index.max(), freq='D') # data3 = data3.reindex(idx, fill_value=0)
修正后的完整绘图代码
train = data3[data3.index < pd.to_datetime("2022-11-01", format='%Y-%m-%d')] test = data3[data3.index > pd.to_datetime("2022-11-01", format='%Y-%m-%d')] y = train['visit_count'] ARMAmodel = SARIMAX(y, order = (1, 0, 1)) ARMAmodel = ARMAmodel.fit() y_pred = ARMAmodel.get_forecast(len(test.index)) y_pred_df = y_pred.conf_int(alpha = 0.05) y_pred_df["Predictions"] = ARMAmodel.predict(start = y_pred_df.index[0], end = y_pred_df.index[-1]) y_pred_df.index = test.index y_pred_out = y_pred_df["Predictions"] # 修正后的绘图逻辑 plt.plot(train['visit_count'], color='black', label='Train') plt.plot(test['visit_count'], color='red', label='Test') plt.plot(y_pred_out, color='green', label='Predictions') plt.ylabel('Number of Class') plt.xlabel('date') plt.xticks(rotation=45) plt.title("Train/Test split for Class Data") plt.legend() plt.show()
额外注意点
- 数据预处理代码中存在未定义变量
visit_date1,需确保它是从原始数据的date列提取的,例如:visit_date1 = data['date'],否则预处理会报错。 - 若时间序列存在日期缺失,SARIMAX会按连续时间步长处理,而原始数据索引是离散的,这也可能引发轴对齐问题,建议补全缺失日期后再建模。
内容的提问来源于stack exchange,提问作者Sonny
相关产品推荐
相关产品推荐

