特质偏度因子的计算示例和分析

之前分析了偏度因子和每只股票相对等权股票池的多日滚动CAPM beta。

https://blog.csdn.net/liliang199/article/details/164087831

https://blog.csdn.net/liliang199/article/details/165293799

这里进一步基于代码,分析CAPM 残差特质偏度反转因子的计算逻辑。

1 计算分析

CAPM残差特质偏度反转因子的计算公式如下

这里使用彩票来类比少数的极端正收益。

CAPM市场残差偏度越正,对应股票越像彩票,预期收益可能越低;

所以,因子取负后值越高代表越不像彩票,这时预期收益反而可能越高。

这里首先示例其实现代码如何建模上述过程,然后依据代码依次对其建模计算过程进行分析。

1.1 代码示例

以下是idio_skewness_factor示例代码。

实现的是一个经典的横截面特质偏度因子(idiosyncratic skewness factor),并且做了方向反转。

核心含义是:

过去一段时间 CAPM 市场残差偏度越正,股票越像彩票;

因子取负后,因子值越高代表越不像彩票,预期收益可能越高。

代码实现如下

复制代码
def idio_skewness_factor(prices, window=60, min_periods=30):
    """Skewness of CAPM-market residuals, inverted (higher = less lottery).

    Residual = logret_i - beta_i * (panel-EW log return), beta_i = 60d trailing
    beta.  Mirror of beta_neutral_test.compute_market_beta (same market proxy).
    """
    ret = np.log(prices / prices.shift(1))
    r_mkt = ret.mean(axis=1)
    var_m = r_mkt.rolling(window, min_periods=min_periods).var()
    beta = ret.rolling(window, min_periods=min_periods).cov(r_mkt).div(var_m, axis=0)
    resid = ret - beta.multiply(r_mkt, axis=0)
    skew = resid.rolling(window, min_periods=min_periods).skew()
    return -skew

1.2. 计算对数收益

计算对数收益的代码如下

ret = np.log(prices / prices.shift(1))

prices是资产价格面板,行是日期,列是股票。

这里计算每只股票的日对数收益:

对数收益具有可加性,常用于日频金融数据。

1.3 构造市场代理

这里进一步构造市场代理,示例代码如下。

r_mkt = ret.mean(axis=1)

具体为,对每一行求横截面平均,得到等权市场收益:

注意这里是 等权平均,不是市值加权。它代表一个等权市场组合的近似收益。

代码注释称为 panel-EW log return,即面板等权对数收益。

在实践中,可能需要依据实际情况使用更复杂收益,比如市值加权市场收益或指数收益。

1.4 滚动市场方差与滚动 Beta

进一步计算滚动市场方差与滚动 Beta。

var_m = r_mkt.rolling(window, min_periods=min_periods).var()

beta = ret.rolling(window, min_periods=min_periods).cov(r_mkt).div(var_m, axis=0)

1)对市场收益计算滚动方差:

2)对每只股票计算与市场收益的滚动协方差,再除以市场方差,得到滚动 CAPM Beta:

这是标准的市场模型斜率。

即使不显式加alpha,OLS斜率也等于协方差除以方差,所以beta估计本身不受截距项影响。

1.5 计算CAPM残差

进一步计算CAPM残差。

resid = ret - beta.multiply(r_mkt, axis=0)

对每只股票:

这是CAPM/市场模型残差,代表市场beta无法解释的特质收益。

严格说市场模型是:

省略了alpha,但偏度计算会先中心化,常数alpha不影响偏度,因此对最终偏度结果无影响。

1.6 计算残差滚动偏度

进一步计算计算残差滚动偏度

skew = resid.rolling(window, min_periods=min_periods).skew()

对每只股票的残差序列,在过去 60 日窗口内计算偏度:

参考之前文档,偏度定义如下

正偏表示右尾长,极端正收益多,像彩票。

负偏表示左尾长,极端负收益多,不像彩票。

1.7 因子方向反转

依据此前推理,负偏表示左尾长,极端负收益多,不像彩票,但此时预期收益可能越高。

所以对因子进行反转,最终返回CAPM残差特质偏度的反转因子。

return -skew

返回负的残差偏度:

因此,方向反转是为了让高因子值对应预期收益高,便于做多高因子、做空低因子。

因子值高 = 残差偏度为负 = 左偏 = 不像彩票。

因子值低 = 残差偏度为正 = 右偏 = 像彩票。

2 归纳总结

这里进一步从数理角度归纳和总结CAPM残差特质偏度反转因子。

2.1 数学建模

设股票日的因子为:

其中:

因子逻辑归纳如下

高:过去 60 日特质收益负偏,非彩票股。

低:过去 60 日特质收益正偏,彩票股。

优化预期是做多高F,做空低 F,捕捉特质偏度异象。

2.2 CAPM与特质风险

1)标准CAPM

标准CAPM 认为:

即只有系统性风险beta被定价。

在标准CAPM中,特质风险被认为可以通过分散化消除,因此不应获得风险溢价。

2)特质风险

代码先估计滚动beta,再计算残差:

这个残差就是CAPM无法解释的特质收益。

理论上,特质收益的均值应为零,且不应预测未来收益。

但行为金融和实证研究发现,特质收益的高阶矩,尤其是特质偏度,可能被定价。

2.3 偏度偏好与三阶矩CAPM

传统的均值-方差框架只考虑一、二阶矩。若引入三阶矩,投资者可能偏好正偏收益。

Kraus 和 Litzenberger(1976)提出三阶矩CAPM:

其中是协偏度。

一般投资者偏好正偏,则高偏度资产价格高、预期收益低,偏度与预期收益负相关。

Harvey和Siddique(2000)进一步发现条件协偏度对横截面收益有解释力。

代码计算的是CAPM残差偏度,即特质偏度,不是系统性协偏度。

特质偏度在完全市场不应定价,但在现实摩擦下可能被定价。

2.4 彩票偏好与特质偏度异象

行为金融的核心解释是,投资者喜欢正偏资产,因为它像彩票。

  • 正偏资产:大部分时间小亏,偶尔大赚。

  • 负偏资产:大部分时间小赚,偶尔大亏。

在前景理论下,投资者高估小概率大收益,愿意为彩票型股票支付溢价,其结果是

  • 正特质偏度股票被过度需求,价格高,预期收益低。

  • 负特质偏度股票被冷落,价格低,预期收益高。

从这个角度看,特质偏度与未来收益负相关。

因子取负后:,则与未来收益正相关。

对应做多高F(负偏、非彩票),做空低(正偏、彩票)。

2.5 为什么特质偏度会被定价

理论上特质风险可分散,但现实中存在多种摩擦.

1)分散化不足,散户持有股票数量少,特质偏度进入其效用函数。

2)卖空限制,彩票型股票被高估后,难以通过卖空纠正。

3)套利限制,小盘、低流动性、高换手股票套利成本高。

4)博彩偏好,投资者主动追求正偏收益。

5)杠杆约束,想博取高收益但不能加杠杆,于是买正偏股票。

7)信息不对称,正偏股票常伴随故事、题材、成长期权特征。

因此,正特质偏度股票容易被高估,负特质偏度股票被低估。

2.6 与MAX/IVOL/协偏度的区别

1)MAX 异象

过去一个月最大日收益,是正偏的简单代理。高 MAX 未来收益低。

2)IVOL 异象

高特质波动率股票未来收益低(Ang 等,2006)。

偏度与波动率相关,但偏度是方向性高阶矩。

3)协偏度

资产收益与市场收益平方的协方差,属于系统性偏度。特质偏度是CAPM残差的偏度。

本代码用 CAPM 残差,剥离市场 beta,更接近特质偏度。

3 组合含义

组合构建的典型做法是

1)每月末计算过去 60 日残差偏度。

2)取负得到因子值。

3)横截面排序,分 5 组或 10 组。

4)做多最高组(负偏、非彩票)。

5)做空最低组(正偏、彩票)。

6)持有下一个月,等权或市值加权。

另外,特质偏度因子常与以下暴露相关:

  • Beta

  • 市值

  • 行业

  • 动量

  • 短期反转

  • 特质波动率

  • MAX

  • 流动性

  • 价格水平

实际使用时应做横截面标准化、去极值、行业市值中性、beta 中性,

甚至对 IVOL 和 MAX 中性,以提取纯特质偏度溢价。

reference


skewness收益偏度取负因子背后逻辑的探索

https://blog.csdn.net/liliang199/article/details/164087831

滚动CAPM贝塔的代码示例和分析

https://blog.csdn.net/liliang199/article/details/165293799

相关推荐
荆棘鸟智能1 小时前
无人机遥感图像实时拼接算法工程实践:从特征提取到全景融合的完整技术链路
算法·无人机
6Hzlia2 小时前
【Classic 150 刷题计划】 LeetCode 58. 最后一个单词的长度 | C++ 极简反向遍历与单变量状态机
算法
AgentMaster2 小时前
企业如何应用智能客服?5 个典型场景的技术架构与实施路径
大数据·算法
程曦曦2 小时前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
weixin_307779133 小时前
C++代码实现MATLAB中的ode45函数功能
开发语言·c++·算法·matlab
不穿鞋的懒羊羊4 小时前
dfs深度优先搜索
算法
OYYHXPJR4 小时前
【算法】区间重叠模板和矩形重叠模板
算法
shehuiyuelaiyuehao4 小时前
算法46,分治快排,排序数组
java·算法·排序算法·排序
远航计算机4 小时前
GEO 选题从哪来?用一份 Query 词库把一年内容排出来
大数据·人工智能·算法·aigc