kaggle竞赛宝典 | 量化竞赛第一名的网络模型

2024-08-25 21:12

本文主要是介绍kaggle竞赛宝典 | 量化竞赛第一名的网络模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文来源公众号“kaggle竞赛宝典”,仅用于学术分享,侵权删,干货满满。

原文链接:量化竞赛第一名的网络模型

1 简介

今天我们重温Jane Street 大赛第一名的网络模型。该次赛事数据集包含了一组匿名的特征,feature_{0...129},代表真实的股市数据。数据集中的每一行代表一个交易机会,你需要预测一个动作值:1表示进行交易,0表示放弃。每笔交易都有一个相关的权重和响应,它们一起代表交易的回报。日期列是一个整数,表示交易的日期,而ts_id表示时间顺序。

该赛事的第一名选手采用的是AutoEncoder+MLP的网络模型。一起回顾学习一下。

2 模型

2.1 模型结构

模型主要由三个模块组成:

  1. 加入高斯噪音的Autoencoder模块;

  2. Decoder之后数据的原始Loss;

  3. 原始数据+Encoder数据的原始问题的Loss;

2.2 相关细节

  1. 使用自编码器创建新特征,并与原始特征连接,作为下游MLP模型的输入

  2. 在每个交叉验证分割中一起训练自编码器和MLP,以防止数据泄漏

  3. 向自编码器添加目标信息(监督学习),迫使其生成更相关的特征,并为梯度的反向传播创建捷径

  4. 在编码器前添加高斯噪声层,以进行数据增强并防止过拟合

  5. 使用Swish激活函数代替ReLU,以防止“死亡神经元”并平滑梯度

  6. MLP使用批归一化和Dropout

  7. 使用3个不同的随机种子训练模型,并取平均值以减少预测方差

  8. 仅使用在最后两个交叉验证分割中训练的模型(具有不同种子),因为它们已经看到更多的数据

  9. 仅监控MLP的二元交叉熵损失,而不是整体损失,以便早停

  10. 使用Hyperopt找到最佳超参数集

3 核心代码

def create_ae_mlp(num_columns, num_labels, hidden_units, dropout_rates, ls = 1e-2, lr = 1e-3):inp = tf.keras.layers.Input(shape = (num_columns, ))x0 = tf.keras.layers.BatchNormalization()(inp)encoder = tf.keras.layers.GaussianNoise(dropout_rates[0])(x0)encoder = tf.keras.layers.Dense(hidden_units[0])(encoder)encoder = tf.keras.layers.BatchNormalization()(encoder)encoder = tf.keras.layers.Activation('swish')(encoder)decoder = tf.keras.layers.Dropout(dropout_rates[1])(encoder)decoder = tf.keras.layers.Dense(num_columns, name = 'decoder')(decoder)x_ae = tf.keras.layers.Dense(hidden_units[1])(decoder)x_ae = tf.keras.layers.BatchNormalization()(x_ae)x_ae = tf.keras.layers.Activation('swish')(x_ae)x_ae = tf.keras.layers.Dropout(dropout_rates[2])(x_ae)out_ae = tf.keras.layers.Dense(num_labels, activation = 'sigmoid', name = 'ae_action')(x_ae)x = tf.keras.layers.Concatenate()([x0, encoder])x = tf.keras.layers.BatchNormalization()(x)x = tf.keras.layers.Dropout(dropout_rates[3])(x)for i in range(2, len(hidden_units)):x = tf.keras.layers.Dense(hidden_units[i])(x)x = tf.keras.layers.BatchNormalization()(x)x = tf.keras.layers.Activation('swish')(x)x = tf.keras.layers.Dropout(dropout_rates[i + 2])(x)out = tf.keras.layers.Dense(num_labels, activation = 'sigmoid', name = 'action')(x)model = tf.keras.models.Model(inputs = inp, outputs = [decoder, out_ae, out])model.compile(optimizer = tf.keras.optimizers.Adam(learning_rate = lr),loss = {'decoder': tf.keras.losses.MeanSquaredError(), 'ae_action': tf.keras.losses.BinaryCrossentropy(label_smoothing = ls),'action': tf.keras.losses.BinaryCrossentropy(label_smoothing = ls), },metrics = {'decoder': tf.keras.metrics.MeanAbsoluteError(name = 'MAE'), 'ae_action': tf.keras.metrics.AUC(name = 'AUC'), 'action': tf.keras.metrics.AUC(name = 'AUC'), }, )return model

4 参考文献

  1. https://www.kaggle.com/competitions/jane-street-market-prediction/discussion/224348

  2. https://www.kaggle.com/code/gogo827jz/jane-street-supervised-autoencoder-mlp

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

这篇关于kaggle竞赛宝典 | 量化竞赛第一名的网络模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106669

相关文章

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI