首页 > 解决方案 > 程序化查询加权

问题描述

这是我正在尝试为我正在开发的应用程序解决的一个难题。想象一个约会应用程序,人们可以在其中按国籍搜索个人。

Person An 在应用程序上,有 10% 的人有兴趣结识俄罗斯人,90% 的人有兴趣结识墨西哥人。人 B 正在应用程序上搜索,90% 的人有兴趣认识俄罗斯人,10% 的人有兴趣认识墨西哥人。

让每个人的 OWN 搜索结果与他们的偏好相匹配是相当简单的。例如,对于人员 B,如果您希望他们的搜索总共有 100 个结果,请运行 2 个查询,然后加入结果集。第一个查询生成 90 个俄罗斯人,第二个查询生成 10 个墨西哥人,总共 100 个结果准确反映了 B 对 90% 俄罗斯人和 10% 墨西哥人的偏好。

但是,在该示例中,由于 A 有兴趣结识俄罗斯人,因此 A 很可能总是出现在 B 的结果集中(假设所有其他条件都匹配)。但理想情况下,人 A 应该只出现在人 B 的结果集中,大约 10% 的时间,因为这更接近地反映了他们的 OWN 偏好。换句话说,如果应用程序上有 1,000 人都对认识俄罗斯人感兴趣,那么当人 B 真的只有 10 个% 有兴趣结识俄罗斯人。

是否有一种合乎逻辑的编程方式来正确解释这一点?感觉它应该是某种加权或概率解决方案,但我似乎无法抓住它。请注意,如果您想共享代码示例,我并不真正关心技术(例如 SQL)。我对如何考虑解决方案更感兴趣,以便我可以将其合并到任何类型的代码中。我目前能想到的唯一解决方案是维护某种临时“使用”表,但这绝对是不优雅和麻烦的。

标签: algorithmfilteringprobability

解决方案


我相信您想按两者相互适合的概率进行排序。这将是这样的:

order by p(a|b))*p(b|a) desc

p(a|b) 是给定 b 的特征的 a 的概率。因此,对于 a 和俄罗斯人来说,这是 90%。p(b|a) 正好相反,所以最终结果为 (0.1)*(0.9) = 0.09。如果他们都批准了 100%,那么这将是 1.0。如果任一为 0%,则结果为 0%。

这是我对合适度量的第一次猜测,但似乎是合理的。


推荐阅读