useR! 2014 – Tutoriais


Estava devendo alguns comentários sobre o excelente useR! 2014, mas, devido à correria logo após o retorno, ainda não tinha conseguido sentar para escrever. Aqui seguem alguns comentários sobre os tutoriais, que mereceram um post separado. Um outro post sobre o encontro virá futuramente.

O primeiro dia foi composto de tutoriais de 3 horas, um pela manhã e outro à tarde. Pela manhã, assisti ao tutorial do Max Kuhn, sobre modelos de previsão no R, baseado no seu excelente livro Applied Predictive Modeling e no seu pacote para o R, caret (Classification and Regression Training). Max trabalha na Pfizer, então tem bastante experiência com modelos preditivos voltados para o mercado – em outras palavras, modelos que têm de funcionar. Isso é excelente, pois há um foco grande em como lidar com as técnicas na prática e como gerenciar seu fluxo de trabalho na análise de dados, uma lacuna presente em muitos livros de estatística e machine learning. Os slides e códigos do tutorial podem ser encontrados aqui.

IMG_0168

 

Entretanto, o custo de assistir ao tutorial do Max foi o de perder os outros, igualmente interessantes, que ocorreram simultaneamente. Em particular, alguns que não pude ver mas depois consultei o material foram: (i) Matt Dowle sobre o pacote data.table (para manipulação de dados). Se você ainda não conhece o data.table, está perdendo precioso tempo de vida. Eu literalmente acabei de juntar mais de 2 milhões de observações de imóveis com a função rbindlist instantaneamente, enquanto que com a função base do R demorava minutos. E (ii) Romain Francois sobre a integração do R com C++11 e seu pacote Rcpp11. Um interface simples para interagir com C++ e C++11 parece estar sendo a resposta para desenvolvimento de pacotes de alta performance no R. Meu interesse nesta assunto tem crescido particularmente pelo fato de simulações Bayesianas poderem ser computacionalmente muito intensas, então você acaba eventualmente tendo que se preocupar com performance. Não é muito legal esperar dias para um modelo rodar e, só depois, você descobrir um bug para ter que rodar tudo de novo.

Pela tarde assisti ao tutorial do Hadley Wickham sobre manipulação de dados com o dplyr. O dplyr é um pacote que tem o lado do bom dos dois mundos: uma sintaxe simples e amigável para dummies – ainda mais com o uso do pipe operator %>% do magrittr - juntamente com excelente performance (Romain e C++!).  Como eu já havia adotado o dplyr desde seu lançamento, assisti ao tutorial mais para prestigiar o Hadley do que para aprender.   Valeu a pena, a apresentação foi muito bacana!

IMG_0179

E, para variar, infelizmente não pude ir a dois tutorias que me chamaram a atenção em particular: (i) o do Ramnath, sobre documentos interativos com R, discutindo o rCharts, slidify, bem como soluções server side que têm surgido como Shiny e OpenCPU. E (ii) a apresentação do Dirk Eddelbuettel sobre o Rcpp.

Além dos tutoriais que mencionei, foram abordados temas como visualição dinâmica, modelos  de rede bayesiana, análise de dados espaciais entre diversos outros. Então,  se você ainda não tinha tido contato com estes assuntos/pacotes e quer se aprofundar,  eis aí uma boa oportunidade. Há bastante material para consulta e praticamente todos estão disponíveis no site!

Previsões para a copa: afinal, como se saíram os modelos?


Depois do 7 x 1 da Alemanha contra o Brasil, houve algum rebuliço na mídia. Nate Silver se explicou: não é que a derrota do Brasil fosse algo imprevisível, afinal, estimou-se em 35% as chances de a Alemanha vencer a partida. Mais de uma em cada três vezes. Entretanto, o placar de 7 a 1 foi, de fato, estimado como muito improvável segundo o modelo – apenas 0.025%. Mas será que isso por si só é suficiente para rejeitarmos seus resultados? Não necessariamente. Lembre que modelos são falsos. Você não quer saber se eles representam fielmente a realidade, mas sim se são úteis. A dificuldade está em, justamente, saber onde esses modelos podem ser úteis, e onde podem ser enganosos.

Modelar resultados raros e extremos é muito complicado.  Isso ilustra um ponto importante: não se exponha negativamente a Black Swans, pois a dificuldade (ou impossibilidade) de identificar tais eventos pode te expor a riscos muito maiores do que o que você imagina.  Nassim Taleb é alguém que bate há algum tempo nesta tecla.

Todavia, o interessante neste caso é que os modelos para a copa, por preverem vitória ou derrota, não estavam negativamente expostos a eventos extremos deste tipo (o diferencial de gols). Suponha que a probabilidade estimada para o resultado de 7 a 1 para a alemanha fosse de 0.25% ao invés de 0.025%, ou seja, 10 vezes maior. Isso em quase nada alteraria a probabilidade de um time ou outro vencer. Em outras palavras,  se você estiver apostando no resultado binário (vitória ou derrota), você não está exposto a um Black Swan deste tipo (poderia estar exposto a outros tipos, mas isso não vem ao caso agora).

Para ilustrar, comparemos uma distribuição normal (cauda bem comportada) com uma distribuição t de student com 2 graus de liberdade (cauda pesada). No gráfico abaixo temos a Normal em vermelho e a t de student em azul.  Note que a probabilidade de X ser maior do que zero é praticamente 50% nas duas distribuições. Entretanto, a probabilidade de X ser maior do que 3.3 é mais de 80 vezes maior na distribuição t do que na Normal. Na verdade, a simulação da t resulta em pontos bastante extremos, como -100 ou 50 (resultados “impossíveis” numa normal(0,1)), e por isso o eixo X ficou tão grande. Isto é, para prever o resultado binário X>0 ou X<0, não há muita diferença nos dois modelos, a despeito de haver enormes diferenças em eventos mais extremos.

Normal x T

 

Dito isto, não é de se surpreender que, apesar de Nate Silver ter colocado o Brasil como favorito – e ter errado de maneira acachapante o resultado contra a Alemanha – ainda assim suas previsões (atualizadas) terminaram a copa com o menor erro quadrático médio. Ou, também, com o menor erro logarítmico. Essas são medidas próprias de escore para previsões probabilísticas.

O gráfico final do erro quadrático ficou da seguinte forma. Não coloco o logarítmico por ser praticamente igual:

modelos_final

E segue também o gráfico final comparando as probabilidade observadas com as previstas:

calibracao_final

 

 

Previsões para a copa: USP e UFSCar x Nate Silver x Céticos


Previsões brasileiras

Grupo de Modelagem Estatística no Esporte (GMEE), parceria de um pessoal da USP e UFSCar, também colocou no ar um site com previsões para a copa, tanto nas classificações, quanto no jogo a jogo (resumi as probabilidades jogo a jogo em uma tabela ao final do post). Na última copa, o GMEE deu uma bola dentro: o grupo (a contra-gosto dos brasileiros) estimou como favoritos Espanha e Holanda.

Uma das coisas de que eu particularmente gostei neste site é que, além das probabilidades, eles colocaram um boxplot que ilustra a incerteza das estimativas. Assim como nas previsões do Nate Silver, o Brasil consta como favorito, entretanto com uma probabilidade menor: 30%.

boxplot

Como comparar previsões? Nate Silver x GEMM x Céticos

Agora já temos dois modelos diferentes para a copa do mundo. E há muitos outros por aí (que não coletei os dados por falta de tempo). Como avaliar a performance dessas previsões?

Uma forma simples e efetiva é utilizar o erro quadrático médio (que pode ser decomposto em outras medidas mais refinadas). Suponha que você atribua a probabilidade p a um evento x. O erro quadrático será:

(p – x)^2

Em que x é uma variável dummy que assume valor 1 se o evento em questão ocorrer e 0 caso contrário. Note que o melhor resultado possível é um erro de zero, e isto acontece quando você dá probabilidade de 100% para um evento que ocorre (1-1)^2 ou uma probabilidade 0% para um evento que não ocorre (0-0)^2. Já o pior resultado é um erro de 1, que acontece quando você diz que era impossível algo ocorrer (0%), mas este algo ocorre (0-1)^2, ou quando você diz que algo ocorrerá com certeza (100%) e o evento não ocorre (1-0)^2.

Quando há mais de um evento possível, calculamos isso para cada um deles e tiramos uma média, sob a restrição de que a probabilidade atribuída ao conjunto some 1. Por exemplo,  no caso da copa, em cada jogo há três resultados possíveis e mutuamente excludentes. Isto é,  tomando um dos times como referência, ou ele ganha, ou perde, ou empata. Suponha, por exemplo, que uma vitória tenha ocorrido. O erro quadrático médio de uma previsão para o jogo será:

((Probabilidade Estimada de Vitória – 1)^2 + (Probabilidade Estimada de Derrota – 0)^2 + (Probabilidade Estimada de Empate – 0)^2 ) /3

Vejamos, o caso do jogo Brasil x Croácia.

Nate Silver estimou chances de 88% para o Brasil,  9% para o empate e 3% para a derrota.  Já o GMEE foi mais conservador em sua previsão, estimando probabilidades de 66%, 21% e 13%, respectivamente. Ambos colocaram o Brasil como favorito e, realmente, o Brasil ganhou. Entretanto, como Nate deu maior certeza ao evento que de fato ocorreu, seu erro quadrático nesta partida foi de apenas 0.01, contra 0.06 do GMEE.

Note que estamos começando a distinguir entre tipos de previsões, mesmo que elas apontem o mesmo time como favorito.

Podemos fazer outra comparação. Suponha que você seja um cético de previsões no futebol. Afinal, poder-se-ia argumentar, trata-se de um esporte bastante imprevisível em que tudo pode acontecer.  Uma vitória, derrota ou empate são equiprováveis (33,33% cada). E de fato, caso isso fosse verdade, este seria o cenário mais difícil de se acertar.

Qual é o erro quadrático do cético? Ao atribuir a mesma probabilidade para todos os eventos, ele sempre terá o mesmo erro independentemente do resultado: 0.22. É uma estratégia conservadora, com previsões não informativas. Podemos, então, utilizar o cético como um benchmark mínimo. Em outras palavras, para o modelo ser minimamente aceitável, ele tem de, na média, errar menos do que o cético.

Depois de 11 partidas, como estão os previsores?

Nate Silver está na frente, com um erro médio de 0.159; O GMEE está apenas um pouco atrás, com erro de 0.163. E ambos, pelo menos por enquanto, com bastante vantagem em relação ao cético.

Esta é uma primeira aproximação para avaliar as previsões e ela pode ser refinada. Por exemplo, vocês notaram que não houve empate na Copa até agora? A probabilidade média estimada para os empates está em cerca de 23%. Se isso continuar a ocorrer por mais algumas partidas, desconfiaremos de que a probabilidade de empate dos modelos não está bem calibrada.

Discutiremos esta e outras medidas para avaliar as previsões no futuro. Vejamos um pouco sobre a atualização de modelos.

Atualização das probabilidades

Um bom modelo de previsão, sempre quando possível, deve tentar incorporar informações novas em seus cálculos.  Tomemos o caso da Holanda, que goleou a Espanha mesmo enquanto todos consideravam esta última como favorita.  Intuitivamente, após observar este resultado, você diria que as chances de a Holanda ganhar do Chile no dia 23 de junho devem permanecer as mesmas? Provavelmente não.

Se, em seu modelo, você dava baixa probabilidade para este evento, isto é um sinal de que você tem de reajustar, pelo menos um pouco, suas expectativas. O FiveThirtyEight está fazendo isso.  Antes do jogo Holanda x Espanha, o modelo estimava que o Chile era favorito contra a Holanda no dia 23: 48% de chances de ganhar. Agora a situação se inverteu e a laranja mecânica é a favorita com 37%.

Essas atualizações tentam aprimorar o modelo, mas será que as novas probabilidades serão melhores do que as anteriores? Como de costume, isto é uma questão empírica, e somente descobriremos  no decorrer dos jogos.

 

***

Probabilidade jogo a jogo do Previsão Esportiva

previsoes1

Previsões para a copa: “Roubo” de juiz já está no modelo?


Ontem, Nate Silver provavelmente torceu mais para o Brasil do que muitos brasileiros. Ele havia previsto que a Croácia tinha apenas 3% de chances de ganhar. E o gol contra do Marcelo, logo aos 11 minutos do primeiro tempo, deixou os croatas na liderança no início do jogo.

Note que, diferentemente dos demais palpiteiros  especialistas, que fazem previsões e comentários de maneira qualitativa – quase impossíveis de verificar depois – , a previsão do Nate era clara: as chances eram de 3%. Não eram 10% ou 20%. Sim,uma vitória da Croácia era possível… mas bastante improvável. Nate Silver teria de se explicar.

Entretanto, alguns minutos depois, eis que surge um pênalti roubado duvidoso para o Brasil que mudou os rumos da partida. Que sorte, não!?

Nem tanto.

Entre os fatores que o modelo do FiveThirtyEight pondera para calcular as chances de o Brasil ganhar a copa (que está bastante alta, 46%), um deles é justamente isso: estar jogando em casa. Aparentemente, no futebol, mais do que em muitos outros esportes, alguns lances conseguem determinar a partida fazendo com que o juiz acabe tendo muito poder.  E tem sido verificado, consistentemente, que juízes tendem a favorecer o anfitrião do jogo.  Se é pressão social, viés psicológico, “roubo”, ou qualquer outra razão, não importa muito neste caso. O fato é que isso ocorre e tem que ser levado em conta na hora de se fazer a previsão.

O bacana do modelo do Nate Silver é que ele está dando previsões jogo a jogo (coloquei baixo uma tabela com todas as probabilidades), então poderemos verificar sua calibração e comparar sua performance contra outros benchmarks. Futuramente explico como podemos fazer isso.  Outra coisa legal é que, como bom bayesiano, o modelo é recalculado jogo após jogo, levando em conta as novas informações nas probabilidades dos resultados. O jogo de ontem, como era o resultado esperado, alterou pouca coisa nas previsões.

E vale lembrar: sim, o Brasil ainda tem a probabilidade mais alta de ganhar entre todos os times – 46%. Só que isso implica também que, por enquanto, a probabilidade de não ganhar é de 54%. Acompanhemos!

jogos

 

Aprenda a fazer previsão de eleições com o NYT.


Depois que o Nate Silver saiu do NYT, o jornal montou um novo time de previsão para eleições. O novo modelo, denominado LEO, está no ar e com uma descrição bem amigável de seu funcionamento.  A parte gráfica dos resultados também está bacana, inclusive com uma seção comparando o modelo do NYT com seus concorrentes (vale lembrar que o site conta com a ajuda do Michael Bostock, um dos caras que desenvolveu o fantástico D3 para JavaScript)

Mas, tem algo ainda melhor. O NYT liberou os dados e os códigos do modelo no github. E o modelo é em R. Ou seja, agora, para replicar e adaptar o modelo à realidade brasileira só faltam duas coisas: tempo e vontade.

Benford Analysis R Package


Em post anterior falamos sobre a Lei de Benford e que ela pode ser utilizada para o auxílio na detecção de fraudes contábeis ou dados estranhos. Também explicamos por que ela surge - resumidamente, pode-se dizer que números que tenham crescimento exponencial, ou que sejam derivados da multiplicação de outros números, tenderiam à lei de Benford – e isto abrange muitos dados econômicos.

Além da Lei de Benford, temos falado bastante sobre o R por aqui. Então, que tal unirmos as duas coisas? Bem, em alguns dias, com o pacote benford.analysis, você poderá analisar facilmente e rapidamente (espero!) seus dados contra a lei de Benford para identificar possíveis erros.

A idéia do pacote é tornar a análise algo rápido e simples. Por exemplo, o gráfico abaixo é gerado com apenas dois comandos: bfd <- benford(dados) e plot(bfd).

Plot BenfordVamos ver se vai ficar bacana.

Atualização: a versão 0.1 está no CRAN.

Análise de redes e Moviegalaxies: seu filmes preferidos de uma forma que você nunca viu


Um campo de estudos que pode render muitos frutos na economia é o de análise de redes. Para quem tem curiosidade, há um curso bem interessante de análise de redes sociais no Coursera.

Mas, na verdade, o objetivo deste post é o de divulgar um site bem bacana, Moviegalaxies, que faz análise de rede com os personagens de filmes (você inclusive pode baixar os dados para o Gephi).

Um dos gráficos de que gostei é a o da rede de  “O Poderoso Chefão: parte II”:

The Godfather Part II

Livros de R e Python


Compartilharam comigo, agora passo em frente. Seguem dois links com alguns livros em pdf para programação em R e em Python.

Mais sobre Python: o Sargent publicou um livro online de modelagem e economia quantitativa com a linguagem.

Lei de Benford – por que ela surge?


No post anterior falamos da Lei de Benford e que ela surge naturalmente em diversos fenômenos do mundo real, inclusive em dados contábeis e econômicos. Mas não explicamos o porquê. Aqui traremos duas explicações.  A primeira, bastante intuitiva, é pensar que estes dados tem crescimento exponencial. Por exemplo, na economia (brasileira), variáveis como o PIB real e os preços crescem entre 2% e 6% ao ano, respectivamente. E como o crescimento exponencial levaria à Lei de Benford?

Suponha que o valor inicial de uma variável seja 10 e que ela tenha uma taxa de crescimento de 10% por período. Veja que, ao crescer exponencialmente, a variável vai demorar 7 períodos para chegar na casa dos 20’s. Todavia, após chegar no 20, ela cresce mais rapidamente, e leva apenas 4 períodos para chegar na casa dos 30’s. Note que esta variável irá ficar apenas um período na casa dos 90’s, para logo em seguida passar mais 7 períodos nos 100’s (e com primeiro digito 1). Parece condizer com a Lei.

Para verificar, façamos uma simulação, com uma variável que cresça 3% por período. Após 2000 períodos, a distribuição dos dígitos da série segue muito aproximadamente a Lei de Benford (como a amostra é grande, no gráfico utilizamos a distribuição dos dois primeiros dígitos, que tem maior capacidade de discriminação do que apenas a distribuição do primeiro dígito).

cresc_benfordAlém do crescimento exponencial, existe, ainda, uma razão mais convincente. Dados contábeis e econômicos também são, em geral, fruto da multiplicação de diversos números. Para saber o valor da produção,por exemplo, multiplicam-se quantidades e preços. E ocorre que a multiplicação de distribuições contínuas tem como distribuição limite um conjunto  de Benford. Façamos uma simulação com distribuições normal – N(10,10) – qui-quadrado – Q(3) e uniforme – U(0,1).

Perceba que elas, separadamente, não seguem a Lei.  Primeiro, a normal:

norm_benford

Agora a Qui-Quadrado:

qui_benford

E a Uniforme:

unif_benford

Entretanto, ao multiplicarmos as 3, eis que surge a distribuição dos dígitos!

mult_benford

A economia dos mundos virtuais


Inflação, deflação, ciclos econômicos e corridas bancárias também existem nos mundos virtuais, que podem servir como grande fonte de dados para análises econômicas. Para mais, leia esta interessante matéria do Washington Post.

Via Mankiw e Marginal Revolution.