#AMLO en Twitter

Twitter es un espacio relevante en la discusión política. Millones de personas lo usan como una plataforma para informarse de los últimos acontecimientos y opinar sobre ellos (en México, según datos del INEGI, hay más de 20 millones de usuarios en esta plataforma), y sobre todo, servidores públicos, figuras políticas, periodístas y otros actores centrales en el proceso de formación de la agenda publica usan esta red social como su principal canal de comunicación con el público. Así, ¿qué se dice del presidente Andrés Manuel López Obrador en Twitter? ¿quién lo dice? y ¿cómo lo dice? son preguntas que no podemos dejar de lado.

En Oraculus hacemos un monitoreo en tiempo real de la actividad en Twitter en torno al presidente Andrés Manuel López Obrador. Presentamos un análisis de opinión, un índice de actividad de bots (cuentas automatizadas) y un análisis de los principales temas contenidos en el tráfico de tweets.

Para asegurarnos de que estás viendo nuestro último reporte, el caché para esta página ha sido deshabilitado. Debido a esto, y dependiendo de la calidad de tu conexión a internet, la página puede tomar un poco más en cargarse (sobre todo las imágenes). También toma en cuenta que la página se recarga automáticamente cada 10 minutos.

Estado general

Última actualización: fecha y hora

Tráfico de Tweets

Última actualización: fecha y hora

En la última hora hemos capturado...

Tweets

Tweets originales

( % del total)

Retweets

( % del total)

Tweets citados

( % del total)

De acuerdo con la documentación para desarrolladores de Twitter, en la plataforma hay tres tipos de publicaciones: tweets, retweets y tweets citados.

Un tweet es un mensaje publicado en Twitter que contiene, en menos de 280 caracteres, texto, fotos, GIFs o vídeos. Los usuarios en Twitter también pueden compartir con sus seguidores publicaciones de otras cuentas que consideran relevantes mediante un retweet. Si, además de compartir un tweet quieren agregar un comentario sobre la publicación, pueden hacerlo citando un tweet. Los tweets citados, como tipo de publicación, son relativamente nuevos en Twitter (2016) y, en realidad, mucha gente se refiere a ellos como retweets con comentario o, simplemente, retweets.

En la figura de arriba se muestra el número de tweets que hemos recolectado, desglosado por el tipo de publicación: retweet, tweet citado y tweet unico (consideramos tweets únicos todos aquellos que no son retweets o tweets citados). Puedes mostrar u ocultar las series de tipo de publicación haciendo clic en la leyenda del gráfico (ubicada en la parte inferior del gráfico).

ORACULUS recolecta en tiempo real, las 24 horas del día y los 365 días del año, todas las publicaciones en Twitter que están relacionadas con el presidente Andrés Manuel López Obrador.

Para esto, solicitamos a Twitter —por medio de la API para desarrolladores— un streaming en tiempo real de todas las publicaciones que contienen las palabras «#AMLO», «AMLO», «Obrador», «López Obrador» y «Andrés Manuel López Obrador» (incluidas las variantes sin acentos y con errores de ortografía). Así mismo, capturamos todos los tweets que mencionan a la cuenta del presidente (@lopezobrador) y que comparten contenido de la misma. Los tweets llegan a nuestros servidores y son procesados para su almacenamiento en tiempo real.

Observatorio de Bots Oraculus

Última actualización: fecha y hora

Intervenir redes sociales para intentar manipular la discusión pública es una práctica común. En octubre de 2018, por ejemplo, Twitter difundió una base de datos con más de 10 millones de tweets publicados por granjas de bots en operaciones potencialmente respaldadas por gobiernos extranjeros para manipular la discusión en torno a la elección presidencial estadounidense de 2016. Otro ejemplo célebre es el de Andrés Sepúlveda, quien confesó haber escrito un programa que le permitía controlar más de 30 000 cuentas automatizadas para manipular las tendencias en Twitter durante la contienda por la presidencia mexicana en 2012.

Por esta razón, en Oraculus hemos desarrollado un monitoreo en tiempo real de cuentas automatizadas que intentan manipular la conversación en torno a Andrés Manuel López Obrador en Twitter y presentamos el Índice de Actividad de Bots.

Un bot es una cuenta de Twitter que es controlada, total o parcialmente, por un algoritmo computarizado. También nos referimos a ellas como cuentas automatizadas.

No todas las cuentas automatizadas son «malas». De hecho, pueden ser sumamente útiles y en Twitter están completamente permitidas, siempre y cuando no violen las reglas generales de automatización de Twitter. Por ejemplo, @SismologicoMX publica de manera automática información sobre los últimos sismos detectados por el Servicio Sismológico Nacional; @TELMEXSoluciona utiliza Salesforce, un software que automatiza las respuestas a clientes en Twitter; o —para mencionar un bot con fines humorísticos—, @MagicRealismBot es una cuenta que publica cada dos horas pequeños textos generados a partir de combinaciones entre vocabulario académico, creaturas mitológicas y discusiones filosóficas, entre otras.

A nosotros nos interesan los bots que violan las normas de uso de Twitter; particularmente aquellos que, mediante tweets o retweets automatizados, buscan manipular la discusión en Twitter en torno a Andrés Manuel López Obrador. En general, estas cuentas publican o comparten contenido de manera coordinada para posicionar un tema o noticia (verdadera o falsa) a favor o en contra del Presidente.

El índice de Actividad de Bots presenta la proporción de tweets publicados por cuentas sospechosas respecto al tráfico total capturado. En la primera gráfica de abajo, se presenta el registro histórico del Índice de Actividad de Bots.

Junto al Índice de Actividad de Bots, también presentamos un registro histórico del número de cuentas sospechosas detectadas y el número total de cuentas activas en el periodo de recolección.

Como señalan Chavoshi et al. (2017), una de las principales características que delatan a los bots son patrones temporales de sincronización, pues es muy poco probable que dos usuarios independientes (entre un grupo de \(N\) usuarios activos) hagan \(n\) publicaciones al mismo tiempo en \(m\) segundos. Formalmente, esta probabilidad puede ser definida de la siguiente manera (Chavoshi et al., 2016):

$$p = 1- \frac{M!}{M^N(M-N)!}$$

Donde \(M=m^n\) representa todas las formas posibles en las que un usuario puede hacer \(n\) publicaciones en \(m\) segundos.

Así, en un escenario realista donde \(N = 1\times10^{5}\), \(m = 3600\) y \(n = 10\), \(p\) tiende a cero. Es decir, es practicamente
imposible que dos usuarios (de un total de 100 000 activos), hagan 10 publicaciones al mismo tiempo en el intervalo de una hora.

Incluso, si consideramos que los usuarios en Twitter no actúan de forma completamente independiente, pues pueden reaccionar a
los mismos eventos y noticias de forma similar, la probabilidad de que dos usuarios hagan \(n\) publicaciones a \(\pm{w}\) segundos de un evento relevante en un espacio total de \(m\) segundos sigue siendo extremadamente baja. En este caso, \(p\) queda definida de la siguiente forma:

$$p = 1 – [ (1-q^n)\times(1-2q^n)\times\cdots\times(1-Nq^n) ]$$

Donde \(q\) es la probabilidad de que un usuario reaccione a cualquier otro tweet relevante en \(\pm{w}\) segundos (\(q = 1\) es perfecta sincronía) y \(1-q^n\) la probabilidad de que ninguno de los tweets de un usuario sean publicados en \(\pm{w}\) segundos de distancia del tweet relevante.

Nuevamente, en un escenario realista donde \(N = 1\times10^{5}\), \(m = 3600\), \(n = 10\) y \(q = 0.25\), \(p\) es próximo a cero. Por esta razón, para detectar cuentas automatizadas en el tráfico de tweets capturado por ORACULUS, implementamos una variación del algortimo propuesto por Chavoshi et al. (2016) en «DeBot: Twitter Bot Detection via Warped Correlation», el cual busca grupos de cuentas que actúan de manera sincronizada (publicando o compartinedo información) entre el total de cuentas activas. El algoritmo está dividido en dos sistemas: sistema indexador y sistema de validación.

Cada 45 minutos, el sistema indexador construye una señal de actividad para cada usuario activo (una señal de actividad es una serie de tiempo cuya resolución es de un segundo y en la que se marcan las acciones —tweets y retweets— del usuario; se asigna un cero a los momentos de inactividad). Posteriormente, se procesan todas las series de tiempo en una función hash que genera colisiones para aquellas señales de actividad que están correlacionadas en ventanas de hasta 21 segundos. Aquellos usuarios que colisionen más de tres veces en el mismo hash son enviados al sistema de validación para su procesamiento.

El sistema de validación recupera las últimas 200 publicaciones de cada usuario señalado por el sistema indexador y, con base en estos, construye nuevas señales de actividad para cada uno. Posteriormente, calcula una matriz de correlación temporal deformada con todas las señales de actividad usando la siguiente fórmula:

$$wC(x, y) = 1 – \frac{DTW^2(\hat{x}, \hat{y})}{2P}$$

Donde \(DTW^2(\hat{x}, \hat{y})\) es el cuadrado de la deformación temporal dinámica entre las señales de actividad estandarizadas de los usuarios \(x, y\) y \(P\) es el tamaño del vector \(\mathbf{p} = [p_1, p_2,\ldots, p_K]\) calculado por la función \(DTW(\hat{x}, \hat{y})\). Finalmente, el sistema de validación procede a hacer un agrupamiento jerárquico aglomerativo de enlace mínimo en la matriz y clasifica como bots a aquellos grupos de usuarios que presentan una correlación temporal \(wC(x, y)\) mayor o igual a 0.995.

Referencias:

Nikan Chavoshi et al., «DeBot: Twitter Bot Detection via Warped Correlation» (Artículo de ponencia), 16th International Conference on Data Mining, 2016, pp. 817-822.

Nikan Chavoshi et al., «Identifying Correlated Bots in Twitter» (Artículo de ponencia), 8th International Conference on Social Informatics, 2016, pp. 14-21.

Nikan Chavoshi et al., «Temporal Patterns in Bot Activities» (Artículo de ponencia), 26th International Conference on World Wide Web Companion, 2017, pp. 1601-1606.

Redes de difusión

Última actualización: fecha y hora

Una manera de visualizar las principales cuentas desde las cuales se está compartiendo contenido es mediante una red de difusión en la que se representa quién retuitea a quién. En esta red, cada nodo (vértice) representa a un usuario. Cuando un usuario retuitea a otro, se dibuja un arista (enlace) entre ellos. El tamaño de cada nodo es proporcional al número de enlaces que tiene.

Hemos usado el algoritmo de Fruchterman-Reingold para calcular la posición de los nodos en la gráfica. Este algoritmo es un método de dibujo basado en fuerza: en unas cuantas palabras, se simula una fuerza de repulsión entre los nodos que sólo puede ser contrarrestada por la fuerza de atracción que ejercen las aristas. Así, los nodos que están relacionados entre sí aparecerán cerca los unos de los otros y formarán grupos.

También hemos marcado en rojo aquellas cuentas que nuestro algoritmo clasificó como posibles bots.


Red de difusión

Coloca el puntero del ratón sobre la gráfica para ampliarla

Red de difusión (alto contraste)

Coloca el puntero del ratón sobre la gráfica para ampliarla

Red de difusión (Bots marcados)

Coloca el puntero del ratón sobre la gráfica para ampliarla

Red de difusión (Bots marcados y alto contraste)

Coloca el puntero del ratón sobre la gráfica para ampliarla

Los usuarios más populares

Última actualización: fecha y hora

Usuarios más populares

Usuarios más compartidos por bots

Los tweets más populares

Última actualización: fecha y hora

Índice de opinión

Última actualización: fecha y hora

Para responder a la pregunta ‘¿qué se dice de López Obrador en Twitter?’, en Oraculus recurrimos a técnicas de Mineria de Opinión para tener una idea general del tono de la discusión en Twitter y diseñamos un índice que presenta el porcentaje de tweets publicados cuyo contenido es favorable hacia López Obrador.

Nuestro análisis de opinión se realiza automáticamente después de la ventana de recolección de tweets. Para conformar el índice de opinión, desarrollamos un algoritmo clasificador supervisado que consiste en una Red Neuronal Recursiva de Grandes Memorias a Corto Plazo (LSTM RNN, por sus siglas en inglés), la cual nos permite estimar, para cada tweet recolectado, la probabilidad de que su contenido sea a favor, en contra o neutro hacia López Obrador.

Debido al dinamismo de la discusión en Twitter, en Oraculus actualizamos constantemente nuestro algoritmo clasificador para minimizar las derivas conceptuales de nuestro modelo y, así, mantener constantes sus capacidades predictivas.

Nubes de palabras

Última actualización: fecha y hora

Nubes de hashtags

Última actualización: fecha y hora

Detección automática de temas

Última actualización: fecha y hora

El análisis del contenido publicado es fundamental para entender las tendencias en Twitter. Por esto, hemos recurrido a un modelo bayesiano que nos permite agrupar el contenido publicado en un número previamente establecido de temas. El modelo, en unas cuantas palabras (en el apartado de «¿cómo funciona la detección automática de temas?»), parte del supuesto de que cada documento (en nuestro caso, cada tweet) fue generado seleccionando palabras de una «bolsa» de temas y que cada tema puede ser representado como una distribución donde hay palabras que tienen mayor probabilidad de aparecer y palabras con una menor probabilidad de estar presentes. Por ejemplo, una receta de cocina es un documento generado a partir de palabras tomadas de los temas «alimentos» (donde las palabras más probables son: pollo, huevo, arroz, aceite…) y «utensilios de cocina» (donde las palabras con mayor probabilidad de aparecer son: sartén, cuchillo, pelador…). Así, dado un conjunto de documentos (en nuestro caso, el conjunto de tweets recolectados), es posible estimar las palabras que conforman cada tema discutido en los documentos.

Abajo se muestran 10 gráficos de barras que representan los 10 temas más discutidos en el total de publicaciones que capturamos. Como explicamos arriba, para el modelo LDA los temas son distribuciones de palabras. Así, en cada gráfico se muestra en el eje veretical las 10 palabras más probables en cada tema, mientras que el eje horizontal corresponde a la probabilidad (representada por la letra griega \(\beta\)) ) de cada palabra en el tema.

Como ya mencionamos, optamos por una Asignación Latente de Dirichlet (descrita en Blei et al., 2003) para modelar los temas discutidos en los tweets publicados. Sobre todo, porque su implementación es bastante flexible y la complejidad computacional relativamente baja, lo que nos permite implementarlo, prácticamente, en tiempo real.

Representación gráfica del proceso generativo LDA

Representación gráfica del modelo generativo LDA

El algoritmo parte del supuesto de que todo documento (de un total de \(M\) documentos) puede ser representado en un vector de palabras \(\vec{w_m}={w_{m,n}}\) de tamaño \(N_m\). Para generar \(\vec{w_m}\), primero se elige una distribución de temas \(\vec{\vartheta_m}\) a partir de \(Dir(\vec{\alpha})\), después se elije el tema \(z_{m,n}\) de cada marcador \([m, n]\) en \(\vec{w_m}\) a partir de \(Multinomial(\vec{\vartheta_m})\) y, finalmente, se elije \(w_{m,n}\) a partir de \(Multinomial(\vec{\varphi_{z_m},n})\).

Para el total de documentos \(M\), podemos definir:

$$\vec{\varphi_k} = Dir(\vec{\beta})$$
$$\Theta = \{\vec{\vartheta_m}\}^M_{m=1} : \text{una matriz } M \times K $$
$$\Phi = \{\vec{\varphi_k}\}^K_{k=1} : \text{una matriz } K \times V $$
$$p(W | \vec{\alpha}, \vec{\beta}) = \prod_{m=1}^M p( \vec{w_m} | \vec{\alpha}, \vec{\beta})$$

Donde \(K\) es el número total de temas, \(V\) es el número total de palabras (o tamaño de vocabulario en los \(M\) documentos), \(W\) es el corpus (colección) tamaño \(M\) de todos los documentos \(\vec{w_m}\) y, finalmente, \(p(W | \vec{\alpha}, \vec{\beta})\) es la función de verosimilitud del conjunto de documentos \(W\).

Este proceso generativo está representado en el diagrama de arriba.

Ahora bien, partiendo de este supuesto proceso generativo, es posible estimar, mediante un muestreo de Gibbs, \(\Theta\) y \(\Phi\) con \(\vec{\alpha}, \vec{\beta}, K\) definidos por el usuario siguiendo las siguientes fórmulas (el algoritmo completo se describe en Phan et al., 2008):

$$\varphi_{k,t} = \frac{n_k^{(t)} + \beta_t}{\sum_{v=1}^V n_k^{(v)} + \beta_v} $$
$$\vartheta_{m,k} = \frac{n_m^{(k)} + \alpha_k}{\sum_{j=1}^K n_m^{(j)} + \alpha_j} $$

Donde \(t\) es una palabra miembro del conjunto total de palabras \(\vec{w}\) de \(W\), \(n_k^{(t)}\) es el número de veces que la palabra \(t\) ha sido asignada al tema \(k\), \(\sum_{v=1}^V n_k^{(v)}\) es el número de palabras que han sido asignadas al tema \(k\), \(n_m^{(k)}\) es el número total de palabras en el documento \(m\) que han sido asignadas al tema \(k\) y \(\sum_{j=1}^K n_m^{(j)}\) es el número total de palabras en el documento \(m\).

En nuestro caso, usamos un modelo con \(K = 50\), aunque sólo mostramos resultados para los 10 temas más frecuentas, y los valores predeterminados para \(\vec{\alpha}, \vec{\beta}\) sugeridos por Phan et al. (2008).

Referencias:

David M. Blei et al., «Latent Dirichlet Allocation», Journal of Machine Learning Research, 3 (2003), pp. 993-1022.

Xuan-Hieu Phan et al., «Learning to Classify Short and Sparse Text & Web withHidden Topics from Large-scale Data Collections» (artículo de ponencia), Proceedings of the 17th International World Wide Web Conference (WWW 2008), 2008, pp. 91-100.