“利用ARIMA模型对时间序列进行分析的经典案例(详细代码)”一文中会遇到的问题总结(二)

本文总结了ARIMA模型在时间序列分析中遇到的常见问题,包括数据适用性判断、负值预测处理、获取原始序列预测值的方法、ADF检验的必要性以及确定最优模型的标准。解答指出,数据需具有趋势性和自相关性才适合ARIMA,负值预测可能由数据特性或模型选择不当引起,通过差分或替换策略可处理。要获取原始序列预测值,需要将平稳序列预测结果与原始数据结合。ADF检验用于判断数据平稳性,较低的AIC值指示更优模型。
摘要由CSDN通过智能技术生成

最近又有好些朋友来咨询掌柜关于使用ARIMA模型对时间序列进行预测的👉这篇博客遇到了一些问题,这里掌柜再次收集大家的问题来一一解答。

PS: 本博客假定大家已经具备ARIMA模型的基础知识!!!

问题汇总如下:

  • 怎么判断我的数据是否适合ARIMA模型呢?
  • 得到的时序预测图是负值,明显不对。怎样保证为正值?
  • 想要最后预测的数据,而不是预测的平稳数据,怎么拿到?
  • 想获取预测点的值应该怎么做的,没有API接口呀,可以告知一下吗?
  • 不需要做ADF检验吗?
  • 怎么确定ARMA/ARIMA的最优模型?
  • 还原到原始时间序列那一步应该是要加在平稳序列预测的结果上吧。代码第95行中的ts_record,运行完之后是原始数据呀,这样还是对非平稳的原始序列进行预测的?
  • 在pr = result.predict(‘1988’, ‘2020’,typ=‘levels’) 里面加入了typ参数 就和这个结果是一样的。请问是不是typ这个参数控制输出预测值的类型呢?
  • 最后用真实值预测的时候,真实值和预测值的线性变化图趋势很接近。但是用 result.predict(‘1988’, ‘2020’)想将模型的预测值导出来的时候,发现输出结果和真实值差别很大,将真实值和输出值单独做线图也差别很大,是为什么?
  • statsmodels的版本是多少?
  • AttributeError: ‘NoneType’ object has no attribute 'fit’报错如何解决?

该篇博客先解决前面六个问题,

1. 怎么判断我的数据是否适合(非季节性)ARIMA模型呢?

答:
一般需要遵循两点:

  • 时序数据本身具有一定的趋势性,差分过后可以去除趋势,让时序呈现平稳状态;
  • 可以通过历史数据的较强自相关性(自相关性指时间序列滞后值之间的线性关系)对未来进行预测;且受随机噪声的影响不大。

2. 得到的时序预测图是负值,明显不对。怎样保证为正值?

答:
首先思考一下,为何时序预测会出现负值?不同案例中可能存在多个客观因素干扰,但是大致会有这么几种情况:

  • 第一种:你的时序数据本身是呈现递减趋势,而且差分后波动幅度不大,那么预测就会出现负值的情况;
  • 第二种:预测的步长太长,超过实际可预测区间;
  • 第三种:时序数据中存在缺失值或NULL值,你之前处理缺失值或NULL值的时候,用 0填充过,所以才会后面
  • 1
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要使用ARIMA模型时间序列进行预测,可以使用`statsmodels`库中的`ARIMA`类。以下是一个使用ARIMA模型预测时间序列的示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.arima.model import ARIMA # 读取时间序列数据 data = pd.read_csv('data.csv', parse_dates=['date'], index_col='date') # 绘制原始时间序列 plt.plot(data) plt.xlabel('Date') plt.ylabel('Value') plt.title('Original Time Series') plt.show() # 拆分训练集和测试集 train_data = data.iloc[:100] test_data = data.iloc[100:] # 创建ARIMA模型实例并拟合训练数据 order = (1, 0, 1) # ARIMA模型的阶数 (p, d, q) model = ARIMA(train_data, order=order) model_fit = model.fit() # 预测测试集的值 start_index = len(train_data) end_index = len(train_data) + len(test_data) - 1 predicted_values = model_fit.predict(start=start_index, end=end_index) # 绘制原始值和预测值的对比图 plt.plot(test_data.index, test_data.values, label='Actual') plt.plot(test_data.index, predicted_values, label='Predicted') plt.xlabel('Date') plt.ylabel('Value') plt.title('ARIMA Time Series Prediction') plt.legend() plt.show() ``` 在这个示例中,我们首先读取时间序列数据,并使用`ARIMA`类创建ARIMA模型实例。然后,我们将训练数据拟合到模型中,并使用模型对测试数据进行预测。最后,我们绘制了原始值和预测值的对比图。 请注意,这只是一个简单的示例,实际应用中可能需要更复杂的ARIMA模型配置和更多的数据处理步骤来获得更准确的预测结果。同时,还可以对模型进行参数调优和模型诊断来提高预测性能。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值