Python实现置信区间(热门排序)

问题描述

问答类网站,用户可以支持或反对某个回答,那么可以根据支持率对所有回答进行排序:

p = 支持数 支持数 + 反对数 p=\frac{\text{支持数}}{\text{支持数}+\text{反对数}}

回答A有8个支持2个反对,回答B有70个支持30个反对。虽然回答B的支持率较低,但回答A的支持率的可信度较低,因为参与投票的数量只有10个。

比如亚马逊灯泡热销TOP100,两者评分都是4.5,但显然后者的4.5更可信。
在这里插入图片描述

PS:这里只是举个例子,亚马逊排行榜考量了诸多因素,并不单纯靠评分排序。



解决方案

p越大代表这个回答越好,应该排在前面。但是,p的可信度也应该取决于有多少人投票。

如果样本太小,p就不可信。即需要计算出p的置信区间下限。

支持率相同的情况下,置信区间下限越大,排名应越靠前。



代码

假设掷骰子需要掷出6,掷了235次。如果是公平的,数学期望应该为
235 × 1 6 = 39.1667 235\times \frac{1}{6}=39.1667
但是在实验中掷出6共51次,计算置信度。

from scipy.stats import binom_test


print(binom_test(x=51, n=235, p=1/6, alternative='less')) # 单侧检验(下限)
print(binom_test(x=51, n=235, p=1/6, alternative='greater')) # 单侧检验(上限)
print(binom_test(x=51, n=235, p=1/6, alternative='two-sided')) # 双侧检验
# 0.982022657605857
# 0.02654424571169947
# 0.043747970182413345

假设显著性水平为5%,那么0.02654<5%说明这次实验不公平。



其他

from scipy.stats import binom_test

print(binom_test(x=[8, 2], n=110, alternative='less'))
print(binom_test(x=[70, 30], n=110, alternative='less'))
# 0.9892578125
# 0.9999839199923521

回答A有8个支持2个反对,回答B有70个支持30个反对。但回答B比回答A更可信



参考文献

  1. 基于用户投票的排名算法(五):威尔逊区间
  2. 【Python量化统计】——『置信区间』全角度解析(附源码)
  3. scipy.stats.binom_test
  4. Binomial test - Wikipedia
  5. Amazon.co.uk Best Sellers: The most popular items in LED Bulbs
发布了250 篇原创文章 · 获赞 90 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/lly1122334/article/details/105049037