📈机器学习赛事实践-AI量化模型预测挑战赛
2023-8-7
| 2024-1-30
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
password
category
Property
Jan 30, 2024 11:52 AM
icon

0 赛题解析

AI量化模型预测挑战赛:
举办方:清华大学

赛事任务

本赛事通过大数据与机器学习的方法和工具,理解市场行为的原理,通过数据分析和模型创建量化策略,采用历史数据,验证量化策略的有效性,并且通过实时数据进行评测。
给定数据集: 给定训练集(含验证集), 包括10只(不公开)股票、79个交易日的L1snapshot数据(前64个交易日为训练数据,用于训练;后15个交易日为测试数据,不能用于训练), 数据已进行规范化和隐藏处理,包括5档量/价,中间价,交易量等数据(具体可参考后续数据说明)。
预测任务:利用过往及当前数据预测未来中间价的移动方向,在数据上进行模型训练与预测
输入数据:
行情频率:3秒一个数据点(也称为1个tick的snapshot);
每个数据点包括当前最新成交价/五档量价/过去3秒内的成交金额等数据;
训练集中每个数据点包含5个预测标签的标注; 允许利用过去不超过100tick(包含当前tick)的数据,预测未来N个tick后的中间价移动方向。
预测时间跨度:5、10、20、40、60个tick,5个预测任务;
即在t时刻,分别预测t+5tick,t+10tick,t+20tick,t+40tick,t+60tick以后: 最新中间价相较t时刻的中间价:下跌/不变/上涨。

赛题数据集

  • 行情频率:3秒一个数据点(也称为1个tick的snapshot);
  • 每个数据点包括当前最新成交价/五档量价/过去3秒内的成交金额等数据;
  • 训练集中每个数据点包含5个预测标签的标注;允许利用过去不超过100tick(包含当前tick)的数据,预测未来N个tick后的中间价移动方向。
  • 预测时间跨度:5、10、20、40、60个tick,5个预测任务;即在t时刻,分别预测t+5tick,t+10tick,t+20tick,t+40tick,t+60tick以后:最新中间价相较t时刻的中间价:下跌/不变/上涨。
字段
含义
date
日期
time
时间戳
sym
标的(仅序号)
close
最新价/收盘价
amount_delta
成交量变化
n_midprice
中间价
n_bid1
买一价
n_bsize1
买一量
n_bid2
买二价
n_bsize2
买二量
n_bid3
买三价
n_bsize3
买三量
n_bid4
买四价
n_bsize4
买四量
n_bid5
买五价
n_bsize5
买五量
n_ask1
卖一价
n_asize1
卖一量
n_ask2
卖二价
n_asize2
卖二量
n_ask3
卖三价
n_asize3
卖三量
n_ask4
卖四价
n_asize4
卖四量
n_ask5
卖五价
n_asize5
卖五量
label5
5tick价格移动方向
label10
10tick价格移动方向
label20
20tick价格移动方向
label40
40tick价格移动方向
label60
60tick价格移动方向

评价指标

本模型依据提交的结果文件,采用macro-F1 score进行评价,取label_5, label_10, label_20, label_40, label_60五项中的最高分作为最终得分。

解题思路

本题的任务是构建一种AI量化模型,利用过往及当前数据预测未来中间价的移动方向。
这种AI量化任务是典型的时间序列回归预测问题。处理该问题,一般推荐使用机器学习方法,如CatBoost,LightGBM、XGBoost等树模型,树模型能够比较好地处理数值型数据,可解释性较高。或者使用深度学习方法,但深度模型的搭建上比较复杂,需要自己构建模型结构,对于数值型数据需要进行标准化处理,可解释性弱。
我们在解决机器学习问题时,一般会遵循以下流程:
notion image
 

1 Baseline实践

1. 导入模块

2. 数据探索

首先可以对买价卖价进行可视化分析
选择任意一个股票数据进行可视化分析,观察买价和卖价的关系。下面是对买价和卖价的简单介绍:
  • 买价指的是买方愿意为一项股票/资产支付的最高价格。
  • 卖价指的是卖方愿意接受的一项股票/资产的最低价格。
  • 这两个价格之间的差异被称为点差;点差越小,该品种的流动性越高。
notion image
加上中间价继续可视化,中间价即买价与卖价的均值,数据中有直接给到,我们也可以自己计算
波动率是给定股票价格变化的重要统计指标,因此要计算价格变化,我们首先需要在固定间隔进行股票估值。我们将使用已提供的数据的加权平均价格(WAP)进行可视化,WAP的变化反映股票波动情况。
notion image

3. 特征工程

在特征工程阶段,构建基本的时间特征,提取小时、分钟等相关特征,主要是为了刻画不同时间阶段可能存在的差异性信息。需要注意数据是分多个文件存储的,所以需要进行文件合并,然后在进行后续的工作。

4. 模型训练与验证

选择使用CatBoost模型,也是通常作为机器学习比赛的基线模型,在不需要过程调参的情况下也能得到比较稳定的分数。这里使用五折交叉验证的方式进行数据切分验证,最终将五个模型结果取平均作为最终提交。
本次比赛采用macro-F1 score进行评价,取label_5, label_10, label_20, label_40, label_60五项中的最高分作为最终得分,所以在初次建模的时候对应五个目标都需要进行建模,确定分数最高的目标,之后进行优化的时候仅需对最优目标进行建模即可,大大节省时间,聚焦单个目标优化。

5. 结果输出

提交结果需要符合提交样例结果,然后将文件夹进行压缩成zip格式提交。
 

2 进阶

在baseline阶段,我们使用CatBoost完成了解决机器学习问题的全部流程,得到了基础的分数。在进阶实践部分,将在原有Baseline基础上做更多优化,一般优化思路,从特征工程与模型中来思考。
暂时无法在飞书文档外展示此内容
优化方法建议:
  1. 提取更多特征:在数据挖掘比赛中,特征总是最终制胜法宝,去思考什么信息可以帮助我们提高预测精准度,然后将其转化为特征输入到模型。对于本次赛题可以从业务角度构建特征,在量化交易方向中,常说的因子与机器学习中的特征基本一致,趋势因子、收益波动率因子、买卖压力、同成交量衰减、斜率 价差/深度,可以围绕成交量、买价和卖价进行构建。也可以从时间序列预测角度构建特征,比如历史平移特征、差分特征、和窗口统计特征。
  1. 尝试不同的模型:模型间存在很大的差异,预测结果也会不一样,比赛的过程就是不断的实验和试错的过程,通过不断的实验寻找最佳模型,同时帮助自身加强模型的理解能力。

特征优化

这里主要构建了当前时间特征、历史平移特征、差分特征、和窗口统计特征;每种特征都是有理可据的,具体说明如下:
(1)当前时间特征:围绕买卖价格和买卖量进行构建,暂时只构建买一卖一和买二卖二相关特征,进行优化时可以加上其余买卖信息;
(2)历史平移特征:通过历史平移获取上个阶段的信息;
(3)差分特征:可以帮助获取相邻阶段的增长差异,描述数据的涨减变化情况。在此基础上还可以构建相邻数据比值变化、二阶差分等;
(4)窗口统计特征:窗口统计可以构建不同的窗口大小,然后基于窗口范围进统计均值、最大值、最小值、中位数、方差的信息,可以反映最近阶段数据的变化情况。
参考代码如下:

模型融合

模型融合代码参考:
定义cv_model函数,内部可以选择使用lightgbm、xgboost和catboost模型,可以依次跑完这三个模型,然后将三个模型的结果进行取平均进行融合。
将结果取平均进行融合是比较基础的融合的方式,另外一种经典融合方式为stacking,stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征加入训练集进行再训练,从而得到完整的stacking模型。
notion image
第一层:(类比cv_model函数)
  1. 划分训练数据为K折(5折为例,每次选择其中四份作为训练集,一份作为验证集);
  1. 针对各个模型RF、ET、GBDT、XGB,分别进行5次训练,每次训练保留一份样本用作训练时的验证,训练完成后分别对Validation set,Test set进行预测,对于Test set一个模型会对应5个预测结果,将这5个结果取平均;对于Validation set一个模型经过5次交叉验证后,所有验证集数据都含有一个标签。此步骤结束后:5个验证集(总数相当于训练集全部)在每个模型下分别有一个预测标签,每行数据共有4个标签(4个算法模型),测试集每行数据也拥有四个标签(4个模型分别预测得到的)
第二层:(类比stack_model函数)
  1. 将训练集中的四个标签外加真实标签当作五列新的特征作为新的训练集,选取一个训练模型,根据新的训练集进行训练,然后应用测试集的四个标签组成的测试集进行预测作为最终的result。
Stacking参考代码:
需要特别注意,代码给出的是解决二分类问题的流程,对于多分类问题大家可以自行尝试。
 

附录

实践环境配置

AI环境配置:
  • 图文材料:https://gitee.com/anine09/learn-python-the-smart-way-v2/blob/main/slides/chapter_0-Installation.ipynb

工具使用与提分思路

  • Scikit-Learn保姆教程:https://mp.weixin.qq.com/s/4NSVh1HniNT4CGakzHxm1w
  • 时间序列预测方法总结:https://zhuanlan.zhihu.com/p/67832773
  • 水哥开营分享的LGB的baseline,有能力小伙伴自行尝试:https://github.com/datawhalechina/competition-baseline/tree/master/competition/%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9EAI%E5%BC%80%E5%8F%91%E8%80%85%E5%A4%A7%E8%B5%9B2023
 
  • 比赛
  • AI
  • ML
  • Datawhale AI 夏令营 AICGDatawhale AI 夏令营 NLP赛事实践—基于论文摘要的文本分类与关键词抽取挑战赛
    Loading...
    目录