使用arch包EGARCH(1,1)预测日度波动率出现内存错误如何解决
问题原因与解决方案
内存溢出原因
- arch包
forecast方法默认会为拟合样本内的每一个时间点都生成长度等于horizon的预测结果,而你只需要拟合结束节点(2015-01-04)的未来预测,多余的历史预测占用了大量内存 - simulation方法默认使用1000条模拟路径,长预测周期下生成的三维数组占用内存过高,且EGARCH模型有解析预测解,无需使用模拟方法
修改后的代码
只需要替换原预测部分的代码即可:
# 计算目标区间长度 horizon = len(df.loc['01-04-2015' : ]) # 仅保留最后一个拟合时间点的预测结果,使用解析方法完成预测,reindex=False大幅降低内存占用 forecast_result = fitted_EGARCH.forecast(horizon=horizon, reindex=False) # 提取条件方差开平方得到波动率,绑定目标区间日期生成所需Series target_date_index = df.loc['01-04-2015':].index volatility_FORECASTED = pd.Series(np.sqrt(forecast_result.variance.iloc[-1].values), index=target_date_index)
可选调整说明
如果必须使用模拟方法做预测,可通过降低模拟次数减少内存占用,示例如下:
# 模拟次数从默认1000降到200,内存占用直接降到原来的1/5 forecast_result = fitted_EGARCH.forecast(horizon=horizon, method='simulation', simulations=200, reindex=False)
最终输出的volatility_FORECASTED就是符合要求的pandas.Series类型结果,索引为2015-01-04到2018-12-06的日期,值为对应日期的日度波动率。如果需要年化波动率,可将结果乘以np.sqrt(252)即可。
内容的提问来源于stack exchange,提问作者Shayan
相关产品推荐
相关产品推荐

