Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

从全球千余支队伍中脱颖而出,BDC 冠军团队是如何做用户预测的

 历时近 3 个月,2018 年中国高校计算机大赛——大数据挑战赛(下称「大数据挑战赛」)落下帷幕。最终,厦门大学的 lambda 团队夺取冠军获得 30 万元奖金。

根据决赛 10 支队伍的答辩内容,我们梳理整理了冠军、亚军两支团队的答辩成果及评委点评。

以下,enjoy!

全球千余团队参与,专注活跃用户预测

本次大赛由快手和清华大学联合承办,基于快手提供的脱敏和采样后的数据信息,预测快手平台上未来一段时间的活跃用户。快手同时提供给选手安装了多种机器学习平台的云服务器,供选手研究机器学习算法。

参赛队伍需要设计相应的算法进行数据分析和处理,比赛结果按照指定的评价指标使用在线评测数据进行评测和排名,得分最优者获胜。决赛中 10 支队伍答辩后,最终成绩综合复赛 B 榜成绩和现场评委打分两部分生成。

本次大赛面向全球高校在校生开放,并鼓励高校教师参与指导,共有来自全球 10 个国家及地区,439 所高校,1392 支队伍,2751 位选手,15803 次提交参与评审。经过层层筛选激烈竞争,现场 10 支队伍进入决赛环节。

10 支队伍来自清华大学、北京邮电大学、哈尔滨工业大学、厦门大学、武汉大学、同济大学、西北大学、福州大学、东南大学、重庆邮电大学、山东大学、西安电子科大、杭州电子科大。

参赛队伍解题思路及算法亮点干货分享

冠军队伍——lambda 思路自述

团队介绍:

Lambda 团队由厦门大学的一名同学组成,颜晶。值得一提的是,颜晶本专业为金融专业,现读研二,自学机器学习半年时间。

解题思路:

本题是基于 30 天内用户使用快手 app 的相关行为(特别强调:数据为采集和脱敏后),预测未来 7 天内用户是否活跃的概率,评价指标为 AUC。

首先本题没有标签,因此需要自己进行标注标签。首先想到的是根据题目要求,用 7 天进行自己标注,但是 7 天噪音大,因此可以尝试使用更少的时间进行标注,比如 6 天、5 天等。最后结果表明用 6 天进行标注能得到更好的结果。有了训练集和标签就可以选择模型:一种是将时间序列进行面板化,使用传统机器学习(LGB or XGBoost);第二种是使用 RNN(many-to-many)。

算法亮点:

此次比赛主要使用了 RNN 模型。RNN 分为三类:many-to-one、one-to-many、many-to-many。我们选择了 many-to-many,这相当于对数据一天一天进行滑窗,可以对数据集进行扩充。

首先我对用户按注册进行分类,在通过采样策略,将数据集输入到 GRU 里面去:

 此外我们对数据集进行 padding,这样可以在训练集中随机选择用户输入到的 GRU 中,其中也对注册早的用户赋予更高的概率,这样保证模型能够得到更多的信息。

 在优化时,使用了快速集合集成 fast geometric ensembling(FGE),这样可以无成本的获得到多个差异性模型,能得到更好的结果。

评委点评:

与其他参赛队伍使用复杂的特征工程+多模型融合方案不同,lambda 队仅用十几个原始特征+RNN 单模型就拿到了最好的成绩。RNN 模型的难点在于调参和学习方法的调整,选手调研了多种优化方法,如余弦退火、warmrestarts、快照集成和快速几何集成,最终使得模型稳定收敛。选手的方案再一次证明了神经网络可以从原始数据中自动发现规律,可以节省大量的特征工程工作。同时模型复杂度较低,可以部署到线上生产环境。

比赛感想:

将近 3 个月的比赛从中,我收获很多。首先是可以多尝试些方案,虽然各大比赛中冠军基本是 LGB or XGBoost,NN 一直作为融合补充所用,这可能只是那么数据集更适合 LGB 模型。其实在比赛开始时,我们并不是一开始就选择了 RNN 模型,也走了很多弯路。在初赛中,由于数据量较小,RNN 模型的成绩在 B 榜排在 200 名以后。复赛数据集扩大后,RNN 有了很好的效果,才一直不断的优化 RNN,算是踩对了坑。

此外,在比赛中找到一致的线上与线下是非常重要的,这样不仅能保证得到的模型是稳定的,且能更有效利用提交次数。

最后,在国内大数据比赛中,夺冠的有以下几种情形:对数据理解透彻、很多模型融合、模型创新等。虽然模型创新很难,但是当你将模型构建起来时,也预示着,别人是很难追上你了。

亚军队伍——小小蚂蚁队思路自述

团队介绍:

小小蚂蚁队由两位同学组成,分别来自西北大学的曾凯,计算机应用技术专业,研一在读,和福州大学的冉宪东,大三在读,电子信息工程专业。

解题思路 :

1、滑动窗口

题目是给定 1-30 天时间内的四个日志数据(特别强调,数据为采集和脱敏后),通过这些数据来预测未来一段时间(即 31-37 天)活跃(即出现在以上四个日志中任意一个)的用户。经过分析,判定该问题是一个典型的二分类问题,也就是说给定一个用户 id,让我们来预测这个用户是活跃或者不活跃。那么首先考虑如何构造出线上线下的训练集以及它的标签,还有线上线下测试集以及它的标签。

 图(一)

如图一所示,我们采用滑动窗口的算法思想,给定 a 到 b,也就是 1-30 天区间,我们定义 n 和 m,其中 n 是构造训练集或验证集的区间,紧接着的后 7 天是构造标签的区间。其中,n 小于等于 23,m 大于等于 0。这样满足这种条件的我们可以滑动出很多个窗口,理论上讲这样我们训练集的样本可以构造出很多个,但是经过仔细分析与思考,我们总结了窗口必须满足以下两个条件:

保持线上与线下窗口间隔一致。

满足数据分布的周期性。

我们看第一点,假如我们以构造训练集越多越好的原则去构造,那么变长窗口当然是 1-2,1-3,1-4,一直到 1-23,但是这样会出现一个问题,也就是线上和线下的窗口间隔不一致,这样会导致线上和线下构造的特征数据分布不一致,很容易出现过拟合现象。因此我们从后往前推,使得线上线下得窗口间隔一致,还是以构造训练集最多原则构造窗口,那么这样构造就是 1-30,1-23,1-16,1-9,1-2(为什么间隔是 7 呢,因为这 7 天是用来构造 label 的,也就是线上和线下最小的间隔)。

 图(二)

第二个原则,我们是根据图二得出的规律,也就是窗口还需要满足数据分布的周期性,可以看出,每个窗口每天的行为次数都是周期性的增长,除了 1-2 这个窗口之外。因此 1-2 这个窗口就被去掉了,并且 1-2 这个数据窗口太小,信息量太小,显然也就舍去了。

表(一)

同样的道理,所以最终我们构造出了两个可行的窗口,如表一所示,第一个是变长窗口,线下训练集是 1-9,1-16,线下验证集是 1-23。线上训练集是 1-9,1-16,1-23,线上测试集就是 1-30。另一个是定长窗口,线下训练集是 1-16,8-23(4/5),验证集是 8-23(1/5),线上训练集是 1-16,8-23,线上测试集是 15-30。

后来我们最终确定的窗口为变长窗口,主要有三个原因:

第一,这样我们可以预测全范围的用户,也就是注册表里所有的用户,而定长窗口不能。

第二,这样有利于线下验证集的构造,因为数据分布基本一致,保持线上线下一致,而相比定长窗口的切分窗口数据好。

第三,变长窗口构造的训练集相比较定长窗口多

2、用户分类

构造好了数据集的划分,我们再进一步对数据进行探索,因为是对用户进行是否活跃预测,那么我们研究的对象主体是用户,于是,我们就通过日志数据对用户类型进行分析。 

图(三)

如图三所示,我们发现每天的行为次数从第一天开始每隔五天就会有两天突增,我们猜测这两天应该是周末,说明有个用户群在周末这两天比较活跃,而在周内相对活跃次数较少。这部分用户也许是上班族等,他们得生活规律有周期性。21,22,23 这三天也比较多我们猜测是节假日三天。

 

图(四)

从图四我们可以看出,每天的注册人数也是符合图一的规律,但是到了第 24 天,注册量出奇的高。于是我们单独拿出这一天注册日志的数据,分析发现,这些注册用户的设备类型和注册类型一模一样,于是我们就画出了如图五这样的图。

 图(五)

横轴是注册类型和设备类型组合,纵轴是注册用户数量,发现确实有几种组合类型的注册数量很高,我们把这类用户定义为异常用户,这类用户有以下两个个特点:

注册类型和设备类型一样,并且是一天之内注册数量相对正常注册量出奇的高(设定阈值γ,只要这种异常用户注册量大于γ就符合)。

这些用户在随后的天数之内都没有活跃,只在当天活跃

我们推测这类用户是因为快手的某种活动引流进来的用户,并且这类用户是那种类似于黄牛的机器用户,最终我们根据这种规则找出了每天的异常用户。掌握了这些用户群的特点之后,这样更有利于我们进一步的特征构造与模型构建。 

图(六)

于是根据上面数据的进一步探索,我们把用户分为两大类,如图六所示,第一类是正常用户,我们可以用模型去预测活跃的概率。第二类是异常用户,我们可以通过规则去筛选预测,也就是符合异常规则的用户我们把预测概率置为 0。

总结起来,这样对用户划分主要有两大好处,第一就是使得预测异常用户更加准确。第二就是剔除之后,减少训练集噪声,增加正常用户模型预测准确率

3、特征构造

现在我们数据集划分确定了,用户也基本分析清楚了,就开始根据变长窗口的特点以及用户群的特性构造特征。特征构造方面我们主要从『时间』 和『空间』维度的层面构造。

时间维度基本侧重的是单个日志来提取的有关的时序特征,概括性的分类如图七所示。

 图(七)

空间维度就是题目中给的四类日志,它们从不同方面也就是不同的维度反映着用户的不同特征,比如用户的活动日志,从这方面提取的大部分特征是有关用户活动方面的特征,因此我们利用空间维度与维度之间的差异主要来构造出交叉特征。如图八所示

图(八)

4、模型构建 图(九)

模型方面,主要对两个单模型进行单独训练,然后对其预测结果进行加权融合。由于 Lightgbm 模型和神经网络模型差异性大,一个是 boosting 的集成思想,一个是采用神经元激活的思想的,因此我们对其两个模型预测的结果进行加权融合,提升的效果会好。

算法亮点:

TF-IDF 特征的构造:

TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF 是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

这样我们把一个 authorid 比作一个字词,根据 authorid 在日志中出现的次数从大到小排列,取前 n 个作为语料库。这样与 userid 交互的有多个 authorid,就能计算出对应的 tf-idf 值,我们取前 m 个,不够的补 0,多的省去,这样就构成了 m 维特征。

这个特征就相当于对每一个用户在窗口内进行了编码,表征着这个用户与 authorid 的亲密程度,用于区分特定的用户群体。例如,一个人气高的作者一般是经常活跃的,用户与该作者交互次数越多,此用户对应该作者的 tf-idf 的值也越大,那么该用户活跃的概率也越大。

比赛感想:

此次比赛提供的数据为快手 app 真实数据的脱敏采集后的数据,更结合实际业务,使得我们更应该结合用户使用快手 app 的实际场景,从而对用户的特性有更深的了解以及用户群有更深更细的划分,使得特征的构造更加合理与有效。同时,在比赛过程中,竞争比较激烈,但是一定要坚持下去,不到最后一刻决不放弃,一定不能只停留在想象方面,有想法一定要及时去实现,也许那个点子就是提分的关键。

评委点评:

小小蚂蚁队在充分理解业务场景、对数据进行细致的分析后,用丰富的特征来表达业务场景。在构建训练集的过程中,对比了多种滑动窗口方案。针对业务场景中出现的异常噪音,能够细致分析并妥当处理。选手使用的模型为 gbdt 模型,在实际业务场景中,易于增加特征做扩展,可以持续迭代优化。

大赛点评:

评委对此次大赛点评:

参赛选手在历时 100 多天的比赛中,遵守比赛相关规定,公平竞赛。本届赛题提供给选手的是经过采样和脱敏后的真实行为数据,在赛题设计上并不限制选手使用分类模型求解。选手在问题转化的过程中,方法各有不同,在训练集构造、标签构建、特征抽取等环节均有创新。冠军队 lambda 使用 RNN 模型,从原始数据中学习规律,该方法具有通用性和实用性。

第三届 BDC 评委介绍:

此次大赛共有七位评审,其中四位是高校老师,三位是快手的技术专家。分别是,教育部高等学校教学指导委员会委员,大赛专家委员会副主任臧斌宇教授。北京大学教授、大数据挑战赛专家委员会委员王腾蛟教授。哈工大教授、大数据挑战赛专家委员会委员王宏志老师。代表清华主办方的清华软件学院党委副书记王朝坤老师。快手的技术专家李森栋、王哲、林涛。

快手科技技术专家李森栋,曾先后工作于社区科学部、海外事业部,参与推荐系统的迭代开发以及推荐模型的研究和实现工作。在本次大赛中,担任竞赛专家委员会委员,负责大赛的赛题、数据和评测等工作。

王哲快手科技技术专家,在快手社区科学部负责推送和新产品的推荐系统和算法策略。

林涛快手科技技术专家,在快手社区科学部负责推荐系统架构,主要包括搭建机器学习平台、开发线上高性能的一些模型触发、预估模块等工作。

工程大数据挑战赛快手清华大学
3
相关数据
机器学习技术

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

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

过采样/欠采样技术

在信号处理中,过采样(英语:Oversampling)是指以远远高于信号带宽两倍或其最高频率对其进行采样的过程。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

推荐系统技术

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

神经网络技术

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

特征工程技术

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

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

反比文档频数权重评价方法技术

tf-idf(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技术。tf-idf是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。tf-idf加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了tf-idf以外,互联网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜索结果中出现的顺序。

噪音技术

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

分类问题技术

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

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

特征抽取技术

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

XGBoost技术

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

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