| layout | default |
|---|
可参考聚宽单因子分析教程 目标:走通从数据获取、因子计算、因子分析的完整pipeline,并且能复现一些经典因子,进行实践。
单因子模型是关于资产定价(选股)的模型,与资本资产定价模型和单指数模型不同,单因子模型认为股票的价格并不仅仅取决于证券的风险,还取决于其他一些因素。
个人倾向于分为基本面因子和市场因子,但是更专业的分类如下:
- 市盈率 Price to Earning Ratio (P/E): 股票价格/每股收益,反映投资者对公司未来盈利能力的预期(市梦率。。。)$PE = \frac{Price}{Earning\ per\ Share}$
- 市净率 Price to Book Ratio (P/B): 股票价格/每股净资产,反映投资者对公司净资产的预期
$PB = \frac{Price}{Book\ Value\ per\ Share}$ - 市现率 Price to Cash Flow Ratio (P/CF): 股票价格/每股现金流量,反映投资者对公司现金流的预期,理论上来说PCF低说明股票被低估了
$PCF = \frac{Price}{Cash\ Flow\ per\ Share}$ - 其他种种 ...
- 流通市值 Market Capitalization (MCAP): 流通股数量*股票价格,反映公司规模大小。
- 总市值 Total Market Capitalization (TMCAP): 总股本*股票价格,一般流通市值更能反映公司规模。
- 资产负债率 Debt to Asset Ratio (DAR): 总负债/总资产,反映公司财务杠杆水平。
$DAR = \frac{Total\ Liabilities}{Total\ Assets}$
- 换手率 Turnover Rate (TR): 一段时间内股票成交量/流通股数量,反映股票的流动性。
$TR = \frac{Volume}{Float\ Shares}$ - 成交量 Volume (VOL): 一段时间内股票的成交量,反映市场对该股票的关注度。
- 成交额 Amount (AMT): 一段时间内股票的成交金额,反映市场对该股票的资金流入情况。
不断挖掘新的因子,用单因子、多因子模型进行回测,为后续的多策略组合实现稳定盈利,包括数据获取,因子处理,收益分析,消息分析。
- 公司基本面数据:上市公司财报,公司公开的其他消息。
- 市场数据/量价数据:股票价格,成交量,换手率等,专业机构从交易所获取,个人可以从聚宽、米筐等平台获取。
- 宏观数据:包括国民生产总值(GDP),失业率,利率,国债等。
- 特色数据(奇思妙想):新闻舆情,电商销售数据。
数据处理包括数据预处理,极值处理,中性化处理etc,前两个常见不说,主要是中性化处理。 中性化处理是指将因子值与某些特定的变量(如行业、规模等)进行调整,剔除因子中某些特定的、 unwanted 的风险暴露(如行业、市值),从而提取出因子纯粹的 Alpha(超额收益)能力。
- 例子:假设你发现了一个因子(比如“员工增长率”),你观察到这个因子与股票收益率高度正相关。但是,你可能发现这个因子其实只是因为恰好买了很多“科技股”或“小盘股”,而恰好在这个时间段科技股和小盘股表现很好。此时,这个因子的赚钱能力其实是借用了“科技股”或“小盘股”的风格,而不是它本身的逻辑。
1. 为什么做中性化?
- 剔除风格偏差: 确保你的因子不是因为在特定行业(如白酒)、特定市值(如大盘股)上的过度集中而获利。
- 避免多重共线性: 在多因子模型中,如果你不进行中性化,你的因子可能会与模型中已有的“行业因子”或“市值因子”高度重叠,导致模型失效。
- 真正的 Alpha: 我们追求的是解释力独特的 Alpha,而不是简单的 Beta(跟随大盘或行业涨跌)。
2. 中性化两种(行业,市值) 因子中性化最常用的方法是正交化处理,通常通过截面线性回归来实现。 在实际工程中,我们是按每一个截面(每一天)独立进行操作的。
第一步:数据准备
对于某一天$t$ ,获取全市场股票的原始因子值
第二步:数据清洗(非常重要)
- 去极值: 原始因子
$Y$ 和市值$X$ 通常需要先去极值(如3倍标准差法或MAD法),防止极端值扭曲回归方程。 - 标准化: 通常会将
$Y$ 和$X$ 进行标准化,使其均值为0,方差为1。这有助于回归的收敛。 - 缺失值处理: 如果某股票缺失因子值或行业数据,需将其剔除或填充(剔除更常见)。
第三步:执行线性回归
以 X (行业哑变量 + 对数市值)为自变量,Y (原始因子)为因变量,进行 OLS(最小二乘法)回归。
第四步:提取残差
计算
第五步:再次标准化(可选) 提取出的残差 ϵ 虽然已经中性,但其量纲可能与原因子不同,且均值为0,但方差不一定为1。为了后续合成因子,通常会再进行一次 Z-Score 标准化。
- 必须要剔除截距项吗?
- 在回归模型中,我们保留了 const(截距)。这意味着我们回归的是
$Y=β_0+⋯+ϵ$ 。 如果提取残差 ϵ ,那么 ϵ 的均值必然是 0。这意味着中性化后的因子在全市场是“多空平衡”的(做多和做空的金额大致相等)。如果你希望因子保留净多头或净空头暴露,你需要对残差处理后的均值进行调整。
- 为什么要用对数市值?
- 市值的分布通常是长尾分布(右偏),直接使用市值会导致大市值股票在回归中权重过大,掩盖小市值股票的影响。取对数$ ln(Cap)$ 后,市值分布更接近正态分布,回归效果更稳健。
- 加权回归 (WLS)
- 上面的例子是普通最小二乘法 (OLS),这意味着每只股票对回归方程的贡献是一样的。但在实际中,你可能希望流动性差的股票影响小一点。 此时可以使用 加权最小二乘法 (WLS),权重通常设为
$ sqrt(市值)$ 或$sqrt(流动性)$ 。这样可以保证中性化结果更多由大市值、高流动性的股票决定,结果更稳健。
- 中性化会破坏因子逻辑吗?
- 可能会。如果因子逻辑本身就是“买入小盘科技股”,那么强行进行“市值和行业中性化”后,该因子可能就完全失效了(变成了 0)。因此,中性化是一个工具,不是必须遵守的教条。中性化通常用于挖掘纯选股能力,而非风格博弈能力。