3. 特征工程基础:价格与成交量特征、订单簿特征、异常交易行为特征

各位同学,欢迎来到特征工程这一章。说实话,在金融风控这个领域摸爬滚打这些年,我越来越觉得:特征决定了模型的上限,算法只是逼近这个上限。你想想看,再牛的模型,喂进去一堆垃圾特征,出来的结果能好到哪去?

今天咱们就聊聊内幕交易检测中最核心的三类特征。我习惯把它们叫做「三板斧」——价格成交量、订单簿、异常行为。这三板斧用好了,很多异常信号就藏不住了。

内幕交易特征工程 价格与成交量特征 收益率 换手率 波动率 订单簿特征 买卖价差 订单不平衡 异常交易行为特征 大单异动 关联账户 时间异常 三者结合 → 高精度检测模型

3.1 价格与成交量特征:最基础的信号

先说说价格和成交量。这两个东西,说白了就是市场的「心跳」和「呼吸」。内幕交易者再狡猾,也逃不过量价关系的约束。

3.1.1 收益率特征

收益率不是简单的涨跌幅。我个人习惯把它拆成三块来看:

  • 日收益率:最基础,但噪声大。我一般会做对数收益率,因为它的统计性质更好。
  • 累计异常收益率(CAR):这个很关键。用个股收益率减去市场基准收益率,剩下的就是「异常」部分。
  • 日内分时收益率:比如每5分钟、每15分钟算一次。内幕交易往往在某个时间窗口内集中爆发。

核心公式:

# 对数收益率
log_return = ln(P_t / P_{t-1})

# 累计异常收益率
CAR = Σ(R_i - R_m)
# R_i 是个股收益率,R_m 是市场收益率

嗯,这里要注意:收益率特征一定要做平稳性检验。我在项目中遇到过,有人直接用原始收益率序列建模,结果模型全在学市场波动,根本抓不到内幕信号。

3.1.2 换手率特征

换手率,说白了就是「筹码交换的速度」。内幕交易前,换手率往往会出现异常放大。

我常用的几个维度:

  • 日均换手率:和过去20天、60天的均值做对比
  • 换手率突变:当日换手率 / 过去N日均值,超过2倍就要警惕
  • 换手率与价格背离:价格涨但换手率低,或者价格跌但换手率高——都有问题

避坑指南:

我曾经吃过一次亏:只用了换手率的绝对值,没考虑流通股本变化。结果某次送转股后,换手率突然飙升,模型疯狂报警。后来加了「复权换手率」才解决。

3.1.3 波动率特征

波动率是内幕交易的「温度计」。我习惯用两种方式:

  1. 历史波动率:用过去20天的收益率标准差。简单,但有效。
  2. 已实现波动率:用日内高频数据算。这个对捕捉盘中异动特别敏感。
# 历史波动率(20日)
import numpy as np
def historical_volatility(prices, window=20):
    log_returns = np.log(prices / prices.shift(1))
    return log_returns.rolling(window).std() * np.sqrt(252)

# 已实现波动率(5分钟频率)
def realized_volatility(returns_5min):
    return np.sqrt(np.sum(returns_5min**2))

3.2 订单簿特征:微观结构的秘密

订单簿数据,很多人觉得太细、太杂。但我想说:内幕交易的痕迹,往往就藏在这些毫秒级的订单里

3.2.1 买卖价差

买卖价差,就是最优卖价和最优买价的差值。正常情况下,流动性好的股票价差很小。但内幕交易者为了快速成交,往往会「吃单」——直接吃掉对手盘,导致价差瞬间扩大。

我常用的指标:

  • 绝对价差:Ask_Price - Bid_Price
  • 相对价差:绝对价差 / 中间价
  • 有效价差:成交价与中间价的差值,这个更能反映真实成本

注意:

价差特征对数据频率要求很高。如果你只有日线数据,那价差基本没用。至少要用分钟级数据,最好是Tick级。

3.2.2 订单不平衡

这个特征,我个人觉得是订单簿里最有价值的。什么叫订单不平衡?就是买盘和卖盘的力量对比。

计算方式很简单:

# 订单不平衡指标
order_imbalance = (buy_volume - sell_volume) / (buy_volume + sell_volume)

# 或者用订单笔数
order_imbalance_count = (buy_orders - sell_orders) / (buy_orders + sell_orders)

你想想看,如果一只股票突然出现大量买单,但价格没怎么涨——这正常吗?不正常。这很可能是有人在偷偷吸筹。反过来,大量卖单压着,价格却不跌,也可能是有人在护盘。

3.3 异常交易行为特征:抓「狐狸尾巴」

前面两类特征,都是基于正常交易逻辑。但内幕交易者,往往会留下一些「非正常」的痕迹。这部分特征,就是专门抓这些狐狸尾巴的。

3.3.1 大单异动

什么叫大单?我一般把单笔成交金额超过过去20日均值3倍以上的,定义为大单。内幕交易者资金量大,很难完全拆分成小单。

关键指标:

  • 大单成交占比:大单成交量 / 总成交量
  • 大单频率:单位时间内大单出现的次数
  • 大单方向:主动买入还是主动卖出

3.3.2 关联账户行为

这个比较高级。内幕交易者往往用多个账户操作,但账户之间会有「协同性」。

我常用的方法:

  1. 交易时间相关性:多个账户在同一时间窗口内交易同一只股票
  2. 买卖方向一致性:多个账户同时买入或同时卖出
  3. IP/MAC地址关联:如果数据允许,这个最直接

实战经验:

我曾经处理过一个案子:三个账户,分别在不同券商开户,交易时间高度重合,而且每次都是A账户先买,B和C账户跟着买。后来一查,三个账户的实际控制人是同一个人。这就是典型的关联账户行为。

3.3.3 时间异常特征

内幕交易者有个特点:他们往往在「关键时间点」前后集中交易。比如:

  • 收盘前集中交易:利用收盘价操纵
  • 公告前突击交易:这个最明显
  • 节假日前后:利用信息真空期

我一般会构建一个「时间异常得分」:

# 时间异常得分示例
def time_anomaly_score(trade_time, event_time):
    # trade_time: 交易时间
    # event_time: 事件公告时间
    time_diff = (event_time - trade_time).total_seconds()
    # 越接近事件时间,得分越高
    score = np.exp(-time_diff / 3600)  # 1小时内衰减
    return score

3.4 特征组合与实战建议

好了,三类特征都讲完了。但我想说:单个特征的力量有限,组合起来才是王炸

我常用的组合方式:

特征组合 检测场景 典型信号
收益率 + 换手率 量价背离 价格涨但换手率低 → 可能有人控盘
订单不平衡 + 大单异动 资金异动 大单持续买入但价格不涨 → 吸筹信号
波动率 + 时间异常 事件驱动 公告前波动率骤升 → 信息泄露
关联账户 + 买卖价差 团伙交易 多账户同时吃单 → 协同操作

最后说两句:

特征工程没有银弹。每个市场、每只股票都有自己的「脾气」。我的建议是:先跑一遍基础特征,看看哪些特征和已知的内幕交易案例有强相关性,然后再迭代优化。别一上来就搞几百个特征,容易过拟合。

嗯,这一章的内容就到这。特征工程是门手艺活,多动手、多复盘,慢慢就有感觉了。


公众号:蓝海资料掘金营,微信deep3321