¿Qué dice twitter de nosotros?

18 de Julio de 2016

Si una persona sigue en twitter varias cuentas relacionadas a Peñarol y ninguna de otro equipo, suena lógico pensar que es hincha de Peñarol. Siguiendo el mismo razonamiento: ¿podré suponer más cosas de una persona a partir de las cuentas que sigue?

Voy a intentar contestar esta pregunta ayudado por una computadora. Seguro va a prestar atención en muchos más detalles que yo y va a cometer menos errores.

En informática, dentro del area de machine learning, existe una técnica llamada clasificación supervisada que me sirve para este problema. A grandes rasgos estudia métodos para ajustar ciertas funciones con datos conocidos, para que después, estas funciones sean capaces de clasificar un dato no conocido. A estos métodos se les llama algoritmos de aprendizaje. Para el caso del hincha de fútbol, el algoritmo podría ajustar una función con cuentas de twitter de hinchas de diferentes cuadros, aprendiendo las características de cada uno, para luego poder decirme de que cuadro es hincha alguien que no conozco.

Pero ojo, la clasificación supervisada no es mágica. Los resultados que pueda obtener dependen principalmente de los datos que le de como entrada. Suponiendo que elijo el algoritmo que mejor se adapta a mi problema y lo ajusto de manera óptima, lo que voy a obtener es la mejor generalización de los datos que usé para entrenar. Si usé datos malos, voy a obtener resultados malos. Para obtener buenos resultados es fundamental que entrene con los datos más representativos que pueda.

Volviendo al problema de twitter, dada una cuenta de una persona, a partir de las cuentas que sigue y usando machine learning voy a intentar estimar 3 características de la persona:

  • sexo
  • cuadro de fútbol del cual es hincha
  • afinidad a partido político

Recalco que van a ser estimaciones. Las cuentas de twitter que seguimos no determinan ninguna de estas características; pueden darnos una idea. Intuitivamente, dada las cuentas que sigue la persona, la voy a clasificar en los grupos que siguen cuentas más parecidas.

¿Qué necesito?

  1. Datos de entrada.
  2. Elegir un algoritmo de aprendizaje para mi problema.
  3. Ajustar el algoritmo.

1) Datos de entrada

Para cada característica necesito ejemplos. Cuantos más tenga, mejor mi solución se va a adaptar al caso general.

Considerando los partidos políticos y equipos de fútbol más destacados, necesito cuentas twitter de:

  • Hombres y mujeres
  • Hinchas de: Peñarol, Nacional, Defensor, Danubio, Wanderers, Cerro y Cerro Largo :)
  • Afines a: Frente Amplio, Partido Nacional, Partido Colorado y Partido Independiente.

De cada ejemplo ¿en qué se va a fijar el algoritmo?

Para cada tema (fútbol, política y género) voy a definir un conjunto de cuentas relevantes. Podrían ser diarios, políticos, jugadores de fútbol, etc. Serían cuentas que me dan pistas de las características que me interesan. Para cada ejemplo, al algoritmo le voy a dar como entrada si éste sigue o no cada una de esas cuentas. En términos de machine learning, éstas serían las features.

¿Cómo lo hice? ¿de dónde saqué los ejemplos?

Como no tenía datos ya preclasificados, tuve que obtenerlos. Lo que hice fueron algunas heurísticas.

Twitter cuenta con una API que nos permite obtener los seguidores y seguidos de quien queramos. Para cada caso hice lo siguiente:

Afines a partidos políticos

Usando la API, para la cuenta oficial de cada partido político obtuve aleatoriamente 5000 de sus seguidores. De cada uno de esos grupos de 5000, me quedé con los que no siguen a ningún otro partido ni ningún candidato presidencial de otro partido.

Las cuentas relevantes (features) para este caso las definí como la unión de las 1000 más seguidas de cada partido (en este caso, para que no condicionen fuertemente los resultados y hacerlo más interesante, excluí las propias cuentas oficiales y candidatos presidenciales)

Hinchas

Análogo a los partidos políticos pero con las cuentas oficiales de los equipos y tomando como relevantes la unión de las 100 más seguidas de cada equipo.

Hombres y mujeres

Para este caso, para todos los ejemplos que obtuve en los casos anteriores, comparé el primer nombre del propietario de cada cuenta contra una base de datos de nombres ya clasificada por sexo. Me quedé con 10000 ejemplos de cada caso (podría usar este método para hacer siempre la clasificación de sexo así, pero la idea del post es mostrar el uso de machine learning. Prometo no hacer trampa).

2) Elegir algoritmo de aprendizaje

Como algoritmo de aprendizaje en esta primera instancia use regresión logística.

Como ventaja la regresión logística es bastante intuitiva y sus resultados se pueden interpretar como probabilidades.

Como desventaja, es un algoritmo que no da buenos resultados cuando las clases a clasificar no se pueden separar linealmente (en el espacio de las features). Hay otros algoritmos más flexibles.

3) Ajustar el algoritmo

Lo implementé en python usando scikit-learn. Está explicado en este notebook.

Resultados

Sobre los datos que usé la precisión final que obtuve fue buena pero creo que es mejorable (para las 3 características entre 75% y 85%). Habría que mejorar un poco más la entrada y probar otros algoritmos de entrenamiento. Si alguien se anima, los links a los datos están el notebook (aclaro por las dudas que los datos no tienen ninguna información personal, son completamente anónimos).

Igualmente, no quiere decir que la precisión que obtengamos con datos reales va a ser la misma. Para conseguir los datos de entrenamiento tomé algunos criterios que no necesariamente son siempre ciertos. Hay que tomarlo como una aproximación.

Esta es la parte más interesante:

Si querés, podés ver los resultados para tu usuario de twitter.

Dale click al link azul de abajo y voy a correr los modelos ya entrenados para que clasifiquen tu cuenta. Pero antes, para asegurarme que vos sos vos, te va a pedir que inicies la sesión en twitter y te va a preguntar si me autorizás acceder a las personas que seguís. Quedate tranquilo, no me das la contraseña a mi (se la das a twitter).

Ver los resultados para mi usuario

Comentarios

Los comentarios de este post hacelo en el siguiente tweet. Gracias.