特征与预处理管线

特征不是“越多越好”

特征是模型实际接收的数字表示。原始数据需要转换,但任何转换都必须在预测时可重复,并且不能偷看未来。

原始字段常见转换风险
数值缺失填充、缩放、对数变换极端值、单位混用
类别one-hot 编码未知类别、高基数
文本词袋、TF-IDF、Embedding近重复、隐私信息、长度偏差
时间小时、星期、距事件时间时区、预测后信息

特征工程不是美化数据,而是把与决策有关、预测时可获得的信息表达成模型可学习的形式。

fit 与 transform

  • fit:从数据学习状态,例如均值、词表、类别集合。
  • transform:用已学状态转换新数据。
  • fit_transform:先学再转,只适合训练区。

如果测试集参与 fit,就发生泄漏。scikit-learn 的 Pipeline 将预处理和模型绑定,可在交叉验证中保持边界。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
 
model = Pipeline(
    steps=[
        ("tfidf", TfidfVectorizer(analyzer="char", ngram_range=(2, 4))),
        ("classifier", LogisticRegression(max_iter=1000)),
    ]
)
model.fit(train_texts, train_labels)
predictions = model.predict(test_texts)

这里 TF-IDF 的词表只从 train_texts 学习;测试文本只被转换。

Pipeline 能把“在每个训练折 fit、在对应验证折/测试集 transform”放进同一个可复制对象,但它不会替你判断字段是否在预测时可得、时间窗口是否正确、服务端 schema 是否一致,或文本中是否含有不该进入模型的个人与机密信息。这些边界仍需在数据契约和部署审查中单独验证。

文本特征的直觉

词袋统计词是否出现;TF-IDF 进一步降低“到处都出现的词”的权重。它不真正理解语义,却常是短文本分类的强基线。Embedding 把文本映射到稠密向量,能表示语义相近,但依赖外部模型、版本和推理成本。

先建立简单、可解释、可复现的基线,再判断 Embedding 是否带来稳定收益。

常见错误

  • 把标签编码进文本,例如在训练语料前加真实类别名。
  • 手工清洗训练数据,却忘记在服务端应用同一规则。
  • 对树模型、线性模型不加区分地套同一种缩放。
  • 把 ID 当连续数值;模型会虚构大小关系。
  • 只保存模型权重,不保存预处理器与类别顺序。

练习

为“Agent 运行是否需要人工复核”设计五个候选特征。逐个写出:预测时是否可用、是否含敏感信息、如何转换、可能怎样泄漏。

掌握检查

  • 能用一句话区分 fit 与 transform。
  • 能解释为什么 Pipeline 能降低泄漏风险。
  • 能为数值、类别、文本字段各选择一种合理表示。

下一步:训练验证与调参。

参考资料

核验日期:2026-07-22。