1.赛题介绍:
比赛要求参与者使用从百度地图收集的历史用户行为数据和一组用户属性数据来推荐合适的交通方式。
查询记录:
查询记录代表百度地图上用户的一条路线搜索。每个查询记录都由会话ID、配置文件ID、时间戳、原始点的坐标、目的地的坐标组成。例如,[387056,234590,“2018-11-01 15:15:36”,(116.30,40.05),(116.35,39.99)]表示用户在2018年11月1日下午(116.30,40.05)到(116.35,39.99)的行程中进行查询。所有坐标均为WGS84。
sid | pid | req_time | o | d |
---|---|---|---|---|
387056 | 234590 | 2018-11-01 15:15:36 | (116.30,40.05) | (116.35,39.99) |
902489 | 849336 | 2019-01-16 19:57:41 | (117.33,39.08) | (117.32, 39.09) |
156976 | 221455 | 2018-12-17 09:05:12 | (121.48,31.21) | (121.44,31.11) |
显示记录:
显示记录是百度地图向用户显示的可行路径。[387056, “2018-11-01 15:15:40”, [{“mode”:1, “distance”: 3220, “ETA”: 2134, “price”: 12}, {“mode”:3, “distance”: 3520, “ETA”: 2841, “price”: 2}]]是两个运输模式计划的显示记录。
点击纪录:
录表示用户对不同建议的反馈。
sid | click_time | click_mode |
---|---|---|
387056 | 2018-11-01 15:15:47 | 1 |
902489 | 2019-01-16 19:57:46 | 3 |
156976 | 2018-12-17 09:05:30 | 7 |
用户属性:
用户配置文件属性反映了用户对传输模式的个人偏好。
数据情况:
第一阶段:
- 训练数据时间:2018年10月1日至2018年11月30日;
- 测试数据时间:2018年12月1日至2018年12月7日;
- 地点:北京
- 训练数据大小:500000
- 测试数据大小:94358
第二阶段:
- 训练数据时间:2018年10月1日至2018年11月30日;
- 测试数据时间:2018年12月1日至2018年12月7日;
- 地点:北京、上海、广州、深圳
- 训练数据大小:1500000
- 测试数据大小:304916
评测指标: 多类别加权F1
2. EDA:
原始特征:
- sid:session id 会话id;
- pid:用户id
- req_time\plan_time’:请求时间,计划时间
- o\d:请求地点(经纬度);
- plans:各种计划-包含距离(distance),价格(price),出行方式(transport_mode),估计到达的时间(ETA)
- p0-p65:用户属性特征
缺失值: pid缺失32.7958%;
nunique分布:
- sid的是唯一的,
- pid占据了9.23%
- o和d占据了1%左右
交通方式猜测: 根据每个mode的price、time、距离猜测
- 0:未点击
- 1:公交
- 2:地铁
- 3:自驾,速度非常快, 价格是0
- 4:打车
- 5:步行
- 6:自行车,速度不是很快,价格也为0
- 7:公交、地铁组合
- 8: 打车+地铁、公交
- 9:地铁
- 10:打车+地铁、公交
- 11:打车+地铁、公交
3. 模型总结:
3.1 特征工程:
经纬度特征:
- 起点、终点经度和维度;
- 起止点的曼哈顿距离、欧几里得距离、地面实际距离、根据经纬度得到KMeans聚类特征(四城市分开和四城市一起所设置的聚类数不同);
- 城市特征,对城市进行划分;
- 地铁特征,距离最近的地铁,公交站,方圆半径学校的数量,公交站数量;
- 距离o,d的mean/mode点的距离,可以认为是距离市中心的距离;
时间特征:
- 请求的小时、周几、几号、几分;
- 请求时间和计划时间时间差;
- 距离6\8\12\18\24点的时间差;
profile特征:
- 用户65维属性特征;
- SVD降维特征;
plans特征:
- 距离/时间/钱:min/max/mean/std;
- 最大/最小-距离/时间/钱对应的mode;
- 私家车,自行车,钱为空的情况,特殊处理;
- 对mode做Tfidf,然后降低到10维;
- 对plans进行平铺,每个展示plan的距离/时间/钱以及排名;
- 对o,d,od做groupby,然后求count特征,根据count得到rank排名特征,对排名进行归一化(相当于距离的热度信息);
交叉特征:
- 每个pid对o,d,hour,week求nunique:即每个用户出现在了多少个不同的地点或时间段;
- 对[pid, o/d/hour…]求交叉特征的count特征,value_counts;
- 对o,d做上述类似的操作:即每个o,d不同时间段出现的频率;
3.2 模型结构:
- 对全部数据做多分类(12分类);
- 分别做二分类,做one vs all单独预测某一类;
- 四城市一起训练,四城市分开训练;
- Graph Embedding;
- DeepFm神经网络模型;