组队学习|DCIC2021-算法分析题-baseline改进
改进结果:
原baseline的缺点
- 评价潮汐程度时以停车点为标准,而赛题要求为识别出潮汐现象最突出的40个区域,可能会存在单个停车点潮汐情况突出但其所在区域不突出的情况,造成误差
- kNN最近邻计算时使用停车点的中心经纬度来进行计算,受到停车点面积大小的影响(面积较大的停车点可能据中心点距离更大),故用停车点的边界经纬度计算会更为准确
hnsw近似搜索
存在误差
改进方法
这里我利用baseline中提及的geohash
编码的方法来对baseline进行改进
- 为每个停车点和订单分配geohash编码,以
geohash
编码的区域作为共享单车潮汐情况判断的区域,同时保证编码的区域不能过大或者过小,最终选择precision=8
进行编码
import geohash
bike_order['geohash'] = bike_order.apply(
lambda x: geohash.encode(x['LATITUDE'], x['LONGITUDE'], precision=8),
axis=1)
bike_fence['geohash'] = bike_fence['FENCE_CENTER'].apply(
lambda x: geohash.encode(x[0], x[1], precision=8)
)
- 计算每个编码区域的潮汐入度与出度,得到留存量
- 通过
geohash
编码分组计算不同区域内停车点的面积和,计算区域的留存密度
bike_density = bike_remain[0]/
bike_fence.groupby(['geohash'])['FENCE_AREA'].sum()
bike_density = bike_density.sort_values(ascending=False).reset_index()
- 设置目标区域的停车点
label=1
仍然存在的问题
- 可能存在一个停车点横跨不同区域的问题
- 关于精度及目标区域选择的标准有待明确