Pregunta

Por consejo de estudiantes este año, estoy en el comité de "canciones", escogemos las canciones. Por desgracia, los niños en los bailes siempre terminan odiando algunas de las opciones de la canción estúpidos. Pensé que podría hacer que sea diferente este año. El jueves pasado, creé una simple aplicación PHP para que los niños podrían presentar las canciones en la base de datos, proporcionando un nombre de la canción, artista y género (de un menú desplegable). También he implementado una función de votación similar a Reddit de. Haga clic en un botón de upvote, has upvoted la canción, incrementa el recuento de upvote. Lo mismo con downvotes.

anywho, en la base de datos, que tiene tres fragmentos de información que pensé que podría utilizar para evaluar estas canciones, upvotes, downvotes, y una marca de tiempo. Durante un tiempo, el rango fue creado por simple hecho de tener las canciones con el aumento en el recuento "voto" en la parte superior. Es decir, los más upvotes, menos downvotes (upvotes - downvotes) estarían en la parte superior de la lista. Eso funcionó, por un tiempo, pero había alrededor de 75 canciones en la lista para el domingo, y las canciones que se presentaron primero eran simplemente en la parte superior de la lista.

domingo, me cambió el algoritmo de rango a (upvotes - downvotes) / (CurrentTimestamp - CreationTimestamp), es decir, cuanto mayor es el recuento de votos en la menor cantidad de tiempo, mayor será la canción estaría en la lista. Esto funciona, mejor, pero todavía no como me gustaría.

¿Qué pasa ahora, es que la instantánea se crea y upvoted a un recuento de votos de una canción 1, que termina en la parte superior de la lista en algún lugar. Canciones que tienen recuentos de votos en los aspectos negativos no son vistos a menudo porque los niños no suelen desplazarse a la parte inferior.

supongo que podría ordenar los datos por lo que las canciones más bajos aparecen en la parte superior, por lo que las personas se ven obligadas a ver las canciones más bajos. Honestamente, nunca he tenido que trabajar en un algoritmo de "popularidad" antes, así que, ¿cuáles son sus pensamientos?

http://www.songs.taphappysoftware.com - No sé si debería poner esto aquí o no, podría causar que algunas canciones no deseadas en el baile: 0

¿Fue útil?

Solución

Esa es una pregunta muy buena. Hay algunas preguntas similares que se han planteado aquí.

Este artículo es probablemente una buena lugar para comenzar. Al parecer upvotes menos downvotes es una mala manera de hacerlo. La mejor manera es usar matemáticas complicado para asignar una puntuación a cada uno y ordenar por eso.

Aquí es una función de puntuación en Ruby del artículo de:

require 'statistics2'

def ci_lower_bound(pos, n, power)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-power/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

pos es el número de positivos calificación, n es el número total de calificaciones, y power se refiere a la potencia estadística: 0,10 recoger tener una 95% de probabilidad de que sus menores está obligado corregir, 0,05 para tener una posibilidad 97,5%, etc.

Como una cosa usabilidad, me ordenar los datos por la puntuación, pero no mostraría el resultado al usuario. Yo sólo mostrará el número de upvotes y downvotes.

Otros consejos

¿Qué hay de clasificar las canciones por el tiempo o número de votos negativos (positivos) + publicar? Si su objetivo es dar a cada canción la misma atención, esto suena lo suficientemente bueno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top