Skip to content

数据与任务建模

AI 项目的第一步不是选模型,而是把现实目标转换成可计算的问题。任务定义越模糊,模型越容易得到一个离线分数漂亮、实际无法使用的结果。

先定义决策,再定义预测

预测本身不产生价值,预测改变决策才产生价值。设计任务时先回答:

  1. 谁会使用结果?
  2. 在什么时刻使用?
  3. 使用结果后会采取什么行动?
  4. 错判一次的代价是什么?
  5. 多久后能够知道预测是否正确?

例如“预测销量”过于笼统。更可执行的定义是:“每天 20:00,根据截至当前的销售、价格、库存和活动信息,预测每个仓库未来 7 天的 SKU 日销量,用于补货。”

样本是什么

样本是一次完整观测。它应对应一个清晰的时间点和对象。

场景样本单位输入目标
信贷风控一次贷款申请申请时可见资料90 天内是否逾期
商品质检一张工位照片图像像素缺陷类别和位置
客服分类一次用户消息文本和会话上下文工单分类
推荐排序用户与候选商品对用户、商品、上下文是否点击或购买

样本边界不清会造成重复统计、标签错位和训练推理不一致。

特征和标签

特征是预测时能够获得的信息,标签是希望模型学习的目标。

设计特征时检查三件事:

  • 可获得:线上预测时真的能拿到。
  • 时间正确:只使用预测时刻之前的信息。
  • 含义稳定:字段定义不会频繁变化。

标签也不是天然存在的。退款、流失、违规、优质客户都需要明确业务定义。标签规则变化后,旧训练数据可能不能直接复用。

观察窗口和目标窗口

时间相关任务必须画出时间边界:

text
过去 30 天行为             预测时点          未来 14 天结果
|-------------------------|------------------|
      观察窗口                 T                目标窗口

如果把目标窗口中的信息放进特征,就发生了数据泄漏。典型例子包括:

  • 使用贷款审批后才生成的字段预测是否批准。
  • 使用退货完成状态预测用户是否会退货。
  • 随机切分时间序列,让训练集看到了测试时期的未来模式。

数据质量的六个维度

维度检查问题
完整性关键字段是否大量缺失
准确性数值、标签和时间是否正确
一致性不同系统对同一字段定义是否相同
唯一性是否存在重复样本或重复实体
及时性数据到达是否满足预测时效
代表性训练数据是否覆盖真实人群和场景

数据清洗不是简单删除空值。缺失本身可能具有业务意义,例如“用户没有填写职业”可能与风险相关,处理方式应进入模型设计和评估。

数据切分

随机切分适合样本相对独立、分布稳定的任务。以下场景需要特殊切分:

  • 时间预测:按时间先后切分。
  • 用户行为:同一用户尽量不要跨训练集和测试集。
  • 医疗数据:同一患者的多次记录不能泄漏到不同集合。
  • 文档问答:同一来源的高度相似片段要避免跨集合污染。

类别不平衡

欺诈、故障和严重投诉往往比例很低。此时准确率可能完全失真:如果正样本只占 1%,全部预测为正常也有 99% 准确率。

需要结合:

  • Precision:报出的异常里有多少是真的。
  • Recall:真实异常中找出了多少。
  • PR-AUC:观察不同阈值下精确率与召回率的整体关系。
  • 业务成本:漏掉一次和误报一次分别损失多少。

数据治理

生产数据还要处理权限、隐私和版本:

  • 只采集完成任务所必需的数据。
  • 对个人信息做脱敏和访问控制。
  • 记录数据来源、字段定义、更新时间和负责人。
  • 训练数据、特征逻辑和标签规则要可追溯。
  • 删除请求应能影响训练和索引流程,而不只是业务数据库。

任务定义模板

text
业务决策:
预测对象与时刻:
输入数据及可用时间:
输出形式:
标签定义:
观察窗口与目标窗口:
主要指标:
误报和漏报成本:
数据权限:
上线后的反馈来源:

先把这张表填完整,再讨论模型和框架,项目成功率会高得多。

别急,先让缓存热一下。