GARCH模型称为广义ARCH模型,是ARCH模型的拓展,加入了误差项条件方差的滞后期,将影响因子扩展为均方误差和条件方差前期值。这一模型的显著优点是能够在较低的阶数对高阶的滞后过程进行描述。解决了ARCH模型中滞后阶数过大的问题,从而避免参数过多而无法满足约束条件,使模型失效导致无法描述收益率的波动性。GARCH模型实际上就是在ARCH的基础上,增加考虑异方差函数的p阶自回归性而形成,它可以有效的拟合具有长期记忆性的异方差函数。
适用性:GARCH模型是一个专门针对金融数据所量体订做的回归模型,除去和普通回归模型相同的之处,GARCH对误差的方差进行了进一步的建模。特别适用于波动性的分析和预测,借助该模型好可以分析Shibor与ABS发行之间的相关性。
image.png
输入表:包括时间和利率两列
image.png
输出表:预测一定期间的利率
image.png
参数:输入开始预测的时间及需要预测的个数
完整代码如下:
from scipy import stats
import sys
import statsmodels.api as sm # 统计相关的库
import numpy as np
import pandas as pd
import arch # 条件异方差模型相关的库
from statsmodels.tsa.arima_model import ARIMA
from openpyxl import Workbook
from openpyxl.compat import range
# import os
# InputPath = sys.argv[1] # InputFilePath
# OutputPath = sys.argv[2] # OutputFilePath
# Parameters=sys.argv[3] # json format string, optional 外部用户输入预测个数
# Parameters = json.loads(Parameters)
#read input
k = 10 # 外部引入预测值个数K
data = pd.read_excel("GARCH_input.xlsx", index_col = u'Date')
#自动定阶构建AR模型,并预测
pmax = 7#定阶
bic = [] #bic矩阵
# print(bic)
for p in range(pmax+1):
tmp = (ARIMA(data,(p,0,0)).fit().bic)
bic.append((p,tmp))
newBicList = sorted(bic,key=lambda item:item[1])
p = newBicList[0][0]
order = (p,0)
model = sm.tsa.ARMA(data,order).fit()
model.forecast(k)
forecast1 = np.array(model.forecast(k)[0])
#GARCH拟合
am = arch.arch_model(data,mean='AR',lags=p,vol='GARCH',p=1,q=1)
res = am.fit()
#GARCH滚动预测
start_loc = 0
end_loc = len(data)-k-1
forecasts = {}
for i in range(k):
res = am.fit(last_obs=i+end_loc, disp='off')
temp = res.forecast(horizon=3).variance
fcast = temp.iloc[i+end_loc-1]
forecasts[fcast.name] = fcast
forecast2 = np.array(np.array(pd.DataFrame(forecasts).T['h.1']).tolist()[1])
forecast = forecast1 + forecast2 #AR-GARCH的最终预测结果是 AR预测结果 + GARCH残差预测结果
print(forecast)
网友评论