algorithm - 对基于位置的社交网络的帖子供稿进行排序的评分公式的建议
问题描述
我正在构建一个基于位置的社交网络应用程序。这个想法是允许用户发布并与附近的人互动。该应用程序的主要供稿将根据它们的接近度(d = 帖子发布的距离)和新近度(a = 发布的时间)来显示帖子。
我正在尝试提出一个公式,该公式将为每个帖子评分以进行排序并实现以下目标:
- 高新近度和高接近度的帖子首先显示(例如 d=1km,a=1 小时)
- 如果一个帖子距离很近但很旧(例如 d=1km, a=5 天),稍微更远的结果(例如 d=5km, a=1 小时)排名更高
- 非常远的帖子(例如 d=10000,a=1 小时)只会比附近非常老的帖子(例如 d=10km,a=1 年)排名更高
我们正试图在看到足够本地化的东西既相关又新鲜之间取得平衡。虽然算法解决方案是可能的,但此时我们正在寻找一个公式来对帖子进行评分和排序。寻找合适的评分公式的建议。
解决方案
一个好的公式几乎肯定会有一些需要调整的任意参数。(要了解原因,请注意无论距离以米为单位(其中 500 是一个非常小的值)或公里(其中 500 是一个非常大的值),您都希望得到相同的结果。)
对于中到大的值,我的直觉是你需要一个对数刻度;1 公里和 2 公里之间的差异似乎与 100 公里和 200 公里之间的差异非常相似(而不是 100 公里和 101 公里之间的差异),3 天和 6 天之间的差异似乎与差异非常相似30 天和 60 天之间(而不是 30 天和 31 天之间的差异)。这意味着类似
分数 = a log d + b log t
(分数越低意味着帖子更相关)。
但是,由于对数对于极小的值会发散到负无穷大,因此您需要针对非常小的值进行调整;您不希望“就在这里,一年前”和“地球的另一边,0 秒前”被认为比“30 米外,十分钟前”更相关。一种方法是添加一点偏移量,这样您就不会采用非常小的值的对数:
分数 = a log( d +1) + b log( t +1)
我相信你会发现随着时间的推移你必须做更多的调整。我很想听听你的想法!
推荐阅读
- progress-bar - SeekBar 不会通过 Java 代码更改可绘制的自定义进度
- reactjs - 是否可以使用 scroll={{ x: "max-content" }} 和空数据在 percantage 中设置 ant 表列宽(px 有效)?是不是bug?
- python - How to update excel files on django and upload them to sharepoint
- oracle - 错误(13,61):PL/SQL:ORA-00984:当参数传递时,程序中不允许列
- python-3.x - 我们如何将数据从 .csv 复制到 .xlsx 文件。仅当列标题相同时
- keras - keras.fit 使用什么训练方案
- c# - 如何使用 tcp 客户端显示当前下载/上传速度?
- html - 是否有任何数学公式来计算适用于 html/css 中任何元素的填充?
- mysql - 如何有条件地统计每个业务的客户数量?
- php - 我们可以用 laravel 的背包交互社交名流吗?