3. 跨股票特征工程概览
逐笔数据是市场最细粒度的成交记录,单只股票一天往往产生数万到数十万条事件。若直接把原始逐笔字段喂给模型,模型学到的往往是“这只股票在某个价位、某个时段、某种流动性下的特有习惯”,而不是可跨股票复用的规律。跨股票特征工程的核心任务,就是把与具体股票绑定的原始事件,转换为量纲统一、分布可比、语义稳定的特征向量,使同一套特征定义在 A 股、B 股甚至不同板块之间都能成立。
本节先建立整体流程的骨架,再讨论特征分类与标准化的必要性,为后续的逐笔特征构造与迁移检验打下共同语言。
一、从原始逐笔事件到特征向量的四层结构
一条典型的逐笔成交记录包含:证券代码、成交时间(精确到毫秒或十毫秒)、成交价格、成交数量、买卖方向标识(主动买/主动卖或委托单号推断)、成交编号等。原始事件本身是“点”,而特征工程要做的是把点连成“段”,再把段压缩成“向量”。可以把它拆成四层:
- 事件层:原始逐笔成交/委托记录,字段为价格、数量、方向、时间戳。
- 切片层:按固定时间窗(如 10 秒、30 秒、1 分钟)或按成交量/笔数事件窗(如每 50 笔)把事件流切分成若干“切片”,每个切片是一个分析单元。
- 统计层:在每个切片内计算价、量、方向、节奏四类统计量,形成原始特征。
- 标准化层:对原始特征做量纲对齐与分布对齐,输出可迁移特征。
这四层的关系不是简单的线性流水线,切片层与统计层之间还存在“窗口长度”这一关键参数的回馈:窗口太短,统计量噪声大;窗口太长,又会把不同市场状态混在一起。实践中常同时构造 10 秒、30 秒、60 秒三档窗口,再在标准化层做多尺度融合。
二、特征分类:四类语义与迁移难度
把统计量按语义分成四类,有助于判断哪些特征天然可迁移、哪些需要重点标准化:
| 类别 | 典型特征 | 量纲问题 | 迁移难度 |
|---|---|---|---|
| 价类 | 收益率、价格波动率、价差、价格斜率 | 收益率已无量纲,但波动率随股票波动水平差异大 | 中 |
| 量类 | 成交量、平均单笔量、大单占比、量比 | 绝对量随流通盘差异可达数十倍 | 高 |
| 方向类 | 主动买占比、买卖笔数比、净流入 | 占比类天然有界,净流入为绝对量 | 低~中 |
| 节奏类 | 成交笔数、平均间隔、间隔变异系数 | 笔数随活跃度差异大,间隔为时间量纲 | 高 |
可以看到,占比、比率、收益率这类“已经做过一次除法”的特征迁移难度最低;而绝对量、绝对笔数、绝对时间间隔迁移难度最高,必须经过标准化才能跨股票使用。这也解释了为什么特征工程中要优先构造比率型特征,而不是把原始量直接堆进模型。
三、标准化的必要性:三个层面的不可比
假设我们用同一套特征在股票 A 和股票 B 上训练与检验。若不标准化,至少存在三层不可比:
- 量纲不可比:A 的 30 秒成交量均值可能是 5 万股,B 可能是 80 万股,同一权重在两者上的实际影响完全不同。
- 分布不可比:A 是大盘蓝筹,成交节奏平稳;B 是小盘活跃股,笔数间隔忽长忽短。同一特征的分布形状、偏度、尾部厚度都不同。
- 状态不可比:同一只股票在开盘集合竞价后、午盘、尾盘的状态差异,可能比两只股票之间的差异还大。标准化必须能区分“股票间差异”与“时段状态差异”。
因此标准化不只是“减均值除标准差”一步。工程上通常分两步走:先做稳健缩放(如用中位数与四分位距 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)
四、一个可执行的最小流程
把上述结构落成可操作的步骤,可以归纳为一条最小链路:读取逐笔 → 按 30 秒切片 → 计算四类统计量 → 稳健缩放 → 横截面排序归一 → 输出特征矩阵(行=切片,列=特征)。其中有两个容易踩坑的细节:
- 切片边界要对齐交易日:跨日切片必须丢弃或单独标记,否则会把收盘与次日开盘拼进同一窗口。
- 标准化参数只能来自训练段:中位数、IQR、排序基准都应在训练时间窗内估计,再应用到检验段,避免未来信息泄漏。
完成这一步后,我们得到的就不再是“某只股票的逐笔记录”,而是一张行是时间切片、列是语义统一特征的矩阵。后续的跨股票迁移检验,本质上就是检验这张矩阵在源股票上训练出的关系,能否在目标股票上保持稳定。特征分类决定了哪些列值得保留,标准化决定了这些列是否真的可比——这正是本节要建立的两个基本判断。