如何检测极化的用户意见(高和低星级)


15

如果我有一个星级评分系统,用户可以在其中表达对某产品或某项商品的偏爱,那么我该如何统计选票是否被“高分”。意思是,即使对于给定的产品,平均值是5分之3,我如何仅使用数据(没有图形方法)如何检测到1-5拆分与共识3


3
使用标准偏差有什么问题?
Spork 2014年

1
分数

1
您是否要检测“双峰分布”?参见stats.stackexchange.com/q/5960/29552
Ben Voigt

1
在政治学中,有一篇关于衡量政治两极分化的文献,研究了定义“两极分化”含义的各种不同方法。以下是一篇很好的论文,详细讨论了定义极化的4种不同的简单方法(请参阅第692-699页):educ.jmu.edu/~brysonbp/pubs/PBJ.pdf
Jake Westfall

Answers:


12

一个人可以构造一个极化指数。一个人到底是如何定义的取决于更多极化的构成(即,在某些特殊情况下,到底是什么意思或多或少地极化了?):

例如,如果均值是“ 4”,则“ 3”和“ 5”之间的50-50拆分比25%“ 1”和75%“ 5”极化的多还是少?

无论如何,在缺乏对您的意思的那种特定定义的情况下,我将建议基于差异的度量:

给定特定的均值,将极化程度最高的拆分定义为最大化方差*的拆分。

*(NB,将说25%“1”和75%的“5”基本上比50-50分裂的“3”和'5倍的偏振光;如果不匹配你的直觉,不使用方差)

因此,该极化指数是所观察到的方差中最大可能方差(具有所观察到的均值)的比例。

称平均等级()。= ˉ Xmm=x¯

当方差为且为,发生最大方差。这具有的方差 。 51-p1-15-Ñp=m1451p1(m1)(5m)nn1

因此,只需将样本方差除以;这给出了(完全一致)和(完全极化)之间的数字。 01(m1)(5m)nn101

对于许多平均评分为4的情况,将得出以下结果:

在此处输入图片说明


您可能宁愿相对于具有相同均值的最大可能方差来计算它们,而是相对于任何均值评级最大可能方差的百分比来计算。这将涉及除以,然后再次产生0(完全一致)和(以50-50的比率极化)的值。这将产生与上图相同的相对论,但所有值将为3/4的大(即从左到右,从上到下分别为0、16.5%,25%,25%,50 %和75%)。 14nn11

两者中的任何一个都是完全有效的选择-构造该索引的其他任何替代方式也是如此。


但是然后当m = 1你得到1 - 1 = 00 / 0。您如何纠正呢?
Francesco 2014年

@Franceso好点。当或,第一种形式的公式不确定。但是,在各种假设下,该限制似乎为1,这可能就是我要使用的限制。如果有人想将这种情况定义为1或0,对我来说似乎很合理。m = 5m=1m=5
Glen_b-恢复莫妮卡2014年

8

“没有图形方法”是一个很大的障碍,但是...这里有一些奇怪的想法。两者都将评级视为连续的,这在概念上是有缺陷的,而且可能不是唯一的。

峰度

  • {1,1,1,5,5,5}的峰度=1。任何具有1-5评级的组合都不会得到较低的峰度。
  • {1,2,3,4,5}的峰度= 1.7。较低意味着更高的价值。越高意味着越中间。
  • 如果分布不大致对称,则此方法将无效。我将在下面演示。

负二项式回归

使用这样的数据帧:拟合模型使用负二项式回归。所述系数应该是接近零,如果收视率均匀分布,正如果有比例多个中间范围的值(参见二项式分布),或负像与所述一个以上,极化分布的量,系数是-11.8。

RatingFrequency1312153749537
FrequencyRating+RatingRating

FWIW,这是我一直在玩的代码:

x=rbinom(99,4,c(.1,.9))+1;y=sample(0:4,99,replace=T)+1 #Some polarized & uniform rating data
table(x);table(y)                                                         #Frequencies
require(moments);kurtosis(x);kurtosis(y)                                  #Kurtosis

Y=data.frame(n=as.numeric(table(y)),rating=as.numeric(levels(factor(y)))) #Data frame setup
X=data.frame(n=as.numeric(table(x)),rating=as.numeric(levels(factor(x)))) #Data frame setup
require(MASS);summary(glm.nb(n~rating+sqrt(rating),X))  #Negative binomial of polarized data
summary(glm.nb(n~rating+sqrt(rating),Y))                #Negative binomial of uniform data

忍不住扔在情节...

require(ggplot2);ggplot(X,aes(x=rating,y=n))+geom_point()+stat_smooth(formula=y~x+I(sqrt(x)),method='glm',family='poisson')

所述术语确定回归线的(在这种情况下凹面)的曲率。由于我已经通过使用图形作弊,因此我将其与Poisson回归(而不是负二项式)进行拟合,因为比起正确的方法编写代码更容易。Rating



编辑:刚刚在侧边栏上看到了这个问题的公告: 当我单击时,我在“热网络问题”链接中看到了它本身,有时会出现这种情况

因此我认为应该以更普遍有用的方式重新审视这一点。我决定尝试在“ 亚马逊山地三只狼月亮”短袖T恤亚马逊客户评论中尝试我的方法:

Rating12345Frequency20854891982273
如您所见,这是一件很棒的T恤。 乔治·武井如此说。无论如何...
这种分布的峰度很高(7.1),因此该方法并不像看起来那样简单。
负二项式回归模型仍然有效!。βRating=19.1

顺便说一句,@ Duncan的 ... 并且,@Glen_b的极化指数= .33 ...只是说。σFrequencyThe Mountain Three Wolf Moon Short Sleeve Tee Ratings2=1.31
x=rep(5:1,c(2273,198,89,54,208))var(x)/(4*length(x)/(length(x)-1))


第一个版本的极化指数约为0.77(即,相对于平均极化程度最高的平均等级),但是,正如您所说的,第二个版本的极化指数约为0.33(相对于最大极化分布)。
Glen_b-恢复莫妮卡2014年

@Glen_b:当在需要比较的各种不同等级的评分中均值未固定时,第一个版本是否不适合?还是我误会了你的答案?
Nick Stauner 2014年

这取决于目标。通过标题“如何发现两极分化的意见”来判断,我倾向于第一种(考虑到平均评分,对此有多极化?)。如果确实是要比较不同的评级集,那么按照您的建议,使用第二种方法可能更有意义。这就是我为什么都做的原因。我的评论绝非批评。我很受宠若惊,您根本没有提到它。
Glen_b-恢复莫妮卡2014年

@Glen_b:理解了:) TBH,我建议采用负二项式回归建模方法更好,但我承认我几乎没有对其进行全面测试。我觉得大多数真正的两极化评级集不会两极化,因此我认为针对不对称的鲁棒性对未来的读者来说很重要。
尼克·斯汤纳

5

我认为一种简单的方法是计算方差。在这样的简单系统中,较高的方差意味着更多的1s / 5s。编辑快速示例:如果您的值是1,3,3,5,则您的方差将为:如果您的数字是1,1,5,5,则您的方差为:1-32+1-32+5-32+5-32

(13)2+(33)2+(33)2+(53)24=1
(13)2+(13)2+(53)2+(53)24=2

2

我怀疑我能否在已经给出的聪明答案中添加一些有价值的东西。特别是,@ Glen_b的好主意是评估观察到的方差如何相对接近在观察到的平均值下可能出现的最大方差。相反,我自己的直截了当的建议是关于某种可靠的色散度量,而不是基于与某个中心的偏差,而是直接基于数据点之间的距离。

计算所有数据点之间的成对距离(绝对差)。放弃零距离。计算距离分布的中心趋势(选择由您自己决定;例如,可以是均值,中位数或Hodges-Lehmann中心)。dii

Rating scale                   Distances      Mean     Median    Hodges-Lehmann
1  2  3  4  5

Frequency distributions:

1     2     1                 0 2 2 2 2 4      2          2          2

2           2                 0 0 4 4 4 4      2.7        4          2

1        2  1                 0 1 1 3 3 4      2          2          2

1  1  1     1                 1 1 2 2 3 4      2.2        2          2

1  1     1  1                 1 1 2 3 3 4      2.3        2.5        2.5

1           3                 0 0 0 4 4 4      2          2          2

如您所见,这三种统计数据在“极化”方面的度量可能非常不同(如果我要度量“分歧”而不是双极性对抗,则我可能会选择HL)。这是你的选择。一个概念:如果计算平方距离,其均值将与数据中的通常方差直接相关(因此,您将得出@Duncan的建议来计算方差)。即使这里的很大,距离的计算也不会太费力,因为等级标度是离散的,并且等级相对较少,因此频率加权算法可以很自然地提供距离。N


成对平方距离的平均值与方差有关。
Glen_b-恢复莫妮卡2014年

0

如果3星评级小于5和4的平均值,并且也小于1和2的平均值,该怎么办?

if (number_of_ratings > 6)      // kind of meaningless unless there's enough ratings
{
    if ( ((rating(5)+rating(4))*0.5 > rating(3)) &&
         ((rating(1)+rating(2))*0.5 > rating(3))
       )    
    {
        // Opinion divided
    }
    else
    {
        // Opinion not divided
    }
}
else
{
    // Hard to tell yet if opinion is divided
}

在我的头顶上,我想不出任何不可行的情况。使用上面的示例:亚马逊客户对“山间三只狼月亮”短袖T恤的评价

Rating12345Frequency20854891982273

在这种情况下:

Ratingaverage(1,2)3average(4,5)Frequency131891235

这将通过测试,并被视为分歧意见。


1
如果有很多 2s和4s,而其他收视率却相对较低怎么办?很难想象这种情况在现实中会发生,但是人们真的想称其为两极分化吗?
Nick Stauner 2014年

Rating12345Frequency25515525

0

σ=i=0n(xiμ)2nwhere σ is standard deviation, n is the number of data points,x represents all of the data points, andμ is the mean.

我不知道这是什么编程语言,但是这是一个可以为您提供标准差的java方法:

public static double standardDeviation(double[] data) {
            //find the mean
    double sum = 0;
    for(double x:data) {
        sum+=x;
    }
    double mean = sum/data.length;

            //find standard deviation
    Double sd;
    sd=0.0;
    for(double x:data) {
        sd+=Math.pow((x-mean),2);
    }
    sd=sd/data.length;
    sd=Math.sqrt(sd);

    return sd;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.