问题描述
以下是因子分析analyze_factor函数的使用,返回的far是一个对象。
far = analyze_factor(factor=factor_data, start_date=start, end_date=end, weight_method='avg', industry='jq_l1', quantiles=quantiles, periods=periods,max_loss=0.2)
# 收益能力速览
far.plot_returns_table(demeaned=False, group_adjust=False)
Img
我的疑问是:我看文档中解释 period_1,period_5,period_20是指调仓日期。但是不明白具体的含义。
我说下我的理解,各位指教以下对不对。
以period_5举例:在给定的时间范围内,每隔5日,统计全市场因子值得平均值、全市场收益的平均值,然后线性回归计算alpha和beta。将因子值按5分位划分,分别取因子值最高和最低的组,计算他们对应的全市场收益平均值再求一次平均。这样就分别得到了 图中的3、4行数据。
我上述的理解是否正确呢? 文档讲的不够仔细,让没有炒股经验的新人看不懂。。。
解决方案
你好!你的思考非常深入,不过你对 period_5(调仓周期)以及底层收益计算逻辑的理解有部分偏差。在专业的量化因子分析(如 Alphalens 框架,JoinQuant 的因子分析底层逻辑与之类似)中,计算方式比“每隔5天统计一次”要更平滑和严谨。
下面为你详细拆解 period 的真实含义以及 plot_returns_table 中各项数据的计算逻辑:
1. 什么是 period (调仓周期)?
在因子分析中,period_n(如 period_1, period_5, period_20)代表的是持有期(Forward Return Period)。
- 你的理解误区:你以为是“每隔5天”才去截取一次截面数据进行计算。如果这样做,会因为起始日的选择不同(比如周一建仓和周二建仓)导致结果差异巨大,这在量化中被称为“路径依赖”或“运气成分”。
- 实际的计算逻辑(重叠持有法 Overlapping Portfolios):
系统是每天都在根据当天的因子值进行排序和分组建仓,然后将这个仓位持有 $n$ 天。
以period_5为例:- T日:根据T日因子值分组,买入股票,持有到 T+5 日卖出,计算这5天的收益率。
- T+1日:根据T+1日因子值分组,买入股票,持有到 T+6 日卖出,计算这5天的收益率。
- ...以此类推。
最终你看到的period_5的收益,是所有这些“持有5天”的投资组合收益的平均化处理(通常会转化为日均收益或年化收益以便对比)。
2. 分位数收益(Quantile Returns)是怎么算的?
假设 quantiles=5(分为5组):
- 横截面排序:在T日,将全市场(或你指定的
universe)的股票按因子值从小到大排序。 - 分组:均分为5组(Q1到Q5)。Q1是因子值最小的组,Q5是因子值最大的组。
- 计算远期收益:对于Q1组的股票,计算它们在未来 $n$ 天(如
period_5就是未来5天)的收益率。根据你设置的weight_method='avg',这里采用的是等权重平均计算该组的整体收益。 - 时间序列平均:将回测期内每一天的Q1组的 $n$ 天收益率求平均,就得到了表格中 Q1 在
period_n下的收益表现。
3. 多空组合收益(Top-Bottom Spread)是怎么算的?
表格中通常会有一行显示最高分位减去最低分位的收益(例如 Q5 - Q1,或者 Q1 - Q5,取决于因子方向)。
- 逻辑:假设因子值越大越好,那么我们就做多(买入)Q5组的股票,同时做空(卖出)Q1组的股票。
- 计算:每天构建这样一个多空组合,持有 $n$ 天。它的收益率基本上等于 Q5组的收益率 减去 Q1组的收益率。这代表了该因子纯粹的“选股区分能力”,排除了大盘整体涨跌的影响。
4. Alpha 和 Beta 是怎么算的?
这部分你的理解偏差较大。Alpha 和 Beta 不是简单地对全市场因子值和收益求平均后回归得出的。
在 JoinQuant 的 analyze_factor 中,Alpha 和 Beta 的计算通常基于因子值加权组合(Factor-weighted Portfolio):
- 构建因子组合:每天根据股票的因子值大小分配权重。通常会对因子值进行去均值(Demean)处理,使得权重和为0(即构建一个资金中性的多空组合:买入因子值高的,卖出因子值低的)。
- 计算组合收益:计算这个多空组合每天的实际收益率。
- 线性回归:将这个因子组合的每日收益率作为 Y(因变量),将市场基准的每日收益率(通常是股票池的等权或市值加权平均收益)作为 X(自变量),进行线性回归:
$$ Y = \beta * X + \alpha $$- Beta (贝塔):回归的斜率。代表你的因子组合受市场整体波动的影响程度。因为通常构建的是资金中性的多空组合,优秀的因子 Beta 应该接近于 0(即与大盘涨跌无关)。
- Alpha (阿尔法):回归的截距(通常会年化)。代表剥离了市场整体波动后,你的因子组合能带来的超额绝对收益。Alpha 越大,说明因子越有效。
总结
period_5:指根据每日因子值构建组合后,持有5个交易日的收益表现(采用每天建仓、重叠持有的算法)。- 分位数收益:每天按因子值将股票分5组,分别计算各组持有 $n$ 天的平均收益。
- Alpha/Beta:是用“因子值加权构建的多空组合收益”与“市场基准收益”进行时间序列的线性回归得出的,衡量因子的绝对超额收益能力和市场相关性。
希望这个解释能帮你理清因子分析底层的计算逻辑!量化分析中“重叠持有期”和“多空组合回归”是非常核心的概念。