第6名解决方案
第6名解决方案
作者: tomo20180402 (Grandmaster) | 比赛排名: 第6名
首先,感谢所有组织这次比赛的人。
比赛在一个多月前就结束了,我现在分享我的解决方案。
这次比赛的任务和数据很有趣,但我对数据泄露问题感到遗憾。
1. 预处理
- 去除看起来像噪音的符号。
- 对日语(JP)应用 pykakasi,对所有数据应用 unidecode。
2. 候选生成
- 每个 id 生成 28 个候选,IoU=0.978。
- 数据集创建过程
- 按 poi(兴趣点)将数据分为两部分。
- 为每部分数据创建候选和特征。
- 更改种子并多次拆分数据。
- 将它们合并以形成数据集。
第一阶段
- 使用 kdtree 根据坐标为每个点提取 6500 个点。
第二阶段
- 计算与每个点的相似度,并通过以下加权和选择前 28 个作为候选。
- 坐标距离的平方根
- 1 - jarowinkler:名称、类别
- 归一化 levenshtein:名称、类别
- 1 - simpson:按 ' ' 分割的名称、按 ', ' 分割的类别
3. 匹配预测
特征
- kdtree 的坐标距离排名
- 从名称识别语言
- 坐标距离
- haversine(半正矢)、chebyshev(切比雪夫)、euclidean(欧几里得)、manhattan(曼哈顿)
- 类别特征的相似度
- LCS(子序列/子串)、levenshtein、jarowinkler
- 关于按 ', ' 分割的类别,使用基于暴力计算的相似度、平均值、最小值和最大值。
- 类别特征的字符串长度
- 基于字符串和单词的集合特征
- 计数编码
- tf-idf
- 关于出现频率的排名特征
- 国家、类别、按 ', ' 分割的类别、按 ' ' 分割的类别(词)
- 除国家外,按升序和降序进行标记。
- 少于 1% 的标签将被移除。
- 每个候选的排名特征
- 为每个特征的每个 id 在 28 个候选之间创建排名。
模型
- catboost,单模型
- 移除早停并增加迭代次数(过拟合)
- 在所有数据上训练
4. 后处理
- 图概率卷积
- 例如)更新从 A 到 B 的连接概率(红线)。
- 提取 A 的候选中那些以 B 为候选的点。
- 限制为与 A 的连接概率大于等于 0.5 的连接。
- 计算与 B 连接概率的加权平均值,使用与 A 连接的概率作为权重。
- AB’
= (AC * CB + AD * DB + AA * AB) / (AC + AD + AA)
= (0.7 * 0.7 + 0.9 * 0.1 + 1 * 0.6