伍拾柒- 根据经纬度判断某范围内较高单量的目标点(外卖平台资费动态调整)

一、 背景

外卖平台在动态调整各商家外送资费时,会根据往前一段时间内(一个月或一个季度),派送距离短的进行减免远的进行增收

故外卖平台在推广合作方案时,会优先推广附近有大量外卖需求的区域。

而如何根据送达经纬度来输出这些合作推广区域就是我们需要输出给销售人员信息。

二、经纬度处理

对经纬度进行网格化处理,此处参考 Geohash 的部分算法。

把某城市订单数进行图形转换可得出如以下的图形(其中每点为某个经纬度,数值为指数化的外卖单数)

某地城市

三、需求分析

具体需求为找出所有5公里外卖配送范围内,覆盖单量超过外卖单量指数超50的中心点。

可以理解为我们需求类似 POJ-1981 Circle and Points【单位圆覆盖最大点数】,然后输出中心点。

但算法转化为实际的问题时,我们会发现:

  1. 我们的点太多,每次计算开销过于大
  2. 算法并无考虑每个点权重问题

所以我们摒弃了简单的使用算法解决。

四、基于该坐标下的距离

绕不过的就是距离范围,基本我国街道都是纵横交错,所以在此问题下,我们可以引用曼哈顿距离

得到距离示例如下:

曼哈顿距离

五、换位思考 - 从热点找出潜力点

1. 先找出肉眼能判断的点来思考逻辑

基于业务来说,外卖热点均是较为集中而不是平均分散(从第二大点的图可看出)。

从地图上看,我们的目标点如下:

例子

上图的三个例子分别

  1. 例子1:每个点均不特别高,但覆盖范围内符合相应单量
  2. 例子2:有一个比较高的点,只要加上另一个也相对较高的即可
  3. 例子3:本来就很高了,可以框选另外一个更高的

2. 所以我们目的是找出 较高点

我们的目的是先找出超过某单量阈值的点,然后再考虑这些点的范围内哪个点作为中心点覆盖的单量会更多。

  1. 找出超阈值点(以20为阈值) 点 可以得到,原本的 5056 个点已经筛选出 104 个点。
  2. 再找出这些点周边的点 扩散 当我们扩散为这些较高点的附近范围为计算点,需要看这些点的范围内是否单量总和超条件阈值
  3. 计算每个点看附近范围总数超阈值的点 候选点 这些是我们的输出候选点,我们可以根据参数看看是否要聚合附近的点,或者直接输出这批点。

六、后话

该方法只是一个测试方法,还可以通过多种调整使得更适合业务模型。

可调整的内容如: