阿水作者

数据竞赛Tricks集锦

本文将对数据竞赛的『技巧』进行全面的总结,同时还会分享下个人对比赛方法论的思考。前者比较客观,总结了不同数据类型下涉及到的比赛技巧;后者稍微主观,是我个人对解决比赛思路的总结。

2019年下半年对我触动很大的两个知识分享是:

  • 志峰现场讲解的《Tricks in Data Mining Competitions 》

  • 鱼佬知识星球分享的《Kaggle数据竞赛知识体系》

注:这两个分享的原始资料,不要向我要,我没有所有权。

碰巧最近也想将一些知识点整理下,本文将会参考上述两个分享的结构来整理我个人的知识点。当然我整理的会比较杂,会按照讨论点进行整理。

1 数据竞赛的流程

这是老生常谈的话题:数据分析主要目的是分析数据原有的分布和内容;特征工程目的是从数据中抽取出有效的特征;模型训练与验证部分包括数据划分的方法以及数据训练的方法;模型融合部分会简介模型融合的方法和实现方式。

我想表达的是:虽然数据挖掘在流程上可以看成是瀑布式的,但各个流程相互影响:比如数据分析可以挖掘出数据的分布规律,可以指导特征工程;特征的验证又可以反馈数据分析的结果。所以在实际比赛过程中这个流程是反复循环的,并不是一蹴而就的。

数据挖掘是一个循环的过程,并不是瀑布式的

一个特征不是拍脑袋想的,其最开始从EDA发现的,然后通过模型本地CV和线上PB得分进行验证。所以我对比赛的baseline代码分享一向比较谨慎,一是baseline是最终的代码并不能包括失败的尝试;二是很多选手并不会跑baseline代码只是为了排名,并不会尝试去理解代码的逻辑在数据竞赛流程上比较重要的一点是:你要知道你现在处于哪一个步骤,下一步应该做什么,还有哪些TODO和改进的地方。

1.1 数据分析

在拿到数据之后,首先要做的就是要数据分析(Exploratory Data Analysis,EDA)。数据分析是数 据挖掘中重要的步骤,同时也在其他阶段反复进行。可以说数据分析数据挖掘中至关重要的一步,它给之后的步骤提供了改进的方向,也是直接可以理解数据的方式。

拿到数据之后,我们必须要明确以下几件事情:

  1. 数据是如何产生的,数据又是如何存储的;

  2. 数据是原始数据,还是经过人工处理(二次加工的);

  3. 数据由那些业务背景组成的,数据字段又有什么含义;

  4. 数据字段是什么类型的,每个字段的分布是怎样的;

  5. 训练集和测试集的数据分布是否有差异;

在分析数据的过程中,还必须要弄清楚的以下数据相关的问题:

  1. 数据量是否充分,是否有外部数据可以进行补充;

  2. 数据本身是否有噪音,是否需要进行数据清洗降维操作

  3. 赛题的评价函数是什么,和数据字段有什么关系;

  4. 数据字段与赛题标签的关系;

以上细节可能在部分赛题中非常有必要,但具体操作是否有效还是要具体进行尝试。

1.2 赛题背景分析

在进行数据分析步骤前后,我们还需要对赛题的背景进行理解。赛题背景分析能够帮助我们理解赛题的任务,以及赛题数据的收集和评价方法。当然有些赛题的业务逻辑比较简单,容易理解;但有一些赛题的业务逻辑经过匿名处理,就会导致很难对赛题进行理解。

无论出题方给定了多少赛题介绍,参赛选手还是要自己从新理解一遍赛题,这样可以加深赛题的印象。有很多时候,赛题的一些细节会直接影响到最后的精度,而这些关键的细节是需要人工发现的。

总的说来赛题背景分析包括以下细节:

  1. 赛题业务场景是什么,数据是如何产生的,数据标签如何得来的?

  2. 赛题任务是什么,具体要解决的问题是如何定义的;

  3. 赛题任务是否有对应的学术任务?

在赛题背景分析步骤中最重要的是分析赛题是什么任务,赛题任务是什么问题,历史是否有类似的赛题,学术上是否有对应的问题。如果历史有类似的比赛/学术上对应的问题,那么直接copy解决方案来就OK了。

1.3 数据清洗

数据清洗步骤主要是对数据的噪音进行有效剔除。数据噪音可能有多个来源,来源于数据本身,来源于数据存储,或来源于数据转换的过程中。因为噪音会影响特征,也会影响最后的模型结果,因此数据清洗是非常有必要的。

数据清洗可以从以下几个角度完成:

  1. 对于类别变量,可以统计比较少的取值;

  2. 对于数字变量,可以统计特征的分布异常值;

  3. 统计字段的缺失比例;

1.4 特征预处理

特征预处理包括如下内容:

这一部分内容可以参考这个PPT:

https://www.slideshare.net/HJvanVeen/feature-engineering-72376750

1.5 特征工程

特征工程与EDA联系紧密,可以说是EDA具体的操作吧。因为数据分析本身就是“假设”-“分析”-“验证”的过程,这个验证的过程一般是指构建特征并进行本地CV验证。

可以从一下几个角度构建新的特征:

  1. 数据中每个字段的含义、分布、缺失情况;

  2. 数据中每个字段的与赛题标签的关系;

  3. 数据字段两两之间,或者三者之间的关系;

特征工程本质做的工作是,将数据字段转换成适合模型学习的形式,降低模型的学习难度。

2 结构化数据技巧

常规的特征工程已经人人都会,不过我还是建议可以学习AutoML的一些操作,互补学习下。至少在结构化数据领域,常见的操作它都会。

在结构化数据中,针对不同的赛题任务有不同的magic feature。比如用户违约风控类赛题需要考虑用户信息的交叉编码,用户流程等CTR类型赛题可以考虑target encoding,回归类赛题可以对对赛题目标进行标准化。如果赛题类型已知,则可以优先用此类方法进行求解。

如果赛题是匿名数据挖掘,则需要煎饼果子啥都来一套了(任何操作都试试)。此外在匿名数据和多模态数据赛题中,可以尝试下降噪自编码器

3 非结构化数据技巧

非结构化数据一定要找准baseline,一定要找准base model。

3.1 视觉类型任务

常见的视觉任务包括:
1. 图像分类(ImageClassification)
2. 图像检索(Image)
3. 物体检测(ObjectDetection)
4. 物体分割(ObjectSegmentation)
5. 人体关键点识别(PoseEstimation)
6. 字符识别

OCR(OpticalCharacterRecognition)

如果是简单的分类任务,可以直接手写CNN分类模型;如果是物体检测、图像分割、人体关键点检测、人脸识别等,优先找成熟的框架和模型。都9012年了,学深度学习不要只会分类。

在视觉类型赛题中,数据扩增非常重要,具体的数据扩增方法与具体的赛题相关。找好base model,找好数据扩增方法,基本上成功了一半。

3.2 文本类型任务

文本任务我不太熟,我只会BERT。文本任务设计到的技巧有:

  1. TFIDF

  2. 词向量

  3. GPU

在这个bert满天飞的时期,大家一定要保持对技术的耐心。不要只会bert,盲目的使用bert。bert虽然很好,但NLP的基础不能跳过不学。

在炼丹过程中还有一些细节需要考虑,比如参数初始化、batch size、优化器、未登录词的处理和网络梯度裁剪等,这些都是要自己根据任务进行总结的。

4 如何选择一个合适的数据竞赛?

最后我想聊聊如何选择一个合适的赛题。现在数据科学竞赛非常多,国内外大大小小的企业都可以组织各种类型的数据科学竞赛。竞赛多 了可选择的机会也多了,但对于每个参赛选手来说我们的时间和精力是有限的,所以选择一个合适的竞赛参赛就至关重要了。这里的合适的含义带有一定的主观色彩,我会从竞赛内容和个人收获两个方面来阐述。

首先数据竞赛的形式非常多:有的赛题要求选手开发应用,有的要求选手设计优化算法,有的要求选手提出解决方案。选择赛题一定要选择自己擅长或者想学习的赛题,一定要选择尽量靠谱公平的赛题(国内比赛偶尔会出现名次内定的情况)。此外还要根据具体的赛题日程和规则进行衡量,尽量选择日程安排比较紧凑合理的赛题,尽量选择换排行榜(切换不同测试集重新排名)的赛题。

此外赛题中也有不同的赛题类型,有结构化、语音、图像、视频和文本不同类型的。我期望大家是尽量能够多参加不同类型的赛题,不要受到数据形式的限制,多接触各种类型的算法和知识。其实很多知识点都是类似的,在语音识别和语音分类中的特征提取操作或许能够用在某些结构化数据上,CNN 操作也经常用在语音分类上,序列数据通常可以用词向量来编码。

此外由于数据竞赛本身具有一定的随机性(数据噪音、算法的随机性和优化过程的随机性),导致不同选手使用相同的数据和相同代码得到的结果在精度上都有差异。举个例子在 XGBoost 算法中有很多超参数可以调节,而不同的超参数可能会带来一定的精度差异。我建议大家尽量参加不是由随机性主导排名的比赛,尽量参加随机性小一点的竞赛。

最后还可以从赛题的奖励和赛制进行选择,我个人比较倾向于 TOP10 都有钱的比赛,同时国内比赛都有现场答辩的环节,所以比赛答辩城市也可以考虑下。

DataWhale
DataWhale

一个专注于AI领域的开源组织,汇聚了众多顶尖院校和知名企业的优秀学习者,聚集了一群有开源精神和探索精神的团队成员。愿景-for the learner,和学习者一起成长。

理论数据清洗数据分析数据竞赛特征工程
81
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

图像分割技术

图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像索赋予相同的编号。

数据分析技术

数据分析是一类统计方法,其主要特点是多维性和描述性。有些几何方法有助于揭示不同的数据之间存在的关系,并绘制出统计信息图,以更简洁的解释这些数据中包含的主要信息。其他一些用于收集数据,以便弄清哪些是同质的,从而更好地了解数据。 数据分析可以处理大量数据,并确定这些数据最有用的部分。

图像检索技术

图像检索系统是用于从大型数字图像数据库浏览、搜索和检索图像的计算机系统。 大多数传统和常见的图像检索方法利用向图像添加诸如字幕、关键字或描述之类的元数据的一些方法,以便可以对注释词执行检索。 手动图像注释耗时,费力且昂贵; 为了解决这个问题,人们已经对自动图像标注进行了大量研究。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

人脸识别技术

广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。 人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

数据挖掘技术

数据挖掘(英语:data mining)是一个跨学科的计算机科学分支 它是用人工智能、机器学习、统计学和数据库的交叉方法在相對較大型的数据集中发现模式的计算过程。 数据挖掘过程的总体目标是从一个数据集中提取信息,并将其转换成可理解的结构,以进一步使用。

特征工程技术

特征工程是利用数据所在领域的相关知识来构建特征,使得机器学习算法发挥其最佳的过程。它是机器学习中的一个基本应用,实现难度大且代价高。采用自动特征工程方法可以省去采用人工特征工程的需求。Andrew Ng 说“挖掘特征是困难、费时且需要专业知识的事,应用机器学习其实基本上是在做特征工程。”

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

噪音技术

噪音是一个随机误差或观测变量的方差。在拟合数据的过程中,我们常见的公式$y=f(x)+\epsilon$中$\epsilon$即为噪音。 数据通常包含噪音,错误,例外或不确定性,或者不完整。 错误和噪音可能会混淆数据挖掘过程,从而导致错误模式的衍生。去除噪音是数据挖掘(data mining)或知识发现(Knowledge Discovery in Database,KDD)的一个重要步骤。

降维技术

降维算法是将 p+1 个系数的问题简化为 M+1 个系数的问题,其中 M<p。算法执行包括计算变量的 M 个不同线性组合或投射(projection)。然后这 M 个投射作为预测器通过最小二乘法拟合一个线性回归模型。两个主要的方法是主成分回归(principal component regression)和偏最小二乘法(partial least squares)。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

降噪自编码器技术

当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE)

XGBoost技术

XGBoost是一个开源软件库,为C ++,Java,Python,R,和Julia提供了渐变增强框架。 它适用于Linux,Windows,MacOS。从项目描述来看,它旨在提供一个“可扩展,便携式和分布式的梯度提升(GBM,GBRT,GBDT)库”。 除了在一台机器上运行,它还支持分布式处理框架Apache Hadoop,Apache Spark和Apache Flink。 由于它是许多机器学习大赛中获胜团队的首选算法,因此它已经赢得了很多人的关注。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
和而泰・机器学习算法工程师
123