Monday, November 23, 2015

Performance do PollingData na Argentina - Turno 2

PollingData está acompanhando as eleições Argentinas desde agosto desse ano, e nesse último domingo os argentinos foram as urnas pelo segundo turno das eleições presidenciais. O resultado da eleição pode ser visto nesse link (em espanhol). Na tabela abaixo está o comparativo entre a previsão final do PollingData e a contagem dos votos. O Erro Médio Absoluto  (EMA) foi de 1,9%. 


Por esse critério, a previsão do PollingData no segundo turno foi bem melhor do que no primeiro turno (EMA de 2,6%). Essa melhora de performance era esperada. Além de haverem menos candidatos no segundo turno, os eleitores já conhecem os candidatos, o que geralmente resulta na intenção de voto ser menos variável e consequentemente mais previsível.

Como já foi discutido nesse post, as eleições Argentinas de 2015 foram um grande desafio para site por causa do cenário eleitoral instável, da baixa quantidade de pesquisas divulgadas e da falta de informação sobre as pesquisas publicadas. Apesar dessa dificuldades considero que a performance do PollingData foi aceitável. Num futuro próximo divulgaremos um ranking com a performance do PollingData em todas as eleições acompanhadas pelo site. Será interessante verificar o posição das diferentes eleições no ranking.

Nesse ano ainda estamos acompanhando as eleições espanholas, porém a eleição mais importante para o site foi a Argentina. Agora começaremos a nos preparar para as eleições municipais de 2016 no Brasil, e novidades serão apresentadas. Aguardem o PollingDAta versão 2016!

Tuesday, November 17, 2015

Prevendo o resultado da votação do Impeachment

Alguns meses atrás, um parceiro de trabalho teve a ideia de tentar prever o resultado de uma votação do Impeachment. O objetivo era vender esse modelo preditivo, visto que quantificar a chance de ocorrência do Impeachment (se de fato houver uma votação) pode ser bastante rentável para quem souber usar essa informação.

Lamentavelmente, não conseguimos vender o modelo. Ao invés de jogar fora todo esse trabalho, decidi investir um pouco mais de tempo e disponibilizar o modelo no site PollingData. Essa é uma forma de diminuir a frustração de não ter conseguido vender o modelo: pelo menos assim, talvez alguém ainda encontre utilidade para o modelo. Estou dando uma segunda chance ao modelo! Além disso, desenvolvi a interface com o usuário de forma a permitir que o mesmo tenha acesso a informações históricas e pertinentes sobre a votação e presença de cada deputado. Mesmo que o modelo em si não seja utilizado, as informações disponíveis ainda podem ser bastante uteis.

Vamos ao que interessa: é possível prever, de forma efetiva, o resultado de uma potencial votação de Impeachment? Eu acredito que sim, porém provavelmente não com a precisão desejada. Faço essa ressalva porque estamos fazendo, implicitamente, uma suposição (potencialmente) forte: estamos supondo que os deputados manterão seus padrões históricos de votos a favor/contra o governo na votação do Impeachment. Pra quem gosta de inferência Bayesiana: essas votações são permutáveis?

Sabidamente, essa seria uma votação extremamente importante, e não é difícil de imaginar que alguns padrões históricos se alterem: por exemplo, a probabilidade dos deputados estarem presentes nessa seção deve ser bem maior do que os seus históricos apontam! O maior o problema com essa suposição é que não há como avaliar a sua veracidade, só saberemos se de fato houver uma votação.

Por esse motivo, no modelo disponibilizamos duas versões: uma onde o mesmo peso é dado a todas as votações ocorridas em 2015, e outra onde um peso maior é dado a algumas votações que acreditamos terem maior poder preditivo para a votação do Impeachment. Essa avaliação de quais votações podem ser mais importantes foi feita de forma totalmente subjetiva, porém baseado na avaliação de um analista político bastante experiente, que reside em Brasília e acompanha de perto o jogo político da nossa capital.

Em toda votação, existe uma orientação de voto do Governo, da Minoria e de cada partido. Essas orientações geralmente escolhem um lado (SIM ou NÃO), mas também podem ser LIVRES, indicando que cada deputado deve votar como desejar. No caso de haver uma orientação, os deputados não são obrigados a votar de acordo com a ela. Existem deputados que, historicamente, respeitam bastante essas orientações, porém existem outros que as respeitam  com muito menos frequência.

O modelo preditivo é bastante simples. Calculamos as probabilidades de cada deputado votar a favor/contra o governo em duas situações distintas:
  • Governo e o partido têm a mesma orientação: ou seja, qual a chance de votar a favor do Impeachment se a orientação do partido for para NÃO votar a favor.
  • Governo e o partido têm orientações distintas: ou seja, qual a chance de votar a favor do Impeachment se a orientação do partido for SIM, para votar a favor.
 Em ambos os casos, dependendo do partido e do deputado, pode não haver votações suficientes para estimar essas probabilidades. Nesses casos, utilizamos as probabilidades não-condicionais, ou seja, a chance de votar a favor/contra o Governo, independentemente das orientações. Essas probabilidades são utilizadas para fazer milhares de simulações (Monte Carlo) da votação do Impeachment, permitindo que as probabilidades de vitória do Impeachment sejam calculadas. Como referencia, para que o Impeachment seja aprovado, a oposição precisa obter 342 votos na Câmara (2/3 dos 513 deputados, independente do número de presentes na seção). Se for aprovado, ainda tem que ser votado no Senado, onde precisa obter 54 votos (2/3 dos 81 senadores). O modelo apresentado aqui é apenas para a votação na Câmara.

      Nessa versão apresentada no site, o usuário pode escolher a orientação de cada partido, e ver como as probabilidades de vitória da oposição se alteram. O mesmo modelo também pode ser usado para prever qualquer votação na Câmara, talvez até de forma mais eficiente, visto que no geral as votações não são tão high-profile como a do Impeachment. Nesse caso, SIM deve ser interpretado como voto contra o governo, e NÃO como voto a favor do governo.

     O modelo de previsão do Impeachment se encontra no site PollingData, no menu “Modelos/Big Data” > "Impeachment”.



Tuesday, November 10, 2015

Bigdata no PollingData: Tabela FIPE + Webmotors

Algumas semanas atrás tive que comprar um carro. Não sou muito antenado com relação a carros, sei apenas quanto quero gastar e algumas características de interesse como ser um semi-novo, ter um motor potente e uma quilometragem aceitável. Fiquei bastante frustrado quando percebi que a única forma de pesquisar o valor dos carros na tabela da Fipe era selecionando uma Marca/Modelo especifica. Pra mim seria bem mais útil se pudesse selecionar todos os carros numa faixa de preço e/ou até um determinado ano.

Pra solucionar esse problema, acessei a todos os dados da Fipe utilizando uma api bem eficiente que encontrei online. Escrevi um programa no R que baixa a tabela completa da Fipe, converte os dados de JSON para um dataframe, e disponibilizei no PollingData. A interface com o usuário foi feita essencialmente utilizando apenas o DataTables, que é um plug-in para JQuery bastante flexível.

Além disso, também senti muita falta de poder ajustar o preço do carro de acordo com a quilometragem. Acabei comprando o carro sem ter uma estimativa confiável do seu valor em função da sua quilometragem. Depois de comprar o carro, fiquei pensando sobre isso: qual seria um jeito simples porém eficiente de obter essa estimativa? A minha solução envolveu Big Data. Escrevi um outro programa, utilizando técnicas de web scrapping, que acessou todos os veículos anunciados na WebMotors no dia 04/11/2015 (foram mais de 128 mil carros). 

Extrai todas as informações disponíveis na página de busca, principalmente preço, ano carro/modelo e quilometragem. Calculei duas estatísticas que considero importante ter em mente quando for comprar um carro (rule's of thumb):
  • A média de uso dos carros (quilometragem) é aproximadamente de 1000 km/mês.  Com essa   estatística é possível avaliar se um carro é mais/menos utilizado do que o esperado para o seu ano.
  • A quilometragem reduz o preço do carro, na media, em R$1 para cada 5 km rodados. Com essa estatística é possível fazer uma conta simples pra prever o valor do carro a partir dos dados da Fipe.
Focando no objetivo principal, a característica mais importante que observei foi que o impacto da quilometragem no preço não é linear. Esse impacto é muito maior quanto o carro é novo / semi-novo. Quando o carro é mais velho, a redução no preço é bem menos acentuada. Pensando nisso, ajustei um modelo de regressão simples para prever essa redução:
  1.  A variável dependente utilizada foi a variação relativa no preço do carro se comparado com a média dos outros carros de mesma Marca/Modelo.
  2.  Além de incluir quilometragem e idade (+ idade ^2) do carro, inclui outras variáveis dependentes: UF , Tipo de câmbio, Origem do carro na WebMotors (loja, concessionária e particular) e motor.
Ajustei o modelo dessa forma por dois motivos principais: em primeiro lugar, me parece razoável supor que um carro mais caro possa sofrer um impacto maior no seu preço por causa da quilometragem do que um carro mais barato. Em segundo lugar, dessa forma retiro o efeito de variáveis que não serão usadas para escorar a base da Fipe (Motor e cambio poderiam ser utilizadas, porém ainda não estão sendo). 

Claro que existem muitas melhorias possíveis para esse modelo, mas isso requer tempo. Por enquanto, esse modelo é bem parcimonioso e relativamente preciso. Acredito que a melhoria mais importante do modelo seria permitir que carros com uma quilometragem abaixo da média do seu ano pudessem ter um preço mais alto do que a tabela da Fipe. Por enquanto, estou tratando o valor da Fipe como sendo o valor máximo do carro, mas seria mais realista considerá-lo como de fato é: uma média.

Não sei quão útil esse modelo será para as pessoas, acho que muitos escolhem carros com mais emoção do que razão, mas fica aqui uma alternativa para quem quer trocar de carro com menos incerteza. O modelo da Fipe+WebMotos do PollingData está no menu Modelos/Models > FIPE+WebMotors.

Thursday, November 5, 2015

“Versão twitter” da discussão sobre existência de amostragem probabilística


Eu participo do grupo do Facebook “Estatística Brasil”, e um dos posts mais recentes foi um pergunta sobre a metodologia dos institutos de pesquisa não ser probabilística e, consequentemente, a impossibilidade de se calcular intervalos de confiança e margens de erros.

Segue abaixo minha contribuição na discussão, focando principalmente na questão da existência de amostragem probabilística de populações humanas. Resumi muita coisa em alguns parágrafos, por isso chamei de versão twitter ;)

"A distinção entre amostragem probabilística e não-probabilística esta' nos detalhes (ou nas suposições). Para quase qualquer método de amostragem e' possível argumentar que existem probabilidades de inclusão associadas a cada respondente sob alguma suposição (claro que existirão alguns zeros como mencionado acima e em alguns casos as suposições não são realistas). 

Se fizermos qualquer suposição para calcular as probabilidades, então por definição, a amostragem deixa de ser probabilística pois as probabilidades de inclusão são desconhecidas. 

Pensando em amostragem de populações humanas, devido a diversas fontes de erros, como a não-resposta, as probabilidades de inclusão não podem ser calculadas sem suposições. Isso vale mesmo que o desenho amostral utilizado seja inicialmente probabilístico. A amostra nasce probabilística e morre não-probabilística. 

Acho que ponto mais importante e' perceber que não existe amostragem probabilística sem suposições (nesse contexto). Então ao invés de se preocupar com a classificação da metodologia entre prob/não-prob, se preocupe mais com as suposições que estão sendo feitas implicitamente (algo que esta intimamente relacionado com a metodologia utilizada)"