Curiosidades do Financiamento de Campanha nas Eleições 2016

Análise do Financiamento Eleitoral com uso de Grafos

Motivação

Sou uma pessoa curiosa desde que me entendo por gente, tentar entender o funcionamento das coisas faz parte da minha natureza. Assim, ao ver os dados das prestações de contas das eleições 2016 disponíveis na Internet logo me interessei em explorar e tentar entender como os diversos atores se relacionam.

Minha primeira iniciativa foi explorar o sistema oficial do TSE (DivulgaCandContas). O sistema é bem fácil de usar e permite acesso a todos os dados das candidaturas e prestações de contas, além de algumas estatísticas consolidadas e consultas por doador/fornecedor. É uma ferramenta bastante útil se você sabe o que está procurando, como no caso de querer saber quem são os doadores de determinado candidato, senti falta porém, da capacidade de olhar para todo o conjunto de dados e ver como cada peça se encaixa.

Parti então para uma nova abordagem, importar os dados do Repositório de Dados Eleitorais para um sistema de banco de dados onde pudesse efetuar algumas consultas e talvez visualizar o conjunto de dados. E foi ai que a abordagem de um banco de dados baseado em grafos mostrou-se uma alternativa interessante.

Um banco de dados baseado em grafos utiliza uma representação dos dados baseada em nós (vertices) e relacionamentos (arestas), onde cada um destes pode conter um conjunto de propriedades. Tal representação encaixa-se naturalmente aos dados de financiamento eleitoral, onde temos candidatos, doadores, fornecedores, partidos e municípios representados pelos nós, e doações, despesas, filiação partidária e candidaturas representados pelos relacionamentos.

Além de se adequar muito bem ao conjunto de dados, a abordagem baseada em grafos possui um excelente representação visual, que permite observar de forma intuitiva agrupamentos e relacionamentos inesperados entre os dados.

Abordagem

Para tornar o processo ainda mais interessante resolvi utilizar algumas novas tecnologias e ferramentas.

Como sistema de banco de dados utilizei a ferramenta Neo4J, um banco de dados baseado em grafos muito fácil de usar que já conta com uma ferramenta de consultas e visualização nativa, além de uma linguagem de consultas (CYPHER) bem parecida com a linguagem SQL.

Para configurar e instalar o Neo4J foi utilizada a ferramenta Docker um sistema para execução de serviços em contêineres. Os contêineres são ambientes de execução que permitem isolar o serviço executado, uma espécie de máquina virtual mais leve, mas que facilita imensamente a instalação de serviços em larga-escala.

Para tratar os dados do TSE antes da importação no Neo4J desenvolvi um utilitário com a linguagem de programação Go. Os dados são fornecidos pelo TSE em um arquivo de texto onde os campos são separados por vírgulas (CSV), para importar esses dados no Neo4J de forma eficiente é necessário reorganizar as informações para uma estrutura mais próxima daquela utilizada pelo Neo4J.

Sobre os Dados Apresentados

As informações e imagens geradas abaixo são baseadas nos dados do repositório do TSE obtidos em 29/09/2016. Durante o período eleitoral as prestações de contas dos candidatos são atualizadas diretamente, podendo haver diferenças entre os dados apresentados e a prestação de contas final dos candidatos. O conjunto de dados apresentado se restringe as candidaturas do estado de São Paulo, essa restrição é necessária pois o banco de dados está hospedado em um serviço gratuito cuja capacidade de armazenamento, processamento e transferência dos dados é limitada.

Perguntas

Abaixo apresento algumas perguntas sobre os dados, a consulta utilizada para responder essa pergunta e a visualização gerada por essa consulta. Pela quantidade de dados algumas das visualizações podem ficar ilegíveis, clique sobre a imagem para ampliar ou execute a consulta no endereço http://eleicoes2016.edupsousa.com/ para visualizar e interagir com os resultados (veja no final do artigo algumas dicas para executar suas próprias consultas).


Financiando a Concorrência

P: Existem candidatos que contrataram serviços de outros candidatos ao mesmo cargo e no mesmo município?

MATCH (f:Fornecedor)<-[:DESPESA]-(c:Candidato)-[r1]->(m:Municipio),
(f)-[r2]->(m)
WHERE type(r1)=type(r2)
RETURN f,c,r1,r2,m
Vértices: Candidatos (azul), Município (vermelho) — Arestas: Despesa (vermelho), Candidatura (amarelo), Doação (cinza)

R: Em 13 cidades paulistas os candidatos declararam ter pago por serviços prestados por um candidato concorrente.

Em grande parte dos casos os partidos dos candidatos nem mesmo estão coligados. Chama atenção o caso de Caconde, onde nada menos que 12 candidatos contrataram os serviços contábeis prestados por um concorrente.

Você acabou de se formar em contabilidade? Talvez Caconde seja um bom lugar para abrir seu escritório!

Interesses Regionais

P: Quais foram as pessoas físicas* que realizaram doações (exceto aquelas estimadas) para prefeitos em diferentes municípios?
* Apesar de não serem permitidas doações de pessoas jurídicas, os repasses de partidos constam do banco de dados como repasses de pessoa jurídica.

MATCH 
(doador:Fisica)-[doacaoA:DOACAO]->(candidatoA:Candidato)-[candidaturaA:PREFEITO]->(municipioA:Municipio),
(doador)-[doacaoB:DOACAO]->(candidatoB:Candidato)-[candidaturaB:PREFEITO]->(municipioB:Municipio)
WHERE
NOT("NaoIdentificada" IN labels(doador)) AND
doacaoA.especie <> "ESTIMADO" AND
doacaoB.especie <> "ESTIMADO" AND
municipioA.nome <> municipioB.nome
RETURN *

R: Cerca de 63 pessoas realizaram doações para candidatos de 2 ou mais municípios.

Municipios (Vermelho), Doadores (Verde) e Candidatos (Azul)

O que se vê na maioria dos casos é que as doações ocorrem para municípios próximos (ex. Mairiporã e Santana do Parnaíba, Ubatuba e São Luiz do Paraitinga, Penápolis e Braúna).

É interessante também perceber a formação de algumas redes, 2 delas (a direita no gráfico) são bastante proeminentes. A primeira liga parte do Vale do Paraíba e Litoral Norte aos municípios de Jundiaí, Várzea Paulista e Guarulhos. A outra liga São Paulo e outros municípios da região metropolitana a Hortolândia, Campinas, Orlândia e São José do Rio Preto.

Outro ponto interessante é o valor médio dessas doações que é de aproximadamente R$ 8.400,00, enquanto o valor médio das doações de pessoas físicas (descontando receitas estimadas) para candidatos a prefeito é de aproximadamente R$ 5.100,00.

Abaixo uma variação do mesmo gráfico, mantendo apenas os doadores que fizeram doações para candidatos de um mesmo partido.

Doações realizadas para candidatos de um mesmo partido em diferentes municípios.

Uma Vela para cada Santo

P: Quem fez doações para diferentes candidatos a prefeito de um mesmo município?

MATCH 
(doador:Fisica)-[doacaoA:DOACAO]->(candidatoA:Candidato)-[candidaturaA:PREFEITO]->(municipio:Municipio),
(doador)-[doacaoB:DOACAO]->(candidatoB:Candidato)-[candidaturaB:PREFEITO]->(municipio)
WHERE
candidaturaA.numero <> candidaturaB.numero AND
doacaoA.especie <> "ESTIMADO" AND
doacaoB.especie <> "ESTIMADO"
RETURN *

R: Cerca de 33 doadores preferiram se precaver e realizaram doações para diferentes candidatos em um mesmo município.

Aqui chama a atenção o caso de São José dos Campos onde uma mesma pessoa realizou doações para 3 candidatos. Em São Paulo, Marta Suplicy e Fernando Haddad receberam 100 mil reais cada em doações de uma mesma pessoa.

Outro caso interessante é uma intersecção destes resultados com os resultados da pergunta anterior: uma mesma pessoa realizou doações para 2 candidatos na cidade de Bauru e outros 2 candidatos na cidade de Agudos.

O Caminho do Dinheiro: Despesas de Norte a Sul

P: Dados 2 municípios quaisquer qual o caminho mais curto que os conecta passando somente por Candidatos e seus Fornecedores.

MATCH 
p = shortestPath((m1:Municipio {nome:"POPULINA"})-[*..15]-(m2:Municipio {nome:"CANANÉIA"}))
WHERE
ALL (n IN nodes(p) WHERE n:Candidato OR n:Fornecedor OR (n:Municipio AND (n.nome = "POPULINA" OR n.nome = "CANANÉIA")))
WITH
p,
nodes(p) AS pNodes
UNWIND pNodes as pNode
MATCH (pNode)-[r]->(m:Municipio)
RETURN p, r, m

No quadro ao lado temos a ligação de norte ao sul do estado de SP por meio de fornecedores e candidatos.

Um dos candidatos a prefeito de Populina está conectado aos candidatos à prefeitura de Santa Salete e Fernandópolis, todos da região norte do estado, dai a ligação segue através da SABESP para o candidato a prefeito de Paulínia, passa por Taubaté no Vale do Paraíba e dai então para o candidato a prefeito de Cananéia.

Conclusão

A análise utilizando grafos permite excelentes insights sobre os dados, é claro que as consultas e os resultados apresentados aqui não passam de curiosidades sob as quais não é possível tirar qualquer tipo de conclusão definitiva.

Meu intuito inicial ao analisar esses dados foi somente a familiarização com as ferramentas e com esse tipo de análise, porém, com pouco esforço foi possível verificar que as possibilidades são inúmeras com esse tipo de abordagem, como por exemplo o reconhecimento de fraudes pelos órgãos de controle ou a análise de mercado pelos prestadores de serviços para campanhas eleitorais (serviços gráficos, marketing, etc).

Futuramente esse conjunto de dados pode ser ainda expandido com os dados das declarações de bens dos candidatos, permitindo o cruzamento entre empresas que estes tenham participação e os dados de fornecedores. Há ainda a possibilidade de obter os dados das candidaturas e os resultados das eleições anteriores para analisar as mudanças nas redes dos candidatos e partidos a cada pleito eleitoral.

Um complemento bastante interessante para esses dados seriam os dados dos quadros societários das empresas (disponíveis no site da Receita Federal, e no site http://www.consultasocio.com/), porém infelizmente os dados da RF não são públicos para download, e o site citado acima permite a consulta somente pelo nome do sócio (o que não permite distinguir entre homônimos).

Para Realizar Suas Próprias Consultas

Você pode realizar as consultas acima (ou suas próprias consultas) no endereço: http://eleicoes2016.edupsousa.com/, este endereço dá acesso a interface do banco de dados Neo4J, para maiores informações sobre a linguagem utilizada nas consultas veja: 
https://neo4j.com/docs/developer-manual/current/cypher/

Os dados são organizados por meio de nós e dos relacionamentos entre eles, cada nó pode possui 1 ou mais rótulos, como:

  • Pessoa: Identifica uma pessoa física ou jurídica, possui as propriedades cpfCNPJ, nome.
  • Fisica: Aparece em conjunto com o rótulo Pessoa para representar uma pessoa física.
  • Jurídica: Aparece em conjunto com o rótulo Pessoa para representar uma pessoa jurídica.
  • NaoIdentificada: Aparece em conjunto com o rótulo Pessoa para representar um doador não identificado nas prestações de contas eleitorais.
  • Doador: Aparece em conjunto com o rótulo Pessoa para representar alguém que realizou doações para candidatos ou partidos.
  • Fornecedor: Aparece em conjunto com o rótulo Pessoa para representar alguém para quem um candidato declarou o pagamento de despesas.
  • Municipio: Representa um município para o qual existem candidatos cadastrados.
  • UF: Representa um estado, agrupando os municípios.

As relações são identificadas por um único tipo, cada relação liga 2 nós e possui uma direção específica, os tipos são escritos em letras maiúsculas:

  • DESPESA: Representa uma despesa paga por um Candidato a um Fornecedor.
  • DOACAO: Representa a doação feita por um Doador (Pessoa Física ou Pessoa Jurídica no caso dos partidos) a um candidato ou partido.
  • DOACAO_INDIRETA: Representa uma doação feita por uma Pessoa Física para um partido e repassada por este a um candidato. Esse tipo foi criado para simplificar a identificação da origem das doações pois liga o doador pessoa física diretamente ao candidato, porém, para cada DOACAO_INDIRETA existem 2 relações (uma para o partido e outra para o candidato) de DOACAO que correspondem a mesma movimentação financeira. Assim é importante não somar os dois tipos de doação ao computar o total doado por alguém ou recebido por um candidato.
  • FILIACAO: Relaciona um Candidato a um Partido político.
  • PERTENCE: Relaciona um Município a sua UF.
  • PREFEITO, VICE-PREFEITO e VEREADOR: Representam a candidatura que relaciona um Candidato a um Município.