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

Logic for selecting best nearby venues for display on a map

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

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

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

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

我会固定场地的数量 return 比如说 7。

舍弃所有评分处于最低四分位数的场所,以避免糟糕的客户体验,然后 return post 代码中的前 7 名。如果结果少于 7 个条目,则查看邻近的 post 代码以找到完成列表的最佳分数。

这将导致在本地获得从高分到中等分数的列表,也许离一些非常好的分数只有很短的距离。

从用户体验的角度来看,这很容易让用户 select 他们感兴趣的 postcode/area 或者允许应用程序确定其位置。

从数据的角度来看,您已经有了地址。唯一的 "tricky" 位是确定相邻的 postcodes/areas 是什么,但我相信有人已经弄明白了。

顺便说一句,我非常相信事物会发生变化。就像餐馆易手或业主醒来并变得更好一样。我会考虑提供 "dangerous" 不合标准的餐馆列表 "at your own risk" 作为晚间娱乐的另一种形式。就我个人而言,我发现一些我最糟糕的用餐经历已经形成了一些我最好的外出就餐故事:-) 如果这个地方过去曾被严厉评判过,你有时会发现它现在正在 gem 中。

首先,我建议您使用贝叶斯平均值来维护所有场地的总体评分,更多信息在这里:https://github.com/tyrauber/acts_rateable

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

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

从您能想到的最简单的公式(最好是计算成本低的公式)开始建立基线。从那里开始,您可以迭代,但绝对关键的概念是您将有硬数据告诉您您是在变好还是变差,而不仅仅是预感(也许更复杂的公式更好)。即使您掌握了 Yelp 的公式,它也可能对您不起作用。

例如,正如您提到的,根据距离和机构质量的某种线性组合计算得出的单一分数将是一个很好的起点,您可以在几分钟内推出。确保以某种方式标准化每个组件分数。您可以从以下可能的非常简单的算法开始:

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

score = 0.25*(1-((distance/distance of furthest venue in remaining set)-distance of closest venue)) + 0.75*(quality score/highest quality score in remaining set)

  1. 按分数排序并取前 n

我会把钱投在 Yelp 上,使用这个简单想法的一些奇特版本。他们可能正在使用机器学习来实际 select 每个组件分数的权重,但概念基础是相似的。

虽然计算不同复杂度的公式有很多可能性,但真正知道哪一个最有效的唯一方法是收集数据。