机器学习初学者:如何用黑科技做出 Kaggle 前 15 的成绩 ?

特别提醒:以下的工作都是建模学习,而不是严格的比赛对比。

一个机器学习小菜鸡,如何通过最新的机器学习技术,在一个大神聚集的 Kaggle 比赛中做出前 15 的成绩?

Part 1

大家好,我叫小王,第四范式的运营,机器学习的小菜鸡。 

今天老板给了我一个任务,公司花了几千万研发出先知机器学习平台,7 月就对外开放了,拿出去用用吧! 

怎么用呢?旁边的同事小澄是数据科学家,他每天都有很多业务做,据说国内好多知名的互联网公司,背后的个性化推荐系统都出自他的手笔。只是平时小澄比较低调,大家都不知道。

但作为一个运营,我是既没有数据,也没有场景,我该怎么办? 

对了,去 Kaggle 吧! 

Kaggle 是一个数据科学家的社区,里面有非常多的比赛案例,尤其是很多经典比赛,那是大神云集,其中也产出了很多对工业界有深远影响的算法和工程实现方式。 

抱着花了几千万研发出来的宝贝,选个最经典的比赛吧,就 Criteo Labs 举办的 Display Advertising Challenge 好了。 

这个比赛是关于点击率预估的比赛,它在很多机器学习的场景,例如计算广告、内容分发、电商推荐等都是非常有用的。而这个比赛的举办方也是诚意十足,数据都是脱敏的,总共有 4500 万行,特征包括 13 个数值特征、26 个类别特征,评估指标是 Logloss。 

所以它可以说是点击率预估问题上,最知名的一次比赛了。该比赛总的参数队伍有 700 多支,KDD Cup 的一些历届冠军也来参加了。 

当然,KDD Cup 的冠军们几乎拿下了前 15 名,《计算广告》的作者之一王超对排名给出了说明。(注:下图的本人是指王超)

那么多大神的比赛,作为小菜鸡的我,能做好吗?

Part 2

不管了,试试吧! 

Step 1:上传数据

首先我打开了先知平台,把比赛数据(criteoKaggle 是我们内部对数据的命名)拖了进去,大小是 2.03 GB。 

上传时间很快,不到 10 分钟就都上去了。 

Step 2:了解数据

看一眼数据,果然是脱敏的!反正我任何套路都看不出来。 

对于数据的解释,Kaggle 很是轻描淡写: 

  • Label,1 代表点击,0 代表没有点击; 

  • I1 到 I13 是数值特征; 

  • C1 到 C26 是类别特征,已经做了哈希化;

  • 当数据缺失的时候,以 empty 代替。

Step 3:数据拆分 

由于不知道怎么对数据拆分,我用了 IJCAI 2017 的论文,DeepFM: A Factorization-Machine based Neural Network for CTR Prediction 中对该比赛数据的处理方式,按照 9:1 的比例,随机拆分成训练数据和测试数据。 

Step 4:特征工程 

我想既然 Kaggle 那么轻描淡写的解释数据,那我也轻描淡写的做特征工程吧!

I1 到 I13 是数值特征,都连续化就好了,类似这样:

f_col_10 = continuous(col_10) 

C1-C26 是分类特征,离散化吧,类似这样:

f_col_38 = discrete(col_38) 

然后把 Label 填上,特征工程搞定! 

label = label(col_1) 

Step 5:模型调参 

这是个二分类问题,所以要选择分类算法。由于完全不懂数据什么意思,人工特征的方法几乎无效。 

而如果要提取并使用多层次特征,就需要靠机器了,所以我从算法库中拖出了“线性分形分类器”,也叫 LFC。

然后是设置参数,经过两三次实验,我把参数设定如下: 

  • 步长 = 0.05 

  • L1 = 0 

  • L2 = 2.5 

  • 轮数 = 4 轮 

  • 速度优先 

Step 6:模型评估 

20 分钟后结果出来了,Logloss = 0.4546629606398476,AUC =0.796。 

看了下排名,大概是 33 名。 

Part 3

可是,花了几千万研发出来的先知平台,就做出这样的成果? 

毕竟,我是机器学习小菜鸡,但先知平台可不是呀! 

不行,再调调… 

首先把所有的连续值,取个 log 加入特征,类似于这样 

f_col_2_log = continuous(log(col_2)) 

由于线性分形分类器并没有做特征组合,所以要想拟合非线性的数据,还得自己做特征组合。 

可是既然看不懂数据,怎么做呢?用 FeatureGo 吧! 

FeatureGo 也是第四范式自主研发出来的算法,能够自动计算出最佳的特征组合。

通过 FeatureGo 算了一下,最佳的特征组合做出来了,如下: 

f_combine_18_28=discrete(combine(col_18,col_28)) 

f_combine_20_37=discrete(combine(col_20,col_37)) 

f_combine_18_28_34=discrete(combine(col_18,col_28,col_34)) 

f_combine_20_31=discrete(combine(col_20,col_31)) 

f_combine_29_40=discrete(combine(col_29,col_40)) 

f_combine_18_20_28=discrete(combine(col_18,col_20,col_28)) 

由于多加了特征,所以正则项设置大一点,L2 =5,其他参数和上面的一样,又一个 20 分钟,结果好多了,Logloss = 0.45010290821784604,AUC = 0.801。 

再看一下排名,到第 15 名啦!

顺手看一看论文的结果,比它的 Logloss 小一点,加上 AUC 高一点,心满意足了!

Part 4

模型算是建完了,看起来很轻松,当然实际操作起来更轻松,但是背后的技术可是非常牛的。 

以至于,像我这样的机器学习小菜鸡,也可以做出这么牛的模型来。 

所以我们得到了这样的公式: 

我(机器学习小菜鸡) + LFC + FeatureGo + 一个周末 ≈ 世界 15 名(注:大神云集的比赛~) 

还是很激动人心的! 

顺便提下,刚才我用到的线性分形分类器(LFC)和 FeatureGo,是以第四范式的机器学习工程师罗远飞为主研发的。那个花了几千万研发经费的先知机器学习平台,背后有 3 名 ACM-ICPC 世界冠军,2 名 KDD Cup 世界冠军得主,这些人后面做了百度凤巢,搭建了今日头条的推荐系统,终于憋了个大招做出了先知机器学习平台。 

现在好消息是,先知平台对外开放啦! 

我们也是很有诚意的,刚才的实现过程已经放到了我们的平台。当然,每个人过来跑 4500 万的数据,对我们的服务器压力实在是太大太大太大了...... 

所以 4500 万的数据,我们随机抽取了 300 万放到平台中,其中 270 万作为训练,30 万作为测试。 

当然效果肯定是会差很多,跑了一下 Logloss = 0.45988947376760886,名次是 73 名。

好吧,还是可以拿个铜牌。 

如果你对我们感兴趣,请在这里申请先知平台https://prophet.4paradigm.com

注:以上的工作都是建模学习,而不是严格的比赛对比。

参考论文:https://arxiv.org/pdf/1703.04247.pdf

第四范式
第四范式

入门二分类问题特征工程个性化推荐系统机器学习
1
相关数据
机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

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

推荐系统技术

推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

特征工程技术

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

分类问题技术

分类问题是数据挖掘处理的一个重要组成部分,在机器学习领域,分类问题通常被认为属于监督式学习(supervised learning),也就是说,分类问题的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类。根据类别的数量还可以进一步将分类问题划分为二元分类(binary classification)和多元分类(multiclass classification)。

因式分解技术

在数学中,把一个数学因子(比如数字,多项式,或矩阵)分解其他数学因子的乘积。比如:整数15可以分解成两个质数3和5的乘积,一个多项式x^2 -4 可被因式分解为(x+2)(x-2)。

推荐文章
暂无评论
暂无评论~