我有一个应用程序,可以显示有关某些 field 的信息。每个场馆都会获得 0-100 分的评分。该应用程序包含一张 map ,我想在 map 上显示附近最好的 field 。 (重点是向用户推荐他们可能喜欢的替代场所。)
解决这个问题的最佳方法是什么?
- 如果我获取最近的 x 个场馆,很多场馆都不好(即那些有 低评级)显示。
- 如果我获取评分最高的场馆,其中有很多 距离太远而无法作为推荐。
对于任何地理定位应用程序来说,这似乎都是一个非常常见的挑战,因此我很想知道其他人采取了什么方法。
- 我考虑过通过考虑每个可能的 field 的评级和距离(以英里为单位)来“评分”。
- 我还考虑过获取 y 英里半径内评分最高的场馆,但这会产生问题,因为在某些城市,小区域内有很多场馆(例如纽约),并且在其他情况下,推荐较远的地点是合理的。
(这是一个 Rails 应用程序,我使用 Solr 和 Sunspot gem 来检索数据。但我不一定在这里寻找代码中的答案,更多只是有关逻辑的建议。)
最佳答案
就我个人而言,我会实现一些公式并使用某种形式的 A/B testing了解哪些在某些结果指标上产生最佳结果。该指标到底是什么取决于您。可能是点击,也可能是更复杂的事情。
从您能想到的最简单的公式(最好是计算成本低的公式)开始建立基线。从那里,你可以迭代,但绝对关键的概念是,你将有硬数据告诉你,你是变得更好还是更差,而不仅仅是预感(也许更复杂的公式更好)。即使您掌握了 Yelp 的公式,它也可能对您不起作用。
例如,正如您所提到的,基于反距离和机构质量的某种线性组合计算的单个分数将是一个很好的起点,您可以在几分钟内推出它。确保以某种方式标准化每个组件的分数。您可以从以下可能非常简单的算法开始:
- 尽可能根据快速查询属性(按类型、国家/地区等)过滤场馆
- 在相当大的半径内过滤剩余的 field (您需要进行一些研究,以准确地了解如何以高效的方式做到这一点;Stackoverflow 上以及其他地方有很多关于此的帖子。您需要索引您的数据库表中的纬度和经度,并遵循许多其他最佳实践)。
- 使用一些您认为直观的权重对其余 field 进行评分(我随意选择了 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)
- 按分数排序并取最高的n
我会使用这个简单想法的一些花哨版本在 Yelp 上投资。他们可能使用机器学习来实际选择每个组件分数的权重,但概念基础是相似的。
虽然计算复杂程度各异的公式有很多可能性,但真正了解哪一个最有效的唯一方法是收集数据。
关于ruby-on-rails - 选择附近最佳 field 以在 map 上显示的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768563/