Archivo de la categoría: karma

Explicación simple del algoritmo de promoción de noticias (promote)

Actualización noviembre 4, 2012: Se modifica el punto 4, con la explicación del nuevo algoritmo de afinidad.

Actualización mayo 7, 2009: En la pestaña log de cada noticia se puede observar en qué momento se hicieron los reajustes de karma y las notas informativas del algoritmo.

Siempre que una noticia controvertida con varios votos negativos  (y/o que algunos piensen que no “queremos que salga” aunque le hayamos votado positivo o dado publicidad en nuestros blogs) no sale publicada surgen sospechas o conspiranoias de que “hay manipulación”, aunque el algoritmo de promoción es público, como así también los cálculos que realiza. Sigue leyendo

Gráficos de karma, votos y vídeo de la conferencia en Zaragoza

Historial del cálculo del karma de cada noticia

Hace unos días implementamos gráficos para facilitar la comprensión de los cálculos del karma. Como antes, se acceden de la pestaña “log” de cada noticia. Antes estaba la misma información sólo que con un listado en formato texto bastante difícil de interpretar.

Con los gráficos se fácilmente observable y además las mismas anotaciones de texto son visibles en el tooltip cuando se pasa sobre el punto de la curva de karma (la línea naranja).

Log de cálculo de karmaEstos gráficos sólo se generan en cuanto se ha reajustado el karma, eso sucede cada vez que supera un umbral para entrar a la lista del “promote“. Por lo tanto todas las noticias publicadas lo tendrán como así también las que son o fueron candidatas a publicarse. Las anotaciones se corresponden con las explicaciones más detalladas de Explicación simple del algoritmo de promoción de noticias (promote).

Historial de votos

Cada usuario puede ver un resumen de su actividad de votos desde su perfil. El grafico es similar en apariencia y muestra el número de votos por hora. Los marcadores del eje X corresponden a los últimos 30 días. El gráfico sólo se muestra si el usuario tiene al menos 20 votos a noticias en los últimos 2 meses.

votos de usuarios

Secretos del karma

Estuvimos en Zaragoza unos días, donde dimos una larga charla sobre los problemas que tenemos en Menéame para evitar abusos, cómo usamos el karma, qué problemas presenta y cómo los solucionamos. La charla es útil para los que crean que es sencillo evitar los “pucherazos”, el spam, el voto de “clones”, etc. Vídeo de la conferencia. PDF de la presentación.

El Gobierno estudia el algoritmo del karma en manéame con el objetivo de modificar la Ley Electoral

El Gobierno de España está interesado en el algoritmo que calcula el karma de los usuarios de menéame «para trazar los fundamentos de una nueva Democracia 2.0» que «debería ser una actualización necesaria y un ejemplo global para todas las democracias modernas», declaró un técnico del Gobierno interesado en nuestro código. «El voto de las personas que trabajan en favor de nuestra sociedad debe tener más valor que el de los ciudadanos pasivos que sólo van a votar cada cuatro años», nos explicó el representante de la nueva Comisión Democracia 2.0.

Sigue leyendo

Penalización de “endogamia de votos”

Desde hace unas horas está funcionando el nuevo “promote” (código fuente) que calcula y penaliza las “altas endogamias” (o afinidades) de votos entre usuarios. Así se evitarán que un grupo de usuarios se voten siempre entre ellos y puedan publicar las noticias más fácilmente.

La técnica es algo similar a la “diversidad” que usan en Digg –al menos así lo cuentan– pero en nuestro caso se usa directamente el karma que aporta cada usuario a una noticia y se aplicará a aquellos usuarios que votan a [casi] todos los envíos de otros usuarios.

La penalización consiste de un coeficiente entre 0 y <1  que se calcula al karma aportado por cada usuario. El coeficiente de afinidad representa el porcentaje de votos a los envíos de un usuario. Así en el último mes A votó un 30% de los envíos de B que obtuvieron muchos votos (aunque no haya salido publicada), los siguientes votos de A a B valdrán 0.7. Si en cambio votó al 90%, el voto valdrá 0.1 de su valor original –con un mínimo de 5–. Si en cambió no llegó a votar al 10% (por ahora, mientras está de pruebas) el voto no sufrirá penalización alguna.

Además de la ventaja fundamental de evitar “endogamias”, también penaliza a aquellos usuarios que votan “a lo loco” basado sólo en el título o autor del envío.

Pueden surgir problemas, como que requiera varias horas hasta que los coeficientes de cálculo se estabilicen, o que haya que hacer ajustes al promote por penalizaciones injustas. Estaremos muy pendientes de esto en los días siguientes.

Actualización (9/10 21 hs): Después de probar en parelelo durante casi 24 horas –casi no hay casos para comprobar–, lo mismo funciona para los votos negativos. El cálculo es similar pero negativos, es decir que el mínimo valor negativo que puede dar es -5.

Aclaración: No afecta al karma de los usuarios, sólo afecta al cálculo del karma total de las noticias. Aunque haya “afinidad” del 100% el voto siempre cuenta como positivo y suma karma según lo explicado arriba.

Nota: Para los que vayan a mirar el código fuente, la función que calcula la afinidad está al final, se llama check_affinity(). Puede verse como se aplica en el coeficiente un par de líneas más abajo desde donde es llamada la función (que devuelve un diccionario con los coeficientes para cada usuario).

[*] Sí, los hay, especialmente esos que usan foros –y mésenyers– para avisar que han subido noticias de sus sitios/foros/temáticas. Últimamente hemos detectado varios, es la motivación, para evitar estos “abusos” sin que nos obliguen a banear sitios o cuentas de usuarios.

Bonus temporal de las noticias

Casi desde el primer día del menéame, el programa que selecciona la noticia a publicar aplica un bonus a las noticias más recientes. El único objetivo de dichos bonus es publicar rápidamente las noticias que captan el interés de los que votan, en son aquellas que impactan más o que se refieren a un suceso importante.

Obviamente, una noticia que sale publicada en poco tiempo gracias a ese bonus tiene menos votos que las “normales”. Así, cada vez que se publica una noticia gracias a su bonus surgen comentarios conspiranoicos de que hay manipulación o que existe una “mafia” que hace que ocurra esto. Nada más lejos de la realidad, es así como funciona el algoritmo y se puede verificar en los resultados del cálculo: la columna BONUS indica el coeficiente que se le aplica, normalmente vale uno, pero en caso de noticias recientes se observará que el coeficiente es mayor que uno.

Cómo funciona

La parte fundamental del código es el siguiente

// BONUS
// Give more karma to news voted very fast during the first two hours (ish)
if ($link->content_type != 'image'
		&& $link->negatives < ($link->votes/10)
		&& $now - $link->date < 7200
		&& $now - $link->date > 600) {
	$link->new_coef = 2 - ($now-$link->date)/7200;
	// if it's has bonus and therefore time-related, use the base min_karma
	if ($decay > 1)
		$karma_threshold = $past_karma;
	else
		$karma_threshold = $min_karma;
} else {
	// Otherwise use normal decayed min_karma
	$karma_threshold = $min_karma;
	$link->new_coef = 1;
}

Lo que hace es muy sencillo. Si una noticia fue enviada hace menos de 2 horas y más de 10 minutos –para evitar que salga demasiado rápido sin que otros tengan oportunidad de votar– su karma se verá multiplicado por un coeficente mayor que  1 y menor 2. Este es el valor que se puede ver en la columna BONUS explicada anteriormente.

El valor del coeficiente depende del tiempo que ha pasado –decae proporcionalmente–, es lo que se hace la primera línea resaltada.  Valdrá casi 2 a los pocos minutos de haber sido enviada y decaerá proporcionalmente a 1 al llegar a las 2 horas

Además hay otra restricción. El bonus no se aplica si la noticia tiene más de un 10% de votos negativos.

No hay magia, no hay manipulación. Es un algoritmo que está implementado desde el principio y que funcionó en general muy bien para publicar rápidamente aquellas noticias que los votantes consideran muy relevantes.

Mitos del karma: votar a las más votadas da más karma

Parece que uno de los mitos sobre el karma es que si se votan las noticias con más votos o que están en el promote o en las populares de pendientes el karma sube mucho. Es absolutamente falso, el voto positivo a las noticias influye muy poco, y en muchos casos puede afectar negativamente.

Los votos positivos cuentan más para el karma cuanto más temprano se vote,  aún así la influencia es muy pequeña. La media del último cálculo es exactamente 0.175577 puntos, el máximo que dio es 4.733 y el mínimo  -4.167.

En pocas palabras, aporta muy poco de media y el máximo sólo lo pueden tener muy pocas personas (las que siguieron durante tiempo las pendientes y votaron “bien” rápidamente, a los pocos minutos que hayan sido enviadas).

La mejor forma de conseguir karma es enviando noticias y haciendo buenos comentarios. Voy a coger por ejemplo el “log” (lo puede ver cada usuario en su perfil) del usuario utah (sólo porque fue uno de los que me preguntó por la fisgona). Este usuario no publicó ninguna noticia en los últimos días, pero envió varias y sin embargo su karma actual es 13.53.

Su log es el siguiente:

1. events: votes: 209, logs: 60
2. Links karma positive average: 110, negative average: 0.71428571428571, karma1: 3.7283950617284
3. Votes to links: votes to published: 10, to non published: 24 to discarded: 0
4. points to published: 5, point average: 0.5, karma2: 0.43047619047619
5. Comment votes received: votes: 34, votes karma: 256, karma4: 4.5176470588235
6. Utah Karma base: 6.0303616184678
7. Final karma: average: 13.525375985899, calculated karma: 14.706879929496, increasing (status: normal)

Línea por línea:

  1. En total tiene 209 votos y 60 eventos de comentarios, notas o envíos.
  2. La media del karma que recibió de votos en sus noticias es de 110, los negativos 0.71, por lo que le otorga 3.73 puntos.
  3. Votó a 10 noticias que luego salieron publicadas y 24 a no publicadas. No votó negativa a ninguna noticia que luego haya sido descartada.
  4. Los “puntos” totales a noticias publicadas es 5, la mitad de los votos, eso es porque su “coeficiente temporal” es de 0.5, es decir que de media votó las noticias prácticamente a la mitad del tiempo entre que fueron enviadas y salió publicada. Es un buen número, sin embargo sólo le otorga 0.43 puntos de karma.
  5. Los votos que recibieron sus comentarios, en total 34 votos con un karma total de 256, se le otorgan 4.52 puntos de karma.
  6. El karma base por su antigüedad ( 6 + 0.03), 6.03
  7. El karma final calculado del período es 14.71, que resulta de sumar 3.73 + 0.43 + 4.52 + 6.03. Luego se hace la media ponderada con el karma anterior (alfa = 0.8 cuando se incrementa), que es igual a 14.71 * 0.8 + karma anterior * 0.2. Ese es el resultado final de 13.53.

O sea, si lo que se pretende es incrementar karma, es mejor enviar noticias razonables y hacer buenos comentarios. El votar “desesperado” a las noticias no sirve de nada, sólo sirve votar bien “temprano”. Si se espera a ver las noticias más votadas o las que aparecen en las populares, lo más probable es que sea penalizado. Esta penalización es justamente para minimizar  el karmawhorismo y los bots.

Conclusión: Vota lo que te venga en ganas, no busques el karma votando a las noticias con más votos o karma. No servirá de nada, a menos que tengas un ojo muy bueno y estés mucho tiempo en el Menéame mirando cuáles son las buenas noticias que entran y votarlas inmediatamente. En todo caso, mirar las populares sirve fundamentalmente para votar negativo a aquellas que no te parece que deban ir a portada, o darle un pequeño empujon a aquellas que te parezcan buenas. Pero nada más [*].

PS: también penaliza votar negativo en exceso a comentarios y noticias, pero sólo en “exceso”. En el caso de noticias es más o menos si la proporción de negativos de noticias no descartadas es muy alta (la penalización sale con el comentario Unfair negative votes to non discarded). En el caso de comentarios si votas negativos a muchos comentarios que acaban con un karma positivo (el aviso que sale en estos casos es Unfair negative comments votes).

[*] El objetivo fundamental del promote es poder verificar o controlar cómo se hacen los ajustes de karma para cada noticia. Es decir una herramienta para despejar dudas y un control al propio menéame. Algunos dicen que haber publicado el código no garantiza que sea el mismo que hace los cálculos. Por eso también publicamos los cálculos en “tiempo real”.

Publicación manual de una noticia y penalización

Hace unas horas se envió la noticia Menéame no es lo que era. A los pocos minutos de enviarla, los logs y scripts de control avisaron de posibles abusos de votos anónimos. Al ir a verificarlo vi que provenían todos de unas pocas redes, especialmente de 81.41.40.

Al contrastar esas IPs con la base de datos, todas coincidían con el propio usuario que envió la noticia, posmuybien que debía estar reiniciando router después de cada voto. Además ese usuario es el propietario del blog del envío en cuestión.

Inmediatamente hicimos lo que se siempre hacemos en estos casos de abusos: deshabilitar al usuario y banear temporalmente al dominio.

El problema es que la noticia tuvo muchos votos pero que el karma se veía reducido por el programa que verifica y promueve las noticias, el promote7.php. Este programa penalizaba con el 50% del karma a las noticias cuyo autor haya sido deshabilitado por abusos, y desde mi punto de vista generó una injusticia clara derivada de un “bug” del programa.

Nos generó un dilema importante. Tenía el karma nominal para salir publicada si su autor no hubiese intentado engañar al sistema –paradójico pero bastante habitual que esto lo haga alguien que se queja de presunta falta de honestidad– por lo que todos los que la votaron “pagaban” la tontería de una sola persona.

Por otro lado la noticia es “crítica” y todavía podía generar aún más suspicacias –si hubiese sido de tono contrario quizás nadie se hubiese preocupado– por entender que había manipulación. Pero no, era sólo un “error”mío introducido al programa y que se aplica a todos por igual (además no viene mal de vez en cuando una buena discusión y flames para intentar encontrar problemas que no lo detectamos normalmente).

Así que tomé la decisión –por primera, y espero que última vez– de publicarla modificando la base de datos manualmente [1] tal como indico en su entradilla y luego modificar el programa para intentar que no nos vuelva a meter en el mismo dilema (ahora la penalización es del 25%).

[1] Por esa razón el evento de “promoción” no aparecerá en el “log” de la noticia.

Podría haber modificado el programa y quizás nadie se hubiese dado cuenta, pero tampoco me pareció adecuado hacer estas modificaciones en el medio de un conflicto. Mejor que quede a la luz.

Aprovecho la oportunidad para aclarar que, aunque mantenemos la máxima discreción, estos intentos de abusar con votos son relativamente habituales y que siempre tomamos y seguiremos tomando las mismas medidas: deshabilitar a los usuarios y el sitio involucrados. En el caso de usuarios se deshabilita la cuenta definitivamente (a los dos meses se borran los datos automáticamente y el nombre de usuario y cuenta de correo puede volver a ser usado). El sitio web es “baneado” temporalmente (entre 3 meses y un año dependiendo de la “gravedad”), los reincidentes son baneados definitivamente.

Así y todo, si alguien considera injusta o errónea una medida en particular, puede escribirnos a adm en meneame.net, dejar un “reporte de bug” en el wiki, o un comentario en este blog. Las reglas son que se identifique como mínimo con su nombre de usuario en Menéame.

Gracias y disculpas por las posibles confusiones y malentendidos.

Novedades de bloqueos a dominios y votos a comentarios

Desde ayer tenemos un nuevo módulo en el Menéame para controlar los dominios bloqueados porque no respetan las condiciones de uso del Menéame. Antes este trabajo lo hacía manualmente modificando una variable de configuración, ahora será más fácil y además los “bans” caducan automáticamente.

También hemos solucionado un problema que afectó a unos pocos sitios –perdón a los afectados–.

Se presentaron bastantes casos de usuarios que para saltarse el control de bloqueo de dominios usaban redireccionadores, herramientas de búsquedas (blogsearch, technorati, etc.), anonimizadores de navegación y hasta páginas con redirecciones en el HTML. Por ello desde hace más o menos un año se controlan también las redirecciones HTTP y los enlaces en el HTML de la página enlazada que no tuviese “nofollow” (como se hace normalmente en los comentarios).

Esto último hacía que no se pudiese enviar páginas con enlaces “accidentales” hacia sitios bloqueados.Hoy hemos modificado el código para que no vuelva a pasar lo mismo –esperamos–.

El otro tema es el “abuso de votos negativos” a comentarios. Hace casi un mes hemos tomado una medida para penalizar esos votos. Como comenté hace un momento, eso ha generado que cuando se tiene un karma demasiado bajo para votar se recurre a la creación de un nuevo usuario. Para evitarlo hemos cambiado, ahora se necesita más de 6 de karma para votar a comentarios, así no servirá de nada crear nuevos usuarios, al menos durante varias horas, hasta que se recalcule el karma.

Respecto al tema del excesivo voto a comentarios de noticias, la mayoría se esos votos son de usuarios de karma bajo y poco “activos” en el menéame. Por ejemplo, un análisis de 72 horas (contando desde ayer):

  • Votos negativos a comentarios totales en 72 horas: 10058
  • Con karma menor o igual a 7: 7424 (74%)
  • Con karma menor igual a 6: 6272 (62%)
  • Con karma superior a 12: 606
  • Con karma superior a 15: 304

Los números anteriores son una evidencia –que ya sospechábamos– de que quizás no son los usuarios más activos –ni una “mafia”– los que se dedican a votar negativo a comentarios de otros. Con el cambio de ayer se eliminarán ese 62% de votos negativos de usuarios con karma muy bajo y o clones creados sólo para votar (que empiezan con karma 6).

Nota: Por el comentario de Drake me dí cuenta que cometí el estúpido error de tocar la variable que no tocaba y dejé sin poder comentar a los que tenían karma menos o igual que 6. Esa no era la intención, sino un error. Ya está solucionado, mil disculpas.

Penalización de votos negativos a comentarios

Algunos usuarios –bastantes– del Menéame se quejaban del abuso que hacían algunos con los votos negativos a comentarios. Tenían razón. El sistema anterior hacía que los votos negativos sólo afectasen a los autores del comentario, lo que generaba el “voto fácil”. Eso cambió, ahora se penalizará a los votos negativos “injustos” (o unfair, como aparece en los logs).

Sigue leyendo

Sobre el karma… respuesta a Krusher

Los últimos días el amigo Krusher hizo un “estudio de campo” y lo cuenta en su blog (parte 1 y parte 2). Antes que lo escribe me comentó brevemente que había hecho ese “experimento” y le prometí que si lo contaba en su blog le contestaría. Lo prometido es deuda.

Antes de responder a los puntos que creo son los más interesantes deseo remover (:-)) algunos mitos que hay por allí.

Sigue leyendo