4. 搜索指数异常定义
在构建投资者关注因子时,最核心的问题不是“搜索量有多少”,而是“当前搜索量相对于它应有的水平,是否出现了异常”。搜索指数本身具有强烈的季节性、趋势性和事件驱动特征:春节前后、财报季、政策发布窗口都会带来规律性波动,而突发事件、舆情危机、产品发布则会带来脉冲式跳升。因此,异常定义必须同时回答三个问题:基准是什么、偏离多大算异常、异常持续多久有意义。本节围绕异常识别标准、同比环比、z-score 与分位数四类方法展开,并给出可落地的判定流程。
一、核心原理:异常是“相对基准的偏离”,不是绝对高低
搜索指数的原始值没有可比性。一个日均 5000 的关键词和一个日均 500 的关键词,同样上涨 200,含义完全不同。因此异常识别的第一步是构造基准序列,第二步是度量偏离程度,第三步是设定阈值并做持续性过滤。
基准的构造方式决定了异常的经济含义。同比基准回答“今年比去年同一时期是否异常”,适合剔除年度季节性和长期趋势;环比基准回答“比上一个周期是否异常”,对短期变化更敏感,但容易受节假日错位干扰;滚动均值基准回答“相对于最近一段时间的常态是否异常”,适合捕捉趋势变化但会滞后;分位数基准回答“当前值在历史分布中的位置”,对厚尾和极端值更稳健。
二、四类方法:同比环比、z-score、分位数与组合判定
同比与环比是最直观的方法。同比计算为当前值除以上年同期值减一,环比计算为当前值除以上一周期值减一。它们的优点是解释性强、业务方容易接受;缺点是当基期本身异常时会产生误导。例如去年同月因突发事件搜索量暴涨,今年同比就会显示“大幅下降”,但这并不代表关注度真的萎缩。
z-score 方法将当前值减去滚动均值再除以滚动标准差,得到标准化的偏离程度。通常以 |z| > 2 或 |z| > 3 作为异常阈值。z-score 的优点是量纲统一、便于跨关键词比较;缺点是对极端值敏感,且要求序列近似正态。搜索指数往往右偏厚尾,因此实践中常配合对数变换或使用稳健 z-score(基于中位数和 MAD)。
分位数方法不假设分布形态,直接看当前值在历史窗口中的分位位置。例如超过过去 250 个交易日搜索指数的 95% 分位,即判定为高异常;低于 5% 分位判定为低异常。分位数方法对厚尾和离群点更稳健,但需要足够长的历史窗口,且分位数本身会随窗口滚动而变化。
实际工程中,单一方法容易误报。推荐采用组合判定:先用同比或环比做粗筛,再用 z-score 或分位数做精筛,最后用持续性规则过滤单日噪声。例如要求连续 2 个交易日 z-score 超过阈值,或 5 日内至少 3 日超过分位阈值,才认定为有效异常。
三、方法流程:从原始指数到异常标记
下面给出一个可复用的处理流程,适用于日频搜索指数。核心思路是:先做平稳化与基准构造,再计算偏离度,最后做阈值判定与持续性过滤。
输入:关键词日频搜索指数 series,窗口 W=250,阈值 z_th=2.0,分位 q=0.95
步骤 1 缺失值与停牌日处理:线性插值,剔除无搜索数据的日期
步骤 2 平稳化:对 series 取对数 log_series = ln(1 + series)
步骤 3 基准构造:
滚动均值 mean_t = rolling_mean(log_series, W)
滚动标准差 std_t = rolling_std(log_series, W)
滚动中位数 median_t = rolling_median(log_series, W)
MAD_t = rolling_median(|log_series - median_t|, W)
步骤 4 偏离度计算:
z_t = (log_series_t - mean_t) / std_t
robust_z_t = 0.6745 * (log_series_t - median_t) / MAD_t
pct_t = rolling_percentile_rank(log_series_t, W)
步骤 5 异常判定:
flag_z = 1 if |z_t| > z_th else 0
flag_pct = 1 if pct_t > q or pct_t < 1-q else 0
flag = flag_z or flag_pct
步骤 6 持续性过滤:
若连续 2 日 flag=1,或 5 日内 flag 累计 ≥ 3,则最终标记 abnormal=1
步骤 7 输出:abnormal、z_t、pct_t、持续天数 duration
四、案例与场景:财报季搜索异常的识别
假设某上市公司关键词“XX 股份”在财报发布前一周搜索指数开始抬升。若只看绝对值,可能只是正常财报季预热;但用组合方法可以区分“季节性抬升”与“真实异常关注”。
| 日期 | 搜索指数 | 同比变化 | z-score | 分位位置 | 判定 |
|---|---|---|---|---|---|
| T-5 | 1200 | +8% | 0.6 | 72% | 正常 |
| T-4 | 1350 | +12% | 1.1 | 80% | 正常 |
| T-3 | 1800 | +35% | 2.3 | 93% | 关注 |
| T-2 | 2600 | +78% | 3.6 | 98% | 异常 |
| T-1 | 3100 | +95% | 4.2 | 99% | 异常 |
| T | 2900 | +70% | 3.8 | 99% | 异常 |
| T+1 | 1600 | +20% | 1.4 | 85% | 回落 |
从表中可以看到,T-3 日 z-score 已超过 2,分位进入 93%,但同比仅 35%,属于“关注”级别;T-2 日起 z-score 超过 3.5、分位达到 98%,且连续 3 日满足,判定为有效异常。这种分层判定可以避免把正常财报预热误判为强异常,也能在真正脉冲出现时及时捕捉。
五、复盘与优化:让异常定义服务于因子目标
异常定义不是一次性的技术选择,而是需要与因子目标反复对齐的过程。如果因子用于捕捉短期事件冲击,应提高敏感度,接受一定误报;如果用于构建中长期关注度趋势,应提高稳健性,接受一定滞后。建议在回测中同时观察三类指标:异常命中率(真实事件被标记的比例)、误报率(无事件却被标记的比例)、异常持续天数分布。通过调整窗口、阈值和持续性规则,找到与策略收益最匹配的参数组合。
最后需要强调,搜索指数异常只是投资者关注的“代理变量”,它本身不等于交易信号。异常定义的质量决定了后续因子的信噪比。把基准选对、把偏离度量准、把持续性过滤做好,才能让搜索指数异常真正成为可解释、可复现、可迭代的投资者关注因子输入。