2. 搜索指数基础
在构建投资者关注因子之前,必须先回答一个更基础的问题:“关注”到底用什么来度量?搜索指数正是目前最常用的代理变量。它的核心原理并不复杂——当一个人对某家公司、某个行业或某个宏观事件产生兴趣时,最直接的行为之一就是去搜索引擎查询相关信息。搜索引擎把海量查询请求按关键词聚合、去噪、标准化后,就形成了可比较的时间序列,这就是搜索指数。
理解这一点非常关键:搜索指数不是“人数”,而是相对热度。百度指数、谷歌趋势通常以某一基准期或均值为100进行归一化,微信指数则以当日绝对指数值呈现。因此它们适合做趋势对比、拐点识别和横截面排序,而不适合直接解读为“有多少人搜索了”。
一、三大主流数据源对比
目前在国内投资者关注研究中,最常用的三类数据源是百度指数、谷歌趋势和微信指数。它们覆盖的人群、平台属性和获取难度差异明显,选择哪一个取决于研究标的和投资域。
| 数据源 | 覆盖范围 | 指数形式 | 典型获取方式 | 适用场景 |
|---|---|---|---|---|
| 百度指数 | 中国大陆为主 | PC+移动趋势,常以均值100归一 | 官网查询、开放平台接口、第三方数据商 | A股个股、行业、政策关键词 |
| 谷歌趋势 | 全球,中国境内覆盖有限 | 0–100相对热度 | 官网CSV导出、pytrends库 | 港股、中概股、全球宏观主题 |
| 微信指数 | 微信生态内 | 日度绝对指数 | 微信指数小程序、第三方采集 | 消费、社交传播敏感型标的 |
从表中可以看出,百度指数和谷歌趋势都做了归一化处理,跨关键词比较时需要格外小心;微信指数虽然数值更“原始”,但缺乏公开稳定的批量接口,工程化难度最高。
二、获取方式与工程化流程
实际研究中,获取搜索指数通常有三条路径:手工导出、官方接口和第三方数据服务。手工导出适合小样本验证,官方接口适合稳定批量拉取,第三方服务则适合需要长历史、多关键词、已清洗数据的场景。
- 明确关键词体系:个股用“公司简称+股票代码”,行业用“行业名+政策词”,宏观用“事件词+时间窗”。
- 确定时间粒度:日度适合事件研究,周度适合因子构建,月度适合长期趋势。
- 选择获取通道:百度指数开放平台、pytrends、微信指数小程序或合规数据商。
- 数据清洗与对齐:统一日期、处理缺失值、对齐交易日、做标准化。
- 入库与版本管理:保留原始快照,记录抓取时间和参数,便于复现。
以谷歌趋势为例,使用 pytrends 可以快速拉取多关键词的相对热度:
from pytrends.request import TrendReq
pytrends = TrendReq(hl='zh-CN', tz=480)
kw_list = ["贵州茅台", "白酒", "消费复苏"]
pytrends.build_payload(kw_list, timeframe='2023-01-01 2024-12-31', geo='CN')
df = pytrends.interest_over_time()
df.to_csv("google_trends_demo.csv", encoding="utf-8-sig")
百度指数若走开放平台,通常需要申请权限并携带密钥;微信指数则更多依赖小程序查询或合规第三方接口。无论哪种方式,都建议把原始返回值、请求参数、抓取时间三者一起落库,否则后续很难排查数据异常。
三、一个典型场景:个股关注因子的数据准备
假设我们要为某只消费股构建“投资者关注因子”。第一步不是建模,而是把搜索指数整理成可对齐的时间序列。常见做法是:以股票简称为主关键词,以行业词为辅助关键词,分别拉取日度数据,再计算主关键词的标准化值和行业相对强度。
日期,百度指数_个股,百度指数_行业,相对关注强度
2024-01-02,1320,860,1.53
2024-01-03,1450,880,1.65
2024-01-04,1280,870,1.47
2024-01-05,1600,910,1.76
其中“相对关注强度”=个股指数 / 行业指数,用来剥离行业整体热度,突出个股特有的关注变化。这个简单比值,往往比原始指数更干净,也更适合进入多因子模型。
四、常见误区与复盘要点
此外,关键词选择本身就是最大的主观环节。同一个公司可能有简称、全称、产品名、创始人名等多个搜索入口,只取一个关键词会严重低估关注度。更稳妥的做法是构建“关键词篮子”,按搜索量加权合成,并在报告中披露关键词清单和权重。
最后要强调合规与稳定:公开接口有频率限制,第三方数据有授权边界,微信指数尤其需要注意采集方式。工程上建议做缓存、重试、限速和版本快照,把“能拉到数据”变成“能稳定复现地拉到数据”,这才是搜索指数进入因子体系的前提。