Este projeto foi proposto pelo grupo CIDAMO – UFPR como 3ª atividade avaliativa para ingresso no grupo. O propósito desta atividade é o estudo e o desenvolvimento de um tema utilizando técnicas de machine learning e nós iremos abordar a identificação de bots no Twitter PT-BR.
Introdução
O Twitter possui 330 milhões de usuários ativos mensalmente no mundo todo, e a quantidade exata de bots é desconhecida. Estima-se que o número de contas falsas varia entre 5% a 15%, e essa discordância nas porcentagens acontece pois os bots estão cada vez mais sofisticados.
Por definição bots são aplicações de softwares que tentam simular ações humanas e são programados a realizar tarefas repetidas vezes. Os bots são classificados entre benignos e malignos, o primeiro consiste em capturar mídias e realizar serviços ao consumidor, enquanto o segundo possui características de difusão de informações, verídicas ou não, na rede.
Neste trabalho nos iremos abordar os bots sociais, que tentam se passar por humanos, geram e consomem informação da rede, podem possuir assinaturas temporais e apresentam interações avançadas, como conversas, respostas e comentários com outras contas que não necessariamente são falsas.
- Descrição do Problema
- Quais foram as ações tomadas no projeto
E mais, você encontra no vídeo acima!
Problema
Na última década o uso da internet em campanhas eleitorais se tornou comum ao redor do mundo e o uso das redes sociais na disseminação de informações políticas virou negócio para as agências de marketing digital. Neste cenário vários estudos foram desenvolvidos na identificação de bots. O Bot Sentinel foi desenvolvido para identificar contas falsas no Twitter, e em abril deste ano a plataforma americana identificou pela primeira vez o uso massivo de bots brasileiros para alavancagem de assuntos.
Essa publicação foi o ponto de partida deste projeto que tem como objetivo detectar a presença de bots entre hashtags do Twitter.
Análise Descritiva
Obtenção do Banco de Dados
Após a publicação do Bot Sentinel nós precisávamos de uma ferramenta que capturasse os tweets diretamente do Twitter referente as hashtags citadas no artigo, entre as hashtags mencionadas decidimos trabalhar com a #FechadosComBolsonaro que era a mais popular e possuía um volume muito grande de tweets.
Para a captura dos tweets utilizamos o pacote Rtweet no RStudio, que possui algumas limitações, por exemplo, os resultados das pesquisas retornam apenas de seis a nove dias anteriores e possui o limitante de 18.000 tweets em 15 minutos, e mesmo com essas restrições conseguimos capturar 1,1 milhão de status da hashtag #FechadosComBolsonaro publicados no Twitter entre os dias 21 a 25 de abril de 2020 que correspondem a 102 mil usuários.
Assim conseguimos criar uma base de dados bruta com 1,1 milhão de linhas e com 90 colunas com informações da conta de usuário, relacionamento com outras contas, conteúdos dos status e outros metadados.
Além da captura dos status/tweets, também precisávamos de um target para dizer se uma conta era ou não bot, para isso utilizamos o pacote BotorNot também no RStudio. O pacote utiliza deep learning para analisar metadados de usuários e tweets e retorna a probabilidade da conta ser bot. Quando utiliza os metadados e os tweets o modelo do pacote possui uma acurácia de 93,53% para classificar bots, porém a análise dos tweets é muito custosa computacionalmente e o idioma interfere no resultado quando diferente do inglês, por isso decidimos utilizar o recurso do pacote que só analisa os metadados do usuário, fazendo com que analise 90 mil perfis a cada 15 minutos ao invés de 180, porém a acurácia cai para 91,9%.
Para tornar a nossa base em um problema de classificação escolhemos limiares para classificar as contas, usuários com uma probabilidade maior que 70% foram classificados como bot e usuários com uma probabilidade menor de 30% foram classificados como humanos, no final ficamos com 25 mil usuários bots e 37 mil pessoas daqueles 102 mil usuários iniciais.
Links Para as Bases de dados
- Todos os Status + Probabilidades Base #FechadoscomBolsonaro
- Base Trending Topics Extras - Até 36000 status mais recentes, dos Trending Topics relacionados à política nacional entre 11/04/2020 e 18/04/2020. A coleta foi feita manualmente utilizando o site https://www.trendsmap.com/
- Não disponibilizamos a classificação manual, caso queira ter acesso a esse e outros dados, entre em contato conosco pelo e-mail do CiDAMO.
Tratamento das Variáveis
Inicialmente a nossa base possuía 90 features e continha informações de vários tweets de um mesmo perfil, mas o objetivo era avaliar o usuário, por isso criamos algumas variáveis e realizamos tratamentos na base para que cada linha contivesse o agrupamento de dados de uma respectiva conta, para criar essas novas features consideramos vários trabalhos acadêmicos que constam na bibliografia. Abaixo apresentamos a lista de variáveis que utilizamos nos nossos modelos.
Usuário
- Nome de Usuário possui mais de 4 números
- Nome de Usuário possui tamanho maior que a média do tamanho de nomes de usuário na base
- Conta possui localização
- Conta possui descrição
- Possui Emoji no Nome
- Possui emoji na descrição
- Possui Avatar Padrão
- Possui Capa Padrão
Conteúdo
- Fonte - Ordinal Encoding - Apenas fontes do Twitter, ou Outros, por frequência (1ª aparição na base)
- Quantidade de # nos status da base
- Quantidade de @ nos status da base
Rede
- Quantidade de Retweets da Conta
- Quantidade de Tweets na Base
- Quantidade de Status da Conta
- Quantidade de Favoritos da Conta
- Taxa Tweets/Favoritos
- Quantidade de Tweets Duplicados na base
- CoParticipação em 71 hashtags
Amigos
- Possui menos de 10 seguidores
- Taxa Seguidores/Seguidos
- Quantidade de vezes listado
- Quantidade de Seguidores
- Quantidade de Seguidos
Tempo
- Tempo entre primeiro e último tweet na base
- Tempo de Conta em dias
Abaixo você encontra a relação de correlação das variáveis em relação à classificação em bot ou não
Metodologia
Modelos
Foram utilizados 4 modelos diferentes neste projeto sendo eles:
SGD - Gradiente Descendente Estocástico
É um método iterativo que tem o objetivo de reduzir uma função de perda e achar um minimizador, segue a mesma ideia do Gradiente Descendente porém neste método ao invés de utilizar todos os seus dados para calcular o gradiente se utiliza mini-batches, que são alguns ou apenas um dado do seu conjunto todo, deste modo temos que calcular muito menos derivadas, economizando bastante tempo. O que se perde ao escolher apenas alguns é que se tem um caminho muito mais ruidoso.
Redes Neurais
Uma rede neural tem como objetivo simular a tomada de decisões de um ser humano e isso é feito “emulando” os seus neurônios.
Comumente uma rede vai ser composta de uma camada de entrada, que é por onde os dados entram, cada uma das features vai para um neurônio que vai passá-la para frente aplicando uma função a ela, assim como em todas as outras camadas intermediárias do processo, e por fim ela chega a uma camada de saída que devolve o resultado.
Essencialmente é assim que uma rede neural funciona de um modo bem básico e simplificado, existem múltiplos parâmetros a serem configurados que vão depender principalmente de qual biblioteca se está utilizando e de qual é o seu objetivo. Neste projeto foi utilizada a biblioteca TensorFlow com camadas densas.
Light GBM e XG Boost
Ambos são algoritmos de gradient boosting que utilizam as árvores de decisão como base, as árvores funcionam como grandes sequências de condicionais (nós) que separam os dados pelas suas features sequencialmente até que se chegue aos nós finais, que decidem qual é a categoria.
Gradient boosting
Começa-se com uma aprendizagem fraca, que neste caso são as árvores, e com o objetivo de minimizar a função de perda elas começam com o aprendizado, cada árvore após a primeira utiliza a sua antecessora olhando para os erros que ela fez e tenta corrigi-los, isto é feito até que se alcance alguma condição de parada.
Uma das principais diferenças entre o Light GBM e o XGBoost é a forma como as suas árvores são formadas, as do GBM crescem por folha enquanto que as do XG crescem por nível, isso faz com que ele consiga melhorar a sua precisão ainda mais por iteração.
Resultados
Nos dividimos aleatoriamente a nossa base de 62 mil usuários classificados em bots e humanos em 70% treino e o restante em teste.
Utilizando os modelos treinados na fase de treino obtivemos as acurácias mostradas na tabela abaixo na fase de teste. A **Tabela 1 **mostra que entre os 4 modelos utilizamos o LightGBM seguido pelo XGBoost apresentaram a melhor acurácia.
Modelo | Escore |
---|---|
SGD | 0.6476 |
LightGB | 0.9476 |
XGBoos | 0.9247 |
Redes Neurais | 0.8419 |
Tabela 1 validação Para maior validação dos nossos modelos, criamos uma base de contas verificadas manualmente pela equipe, selecionamos 100 usuários aleatórios que foram retirados de uma captura da hashtag #MaiaTraidorNacional, desses classificamos 32 como sendo bots e 68 como humanos. Nesta base os modelos treinados performaram de maneira diferente, como mostra a Tabela 2, onde combinados o escore com o recall podemos ver que os melhores modelos foram SGD e XGBoost, que classificaram boa parte dos bots corretamente, e em contrapartida tivemos as redes neurais errando 100% na classificação dos bots.
Modelo | Escore | Recall |
---|---|---|
SGD | 0.5454 | 0.71875 |
LightGBM | 0.5151 | 0.46875 |
XGBoost | 0.5252 | 1 |
Redes Neurais | 0.5656 | 0 |
Tabela 2
Apenas essas métricas não foram o suficiente para avaliarmos os modelos, para compreendermos melhor como cada modelo estava classificando utilizamos a matriz a confusão que mostra os valores reais e os valores preditos pelo modelo.
Matriz de confusão | |||
---|---|---|---|
Predito | |||
V | N | ||
Real | V | VP | FP |
F | VP | FP |
- VP – Verdadeiros positivos (humanos)
- FP – Falsos positivos (humanos classificados com bots)
- FN – Falsos negativos (bots classificados como humanos)
- VN – Verdadeiros negativos (bots)
LGBM | |||
---|---|---|---|
Predito | |||
V | N | ||
Real | V | 40 | 27 |
F | 40 | 27 |
SGD | |||
---|---|---|---|
Predito | |||
V | N | ||
Real | V | 31 | 36 |
F | 31 | 36 |
XGBoost | |||
---|---|---|---|
Predito | |||
V | N | ||
Real | V | 0 | 67 |
F | 0 | 67 |
TensorFlow | |||
---|---|---|---|
Predito | |||
V | N | ||
Real | V | 67 | 0 |
F | 67 | 0 |
Olhando para matriz de confusão de cada modelo mostrado abaixo, podemos verificar que os modelos XGboost e as Redes Neurais classificaram todo o conjunto de dados em bots e humanos respectivamente, mostrando um péssimo desempenho. Já o modelo LightGBM conseguiu classificar melhor os humanos enquanto o SGD conseguiu classificar melhor os bots.
Conclusão
Fica claro pelos dados apresentados nos resultados que os modelos performaram de maneiras muito diferentes da base de treino com a base de validação. A hipótese que consideramos que justifica esses resultados é o target usado. Na base de treino utilizamos a biblioteca BotOrNot e na base de validação classificamos as contas manualmente, fato que gerou muitas controvérsias na equipe, uma vez que a classificação das contas era muito subjetiva e sujeita a várias interpretações para cada avaliador.
Considerando essa dificuldade na classificação manual dos usuários e os resultados obtidos na base de treino, levantamos a hipótese que existe uma chance grande do modelo LightGBM estar classificando melhor os bots do que a análise manual.
Últimas versões do Notebook
Referências
- [1] https://oglobo.globo.com/brasil/plataforma-que-monitora-robos-aponta-presenca-macica-de-contas-falsas-entre-apoiadores-de-bolsonaro-24399334
- [2] https://www.geeksforgeeks.org/ml-stochastic-gradient-descent-sgd/
- [3] https://www.geeksforgeeks.org/ml-stochastic-gradient-descent-sgd/
- [4] https://sites.icmc.usp.br/andre/research/neural/
- [5] https://www.vooo.pro/insights/um-tutorial-completo-sobre-a-modelagem-baseada-em-tree-arvore-do-zero-em-r-python/
- [6] https://towardsdatascience.com/lightgbm-vs-xgboost-which-algorithm-win-the-race-1ff7dd4917d
- [7] E. Ferrara, O. Varol, C. Davis, F. Menczer, A. Flammini.(2014). “The Rise of Social Bots”. Disponível em: https://arxiv.org/abs/1407.5225
- [8] Emerging Technology from the arXiv. (2014). “How To Spot A Social Bot On Twitter”. Disponível em https://www.technologyreview.com/2014/07/28/74316/how-to-spot-a-social-bot-on-twitter/
- [9] RUEDIGER, M. A. et al. (Ed.) (2018). Bots, Social Networks and Politics in Brazil: Analysis of interferences made by automated profiles in the 2014 elections. Policy Paper. Rio de Janeiro: FGV DAPP. Disponível em http://bibliotecadigital.fgv.br/dspace/themes/Mirage2/pages/pdfjs/web/viewer.html?file=http://bibliotecadigital.fgv.br/dspace/bitstream/handle/10438/24841/%5bFINAL%5d%20Bots-socialnetworks-and-politics-in-brazil.pdf?sequence=1&isAllowed=y
- [10] Varol, Onur & Ferrara, Emilio & Davis, Clayton & Menczer, Filippo & Flammini, Alessandro. (2017). Online Human-Bot Interactions: Detection, Estimation, and Characterization. Disponivel em: https://www.researchgate.net/publication/314433388_Online_Human-Bot_Interactions_Detection_Estimation_and_Characterization
- [11] Efthimion, P. George; Payne, Scott; and Proferes, Nicholas (2018) “Supervised Machine Learning Bot Detection Techniques to Identify Social Twitter Bots,” SMU Data Science Review: Vol. 1 : No. 2 , Article 5. Disponivel em: https://scholar.smu.edu/datasciencereview/vol1/iss2/5