mysql / stats:加权平均值以强调与均值的差异

时间:2010-03-15 16:00:21

标签: mysql algorithm statistics

这是针对http://cssfingerprint.com的新功能(有关常规信息,请参阅/约。)

该功能会查找您在网站受众特征数据库中访问过的网站,并尝试猜测您的人口统计数据是基于此。

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

基本上,您拥有大量数据点,每个数据点都倾向于您自己的人口统计数据。然而,仅仅取平均值很差,因为这意味着通过添加大量通用数据,数量会下降。

例如,假设您访问过网站S0..S50。除S0外,其余均为48%女性; S0是100%的男性。如果我猜你的性别,我希望得到的值接近100%,而不仅仅是平均值给出的49%。

此外,考虑到大多数人口统计数据(即性别以外的所有人口)的平均值不是50%。例如,孩子0-17岁的平均概率是~37%。特定网站的人口统计特征与此平均值不同(例如,可能是父母或无子女网站的网站),我对您的状态的猜测就越多。

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

额外信用:计算这个的最佳方式是什么,这也是便宜的&在mysql中容易做到吗?

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

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

4 个答案:

答案 0 :(得分:2)

这种计算的一个好框架是贝叶斯推理。你事先分布了人口统计数据 - 例如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 +赔率))。最后,您将选择具有最高后验概率的类别。

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

答案 1 :(得分:2)

你的朴素贝叶斯公式如下:

SELECT  probability
FROM    (
        SELECT  @apriori := CAST(@apriori * ratio / (@apriori * ratio + (1 - @apriori) * (1 - ratio)) AS DECIMAL(30, 30)) AS probability,
                @step := @step + 1 AS step
        FROM    (
                SELECT  @apriori := 0.5,
                        @step := 0
                ) vars,
                (
                SELECT  0.99 AS ratio
                UNION ALL
                SELECT  0.48
                UNION ALL
                SELECT  0.48
                UNION ALL
                SELECT  0.48
                UNION ALL
                SELECT  0.48
                UNION ALL
                SELECT  0.48
                UNION ALL
                SELECT  0.48
                UNION ALL
                SELECT  0.48
                ) q
        ) q2
ORDER BY
        step DESC
LIMIT 1

答案 2 :(得分:1)

快速'n'脏:通过乘以男性概率获得男性分数,通过乘以女性概率获得女性分数。预测更大。 (实际上,不要相乘;而是将每个概率的对数相加。)我认为如果你做出正确的(非常不现实的)假设,这是一个最大似然估计。

答案 3 :(得分:0)

计算加权平均值的标准公式在this questionthis question

中给出

我认为您可以研究这些方法,然后计算出如何计算权重。

在您上面的性别示例中,您可以采用一组权重{1,...,0,...,1}的行,这是0到1的性别值0到1的线性减少男性为50%,然后相应增加高达100%。如果你希望效果偏向于偏离值,那么你很容易想出一个指数或三角函数,它提供了一组不同的权重。如果你想,那么正态分布曲线也可以解决问题。