Introduction
我们发现自己在机器学习中使用表格数据的时间占90-95%。 在机器学习黑客马拉松中,这个数字甚至更高。 你还记得上一次你在做一个你想过的挑战吗 - “我之前没见过这种数据!”
使用图表数据是一项独特的挑战。 这就是为什么我们很高兴上个月与Hike合作主持ML Hikeathon。 我们的社区也喜欢它 - 来自世界各地的5300多名数据科学家参加了为期9天的活动!
通过参与这个黑客马拉松,有很多值得欣赏和获益,包括:
- 处理和使用大数据
- 如何处理非表格数据问题
- 在不同的域上工作 - 我们经常遇到图形问题
- 了解图表在行业环境中的运作方式 - 远足是其领域的领导者之一
如果你没有参加ML Hikeathon,你错过了很多乐趣! 但不要担心 - 转向我们的 DataHack platform 并参加即将到来的黑客马拉松和练习问题。
About the ML Hikeathon
The ML Hikeathon 是一场跨越整整9天的马拉松比赛! 黑客马拉松于2019年3月30日午夜上线,并于2019年4月7日关闭。
鉴于问题陈述的性质,它肯定会花费一些时间来理解数据科学家的要求并构建他们的解决方案。 这就是让9天黑客马拉松如此独特的原因 - 你有时间思考并试验你的方法 - 但挑战的程度上升了几个档次。
在这里,我必须向那些提出顶级解决方案的数据科学家致敬。 这些数据科学家展示的创造力和知识是崇高的。
Understanding the ML Hikeathon Problem Statement
远足是一个受欢迎的社交平台。 预测其网络中的链接构成了向其用户推荐新朋友的基础。 反过来,高质量的建议有助于在现有用户之间建立新的社交联系。
因此,问题陈述涉及为远足社交网络上的链接预测建立模型。 此链接预测模型可以帮助他们在加入平台时找到朋友,从而提高新用户的保留率。 换句话说,目的是开发一种算法,该算法可以预测远足用户是否将与他/她的电话联系人列表中的另一个远足用户聊天。
The evaluation metric used was Area under the Curve (AUC).
Datasets Provided for the Hikeathon
本次比赛的数据是Hike社交图的一部分和用户的匿名特征。 向与会者提供了三个文件:
-
Train.csv
- node1_id和node2_id:列车集包含在彼此的电话地址簿中的用户的匿名标识符
- is_chat表示他们的聊天关系
- 如果第一个用户向第二个用户发送聊天消息,则is_chat为1,否则为0
-
Test.csv
- 测试集包含一个id和一对节点 - node1_id,node2_id
- 参与者需要预测测试集上的is_chat
-
User_features.csv
- 此文件包含所有节点/用户的一些匿名功能
- f13是一个分类功能,f1-f12是序数功能,每个功能代表用户在过去31天内对应用程序执行某些特定活动的天数
Winners & their Approaches
好吧 - 让我们为赢家举手! 这些获胜者使用不同且独特的方法来提升排行榜。 以下是黑客马拉松排行榜的前三名获胜者:
- #1 - Kamakal Vectors
- #2 - Tezdhar
- #3 - SVJ和Datageek
让我们来看看他们每个获胜的解决方案。 我们用赢家自己的话来说明这些方法。 他们需要学习很多东西,所以记笔记!
我们强烈建议您采用这些方法,因为它们将有助于塑造您对未来黑客马拉松的思维方式。 通过数据集不可知的镜头来看这些方法。 了解一个胜利者如何构建他们的思维方式来接近黑客马拉松,就像这个一样棘手。
Rank 3: Sourabh Jha and Datageek
特色工程是Sourabh和Datageek的游戏名称。
验证策略:
10倍交叉验证
特征工程:
- 我们首先简单地将匿名特征与node_1和node_2上的列车数据合并
- 对于每个匿名特征,我们通过计算node1和node2之间每个特征的差异来创建新特征(fi_x-fi_y)
- 经过初始模型训练后,我们确定了匿名特征中的前五个特征 - f3,f6,f9,f12和f13。对于其中的每一个,我们计算了每个节点内的成对差异(fi_x-fj_x,fi_y-fj_y)
- 余弦相似度:我们计算了两个节点的匿名特征向量之间的余弦距离
- 我们还计算了相应匿名特征的每个节点的和,均值,最小值和最大值
基于图形的特征(有向图):
- 我们将数据分成10倍。对于每个折叠,我们使用其他9折来构建图形。我们使用整个列车数据来构建测试集的图形
- 无论is_chat是1,我们都建立了直接图和无向图
- 定向图用于创建每个节点的页面排名和平均邻居等特征以及页面排名和平均邻居之间的差异
- 有向图也用于识别单侧连接。 90%的连接是双向的,所以这是一个重要的特征
- 此外,还计算了与每个节点之间的总连接(以及双向连接)及其每个节点的平均值
基于图形的功能(无向图):
- 我们使用无向图计算连通分量以识别图中的派系。还计算了每个组件中的节点计数和平均连接等附加功能
- 计算每个节点的聚类系数
- 我们还计算了常见邻居的数量和Jaccard相似度(针对有向图和无向图)
使用所有对的功能:
- 我们不完全确定如何生成数据(node1-node2对),但我们假设每对数据代表node1的电话联系人
- 这使我们能够创建更多类似于图形功能的功能,如常见联系人,联系人数量,双向联系人等。
他们分享的更多功能想法是:
- 我们发现近一百万对是自我连接
- 此类连接仅有0.1%的is_chat可能性与数据中的3%相比
- 我们的假设是这些客户/设备/ SIM卡是相同的,因此不太可能互相聊天
模型:
- 步骤1:我们使用LightGBM来训练模型
- 步骤2:由于数据量巨大,我们在20%的数据上运行了大部分迭代。这有助于我们快速迭代并测试更多功能
- 第3步:进行最终提交。最终提交的文件是在200GB机器上对90%的数据进行了培训
由于数据量大,他们使用了一台64GB RAM和16个核心的大型计算机。
等级2:Tezdhar
验证策略:
分层K-Fold交叉验证
特征工程:
-
用户活动功能:使用了node1和node2用户的所有活动功能。所有这些特征的所有神经网络简单地除以31以使它们在0-1范围内
-
节点 - 节点特征(图形特征):公共链路预测指示符,例如(节点计数(节点1和节点2),公共邻居,Jaccard系数,Adamic Aldar,资源分配,优先附着,总邻居,邻居距离和邻居共同邻居)计算4个不同的图。四个图如下:
- 列车和测试中所有节点对的无向图(这将捕获电话簿集群)
- 来自node1 - > node2的定向图,用于列车和测试中提供的所有对
- 已聊天的节点的无向图(is_chat == 1)。这些图的特征以交叉验证方式映射,以避免信息泄漏
- 已聊天节点的定向图。同样,这些是以交叉验证的方式计算的。
- 此外,在分析过程中,发现一些用户具有自我边缘(因为在两个用户中都是相同的节点)。重新计算了删除这些节点的功能。对于梯度增强模型,所有特征均按原样使用,对于神经网络模型,使用RankGauss(sklearn的分位数变换器,输出分布设置为正常)转换特征
-
交换节点;如果node1与node2聊天,则node2与node1聊天的变化非常大。此功能以交叉验证方式生成
-
Node2vec:该库用于生成在神经网络模型中使用的node2vec向量
模型:
- Gradient Boosting模型:使用稍微不同的特征集训练两个LightGBM模型
- 神经网络:具有3层的金字塔状神经网络(在连接所有特征之后)被训练2次
- 最终模型是来自2 LightGBM和1 Neural Net模型的概率的加权平均值
这使他在私人排行榜上得分为0.938988506。一个辉煌的结果!
等级1:Kamakal矢量
以下是他们的方法的简要概述:
- 我们的解决方案在很大程度上依赖于负面欠采样
- 我们最终使用了大约5%的负面例子(is_chat == 0)
- 我们没有注意到性能有任何下降
- 这种方法在两个方面帮助了我们:
- 快速实验:由于减少了培训时间,我们能够测试出许多不同的功能
- 我们的最终解决方案是在不同的5%阴性样本上训练的多个模型的混合。这有助于我们获得更强大和更好的模型
验证策略:
五倍随机分层CV
特征工程:
在我们爬上排行榜时,功能创建起到了非常重要的作用。我们在最终模型中使用了三组主要功能:
- 用户活动功能
我们获得了13个维度的用户活动矩阵,用于根据活动创建用户相似度的指标 - 图形功能
- 用户社交圈功能
图表特点:
我们从数据集中创建了三个图:
- 无向联系图
- 定向接触图
- 聊天图(使用is_chat = 1捕获数据)
使用的一些指标包括:
- Jaccard系数
- 资源分配指数
- 节点的数量(在有向图的情况下,进/出度)
用户社交圈功能
- 这些变量对于提升模型性能至关重要
- 在节点对之间计算相互节点的数量。这个数字越高,他们互动的机会就越大
- 每个节点对交互多少个相互节点?我们来举个例子:
- 我们必须找到A和B之间的聊天概率。 X,Y,Z是A和B之间的相互接触
- 现在,如果A&B与这三个人聊天,那么他们互相聊天的可能性就更高
- 如果他们不与任何人聊天,那么X,Y,Z很可能是客户关怀号码
- 聊天中涉及的每个节点有多少时间?要让A和B有更高的聊天机会,他们也需要与其他人聊天
- 邻居有多健谈?如果这两个节点的数量都很高,那么它表明它们是一个更健谈的邻居的一部分,因此聊天的机会更高。
- 反向链接,此功能捕获了列车和测试共享数据中存在的反向关系。
最终型号
- 最终模型是10个LightGBM分类器的集合,每个模型都安装在五倍随机分层CV上
- 上述每个模型都建立在具有负欠采样的不同数据子集上
这为他们提供了第一名和AUC分数0.940911。再次祝贺我们的获奖者!
Key Learnings or Takeaways
以下是ML Hikeathon的两个关键要点:
- 比赛开始时,一些参与者发现很难处理如此庞大的数据集。 所以这是我们大多数人学到的新东西 - 整个数据不用于培训。 一旦提交已经完成,特征工程就会在以后大量使用
- 获奖者通过使用有向和无向图来展示一些非常惊人的功能。 就验证策略而言,大多数采用分层K倍验证
End Notes
与这些获胜者进行了很好的互动,并了解他们在比赛中的做法。 我们再次强调了特征工程。 创建新功能通常是排行榜中多个职位之间的差异并非巧合。
希望您能够评估您错过的内容。 查看所有即将举行的比赛这里。 参与其中并提高您的知识以及该领域的专业知识。 在下一个黑客马拉松中见!