Gustavo De Mari Pereira

MSc. Computer Science | University of Sao Paulo

Data Science para previsão da votação do Impeachment | Gustavo De Mari Pereira

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

April 16, 2016

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:

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:

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):

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:

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:

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:

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:

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:

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:

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.

sigla numero votacao peso_vot descricao_votacao ano
MPV 661 5102 0.4890 Sigilo BNDES 2014
PL 1057 5166 0.1544 Infantícidio 2007
MPV 685 5147 0.0777 PRORELIT 2015
PLP 302 4999 0.0572 Domésticas 2013
PEC 171 5041 0.0520 Maioridade Penal 1993
PL 2960 5085 0.0378 Repatriação 2015
MPV 672 5109 0.0239 Salário Mínimo 2015
PL 10 5177 0.0227 Seguro de Vida para Funcionários 2015
MPV 665 5032 0.0171 Seguro Desemprego Pescador 2014
PEC 443 4986 0.0141 Aumento para AGU e Delegados 2009

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

Partido A Favor Contra
DEM 1 0
PDT 1 10
PHS 2 0
PMB 1 0
PMDB 19 11
PP 11 4
PR 16 4
PRB 11 1
PSB 6 1
PSC 2 0
PSD 12 1
PTB 4 2
PTN 5 0
PTdoB 1 0
PV 0 1
REDE 1 0
Sem partido 0 1
Total 93 36

5.2 Previsão de Votação

Votacao Impeachment Previsao

Partido A Favor Contra
DEM 30 0
PCdoB 0 12
PDT 3 17
PEN 1 1
PHS 7 0
PMB 1 0
PMDB 50 19
PP 36 13
PPS 9 0
PR 32 8
PRB 21 1
PROS 2 2
PSB 28 3
PSC 11 0
PSD 28 3
PSDB 47 0
PSL 2 0
PSOL 0 6
PT 0 58
PTB 14 5
PTN 10 3
PTdoB 2 1
PV 5 1
REDE 4 1
SD 14 0
Sem partido 0 1
Total 357 155

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.