comments 3

Data Science para previsão da votação do Impeachment

1. Introdução

Não é de hoje que Data Science é aplicado ao contexto político, mas podemos dizer que as eleições presidenciais dos EUA de 2008 foram um divisores de água para Data Science na política. A campanha de Barack Obama usou extensivamente Data Science, principalmente aplicado às redes sociais, para otimizar a campanha e arrecadar mais fundos, porém, a grande surpresa dessa eleição nesse conexto, foi estatístico Nate Silver que fez previsões no seu blog, o FiveThirtyEight, e acertou o resultado das eleições em 49 dos 50 estados.

Nate, que é autor do livro The Signal and the Noise: Why So Many Predictions Fail–but Some Don’t também foi extremamente feliz em suas previsões das eleições presidenciais do EUA em 2012 e acertou o resultado das eleições em 50 dos 50 estados. Com isso, a internet começou a fazer brincadeiras baseadas no Chuck Norris Facts e criaram a hashtag #NateSilverFacts.

Após esses fatos, Data Science tem sido bastante utilizado na política, inclusive, a ponto, de chegar até em seriados como House of Cards, onde podemos ver o personagem Aidan fazendo uma análise de sentimento durante um debate realizado entre Underwood e Conway.


No contexto brasileiro, ainda vemos poucas iniciativas nesse sentido, e diante das incertezas que precedem a votação do impeachment da presidente Dilma Rousseff, esse artigo visa utilizar uma abordagem de Data Science para tentar prever o resultado da votação do Impeachment.

2. Problema

A definição do nosso problema é: prever os votos dos deputados na votação de abertura do impeachment da presidente Dilma Rousseff a ser realizado na Câmara dos Deputados, ou seja, fazer uma previsão da votação do Impeachment

No caso, a abertura de impeachment ocorre se dois terços (342) dos 513 deputados votarem a favor, ou seja, o processo de impeachment é aberto se 342 deputados ou mais votarem a favor.

Para entender melhor todo o processo de impeachment da presidente Dilma Rousseff, sugiro a visualização desse especial realizado pelo G1.

votação abertura de impeachment

Fonte: G1

3. Dados

Para prevermos os votos dos deputados, iremos utilizar as seguintes informações:

  • Nome do Deputado
  • Partido
  • Estado
  • Votos realizados na Câmara dos Deputados em 2015
  • Manifestação de Voto

3.1 Fontes

Esses dados foram coletados do site do Mapa do Impeachment do Movimento Vem Pra Rua Brasil e do Radar Parlamentar do Grupo de Estudos de Software Livre da POLI-USP.

Entrando mais no detalhe, os dados dos Votos realizados na Câmara dos Deputados em 2015 foi obtido no Radar Parlamentar e o restante no Mapa do Impeachment.

3.2 Pré-processamento

É importante notar, que houve um trabalho da obtenção, principalmente, com relação aos Votos realizados na Câmara dos Deputados em 2015, onde foi necessário importar à Base de Dados do Radar Parlamentar (demorou aproximadamente 6 horas) no PostgreSQL, realizar uma consulta no banco de dados para obter os dados necessários e depois exportar esses dados em formato CSV. Já a outra parte foi facilitado pelo arquivo disponibilizado no post do Regis A. Ely sobre o impeachment

Modelo Entidade Relacionamento Radar Parlamentar

Após a exportação dos dados da consulta, temos os seguintes dados:

Amostra da Tabela de Votos da Câmara Deputados

É importante notar que os dados de voto estão no formato Long e para adequar para o processamento de um modelo, temos que colocar no formato Wide. Após a conversão de Long para Wide, temos o seguinte resultado:

Amostra Tabela Votos Câmara Deputados Wide

Então, após a conversão, os números nas colunas se referem ao votacao_id e os votos nas linhas.

Após isso, realizei um cruzamento entre a base de dados com os Votos realizados na Câmara dos Deputados em 2015 com a base de dados do Mapa do Impeachment e cheguei nesse resultado:

Amostra Tabela Votos Câmara Deputados Sem Dummy

Como já mostrado na tabela anterior as opções de voto, podem ser:

  • ABSTENCAO
  • OBSTRUCAO
  • SIM
  • NAO
  • None (Quando não há nenhum registro do deputado naquela votação)

Com isso, podemos ver que em cada votação temos uma variável categórica e para que o nosso modelo entenda melhor a separação das categorias iremos fazer um processo de Dummy Coding onde teremos uma matriz esparsa.

Amostra Tabela Votos Câmara Deputados Com Dummy

Ainda, as variáveis Partido e Estado também são categóricas, portanto, devemos fazer o mesmo processo com elas.

Amostra Tabela Votos Câmara Deputados Com Dummy Partido e Estado

E assim chegamos a base de dados pré-processada, com 513 linhas e 888 colunas (listadas abaixo):

  • Nome
  • 26 Partidos
  • 27 Estados
  • 833 com relação aos Votos realizados na Câmara dos Deputados em 2015
  • Manifestação de Voto

4. Modelo

Pela etapa dos dados anterior, podemos atestar o gráfico da matéria da Forbes que diz que um cientista de dados gasta aproximadamente 80% do seu tempo preparando os dados.

Time Spending Data Scientist

Fonte: Forbes

Mas vejamos pelo lado bom, chegamos na parte que os cientistas de dados mais gostam, que é a parte de aplicar os algoritmos nos dados, verificar padrões e fazer previsões.

Least Enjoyable Activity Data Scientist

Fonte: Forbes

Pois bem, agora, antes de escolhermos qual modelo iremos aplicar, precisamos definir qual a métrica que vai definir o quão satisfatório é o nosso modelo.

4.1 Métrica

No caso, nosso problema é de classificação binária (A favor ou Contra) e para esse tipo de problema temos o seguinte conjunto de métricas que costumam ser utilizadas:

  • Accuracy Score
  • Average Score
  • F1 Score
  • Precision
  • Recall
  • Log Loss

Para efeitos de simplicidade, iremos escolher a Accuracy Score que é definida pela seguinte fórmula:

Accuracy Score Formula

4.2 Validação

Pronto, agora que temos a métrica definida vamos escolher o método de validação cruzada para verificar a generalização do modelo ao prever dados que podem ser diferentes do conjunto de treinamento, dentre as possibilidades temos:

  • KFold
  • Stratified KFold
  • Leave One Out
  • Leave One Label Out

Nesse problema, usaremos o Stratified KFold, pois ele preserva a distribuição da Manifestação de Voto em cada particionamento, e também, usaremos 10 partições para aumentar o grau de confiança da validação.

4.3 Escolha do Modelo

Agora, chegamos a parte da escolha do modelo, no caso, para se fazer esse tipo de escolha devemos levar em consideração alguns aspectos como:

  • Perfomance de Previsão
  • Eficiência Computacional
  • Interpretabilidade

Nesse caso, como nosso post preza pelo entendimento do leitor, iremos escolher um modelo que possui boa interpretabilidade. Alguns modelos que cumprem esse requisito são:

  • Regressão Logística
  • Árvore de Decisão

Nesse caso, o modelo de Árvore de Decisão possui mais interpretabilidade, portanto, esse será o modelo escolhido.

4.4 Aplicação do Modelo

Então, para recapitular definimos a aplicação do nosso modelo da seguinte maneira:

  • Métrica: Accuracy Score
  • Validação: Stratified KFold com 10 partições
  • Modelo: Árvore de Decisão

Agora, finalmente, chegamos à etapa de aplicação do modelo, onde usaremos 383 deputados que manifestaram voto para nosso conjunto de treinamento e validação e 129 deputados indecisos ou que não manifestaram seu voto para nosso conjunto de previsão.

Ao aplicarmos nossa árvore de decisão, limitei a profundidade até o nível 5 para facilitar a intepretação e então cheguei aos seguintes resultados:

Validação Cruzada:

  • 0.88 de acurácia média
  • 0.05 de desvio padrão

E uma das features mais interessantes da Árvore de Decisão, é que podemos ver variáveis e sua importância:

('5102_NAO', 0.48907282961971399),
('5166_NAO', 0.15440994106912861),
('5147_NAO', 0.077740704874052796),
('4999_NAO', 0.057152833759791341),
('5041_SIM', 0.052028491272337517),
('5085_SIM', 0.03781403149400113),
('Partido_PDT', 0.027263326073109304),
('Partido_PT', 0.02676308155800626),
('5109_NAO', 0.023867802734912871),
('5177_NAO', 0.022672717568444675),
('5032_SIM', 0.017145850127937404),
('4986_ABSTENCAO', 0.014068389848564032)

E essa é a árvore de decisão que chegamos:

Arvore de Decisao Impeachment

Para você entender melhor, tomemos por exemplo, a raiz da nossa árvore que tem o 5102_NAO <= 0.5, que basicamente diz, se o deputado votou NAO (NAO=1, SIM=0) na votação 5102, provavelmente ele é contra. Caso ele tenha não tenha votado (NAO=0, SIM=0) ou tenha votado SIM (NAO=0, SIM=1) ele provavelmente é à favor.

Ainda, segue tabela abaixo para fazermos um paralelo dos códigos de votação (ver coluna votação). É importante notar que cada projeto pode ter várias votações e a votação pode ser apenas referente à uma parte do projeto, ou seja, uma votação não necessariamente implica que um deputado é à favor ou contra o projeto inteiro.

siglanumerovotacaopeso_votdescricao_votacaoano
MPV66151020.4890Sigilo BNDES2014
PL105751660.1544Infantícidio2007
MPV68551470.0777PRORELIT2015
PLP30249990.0572Domésticas2013
PEC17150410.0520Maioridade Penal1993
PL296050850.0378Repatriação2015
MPV67251090.0239Salário Mínimo2015
PL1051770.0227Seguro de Vida para Funcionários2015
MPV66550320.0171Seguro Desemprego Pescador2014
PEC44349860.0141Aumento para AGU e Delegados2009

Como podemos ver, são alguns projetos polêmicos e isso nos dá a comprovação e um insight de que verificar votações de projetos polêmicos pode ser um bom indicador de como o deputado votará em um outro projeto polêmico, como é a votação do impeachment.

5. Resultados

Por fim, segue os resultados, com as previsões de votações dos indecisos e depois a previsão considerando os 513 deputados.

5.1 Previsão de Votação dos Indecisos

Votacao Impeachment Indecisos

PartidoA FavorContra
DEM10
PDT110
PHS20
PMB10
PMDB1911
PP114
PR164
PRB111
PSB61
PSC20
PSD121
PTB42
PTN50
PTdoB10
PV01
REDE10
Sem partido01
Total9336

5.2 Previsão de Votação

Votacao Impeachment Previsao

PartidoA FavorContra
DEM300
PCdoB012
PDT317
PEN11
PHS70
PMB10
PMDB5019
PP3613
PPS90
PR328
PRB211
PROS22
PSB283
PSC110
PSD283
PSDB470
PSL20
PSOL06
PT058
PTB145
PTN103
PTdoB21
PV51
REDE41
SD140
Sem partido01
Total357155

De acordo com a nossa previsão, teremos 357 votos à favor e 155 votos contra, portanto, isso significa que a previsão considera que o processo de abertura de impeachment será aberto.

Resultado Votacao Impeachment Arte

Ainda, creio que seja possível melhorar a perfomance da previsão com outros tipos de modelo ou hiperparametrização e caso eu tenha tempo, publicarei uma nova previsão usando um outro modelo com parâmetros otimizados.

6. Agradecimentos

Agradeço à Bruna Ferreira dos Santos pela revisão desse artigo e à Leonardo Leite do Radar Parlamentar pela ajuda com a base de dados do Radar Parlementar.

  • Domingo eu volto pra ver no q deu =p

  • Rafael Novello

    Gustavo, seu artigo ficou fantástico! Este é o tipo de aplicação prática que eu adoro ver na nossa área!
    Vc se aproximou muito do resultado real, isso sem fazer otimizações (se entendi bem), o que é impressionante!
    Parabéns pelo material! Ganhou um leitor!

  • Benevalter Bento Jr

    Fantástico amigo, virei seguidor!!!