科大讯飞:AI量化预测挑战赛基础方案!

 Datawhale干货 

方向:金融量化,科大讯飞赛事

  • 赛题名称:AI量化模型预测挑战赛

  • 赛题类型:金融量化

  • 赛题链接👇:

https://challenge.xfyun.cn/topic/info?type=quantitative-model&ch=vWxQGFU

赛题背景

量化金融在国外已经有数十年的历程,而在国内兴起还不到十年。这是一个极具挑战的领域。量化金融结合了数理统计、金融理论、社会学、心理学等多学科的精华,同时特别注重实践。由于市场博弈参与个体的差异性和群体效应的复杂性,量化金融极具挑战与重大的机遇的特点。

本赛事通过大数据与机器学习的方法和工具,理解市场行为的原理,通过数据分析和模型创建量化策略,采用历史数据,验证量化策略的有效性,并且通过实时数据进行评测。

赛事任务

给定数据集:给定训练集(含验证集), 包括10只(不公开)股票、79个交易日的L1snapshot数据, 数据已进行规范化和隐藏处理,包括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时刻的中间价:下跌/不变/上涨。

字段含义
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卖五量
label55tick价格移动方向
label1010tick价格移动方向
label2020tick价格移动方向
label4040tick价格移动方向
label6060tick价格移动方向

评价指标

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

赛题思路

赛题是一个典型的金融量化的比赛,可以做很多时序的特征工程,接下来展示简单的树模型思路:

import pandas as pd
import numpy as np
import glob
from sklearn.linear_model import LogisticRegression
from joblib import delayed, Parallel
from tqdm import tqdm_notebook

# 训练集和测试集文件路径
train_paths = glob.glob('./AI量化模型预测挑战赛公开数据/train/*')
test_paths = glob.glob('./AI量化模型预测挑战赛公开数据/test/*')

# 自定义特征工程
def base_feature(path, train=True):
    df_feat = []
    df = pd.read_csv(path)
    for idx, row in enumerate(df.iterrows()):
        idx_feat = []
        for col in ['n_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']:

            idx_feat.append(row[1][col])

            if idx == 0:
                idx_feat.append(np.nan)
            else:
                idx_feat.append(row[1][col] - df.iloc[max(0, idx-3):idx][col].mean())
                idx_feat.append(row[1][col] - df.iloc[max(0, idx-10):idx][col].mean())
                idx_feat.append(row[1][col] - df.iloc[max(0, idx-20):idx][col].mean())
                
                idx_feat.append(row[1][col] - df.iloc[max(0, idx-3):idx][col].max())
                idx_feat.append(row[1][col] - df.iloc[max(0, idx-10):idx][col].max())
                idx_feat.append(row[1][col] - df.iloc[max(0, idx-20):idx][col].max())

        if train:
            idx_feat += list(row[1].iloc[-5:])
        
        df_feat.append(idx_feat)
    
    return pd.DataFrame(df_feat)
    
train_feat = Parallel(n_jobs=5)(delayed(base_feature)(path, True) for path in tqdm_notebook(train_paths[:]))
test_feat = Parallel(n_jobs=5)(delayed(base_feature)(path, False) for path in tqdm_notebook(test_paths[:]))


import lightgbm as lgb
train_feat = pd.concat(train_feat, 0)

# 构建模型
m5 = lgb.LGBMClassifier()
m5.fit(train_feat.iloc[:, :-5], train_feat.iloc[:, -5])

m10 = lgb.LGBMClassifier()
m10.fit(train_feat.iloc[:, :-5], train_feat.iloc[:, -4])

m20 = lgb.LGBMClassifier()
m20.fit(train_feat.iloc[:, :-5], train_feat.iloc[:, -3])

m40 = lgb.LGBMClassifier()
m40.fit(train_feat.iloc[:, :-5], train_feat.iloc[:, -2])

m60 = lgb.LGBMClassifier()
m60.fit(train_feat.iloc[:, :-5], train_feat.iloc[:, -1])

# 写入测试集
for df, path in zip(test_feat, test_paths):
    sub = pd.DataFrame({
        'uuid': range(len(df)),
        'label_5': m5.predict(df),
        'label_10': m10.predict(df),
        'label_20': m20.predict(df),
        'label_40': m40.predict(df),
        'label_60': m60.predict(df)
    })
    sub.to_csv('./submit/' + path.split('/')[-1], index=None)

完整代码见👇:

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赛事学习

Datawhale、科大讯飞、天池联合发起的 AI 夏令营,第三期报名截止到8月15号,扫码申请。基于科大讯飞、天池最新赛事。

0cdbbd3db1dff60e3019e91b11b5059f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值