python ARIMA时间序列分析之forecast 、predict and get_prediction

时间序列分析-2 forecast 、predict

forecast and get_forcast、predict and get_prediction
forecast 参数steps,表示预报多少个时间点(fit样本数据后)。
eg:

from statsmodels.tsa.arima.model import ARIMA

y=[1,2,3,4,5,6]

model=ARIMA(y,order=(1,1,0))
m=model.fit()
m.forecast(5)

在fit数据序列后(样本外),forecast5个点(为7,8,9,10,11)y的值。

predict 参数(start,end) ,start起始时间点,end结束时间点。
起始、结束都没有限制(in sample与out of sample 均可),end大于start。
样本内的为拟合值,样本外为预测。

如果只给一个int值,缺省认为:
大于fit样本的最后时间点,预测这个时刻的值。
小于fit样本的最后时间点,predict当前值到fit样本的最后时间点。

eg:

x=[1,2,3,4,5,6]
model=ARIMA(y,order=(1,1,0))
m=model.fit()
m.predict(2) #predict x等于2,3,4,5,6的y
m.predict(7) #forecast x等于7的y

get_prediction, get_forecast基本同上
但返回的值不一样。
他们都给出置信区间conf_int
预测结果为置信区间的均值。
通过.predicted_mean或forecast_mean属性获取预测值。

eg:

from statsmodels.tsa.arima.model import ARIMA
y=[1,2,3,4,5,6]
model=ARIMA(y,order=(1,1,0))
m=model.fit()
result=m.get_prediction(2)

result.conf_int() #返回置信区间

result.predicted_mean #返回预测结果

### Python 时间序列预测示例 #### 单指数平滑法 (SES) 单指数平滑是一种简单的时间序列预测方法,适用于没有明显趋势或季节性的数据集。 ```python from statsmodels.tsa.holtwinters import SimpleExpSmoothing from random import random # 构造一个简单的数据集 data = [x + random() for x in range(1, 100)] # 创建并拟合模型 model = SimpleExpSmoothing(data) model_fit = model.fit() # 进行预测 yhat = model_fit.predict(len(data), len(data)) print(yhat) # 输出预测结果 ``` 此代码展示了如何利用 `SimpleExpSmoothing` 类来进行基本的时间序列预测[^2]。 #### Holt-Winters 方法 Holt-Winters 是一种扩展的指数平滑技术,可以处理具有趋势和/或季节成分的数据。 ```python from statsmodels.tsa.holtwinters import ExponentialSmoothing import numpy as np # 假设我们有一个季度销售量作为时间序列的例子 sales_data = [...] # 应该替换为实际的历史销量数值列表 # 定义模型参数 seasonal_periods = 4 # 如果是按季度,则周期长度通常设置为4;如果是月度则可能为12等 trend_type = 'add' # 或者'mul' seasonal_type = 'add' # 同样也可以选择'mul' # 训练模型 hw_model = ExponentialSmoothing(sales_data, trend=trend_type, seasonal=seasonal_type, seasonal_periods=seasonal_periods).fit() # 预测未来几个时期的值 forecast_steps_ahead = 8 predictions = hw_model.forecast(steps=forecast_steps_ahead) print(predictions) ``` 这段程序说明了怎样应用更复杂的霍尔特温特斯算法来建模含有季节性和趋势特征的时间序列. #### ARIMA 模型 ARIMA(自回归积分移动平均)是一个广泛使用的统计学工具,在金融和其他领域内用于分析和预测时间序列行为。 ```python from statsmodels.tsa.arima.model import ARIMA import pandas as pd def find_best_arima_params(ts): """通过遍历不同组合找到最优BIC得分对应的(p,d,q)""" pmax = int(input('请输入最大P阶数: ')) d = 1 # 差分次数固定为1次 qmax = int(input('请输入最大Q阶数: ')) bic_matrix = [] best_bic = float('inf') best_param = None for p in range(pmax + 1): row = [] for q in range(qmax + 1): try: arima_model = ARIMA(ts, order=(p, d, q)).fit() current_bic = arima_model.bic if current_bic < best_bic: best_bic = current_bic best_param = (p, d, q) row.append(current_bic) except Exception as e: print(f"Error occurred with parameters ({p},{d},{q}): {e}") row.append(np.nan) bic_matrix.append(row) return best_param # 加载您的时间序列数据到DataFrame中... df = pd.read_csv('your_time_series.csv', parse_dates=['date_column']) ts = df.set_index('date_column')['value_column'] optimal_order = find_best_arima_params(ts) final_model = ARIMA(ts, order=optimal_order).fit() predicted_values = final_model.get_forecast(steps=10) confidence_intervals = predicted_values.conf_int(alpha=0.05) mean_prediction = predicted_values.predicted_mean print("Optimal Order:", optimal_order) print(mean_prediction) print(confidence_intervals) ``` 上述脚本实现了自动搜索最佳 `(p,d,q)` 参数的过程,并基于这些参数构建了一个最终版本的 ARIMA 模型来进行预测。注意这里还计算了置信区间以评估不确定性水平[^3].
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITLiu_JH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值