第18名解决方案 (Moro & taksai)
第18名解决方案 (Moro & taksai)
感谢主办方举办这场有趣的比赛,也感谢所有参与者。感谢我的队友 (taksai @tsaito21219)。在这里分享我们团队的解决方案。
摘要
- 仅使用 wifi 数据训练 xy 坐标预测模型
- 使用传感器数据训练增量模型 用于成本最小化
- 反复进行后处理 20 次
1. 预处理
我们为后文描述的两个模型制作了 4 个数据集。
| 数据集 |
描述 |
| (a) bssid-ranking |
按 rssi 降序排列的 bssid 列表。(建筑物间通用) |
| (b) bssid-rssi-matrix |
以 bssid 为列,rssi 为数据(每个建筑物)。缺失值填充为 -120。丢弃距离最后可见时间戳超过 10000ms 的 rssi 值。 |
| (c) sensor-data(aggregate) |
wifi 之间的聚合数据。(1 个目标对应 1 条记录) |
| (d) sensor-data(sampling) |
每 100ms 对 wifi 之间的原始数据进行采样(1 个目标对应 N 条记录)。填充至固定长度。 |
2. 模型
我们制作了两种类型的模型。第一种是预测航点位置的 xy 模型,第二种是预测两个航点之间距离的增量模型。
(1) xy 模型
- GBDT (lightgbm) 配合数据集:每个站点
- MLP (keras) 配合数据集:1 个模型
- MLP (keras) 配合数据集:每个站点 -> LB=6.5 (MLP 无后处理)
(2) 增量模型
- 该模型用于成本最小化(后处理)。由于使用 github 函数计算的增量存在一点误差,通过构建预测模型来减少误差。
- 误差(均方误差均值):13.1(使用 github) -> 4.48(我们的模型)
- MAE(x 和 y 的平均绝对误差):1.69(使用 github) -> 1.08(我们的模型)
- MLP (keras) 配合数据集:Dense(128) > Dense(256) > Dense(128) > Dense(64) > Dense(2)
- 1d-cnn (keras) 配合数据集:Conv1D(filters=32,kernel_size=5,padding=2) > Conv1D(64,5,2) > Conv1D(128,3,2) > Conv1D(256,3,2) > Conv1D(512,2,2) > GlobalMaxPool1D > Dense(64) > Dense(2)
3. 后处理
我们基于一些有用的公共内核定制了后处理流程。
-
第一步:(LB=6.5 -> 3.0)
1) 集成:对多个 xy 模型的预测值进行加权平均。增量模型同理。
2) 调整 xy:考虑设备 ID 的泄漏问题。
3) 成本最小化:使用增量模型计算的增量代替 github 函数。
4) 吸附网格。
5) 重复步骤 2)-4) 20 次,同时调整吸附网格的阈值。一点一点地移动到网格。阈值:2 (1-5 次) > 3 (6-10 次) > 4 (11-20 次)。
6) 再次执行步骤 2)。
-
第二步:(LB=3.0 -> 2.75)
1) 获取第一步关于某些模式(集成权重等)的输出。
2) 使用 1) 再次执行第一步。
无效尝试