Un vistazo al sistema de puntuación de Deeditt

Un vistazo al sistema de puntuación de Deeditt

A lo largo de este año, he estado trabajando arduamente en una nueva aplicación que será una red social con un enfoque único. Y una parte escencial de esta plataforma es un sistema de puntuación que permite evaluar la interacción y el compromiso de los usuarios, entonces en este artículo quiero compartir con ustedes una mirada detrás de escena de este interesante reto que es crear un sistema de calificación basado en acciones sociales digitales.

¿Cómo se construye un sistema de calificación?

¿Alguna vez se han preguntado cómo sus aplicaciones favoritas determinan su nivel o puntuación? Crear un sistema de calificación de usuarios es un proceso intrincado. Aunque la idea puede parecer sencilla en teoría, en la práctica, es una serie de decisiones cruciales, pruebas y ajustes.

Para esta primera versión, he considerado las siguientes métricas:

  1. Acciones del usuario: Como 'me gusta', 'comentar', 'seguir', entre otros. Cada acción tiene un peso asociado que refleja su importancia.
  2. Momento del día: Las interacciones durante ciertas horas del día tienen un impacto diferente, obviamente considerando la zona horaria de los usuarios.
  3. Categorías en común: Cuantas más categorías tengan en común el emisor y el receptor, mayor será la bonificación.
  4. Degradación por hitos: A medida que los usuarios alcanzan ciertos hitos de puntuación, se aplica una tasa de degradación para mantener el sistema equilibrado.
  5. Influencia del emisor: Se toma en cuenta el número de seguidores del emisor y su puntuación actual.

Y quizás hay varias cosas que estoy omitiendo y otras que no he considerado y debería, pero se trata de empezar algo y no podría hacerlo perfecto desde el inicio.

A que le he llamado Influencia del Emisor

Una característica distintiva del sistema de puntuación de Deeditt es cómo he decidido ponderar la influencia del emisor en las métricas. La influencia no se mide simplemente por la cantidad de seguidores; sino que también se en cuenta la calidad de esas interacciones.

Al grano, ¿Cómo se calcula la influencia?

La influencia se determina mediante una combinación de:

  1. Número total de seguidores: Es una métrica directa de cuántas personas encuentran relevante o interesante al emisor.
  2. Puntuación promedio de sus publicaciones: Esta métrica nos dice cómo responde su audiencia a sus publicaciones.
  3. Interacción reciente: Damos más peso a los seguidores e interacciones recientes que a los antiguos para mantener la influencia actualizada.

Ejemplo concreto:

Supongamos que tenemos a un usuario, Jack, con las siguientes estadísticas:

  • Número de seguidores: 1,000
  • Puntuación promedio de sus últimas 10 publicaciones: 95 puntos (de 100 posibles)
  • Ha ganado 200 seguidores en el último mes.

La fórmula para calcular la influencia podría ser:

Influencia = (Número de seguidores * 0.5) + (Puntuación promedio * 3) + (Seguidores recientes * 1.5)

Si aplicamos los datos de Jack:

Influencia = (1,000 * 0.5) + (95 * 3) + (200 * 1.5) = 1,385

Este valor de "1,385" sería la influencia de Jack en la plataforma al momento de ejecutar una acción.

Comparación con otras plataformas:

Plataformas como Twitter y Instagram, aunque no revelan completamente cómo calculan la influencia, tienden a basarla en la cantidad de seguidores y la interacción general (likes, retweets, comentarios). Sin embargo, estas plataformas no siempre ponderan las interacciones recientes o la calidad de las publicaciones, lo que puede llevar a que cuentas inactivas o menos relevantes actualmente aún tengan una alta influencia simplemente por su historial.

En Deeditt, me estoy tratando de asegurar de que la influencia sea un reflejo más actual y dinámico del impacto y relevancia de un usuario en la comunidad, premiando no solo la cantidad, sino también la calidad y actualidad de las interacciones.

¿De qué sirve la Degradación por Hito?

Este es un mecanismo implementado para equilibrar y controlar la puntuación en sistemas de gamificación o interacción de usuarios. En la estructura que presentaste, la idea detrás de la degradación por hitos es esencialmente que a medida que un usuario alcanza ciertas puntuaciones (los "hitos"), la manera en que se acumulan más puntos cambia, normalmente haciéndose más difícil ganar puntos adicionales. Esto puede hacer que el sistema sea más justo y evitar la inflación de puntos.

Funciona de la siguiente manera:

  1. Hitos predefinidos: Estos son valores de puntuación específicos que, una vez alcanzados por un usuario, activan la degradación, por ejemplo: 1,000, 5,000, 10,000, 50,000, etc.

  2. Tasa de degradación: Una vez que un usuario alcanza un hito, su puntuación se reduce por una tasa de degradación específica, que en tu caso es del 5% (DECAY_RATE = 0.05). Por ejemplo, si un usuario alcanza una puntuación de 10,000 puntos, su puntuación se reduce en un 5%, dejándolo con 9,500 puntos.

  3. Objetivo del mecanismo: La idea detrás de esta degradación es crear un equilibrio en el sistema. Al alcanzar hitos más altos, se supone que el usuario ya ha demostrado un alto grado de compromiso con la plataforma, por lo que conseguir puntos adicionales debería ser más desafiante. La degradación actúa como un "reset" suave, donde aún se reconoce el logro del usuario, pero se le da un pequeño reto para seguir comprometido.

¿Cuando esta todo listo, cómo se llega a calcular un posible valor final?

Una versión simplificada para ilustrar el concepto básico. Imagina que solo queremos considerar las acciones del usuario, entonces:

class SimpleScoreService:
    """Simple scoring system"""

    ACTION_WEIGHTS = {
        'like': 5,
        'comment': 10,
        'follow': 20
    }

    def calculate_score(self, action: str) -> int:
        base_points = self.ACTION_WEIGHTS.get(action, 0)
        return base_points

    def total_score(self, actions: list) -> int:
        return sum([self.calculate_score(action) for action in actions])

Esta versión es solo un esbozo del sistema más complejo que estoy desarrollando. Sin embargo, me sirve para ilustrar el principio básico de asignar valor a las interacciones.

Espero compartir más detalles técnicos en futuras publicaciones, ya que he descubierto formas ingeniosas de evitar que los usuarios "jueguen" con el sistema para inflar artificialmente sus puntuaciones.

El camino hacia el lanzamiento

Deeditt es un trabajo en progreso que se encuentra en sus etapas finales. Si bien la base del código está casi lista, actualmente me encuentro puliendo la interfaz de usuario.

Este proyecto ha sido un viaje lleno de desafíos y aprendizajes. Cada decisión, cada línea de código, y cada prueba representan mi pasión por crear una red social justa y equitativa, este viaje de crear una red social desde cero me ha dejado muy buenas experiencias y el aprendizaje no solo ha sido en cuanto a la parte técnica, elegir qué factores considerar y cómo ponderarlos es un desafío, pero es un desafío que estoy encantado de asumir.

Estoy emocionado por lo que está por venir. Aunque el sistema de calificación está en sus primeras etapas, representa el corazón de Deeditt y su capacidad para crear una plataforma interactiva y equitativa para todos los usuarios. Es un viaje en constante evolución, y valoro las opiniones y el feedback. Así que, si tienes alguna sugerencia o idea sobre cómo mejorar el sistema, ¡me encantaría escucharla! Gracias por tomarte el tiempo de echar un vistazo a lo que he estado construyendo. Mantente atento para más actualizaciones y el lanzamiento oficial de Deeditt.

Happy coding! :D


Photo by Matt Benson on Unsplash

Jack Fiallos

Jack Fiallos

Te gustó este artículo?