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

 

 

Nicolas Cage e as editoras do Harvard Law Review


As feministas que buscam mais mulheres como editoras de top journals têm que lutar por mais filmes com Nicolas Cage!  Ou será que este applicativo para Google Chrome resolveria? – transforma todas as imagens da sua internet em Nicolas Cages.

number-of-films-niclas-cage-appeared-in_female-editors-on-harvard-law-review

 

O problema com a solução é que há um trade-off: mais filmes com Nicolas Cage aumentarão o número de afogamentos em piscinas.

number-people-who-drowned-by-falling-into-a-swimming-pool_number-of-films-niclas-cage-appeared-in

PS: As correlações acima foram geradas pelo genial site Spurious Correlations. Agora não falta material para ensinar correlação espúria.

Via Marginal Revolution.

 

Mapas de roubos em Brasília?


Recentemente conheci um site com uma iniciativa bem bacana chamado Onde Fui Roubado. Lá qualquer pessoa pode reportar um crime especificando local, hora, objetos roubados e inclusive fornecer um relato. Há mais de 16 mil registros para várias cidades do país, e resolvi fazer um webscraping para ver como são estes dados.

Especificamente para Brasília, infelizmente, existem apenas cerca de 200 registros. A maioria na Asa Sul, Asa Norte e Sudoeste, com mais de 100. A ideia aqui será montar um mapa de calor, ou de densidade, dos roubos no Plano Piloto.

Temos, entretanto, dois problemas que valem ser ressaltados: (i) a amostra é pequena; e, (ii) possivelmente viesada. Isto é, como o site ainda não parece ser muito conhecido, não necessariamente o público que está informando é representativo da população do local. Ainda assim, tendo em mente essas ressalvas, vamos brincar um pouco com a visualização dos dados!

Primeiro, vejamos um mapa com todos os casos – note que, quanto mais vermelho, maior a concentração de roubos reportados na região. A maior parte dos registros foram na Asa Sul e Asa Norte. Na Asa Norte, em especial, a região próxima à UnB tem destaque. Lembre que talvez isto seja decorrência, por exemplo, de pessoas mais jovens conhecerem o site e reportarem mais casos.

crimes_geral

 

Vamos dividir agora o mapa por horário do roubo, entre manhã, tarde, noite e madrugada. A maior parte dos roubos registrados ocorreu durante a noite, com focos na Asa Norte e início da Asa Sul.

hora

 

Vejamos, ainda, uma divisão por dias da semana. De maneira consistente com os mapas anteriores, aparece um foco nas sextas, na região próxima à UnB.

semana

Poderíamos fazer um mapa cruzando dias da semana e hora, mas temos poucos dados para isso. A ideia aqui é mostrar como podem ser poderosas essas visualizações! Se a Secretaria de Segurança Pública liberar os microdados dos BO’s (se alguém tiver estes dados, por favor, entre em contato), seria possível montar mapas bem acurados. E imagine cruzá-los com as informações de imóveis - poderíamos medir o impacto da criminalidade nos preços imobiliários.

Por fim, reforço a divulgação do Onde Fui Roubado, é uma iniciativa louvável!

***

A quem interessar, seguem os códigos para a construção dos mapas. Os dados podem ser baixados aqui.


library(ggmap)
library(dplyr)

### carrega dados
dados <- readRDS("roubo2.rds")

### Pega mapa de Brasília
q<-qmap("estadio mane garrincha, Brasilia", zoom=13, color="bw")

### transformando data em POSIXlt e extraindo hora

dados$hora <- as.POSIXlt(dados$data)$hour

### selecionando a base de dados do plano piloto, criando semanas e horários
bsb <- filter(na.omit(dados), cidade=="Brasília/DF",
lon > -47.95218, lon < -47.84232,
lat > -15.83679, lat < -15.73107)%.%
mutate(semana = weekdays(data),
hora = cut(hora,
breaks=c(-1,6,12,18,25),
labels=c("Madrugada", "Manhã", "Tarde", "Noite")))

### reordenando os dias da semana
bsb$semana <- factor(bsb$semana, levels = c("segunda-feira", "terça-feira",
"quarta-feira", "quinta-feira",
"sexta-feira", "sábado", "domingo"))

### estrutura básica do gráfico
map <- q + stat_density2d(
aes(x = lon, y = lat, fill = ..level.., alpha = ..level..),
size = 2, bins = 4, data = bsb,
geom = "polygon")

### mapa geral
map + scale_fill_gradient(low = "black", high = "red", guide=FALSE)+
scale_alpha(guide=FALSE)

### mapa por dia da semana
map+scale_fill_gradient(low = "black", high = "red", guide=FALSE)+
facet_wrap(~ semana)+scale_alpha(guide=FALSE)

### mapa por horário
map+scale_fill_gradient(low = "black", high = "red", guide=FALSE)+
facet_wrap(~ hora) + scale_alpha(guide=FALSE)

 

Jornalismo baseado em dados – Blog do Nate Silver está no ar!


Está no ar o blog do Nate Silver – FiveThirtyEight!

Nate Silver, economista e estatístico, alçou-se à fama prevendo quantitativamente os resultados das eleições norte americanas, em meio a dezenas de pundits que, de maneira arrogante, erraram grosseiramente. Seu segredo? Dados.

Agora, Nate reuniu uma equipe para dedicar-se ao jornalismo fundamentado na análise rigorosa de dados, tratando dos temas mais variados: além de política,  o blog tratará de economia, esportes, ciência e outras questões do dia-a-dia.

Três destaques que você deve conferir:

- Geral: O manifesto de Nate Silver, com uma introdução ao blog.

- Esporte: Esta fantástica tabela com previsões do campeonato de basquete da NCAA, acompanhada da explicação do modelo. Imagine uma dessas para a Copa ou para o Brasileirão?

- Economia: Artigo simples, mas interessante, com três recomendações para avaliar dados econômicos (que muitas vezes são tomados as is). Sobre este assunto, neste blog, veja os pots sobre a acurácia das variáveis econômicas.

Este é um blog promissor, certamente vale a pena acompanhar.  E, falando em acompanhar blogs, se você ainda não usa, recomendo fortemente baixar um leitor de RSS, o FiveThirtyEight tem feed.

PS: Você pode encontrar outros posts sobre Nate Silver neste blog aqui.

Estatísticas de homicídio – mais sobre erro de medida.


Qual foi a quantidade de homicídios no EUA em 2010? Três medidas diferentes, com 25% de diferença entre a maior e menor.

12,966, FBI, Crime in the United States 2010.

13,164, FBI, Crime in the United States 2011 (2010 figure).

14,720, Bureau of Justice Statistics (Table 1, based on FBI, Supplementary Homicide Statistics).

16,259, CDC (based on death certificates in the National Vital Statistics System). 

Veja mais no Marginal Revolution.

Para saber mais sobre o assunto, veja no blog também  aqui aqui ,aquiaqui, aqui e aqui.

 

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.