因子分析(3)- 都是坑!这么简单的Alpha计算,竟然错了?!

我们继续 Alphalens 因子分析报告的解读。在过去的两篇笔记中,我们都提到,运用 Alphalens 进行因子分析步骤很简单,但是如果不了解它背后的机制与逻辑,很容易得到似是而非的结论。这篇笔记一开始,我们就会再介绍一个常见错误。

Alphalens 提供了alpha和beta分析。方法是factor_alpha_beta:

from alphalens.performance import factor_alpha_beta

alpha, beta = factor_alpha_beta(factor_data)

我们将得到以下输出:


看上去很完美。

这个结果表明,该因子的年化alpha是2.7%,风险暴露为35%,一定程度上受到市场影响。我们按照 Alphalens 的要求,通过 get_clean_factor_and_forward_returns 方法获得了 factor_data, 然后用它来计算 alpha 和 beta。过程简单明了,似乎不可能出任何错误。

但实际上,如此得到的 alpha 和 beta,在我们这个示例中并没有任何意义。

在这里插入图片描述

在Alphalens中,alpha和beta是通过因子组合收益对市场组合收益的最小二乘回归(OLS)来求得的。

!!! info
Alphalens在这里借用了statsmodels中的OLS方法。

其中,市场组合的收益是对各标的收益的简单平均。假设我们的组合共有4个标的,某一日它们各自的收益分别为:
0.01189, 0.01102, -0.01241和-0.01898,则当日市场组合的收益为

( 0.01189 + 0.01102 − 0.01241 − 0.01898 ) / 4 = − 0.00212 (0.01189 + 0.01102 -0.01241 -0.01898)/4= -0.00212 (0.01189+0.011020.012410.01898)/4=0.00212


而因子组合收益的计算,涉及到因子权重的分配问题。因子分配权重 W W W一旦确定,则则因子组合的收益就可由下列公式求出:

r p = ∑ r i ∗ W i r_p = \sum{r_i * W_i} rp=riWi

关键在于权重 W W W的计算。

Alphalens是这样计算的:它将factor_data按天进行分组,然后对将每个asset的因子除以因该组因子之和,这样得到的结果,其和为1。此外,它还提供一个参数,以进行零均值中心化,即将因子值减去中位数,再除以该组因子之和,这样得到的因子权重之和将为零。

假若我们有以下factor_data(左图),如果我们对上述factor_data,用Alphalens的方法求各因子的权重,我们将得到右图:

R50

R50

这里有两个问题:

  1. 缺省地,Alphalens计算出的因子权重和为零,这适用于可以同时做多做空的市场。如果因为种种原因,你只能选择单边做多的话,那么我们调用factor_alpha_beta时,就必须将demeaned参数传值为False,以改变factor weights的计算。

  1. 如果factor是换手率,则按照Alphalens分配的权重,该因子组合的收益率(假设demeaned = False)是这样计算得来的:给换手率最大的,分配最多的做多权重,给换手率最小的,分配最小的权重,而整个权重和为0。这样刚好和低换手率因子的作用相反!

所以,我们在构造因子时,需要考虑将factor进行转换,使之与因子收益率呈正相关关系。

现在看起来,这个结论似乎是那么显然易见,但是,alphalens并没有文档提示这一点,而且,我们在前面的其它分析中,由于使用了分层法,其分析结果并不受影响,所以这个问题,也就一直没有暴露。

现在,我们改造一下factor,重新运行:

from alphalens.utils import get_clean_factor_and_forward_returns

factor_data = get_clean_factor_and_forward_returns(factor, prices, bins=None, quantiles=10)

# 我们将换手率因子取倒数,从而使得因子逆序
factor_data.factor = 1 / factor_data.factor
factor_alpha_beta(factor_data,demeaned=False)

这一次,我们得到的年化alpha是4.48%。市场暴露风险为80%,这也与我们在累积收益图中看到的相一致。

现在,我们再做一次 mean_return_by_quantile 分析,看看有什么不同:


这个结果在视觉上,是昨天笔记中对应结果的水平翻转。这一次,表现最好的是第10组因子,最差的是第二组因子。除此之外,并没有其它的不同。

在这里插入图片描述

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用SPSS进行CFA(Confirmatory Factor Analysis),与做EFA(Exploratory Factor Analysis)的步骤是不同的。下面我将分别介绍它们的步骤。 在进行CFA的步骤中,你需要先确定理论模型,然后进行因子分析,评估模型拟合程度。步骤如下: 1. 打开SPSS软件,导入数据文件。 2. 选择“分析”菜单,进入“数据降维”子菜单,选择“因子”。 3. 在“因子分析”窗口中,选择待分析的变量,设置因子提取方法和旋转方法(通常使用主成分分析和方差最大旋转)。 4. 点击“提取”按钮,得到因子的特征值、因子载荷矩阵和方差贡献率等结果。 5. 根据因子载荷矩阵和理论模型,确定每个因子的含义和名称,构建CFA模型。 6. 选择“分析”菜单,进入“结构方程建模”子菜单,选择“因子模型”。 7. 在“因子模型”窗口中,输入理论模型的路径和参数,设置评估方法和约束条件。 8. 点击“运行”按钮,得到模型拟合程度的结果,包括卡方值、自由度、拟合优度指数、标准化残差等。 在进行EFA的步骤中,你需要先进行因子提取和旋转,然后确定因子数和因子名称,最后进行因子解释。步骤如下: 1. 打开SPSS软件,导入数据文件。 2. 选择“分析”菜单,进入“数据降维”子菜单,选择“因子”。 3. 在“因子分析”窗口中,选择待分析的变量,设置因子提取方法和旋转方法(通常使用主成分分析和方差最大旋转)。 4. 点击“提取”按钮,得到因子的特征值、因子载荷矩阵和方差贡献率等结果。 5. 根据因子载荷矩阵和理论模型,确定每个因子的含义和名称。 6. 选择“分析”菜单,进入“数据降维”子菜单,选择“因子”。 7. 在“因子”窗口中,输入待提取的因子数,设置旋转方法和结果输出。 8. 点击“运行”按钮,得到因子的特征值、因子载荷矩阵和方差贡献率等结果。 9. 根据因子载荷矩阵和实际情况,确定每个因子的含义和名称,进行因子解释。 因此,使用SPSS进行CFA和EFA的步骤是有区别的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值