z-score
📌 什么是 Z-Score?
Z-Score(标准分数)表示一个值距离“整体平均水平”的偏离程度,它的计算公式是:
$$
Z = \frac{X - \mu}{\sigma}
$$
其中:
- $X$:某个样本值(例如某只股票的 PE 值);
- $\mu$:该样本所属总体的均值(比如所有股票的平均 PE);
- $\sigma$:该总体的标准差。
🎯 Z-Score 的核心作用:让不同指标变得“可比”
✅ 1. 消除量纲差异
不同因子(比如 PE、PB、ROE)数值差异巨大,不能直接相加:
股票 | PE | PB | 相加 | 正确吗? |
---|---|---|---|---|
A | 8 | 1.2 | 9.2 | ❌ 不合适 |
B | 20 | 2.0 | 22.0 | ❌ 不公平 |
用 Z-Score 后,它们都被转化为标准单位,就能公平比较并加权组合。
✅ 2. 衡量相对位置
Z-Score 告诉你一个值相对于总体平均水平的偏离程度和方向:
- 正 Z 分数:高于平均(比如 PE 很高,可能高估);
- 负 Z 分数:低于平均(比如 PB 很低,可能低估);
- 越远离 0,代表越“极端”。
在选股中,我们喜欢 PE 和 PB 的 Z-Score 越小越好,说明估值远低于平均水平。
✅ 3. 可以直接组合多个因子
标准化后的 Z-Score 都是“无量纲”的,可以直接组合,不会因指标数量级不同而失衡。
比如:
$$
\text{综合打分} = -Z_{\text{PE}} - Z_{\text{PB}} + Z_{\text{ROE}}
$$
这在构建量化策略中非常重要!
✅ 4. 对极端值更敏感
Z-Score 会放大与平均值偏离很大的数据点,更容易发现“便宜得不正常”的股票,适合选低估值、反转类策略。
🚫 不使用 Z-Score 会有什么问题?
- 直接用原值或排名合并不同指标时,可能因量纲不一致、分布不同,造成失真;
- 排名虽然能规避极值问题,但失去了数值“幅度”的信息。
📌 总结一句话:
Z-Score 就像是“估值的热力图”,它能告诉你这只股票的指标是在“正常区域”还是“极端便宜/昂贵”区域,从而帮助你做出更客观的选股判断。
Z-Score 相比你用的“排名法”,有哪些优点?
⚖️ 背景对比
你目前的策略是:
对 PE 和 PB 分别排序(从低到高),然后将两个排名数值相加,排名靠前的认为是低估值。
这是“排名加总法”。
Z-Score 是将每个值标准化后再加权,变成“标准化打分法”。
✅ Z-Score 相比排名法的 5 个核心优点
1. 保留了“强弱幅度”
👉 Z-Score 不仅知道谁“排第一”,还知道“第一比第二强多少”。
举个例子:
股票 | PE | 排名法分数 | Z-Score(-Z_PE) |
---|---|---|---|
A | 8 | 排名 1 | -1.8(极度低估) |
B | 9 | 排名 2 | -1.0(中度低估) |
C | 10 | 排名 3 | -0.2(轻微低估) |
你的策略里 A、B、C 只差 1 名,但 Z-Score 告诉你 A 明显比 B 更低估。
📌 Z-Score 更细腻、更有“强度”感。
2. 适合因子组合和加权
Z-Score 是无量纲的,数值可以直接线性加权:
score = -Z_PE - Z_PB + 0.5 * Z_ROE
而你用的排名法无法合理加权——因为排名是“顺序指标”,不是“幅度指标”,不能表达权重意义。
📌 Z-Score 更适合构建多因子模型,组合多个维度。
3. 更适合统计分析和回测建模
Z-Score 是连续变量,可以用于:
- 线性回归
- IC(信息系数)分析
- 机器学习模型(如XGBoost)
- 构建 alpha 因子
而排名是离散的序号,不适合这些建模技术。
📌 Z-Score 更专业,适合深入量化策略开发。
4. 灵敏度更高
Z-Score 对估值极低或极高的股票非常敏感,有利于挖掘出“特别便宜”的标的。
而排名法会弱化极端值的影响,例如:
- 最低 PE 股票和第二低 PE 股票可能差很多,但排名只差 1 位,无法体现它“便宜得不正常”。
📌 Z-Score 更能挖出低估的“深度价值股”。
5. 更容易标准化到行业、板块
Z-Score 可以在各行业内部做归一化,然后横向比较各行业估值最低的股票。
排名法只能全市场统一排序,不容易行业中性化处理。
📌 Z-Score 更灵活,适用于细分市场策略。
📌 总结:Z-Score 比排名法更强在哪?
优点 | 排名法 | Z-Score |
---|---|---|
是否考虑幅度 | ❌ 只看顺序 | ✅ 看相对强度 |
是否适合加权 | ❌ 不适合 | ✅ 完美 |
是否适合建模 | ❌ 不适合 | ✅ 非常适合 |
是否对极端值敏感 | ❌ 不敏感 | ✅ 很敏感 |
是否适合行业中性处理 | ❌ 不方便 | ✅ 很好处理 |
🤔 排名法有优势吗?
当然有:
- 简单、稳健;
- 对异常值鲁棒性强;
- 适合在数据质量低、因子少的场景中快速筛选。
所以:如果你追求“快速、保守、易实现”,排名法可以用;但要做更专业、细腻的量化模型,Z-Score 是更优解。
是否需要我用你的数据帮你演示 Z-Score 和排名法的效果对比?你可以上传一组股票的 PE 和 PB 数据表(CSV 或 Excel)。
策略优化
太好了!你已经迈出了专业量化选股的重要一步:使用 Z-Score 策略来筛选低估股票。接下来我们可以对策略进一步优化,从数据处理、因子增强、权重设计和选股逻辑几个方面入手。
✅ 一、基本框架回顾:Z-Score 选股
目前你的基本策略是:
- 收集股票的 PE 和 PB;
- 对它们分别计算 Z-Score;
- 组合为综合得分,比如:
$$
\text{score} = -Z_{\text{PE}} - Z_{\text{PB}}
$$
- 按得分从高到低排序,选前 N 名。
这个策略已经不错,下面我们来逐步优化它。
🚀 二、策略优化建议
✅ 1. 加入更多估值相关因子(增强维度)
你当前只有 PE 和 PB,建议增加一些与价值相关但不重复的因子,例如:
因子 | 解释 | 建议方向 |
---|---|---|
ROE | 净资产收益率,盈利能力 | +Z_ROE |
股息率 | 分红收益率 | +Z_股息率 |
净利润增长率 | 盈利增长预期,过滤“价值陷阱” | +Z_增长 |
营业现金流比率 | 利润质量指标 | +Z_OCF比率 |
然后构建更全面的 Z-Score 组合打分,例如:
$$
\text{score} = -Z_{\text{PE}} - Z_{\text{PB}} + 0.8 \cdot Z_{\text{ROE}} + 0.5 \cdot Z_{\text{股息率}}
$$
❗权重可以手动设定,也可以通过历史回测 IC(信息系数)来确定。
✅ 2. 做行业中性处理(防止选股扎堆)
- 不同行业的 PE、PB 不可比,比如科技股 PE 高很正常,银行股低才合理;
- 建议在行业内部计算 Z-Score,然后横向比较;
做法:
- 对每个行业的 PE、PB 单独计算 Z;
- 然后在行业中选前 20%,再统一评估。
✅ 3. 设置过滤条件(提高策略质量)
设置一些基本的“风控 + 剔除垃圾股”的条件:
# 示例过滤逻辑
if stock.市值 < 20亿:
continue
if stock.近三年净利润为负:
continue
if stock.PE < 0 or stock.PB < 0:
continue
可以进一步过滤掉壳股、问题公司。
✅ 4. 增加评分稳定性(分位数平滑)
Z-Score 对极值敏感,为防止异常波动,你可以使用 winsorize(尾部缩尾)或改用 分位数 Z-Score(Q-Score):
- 0~20% → Z ≈ -1
- 20%~80% → Z ≈ 0
- 80%~100% → Z ≈ 1
这样更稳健。
✅ 5. 设置最终选股逻辑
比如:
- 综合 Z-Score 排名前 30 名;
- 加入行业分布控制:每个行业最多选 3 只;
- 每月调仓一次,避免频繁换股。
🧑💻 示例代码框架(Python)
import pandas as pd
from scipy.stats import zscore
# 假设 df 包含:PE, PB, ROE, DividendYield 等列
df = pd.read_csv("stock_data.csv")
# 去极值、空值
df = df[df["PE"] > 0]
df = df.dropna(subset=["PE", "PB", "ROE", "DividendYield"])
# 按行业归组计算 Z-Score(示例为不分行业)
for col in ["PE", "PB", "ROE", "DividendYield"]:
df[f"Z_{col}"] = zscore(df[col])
# 构建打分:估值越低越好 → Z 越负越好
df["score"] = -df["Z_PE"] - df["Z_PB"] + 0.8 * df["Z_ROE"] + 0.5 * df["Z_DividendYield"]
# 排序选股
selected = df.sort_values(by="score", ascending=False).head(30)
✅ 总结:你的 Z-Score 策略可以这样升级
优化点 | 作用 |
---|---|
增加盈利/质量因子 | 降低“价值陷阱” |
行业中性处理 | 避免估值扎堆某些行业 |
加权组合 Z-Score | 反映每个因子重要性 |
设置基本过滤条件 | 提升选股质量 |
使用分位或缩尾 Z | 降低极端值干扰 |