kaggle Foursquare冠军方案分享(含Code)

Foursquare - Location Matching冠军方案

简 介

Foursquare - Location Matching是一个POI匹配大赛,平时当我们寻找附近的餐馆或计划在未知地区出差时,我们期望得到相关的、准确的信息。在全球范围内维护高质量的数据是一项挑战,其影响超越了导航。企业决定在新网站上进行市场扩张,分析竞争格局,并根据位置数据显示相关广告等等。

本次比赛中,选手需要使用一个包含150多万个地点的数据集,条目经过大量修改,包括噪音、重复、无关或不正确的信息,我们需要生成一个算法,预测哪些地点条目代表相同的兴趣点。每个地点条目包括名称、街道地址和坐标等属性,最后将以最大的准确性确定匹配项。

更详细的比赛内容介绍大家可以参考比赛官网。

https://www.kaggle.com/competitions/foursquare-location-matching/overview/description

此处,我们按照第一名的方案分享,进行学习,整体的流程很传统,

从候选集的构建(最大化recall)到中间提升精度(最大化precision),通过模型的融合以及后处理进行进一步的效果提升,已经最终通过leak再进一步大幅提升效果。

第一名的分享中除了流程的学习以及中间模型特征的细节,关于赛事Leak的发现也非常值得学习。

目前代码已经开源,有兴趣的朋友可以通过下面的链接进行完整的学习:https://www.kaggle.com/code/takoihiraokazu/sub-ex73-74-75-ex104-115-90-101-merge-train3

第一名方案介绍

方案的框架如下。

kaggle Foursquare冠军方案分享(含Code)

整个方案的流程可以大致分成4部分。

  1. 构建候选集;
  2. 降低候选集的数目;
  3. 提升模型京都;
  4. 后处理;
  5. Leak信息处理;

候选集构建

通过经纬度的信息以及描述信息分别筛选出100个候选集合。

对于每个id,我们为以下两种方法中的每种方法选择了100个候选项

  • 经纬度欧几里得距离

  • 名称Embedding的Cos相似性

    • 模型:基于bert的多语言未分类

    • knn:cuml

为候选对象生成特征。此处,为了节省内存,只生成了几个特征,例如名称的jaro距离和类别的jaro距离。

使用LightGBM,对上述两种模式中的每一种进行了预测,两种情况分别剩下前20个候选,总共约40个候选。为了减少推理时间,此处使用了Forestinference。

  • 最大IOU:0.979

精化候选数

构建大约120+特征,主要基于开源的Notebook,https://www.kaggle.com/code/ryotayoshinobu/foursquare-lightgbm-baseline,包括:

  • 特征相似性特征,如Levenshtein距离和Jaro-winkler距离;
  • 使用id作为键的字符相似性统计(最大、最小、平均);
  • 这些统计数据的比例;
  • 使用经纬度的欧几里得距离
  • 基于奇异值分解的名称embedding降维
    • 模型:基于bert的多语言未分类

LightGBM(推理:Forestinference)

  • CV:0.875
  • 阈值:0.01

候选数减少到10%左右。

提升精度

xlm-roberta-large and mdeberta-v3-base and Catboost

我们怀疑训练和测试之间存在重叠,但没有直接证据,因此我们创建了训练过度拟合模型以增加LB,同时创建了增加CV的模型。在找到训练集和测试集重叠的证据后,我们只需要专注于提高仅存在于测试中的数据的准确性,因此我们最终使用了CV最高且不过度拟合训练数据的模型(例如,不要增加epoches,使用FGM等)

  • catboost

    • 使用了与第二个步一样的特征
    • CV:0.878
  • xlm-roberta-large

    • 文本:name + categories + address + city + state

    • 结合2nd的一些功能(约70)

    • 3个epoch

  • mdeberta-v3-base

    • manhattan distance, harversinie distance, etc
    • 文本:name + categories + address + city + state
    • 结合第二步的特征和一些新的特征(约90)
    • 使用FGM和EMA训练

    • 4个epoch

    • CV:0.907

  • 集成:2nd lgb * 0.01 + 3rd catboost * 0.32 + 3rd xlm-roberta-large * 0.29 + 3rd medebeta-v3-base * 0.38

    • CV : 0.911
    • 阈值:0.5

后处理

  • 比较两个id的匹配,如果公共id从任意一侧超过50%,则合并两个id的匹配
  • 使用xlm-roberta-large对上述新创建的配对进行预测。
  • 阈值:0.02
  • CV:0.9166

Leak&效果

  • 和train合并,通过name,lat,lon将训练集和测试集合并;

  • 增加TP(true positive),

    • 创建以POI为key的所有真正pairs(1);
  • 降低FP(false positive)

    • 移除和训练数据id绑定的ID(2);
    • 移除和训练数据id绑定的ID以及和训练数据不绑定的数据(3);
  • 通过使用LB的信息,验证增加train-train TP,移除train-train FP,移除train-test FP的结论;

不和训练集进行merge : 0.900

  • (1) : 0.943
  • (1) + (2) : 0.957
  • (1) + (2) + (3) : 0.971

由于我们不确定(3)是否适用于Private数据,我们选择(1)+(2)和(1)+(2)+(3)作为最终提交。

关于Leak的发现

出于以下多种原因怀疑Leak:

  • CV和LB之间有一个很大的差距。最大IOU已经很高,因此这种幅度的差距是不正常的;
  • 过度拟合等模型LB分数更高。例如,没有dropout或多个epoch的培训。多epoch训练会导致CV分数下降。
  • 随着CV的增加,CV/LB相关性消失。通过使用FGM训练NNs,我们的CV有了很大的改善,但LB更差。
  • 主办方说:“我们包含了从测试集中选择的几个示例实例。”五个样本记录中的两个存在于训练数据中。

参考文献

  1. 1st place solution
  2. https://www.kaggle.com/code/takoihiraokazu/sub-ex73-74-75-ex104-115-90-101-merge-train3

【竞赛报名/项目咨询请加微信:mollywei007】

下一篇

入读美国文理学院真实体验是怎样的?毕业后发展如何?

你也可能喜欢

  • 暂无相关文章!

评论已经被关闭。

插入图片
返回顶部
Baidu
map