目录
0. 承前
如果想更加全面清晰地了解金融资产组合模型进化论的体系架构,可参考:
0. 金融资产组合模型进化全图鉴
1. 竞赛背景与目标
1.1 竞赛背景
数据结构与竞赛要求详情请查看,在此不赘述:
Optiver - Trading at the Close
1.2 Optiver简介
Optiver是全球领先的做市商之一,此次竞赛围绕股市收盘阶段的交易展开。在美股市场中,收盘价的确定是通过收盘拍卖(Closing Auction)机制完成的,这个阶段的价格预测对于机构投资者具有重要意义。
1.3 竞赛目标
预测股票在收盘拍卖阶段的价格变动。该阶段具有以下特点:
-
收盘竞价机制
- 时间窗口:在交易日最后10分钟进行
- 订单累积:系统持续接收买卖订单但不立即撮合
- 价格发现:根据供需关系计算最终收盘价
- 订单类型:可以提交限价单、市价单和收盘定价单
-
预测目标
- 基于实时市场数据,预测股票价格到收盘时的变化百分比
- 预测范围从常规交易时段延伸到收盘竞价阶段
2. 竞赛项目框架
3. 代码实现详解
3.1 数据预处理模块
- 数据加载与预处理(Data Loading)
import gc, os, time, warnings
from itertools import combinations
from warnings import simplefilter
import joblib
import lightgbm as lgb
import numpy as np
import pandas as pd
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import KFold, TimeSeriesSplit
import polars as pl
import pickle
# 基础配置
warnings.filterwarnings("ignore")
simplefilter(action="ignore", category=pd.errors.PerformanceWarning)
# 运行模式配置
is_offline = False
LGB = True
NN = False
is_train = True
is_infer = True
max_lookback = np.nan
- 读取训练数据并进行基础清洗
df = pd.read_csv("/kaggle/input/optiver-trading-at-the-close/train.csv")
df = df.dropna(subset=["target"])
df.reset_index(drop=True, inplace=True)
df_shape = df.shape
df['target_shift1'] = df.groupby(['stock_id','seconds_in_bucket'])['target'].shift(1)
- 内存优化与数据类型转换
def reduce_mem_usage(df, verbose=0):
start_mem = df.memory_usage().sum() / 1024**2
for col in df.columns:
col_type = df[col].dtype
if col_type != object:
c_min = df[col].min()