由于赛题中人员编码的数量小于硬件特征码的数量,并且直接进行笛卡尔积后的集合过大,所以我们队首先对每个人员编码找出候选的200个合适的硬件特征码,从而达到粗排的效果并提高效率。接下来对每一对候选的(人员,硬件)构造合适的特征。最后对这p_number*200条数据构建二分类问题(在训练集如果匹配则label为1,反之为0),其中p_number为数据集中不同的人员编号个数,最后跑lightgbm,catboost等多种模型,通过合理的调参方法得到良好的模型,并对测试集的每一对候选集进行概率预测,取最高匹配概率对应的特征作为预测结果。
在A榜阶段,我们队在数据集中发现了在匹配时硬件特征码发现时间普遍会比人像特征发现时间早一点。于是我们在考虑任意一个人员p_id时,枚举这个人像特征的每一条数据(发现时间time,点位编号d_id),并通过二分算法得到d_id对应的小于time的每个c_id的最大时间数据并倒序枚举(为了提高效率),如果该时间和time相差在80秒以内(不满足就可以终止倒序枚举了),那么在p_id,c_id对应的权值数组中增加一次匹配成功次数,并在最后统计该时间和time相差绝对值在这几次匹配成功中的均值,作为三元组(匹配成功次数,均值,c_id)放入列表中进行排序(第一维降序,第二维升序),取前200个时可以获得较好的召回效果(99%以上),并将该p_id和这两百条硬件id构成200个候选的集合放入总集合中。
为了进行二分类的求解,我们对每一条候选集中的(p_id,c_id)构造了以下特征:
其中d_number代表点位总数量
序号 | 特征名 | 含义 |
---|---|---|
1 | pp_number | 对于p_id的每一条数据出现时间time,c_id的数据中存在出现时间小于time则+1,最后除以pid_number |
2 | average_det_time | 对于p_id的每一条数据出现时间time,c_id的数据中出现时间小于time的最大出现时间的均值 |
3 | best_pp_number | 分不同点位求解pp_number,累和pp_number最大的前d_number-1个pp_number |
4 | best_average_det_time | 分不同点位求解average_det_time,累和pp_number最大的前d_number-1个average_det_time |
5 | cid_number | c_id对应的数据条数 |
6 | unique_pp_number | 对于连续时间位于同一点位只考虑第一条情况下的pp_number |
7 | unique_average_time | 对于连续时间位于同一点位只考虑第一条情况下的average_det_time |
8 | unique_lcs | 对于连续时间位于同一点位只考虑第一条情况下的点位序列的最长公共子序列 |
9 | pid_number | p_id对应的数据条数 |
10 | p_number | 对于p_id的每一条数据出现时间time,c_id的数据中存在出现时间小于time则+1 |
11 | p_speed | p连续的观测数据,点位发生改变的距离除以时间参数的列表取中位数 |
12 | c_speed | c连续的观测数据,点位发生改变的距离除以时间参数的列表取中位数 |
13 | dis_speed | abs(p_speed-c_speed) |
14 | p_speed_min | p连续的观测数据,点位发生改变的距离除以时间参数的列表取最小值 |
15 | c_speed_min | c连续的观测数据,点位发生改变的距离除以时间参数的列表取最小值 |
16 | dis_speed_min | abs(p_speed_min-c_speed_min) |
17 | Min_time | p_id和c_id最靠近的时间差 |
18 | unique_Min_time | 对于连续时间位于同一点位只考虑第一条情况下的p_id和c_id最靠近的时间差 |
19 | c_speed_change | c点位变化数量 |
20 | p_speed_change | p点位变化数量 |
21 | dis_change | abs(c_speed_change-p_speed_change) |
22 | p_speed_mean | p连续的观测数据,点位发生改变的距离除以时间参数的列表取平均值 |
23 | c_speed_mean | c连续的观测数据,点位发生改变的距离除以时间参数的列表取平均值 |
24 | dis_speed_mean | abs(c_speed_mean-p_speed_mean) |
25 | change_div_p | dis_change/p_speed_change |
26 | dis_speed_div_p | dis_speed/p_speed |
选择lightgbm、catboost、岭回归、随机森林等多种可用于二分类的机器学习模型用于比较和本地交叉检验。最终为了平衡效率和准确率只采用了lightgbm进行训练和预测。
在交叉检验时拿出80%的p_id对应的数据进行训练,并对剩下的进行预测,预测时取最高概率对应的c_id。
序号 | 模型 | 数据集 | 准确率 | 训练耗时 |
---|---|---|---|---|
1 | lightgbm、catboost等模型融合 | 本地交叉检验 | 0.927 | 424s |
2 | lightgbm、catboost等模型融合 | A榜 | 0.92 | |
3 | lightgbm | 本地交叉检验 | 0.925 | 29s |
4 | lightgbm | A榜 | 0.915 | |
5 | lightgbm | B榜 | 0.845 |
根据B榜情况可以看出C地和AB地分布有一定的不一致性,可以通过对抗检验检查出该问题,并选取训练集中合理的数据进行训练。如果时间充裕且有条件的情况下,应该可以在B榜提高到更高的分数。