3. 跨股票特征工程概览

逐笔数据是市场最细粒度的成交记录,单只股票一天往往产生数万到数十万条事件。若直接把原始逐笔字段喂给模型,模型学到的往往是“这只股票在某个价位、某个时段、某种流动性下的特有习惯”,而不是可跨股票复用的规律。跨股票特征工程的核心任务,就是把与具体股票绑定的原始事件,转换为量纲统一、分布可比、语义稳定的特征向量,使同一套特征定义在 A 股、B 股甚至不同板块之间都能成立。

本节先建立整体流程的骨架,再讨论特征分类与标准化的必要性,为后续的逐笔特征构造与迁移检验打下共同语言。

一、从原始逐笔事件到特征向量的四层结构

一条典型的逐笔成交记录包含:证券代码、成交时间(精确到毫秒或十毫秒)、成交价格、成交数量、买卖方向标识(主动买/主动卖或委托单号推断)、成交编号等。原始事件本身是“点”,而特征工程要做的是把点连成“段”,再把段压缩成“向量”。可以把它拆成四层:

  • 事件层:原始逐笔成交/委托记录,字段为价格、数量、方向、时间戳。
  • 切片层:按固定时间窗(如 10 秒、30 秒、1 分钟)或按成交量/笔数事件窗(如每 50 笔)把事件流切分成若干“切片”,每个切片是一个分析单元。
  • 统计层:在每个切片内计算价、量、方向、节奏四类统计量,形成原始特征。
  • 标准化层:对原始特征做量纲对齐与分布对齐,输出可迁移特征。

这四层的关系不是简单的线性流水线,切片层与统计层之间还存在“窗口长度”这一关键参数的回馈:窗口太短,统计量噪声大;窗口太长,又会把不同市场状态混在一起。实践中常同时构造 10 秒、30 秒、60 秒三档窗口,再在标准化层做多尺度融合。

逐笔事件 → 可迁移特征的四层结构 ① 事件层 逐笔成交 / 委托记录 价格 · 数量 · 方向 毫秒时间戳 · 成交编号 单日 5 万~50 万条 ② 切片层 时间窗 / 事件窗切分 10s · 30s · 60s 多尺度 或每 50 笔一个切片 窗口长度是关键参数 ③ 统计层 价 · 量 · 方向 · 节奏 均值 / 波动 / 占比 / 斜率 形成原始特征 量纲与分布仍不统一 ④ 标准化层 量纲对齐 分布对齐 稳健缩放 可迁移特征 窗口长度回馈:过短噪声大,过长混状态 示例:某 30 秒切片内的原始统计量(教学示例,非实测) 价类 成交价均值 12.35 元 价格波动率 0.08% 收益率斜率 +0.02% 量类 成交量 18.6 万股 平均单笔 3200 股 大单占比 21% 方向类 主动买占比 57% 买卖笔数比 1.32 净流入 2.1 万股 节奏类 成交笔数 58 笔 平均间隔 0.52 秒 间隔变异系数 0.9

二、特征分类:四类语义与迁移难度

把统计量按语义分成四类,有助于判断哪些特征天然可迁移、哪些需要重点标准化:

类别典型特征量纲问题迁移难度
价类收益率、价格波动率、价差、价格斜率收益率已无量纲,但波动率随股票波动水平差异大中
量类成交量、平均单笔量、大单占比、量比绝对量随流通盘差异可达数十倍高
方向类主动买占比、买卖笔数比、净流入占比类天然有界,净流入为绝对量低~中
节奏类成交笔数、平均间隔、间隔变异系数笔数随活跃度差异大,间隔为时间量纲高

可以看到,占比、比率、收益率这类“已经做过一次除法”的特征迁移难度最低;而绝对量、绝对笔数、绝对时间间隔迁移难度最高,必须经过标准化才能跨股票使用。这也解释了为什么特征工程中要优先构造比率型特征,而不是把原始量直接堆进模型。

三、标准化的必要性:三个层面的不可比

假设我们用同一套特征在股票 A 和股票 B 上训练与检验。若不标准化,至少存在三层不可比:

  1. 量纲不可比:A 的 30 秒成交量均值可能是 5 万股,B 可能是 80 万股,同一权重在两者上的实际影响完全不同。
  2. 分布不可比:A 是大盘蓝筹,成交节奏平稳;B 是小盘活跃股,笔数间隔忽长忽短。同一特征的分布形状、偏度、尾部厚度都不同。
  3. 状态不可比:同一只股票在开盘集合竞价后、午盘、尾盘的状态差异,可能比两只股票之间的差异还大。标准化必须能区分“股票间差异”与“时段状态差异”。

因此标准化不只是“减均值除标准差”一步。工程上通常分两步走:先做稳健缩放(如用中位数与四分位距 IQR 替代均值与标准差,抵抗逐笔数据的厚尾与极端大单),再做横截面排序归一(把同一时刻不同股票的特征值转成排名分位数),从而把“绝对水平”转成“相对位置”。

# 稳健缩放示例(教学示例参数)
median = feature.median()
iqr = feature.quantile(0.75) - feature.quantile(0.25)
robust = (feature - median) / (iqr + 1e-9)

# 横截面排序归一:同一时间截面上跨股票比较
rank_pct = feature.groupby("timestamp").rank(pct=True)
稳健缩放解决“单只股票内部量纲与厚尾”问题,横截面排序归一解决“股票之间绝对水平不可比”问题。两者组合,才能让同一特征在 A、B 两只股票上具有相近的语义尺度。

四、一个可执行的最小流程

把上述结构落成可操作的步骤,可以归纳为一条最小链路:读取逐笔 → 按 30 秒切片 → 计算四类统计量 → 稳健缩放 → 横截面排序归一 → 输出特征矩阵(行=切片,列=特征)。其中有两个容易踩坑的细节:

  • 切片边界要对齐交易日:跨日切片必须丢弃或单独标记,否则会把收盘与次日开盘拼进同一窗口。
  • 标准化参数只能来自训练段:中位数、IQR、排序基准都应在训练时间窗内估计,再应用到检验段,避免未来信息泄漏。

完成这一步后,我们得到的就不再是“某只股票的逐笔记录”,而是一张行是时间切片、列是语义统一特征的矩阵。后续的跨股票迁移检验,本质上就是检验这张矩阵在源股票上训练出的关系,能否在目标股票上保持稳定。特征分类决定了哪些列值得保留,标准化决定了这些列是否真的可比——这正是本节要建立的两个基本判断。