2010-09-20 11 views
6

Bajo los mensajes generados por los usuarios en mi sitio, tengo una amazona como sistema de clasificación:¿Cómo debo solicitar estos puntajes "útiles"?

Was this review helpful to you: Yes | No 

Si hay votos, que muestran los resultados anteriores que la línea de este modo:

5 of 8 people found this reply helpful. 

I Me gustaría ordenar las publicaciones basadas en estas clasificaciones. Si estuvieras clasificando de más útil a menos útil, ¿cómo solicitarías las siguientes publicaciones?

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 

Claramente, no es justo para ordenar sólo en el porcentaje útiles, de alguna manera el total de votos deben tenerse en cuenta en. ¿Hay una manera estándar de hacer esto?

ACTUALIZACIÓN:

Uso de fórmulas de Charles para calcular el Agresti-Coull menor rango y la clasificación en él, así es como los ejemplos anteriores lo solucionaría:

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% 

Intuitivamente, esto se siente bien .

ACTUALIZACIÓN 2:

Desde el punto de vista de aplicación, no quiero ser la ejecución de estos cálculos cada vez que tire hacia arriba una lista de mensajes. Estoy pensando en actualizar y almacenar el límite inferior de Agresti-Coull en un cronograma regular, controlado por cron (actualizando solo aquellas publicaciones que han recibido un voto desde la última ejecución) o actualizarlo cada vez que se recibe una nueva votación .

Respuesta

5

de cada puesto, generar límites en lo útil que usted espera que sea. Prefiero usar el intervalo Agresti-Coull. Pseudocódigo:

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

A continuación, tome el extremo inferior de la estimación y ordene esto. Entonces, el 2/2 es (por Agresti-Coull) el 95% de probabilidad de caer en el rango de "ayuda" del 23.7% al 100%, por lo que está por debajo del 999/1000 que tiene un rango de 99.2% a 100% (desde .237 < .992).

Editar: Dado que algunas personas parecen haber encontrado esto útil (ja, ja), permítanme señalar que el algoritmo puede modificarse en función de la confianza/aversión al riesgo que desea ser.Cuanta menos confianza necesite, más dispuesto estará a abandonar las revisiones "comprobadas" (votos altos) para las revisiones no probadas pero de alto puntaje. Un intervalo de confianza del 90% da kappa = 1.95996398, un intervalo de confianza del 85% da 1.78046434, un intervalo de confianza del 75% da 1.53412054, y el intervalo de confianza del 50% de precaución con el viento da 1.15034938.

El intervalo de confianza del 50% da

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% 

que no es tan diferente en general, pero lo hace preferir el 2/2 a la seguridad del 3/4.

+1

Para los empates (especialmente aquellos en 0), sugiero que se rompa a favor del mayor número de votos positivos, y luego del menor número de votos a favor. – Charles

+0

guau, Charles, esto es núcleo duro. muy impresionante. Lo ejecutaré en mis ejemplos y veré cómo lo ordenan (¡después de dedicar unos minutos a educarme en Agresti-Coull en la wikipedia!) – mitchf

+0

Avísame cómo te va. Puedo dar más información y/o referencias según sea necesario. – Charles

4

Esta pregunta probablemente es mejor hecha en http://stats.stackexchange.com.

Supongo que aún desea realizar un pedido aumentando la "ayuda".

Si usted quiere saber cómo precisa un número dado es, la forma más sencilla es utilizar la raíz cuadrada de la varianza de la Binomial distribution con n igual al número total de respuestas y p la fracción de respuestas que eran 'muy útil '.

+1

+1 para stats.stackexchange.com – Thilo

1

Una solución muy simple sería ignorar todo con menos de una cantidad límite de votos, y luego ordenar por porcentaje.

Por ejemplo (requieren al menos cinco votos)

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

Depende de la tasa esperada de comentarios positivos y del número de personas que votan en promedio. Si, como en el ejemplo que das, que va a tener a veces 5 y 10 personas con derecho a voto y otras veces a 1000, entonces sugeriría el punto medio Wilson:

(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) 
Cuestiones relacionadas