偏ったユーザーの意見を検出する方法(高評価と低評価)


15

ユーザーが製品またはアイテムに対する好みを表現できる星評価システムがある場合、投票が非常に「分割」されているかどうかを統計的に検出するにはどうすればよいですか。つまり、特定の製品の平均が5つのうち3つであっても、データのみを使用して(グラフィカルな方法ではなく)1-5の分割とコンセンサス3のどちらであるかをどのように検出できますか


3
標準偏差の使用の何が問題になっていますか?
スポーク14


1
「バイモーダル分布」を検出しようとしていますか?参照してくださいstats.stackexchange.com/q/5960/29552
ベンフォークト

1
政治学では、「分極化」の意味を定義するさまざまな方法を検討した政治的分極化の測定に関する文献があります。偏光を規定の詳細4つの異なる単純な方法では、以下で説明されていることを一つの素敵な紙(PP参照692から699):educ.jmu.edu/~brysonbp/pubs/PBJ.pdf
ジェイクWestfallの

回答:


12

偏光指数を構築できます。それをどのように定義するかは、より極性化されたものに依存します(つまり、特定のエッジの場合、多かれ少なかれ極性化されたとはどういう意味ですか?):

たとえば、平均が「4」の場合、「3」と「5」の間の50対50の分割は、25%の「1」と75%の「5」よりも多いか、または少ないですか?

とにかく、あなたが意味するもののそのような特定の定義がない場合、分散に基づく測定を提案します:

特定の平均が与えられた場合、分散を最大化するものとして、可能な限り最も分極化されたスプリットを定義します*。

*(25%「1」および75%「5」は、実質的にされていることを言うだろうNB より「3者と」5者の50-50スプリットよりも偏;それはあなたの直感と一致しない場合、分散を使用しないでください)

したがって、この偏光指数は、観測された分散における可能な最大の分散(観測された平均との)の割合です。

平均評価コールmm=x¯)。

最大分散は、比率p = m 1のときに発生しますp=m1451p1です。これは、の分散有する (m1)(5m)nn1

そう単ににより標本分散及び分割を取る ; これにより、0(完全に一致)から1(完全に極性化)までの数値が得られます。(m1)(5m)nn101

平均評価が4である多くの場合、これは次のようになります。

ここに画像の説明を入力してください


代わりに好むかもしれない同じ平均の最大の可能性の分散に比べ、代わりに最大の可能な分散の割合としてそれらを計算するために、任意の平均評価について。つまりによって代わり分割含むであろう4nn1であり、再び0(完全一致)から(50-50の比率で極値で分極)の間の値を生成します。これにより、上の図と同じ相対性が得られますが、すべての値は3/4になります(つまり、左から右、上から下に0、16.5%、25%、25%、50になります) %および75%)。1

この2つはどちらも完全に有効な選択です-そのようなインデックスを構築する他の多くの代替方法と同様です。


しかし、m = 1あなたが取得1 - 1 = 0した とき0 / 0。それをどのように修正しますか?
フランチェスコ

@Franceso良い点。場合またはM = 5最初のフォームの式が定義されていません。ただし、さまざまな仮定の下では、制限は1であるように思われ、これはおそらく使用するものです。誰かがそのエッジケースのために1または0のいずれかとしてそれを定義したいなら、それは私にとって理にかなっているように思えます。m=1m=5
Glen_b -Reinstateモニカ

8

「グラフィカルな方法がない」というのは大きなハンディキャップのようなものですが、...ここに奇妙なアイデアがいくつかあります。どちらも評価を連続として扱いますが、これは概念的な弱点であり、おそらく唯一のものではありません...

尖度

  • {1,1,1,5,5,5}の尖度=1。1〜5の評価のコンボでは、尖度が低くなることはありません。
  • {1,2,3,4,5}の尖度= 1.7。低いほど、より極端な値を意味します。高いほど中間です。
  • 分布がほぼ対称でない場合、これは機能しません。以下に説明します。

負の二項回帰

このようなデータフレームとフィットモデルF R E 、Q 、U 、E 、N 、C 、Y R A T I N g +

RatingFrequency1312153749537
負の二項回帰を使用した R a t i n gFrequencyRating+Rating評価が均一に分布している場合R a t i n g係数はゼロに近く、中間値が比例して多い場合は正になります(二項分布を参照)Rating)、係数が上記のような分極分布の場合は負になります- 11.8。

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')

項は、回帰直線の曲率(この場合は凹面)を決定します。私はすでにグラフィックを使用して不正行為を行っているので、正しい方法でコーディングするよりもコーディングが簡単であるため、負の二項式ではなくポアソン回帰に適合させます。Rating



編集:この質問がサイドバーに広告されているの を見てください。クリックすると、時々起こるように、自分自身にリンクするホットネットワークの質問でそれを見ました

だから、これはもっと一般的に役立つ方法で再検討するに値するかもしれないと思った。The Mountain Three Wolf Moon Short Sleeve TeeAmazonカスタマーレビューで私の方法を試すことにしました:

Rating12345Frequency20854891982273


βRating=19.1

σ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(つまり、平均評価で最も偏光度が高い)ですが、はい、2番目のバージョンでは(可能な限り最も偏光度の高い分布に対して)0.33です。
Glen_b -Reinstateモニカ

@Glen_b:そして、比較が必要なさまざまな評価セットで平均が固定されていない場合、最初のバージョンはあまり適切ではありませんか?または、私はあなたの答えを誤解しましたか?
ニックスタウナー14

目的が何であるかによります。「偏った意見をどのように検出するか」というタイトルから判断すると、私は最初の方に傾いています(平均的な評価を考えると、その意見はどのように偏っていますか?)。目的が実際に異なる評価セットを比較することである場合、2番目のアプローチを使用する方がよいと思われる場合があります。その理由は両方をした。私のコメントは批判として意図されたものではありません。あなたがそれについて言及したことはとてもうれしいです。
グレン_b-モニカの復元14

@Glen_b:理解しました:) TBH、負の二項回帰モデリングアプローチの方が良いことを提案していますが、徹底的にテストしたことはほとんどありません。ほとんどの本当の偏光評価セットは均一に偏光されないと感じているので、非対称に対する堅牢性は将来の読者にとって重要になると考えています。
ニックスタウナー14年

5

簡単な方法は分散を計算することだと思います。そのような単純なシステムでは、分散が大きいほど1秒/ 5秒が長くなります。編集の簡単な例:値が1,3,3,5の場合、分散は次のようになります。

132+332+332+5324=1
If your numbers are 1,1,5,5 your variance will be:
(13)2+(13)2+(53)2+(53)24=2

2

I doubt that I can add something valuable to the clever answers already given. In particular, to @Glen_b's fine idea to assess how the variance observed is relatively close to the maximal variance possible under the observed mean. My own blunt and straight from the shoulder proposal is, instead, about some robust measure of dispersion based not on deviations from some centre but directly on distances between data points.

Compute pairwise distances (absolute differences) between all the data points. Drop out 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

ご覧のとおり、3つの統計は「分極」の尺度として非常に異なる場合があります(双極対立ではなく「不一致」を測定する場合は、おそらくHLを選択します)。選択はあなた次第です。1つの概念:平方距離を計算すると、その平均はデータの通常の分散に直接関連します(したがって、分散を計算する@Duncanの提案に到達します)。距離の計算は、大きくても難しくありませんN here because the rating scale is descrete and with relatively few grades, so frequency-weighting algorithm to compute distances offers itself naturally.


The mean of the pairwise squared distances is related to the variance.
Glen_b -Reinstate Monica

0

How about, if the 3 star rating is smaller than the average of the 5 and 4, and also smaller than the average of the 1 and 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
}

Off the top of my head I can't think of any situation in which that wouldn't work. Using the example above: Amazon customer reviews for The Mountain Three Wolf Moon Short Sleeve Tee:

Rating12345Frequency20854891982273

In this case:

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

This would pass the test and be considered divided opinion.


1
what if there were lots of 2s and 4s, and relatively few other ratings? It is hard to imagine this happening in reality, but would one really want to call that polarized?
Nick Stauner

Come to think of it, one could more easily find cases with lots of 1s and 5s, very few 2s and 4s, and a moderate amount of 3s. For instance,
Rating12345Frequency25515525
That's pretty polarized, no? Yet your method would produce the same result for this as for a uniform distribution of 15 of each rating.
Nick Stauner

0

I think what you are looking for is standard deviation:

σ=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.

I don't know what programming language this is, but here's a java method that will give you standard deviation:

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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.