7. 风险模型¶
本模块用于风险模型的构建, 并为其他模块提供风险矩阵. 风险模型的意义在于找到股票价格波动的成因, 并将股票收益来源进行分解剥离, 并实现对未来股票价格波动的预测.
7.1. 风险模型¶
7.1.1. 符号说明¶
用变量 \(t\) 表示日期,\(i\ (1\le i\le N)\) 标识股票,\(k\ (1\le k\le K)\) 表示因子
\({{r}_{f}}\) 表示无风险收益率,\(r_{f}^{t}\) 是 \(t\) 时刻的无风险收益率;
\(\mathbf{r}=\left( {{r}_{1}},\ldots {{r}_{i}},\ldots {{r}_{N}} \right)\) 表示股票的超额收益率向量,其中,\({{r}_{i}}\) 为股票 \(i\) 的超额收益率,\(r_{i}^{t}\) 是时段 \([t-1,t]\) 股票 \(i\) 的超额收益率;
\(c_{i}^{t}\) 表示时刻 \(t\) 股票 \(i\) 的总市值;\(c_{fi}^{t}\) 表示时刻 \(t\) 股票 \(i\) 的流通市值;
\({{r}_{m}}\) 表示市值加权的市场收益率,\(r_{m}^{t}\) 是时段 \([t-1,t]\) 的市场收益率,即:
\[r_{m}^{t}=\frac{\sum\limits_{i=1}^{N}{c_{i}^{t-1}\cdot r_{i}^{t}}}{\sum\limits_{i=1}^{N}{c_{i}^{t-1}}}\]\(\mathbf{X}\) ( \(N\times K\) 维矩阵)表示因子暴露度(因子载荷),其中,\({{X}_{ik}}\) 是股票 \(i\) 在因子 \(k\) 上的暴露,\(X_{ik}^{t}\) 是时刻 \(t\) 股票 \(i\) 在因子 \(k\) 上的暴露;
\(\mathbf{f}=\left( {{f}_{1}},\ldots {{f}_{k}},\ldots {{f}_{K}} \right)\) 表示因子收益率向量,其中,\({{f}_{k}}\) 为因子 \(k\) 的收益率,\(f_{k}^{t}\) 是时段 \([t-1,t]\) 因子 \(k\) 的收益率;
\(\mathbf{u}=\left( {{u}_{1}},\ldots {{u}_{i}},\ldots {{u}_{N}} \right)\) 表示股票特异性收益率向量,其中,\({{u}_{i}}\) 为股票 \(i\) 的特异性收益率,\(u_{i}^{t}\) 是时段 \([t-1,t]\) 股票 \(i\) 的特异性收益率;
\(\mathbf{F}\) ( \(K\times K\) 维矩阵)表示因子收益率的协方差矩阵,其中,\({{F}_{{{k}_{1}}{{k}_{2}}}}\) 是因子 \({{k}_{1}}\) 和因子 \({{k}_{2}}\) 收益率的协方差,即 \({{F}_{{{k}_{1}}{{k}_{2}}}}=\operatorname{cov}\left( {{f}_{{{k}_{1}}}},{{f}_{{{k}_{2}}}} \right)\),\(F_{{{k}_{1}}{{k}_{2}}}^{t}\) 是时刻 \(t\) 因子 \({{k}_{1}}\) 和因子 \({{k}_{2}}\) 收益率的协方差;
\(\mathbf{V}\) ( \(N\times N\) 维矩阵)是股票收益率的协方差矩阵,其中,\({{V}_{{{i}_{1}}{{i}_{2}}}}\) 是股票 \({{i}_{1}}\) 和股票 \({{i}_{2}}\) 收益率的协方差,即 \({{V}_{{{i}_{1}}{{i}_{2}}}}=\operatorname{cov}\left( {{r}_{{{i}_{1}}}},{{r}_{{{i}_{2}}}} \right)\),\(V_{{{i}_{1}}{{i}_{2}}}^{t}\) 是时刻 \(t\) 股票 \({{i}_{1}}\) 和股票 \({{i}_{2}}\) 的协方差;
\(\mathbf{\Delta }\) ( \(N\times N\) 维矩阵)是股票特异性收益率的协方差矩阵,其中,\({{\Delta }_{{{i}_{1}}{{i}_{2}}}}\) 是股票 \({{i}_{1}}\) 和股票 \({{i}_{2}}\) 特异性收益率的协方差,即:\({{\Delta}_{{{i}_{1}}{{i}_{2}}}}=\operatorname{cov}\left( {{u}_{{{i}_{1}}}},{{u}_{{{i}_{2}}}} \right)\),\(\Delta _{{{i}_{1}}{{i}_{2}}}^{t}\) 是时刻 \(t\) 股票 \({{i}_{1}}\) 和股票 \({{i}_{2}}\) 特异性收益率的协方差;
\({{I}_{j}}=\left\{ {{i}_{1}},\cdots ,{{i}_{{{N}_{j}}}} \right\}\) 为行业 \(j\) 的成份股集合,其中 \({{N}_{j}}\) 是行业 \(j\) 的成分股数。
\(\mathbf{w}=\left( {{w}^{0}},\ldots ,{{w}^{s}},\ldots ,{{w}^{T-1}} \right)\) 表示给定半衰期和窗口长度的指数衰减权重序列,即:
\[{{w}^{s}}=\frac{{{2}^{-{s}/{\lambda }}}}{\sum\limits_{s=0}^{T-1}{{{2}^{-{s}/{\lambda }}}}}\]其中,\(\lambda\) 是半衰期,\(T\) 是窗口长度;
7.1.2. 多因子模型¶
对股票的超额收益率构建多因子模型:
基本假设:
股票的特异收益率与因子收益率互不相关,即股票收益率协方差矩阵可以分解为:
\[\mathbf{V}=\mathbf{X}\cdot \mathbf{F}\cdot {{\mathbf{X}}^{T}}+\mathbf{\Delta }\]任意两只不同股票的特异性收益率之间互不相关,即 \(\mathbf{\Delta }\) 是对角阵:
\[\begin{split}{{\Delta }_{{{i}_{1}}{{i}_{2}}}}=\left\{ \begin{matrix} \operatorname{var}\left( {{u}_{{{i}_{1}}}} \right),{{i}_{1}}={{i}_{2}} \\ 0,{{i}_{1}}\ne {{i}_{2}} \\ \end{matrix} \right.,\end{split}\]
模型中的因子可以分成三类:市场因子,行业因子以及风格因子,多因子模型也可以展开写成下面的格式:
\[r_i=f_m+\sum\limits_{j}X_{ij}\cdot f_j+\sum\limits_{s}X_{is}\cdot f_s+u_i\]
- \(f_m\) 是市场因子收益率,所有股票对市场因子的暴露都为 1;
- \(f_j\) 是行业因子 \(j\) 的因子收益率,\(X_{ij}\) 是股票 \(i\) 对行业因子 \(j\) 的暴露度,如果股票 \(i\) 属于行业 \(j\),那么 \(X_{ij}=1\),否则 \(X_{ij}=0\);
- \(f_s\) 是风格因子 \(s\) 的因子收益率,\(X_{is}\) 是股票 \(i\) 对风格因子 \(s\) 的暴露度,\(X_{is}\) 通常都是连续型变量
另外,先区分两个股票池:
- CU(Coverage Universe):需要使用风险模型估计其风险的股票全体,通常设为当前上市的所有 A 股;
- ESTU(Estimation Universe):用作对多因子模型中的因子收益率和特异性收益率进行估计的股票池,通常设为:剔除不能正常交易、无行业分类、一年内发生特别处理或者上市时间不足30天的当前上市的所有 A 股。
7.1.3. 行业因子 [1]¶
| 风险模型行业分类 | Wind一级行业 | Wind二级行业 | Wind三级行业 | Wind三级行业代码 |
| Energy | 能源 | 能源 | 能源设备与服务 | 101010 |
| Energy | 能源 | 能源 | 石油、天然气与供消费用燃料 | 101020 |
| Chemicals | 材料 | 材料 | 化工 | 151010 |
| Construction Materials | 材料 | 材料 | 建材Ⅲ | 151020 |
| Diversified Metals | 材料 | 材料 | 金属、非金属与采矿 | 151040 |
| Materials | 材料 | 材料 | 容器与包装 | 151030 |
| Materials | 材料 | 材料 | 纸与林木产品 | 151050 |
| Aerospace and Defense | 工业 | 资本货物 | 航空航天与国防Ⅲ | 201010 |
| Building Products | 工业 | 资本货物 | 建筑产品Ⅲ | 201020 |
| Construction and Engineering | 工业 | 资本货物 | 建筑与工程Ⅲ | 201030 |
| Electrical Equipment | 工业 | 资本货物 | 电气设备 | 201040 |
| Industrial Conglomerates | 工业 | 资本货物 | 综合类Ⅲ | 201050 |
| Industrial Machinery | 工业 | 资本货物 | 机械 | 201060 |
| Trading Companies and Distributors | 工业 | 资本货物 | 贸易公司与工业品经销商Ⅲ | 201070 |
| Commercial and Professional Services | 工业 | 商业服务与用品 | 商业服务与用品 | 202010 |
| Commercial and Professional Services | 工业 | 商业服务与用品 | 专业服务 | 202020 |
| Airlines | 工业 | 运输 | 航空货运与物流Ⅲ | 203010 |
| Airlines | 工业 | 运输 | 航空Ⅲ | 203020 |
| Marine | 工业 | 运输 | 海运Ⅲ | 203030 |
| Road Rail and Transportation Infrastructure | 工业 | 运输 | 公路与铁路运输 | 203040 |
| Road Rail and Transportation Infrastructure | 工业 | 运输 | 交通基础设施 | 203050 |
| Automobiles and Components | 可选消费 | 汽车与汽车零部件 | 汽车零配件 | 251010 |
| Automobiles and Components | 可选消费 | 汽车与汽车零部件 | 汽车 | 251020 |
| Household Durables (non-Homebuilding) | 可选消费 | 耐用消费品与服装 | 家庭耐用消费品 | 252010 |
| Leisure Products Textiles Apparel and Luxury | 可选消费 | 耐用消费品与服装 | 休闲设备与用品 | 252020 |
| Leisure Products Textiles Apparel and Luxury | 可选消费 | 耐用消费品与服装 | 纺织品、服装与奢侈品 | 252030 |
| Hotels Restaurants and Leisure | 可选消费 | 酒店、餐馆与休闲 | 酒店、餐馆与休闲Ⅲ | 253010 |
| Hotels Restaurants and Leisure | 可选消费 | 酒店、餐馆与休闲 | 综合消费者服务Ⅲ | 253020 |
| Media | 可选消费 | 媒体 | 媒体Ⅲ | 254010 |
| Retail | 可选消费 | 零售业 | 消费品经销商Ⅲ | 255010 |
| Retail | 可选消费 | 零售业 | 互联网与售货目录零售 | 255020 |
| Retail | 可选消费 | 零售业 | 多元化零售 | 255030 |
| Retail | 可选消费 | 零售业 | 专营零售 | 255040 |
| Food Staples Retail Household Personal Prod | 日常消费 | 食品与主要用品零售 | 食品与主要用品零售Ⅲ | 301010 |
| Food Staples Retail Household Personal Prod | 日常消费 | 家庭与个人用品 | 家庭用品Ⅲ | 303010 |
| Food Staples Retail Household Personal Prod | 日常消费 | 家庭与个人用品 | 个人用品Ⅲ | 303020 |
| Beverages | 日常消费 | 食品、饮料与烟草 | 饮料 | 302010 |
| Food Products | 日常消费 | 食品、饮料与烟草 | 食品 | 302020 |
| Food Products | 日常消费 | 食品、饮料与烟草 | 烟草 | 302030 |
| Health | 医疗保健 | 医疗保健设备与服务 | 医疗保健设备与用品 | 351010 |
| Health | 医疗保健 | 医疗保健设备与服务 | 医疗保健提供商与服务 | 351020 |
| Health | 医疗保健 | 医疗保健设备与服务 | 医疗保健技术Ⅲ | 351030 |
| Health | 医疗保健 | 制药与生物科技 | 生物科技Ⅲ | 352010 |
| Health | 医疗保健 | 制药与生物科技 | 制药 | 352020 |
| Health | 医疗保健 | 制药与生物科技 | 生命科学工具和服务Ⅲ | 352030 |
| Banks | 金融 | 银行 | 商业银行 | 401010 |
| Banks | 金融 | 银行 | 互助储蓄银行与抵押信贷 | 401020 |
| Diversified Financial Services | 金融 | 多元金融 | 多元金融服务 | 402010 |
| Diversified Financial Services | 金融 | 多元金融 | 消费信贷 | 402020 |
| Diversified Financial Services | 金融 | 多元金融 | 资本市场 | 402030 |
| Diversified Financial Services | 金融 | 保险 | 保险Ⅲ | 403010 |
| Real Estate | 金融 | 房地产 | 房地产管理与开发 | 404010 |
| Software | 信息技术 | 软件与服务 | 互联网软件与服务Ⅲ | 451010 |
| Software | 信息技术 | 软件与服务 | 信息技术服务 | 451020 |
| Software | 信息技术 | 软件与服务 | 软件 | 451030 |
| Hardware and Semiconductors | 信息技术 | 技术硬件与设备 | 通信设备Ⅲ | 452010 |
| Hardware and Semiconductors | 信息技术 | 技术硬件与设备 | 电脑与外围设备 | 452020 |
| Hardware and Semiconductors | 信息技术 | 技术硬件与设备 | 电子设备、仪器和元件 | 452030 |
| Hardware and Semiconductors | 信息技术 | 技术硬件与设备 | 办公电子设备 | 452040 |
| Hardware and Semiconductors | 信息技术 | 半导体与半导体生产设备 | 半导体产品与半导体设备 | 453010 |
| Hardware and Semiconductors | 电信服务 | 电信服务 | 多元电信服务 | 501010 |
| Hardware and Semiconductors | 电信服务 | 电信服务 | 无线电信业务Ⅲ | 501020 |
| Utilities | 公用事业 | 公用事业 | 电力Ⅲ | 551010 |
| Utilities | 公用事业 | 公用事业 | 燃气Ⅲ | 551020 |
| Utilities | 公用事业 | 公用事业 | 复合型公用事业Ⅲ | 551030 |
| Utilities | 公用事业 | 公用事业 | 水务Ⅲ | 551040 |
| Utilities | 公用事业 | 公用事业 | 独立电力生产商与能源贸易商Ⅲ | 551050 |
7.1.4. 风险因子 [1]¶
- Size = 1.0 × LNCAP
LNCAP:总市值的自然对数,即:
\[LNCAP_{i}^{t}=\ln \left( c_{i}^{t} \right)\]
- Beta = 1.0 × BETA
BETA:CAPM 模型中的 \(\beta\) ,股票的超额收益与市场超额收益进行时间序列加权回归后的斜率系数,即:
\[\begin{split}\begin{align} & r_{i}^{t-s}-r_{f}^{t-s}=\alpha _{i}^{t}+\beta _{i}^{t}\left( r_{m}^{t-s}-r_{f}^{t-s} \right)+\varepsilon _{i}^{t-s},s=0,1,\ldots ,T-1 \\ & \beta _{i}^{t}\text{=}\frac{\sum\limits_{s=0}^{T-1}{{{w}^{s}}}\cdot \sum\limits_{s=0}^{T-1}{{{w}^{s}}\left( r_{i}^{t-s}-r_{f}^{t-s} \right)\left( r_{m}^{t-s}-r_{f}^{t-s} \right)}-\sum\limits_{s=0}^{T-1}{{{w}^{s}}\left( r_{i}^{t-s}-r_{f}^{t-s} \right)}\cdot \sum\limits_{s=0}^{T-1}{{{w}^{s}}\left( r_{m}^{t-s}-r_{f}^{t-s} \right)}}{\sum\limits_{s=0}^{T-1}{{{w}^{s}}}\cdot \sum\limits_{s=0}^{T-1}{{{w}^{s}}{{\left( r_{m}^{t-s}-r_{f}^{t-s} \right)}^{2}}}-{{\left[ \sum\limits_{s=0}^{T-1}{{{w}^{s}}\left( r_{m}^{t-s}-r_{f}^{t-s} \right)} \right]}^{2}}} \\ \end{align}\end{split}\]其中,\(\beta_{i}^{t}\) 即是 BETA 因子,\(T=252\) (一年),\(w\) 是指数权重,半衰期为63(一个季度),窗口长度为 \(T\) 。
- Momentum = 1.0 × RSTR
RSTR:相对强度(Relative Strength),滞后21个交易日的过去504个交易日股票超额对数收益率的加权和,即:
\[RSTR_{i}^{t}=\sum\limits_{s=t-T-L-1}^{t-L}{{{w}^{t-L-s}}\left[ \ln \left( 1+r_{i}^{s} \right)-\ln \left( 1+r_{f}^{s} \right) \right]}\]其中,\(L=21\) (一个月),\(T=504\) (两年),\(w\) 是指数权重,半衰期为126(半年),窗口长度为 \(T\) 。
- Residual Volatility = 0.74 × DASTD + 0.16 × CMRA + 0.10 × HSIGMA
DASTD:日标准差(Daily Standard Deviation),过去252个交易日日超额收益率的加权标准差,即:
\[DASTD_{i}^{t}=\sqrt{\sum\limits_{s=t-T+1}^{t}{{{w}^{t-s}}\cdot {{\left( r_{i}^{s}-r_{f}^{s} \right)}^{2}}}}\]其中,\(T=252\) (一年),\(w\) 是指数权重,半衰期为42(两个月),窗口长度为 \(T\) ;
CMRA:累积幅度(Cumulative Range),过去12个月月收益率累积收益率的波动幅度。记时刻 \(t\) 股票 \(i\) 回溯一个月的月收益率为 \(R_{i}^{t}=\prod\limits_{s=0}^{21}{\left( 1+r_{i}^{t-s} \right)}-1\),无风险月收益率为 \(R_{f}^{t}=\prod\limits_{s=0}^{21}{\left( 1+r_{f}^{t-s} \right)}-1\),定义:
\[\begin{split}\begin{align} & Z\left( K \right)=\sum\limits_{k=0}^{K-1}{\left[ \ln \left( 1+R_{i}^{t-k\cdot 21} \right)-\ln \left( 1+R_{f}^{t-k\cdot 21} \right) \right]} \\ & {{Z}_{\max }}=\underset{1\le K\le 12}{\mathop{\max }}\,\left\{ Z\left( K \right) \right\},{{Z}_{\min }}=\underset{1\le K\le 12}{\mathop{\min }}\,\left\{ Z\left( K \right) \right\} \\ & CMRA_{i}^{t}=\ln \left( 1+{{Z}_{\max }} \right)-\ln \left( 1+{{Z}_{\min }} \right) \\ \end{align}\end{split}\]HSIGMA:历史波动率(Historical Sigma),过去252个交易日残差收益率的加权标准差,即:
\[HSIGMA_{i}^{t}=\sqrt{\sum\limits_{s=t-T+1}^{t}{{{w}^{t-s}}\cdot {{\left( \varepsilon _{i}^{s} \right)}^{2}}}}\]其中,\(T=252\) (一年),\({{\varepsilon }_{i}}\) 是在2中计算BETA时得到的残差序列,\(w\) 是指数权重,半衰期为63(一个季度),窗口长度为 \(T\) ;
注意
后期处理:用 DASTD、CMRA、HSIGMA 加权求和得到的 Residual Volatility 关于 Beta 和 Size 因子做正交化以消除共线性。
- Non-linear Size = 1.0 × NLSIZE
- NLSIZE:Size 的立方关于 Size 因子做正交化(以总市值作为权重),最后去除异常值(三倍标准差以外的数据用三倍标准差填充)。
- Book-to-Price = 1.0 × BTOP
- BTOP:B/P,最新财报的普通股股本除以当前的总市值。
- Liquidity = 0.35 × STOM + 0.35 × STOQ + 0.30 × STOA
STOM:过去一个月日换手率总和的对数,即:
\[STOM_{i}^{t}=\ln \left( \sum\limits_{s=t-T+1}^{t}{\frac{V_{i}^{s}}{S_{i}^{s}}} \right)\]其中,\(T=21\) (一个月),\(V_{i}^{s}\) 为时刻 \(s\) 股票 \(i\) 的成交量,\(S_{i}^{s}\) 为时刻 \(s\) 股票 \(i\) 的流通股本;
STOQ:过去一个季度月换手率的均值,即:
\[STOQ_{i}^{t}=\frac{1}{3}\cdot \sum\limits_{s=t-3T+1}^{t}{\frac{V_{i}^{s}}{S_{i}^{s}}}\]其中,\(T=21\) (一个月);
STOA:过去一年月换手率的均值,即:
\[STOA_{i}^{t}=\frac{1}{12}\cdot \sum\limits_{s=t-12T+1}^{t}{\frac{V_{i}^{s}}{S_{i}^{s}}}\]其中,\(T=21\) (一个月)。
注意
后期处理:用 STOM、STOQ、STOA 加权求和得到的 Liquidity 关于 Size 因子做正交化以消除共线性。
- Earnings Yield = 0.68 × EPFWD + 0.21 × CETOP + 0.11 × ETOP
EPFWD:向前 12 个月的预期 E/P,即:
\[EPFWD_{i}^{t}=\frac{Earings\_Fwd12M_{i}^{t}}{c_{i}^{t}}\]其中,\(Earings\_Fwd12M_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 向前预测12个月的收益;
CETOP:过去 12 个月(TTM)每股现金收益与当前股价的比值,即:
\[CETOP_{i}^{t}=\frac{CashEarnings\_TTM_{i}^{t}}{c_{i}^{t}}\]其中,\(CashEarnings\_TTM_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 经营活动产生的现金流量净额的 TTM 值;
ETOP:过去 12 个月(TTM)每股收益与当前股价的比值,即:
\[CETOP_{i}^{t}=\frac{Earnings\_TTM_{i}^{t}}{c_{i}^{t}}\]其中,\(Earnings\_TTM_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 净利润(不含少数股东损益)的 TTM 值。
- Growth = 0.18 × EGRLF + 0.11 × EGRSF + 0.24 × EGRO + 0.47 × SGRO
EGRLF:长期预期收益增长率(Long-term predicted earnings growth),未来三年净利润分析师一致预期相对于净利润(不含少数股东损益)最新年报值的平均增长率,即:
\[\begin{split}\begin{align} & EGRLF_{i}^{t}=\left\{ \begin{matrix} {{\left( 1\text{+}R_{i}^{t} \right)}^{{}^{1}/{}_{3}}}-1,1\text{+}R_{i}^{t}\ge 0 \\ -{{\left| 1\text{+}R_{i}^{t} \right|}^{{}^{1}/{}_{3}}}-1,1\text{+}R_{i}^{t}<0 \\ \end{matrix}, \right. \\ & R_{i}^{t}=\frac{Earnings\_Fwd3Y_{i}^{t}-Earnings\_LY_{i}^{t}}{\left| Earnings\_LY_{i}^{t} \right|}, \\ \end{align}\end{split}\]其中,\(Earnings\_Fwd3Y_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 的未来三年净利润的分析师一致预期,\(Earnings\_LY_{i}^{t}\) 是净利润(不含少数股东损益)最新年报数据;
EGRSF:短期预期收益增长率(Short-term predicted earnings growth),未来一年净利润分析师一致预期相对于净利润(不含少数股东损益)最新年报值的平均增长率,即:
\[EGRSF_{i}^{t}=\frac{Earnings\_Fwd1Y_{i}^{t}-Earnings\_LY_{i}^{t}}{\left| Earnings\_LY_{i}^{t} \right|}\]其中,\(Earnings\_Fwd1Y_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 是时刻 \(t\) 股票 \(i\) 的净利润(不含少数股东损益)最新年报数据。
EGRO:盈利增长率(Earnings Growth),过去 5 年的基本每股收益关于 \(\left[0,1,2,3,4\right]\) 回归的斜率系数,然后再除以过去 5 年基本每股收益的均值的绝对值,即:
\[\begin{split}\begin{align} & EarningsPerShare_{i}^{t-k\cdot 365}=a_{i}^{t}+b_{i}^{t}\cdot k+\varepsilon _{i}^{t},k=0,1,2,3,4 \\ & EGRO_{i}^{t}=\frac{b_{i}^{t}}{\left|\frac{1}{5}\sum\limits_{k=0}^{4}{EarningsPerShare_{i}^{t-k\cdot 365}}\right|} \\ \end{align}\end{split}\]其中,\(EarningsPerShare_{i}^{t-k\cdot 365}\) 是时刻 \(t\) 股票 \(i\) 的回溯 \(k\) 年最新年报的基本每股收益。
SGRO:营收增长率(Sales Growth),过去 5 年每股营业收入关于 \(\left[0,1,2,3,4\right]\) 回归的斜率系数,然后再除以过去 5 年每股营业收入的均值的绝对值,即:
\[\begin{split}\begin{align} & SalesPerShare_{i}^{t-k\cdot 365}=a_{i}^{t}+b_{i}^{t}\cdot k+\varepsilon _{i}^{t},k=0,1,2,3,4 \\ & SGRO_{i}^{t}=\frac{b_{i}^{t}}{\left|\frac{1}{5}\sum\limits_{k=0}^{4}{SalesPerShare_{i}^{t-k\cdot 365}}\right|} \\ \end{align}\end{split}\]其中,\(SalesPerShare_{i}^{t-k\cdot 365}\) 是时刻 \(t\) 股票 \(i\) 的回溯 \(k\) 年最新年报的每股营业总收入。
- Leverage = 0.38 × MLEV + 0.35 × DTOA + 0.27 × BLEV
MLEV:市场杠杆(Market Leverage),总市值加上最新年报的长期负债值与总市值的比值,即:
\[MLEV_{i}^{t}=\frac{c_{i}^{t}+LongDebt_{i}^{t}}{c_{i}^{t}}\]其中,\(LongDebt_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 的非流动负债最新年报值。
DTOA:资产负债率(Debt-to-Assets),总负债比总资产,即:
\[DTOA_{i}^{t}=\frac{TotalDebt_{i}^{t}}{TotalAssets_{i}^{t}}\]其中,\(TotalDebt_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 的负债合计的最新年报值,\(TotalAssets_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 的资产总计的最新年报值。
BLEV:账面杠杆(Book Leverage),长期负债和股东权益的和与股东权益的比,即:
\[BLEV_{i}^{t}=\frac{Equity_{i}^{t}+LongDebt_{i}^{t}}{Equity_{i}^{t}}\]其中,\(LongDebt_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 的非流动负债最新年报值,\(Equity_{i}^{t}\) 是时刻 \(t\) 股票 \(i\) 的股东权益合计(不含少数股东权益)的最新年报值。
7.1.5. 数据预处理¶
对描述子和风格因子的数据需要进行正规化的处理,通常分为以下步骤:
描述子标准化:
\[X_{ik}^{std} = \frac{X_{ik}^{raw}-\mu_k}{\sigma_k}\]其中,\(X_{ik}^{raw}\) 是描述子 \(k\) 的原始值,\(\mu_k\) 是描述子 \(k\) 的截面均值:
\[\mu_k = \sum\limits_{i\in ESTU}w_i\cdot X_{ik}^{raw}\]均值的计算使用股票的市值加权,即:
\[w_i = \frac{c_i}{\sum\limits_{i\in ESTU}c_i}\]\(\sigma_k\) 是描述子 \(k\) 等权计算的截面(截面取的是 ESTU)标准差
极端值处理:
\[\begin{split}{\tilde{X}_{ik}^{std}}=\left\{ \begin{matrix} 3\cdot \left(1-s_{(+)}\right)+X_{ik}^{std}\cdot s_{(+)},X_{ik}^{std}>3 \\ -3\cdot \left(1-s_{(-)}\right)+X_{ik}^{std}\cdot s_{(-)},X_{ik}^{std}<-3 \\ X_{ik}^{std},-3\le X_{ik}^{std}\le 3 \\ \end{matrix} \right.,\end{split}\]其中,\(X_{ik}^{std}\) 是 1 中标准化的描述子,
\[\begin{split}\begin{align} & s_{(+)} = \operatorname{max}\left\{0,\operatorname{min}\left\{1,\frac{0.5}{\operatorname{max}_i\{X_{ik}^{std}\}-3}\right\}\right\} \\ & s_{(-)} = \operatorname{max}\left\{0,\operatorname{min}\left\{1,\frac{0.5}{-3-\operatorname{min}_i\{X_{ik}^{std}\}}\right\}\right\} \\ \end{align}\end{split}\]再次使用 1 中的方法对 \(\tilde{X}_{ik}^{std}\) 进行标准化
合并描述子为风格因子,只将非缺失的描述子的权重重新归一后合成
用 1 中的方法对 4 中得到的风格因子进行标准化
缺失值填充:在每个 Wind 一级行业分类内,以不缺失的股票因子值相对于市值的对数进行回归:
\[X_{ik} = a_k+b_k\cdot \log{c_i}+\epsilon_i\]对于因子值缺失的股票,以 \(a_k+b_k\cdot \log{c_i}\) 进行填充,如果因子值缺失的股票属于 ESTU,则用 1 中的方法再重新标准化。
7.1.6. 因子收益率和特异性收益率的估计¶
截面回归:
在时刻 \(t\),取属于 ESTU 的股票在时段 \([t-1,t]\) 的超额收益率和 \(t-1\) 时刻的因子值做截面回归(以下省略上标 \(t\)),回归方程为:
\[r_i=f_m+\sum\limits_{j}X_{ij}\cdot f_j+\sum\limits_{s}X_{is}\cdot f_s+u_i\]
回归算法为有约束的加权回归,其对应的优化问题为:
\[\begin{split}\begin{align} &\operatorname{min}\ WSSR=\sum\limits_{i\in ESTU}{\rho_{i}\left( r_{i}-f_m-\sum\limits_{j}{X_{ij}\cdot f_{j}}-\sum\limits_{s}{X_{is}\cdot f_{s}} \right)^2} \\ &s.t.\ \sum\limits_{j}{\omega_j}\cdot f_{j} = 0 \\ \end{align}\end{split}\]
其中,回归权重 \(\rho_{i}\) 为股票市值的平方根,并且截至市值平方根的 95% 分位数,即:
\[\rho_{i}=\operatorname{min}\left\{\sqrt{c_{i}}, \operatorname{percentile}\left( \sqrt{\mathbf{c}},95\% \right)\right\}\]
约束条件中的 \(\omega_j\) 是行业 \(j\) 的市值,即:\(\omega_j=\sum\limits_{i\in I_j}{c_i}\)。
加权回归的目的:
- 通常应采用广义最小二乘回归来估计因子收益率,该方法为每个收益率观测样本赋予了其特异方差的倒数成正比的权重,实证研究表明与市值的其他次方相比,市值平方根是模拟特异方差倒数的合适选择,规模比较大的公司通常具有较低的风险,而当公司的规模翻倍时,特异方差大约缩减为原来的0.7倍。我们用市值平方根代替特异方差的倒数来对每个观测值加权,即可用线性最小二乘回归来估计,减少计算量。(参考 [Grinold] 第三章附录)
- 大市值股票应对模型有更大的影响。
- 避免行业内股票权重过于集中。
- 贴合常见的市值为权重的组合。
检测异常收益,修正后二次回归:
首先计算异常的残差收益率,定义 \(\left|u_i\right|>4\tilde{\sigma}_u\) 的残差项为异常,其中 \(\tilde{\sigma}_u\) 是残差项的鲁棒标准差:
\[\tilde{\sigma}_u = 1.4826\cdot \operatorname{median}\left( \left| \mathbf{u}-\operatorname{median}\left( \mathbf{u} \right) \right| \right)\]
定义残差项的异常部分为
\[\begin{split}\xi_i=\left\{ \begin{matrix} & \operatorname{sgn}(u_i)\left(\left|u_i\right|-4\tilde{\sigma}_u\right) & ,\ \left|u_i\right|>4\tilde{\sigma}_u \\ & 0 & ,\ \left|u_i\right|\le 4\tilde{\sigma}_u \\ \end{matrix} \right.,\end{split}\]
从股票超额收益率中减去残差项的异常部分再进行之前所述的截面回归,即:
\[r_i-\xi_i=\tilde{f}_m+\sum\limits_{j}X_{ij}\cdot\tilde{f}_j+\sum\limits_{s}X_{is}\cdot\tilde{f}_s+\tilde{u}_i\]
以 \(\tilde{f}_k\) 作为最终的因子收益率,以 \(\tilde{u}_i+\xi_i\) 作为最终的特异性收益率。
个股收益率异常值处理的目的:控制异常的个股收益率对因子收益率回归的影响。
行业内样本不足的处理:
在进行截面回归之前需要先对样本量不足的行业添加代样本(Thin Industry Correction)。
对行业 \(j\) 定义有效样本数:
\[{{n}_{j}}=\frac{\sum\limits_{i\in {{I}_{j}}}{\rho_{i}}}{\sum\limits_{i\in {{I}_{j}}}{\rho_{i}^{2}}}\]其中,\(\rho_i\) 是股票 \(i\) 的回归权重。
对于 \(0<{{n}_{j}}<5\) 的行业,在行业中插入代样本,代样本的收益率设置为市场收益率,代样本对行业 \(j\) 的因子暴露 \(X_{ij}=1\),其他因子暴露为 0,代样本的回归权重为:
\[\frac{\left( 5-{{n}_{j}} \right)\cdot \sum\limits_{i\in {{I}_{j}}}{\rho_{i}}}{{{n}_{j}}}\]对于 \({{n}_{j}}=0\) 的行业,该行业因子不参与截面回归,直接设置其因子收益率为市场收益率,这里的市场收益率定义为属于 ESTU 的所有股票的市值加权平均收益率:
\[\frac{\sum\limits_{i\in ESTU}{c_{i}}\cdot r_i}{\sum\limits_{i\in ESTU}{c_{i}}}\]
行业内样本不足处理的目的:行业因子收益率的小样本偏差,即行业内样本数量不足、行业内权重集中于少数大市值样本或者对此行业因子的收益率产生贡献的有效样本过少。
模型样本内解释能力检验:
\[R^2=1-\frac{\sum\limits_{i\in ESTU}\rho_i\cdot u_i^2}{\sum\limits_{i\in ESTU}\rho_i\cdot r_i^2}\]
\(R^2\) 检验的注意点:
- 回归样本数量的减少带来虚假的上升;
- 回归样本权重的集中带来虚假的上升;
- 对异常值的过拟合,即样本内解释能力上升但样本外解释能力下降。
7.1.7. 因子收益率协方差矩阵估计¶
计算样本估计
使用 EWMA(Exponentially Weighted Moving Average) 和 Newey-West 方法(参见 [CHE2],[GEM2])
以因子日收益率数据估计协方差阵,预测期为 \(H\) 天(\(H=21\),一个月),设因子 \(H\) 期的协方差矩阵为 \(\mathbf{F}_H\) ( \(K\times K\) 维)。
假设因子收益率时间序列的自相关性在 \(N+1\) 期中存在(\(N+1=11\)),则
\[\mathbf{F}_H=\frac{H}{N+1}\mathbf{F}_{N+1},(H\ge N+1)\]
设 \(t\) 日因子 \(k\) 的收益率为 \(f_k^t\),则 \(\left\{t,t+1,\ldots,t+N\right\}\) 期的总收益近似为:
\[f_k^{t,t+N} = \sum\limits_{d=t}^{t+N}{f_k^d}\]
从而:
\[\mathbf{F}_{N+1}\left(k_1,k_2\right) = \operatorname{cov}\left(f_{k_1}^{t,t+N},f_{k_2}^{t,t+N}\right) = \sum\limits_{d_1=t}^{t+N}\sum\limits_{d_2=t}^{t+N}\operatorname{cov}\left(f_{k_1}^{d_1},f_{k_2}^{d_2}\right)\]
假设 \(\operatorname{cov}\left(f_{k_1}^{d_1},f_{k_2}^{d_2}\right)\) 只跟 \(\Delta=d_1-d_2\) 相关,而与 \(d_1,d_2\) 无关,则有:
\[\mathbf{F}_{N+1}\left(k_1,k_2\right) = \sum\limits_{\Delta=-N}^{\Delta=N}\left(N+1-|\Delta|\right)\operatorname{cov}\left(f_{k_1}^{0},f_{k_2}^{\Delta}\right)\]
对 \(\operatorname{cov}\left(f_{k_1}^{0},f_{k_2}^{\Delta}\right)\) 计算样本估计,可以使用当前能得到的所有因子收益率历史样本,或者固定窗口长度滚动计算(窗长=360):
\[\operatorname{cov}\left(f_{k_1}^{0},f_{k_2}^{\Delta}\right) = \sum\limits_{t}w_t\left(f_{k_1}^t-\bar{f}_{k_1}\right)\left(f_{k_2}^{t+\Delta}-\bar{f}_{k_2}\right),-N\le \Delta\le N\]
其中,\(w_t\) 是指数权重, \(w_t=\frac{2^{t/L}}{\sum\limits_{\tau}2^{\tau/L}}\) ,\(L\) 是半衰期(\(L=480\))。
对于 \(f_k^{t+\Delta}\) 不存在的样本点,令 \(f_k^{t+\Delta}=0\)。
相关系数和标准差使用了不同的半衰期计算,相关系数的估计量为:
\[\operatorname{corr}\left(f_{k_1}^0,f_{k_2}^\Delta\right)=\frac{\operatorname{corr}\left(f_{k_1}^0,f_{k_2}^\Delta\right)}{\sqrt{\operatorname{cov}\left(f_{k_1}^0,f_{k_1}^0\right)}\cdot \sqrt{\operatorname{cov}\left(f_{k_2}^\Delta,f_{k_2}^\Delta\right)}}\]
以新的半衰期重新计算标准差:
\[\operatorname{cov}^S\left(f_{k}^0,f_{k}^0\right)=\sum\limits_{t}w_t\left(f_k^t-\bar{f}_k\right)\]
其中, \(w_t=\frac{2^{t/S}}{\sum\limits_{\tau}2^{\tau/S}}\) ( \(S=90\) )。
最终的协方差估计为:
\[\operatorname{cov}\left(f_{k_1}^{0},f_{k_2}^{\Delta}\right) = \sqrt{\operatorname{cov}^S\left(f_{k_1}^0,f_{k_1}^0\right)}\cdot\operatorname{corr}\left(f_{k_1}^0,f_{k_2}^\Delta\right)\sqrt{\operatorname{cov}^S\left(f_{k_2}^\Delta,f_{k_2}^\Delta\right)}\]
最后,对 \(\mathbf{F}_H\) 进行正定化修正,即对 \(\mathbf{F}_H\) 进行合同分解:\(\mathbf{F}_H=\mathbf{P}^T\mathbf{D}_H\mathbf{P}\) 将 \(\mathbf{D}_H\) 对角线上小于等于 0 的元素用很小的正数代替得到 \(\tilde{\mathbf{D}}_{H}\),以 \(\tilde{\mathbf{F}}_{H}=\mathbf{P}^T\tilde{\mathbf{D}}_{H}\mathbf{P}\) 为最终的因子收益率协方差矩阵的估计量。
Eigenfactor Risk Adjustment [2]
记前面计算的因子收益率协方差矩阵为 \(\mathbf{F}_0,K\times K\),做合同分解得:\(\mathbf{D}_0=\mathbf{U}_0^T\mathbf{F}_0\mathbf{U}_0\),其中,\(\mathbf{U}_0,K\times K\) 是正交阵,\(\mathbf{D}_0,K\times K\) 是由 \(\mathbf{F}_0\) 的特征值组成的对角阵。
Monte Carlo 模拟 M 次因子收益率样本矩阵 \(\mathbf{b}_m,K\times T\),第 \(k\) 行是因子 \(k\) 的模拟收益时间序列,模拟的样本来自于均值为 0,方差为 \(\mathbf{D}_0\left(k\right)\) 的正态分布。
记 \(f_m=\mathbf{U}_0\cdot \mathbf{b}_m\),对于 \(f_m\) 计算前面描述的因子协方差阵的样本估计量 \(\mathbf{F}_m=\operatorname{cov}\left(f_m,f_m\right)\),同样做合同分解得:\(\mathbf{D}_m=\mathbf{U}_m^T\mathbf{F}_m\mathbf{U}_m\) ( \(\mathbb{E}\left[\mathbf{F}_m\right]=\mathbf{F}_0\) )。
记 \(\tilde{\mathbf{D}}_m=\mathbf{U}_m^T\mathbf{F}_0\mathbf{U}_m\),第 \(k\) 个 Eigenfactor 波动率修正为:
\[v(k) = \sqrt{\frac{1}{M}\sum\limits_{m}\frac{\tilde{\mathbf{D}}_m(k)}{\mathbf{D}_m(k)}}\]
对所有的 \(\left\{v(k)\right\}_{k\le K}\) 使用二次多项式拟合(不考虑误差较大的前 15 个样本),得到 \(\left\{v_p(k)\right\}_{k\le K}\)。
最终的修正量为 \(v_s(k)=a\left(v_p(k)-1\right)+1\) ( \(a\) 的经验值为 1.4)。
修正 \(\mathbf{D}_0\) 为 \(v_s^2\cdot \mathbf{D}_0\),\(v_s\) 是 \(\left\{v_s(k)\right\}_{k\le K}\) 形成的对角阵。
修正 \(\mathbf{F}_0\) 为 \(\tilde{\mathbf{F}}_0=\mathbf{U}_0\tilde{\mathbf{D}}_0\mathbf{U}_0^T\)
Volatility Regime Adjustment [2]
记前面计算的因子收益率协方差矩阵为 \(\mathbf{F},K\times K\),已知因子收益率历史样本 \(f_k^t\),因子标准差的预测序列为 \(\sigma^t_k\),则每一期的因子截面偏差统计量(factor cross-sectional bias statistic)为:
\[B_t^F = \sqrt{\frac{1}{K}\sum\limits_{k}\left(\frac{f_k^t}{\sigma_k^t}\right)^2}\]
定义因子波动率乘数(factor volatility multiplier):
\[\lambda_F=\sqrt{\sum\limits_{t}w^t\left(B_t^F\right)^2}\]
其中,\(w_t\) 是指数权重。
对当前的 \(\sigma_k\) 修正为:\(\tilde{\sigma}_k=\lambda_F\sigma_k\),\(F_{k_1,k_2}=\operatorname{cov}\left(f_{k_1},f_{k_2}\right)=\rho_{k_1,k_2}\sigma_{k_1}\sigma_{k_2}\) 修正为:\(\tilde{F}_{k_1,k_2}=\operatorname{cov}\left(f_{k_1},f_{k_2}\right)=\rho_{k_1,k_2}\tilde{\sigma}_{k_1}\tilde{\sigma}_{k_2}\)。
7.1.8. 特异性风险的估计¶
特异性风险需要对所有属于 CU 的股票进行估计
计算样本估计 [3]
使用 EWMA 和 Newey-West 方法(同因子协方差样本估计方法)计算得到估计量 \(\sigma_u^{TS}\)。
评估每只股票的特异性收益率样本是否适合用作估计。
计算鲁棒标准差:
\[\tilde{\sigma}_u=\frac{1}{1.35}\left(Q_3-Q_1\right)\]
其中,\(Q_1,Q_3\) 是特异性收益率样本的 25%,75% 分位数。
将特异性收益率样本数据截断在 \(\pm10\tilde{\sigma}_u\) 处,再用此样本计算普通的样本标准差 \(\sigma_{u,eq}\)。
计算两种标准差的偏差:
\[Z_u=\left|\frac{\sigma_{u,eq}-\tilde{\sigma}_u}{\tilde{\sigma}_u}\right|\]
计算 blending coefficient:
\[\gamma=\operatorname{min}\left\{1,\operatorname{max}\left\{0,\frac{h-60}{120}\right\}\right\}\cdot\operatorname{min}\left\{1,\operatorname{max}\left\{0,e^{1-Z_u}\right\}\right\}\]
其中,\(h\) 为样本长度。
- 对于 \(\gamma=1\) 的股票可直接使用 \(\sigma_u^{TS}\) 作为特异性风险的估计量
- 对于 \(\gamma<1\) 的股票,样本长度不足或者质量不够,不适合作为特异性风险的估计量
为特异性风险建立结构化模型
将所有 \(\gamma=1\) 的股票的 \(\log\left(\sigma_u^{TS}\right)\) 相对于部分模型风险因子做截面加权回归:
\[\log\left(\sigma_{u,i}^{TS}\right) = \xi_m+\sum\limits_{j}X_{ij}\xi_j+\sum\limits_{s}X_{is}\xi_s+\varepsilon_i\]
其中,回归权重 \(\rho_i\),即之前截面回归的回归权重;回归因子取行业,Volatility,Liquidity,Momentum 以及 \(\left|u_i\right|\) 的时间序列样本均值。
计算结构化估计:
\[\sigma_{u,i}^{STR} = \operatorname{exp}\left\{\xi_m+\sum\limits_{j}X_{ij}\xi_j+\sum\limits_{s}X_{is}\xi_s\right\}\cdot E_0\]
其中,\(E_0=\sum\limits_{i}\rho_i\frac{\sigma_{u,i}^{TS}}{\sigma_{u,i}^{STR}}\),\(\rho_i\) 是前述的回归权重。
合并 \(\sigma_u^{TS}\) 和 \(\sigma_u^{STR}\) 作为最终的特异性风险的估计量:
\[\sigma_u=\gamma\cdot\sigma_u^{TS}+(1-\gamma)\cdot\sigma_u^{STR}\]
Bayesian Shrinkage [2]
假设已知样本估计为 \(\hat{\sigma}_i\)。
按照市值将从小到大所有的股票分成 10 组,记股票 \(i\) 所属的组为 \(s_i\),记:
\[\sigma_{i}^{SH} = v_i\bar{\sigma}\left(s_i\right)+(1-v_i)\hat{\sigma}_i\]
其中:
\[\bar{\sigma}\left(s_i\right)=\sum\limits_{{i}'\in s_i}\omega_{{i}'}\hat{\sigma}_{{i}'}\]
\(\omega_{{i}'}\) 是市值归一形成的权重,
\[v_i = \frac{q\left|\hat{\sigma}_i-\bar{\sigma}\left(s_i\right)\right|}{\Delta_\sigma\left(s_i\right)+q\left|\hat{\sigma}_i-\bar{\sigma}\left(s_i\right)\right|},(q=0.1)\]\[\Delta_\sigma\left(s_i\right) = \sqrt{\frac{1}{N\left(s_i\right)}\sum\limits_{{i}'\in s_i}\left(\hat{\sigma}_{{i}'}-\bar{\sigma}\left(s_{{i}'}\right)\right)^2}\]
\(N\left(s_i\right)\) 是 \(s_i\) 组的股票数。
Volatility Regime Adjustment [2]
已知特异性收益率历史样本 \(u_i^t\),特异性风险的预测序列为 \(\sigma^t_i\),则每一期的特异性截面偏差统计量(specific cross-sectional bias statistic)为:
\[B_t^s = \sqrt{\sum\limits_{i}\omega_i^t\left(\frac{u_i^t}{\sigma_i^t}\right)^2}\]
其中,\(\omega_i^t\) 是市值归一形成的权重。
定义特异性波动率乘数(specific volatility multiplier):
\[\lambda_s=\sqrt{\sum\limits_{t}w^t\left(B_t^s\right)^2}\]
其中,\(w_t\) 是指数权重,半衰期同因子收益率协方差的 Volatility Regime Adjustment 的半衰期一致。
最终修正为:\(\tilde{\sigma}_i=\lambda_s\hat{\sigma}_i\)。
7.1.9. 风险模型检验 [3]¶
我们使用 Bias Tests 来检验风险模型的预测准确度。Bias Tests 用于比较风险的模型预测值和已实现值。给定某个投资策略,首先计算每一期的 Z-Score:
\[{{z}_{t}}=\frac{{{r}_{t}}}{{{{\hat{\sigma }}}_{t}}}\]
其中,\({{\hat{\sigma}}_{t}}\) 是对 \(t\) 时刻组合的风险预测值,\({{r}_{t}}\) 是 \(t\) 时刻的组合收益率。(这里计算频率为1个月)
假设模型的预测是完美的,那么 \({{z}_{t}}\) 的标准差为1。\({{z}_{t}}\) 的标准差低于1则意味着对实际风险的高估,反之则为低估。
定义时间区间 \(\left[ t-T+1,t \right]\) 上的 Bias 统计量为 \({{z}_{t}}\) 的样本标准差:
\[b_{t}^{T}={{\left( \frac{1}{T-1}\sum\limits_{s=t-T+1}^{t}{{{\left( {{z}_{s}}-\bar{z}_{t}^{T} \right)}^{2}}} \right)}^{{1}/{2}\;}}\]
其中,\(\bar{z}_{t}^{T}=\frac{1}{T}\sum\limits_{s=t-T+1}^{t}{{{z}_{s}}}\) 是 \({{z}_{t}}\) 的样本均值。在组合收益率是正态分布的假设下,Bias 统计量 \(b_{t}^{T}\) 的95%的置信区间为:
\[{{C}_{T}}=\left[ 1-\sqrt{{2}/{T}\;},1+\sqrt{{2}/{T}\;} \right]\]
当考察的样本长度 \(T\) 越长,置信区间 \({{C}_{T}}\) 将越短。然而,过度的增加样本长度并不能增加检验的准确性。模型可能在一段时间内对风险倾向于高估,而随后的一段时间内又低估了风险,但从整个区间平均来看 Bias 统计量会接近于1。实际应用中,我们更关心模型短期的预测准确性。鉴于此,我们转而观察滚动12个月的 Bias 统计量。
用较短的样本序列计算 Bias 统计量有一个显著的缺陷是其对异常值过于敏感。这个问题和我们的正态性假设有关。如果我们可以准确的对异常值的大小和出现的频率进行建模,那么置信区间可以做出相应的调整。退而求其次,一个替代性的方案是对 \({{z}_{t}}\) 进行截尾处理:
\[{{\tilde{z}}_{t}}=\max \left\{ -3,\min \left\{ 3,{{z}_{t}} \right\} \right\}\]
以 \({{\tilde{z}}_{t}}\) 计算的 Bias 统计量我们称其为稳健的 Bias 统计量。稳健的 Bias 统计量反映的是模型对收益分布中心区域的预测能力,不会受到异常值的干扰。
除了 Bias 统计量,度量模型预测准确度的另一个统计量是 RAD 统计量,时间段 \(\left[ {{t}_{0}},{{t}_{1}} \right]\) 上的 RAD 统计量定义为:
\[RAD_{{{t}_{0}},{{t}_{1}}}^{T}=\frac{1}{{{t}_{1}}-{{t}_{0}}}\sum\limits_{t={{t}_{0}}}^{{{t}_{1}}}{\left| b_{t}^{T}-1 \right|}\]
在正态性假设下,对于一个足够长样本区间,RAD 统计量的中心位置大约是0.17,比如期数是150期时95%的置信上界是0.22。同样的,异常值也会干扰 RAD 统计量,我们也可以使用截尾的 \({{\tilde{z}}_{t}}\) 来计算稳健的 RAD 统计量。
Bias 统计量和 RAD 统计量需要针对大量的投资策略来计算,通常我们考察的投资组合有:
- 市值加权和等权的全体 A 股组合
- 市值加权和等权的行业组合
- 市值加权和等权的风险因子的 Top-Bottom 组合(5分位组合)
- 各行业市值排名前一半的股票组成的等权组合,各行业市值排名后一半的股票组成的等权组合。
- 市值加权和等权的随机抽取的20、50、100、200组合。
7.2. 风险数据生成¶
风险数据生成的脚本如下:
# coding=utf-8
import datetime as dt
if __name__=='__main__':
import QuantStudio.api as QS
StartDT, EndDT = dt.datetime(2017,1,1,23), dt.datetime(2017,9,29)
FDB = QS.FactorDB.HDF5DB(sys_args={"主目录":"C:\\HDF5Data")
FDB.connect()
DTs = QS.Tools.DateTime.getMonthLastDateTime(FDB.getTable("ElementaryFactor").getDateTime("日收益率", start_dt=StartDT, end_dt=EndDT))
FT = QS.FactorDB.CustomFT("MainFT")
FT.addFactors(factor_table=FDB.getTable("ElementaryFactor"), factor_names=["日收益率", "总市值"])
FT.addFactors(factor_table=FDB.getTable("BarraDescriptor"), factor_names=["ESTU", "Industry"])
FT.addFactors(factor_table=FDB.getTable("BarraFactor"), factor_names=None)
FT.setDateTime(FDB.getTable("BarraDescriptor").getDateTime(ifactor_name="ESTU"))
FT.setID(FDB.getTable("BarraDescriptor").getID(ifactor_name="ESTU"))
RDB = QS.RiskDB.HDF5FRDB(sys_args={"主目录":"C:\\RiskData")
RDB.connect()
Model = QS.RiskModel.BarraModel("MainModel", factor_table=FT, risk_db=RDB, table_name="Barra风险数据", config_file=None)
Model.setRiskESTDateTime(DTs)
Model.run()
下面解释以下上述代码. 首先确定风险数据生成的起止时间: StartDT 和 EndDT, 并创建一个因子数据库对象 FDB 用于提供因子数据. 目前默认的风险模型是按月生成风险数据, 所以生成一个月度时间序列 DTs.
接着, 创建一个自定义因子表 FT, 将用到的所有因子添加到这个表里, 并设置足够长的时间序列.
然后创建风险数据库 RDB 用于存储风险数据.
最后创建风险模型 BarraModel, 目前 QuantStudio 中可用的风险模型是参考 Barra [CNE5] 的多因子风险模型, 所以前面创建的风险库也是结构化的风险库. BarraModel 有五个参数:
- name: 模型的名称, str
- factor_table: 提供因子数据的因子表
- risk_db: 储存风险数据的风险库
- table_name: 储存风险数据的表名称
- config_file: 模型的配置文件, 如果为 None, 则采用默认配置, 由于风险模型的较为复杂, 建议不要修改默认配置.
创建好模型后, 调用 run 方法即可生成风险数据.