作者归档:admin

我是如何真正理解 sklearn Pipeline 的:一条被代码刻意隐藏的时间线

很多人都会用 sklearn 的 Pipeline。

pipe = Pipeline([
    ("scale", StandardScaler()),
    ("model", LogisticRegression())
])

大家也都知道一句“正确但模糊”的结论:

Pipeline 可以防止数据泄漏。

但如果你曾经认真顺着代码去想过,你很可能会产生和我一模一样的困惑:

  • train / test 到底在哪里区分?
  • 每个 step 明明都有 fit,为什么流程图里只看到 transform?
  • y_train 什么时候被用?为什么看起来好像没用?

我自己在理解 Pipeline 的过程中,真正卡住的不是 API,而是执行语义。

这篇文章不是讲“怎么用 Pipeline”,而是讲:

Pipeline 到底抽象掉了什么,又是如何通过这种抽象,强制你走一条统计正确的路。


一、Pipeline 难理解,并不是你的问题

先说一个结论:

sklearn Pipeline 本来就不是为“靠看代码就能理解”而设计的。

它做了一件非常反直觉、但非常高级的事:

把“训练 / 测试”这条时间线,从代码结构中彻底移除了。


二、Pipeline 真正隐藏的是“时间语义”

在传统机器学习教学里,我们习惯这样想:

  1. 用训练集训练模型
  2. 用测试集评估模型

这是显式时间线。

而在 Pipeline 里,这条线被压缩进了方法调用本身:

  • fit(…) 表示:现在是训练时间
  • transform(…) / predict(…) 表示:现在是推断时间

Pipeline 不关心你传进来的数据是 train 还是 test,
它只关心:你现在是在 fit,还是在 predict。


三、Pipeline 实际上有两条主线

1. 训练主线(fit)

pipe.fit(X_train, y_train)

真实发生的是:

X_train
→ step1.fit + transform
→ X1_train
→ step2.fit + transform
→ X2_train
→ model.fit

2. 推断主线(predict)

pipe.predict(X_test)

真实发生的是:

X_test
→ step1.transform
→ X1_test
→ step2.transform
→ X2_test
→ model.predict


四、为什么流程图里总是看不到 fit?

因为 fit 不参与数据流。

fit 的作用是学习规则,
transform / predict 才是数据真正流动的阶段。


五、y_train 去哪里了?

y 不是主数据流的一部分。

它只在需要监督信息的 step 中被消耗:

  • 监督型 Transformer
  • 最后一个 Estimator(model.fit)

六、最后一个 step 是一个“特殊的 step”

中间 step:X → X
最后 step:X → y

最后一个 step 决定了整个 Pipeline 的输出类型。


七、为什么这种设计一开始很难懂?

因为 Pipeline 牺牲了可读性,
换来了统计正确性和组合能力。


八、我最终使用的心智翻译器

pipe.fit(X, y)
→ 现在是训练时间,允许学习

pipe.predict(X)
→ 现在是推断时间,禁止学习


九、写在最后

Pipeline 隐藏的不是逻辑,而是时间。

一旦你把这条时间线找回来,
Pipeline 就不再神秘。

开博两周年志


圣诞老人,好久不见。

圣诞老人
确实有够久的。
多亏延长退休两年。


哎,我这不是磨刀不误砍柴工么?

圣诞老人
厉害!
刀磨好了,
柴没有了,
都换新能源了。

圣诞老人
人家博客是稳定日更,
你的是——更年期刊。

嗯嗯,2026 不做年更肴,争取每周至少一更。

(停顿)
圣诞老人:
好。
那我先把退休再延一年,
保险一点。

开博

量化投资研发是数据科学最佳的应用领域之一。

首先,量化投资涉及的数据从经济纬度看包括宏观经济、中观产业、微观企业数据,从频次纬度看有高频、中频、低频数据,从数据类型看有结构化数据如财务数据以及非结构化数据如舆情数据、年报数据以及近年来新出现的另类数据。这些数据的及时性、准确性以及覆盖率都显著影响量化模型的预测能力。我们用烹饪来类比量化投资研发,这些数据就是烹饪中的食材,食材好,食才好;

其次,量化投资研发除了对数据挖地三尺以外,还应用了大量的分析模型,投资学家、计量经济学家、统计学家和计算机学家都纷纷将各自领域的方法论引入其他领域的先进理论,来填补原有方法的不足。这些交叉领域的最新研究成果就好比烹饪中的不同的门派的大厨融汇贯通各门烹饪技法,通过工艺创新,挖掘出食材中的特殊味道,形成不同程次的口味,丰富我们的味蕾;

最后,量化投资是一个工程化要求非常高的领域,如果你只是发些不痛不痒自娱自乐的论文,那恭喜你可以不用考虑工程化的问题。如果你还想用自己研究的量化策略为自己贴补些家用,那就要好好研究下工程化了。量化模型没有工程化就类似,厨师拿着菜谱告诉你说,这道菜有多好吃,但是就是不做给你吃。量化模型工程化对个人及团队的要求就更高了,工程化分为两个阶段,第一个阶段就是能用代码处理数据,编写交易策略计进行选股、组合模型、回测以及归因分析;第二阶段就是在第一阶段的基础上将所有工作做好风控的前提下实现在线化、实时化、实盘化。

正是量化投资研发囊括了数据、模型、工程化三个维度的复杂任务,因此也更有挑战性也更加的迷人,能否从这些公开的数据中挖掘出超越市场平均水平的超额收益,比拼的就是在有效约束条件下对数据和模型的掌控能力了。

本博客的目的就是将这三个方面的工作进行系统的梳理,一方面方便自己学习总结,也希望能对有需要的朋友一些帮助。

RoQuant 2023年12月24日 平安夜 厦门