工具实战
从事件时间对齐、事件自身特征和市场背景特征出发,说明怎样把财报与公告样本整理成适合 CatBoost 训练的事件驱动数据表。
到了事件驱动任务,CatBoost 的优势会比普通因子表更明显,因为事件样本天然混合了大量离散信息:事件类型、披露时点、行业、公告状态、修订类型、是否超预期,几乎没有哪一列是纯粹连续的。
这一讲要解决的是:怎样把财报和公告这类事件信息整理成一张适合 CatBoost 训练的事件样本表。
你需要完成四件事:
普通日频建模通常是一日一行、资产重复出现。事件驱动样本不一样,一行更像“一次事件”。
例如一条业绩预告样本,至少要回答下面几个问题:
如果这些边界不先说清,事件样本最容易出现的问题就是:用到了披露之后才知道的数据,或者把盘后公告错误并到了当日盘中可交易样本里。
事件驱动最怕的不是特征不够多,而是时间线不够清楚。你可以先把样本构造拆成下面几个固定动作,每一步都只解决一个问题。
事件驱动任务里,时间戳不能只保留日期,最好保留到“披露发生在交易时段的哪个位置”。至少要分清:
因为这会直接决定你的标签起点。
例如:
如果把这两类样本混在一起按同一标签规则处理,模型学到的不是事件影响,而是错位的收益响应。
一张稳的事件样本表,通常至少包含三类特征。
第一类是事件自身特征:
event_typereport_quarterannouncement_sessionis_revisionsurprise_direction第二类是事件前市场背景:
第三类是上下文辅助信息:
这三类特征分别回答的是:发生了什么、发生时市场处在什么状态、这个事件是不是特殊情形。
事件驱动里,标签往往不只一种。
你可以做:
CatBoost 既能做回归,也能做分类。实际项目中,如果你的目标是“筛出高质量事件”,分类往往比直接回归更容易稳定;如果你的目标是“给事件打连续分”,回归更直观。
不要一开始就默认回归一定更高级,先看你的交易动作到底是什么。
事件驱动任务里,下面这些列很适合直接作为类别列交给 CatBoost:
这些列不适合硬转成连续数字,因为它们表达的是身份和分组,不是大小关系。
相反,下列列通常更适合作为数值特征:
一个很常见的错误是把“公告类型编码 1,2,3,4”直接当数值列,让模型误以为 4 比 1 更大、更强。对事件样本来说,这种做法通常只会制造伪结构。
from catboost import CatBoostClassifier, Pool
feature_cols = [
"event_type",
"report_quarter",
"industry_lv1",
"announcement_session",
"surprise_ratio",
"pre_ret_5d",
"pre_ret_20d",
"volatility_20d",
"turnover_20d",
]
cat_cols = [
"event_type",
"report_quarter",
"industry_lv1",
"announcement_session",
]
target_col = "label_outperform_5d"
train_pool = Pool(train_df[feature_cols], label=train_df[target_col], cat_features=cat_cols)
valid_pool = Pool(valid_df[feature_cols], label=valid_df[target_col], cat_features=cat_cols)
model = CatBoostClassifier(
loss_function="Logloss",
eval_metric="AUC",
iterations=800,
learning_rate=0.05,
depth=6,
random_seed=42,
verbose=100,
)
model.fit(train_pool, eval_set=valid_pool, use_best_model=True)
这段代码最关键的地方在于:
事件样本出了问题,表现往往会比普通日频样本更隐蔽,因为很多错误不是立刻报错,而是安静地把标签和特征错位了。
先查披露时间有没有对错。事件驱动最容易出错的地方不是参数,而是“盘后事件被当成盘前可见”。只要时间线错了,线下效果再好都不可信。
这时不要急着把所有稀有事件都并进来。先确认这些稀有事件有没有足够稳定的业务含义。样本少、定义还不稳定的事件,宁可先不进第一版模型。
同一家公司可能在短时间内连续发预告、正式财报、补充说明、问询回复。如果你没有定义好主事件和从事件,很容易把一段高度重叠的信息重复入样。
更稳的做法是先设规则:
如果你已经做到下面几点,这一讲就算完成:
本讲是《CatBoost量化建模完整学习计划》的第 4/9 讲,当前主题是《CatBoost在事件驱动策略中的应用:财报与公告特征融合》。
上一讲:第 3 讲《CatBoost参数调参与早停策略:稳定收益优先配置法》。
下一讲:第 5 讲《CatBoost模型可解释性:特征贡献、样本归因与异常诊断》。
风险揭示与免责声明
本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。
本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。
市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。
读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。