Datawhale夏令营第二期第一阶段学习笔记

赛题理解

建模目标:给定 t t t时间点的股价数据(买/卖五价、买/卖五量),预测 t + N f t+N_f t+Nf (即 N f u t u r e N_{future} Nfuture)时间点后的中间价相对于t时间点的变化方向( 0 0 0表示下跌幅度超过 a a a 1 1 1表示变化幅度不超过 a a a 2 2 2表示上涨幅度超过 a a a)。 a a a可以理解为对模型“分辨率”的要求。当$ N_f=5, 10$ 时, a = 0.0005 a=0.0005 a=0.0005,当 N = 20 , 40 , 60 N=20, 40, 60 N=20,40,60 时, a = 0.001 a=0.001 a=0.001

因此该赛题本质上是一个分类问题,其中输入模型的特征变量( X ( t − N p ,   t ] X_{(t-Np,\ t]} X(tNp, t],即 N p a s t N_{past} Npast)为历史股价(可包括从t-99到t时间点,即 N p ≤ 100 Np\leq 100 Np100),模型预测的目标变量( L a b e l t Label_t Labelt)为未来第 N N N个时间点中间价的变化情况( L a b e l t ∈ 0 , 1 , 2 Label_t \in {0,1,2} Labelt0,1,2)。

模型预测的好坏由Macro F1-score评价,这是一个评价多元分类模型的指标。对于一个一元分类模型的分类结果,可以由F1-score评价好坏。而

F 1 = 2 1 / P r e c i s i o n + 1 / R e c a l l F_1=\frac{2}{1/Precision+1/Recall} F1=1/Precision+1/Recall2

,其中Precision定义为正确判定为“真”的样本占所有判定为“真”的样本的比例,Recall定义为正确判定为“真”的样本占所有实际为“真”样本的比例。而在作用于多个分类任务的情况下(例如三个),对于每个分类任务的结果都可以计算Precision和Recall,记为 P 1 , P 2 , P 3 P_1,P_2,P_3 P1,P2,P3 R 1 , R 2 , R 3 R_1,R_2,R_3 R1,R2,R3。可以进一步求出 P m e a n = ( P 1 + P 2 + P 3 ) / 3 P_{mean}=(P_1+P_2+P_3)/3 Pmean=(P1+P2+P3)/3 R m e a n = ( R 1 + R 2 + R 3 ) / 3 R_{mean}=(R_1+R_2+R_3)/3 Rmean=(R1+R2+R3)/3。那么
M a c r o   F 1 = 2 1 / P m e a n + 1 / R m e a n Macro\ F_1=\frac{2}{1/P_{mean}+1/R_{mean}} Macro F1=1/Pmean+1/Rmean2
而类似的评价标准还有Micro F1-score。

解决一个机器学习问题的基本流程如下图所示。
在这里插入图片描述

通过分析问题明确模型选择和建模目标后,可以在python中继续完成建模和分析步骤。

库导入
  1. 交叉验证相关

    sklearn.model_selection.KFold

    sklearn.model_selection.StratifiedKFold

    sklearn.model_selection.

  2. 分类模型

    catboost.CatBoostClassifier

  3. 模型评价相关

    sklearn.metrics.accuracy_score

    sklearn.metrics.f1_score

    sklearn.metrics.roc_auc_score

    sklearn.metrics.log_loss

    sklearn.metrics.mean_squared_log_error

特征工程
  1. 当前时刻基本特征:

    “时间”信息中的【小时】和【分钟】

    买1价与卖1价的差值、各档中间价等

    寻找特征与特征之间是否有很强的相关性,如有,则可剔除特征或尝试做正交化

  2. 历史平移

    引入历史中上一阶段的数据

  3. 差分特征

    相邻数据点/阶段的比值、差分

  4. 窗口统计特征

    将数据划分为多个窗口(每个窗口长度固定),构建该时间窗口内的统计量(均值、中位数、标准差等)。

模型选择

由于是分类问题,可以使用树模型(XGBoost/Light GBM/CatBoost),其中CatBoost使用对称二叉树的结构,一方面能加速计算,另一方面又有一定的正则化作用。在训练数据上进行模型拟合,在验证集上进行模型效果验证,基本代码为:

from catboost import CatBoostClassifier
from sklearn.metrics import f1_score

model = CatBoostClassifier(iterations=1000, **params) # 实例化模型
model.fit(train_X, train_y, eval_set=(val_X, val_y)) # 模型拟合
# 模型预测效果反馈
val_pred = model.predict_proba(val_X)
F1 = f1_score(val_y, np.argmax(val_pred, axis=1), average='macro')
上分探索
  1. 投票法:使用多个模型(例如knn、svm)同时训练,通过soft voting让这些模型共同得出预测结果。
  2. 超参数优化:关于上述模型有多个超参数,可以使用sklearn.model_selection.GridSearchCV和RandomizedSearchCV获得一组更优的超参数。
  3. 深度学习:可以尝试例如循环神经网络的深度学习模型,这类模型在进行与时间序列有关的预测任务上可能有非常好的表现。
参考
  1. 【赛题baseline】https://aistudio.baidu.com/aistudio/projectdetail/6610961
  2. 【详解CatBoost】https://blog.csdn.net/weixin_49708196/article/details/124018649
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值