选择最佳附近地点以在地图上显示的逻辑

Posted

技术标签:

【中文标题】选择最佳附近地点以在地图上显示的逻辑【英文标题】:Logic for selecting best nearby venues for display on a map 【发布时间】:2015-01-04 17:57:54 【问题描述】:

我有一个应用程序可以显示有关某些场所的信息。每个场地都被授予从 0 到 100 的等级。该应用程序包含一张地图,我想在地图上显示附近最好的场地。 (重点是向用户推荐他们可能喜欢的替代场所。)

解决此问题的最佳方法是什么?

如果我获取最近的 x 场馆,许多糟糕的场馆(即具有 低评级)显示。 如果我获取评分最高的场馆,其中很多场馆 距离太远,无法作为建议使用。

对于任何地理定位应用来说,这似乎都是一个相当普遍的挑战,所以我很想知道其他人采取了什么方法。

我已考虑通过考虑其评级和距离(以英里为单位)来“评分”每个可能的场地。 我也考虑过在 y 英里半径范围内获取评分最高的场馆,但这会产生问题,因为在某些城市,一个小区域(例如纽约)有很多场馆,并且在其他情况下,推荐更远的场地是合理的。

(这是一个 Rails 应用程序,我正在使用 Solr 和 Sunspot gem 来检索数据。但我不一定要在这里的代码中寻找答案,更多只是关于逻辑的建议。)

【问题讨论】:

【参考方案1】:

就个人而言,我会实施一些公式并使用某种形式的A/B testing 来了解哪些公式在某些结果指标上产生了最佳结果。该指标到底是什么取决于您。可能是点击,也可能是更复杂的事情。

从您能想到的最简单的公式(理想情况下也是计算成本低的公式)开始建立基线。从那里,您可以进行迭代,但绝对关键的概念是,您将拥有硬数据来告诉您是变得更好还是更糟,而不仅仅是预感(也许更复杂的公式更好)。即使你掌握了 Yelp 的公式,它也可能不适合你。

例如,正如您所提到的,基于反距离和设施质量的某种线性组合计算的单个分数将是一个很好的起点,您可以在几分钟内推出它。确保以某种方式标准化每个组件的分数。这里有一个非常简单的算法,你可以从这里开始:

    尽可能根据快速查询属性(按类型、国家/地区等)过滤场所 在相当宽的半径范围内过滤剩余场地(您需要对如何以高效方式执行此操作进行一些研究;在 *** 和其他地方有很多帖子。您需要索引经纬度的数据库表,并遵循许多其他最佳实践)。 使用一些您认为直观的权重对剩余场地进行评分(我随意选择了 0.25 和 0.75,但它们的总和应该为 1:

score = 0.25*(1-((距离/距离最远场地的距离 set)-最近场地的距离)) + 0.75*(质量得分/最高质量 剩余组得分)

    按分数排序并取前n

我会用这个简单想法的花哨版本在 Yelp 上投资。他们可能正在使用机器学习来实际选择每个组件分数的权重,但概念基础是相似的。

虽然计算复杂度各异的公式有很多可能性,但要真正了解哪一个最有效的唯一方法是收集数据。

【讨论】:

【参考方案2】:

我会将返回的场地数量固定为 7 个。

舍弃所有评分在最低四分位评分的场所,以避免不良的客户体验,然后返回邮政编码内的前 7 个场所。如果这导致少于 7 个条目,则查看相邻的邮政编码以找到最佳分数以完成列表。

这将导致本地分数从最高到中等的列表,也许在不远的地方会有一些非常好的分数。

从用户体验的角度来看,这将允许用户轻松选择他们感兴趣的邮政编码/区域,或者允许应用确定其位置。

从数据的角度来看,您已经有了地址。唯一的“棘手”位是确定相邻的邮政编码/区域是什么,但我相信有人已经弄清楚了。

顺便说一句,我非常相信事情会发生变化。就像餐馆易手或业主醒来并变得更好。我会考虑提供一份“危险”的不合标准餐馆名单,“风险自负”作为另一种晚间娱乐形式。就我个人而言,我发现一些最糟糕的用餐经历已经形成了一些我最好的外出用餐故事:-) 如果这个地方过去曾受到过严厉的评判,你有时会发现它现在正在成为一颗宝石。

【讨论】:

【参考方案3】:

首先我建议您使用贝叶斯平均值来维持所有场馆的总体评分,更多信息请点击此处:https://github.com/tyrauber/acts_rateable

然后您可以检索按距离排序的最近场地,然后按等级排序。查询中的两个 order by 语句

【讨论】:

以上是关于选择最佳附近地点以在地图上显示的逻辑的主要内容,如果未能解决你的问题,请参考以下文章

使用地图查找特定的附近地点

开发应用程序以查找目的地附近地点的最佳方法

如何用HMS Core位置和地图服务实现附近地点路径规划功能

如何在 Android 谷歌地图中显示附近的地方,如自动取款机、医院?

电脑上百度地图我怎么确定一个地点的范围呢

如何用HMS Core位置和地图服务实现附近地点路径规划功能