生生不息

生生不息

AI用CCC-GARCH模型预测条件协方差矩阵

2025-06-29
AI用CCC-GARCH模型预测条件协方差矩阵

提示词

# Python代码
# 'returns' 包含 '棉花期货涨跌' 和 '棕榈油期货涨跌' 列
# 初始化空列表用于保存结果
model_coeffs = []
conditional_volatility = []
standard_resid = []
garch_models = []

# 提取列名,即两种期货的名称
columns = returns.columns

# 遍历每个期货,拟合 GARCH 模型并保存结果
for column in columns:
    # 创建 GARCH 模型
    model = arch_model(returns[column], vol='Garch', p=1, q=1)
  
    # 拟合模型
    result = model.fit(update_freq=0, disp="off")
  
    # 将结果保存到相应的列表中
    model_coeffs.append(result.params)
    conditional_volatility.append(result.conditional_volatility)
    standard_resid.append(result.std_resid)
    garch_models.append(result)



# 将模型系数转化为dataframe
coeffs_df = pd.DataFrame(model_coeffs, index=columns)
# 检查结果
coeffs_df

对上述两种期货的协方差矩阵作出预测,请给出示例代码。

答案

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from arch import arch_model

# 1. 准备数据(假设已运行之前的GARCH模型拟合代码)
# 获取标准化残差
std_resid_df = pd.DataFrame({
    '棉花': standard_resid[0],
    '棕榈油': standard_resid[1]
}, index=returns.index)

# 获取条件波动率
cond_vol_df = pd.DataFrame({
    '棉花': conditional_volatility[0],
    '棕榈油': conditional_volatility[1]
}, index=returns.index)

# 2. 计算恒定条件相关系数矩阵(CCC)
ccc_matrix = std_resid_df.corr()
print("恒定条件相关系数矩阵:")
print(ccc_matrix)

# 3. 预测协方差矩阵
def predict_covariance(date):
    """
    预测给定日期的协方差矩阵
    """
    # 获取当日的条件波动率
    vol_t = cond_vol_df.loc[date].values
  
    # 创建对角矩阵的条件波动率
    D_t = np.diag(vol_t)
  
    # 计算协方差矩阵:Σ_t = D_t * R * D_t
    cov_matrix = D_t @ ccc_matrix.values @ D_t
  
    return cov_matrix

# 4. 预测2022年最后一天的协方差矩阵
last_date = returns.index[-1]
cov_matrix = predict_covariance(last_date)
print(f"\n{last_date.strftime('%Y-%m-%d')}的预测协方差矩阵:")
print(cov_matrix)

结果:

恒定条件相关系数矩阵:
           棉花       棕榈油
棉花   1.000000  0.249754
棕榈油  0.249754  1.000000

2022-12-30的预测协方差矩阵:
[[1.29217731 0.67072384]
 [0.67072384 5.58137035]]