FEATURED · 精选文章

gs-quant 计算因子IC衰减与半衰期完整指南

发布时间 / 2026/9/13 14:08:16
来源 / 创域科博编辑部
栏目 / 资讯中心
gs-quant 计算因子IC衰减与半衰期完整指南 gs-quant 计算因子IC衰减与半衰期完整指南【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant因子刚建出来时效果不错半年后 IC 却衰减到接近零——它还能持有几天gs-quant开源量化工具箱让 IC 半衰期变得可以直接算出来全文带你用三步拟合一条衰减曲线读出一个半衰期数字并据此决定调仓频率。一分钟看懂 IC 半衰期IC信息系数本质是因子值与未来收益的相关系数取值 -1 到 1实务上稳定在 0.03 以上就算有预测力。它常取截面因子值与下期收益的秩相关——秩相关是按名次而不是按原始数值算的相关系数对异常值更不敏感。所谓衰减是指预测期越远这个相关性越低因子的优势会磨损。半衰期借用药理学概念药吃进身体浓度按固定时间减半同理我们看一个因子的 IC 从初始值衰减到一半需要几天。这个数字直接决定调仓节奏半衰期约 21 天的因子每月调一次仓刚好调得更快是白付交易成本更慢则因子已过期。gs-quant 里有两个现成部件risk_model.py 中的FactorRiskModel负责按名称取因子与因子收益数据econometrics.py 中的correlation负责滚动窗口相关计算。两个类的官方说明见 FactorRiskModel 文档与 correlation 文档。三步跑通半衰期计算用 get_factor_returns_by_name 取因子收益序列先准备两条按日期索引的序列因子序列暴露度或因子收益和收益序列。若数据来自风险模型可按因子名直接取日频因子收益import datetime as dt from gs_quant.models.risk_model import FactorRiskModel model FactorRiskModel.get(MODEL_ID) # 换成你的模型ID ret model.get_factor_returns_by_name( # 因子收益序列按日期一行 start_datedt.date(2023, 1, 1), end_datedt.date(2023, 12, 31), factors[MOMENTUM], )因子若来自你自己的数据源包成日期索引的pd.Series即可后面步骤不变。用 correlation 滚动窗口算 60 日 IC 序列滚动窗口就是拿最近 N 天算一次 IC再向前滑一天。这里取 N6020-60 个交易日是常用区间太小噪声大太大时效差。import pandas as pd from gs_quant.timeseries import correlation from gs_quant.timeseries.helper import SeriesType y ret.shift(-1) # 下期收益整体前移一天 ic correlation(x, y, w60, # 60日滚动窗口 type_SeriesType.RETURNS) # 声明输入是收益而非价格 ic ic.dropna() # 去掉窗口头部的无效值x是因子序列若上一步取到的是单列 DataFrame先.squeeze()成 Series。输入已是收益务必带type_SeriesType.RETURNS否则会按价格口径计算。用 scipy 拟合指数衰减求半衰期天数因子优势通常按指数规律磨损IC(t) ≈ IC0·e^(-λt)。拟合就是把参数从数据里反推出来的过程参数拟合这里反推衰减系数 λ半衰期 ln(2)/λ。import numpy as np from scipy.optimize import curve_fit def decay(t, ic0, lam): # 指数衰减函数 return ic0 * np.exp(-lam * t) t np.arange(len(ic)) # 日期索引每天计1 p, _ curve_fit(decay, t, ic.values) print(f半衰期 ≈ {np.log(2) / p[1]:.1f} 天)样本超过 2 年时给curve_fit加methodtrf并设p0初始 IC收敛更稳。结果与图表怎么读 输出分两部分。一是 IC 序列本身数值稳定在 0.03 以上说明因子有持续预测力若围绕 0 来回摆动、频繁转负这个因子基本是抛硬币。二是拟合曲线加半衰期数字曲线起点即初始 IC下坠越快半衰期越短。数字落地成动作——半衰期 ≥ 60 天季度调仓足够20-60 天月频调仓合理低于 10 天要考虑周频但先算一遍交易成本是否吃光超额收益。常见坑与对策⚠️ 最典型的三种情况现象原因解法correlation返回全 NaNtype_声明错误收益当价格或窗口长于序列长度显式传SeriesType.RETURNS确认w小于数据点数拟合出的半衰期为负或只有几天IC 序列噪声大曲线没有单调衰减模型形式不符样本拉长到 2 年以上先用 20-60 日滚动均值平滑curve_fit抛 RuntimeErrorIC 含大量负值或振荡偏离指数形态先检查 IC 均值是否为正不收敛改拟 |IC| 或画半对数图验证平滑用的滚动均值、标准差在 statistics.py 里与correlation配套。另外 factor.py 的Factor对象提供variance与covariance方法可先查看因子自身波动及其与别的相关程度再决定哪些因子值得算半衰期。往哪深挖 单因子半衰期拿到后下一个问题是多因子留哪些、各配多少权重。gs-quant 的 optimizer.py 提供组合优化能力可以把半衰期长短不同的因子分组、分别赋权让慢衰减因子多拿仓位。下一步动作挑一个你策略里的因子跑完上面三步若输出半衰期低于 21 天先把调仓频率改为周频观察一个月再定。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻