2010-09-20 6 views
6

Unter den nutzergenerierten Beiträge auf meiner Website habe ich eine Amazon-like-Rating-System:Wie sollte ich diese "hilfreiche" Noten bestellen?

Was this review helpful to you: Yes | No 

Wenn es Stimmen gibt, zeige ich die Ergebnisse oberhalb dieser Linie wie folgt:

5 of 8 people found this reply helpful. 

I möchte die Beiträge basierend auf diesen Rankings sortieren. Wenn Sie von sehr hilfreich bis wenig hilfreich eingestuft würden, wie würden Sie die folgenden Beiträge bestellen?

a) 1/1 = 100% helpful 
    b) 2/2 = 100% helpful 
    c) 999/1000 = 99.9% helpful 
    b) 3/4 = 75% helpful 
    e) 299/400 = 74.8% helpful 

ist klar, es ist nicht richtig nur auf dem Prozentsatz hilfreich zu sortieren, irgendwie die Gesamtstimmenzahl eingerechnet werden soll. Gibt es eine standardisierte Möglichkeit, dies zu tun?

UPDATE:

Formeln Mit Charles' dem Agresti-Coull unteren Bereich und Sortierung auf sie zu berechnen, das ist, wie die obigen Beispiele würden sort:

1) 999/1000 (99.9%) = 95% likely to fall in 'helpfulness' range of 99.2% to 100% 
    2) 299/400 (74.8%) = 95% likely to fall in 'helpfulness' range of 69.6% to 79.3% 
    3) 3/4 (75%) = 95% likely to fall in 'helpfulness' range of 24.7% to 97.5% 
    4) 2/2 (100%) = 95% likely to fall in 'helpfulness' range of 23.7% to 100% 
    5) 1/1 (100%) = 95% likely to fall in 'helpfulness' range of 13.3% to 100% 

Intuitiv dieses Recht fühlen .

UPDATE 2:

Aus anwendungstechnischer Sicht, möchte ich nicht, diese Berechnungen ausgeführt werden jedes Mal, wenn ich eine Liste der Beiträge nach oben ziehen. Ich denke, ich werde entweder die Agresti-Coull-Untergrenze entweder aktualisieren oder speichern, entweder in einem regulären, cron-gesteuerten Zeitplan (nur diejenigen Beiträge aktualisieren, die seit dem letzten Durchlauf eine Abstimmung erhalten haben) oder sie aktualisieren, wenn eine neue Stimme empfangen wird .

Antwort

5

Für jeden Posten erzeugen Grenzen auf, wie hilfreich Sie erwarten, dass es sein. Ich bevorzuge das Agresti-Coull-Intervall. Pseudocode:

float AgrestiCoullLower(int n, int k) { 
    //float conf = 0.05; // 95% confidence interval 
    float kappa = 2.24140273; // In general, kappa = ierfc(conf/2)*sqrt(2) 
    float kest=k+kappa^2/2; 
    float nest=n+kappa^2; 
    float pest=kest/nest; 
    float radius=kappa*sqrt(pest*(1-pest)/nest); 
    return max(0,pest-radius); // Lower bound 
    // Upper bound is min(1,pest+radius) 
} 

Dann nehmen Sie das untere Ende der Schätzung und sortieren nach diesem. So liegt der 2/2-Wert (von Agresti-Coull) zu 95% wahrscheinlich im Bereich der "Hilfsbereitschaft" von 23,7% bis 100%, so dass er unterhalb des 999/1000 liegt, der Bereich von 99,2% bis 100% (seit .237 < .992).

Edit: Da einige Leute das hilfreich gefunden haben (ha ha), lassen Sie mich beachten, dass der Algorithmus basierend darauf, wie zuversichtlich/risikoscheu Sie sein wollen, optimiert werden kann.Je weniger Vertrauen Sie brauchen, desto eher werden Sie die "bewährten" (High-Vote) Bewertungen für die ungeprüften, aber hoch bewerteten Bewertungen aufgeben. Ein 90% -Konfidenzintervall ergibt kappa = 1,95996398, ein 85% -Konfidenzintervall ergibt 1,78046434, ein 75% -Konfidenzintervall ergibt 1,53412054, und das 50% -Konfidenzintervall für alle Vorsicht bis zum Wind ergibt 1,15034938.

Der 50% Konfidenzintervall gibt

1) 999/1000 (99.7%) = 50% likely to fall in 'helpfulness' range of 99.7% to 100% 
2) 299/400 (72.2%) = 50% likely to fall in 'helpfulness' range of 72.2% to 77.2% 
3) 2/2 (54.9%) = 50% likely to fall in 'helpfulness' range of 54.9% to 100% 
4) 3/4 (45.7%) = 50% likely to fall in 'helpfulness' range of 45.7% to 91.9% 
5) 1/1 (37.5%) = 50% likely to fall in 'helpfulness' range of 37.5% to 100% 

, die insgesamt nicht so verschieden ist, aber es hat die 2/2 auf die Sicherheit der 3/4 bevorzugen.

+1

Bei Bindungen (besonders bei 0) schlage ich vor, zugunsten der größten Anzahl von Upvotes, dann der kleinsten Anzahl von Downvotes zu brechen. – Charles

+0

Wow, Charles, das ist der harte Kern. sehr beeindruckend. Ich werde es auf meinen Beispielen laufen lassen und sehen, wie sie sortieren (nachdem ich ein paar Minuten damit verbracht habe, mich auf Agresti-Coull in Wikipedia zu unterrichten!) – mitchf

+0

Lassen Sie mich wissen, wie es geht. Ich kann mehr Informationen und/oder Referenzen nach Bedarf geben. – Charles

4

Diese Frage ist wahrscheinlich besser auf http://stats.stackexchange.com gestellt.

Ich denke, Sie möchten immer noch durch die Erhöhung der "Hilfsbereitschaft" bestellen.

Wenn Sie wissen wollen, wie genau eine gegebene Zahl ist, ist der einfachste Weg, um die Quadratwurzel der Varianz der Binomial distribution mit n gleich die Gesamtzahl der Antworten und p der Anteil der Antworten zu verwenden, die ‚hilfreich waren ".

+1

+1 für stats.stackexchange.com – Thilo

1

Eine sehr einfache Lösung wäre es, alles mit weniger als einer abgeschnittenen Anzahl von Stimmen zu ignorieren und dann nach Prozent zu sortieren.

Zum Beispiel (erfordert mindestens fünf Stimmen)

1. 99.9% (1000 votes) 
    2. 74.8% (400 votes) 
    3-5. waiting for five votes 
1

Es hängt von der erwarteten Rate der positiven Rückmeldung und der Anzahl der Leute ab, die im Durchschnitt abstimmen. Wenn Sie wie im Beispiel Sie geben, Sie manchmal 5 und 10 Personen stimmen und zu anderen Zeiten ein 1000 haben werden, dann würde ich den Wilson Mittelpunkt vorschlagen:

(x+z^2/2)/(n+z^2) The midpoint of the Adjusted Wald Interval/Wilson Score 

where: 
n = Sum(all_votes), 
x = Sum(positive_votes)/n, 
z = 1.96 (fixed value)