1. 课程导入
欢迎进入《搜索指数异常与投资者关注因子实战》。在量化投研的日常工作中,我们经常遇到一个尴尬场景:某只股票突然放量上涨,事后复盘才发现,几天前它的搜索热度已经异常飙升。问题在于,搜索指数本身是高频、噪声大、口径多变的原始数据,直接拿来做因子往往效果不稳定。本课程要解决的,正是如何把"搜索指数异常"这一现象,转化为可回测、可解释、可交易的投资者关注因子。
一、学习目标
完成本课程后,你应当具备三项可交付能力:
- 数据能力:能够独立获取、清洗并对齐百度指数、微信指数、Google Trends 等多源搜索数据,处理缺失、断点与口径漂移。
- 建模能力:掌握搜索指数异常的识别方法,包括同比/环比、滚动分位、STL 分解残差、稳健 Z-Score 等,并构建投资者关注因子。
- 验证能力:能够对因子做 IC、分层回测、行业中性化和事件窗口检验,识别过拟合与数据窥探风险。
二、核心概念
在动手之前,需要先厘清四个基础概念,它们贯穿全部30章。
| 概念 | 含义 | 在因子中的角色 |
|---|---|---|
| 搜索指数 | 以关键词检索量加权合成的热度指标,常见为日频或周频 | 原始输入信号 |
| 搜索异常 | 实际值相对其历史常态的偏离程度 | 增量信息提取 |
| 投资者关注 | 散户与机构对标的的注意力强度 | 经济学解释层 |
| 关注因子 | 将关注度标准化后用于横截面选股的数值 | 可交易输出 |
需要特别强调:搜索指数不等于关注度,关注度也不等于买入意愿。搜索行为可能源于好奇、恐慌或套牢后的焦虑。因此,因子构建的关键在于区分"关注的方向"与"关注的水平",这也是后续章节反复打磨的重点。
三、整体框架与实战路线图
本课程按"数据—异常—因子—验证—组合"五层递进组织,下图展示了从原始搜索信号到可交易因子的完整链路与关键判断点。
路线图中有三个容易被忽视的转折点。第一,数据层到异常层的转换:不是所有搜索上升都叫异常,必须扣除季节性、趋势性和节假日效应。第二,异常层到因子层的转换:异常值需要做横截面标准化,否则会被大盘整体热度带偏。第三,验证层到组合层的转换:单因子有效不代表组合有效,需考虑与动量、换手率等因子的相关性。
四、典型场景与案例
设想一个真实场景:某消费股在财报发布前一周,百度指数搜索量从日均 3000 升至 12000。若直接以"搜索量高"作为买入信号,可能买在情绪顶点。但若计算其滚动 60 日分位数,发现当前处于 98% 分位,且同期行业平均仅 55% 分位,则说明这是个股特异性的关注异常,而非行业普涨。此时结合财报日历,可构建"财报前关注异常"事件因子。
# 搜索异常因子伪代码示例
raw = load_search_index(stock, start, end) # 原始日频搜索量
raw = fill_missing(raw, method="ffill", limit=3) # 短缺口前向填充
seasonal = stl_decompose(raw, period=7).seasonal # 剥离周内效应
resid = raw - seasonal - trend # 残差项
zscore = rolling_zscore(resid, window=60) # 滚动稳健Z值
factor = cross_section_rank(zscore) # 横截面排序
五、常见误区与复盘要点
- 把搜索量当关注度绝对值:不同股票的搜索基数差异巨大,必须做横截面标准化或行业内比较。
- 忽略搜索口径变化:指数平台可能调整统计规则,导致历史序列不可比,需做断点检测。
- 用未来数据做异常判断:滚动窗口必须严格使用 t 时刻及之前的数据,避免前视偏差。
- 只做全样本回测:必须划分样本内/样本外,并做滚动窗口验证,防止过拟合。
- 忽视交易成本与容量:高关注股票往往流动性好但拥挤,需评估换手率与冲击成本。
本章建立了课程的整体认知地图:搜索指数是原料,异常识别是提炼,投资者关注因子是产品,验证与组合是质检与出厂。接下来,我们将从数据获取与清洗开始,一步步把这张路线图变成可运行的代码与可复现的回测。