8.1 因子是什么:把感觉变成可记录特征
课前导读
本节目标
学完能解决什么困惑:把"这只股票看起来不错"拆成可记录、可比较、可复盘的特征,理解因子在选股中的位置。
难度:入门
用时:约 35 分钟
上一章你已经学过 Python、pandas、缺失值、异常值、rolling 和 shift。
这些工具像一套文具:铅笔、尺子、表格、计算器都准备好了。
从本章开始,我们要回答一个更接近投资的问题:到底该把哪些东西写进表格里?
如果只是把价格、成交量、净利润机械地放进 DataFrame,表格会很大,却不一定帮你做出更清醒的判断。
所以第 8 章的核心,是把"凭感觉选股"升级为"用可记录特征选股"。
这一节先讲最基础的问题:什么是因子。
知识正文
一、从一句常见的话开始
新手看股票时,经常会说:
"我感觉这家公司不错。"
"这只股票好像很便宜。"
"最近涨得挺强,是不是还会继续?"
"这个行业波动太大,我有点害怕。"
这些话都不是错的。
问题在于,它们太模糊。
模糊的话无法比较,也无法复盘。
今天你说"便宜",明天我说"便宜",我们可能指的完全不是一回事。
量化思维的第一步,不是马上写复杂程序,而是先把这些感觉翻译成可记录的字段。
flowchart LR
A["一句模糊感觉"] --> B["拆成可观察现象"]
B --> C["选择可记录字段"]
C --> D["形成股票标签"]
D --> E["比较与复盘"]这张图里的"股票标签",就是理解因子的入口。
二、类比一:给股票贴标签
想象你去整理一个巨大的书架。
如果每本书都只写着"不错""一般""可能有用",你很难找到自己要的书。
但如果每本书都贴上标签:文学、历史、页数、出版年份、适合初学者、是否有图表,你就能更快筛选。
股票也一样。
A 股有几千只股票。
如果只靠感觉看,一天看十只就会疲劳。
如果给每只股票贴上可记录标签,比如估值、盈利质量、近期涨跌、波动大小,比较就会清楚很多。
| 模糊说法 | 可以翻译成的标签 | 标签要回答的问题 |
|---|---|---|
| 看起来便宜 | 市盈率、股息率、PB | 当前价格相对盈利或资产贵不贵 |
| 公司质地不错 | ROE、毛利率、现金流 | 公司赚钱是否稳定、是否扎实 |
| 最近走势强 | 近 20 日涨跌幅、均线位置 | 市场最近是否持续认可它 |
| 我怕它太刺激 | 波动率、振幅、最大回撤 | 价格晃动会不会超出承受范围 |
这些标签本身还不是结论。
它们只是把"感觉"变成了"可记录的观察"。
关键理解
因子不是神秘公式,而是股票身上的一张张可记录标签。标签越清楚,复盘时越知道自己当初到底看中了什么。
三、类比二:给股票做体检
再换一个类比。
医生不会只看一眼病人就说"你健康"。
医生会看体温、血压、心率、血糖、肝功能等指标。
单个指标不能代表全部健康状况,但它能提示一个角度。
股票的因子也是类似的体检指标。
市盈率像"价格相对赚钱能力的温度计"。
ROE 像"公司用自家本钱赚钱的效率表"。
近 20 日涨跌幅像"近期市场情绪的速度表"。
波动率像"股价路面颠簸程度的提示牌"。
你不会因为一个人体温正常,就断定他一定完全健康。
同样,你也不能因为一个因子好,就直接买入一只股票。
四、正式定义:什么是因子
在本章里,我们把因子理解为:
因子是一个能够解释、区分或帮助预测股票未来收益和风险的可记录特征。
这句话可以拆成四层。
第一,因子是"特征"。
它通常是一列数据,比如 pe、roe、ret_20d、volatility_20d。
第二,因子要"可记录"。
如果你说"老板看起来靠谱",但没有任何可重复记录方式,它还不是合格因子。
如果你改成"过去三年净利润是否连续增长",它就更接近可记录特征。
第三,因子可以"解释"差异。
例如,某些低估值股票长期表现不同,可能与市场对价格和盈利的重新认识有关。
第四,因子只能"帮助预测",不能保证预测。
市场里有政策、情绪、流动性、突发公告和交易制度,任何单个因子都不能给你确定答案。
常见误区
看到"帮助预测"四个字,不要理解成"一定上涨"。因子更像天气预报里的气压、温度和湿度,能提高判断质量,但不能保证明天一定不下雨。
五、因子值:一只股票某一天的标签数值
理解因子时,还要认识一个小概念:因子值。
因子值就是某只股票在某个时点上的具体数值。
比如学习用的虚构表格如下:
| 股票 | 市盈率 PE | ROE | 近 20 日涨跌幅 | 20 日波动率 |
|---|---|---|---|---|
| 示例消费公司 | 28 | 18% | 6% | 2.1% |
| 示例银行公司 | 6 | 11% | -2% | 1.0% |
| 示例科技公司 | 55 | 9% | 15% | 3.8% |
| 示例周期公司 | 14 | 7% | -8% | 4.5% |
这张表没有要求你立刻选出哪只最好。
它只是让每只股票都带着四张标签进入比较。
同一天比较多只股票,就是横向排队。
同一只股票跟自己过去比较,就是看它的状态有没有变化。
这两种比较都会在后面的课程中逐步展开。
六、四个最容易上手的因子例子
先从四个你已经见过或容易理解的例子开始。
| 因子 | 直觉解释 | 新手应该先问的问题 |
|---|---|---|
| 市盈率 PE | 花多少钱买公司一元盈利 | 便宜是因为被低估,还是因为利润正在变差 |
| ROE | 公司用股东投入的钱赚利润的效率 | 高 ROE 能否持续,还是只是一年特别高 |
| 近 20 日涨跌幅 | 最近约一个月市场是否愿意继续买它 | 是健康趋势,还是短期追涨情绪 |
| 波动率 | 股价每天上下晃动的剧烈程度 | 这种颠簸我能不能承受 |
这里的 PE 在第 3 章已经出现过。
ROE 的中文叫净资产收益率。
你可以先把它理解成:公司用自己的"家底"赚钱的效率。
近 20 日涨跌幅来自第 2 章和第 7 章的价格、收益率与 rolling 思维。
波动率暂时不用急着背公式。
先把它理解成"这只股票平时坐起来有多颠"。
七、A 股语境下的因子观察
A 股市场里,因子的含义一定要放回现实环境。
同样是低市盈率,银行股、电力股、周期股背后的原因可能不一样。
有些股票低估值,是因为市场担心增长慢。
有些股票低估值,是因为行业景气度下行。
有些股票低估值,也可能只是暂时被忽视。
同样是高 ROE,消费龙头、医药企业、资源类公司也要分开理解。
一家公司的 ROE 高,可能来自品牌优势。
也可能来自负债较高。
还可能来自某一年产品价格特别好。
所以,因子从来不是脱离业务的数字游戏。
专业老师会提醒你:先理解数字背后的经济含义。
投资者会提醒你:再好的标签也要考虑价格、风险和自己的承受能力。
量化开发会提醒你:每个标签都必须能在表格中稳定计算、保存和复查。
八、用 pandas 做一个最小因子表
下面的代码不需要外部数据。
它只是演示如何把几个学习样本整理成因子表。
请先看直觉:我们不是让代码替你买股票,而是让代码把标签写整齐。
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 越低,波动风险标签越靠前。
注意,"靠前"不等于"必须买"。
它只说明这只股票在某个维度上更符合你设置的观察规则。
九、因子与买入按钮之间隔着三道门
很多新手第一次接触因子,会误以为找到一个好因子就找到了财富密码。
这很危险。
因子和买入之间至少隔着三道门。
第一道门是数据门。
数据是否准确、是否有缺失、是否在当时已经可见。
第二道门是解释门。
因子为什么可能有效,背后是不是有商业逻辑或交易行为逻辑。
第三道门是执行门。
真正买卖时有涨跌停、流动性、成本、滑点和情绪压力。
flowchart TD
A["因子值看起来不错"] --> B["检查数据是否可靠"]
B --> C["解释为什么可能有效"]
C --> D["观察风险与交易边界"]
D --> E["进入候选池或继续观望"]风险提示
不要把任何因子当作"自动买入按钮"。因子只能帮助你提出更清楚的问题,不能替你承担亏损。
十、本节可执行练习:把一句感觉翻译成因子
现在请拿出你的交易日志或学习笔记。
写下一句你过去可能会说的话。
例如:"我觉得这只股票最近挺强。"
然后按下面四步翻译。
第一步,找出这句话里真正想表达的观察。
这里的观察是"最近市场愿意持续买它"。
第二步,把观察改成字段。
可以使用近 20 日涨跌幅、MA20 与 MA60 的位置、成交量变化。
第三步,写清楚计算口径。
例如近 20 日涨跌幅等于最近收盘价相对 20 个交易日前收盘价的变化比例。
第四步,写清楚限制。
最近强不代表未来一定强,也可能是短期过热。
完成这四步,你就已经把一句感觉变成了一个可复盘的因子雏形。
交互实验室
因子标签卡:把三只股票放到同一张桌子上
本节不新增组件。
你可以直接复制下面的表格到笔记、表格软件或 Notebook 的 Markdown 单元中填写。
请选择三只你熟悉但不会立刻交易的 A 股观察对象。
如果没有真实数据,就先用"示例 A、示例 B、示例 C"练习字段设计。
| 项目 | 股票 1 | 股票 2 | 股票 3 |
|---|---|---|---|
| 我原先的感觉 | |||
| 可以翻译成的因子 | |||
| 因子值从哪里来 | |||
| 因子方向 | 越高越好或越低越好 | 越高越好或越低越好 | 越高越好或越低越好 |
| 可能的误读 | |||
| 暂时结论 | 进入观察或继续学习 | 进入观察或继续学习 | 进入观察或继续学习 |
三个练习问题
如果你说"这家公司很便宜",你至少可以用哪两个字段来记录?
如果一只股票近 20 日涨幅很高,你需要写下哪些风险提醒?
如果 PE 很低但公司连续亏损,你会把它归为"便宜"还是"需要进一步检查"?
参考思路
第一个问题可以想到 PE、PB、股息率等。
第二个问题要提醒自己,近期涨幅高可能是趋势,也可能是追涨后的拥挤。
第三个问题应优先选择"需要进一步检查"。
因为低估值标签必须和盈利质量、行业状态、风险事件一起看。
核心复盘
知识清单:
- [ ] 因子是能解释、区分或帮助预测收益和风险的可记录特征
- [ ] 因子像股票标签,也像体检指标,单个指标不能代表全部
- [ ] 市盈率、ROE、近 20 日涨跌幅、波动率都可以作为入门因子例子
- [ ] 因子值只是某只股票在某个时点的标签数值,不是买入命令
- [ ] 用 pandas 做因子表的目的,是把观察写清楚,而不是让代码替你冲动下单
金句总结
"因子不是答案,而是把感觉变成证据的第一步。"