mysql/统计 : Weighting an average to accentuate differences from the mean

标签 mysql algorithm statistics

这是关于 http://cssfingerprint.com 的一项新功能(有关一般信息,请参阅/about)。

该功能会在网站人口统计数据库中查找您访问过的网站,并尝试根据此猜测您的人口统计数据。

我所有的人口统计数据都是 0..1 概率格式,而不是比率或绝对数字等。

从本质上讲,您拥有大量数据点,每个数据点都会让您了解自己的人口统计数据。然而,只取平均值是不好的,因为这意味着通过添加大量通用数据,数字会下降。

例如,假设您访问过站点 S0..S50。除 S0 外,其他所有人都是 48% 的女性; S0 是 100% 男性。如果我在猜测您的性别,我希望得到一个接近 100% 的值,而不仅仅是直接平均值给出的 49%。

此外,考虑到大多数人口统计数据(即除性别以外的所有因素)的平均值都不是 50%。例如,拥有 0-17 岁 child 的平均概率约为 37%。给定网站的人口统计数据与此平均值的差异越大(例如,它可能是一个为 parent 或没有 child 的人准备的网站),我对您的状态的猜测就应该越重要。

计算这个的最佳方法是什么?

额外加分:计算这个的最佳方法是什么,这在 mysql 中也很便宜且容易实现?

ETA:我认为接近我想要的东西是 Φ(AVG(z-score ^ 2, sign preserved))。但我不确定这是否是一个好的加权函数。

(Φ 是标准正态分布函数 - http://en.wikipedia.org/wiki/Standard_normal_distribution#Definition )

最佳答案

此类计算的一个很好的框架是贝叶斯推理。您有人口统计数据的先验分布——例如 50% 的男性、37% 的无子女等。最好是多变量的:10% 的男性无子女 0-17 岁的白种人 ...,但您可以从一个人开始-时间。
在此之前,每个站点都会提供有关人口统计类别可能性的新信息,您将获得后验估计,从而得出您的最终猜测。使用一些独立性假设,更新公式如下:

后验概率 = (先验概率) * (站点似然比),

其中赔率 = p/(1-p),似然比是访问网站后修改赔率的乘数。它有多种公式,但在这种情况下,我将使用上面的一般人口和站点人口的公式来计算它。

例如,对于“20 岁以下”年龄组中 35% 的访问者(占总人口的 20%)的网站,网站似然比为 LR = (0.35/0.65)/(0.2/0.8) = 2.154 因此,访问该网站会将“20 岁以下”的几率提高 2.154 倍。

一个 100% 男性的网站会有无限的 LR,但您可能希望通过仅使用 99.9% 的男性来限制它。 50% 为男性的网站的 LR 为 1,因此它不会提供任何有关性别分布的信息。

假设您开始对某个人一无所知 - 他或她“未满 20 岁”的几率为 0.2/0.8 = 0.25。假设第一个站点对此结果的 LR=2.154 - 现在“20 岁以下”的几率变为 0.25*(2.154) = 0.538(对应于 35% 的概率)。如果第二个站点具有相同的 LR,则后验赔率变为 1.16,这已经是 54%,等等(概率 = 赔率/(1+赔率))。最后,您会选择后验概率最高的类别。

这些计算有很多注意事项 - 例如,独立性假设可能是错误的,但它可以提供一个良好的开端。

关于mysql/统计 : Weighting an average to accentuate differences from the mean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448522/

相关文章:

mysql - 创建过程以验证要插入的数据

php - 使用php将表单数据输入Mysql数据库

algorithm - 使用分支定界将路径匹配到图形

java - 分析短算法的运行时间

algorithm - 查找数字之和为质数的数字

numpy - 如何生成每个类内符合正态分布的数据?

python - 我可以使用什么算法从图中进行推断?

mysql - 无法使用数据库中的 SOLR DataImportHandler 获取任何行

algorithm - 什么是最容易实现的线性回归算法?

php - 为什么我的第一个 PHP 类没有按预期工作?