4. 时间序列基础特征提取
逐笔成交数据最原始、最稳定的信息不是价格,而是“什么时候成交了一笔”。价格会跳变、成交量会聚集,但时间戳始终按单调递增的顺序记录着市场的呼吸节奏。本节要做的,是把一串离散的成交时间点转换成两类基础特征:成交间隔与滚动窗口统计量。它们是后续波动率估计、流动性刻画、异常检测和样本标注的共同底座。
一、成交间隔:把时间点变成时间差
逐笔数据中每条记录带有成交时间戳 ts(通常精确到毫秒或微秒)。成交间隔定义为相邻两笔成交的时间差:
Δt_i = ts_i − ts_(i−1) (单位:秒或毫秒,全文统一)
这里必须先约定参照方向:Δt 取“当前笔减上一笔”,恒为非负。若数据存在同一时间戳的多笔成交(集合竞价或高频撮合常见),Δt 会等于 0,这是正常现象,不应删除,而应在统计时单独关注零间隔占比。实际实现时,第一步是按时间戳升序排序并去重检查,第二步用差分得到 Δt,第三步把首笔的 Δt 置为空值而非 0,避免污染均值。
成交间隔本身就有很强的经济含义:间隔短说明交易活跃、订单流密集;间隔突然拉长往往对应流动性真空或行情观望。但原始 Δt 分布高度右偏,长尾极重,直接送入模型效果很差。常用处理是对数变换 log(1+Δt),把长尾压缩后再做标准化。另一个实用派生量是单位时间成交笔数,即对固定时间桶(如 1 秒、5 秒)计数,它与 Δt 互为倒数视角,适合做滚动统计的输入。
二、滚动窗口统计量:在时间轴上滑动地看分布
仅有单点 Δt 无法表达“最近一段时间交易节奏是变快还是变慢、是稳定还是忽快忽慢”。滚动窗口的做法是:设定窗口长度 W(按笔数或按时间),在每个位置取窗口内的 Δt 序列,计算一组统计量,再随窗口向前滑动,形成一条与时间对齐的特征序列。
核心统计量包括:
- 均值:窗口内平均成交间隔,反映整体节奏;
- 方差/标准差:间隔的离散程度,刻画节奏稳定性;
- 偏度:分布是否偏向“偶尔出现超长间隔”,右偏说明存在稀疏成交的尾部;
- 峰度:极端间隔出现的频繁程度,对突发流动性断档敏感;
- 分位数(如中位数、90 分位):比均值更抗长尾,适合做稳健参照。
偏度和峰度的计算需要三阶、四阶中心矩。以样本偏度为例:
偏度 = (n / ((n−1)(n−2))) · Σ((x_i − x̄)/s)³
峰度 = 标准化四阶矩 − 3 (超额峰度)
实现上有两个易错点。第一,窗口内样本数 n 太小时(例如 n<10),偏度和峰度极不稳定,应设最小样本门槛,不足则输出空值。第二,标准差 s 接近 0 时(窗口内间隔几乎相同)会出现除零,需要加保护或直接跳过。建议窗口同时保留“按笔数”和“按时间”两种口径:按笔数窗口保证统计量样本量稳定,按时间窗口保证特征与真实时钟对齐,二者用途不同。
三、一个可复现的计算示例
假设某只股票连续 12 笔成交的时间戳(单位:秒,已排序)为:
ts = [0.00, 0.12, 0.35, 0.36, 0.80, 1.25, 1.26, 2.10, 2.15, 3.40, 3.42, 4.00]
差分得到 11 个间隔(秒):
Δt = [0.12, 0.23, 0.01, 0.44, 0.45, 0.01, 0.84, 0.05, 1.25, 0.02, 0.58]
取窗口 W=6(按笔数),第一个窗口为前 6 个间隔 [0.12, 0.23, 0.01, 0.44, 0.45, 0.01]。其均值约为 0.210 秒,标准差约为 0.196 秒,分布明显右偏(少数较大值拉高均值),偏度为正。第二个窗口整体右移一笔,纳入 0.84、剔除 0.12,均值会明显上升——这正是滚动特征要捕捉的“节奏变慢”信号。需要强调,以上数值为教学示例的合理假设,实际计算应以真实数据为准,并统一时间单位。
把窗口继续滑动到末尾,就得到两条长度与成交笔数近似对齐的序列:滚动均值序列和滚动标准差序列。它们可以直接作为样本特征列,与价格、成交量特征拼接。
四、工程实现中的关键约定
为了让特征可复现、可对齐,建议在实现时固定以下约定:
- 时间单位统一:全部换算为秒,避免毫秒与秒混用导致量纲错误;
- 排序与去重:先按时间戳升序,检查是否存在重复记录;
- 首笔空值:第一个 Δt 无前序,置为 NaN,不参与统计;
- 最小样本门槛:窗口内 n 小于阈值时偏度、峰度输出 NaN;
- 零方差保护:标准差为 0 时跳过偏度峰度计算;
- 特征对齐:滚动统计量默认对齐到窗口右端时刻,避免未来信息泄漏。
完成本节后,每条逐笔记录或每个时间桶都应携带一组基础时间特征:间隔本身、对数间隔、滚动均值、滚动标准差、滚动偏度与峰度、以及分位数参照。这些特征计算成本低、解释性强,是后续构建更复杂样本的起点。