之前分析了偏度因子和每只股票相对等权股票池的多日滚动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贝塔的代码示例和分析