Comment détecter les opinions polarisées des utilisateurs (étoiles hautes et basses)


15

Si j'ai un système de classement par étoiles où les utilisateurs peuvent exprimer leur préférence pour un produit ou un article, comment puis-je détecter statistiquement si les votes sont très "divisés". Cela signifie, même si la moyenne est de 3 sur 5, pour un produit donné, comment puis-je détecter s'il s'agit d'une répartition 1-5 par rapport à un consensus 3, en utilisant uniquement les données (pas de méthodes graphiques)


3
Quel est le problème avec l'utilisation d'un écart-type?
Spork


1
Essayez-vous de détecter la "distribution bimodale"? Voir stats.stackexchange.com/q/5960/29552
Ben Voigt

1
En science politique, il existe une littérature sur la mesure de la polarisation politique qui a examiné différentes manières de définir ce que l'on entend par «polarisation». Un bel article qui discute en détail 4 différentes manières simples de définir la polarisation est le suivant (voir pp. 692-699): educ.jmu.edu/~brysonbp/pubs/PBJ.pdf
Jake Westfall

Réponses:


12

On pourrait construire un indice de polarisation; exactement comment on le définit dépend de ce qui constitue être plus polarisé (c'est-à-dire que voulez-vous dire exactement, dans des cas particuliers de bord, par plus ou moins polarisé?):

Par exemple, si la moyenne est «4», un partage 50-50 entre «3» et «5» est-il plus ou moins polarisé que 25% «1» et 75% «5»?

Quoi qu'il en soit, en l'absence de ce type de définition spécifique de ce que vous voulez dire, je proposerai une mesure basée sur la variance:

Étant donné une moyenne particulière, définissez la répartition la plus polarisée possible comme celle qui maximise la variance *.

* (NB cela voudrait dire que 25% '1' et 75% '5' est nettement plus polarisé que la répartition 50-50 de '3 et' 5; si cela ne correspond pas à votre intuition, n'utilisez pas la variance)

Cet indice de polarisation est donc la proportion de la plus grande variance possible ( avec la moyenne observée ) dans la variance observée.

Appelez la note moyenne ( ).mm=X¯

La variance maximale se produit lorsqu'une proportion est à et est à ; cela a une variance de .p=m-1451-p1(m-1)(5-m)nn-1

Il suffit donc de prendre la variance de l'échantillon et de la diviser par ; cela donne un nombre entre (accord parfait) et (complètement polarisé).(m-1)(5-m)nn-101

Pour un certain nombre de cas où la note moyenne est de 4, cela donnerait ce qui suit:

entrez la description de l'image ici


Vous préférerez peut- être plutôt ne pas les calculer par rapport à la plus grande variance possible avec la même moyenne, mais plutôt en pourcentage de la plus grande variance possible pour toute note moyenne . Cela impliquerait de diviser à la place par , et donne à nouveau une valeur entre 0 (accord parfait) et (polarisée aux extrêmes dans un rapport 50-50). Cela donnerait les mêmes relativités que le diagramme ci-dessus, mais toutes les valeurs seraient 3/4 aussi grandes (c'est-à-dire, de gauche à droite, de haut en bas, elles seraient de 0, 16,5%, 25%, 25%, 50 % et 75%). 14nn-11

L'un ou l'autre des deux est un choix parfaitement valable - comme n'importe quel autre nombre de manières alternatives de construire un tel indice.


Mais alors quand m = 1vous obtenez 1 - 1 = 0et 0 / 0. Comment corrigez-vous cela?
Francesco

@Franceso Bon point. Lorsque ou m = 5, la formule du premier formulaire n'est pas définie. Cependant, sous diverses hypothèses, la limite semble être 1, ce qui est probablement ce que j'utiliserais. Si quelqu'un voulait le définir comme 1 ou 0 pour ce cas de bord, cela me semblerait raisonnable. m=1m=5
Glen_b -Reinstate Monica

8

"Pas de méthodes graphiques" est en quelque sorte un gros handicap, mais ... voici quelques idées étranges. Les deux traitent les notes comme continues, ce qui est en quelque sorte une faiblesse conceptuelle, et probablement pas la seule ...

Kurtosis

  • Le kurtosis de {1,1,1,5,5,5} = 1. Vous n'obtiendrez pas un kurtosis inférieur avec un combo de 1 à 5 notes.
  • Le kurtosis de {1,2,3,4,5} = 1,7. Plus bas signifie des valeurs plus extrêmes; plus élevé signifie plus moyen.
  • Cela ne fonctionnera pas si la distribution n'est pas à peu près symétrique. Je vais démontrer ci-dessous.

Régression binomiale négative

Avec un bloc de données comme celui-ci: Ajuster le modèle F r e q u e n c y R a t i n g +

RunetjengFrequency1312153sept49537
utilisant une régression binomiale négative. LeFrequencyRunetjeng+Runetjeng coefficient R a t i n g doit être proche de zéro si les notes sontuniformément distribuées, positif s'il y a proportionnellement plus de valeurs moyennes (cf.distribution binomiale), ou négatif avec des distributions polarisées comme celle ci-dessus, pour lesquelles le coefficient est - 11.8.Runetjeng

FWIW, voici le code lequel j'ai joué:

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

Je ne peux pas résister à jeter dans un complot ...

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

Le Runetjeng



Edit: Je viens de voir cette question annoncée dans la barre latérale: et quand j'ai cliqué, je l'ai vue dans les Hot Network Questions se reliant à elle-même, comme cela arrive parfois ,

j'ai donc pensé que cela mériterait d'être revu d'une manière plus généralement utile. J'ai décidé d'essayer mes méthodes sur les avis clients Amazon pour le t-shirt à manches courtes The Mountain Three Wolf Moon :

Runetjeng12345Frequency20854891982273


βRunetjeng=-19,1

σFrequencyT-shirt à manches courtes The Mountain Three Wolf Moon2=1,31
x=rep(5:1,c(2273,198,89,54,208))var(x)/(4*length(x)/(length(x)-1))


C'est environ 0,77 pour la première version de l'indice de polarisation (c'est-à-dire par rapport au plus polarisé compte tenu de la moyenne), mais oui, comme vous dites, 0,33 pour la deuxième version (par rapport à la distribution la plus polarisée possible).
Glen_b -Reinstate Monica

@Glen_b: Et la première version n'est-elle pas moins appropriée lorsque la moyenne n'est pas fixée sur différents ensembles de notes à comparer? Ou ai-je mal compris votre réponse?
Nick Stauner

Cela dépend de l'objectif. A en juger par le titre "comment détecter les opinions polarisées", je me penche vers la première ( étant donné la note moyenne, quelle est l'opinion polarisée à ce sujet? ). Si l'objectif était effectivement de comparer différents ensembles de notes, il pourrait être plus judicieux de travailler avec la deuxième approche, comme vous le suggérez. C'est pourquoi j'ai fait les deux. Mon commentaire ne se voulait en aucun cas une critique; Je suis flatté que vous l'ayez mentionné.
Glen_b -Reinstate Monica

@Glen_b: Compris :) TBH, je suggère que l'approche de modélisation de régression binomiale négative est meilleure, mais j'avoue que je l'ai à peine testée à fond. J'ai l'impression que la plupart des ensembles de notes polarisés réels ne seront pas également polarisés, donc je pense que la robustesse contre l'asymétrie sera importante pour les futurs lecteurs.
Nick Stauner

5

(1-3)2+(3-3)2+(3-3)2+(5-3)24=1
(1-3)2+(1-3)2+(5-3)2+(5-3)24=2

2

Je doute que je puisse ajouter quelque chose de précieux aux réponses intelligentes déjà données. En particulier, à l'idée fine de @ Glen_b d'évaluer comment la variance observée est relativement proche de la variance maximale possible sous la moyenne observée. Ma propre proposition directe et directe de l'épaule concerne plutôt une mesure de dispersion robuste basée non pas sur des écarts par rapport à un centre mais directement sur des distances entre des points de données.

jeje

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

N


La moyenne des distances au carré par paire est liée à la variance.
Glen_b -Reinstate Monica

0

Que diriez-vous, si la note de 3 étoiles est inférieure à la moyenne des 5 et 4, et également inférieure à la moyenne des 1 et 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
}

Du haut de ma tête, je ne peux penser à aucune situation dans laquelle cela ne fonctionnerait pas. En utilisant l'exemple ci-dessus: Commentaires des clients d'Amazon pour le t-shirt à manches courtes The Mountain Three Wolf Moon :

Runetjeng12345Frequency20854891982273

Dans ce cas:

Runetjenguneverunege(1,2)3uneverunege(4,5)Frequency131891235

Cela passerait le test et serait considéré comme une opinion divisée.


1
Et s'il y avait beaucoup de 2 et de 4 et relativement peu d'autres notes? Il est difficile d'imaginer cela en réalité, mais voudrait-on vraiment appeler cela polarisé?
Nick Stauner

Runetjeng12345Frequency25515525

0

σ=je=0n(Xje-μ)2noù σ est l'écart type, n est le nombre de points de données,X représente tous les points de données, etμ est la moyenne.

Je ne sais pas de quel langage de programmation il s'agit, mais voici une méthode java qui vous donnera l'écart type:

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;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.