Validando hipóteses.

Ana Schwendler
Mar 6, 2017 · 6 min read

Há três meses o Felipe B Cabral publicou um artigo sobre como seria o caminho traçado pela Operação Serenata de Amor até o final da primeira fase do projeto. Agora, vim explicar como aconteceu esse processo até aqui.

Nenhum projeto de data science é feito para durar apenas três meses. Existe um longo processo de análise de dados e estudo de métodos até ser desenvolvido algo concreto. Entretanto, como queríamos fazer o projeto acontecer, usamos nossos conhecimentos em métodos agéis (adquiridos com nossa experiência de desenvolvimento) e descobrimos que a melhor forma de adaptar o tempo que tínhamos era utilizando HDD (hyphothesis-driven development) junto a técnica timeboxing. Ou seja, eram levantadas hipóteses para serem desenvolvidas em um espaço de tempo pré-determinado.

Como Cabral explicou, as hipóteses levantadas para essa primeira fase foram: distância/tempo entre gastos, nepotismo e preços de refeição fora do padrão.

Estratégia de desenvolvimento

Como nosso tempo era escasso definimos o processo de exploração de cada hipótese de forma bem precisa:

1. Analisando as bases de dados

Para exemplificar o processo selecionei uma das hipóteses que validamos, distância/tempo entre gastos com alimentação. O tempo demarcado para esse caso era de uma semana de análise. Então, durante essa semana direcionamos nossos esforços para que, com os dados que temos disponíveis, seja possível fazer análises nos reembolsos da Câmara dos Deputados.

O notebook desenvolvido para essa hipótese está disponível aqui. Daqui para frente vou explicar com detalhes como selecionamos os dados que utilizamos, de que forma separamos quais gastos foram feitos no mesmo dia, a maneira que filtramos quais desses eram em cidades diferentes e por fim de que modo é feito o cálculo da distância entre cidades.

2. Importando dados

Para desenvolver ciência de dados, precisamos, veja só, de dados. Para o Serenata de Amor nós já coletamos dados de várias formas diferentes e cruzando esses dados conseguimos descobrir irregularidades. Até agora, já conseguimos reunir os seguintes dados (que coletamos e disponibilizamos para nosso projeto):

Existem outras bases que consultamos, mas por enquanto essas são as mais relevantes. Para o exemplo de distâncias viajadas nós utilizamos os dados dos reembolsos feitos pela CEAP.

Image for post
Image for post
Como é feita a importação de dados de reembolsos

Logo após importarmos os dados dos reembolsos, como o objetivo é combinar a distância entre gastos com refeições, selecionamos apenas os reembolsos de refeições.

Image for post
Image for post
Selecionando apenas reembolsos de refeições

Além dos dados de reembolsos, precisamos da localização geográfica dos fornecedores das refeições para poder calcular as distâncias percorridas, para isso importamos os dados de empresas.

Image for post
Image for post
Importando dados de empresas.

Para finalizar esse trabalho com os dados, agrupamos a soma dos valores dos gastos por dia.

Image for post
Image for post
Agrupando a soma dos valores de gastos por dia.

3. Calculando distâncias entre cidades

Para calcular distâncias, utilizamos as bibliotecas geopy que calcula a distância entre dois pontos usando a fórmula direta de Vicenty e Ipython.display para mostrar a distância calculada:

Image for post
Image for post
Código para cálculo das distância entre dois pontos.

Depois disso fazemos um cálculo de pair wise para calcular a distância entre pares em uma métrica definida, no caso quilômetros.

Image for post
Image for post
Código de pair wise para calcular a distância entre pares em métrica definida.

4. Filtrando casos suspeitos

Uma vez calculadas as distâncias entre as refeições feitas em um dia, aplicamos alguns algoritmos, para detectar casos suspeitos na nossa base de dados. Ou seja, detectar anomalias nos reembolsos.

Quando falamos em machine learning, existem vários algoritmos que tem por sua função encontrar pontos fora da curva em valores. Então, na Operação Serenata de Amor, o que fazemos é procurar algoritmos que sejam adequados para nossa hipótese e ao fim da análise, decidimos qual foi o que apresentou melhores resultados, entre todas as tentativas.

Para a hipótese de distâncias viajadas, fizemos um comparativo de resultados para os seguintes algoritmos:

4.1 . Desvio padrão

No caso de dados normalmente distribuídos, podemos observar que anomalias em valores serão três ou mais vezes do que o valor do desvio padrão, dessa forma podemos considerar essa técnica como uma forma de detecção de anomalias. Para essa hipótese consideramos avaliar com reembolsos com valores acima de três e cinco vezes o desvio padrão.

Image for post
Image for post
3 vezes o desvio padrão
Image for post
Image for post
5 vezes o desvio padrão

4.2. Isolation Forest

Seguindo a linha de detecção de anormalidades em preços, outro algoritmo que escolhemos avaliar os dados foi o Isolation Forest, que funciona ‘isolando’ as observações. Ele faz a seleção de uma característica dos dados e, em seguida, escolhe aleatoriamente um valor para dividir os dados entre um conjunto de valores máximo e mínimo do recurso selecionado.

Image for post
Image for post
IsolationForest

4.3. Local Outlier Factor

O Local Outlier Factor é baseado em um conceito de densidade local, onde a localidade é dada por n vizinhos mais próximos, e a densidade é estimada usando a distancia entre os vizinhos. Comparando a densidade local de um objeto com as densidades locais de seus vizinhos, pode-se identificar regiões de densidade semelhante e pontos que têm uma densidade substancialmente menor do que seus vizinhos. Estes são considerados anômalos.

Image for post
Image for post
Local Outlier Factor

4.4. Regressão Polinomial

Regressão polinomial não é bem uma forma de detecção de anomalias, mas serve para alertar sobre casos que mereçam ser auditados e que mais informação deve ser obtida. Mais informações sobre como esse método funciona, virá em um post técnico apenas sobre algoritmos utilizados.

Image for post
Image for post
Polynomial regression

5. Concluindo uma hipótese

Ao concluir sobre qual a melhor forma de selecionar reembolsos numa hipótese, adicionamos ao notebook informações que explicam por que de utilizarmos o método que selecionamos. No caso de distâncias viajadas resolvemos utilizar o método de regressão polinomial, por que ele inclui não só reembolsos suspeitos, mas também casos que merecem uma análise mais profunda, com mais informações.

Image for post
Image for post
Exemplo de conclusão de hipótese comum no final de cada notebook.

Todas as ideias desenvolvidas em um notebook são de preferência anotadas no mesmo para que qualquer outra pessoa que não tenha participado da análise possa seguir a linha de raciocínio criada.

Comparar os resultados obtidos é importante para escolher o melhor método de classificação dos reembolsos, e nem sempre a hipótese será validada positivamente de acordo com os resultados que temos, por isso é importante testar vários tipos de algoritmos para chegar a uma conclusão final embasada por dados.


É assim que desenvolvemos as hipóteses criadas para a Operação Serenata de Amor. Existem várias outras hipóteses estudadas (nesse link aqui), e sugestões são sempre bem-vindas!

Tem dúvidas? Olhe nosso site, lá tem várias informações sobre o projeto :)

Quer contribuir? Comece por aqui. Além disso você pode fazer com que a Operação Serenata de Amor continue à todo vapor. Continue seguindo a gente!

Operação Serenata de Amor

Inteligência artificial para controle social da…

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store