04

什么驱动股票收益?

核心问题同一个月里,有些股票总比别的好一点,这点优势是从哪里来的?

视频 约 9 分钟图解 11 张

第二单元 · 第 1 / 3 节040506

视频

待发布

预计 2026-10-11 17:30(北京时间)发布,以实际公开时间为准。
视频发布后会嵌入在这里,并加入 Bilibili 合集“量化与机器学习入门”。 预计时长约 9 分钟。

学习目标

  1. 理解因子就是用对每只股票的打分,去衡量一句关于市场的直觉,并统一成分数越高越好、每个月放到同一把尺子上。
  2. 说出因子优势的两类常见解释:承担风险的报酬,或者别的投资者的习惯;知道两者对“能不能持续”的含义不同。
  3. 看到每个因子都有难熬的年份,理解解释为什么决定了你能不能拿得住。

图解讲义

从一句说法,到一列数字
01因子就是用表里的一列数字,衡量一句市场直觉:强不强看过去一年的涨幅(动量),便宜不便宜看账面市值比,稳不稳看波动率。
统一方向,放到同一把尺子上
02所有因子都调成分数越高越好;每个月先压一压极端值,再减平均、除以标准差,放到同一把尺子上。
优势从哪来:两种解释
03因子的优势常见两种来源:承担风险的报酬(要熬过难受的时候),或别人的习惯(知道的人多了可能变小)。
动量:好消息,慢慢消化
04动量的一种解释:好消息出来后,股价只涨上去一部分,剩下的在后面几个月慢慢补上。(示意数据)
价值:便宜,为什么还多赚?
05便宜的股票为什么多赚:风险的说法是处境不好、经济差时先受伤;习惯的说法是坏消息时卖过头。
低波动:像一把雨伞
06低波动在大盘跌的月份优势最明显,涨的月份反而稍微吃亏。像一把雨伞,不太像在承担风险。
规模和质量:没那么简单
07沪深300 里,大公司反而略好;ROE 高的公司更赚钱,但价格也贵,IC 几乎为 0。好公司不一定是好股票。
每个因子,都有难熬的年份
08把每个月的 IC 加起来:线往上走说明在起作用,走平或往下就是不灵的时候。每个因子都有难熬的年份。
解释会重叠
09因子之间会重叠:低波动和低换手很像,便宜的股票往往也稳;赚钱多的公司往往不便宜。
练习:亲手做一个因子
10让 AI 用模拟数据带你做一个因子:调方向、截尾、标准化,再把动量和低波动合成新因子。
这一节,记住三件事
11因子是用一列数字衡量的一句直觉;优势来自风险的报酬或别人的习惯;每个因子都有难熬的年份。

交互演示合成数据

制作中

因子排序:切换四种因子,看同一批股票的排队顺序

让 AI 带你做模拟数据

把下面的提示词整段复制给任意一个 AI 助手。它会先生成一份模拟的股票月度数据(设定对每一节都一样),再带你把这一节的分析做一遍。数据是模拟的,具体数字会和视频不同,但应该看到同样的规律。

任务(第 04 节):亲手处理因子。
1. 造一列“原始市值” cap = exp(10 + 1.5 × size),画出某个月的分布,比较每个月的平均数和中位数。
2. 对 cap 依次做:取对数、每个月截掉最高和最低各 1%、每个月标准化。检查处理后每个月的平均是不是 0、标准差是不是 1,再算它和 size 的相关系数。
3. 造一列“市净率” pb = exp(−0.5 × val)(越大越贵),算它的平均 IC;把方向调过来(取负号)再算一次。
4. 把 mom 和 lowvol 加起来,组成新因子 combo。比较 mom、lowvol、combo 的平均 IC,再列出最后一个月 combo 最高的 10 只股票。
提示词开头的模拟数据设定
请用 Python(numpy、pandas,需要时用 scikit-learn)带我做一个量化入门练习。先生成一份模拟的股票月度数据,随机种子用 42:

1. 300 只股票,192 个月(月份编号 0–191,相当于 16 年)。
2. 每只股票有一个固定的波动 sigma,从 0.05 到 0.13 均匀抽取;它的 beta = 0.5 + 5 × sigma。
3. 每个月有五个特征:mom(动量)、val(估值,越大越便宜)、size(规模)、lowvol(低波动)、prof(盈利)。
   - mom、val、size、prof:第 0 个月取标准正态;之后每个月,新值 = 0.9 × 上月值 + 0.44 × 标准正态。
   - lowvol = −sigma + 0.02 × 标准正态。
   - 每个月把五个特征各自在 300 只股票之间标准化(减平均、除以标准差)。
4. 每个月抽一个下个月的大盘收益 mkt_next ~ 正态(0.005, 0.05);再给五个特征各抽一个当月系数 = 基础系数 + 0.01 × 标准正态,基础系数依次是 0.004、0.003、0、0.005、0.002。
5. 下个月收益 ret_next = beta × mkt_next + Σ(当月系数 × 特征) + sigma × 标准正态。
6. 整理成一张长表:每行是一只股票的一个月,列为 month、stock、sigma、五个特征、mkt_next、ret_next。打印前几行和总行数。

后面统一的口径:
- IC:每个月,某一列和 ret_next 在 300 只股票之间的 Spearman 秩相关。
- 年化收益:把每月收益连乘,再按 12 / 月数 开方后减 1。
- 等权基准:每个月 300 只股票 ret_next 的平均。
- 第 m 个月这一行的特征在第 m 个月月底已知,标签 ret_next 是第 m+1 个月的收益。训练模型时,在第 s 个月月底打分,训练只用月份 ≤ s−2 的行(中间隔开一个月)。

接下来按我的要求一步一步做。每一步先用一两句话说明在做什么,再给代码和结果。

应该看到

  • 原始市值严重右偏:每个月的平均数大约是中位数的 3 倍。
  • 处理后每个月平均 0、标准差 1;它和 size 的相关系数在 0.99 以上。
  • pb 的平均 IC 是负的,大小和 val 的一样;取负号后变成正的。
  • combo 的平均 IC(大约 0.05–0.07)比 mom 和 lowvol 单独都高。

对不上的时候,把你的结果和这几条一起发给 AI,让它解释是哪一步出了问题。

自测

  1. 这门课里的“因子”指的是什么?

    • A. 一条规则:每个月给每只股票打一个分,用来衡量一个想法(比如“便宜”“稳”)
    • B. 一只表现很好的股票
    • C. 一种交易软件
    • D. 大盘指数
    看答案

    答案 A。因子就是把市场直觉变成可以排队、可以检验的数字。

  2. 为什么每个月都要把因子标准化一次?

    • A. 为了让收益变高
    • B. 让不同因子、不同月份的数字能放在一起比较和相加
    • C. 为了删掉坏股票
    • D. 为了让 IC 变大
    看答案

    答案 B。标准化以后,每个因子每个月都是平均 0、标准差 1,加在一起时谁也不会因为单位大而占便宜。

  3. 市净率越低越便宜。想让因子“越大越好”,应该怎么做?

    • A. 直接用,不用管
    • B. 只保留市净率最高的股票
    • C. 把方向调过来,比如取负号
    • D. 把它乘以 100
    看答案

    答案 C。所有因子统一成“越大越好”,组合和解读时才不会出错。

  4. 低波动因子在大盘下跌的月份优势最明显,上涨的月份反而稍微吃亏。这更像哪种解释?

    • A. 风险的报酬:这类股票在行情差的时候更容易吃亏
    • B. 别人的习惯:很多人偏爱波动大的股票,把它们的价格抬高了
    • C. 它说明大盘下个月会跌
    • D. 它说明低波动以后一定有效
    看答案

    答案 B。如果是风险的报酬,它应该在行情差的时候吃亏,可它恰恰在行情差的时候占便宜。这是一种常见解释,不是定论。

常见坑

  • 把“驱动收益”理解成预测大盘
  • 动量窗口包含最近一个月
  • 只看平均 IC,不看难熬的年份

下一节

怎样判断一个因子真的有用?

05检验一个信号:分组与 IC因子的 IC 只有零点零几,按它的分数去买股票,收益到底能差多少?