我有一个应用程序,显示有关某些场地的信息。每个场地的评分均为0-100。该应用程序包含一张地图,并在地图上我想显示附近最好的场地。 (重点是向用户推荐他们可能喜欢的其他场所。)
解决此问题的最佳方法是什么?
对于任何地理位置应用来说,这似乎是一个非常普遍的挑战,所以我很想知道其他人采取了什么方法。
(这是一个Rails应用程序,我正在使用Solr和Sunspot gem来检索数据。但我不一定在这里寻找代码中的答案,更多的是关于逻辑的建议。)
答案 0 :(得分:2)
就个人而言,我会实现一些公式并使用某种形式的A/B testing来了解哪些公式可以在某些结果指标上产生最佳结果。具体指标取决于您。它可能是点击,也可能是更复杂的事情。
从您可以想到的最简单的公式(理想情况下,计算上也便宜的公式)开始建立基线。从那里,你可以迭代,但绝对的关键概念是,你有硬数据告诉你,如果你变得更好或更坏,而不仅仅是预感(也许更复杂的公式更好) 。即使你掌握了Yelp的配方,它也可能不适合你。
例如,正如您所提到的,基于反距离和建立质量的某种线性组合计算的单个分数将是一个很好的起点,您可以在几分钟内将其推出。确保以某种方式规范化每个组件分数。这是一个可以开始的非常简单的算法:
得分= 0.25 *(1 - ((剩余距离最远的场地的距离/距离) 设置) - 距离最近的场地))+ 0.75 *(质量得分/最高质量 剩下的分数)
我会使用这个简单的想法的一些花哨裤版本把钱投入Yelp。他们可能正在使用机器学习来实际选择每个组件分数的权重,但概念基础是相似的。
虽然计算不同复杂度的公式有很多可能性,但真正了解哪一种最佳方法的唯一方法是收集数据。
答案 1 :(得分:0)
我会确定7点返回的场地数量。
丢弃所有评分最低四分位数得分的场地,以避免糟糕的客户体验,然后在邮政编码中返回前7位。如果这导致少于7个条目,则查看相邻的邮政编码以找到最佳分数以完成列表。
这将导致在本地获得一系列平庸得分,也许只有很短的距离才有一些非常好的分数。
从用户体验的角度来看,这很容易让用户选择他们感兴趣的邮政编码/区域,或允许用户确定其位置。
从数据的角度来看,您已经拥有了地址。唯一的"棘手" bit正在确定相邻的邮政编码/区域是什么,但我确定有人已经知道了这一点。
顺便说一句,我很擅长改变事物。就像餐馆易手或业主醒来并变得更好。我会考虑提供一个危险的"不合标准的餐馆名单"风险自负"作为晚间娱乐的另一种形式。就个人而言,我发现我最糟糕的一些用餐体验形成了我最好的一些餐饮故事:-)如果这个地方过去经过严厉评判,你有时会发现它现在正在制作中。
答案 2 :(得分:0)
首先我建议您使用贝叶斯平均值来维持所有场地的整体评分,更多信息请参见:https://github.com/tyrauber/acts_rateable
然后您可以检索按距离排序的最近的场地,然后按评级排序。查询中的两个按语句排序