You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对含空值的股票数据生成协方差/相关矩阵?

含空值时间序列数据的协方差/相关矩阵计算方案

核心逻辑:针对每一对资产,仅保留两者同时有非空数据的时间戳条目,基于这些重叠数据计算协方差(或相关系数),最终组合成矩阵。

实现步骤(Python + Pandas)

假设你的时间序列数据已存入DataFrame df,其中包含timestamp列和各资产价格列:

  1. 提取资产列
    先分离出所有需要计算的资产列(排除timestamp):

    asset_cols = df.columns.drop('timestamp')
    
  2. 初始化结果矩阵
    创建一个空的协方差矩阵,行和列都以资产名为索引:

    import pandas as pd
    import numpy as np
    
    # 协方差矩阵初始化
    cov_matrix = pd.DataFrame(
        np.zeros((len(asset_cols), len(asset_cols))),
        index=asset_cols,
        columns=asset_cols
    )
    
  3. 遍历资产对计算协方差
    对每一对资产,筛选共同有效数据后计算协方差:

    for i, asset_x in enumerate(asset_cols):
        for j, asset_y in enumerate(asset_cols):
            # 筛选两者均非空的行
            valid_pairs = df[[asset_x, asset_y]].dropna()
            # 至少需要2个数据点才能计算协方差
            if len(valid_pairs) >= 2:
                # 提取两者的协方差值
                cov_value = valid_pairs.cov().iloc[0, 1]
                cov_matrix.iloc[i, j] = cov_value
            else:
                # 数据不足时标记为NaN
                cov_matrix.iloc[i, j] = np.nan
    

扩展:计算相关矩阵

如果需要生成相关矩阵,只需将上述代码中的cov()替换为corr()即可:

corr_value = valid_pairs.corr().iloc[0, 1]

示例验证

用你提供的测试数据,usdjpy与AAPL的有效重叠数据为行1、2、3:

  • usdjpy数据:[5, 6, 4]
  • AAPL数据:[5, 6, 2]
    计算得协方差为2,与代码运行结果一致。

内容的提问来源于stack exchange,提问作者gustavjaune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:47:11