数据越多,量化分析就越可靠吗?
不一定。未经定义的数据规模越大,错误被放大的概率反而越高。
量化分析依赖稳定的输入口径。如果同一字段在不同时间代表不同含义,模型看到的就不是连续序列,而是被拼接起来的多个统计对象。
例如采集航空数据时,“计划起飞时间”“预计起飞时间”和“实际起飞时间”都可以表现为时间字段,但业务含义完全不同。如果采集系统只保留一个“起飞时间”,延误分析就会失去比较基准。
采集前至少应建立以下数据字典:
| 定义项 | 需要明确的内容 | 常见风险 |
|---|---|---|
| 指标名称 | 字段到底衡量什么 | 同名字段含义不同 |
| 统计对象 | 一条记录代表事件、主体还是快照 | 重复统计 |
| 时间口径 | 事件时间、发布时间还是采集时间 | 序列错位 |
| 更新方式 | 覆盖、追加还是修订 | 历史状态丢失 |
| 单位与格式 | 元、万元、百分比、时间格式 | 量级计算错误 |
| 缺失含义 | 未发生、未知还是采集失败 | 把空值当成零 |
判断一个字段能否进入分析模型,不应只看它是否有值,还要看它的业务定义是否长期稳定。
采集前应该先确定哪些研究边界?
先确定分析问题,再决定采集范围,而不是先收集一切可能有用的数据。
一项量化研究至少要提前固定五个边界:
- 研究对象:分析的是单个事件、多个主体,还是连续时间序列。
- 观察周期:需要分钟级、小时级、日级还是月级数据。
- 更新频率:数据多久变化一次,采集频率是否真的需要同步提高。
- 分析目标:用于描述、预测、异常检测还是策略回测。
- 停止条件:达到什么覆盖率和时间跨度后,可以进入分析阶段。
以广告监测为例,如果目标是判断素材更新节奏,采集重点应放在素材首次出现、最后出现和版本变化时间。单纯增加页面访问次数,并不会自动提升结论质量。
研究问题越清晰,需要采集的字段通常越少。反过来,如果每个字段都被标记为“以后可能有用”,数据成本、清洗难度和合规风险会同时增加。
时间戳为什么是最容易被低估的问题?
量化分析首先是在比较时间,时间没有对齐,数值比较就失去基础。
同一条记录中,至少可能存在四种时间:
- 事件实际发生时间
- 数据源首次发布时间
- 数据源后续修改时间
- 采集系统获得时间
这四种时间不能互相替代。特别是在回测中,如果模型使用了当时尚未公开的信息,就会形成前视偏差,使历史结果看起来异常理想。
时间字段建议遵守以下原则:
| 检查项 | 处理要求 |
|---|---|
| 时区 | 统一保存为UTC,同时保留原始时区 |
| 精度 | 明确到秒、毫秒或分钟,不混合使用 |
| 延迟 | 记录发布时间与采集时间的差值 |
| 修订 | 保留旧版本,不直接覆盖历史值 |
| 顺序 | 检查事件时间是否晚于采集时间 |
| 日历 | 区分自然日、工作日和业务日 |
以舆情监测为例,一条内容可能先发布,随后修改标题,再被多个页面转载。若系统只保留最后一次采集时间,就无法判断信息最早在什么时候出现,也难以分析传播顺序。
缺失值和采集失败是一回事吗?
不是。业务上的空值和技术上的采集失败必须分开记录。
空值可能代表多种状态:
- 字段确实没有内容
- 数据源暂未更新
- 页面结构发生变化
- 请求超时
- 解析规则未命中
- 数据被权限或访问频率限制影响
如果这些状态全部写成空字符串或零,分析模型就无法判断“没有发生”和“没有采到”的区别。
更稳妥的做法,是同时保留数据值和采集状态:
value:字段实际值
collect_status:success、timeout、parse_error、empty
source_status:published、updated、removed
error_code:技术错误类型
collected_at:采集时间缺失率也不能只看总体平均值。总体缺失率较低,不代表数据可用。如果缺失记录集中在某个地区、时段或特定类型上,样本仍可能出现系统性偏差。
如何判断采集结果是否完整?
完整性不能只用记录总数判断,还要同时检查时间、对象和字段覆盖。
建议至少建立四层完整性指标:
| 层级 | 核心指标 | 需要回答的问题 |
|---|---|---|
| 任务层 | 任务成功率 | 计划任务是否按时执行 |
| 页面层 | 有效响应率 | 数据源是否返回可解析内容 |
| 记录层 | 对象覆盖率 | 应采对象是否全部出现 |
| 字段层 | 字段非空率 | 关键字段是否完整 |
如果进行选址数据采集,仅记录“成功获得一万条数据”没有意义。更重要的是判断这些记录是否覆盖目标城市、目标日期和目标类型,以及不同区域的采集成功率是否接近。
完整性检查还应包含连续性。时间序列中突然出现整段空白,通常比随机缺失几个值更值得优先处理,因为它可能对应任务停机、接口异常或采集规则失效。
重复数据应该如何识别?
去重不能只依赖单个ID,需要同时识别技术重复和业务重复。
技术重复通常是同一条记录被多次写入。业务重复则更复杂,同一事件可能更换链接、标题或展示位置,但本质上仍是同一个对象。
可以分三层建立去重规则:
- 主键去重:根据数据源提供的唯一标识判断。
- 组合键去重:使用主体、时间、类型等字段组合判断。
- 内容相似去重:用于识别标题微调、转载和格式变化。
去重时不应直接删除所有重复记录。更合理的结构是保留一张原始表和一张标准化表。原始表保存每次采集结果,标准化表负责合并同一业务对象。
这种分层能够保留变化过程。例如舆情监测中,同一内容被修改多次,本身就是值得分析的信号。如果只保留最后版本,修改轨迹也会一起消失。
数据源发生变化时应该怎么办?
把数据源视为会持续变化的系统,而不是固定不变的页面。
页面字段、接口参数、返回结构和更新节奏都可能变化。采集任务即使正常运行,也可能已经开始写入错误数据。
因此,质量监控不能只检查“任务有没有报错”,还应检查数据分布是否异常:
- 每批记录数是否突然上升或下降
- 关键字段非空率是否改变
- 数值范围是否超出历史区间
- 枚举值是否出现新类别
- 字段类型是否从数字变成文本
- 页面结构指纹是否发生变化
发现变化后,不宜立刻覆盖旧解析规则。更稳妥的方式是保留规则版本,并记录每批数据由哪个版本生成。这样才能在规则修正后,准确找到需要重新处理的历史范围。
原始数据为什么不能直接清洗后覆盖?
原始数据是分析结果的证据层,覆盖后很难判断错误来自数据源、采集还是清洗。
推荐采用三层数据结构:
| 数据层 | 保存内容 | 主要用途 |
|---|---|---|
| 原始层 | 原始响应、采集时间、来源地址、状态码 | 核验和重放 |
| 标准层 | 统一字段、时间、单位和编码 | 跨来源比较 |
| 分析层 | 去重、聚合和特征结果 | 建模与报表 |
原始层应尽量保持不可变。即使后续发现解析错误,也应通过新规则重新生成标准层,而不是修改原始证据。
对于持续采集任务,还需要保存批次号、规则版本、任务版本和数据源版本。这样一次异常结果才能被定位到具体时间和处理链路,而不是依靠人工回忆。
采集过程需要考虑哪些合规边界?
能访问的数据不等于可以无限制采集、保存和使用。
采集前应确认数据是否公开、使用目的是否合理、保存期限是否必要,并检查数据源的服务条款、授权范围和访问频率要求。
需要重点控制的内容包括:
- 不采集与研究目标无关的个人信息
- 不将公开信息自动等同于可任意二次使用
- 对敏感字段进行最小化保存
- 设置访问频率和并发上限
- 建立数据删除与过期机制
- 记录数据来源、用途和处理过程
- 对外提供结果时采用聚合或脱敏形式
合规并不是采集完成后的审查步骤,而应进入字段设计阶段。一个字段如果无法说明用途、保存周期和访问权限,就不应默认进入长期数据集。
怎样建立一套可执行的质量验收标准?
质量标准必须量化到字段、批次和业务场景,不能只写“数据基本可用”。
可以为每批数据建立以下验收表:
| 质量维度 | 检查方法 | 异常后的动作 |
|---|---|---|
| 完整性 | 检查对象、时间和字段覆盖 | 补采或标记缺口 |
| 唯一性 | 主键、组合键和内容相似检查 | 合并并保留原始记录 |
| 准确性 | 与原始响应及第二数据源抽样核对 | 回溯解析规则 |
| 一致性 | 检查单位、格式、枚举和时间口径 | 统一转换规则 |
| 及时性 | 计算发布时间与采集时间差 | 调整任务频率 |
| 稳定性 | 对比不同批次的字段分布 | 触发结构变化检查 |
| 可追溯性 | 核对来源、批次和规则版本 | 阻止数据进入分析层 |
验收标准应区分关键字段和普通字段。某个辅助描述字段少量缺失,可能不影响分析。但时间、主体标识或目标变量缺失,往往会直接改变样本是否可用。
FAQ
Q:量化分析应该先采数据,还是先设计指标?
应先设计研究问题和指标口径。只有明确分析对象、时间粒度、目标变量和验证方式,才能判断哪些字段值得采集。先收集大量数据再寻找用途,通常会增加清洗成本,也容易形成事后选择指标的问题。
Q:采集频率是不是越高越好?
不是。采集频率应与数据源更新频率和分析目标匹配。数据每天更新一次,却每分钟重复采集,主要增加的是重复记录和运行成本。只有研究对象确实高频变化时,提高采集频率才有实际价值。
Q:缺失值可以统一填零吗?
通常不可以。零可能是有效业务值,缺失也可能来自尚未发布、采集失败或解析异常。应先区分缺失原因,再根据模型需要决定删除、插补还是保留缺失标记。
Q:历史数据被数据源修改后,应该覆盖旧数据吗?
不建议直接覆盖。应同时保存原始版本、修改时间和新版本。量化分析不仅关心当前值,也需要知道某个时间点能够获得什么信息,否则回测可能使用当时并不存在的数据。
Q:数据清洗后还需要保留原始响应吗?
需要。原始响应用于核验字段解析、修复历史错误和解释异常结果。标准化数据适合分析,但不能替代原始证据。两者分层保存,才能让数据处理过程可追溯。
Q:如何快速判断一批数据能不能进入模型?
先检查关键字段完整性、时间顺序、重复情况、数值范围和来源可追溯性。只要主体标识、事件时间或目标变量存在无法解释的系统性缺失,就不宜直接进入模型,应先定位缺口产生的环节。