Skip to content

8.1 因子是什么:把感觉变成可记录特征

课前导读

本节目标

学完能解决什么困惑:把"这只股票看起来不错"拆成可记录、可比较、可复盘的特征,理解因子在选股中的位置。

难度:入门

用时:约 35 分钟

上一章你已经学过 Python、pandas、缺失值、异常值、rolling 和 shift。

这些工具像一套文具:铅笔、尺子、表格、计算器都准备好了。

从本章开始,我们要回答一个更接近投资的问题:到底该把哪些东西写进表格里?

如果只是把价格、成交量、净利润机械地放进 DataFrame,表格会很大,却不一定帮你做出更清醒的判断。

所以第 8 章的核心,是把"凭感觉选股"升级为"用可记录特征选股"。

这一节先讲最基础的问题:什么是因子。


知识正文

一、从一句常见的话开始

新手看股票时,经常会说:

"我感觉这家公司不错。"

"这只股票好像很便宜。"

"最近涨得挺强,是不是还会继续?"

"这个行业波动太大,我有点害怕。"

这些话都不是错的。

问题在于,它们太模糊。

模糊的话无法比较,也无法复盘。

今天你说"便宜",明天我说"便宜",我们可能指的完全不是一回事。

量化思维的第一步,不是马上写复杂程序,而是先把这些感觉翻译成可记录的字段。

mermaid
flowchart LR
    A["一句模糊感觉"] --> B["拆成可观察现象"]
    B --> C["选择可记录字段"]
    C --> D["形成股票标签"]
    D --> E["比较与复盘"]

这张图里的"股票标签",就是理解因子的入口。

二、类比一:给股票贴标签

想象你去整理一个巨大的书架。

如果每本书都只写着"不错""一般""可能有用",你很难找到自己要的书。

但如果每本书都贴上标签:文学、历史、页数、出版年份、适合初学者、是否有图表,你就能更快筛选。

股票也一样。

A 股有几千只股票。

如果只靠感觉看,一天看十只就会疲劳。

如果给每只股票贴上可记录标签,比如估值、盈利质量、近期涨跌、波动大小,比较就会清楚很多。

模糊说法可以翻译成的标签标签要回答的问题
看起来便宜市盈率、股息率、PB当前价格相对盈利或资产贵不贵
公司质地不错ROE、毛利率、现金流公司赚钱是否稳定、是否扎实
最近走势强近 20 日涨跌幅、均线位置市场最近是否持续认可它
我怕它太刺激波动率、振幅、最大回撤价格晃动会不会超出承受范围

这些标签本身还不是结论。

它们只是把"感觉"变成了"可记录的观察"。

关键理解

因子不是神秘公式,而是股票身上的一张张可记录标签。标签越清楚,复盘时越知道自己当初到底看中了什么。

三、类比二:给股票做体检

再换一个类比。

医生不会只看一眼病人就说"你健康"。

医生会看体温、血压、心率、血糖、肝功能等指标。

单个指标不能代表全部健康状况,但它能提示一个角度。

股票的因子也是类似的体检指标。

市盈率像"价格相对赚钱能力的温度计"。

ROE 像"公司用自家本钱赚钱的效率表"。

近 20 日涨跌幅像"近期市场情绪的速度表"。

波动率像"股价路面颠簸程度的提示牌"。

你不会因为一个人体温正常,就断定他一定完全健康。

同样,你也不能因为一个因子好,就直接买入一只股票。

四、正式定义:什么是因子

在本章里,我们把因子理解为:

因子是一个能够解释、区分或帮助预测股票未来收益和风险的可记录特征。

这句话可以拆成四层。

第一,因子是"特征"。

它通常是一列数据,比如 pe、roe、ret_20d、volatility_20d。

第二,因子要"可记录"。

如果你说"老板看起来靠谱",但没有任何可重复记录方式,它还不是合格因子。

如果你改成"过去三年净利润是否连续增长",它就更接近可记录特征。

第三,因子可以"解释"差异。

例如,某些低估值股票长期表现不同,可能与市场对价格和盈利的重新认识有关。

第四,因子只能"帮助预测",不能保证预测。

市场里有政策、情绪、流动性、突发公告和交易制度,任何单个因子都不能给你确定答案。

常见误区

看到"帮助预测"四个字,不要理解成"一定上涨"。因子更像天气预报里的气压、温度和湿度,能提高判断质量,但不能保证明天一定不下雨。

五、因子值:一只股票某一天的标签数值

理解因子时,还要认识一个小概念:因子值。

因子值就是某只股票在某个时点上的具体数值。

比如学习用的虚构表格如下:

股票市盈率 PEROE近 20 日涨跌幅20 日波动率
示例消费公司2818%6%2.1%
示例银行公司611%-2%1.0%
示例科技公司559%15%3.8%
示例周期公司147%-8%4.5%

这张表没有要求你立刻选出哪只最好。

它只是让每只股票都带着四张标签进入比较。

同一天比较多只股票,就是横向排队。

同一只股票跟自己过去比较,就是看它的状态有没有变化。

这两种比较都会在后面的课程中逐步展开。

六、四个最容易上手的因子例子

先从四个你已经见过或容易理解的例子开始。

因子直觉解释新手应该先问的问题
市盈率 PE花多少钱买公司一元盈利便宜是因为被低估,还是因为利润正在变差
ROE公司用股东投入的钱赚利润的效率高 ROE 能否持续,还是只是一年特别高
近 20 日涨跌幅最近约一个月市场是否愿意继续买它是健康趋势,还是短期追涨情绪
波动率股价每天上下晃动的剧烈程度这种颠簸我能不能承受

这里的 PE 在第 3 章已经出现过。

ROE 的中文叫净资产收益率。

你可以先把它理解成:公司用自己的"家底"赚钱的效率。

近 20 日涨跌幅来自第 2 章和第 7 章的价格、收益率与 rolling 思维。

波动率暂时不用急着背公式。

先把它理解成"这只股票平时坐起来有多颠"。

七、A 股语境下的因子观察

A 股市场里,因子的含义一定要放回现实环境。

同样是低市盈率,银行股、电力股、周期股背后的原因可能不一样。

有些股票低估值,是因为市场担心增长慢。

有些股票低估值,是因为行业景气度下行。

有些股票低估值,也可能只是暂时被忽视。

同样是高 ROE,消费龙头、医药企业、资源类公司也要分开理解。

一家公司的 ROE 高,可能来自品牌优势。

也可能来自负债较高。

还可能来自某一年产品价格特别好。

所以,因子从来不是脱离业务的数字游戏。

专业老师会提醒你:先理解数字背后的经济含义。

投资者会提醒你:再好的标签也要考虑价格、风险和自己的承受能力。

量化开发会提醒你:每个标签都必须能在表格中稳定计算、保存和复查。

八、用 pandas 做一个最小因子表

下面的代码不需要外部数据。

它只是演示如何把几个学习样本整理成因子表。

请先看直觉:我们不是让代码替你买股票,而是让代码把标签写整齐。

python
import pandas as pd

df = pd.DataFrame(
    {
        "stock": ["示例消费", "示例银行", "示例科技", "示例周期"],
        "pe": [28, 6, 55, 14],
        "roe": [0.18, 0.11, 0.09, 0.07],
        "ret_20d": [0.06, -0.02, 0.15, -0.08],
        "vol_20d": [0.021, 0.010, 0.038, 0.045],
    }
)

df["pe_label"] = df["pe"].rank(ascending=True)
df["roe_label"] = df["roe"].rank(ascending=False)
df["momentum_label"] = df["ret_20d"].rank(ascending=False)
df["risk_label"] = df["vol_20d"].rank(ascending=True)

print(df)

这段代码里,rank 的意思是排队。

pe 越低,估值标签越靠前。

roe 越高,质量标签越靠前。

ret_20d 越高,近期动量标签越靠前。

vol_20d 越低,波动风险标签越靠前。

注意,"靠前"不等于"必须买"。

它只说明这只股票在某个维度上更符合你设置的观察规则。

九、因子与买入按钮之间隔着三道门

很多新手第一次接触因子,会误以为找到一个好因子就找到了财富密码。

这很危险。

因子和买入之间至少隔着三道门。

第一道门是数据门。

数据是否准确、是否有缺失、是否在当时已经可见。

第二道门是解释门。

因子为什么可能有效,背后是不是有商业逻辑或交易行为逻辑。

第三道门是执行门。

真正买卖时有涨跌停、流动性、成本、滑点和情绪压力。

mermaid
flowchart TD
    A["因子值看起来不错"] --> B["检查数据是否可靠"]
    B --> C["解释为什么可能有效"]
    C --> D["观察风险与交易边界"]
    D --> E["进入候选池或继续观望"]

风险提示

不要把任何因子当作"自动买入按钮"。因子只能帮助你提出更清楚的问题,不能替你承担亏损。

十、本节可执行练习:把一句感觉翻译成因子

现在请拿出你的交易日志或学习笔记。

写下一句你过去可能会说的话。

例如:"我觉得这只股票最近挺强。"

然后按下面四步翻译。

第一步,找出这句话里真正想表达的观察。

这里的观察是"最近市场愿意持续买它"。

第二步,把观察改成字段。

可以使用近 20 日涨跌幅、MA20 与 MA60 的位置、成交量变化。

第三步,写清楚计算口径。

例如近 20 日涨跌幅等于最近收盘价相对 20 个交易日前收盘价的变化比例。

第四步,写清楚限制。

最近强不代表未来一定强,也可能是短期过热。

完成这四步,你就已经把一句感觉变成了一个可复盘的因子雏形。


交互实验室

因子标签卡:把三只股票放到同一张桌子上

本节不新增组件。

你可以直接复制下面的表格到笔记、表格软件或 Notebook 的 Markdown 单元中填写。

请选择三只你熟悉但不会立刻交易的 A 股观察对象。

如果没有真实数据,就先用"示例 A、示例 B、示例 C"练习字段设计。

项目股票 1股票 2股票 3
我原先的感觉
可以翻译成的因子
因子值从哪里来
因子方向越高越好或越低越好越高越好或越低越好越高越好或越低越好
可能的误读
暂时结论进入观察或继续学习进入观察或继续学习进入观察或继续学习

三个练习问题

  1. 如果你说"这家公司很便宜",你至少可以用哪两个字段来记录?

  2. 如果一只股票近 20 日涨幅很高,你需要写下哪些风险提醒?

  3. 如果 PE 很低但公司连续亏损,你会把它归为"便宜"还是"需要进一步检查"?

参考思路

第一个问题可以想到 PE、PB、股息率等。

第二个问题要提醒自己,近期涨幅高可能是趋势,也可能是追涨后的拥挤。

第三个问题应优先选择"需要进一步检查"。

因为低估值标签必须和盈利质量、行业状态、风险事件一起看。


核心复盘

知识清单

  • [ ] 因子是能解释、区分或帮助预测收益和风险的可记录特征
  • [ ] 因子像股票标签,也像体检指标,单个指标不能代表全部
  • [ ] 市盈率、ROE、近 20 日涨跌幅、波动率都可以作为入门因子例子
  • [ ] 因子值只是某只股票在某个时点的标签数值,不是买入命令
  • [ ] 用 pandas 做因子表的目的,是把观察写清楚,而不是让代码替你冲动下单

金句总结

"因子不是答案,而是把感觉变成证据的第一步。"

本文档仅供学习交流用途,不构成任何投资建议。股市有风险,入市需谨慎。