O que é ideal no modelo: Acurácia ou Explicabilidade?

Esse post provocador do Inference vem em uma boa hora dado que está um hype bem alto a respeito de Deep Learning, e há muitas dúvidas a respeito do seu poder preditivo, este que muitas vezes flertam com o overfitting mas esse não é o motivo desse post.

O ponto principal que eu gostaria de ressaltar é que de acordo com o autor, em um dos workshops do NIPS sobre Aprendizado Black Box e Inferência, em que o principal ponto dos conferencistas foi que o trade-off entre acurácia e explicabilidade não somente é falso, como a explicabilidade não faz parte da propriedade do modelo.

Para quem não sabe o que é esse trade-off, os autores exemplificam no paper:

  • accurate but black-box: The best classification accuracy is typically achieved by black-box models such as Gaussian processes, neural networks or random forests, or complicated ensembles of all of these. Just look at the kaggle leaderboards. These are called black-box and are often criticised because their inner workings are really hard to understand. They don’t, in general, provide a clear explanation of the reasons they made a certain prediction, they just spit out a probability.
  • white-box but weak: On the other end of the spectrum, models whose predictions are easy to understand and communicate are usually very impoverished in their predictive capacity (linear regression, a single decision tree) or are inflexible and computationally cumbersome (explicit graphical models).

Em outras palavras, os autores argumentam que, o fator de explicabilidade de um modelo é muito mais uma confabulaçcão a posteriori do que funcionou ou não, do que algo que deveria ser uma propriedade do modelo.

Como diria Nassim Taleb em Fooled By Randomness, a mente humana é uma máquina de realizar previsões e contar histórias… A posteriori

Isso é, fazer divagações em relação ao funcionamento de um determinado modelo de acordo com propriedades do mesmo, não faz sentido, na ótica dos autores.

No entanto, o ponto que eu acho que não foi tocado é de que com o crescimento dos modelos cada vez mais black-box como o do Netflix e afins, o principal fator do aprendizado de máquina (Machine Learning) é que de uma maneira ou de outra não conseguimos colocar o aspecto de cognição para ajustar ou mesmo saber o que está dando certo ou errado com o modelo em termos paramétricos e principalmente estruturais.

Não é preciso ir muito longe para ver que esse é um ponto pertinente, basta ver a indústria financeira, em que centenas de bilhões de dólares residem em modelos que muitas vezes os operadores não sabem nem o que está acontecendo.

Os eventos como o Flash Crash de 2010, o fátidico episódio da Knight Capital que perdeu USD 440 milhões em 30 minutos, e do London Whale que custou mais de USD 2 bilhões devido a erros nas estratégias de alguns derivativos mostram que ainda o poder de discernimento e análise do agente humano ainda é necessário para o refinamento do modelo, este que vai muito além da combinação paramétrica; mas que chega a aspectos estruturais do modelo como o todo.

A discussão é boa e ainda não vai parar por aqui.

Link para artigo original: TURNER, Ryan. A Model Explanation System

Paper Turner NIPS 2015

O que é ideal no modelo: Acurácia ou Explicabilidade?

Previsão do número de homicídios no Rio de Janeiro (Sim, eu voltei a postar!!!)

Um pequeno disclaimer: Depois de muito relutar, estou voltando com as atividades do blog. Isso significa de maneira prática, que apesar do clipping ser o grande driver dos acessos, sinto que há uma lacuna em relação a posts técnicos aqui na blogosfera brasileira.

Dessa forma, vou fazer mais posts técnicos com assuntos ligados à Machine Learning, Data Mining e afins.

Disclaimer feito, bora pro post original.

*******

Fala pessoal, tudo bem?

Um dos principais problemas em utilizar processadores numéricos como o Excel ou mesmo o LibreOffice é que se perde um pouco a flexibilidade de parametrizar os modelos de previsão.

Além disso, há um problema grave nesses processadores de reprodutibilidade, dado que pode haver inúmeras versões, planilhas voando pra todo o lado via e-mail, e por aí vai.

Nesse post eu vou utilizar dados reais da quantidade de homicídios que houveram no Rio de Janeiro de 1991 até 2011.

Os dados foram extraídos e consolidados pelo CESeC – Centro de Estudos de Segurança e Cidadania e o link está no final do script.

Antes de mais nada, vamos carregar o package Forecast:

# Load library
if(!require(forecast)){
 install.packages("forecast")
 library(forecast)
}

Depois disso, vamos realizar a carga dos dados. Nesse caso eu fiz uma transformação na planilha original e passei os dados para csv.

# Dataset
rj_murder <- read.csv("https://raw.githubusercontent.com/fclesio/learning-space/master/Datasets/rj-homicidios-1991-2011.csv")

Vamos dar uma olhada nos dados para nos certificar que tudo está OK.

# Check data
head(rj_murder)

Com os dados OK, para incluir um conjunto de dados no package de Forecast e ARIMA, temos que antes de mais nada, pegar todos os datapoints e construir uma série através de um objeto de timeseries como no bloco de código abaixo:

# Transform in time series dataset all metrics inside the dataset 
rj_murder_total <- ts(rj_murder$total, start=c(1991, 1), end=c(2011, 12), frequency=12)
rj_murder_capital <- ts(rj_murder$capital, start=c(1991, 1), end=c(2011, 12), frequency=12)
rj_murder_baixada <- ts(rj_murder$baixada, start=c(1991, 1), end=c(2011, 12), frequency=12)
rj_murder_interior <- ts(rj_murder$interior, start=c(1991, 1), end=c(2011, 12), frequency=12)

Para entendermos o que aconteceu, vamos destrinchar erssa função TS:

ts() função para a construção de série temporal

rj_murder$total conjunto de datapoints do dataframe da coluna total

start=c(1991, 1) início da série é janeiro de 1991

end=c(2011, 12) o fim da série é dezebro de 2011

frequency=12 como estamos falando de dados mensais, a frequencia da série é de 12 datapoints por ano

Agora que entendemos o que fizemos, vamos dar uma olhada nos nossos objetos ts() e ver se os mesmos estão corretos.

#Plot series
par(mfrow=c(2,2))

plot(rj_murder_total
 ,main = "Total de Homicidios no RJ de 1991-2011"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5
 )


plot(rj_murder_capital
 ,main = "Total de Homicidios no RJ de 1991-2011 (Capital)"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5
)


plot(rj_murder_baixada
 ,main = "Total de Homicidios no RJ de 1991-2011 (Baixada)"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5
)


plot(rj_murder_interior
 ,main = "Total de Homicidios no RJ de 1991-2011 (Interior)"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5
)

 

Homicidios RJ

 

Agora que vimos que as nossas séries estão corretas, vamos criar alguns objetos usando a função auto.arima().

# Fit ARIMA models
fit_rj_murder_total <- auto.arima(rj_murder_total)
fit_rj_murder_capital <- auto.arima(rj_murder_capital) 
fit_rj_murder_baixada <- auto.arima(rj_murder_baixada)
fit_rj_murder_interior <- auto.arima(rj_murder_interior)

Essa função retorna o melhor modelo ARIMA de acordo com os valores de AIC, AICc e BIC.

Mas deixando um pouco a teoria de lado, vamos ver como ficaram os ajustes dos modelos ARIMA de acordo com cada uma das séries.

#Plot ARIMA Models
par(mfrow=c(2,2))
plot(forecast(fit_rj_murder_total,h=12)
 ,main = "Total de Homicidios no RJ de 1991-2011 \n Previsão usando ARIMA"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5)

plot(forecast(fit_rj_murder_capital,h=12)
 ,main = "Total de Homicidios no RJ de 91-2011 (Capital) \n Previsão usando ARIMA"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5)

plot(forecast(fit_rj_murder_baixada,h=12)
 ,main = "Total de Homicidios no RJ de 91-2011 (Baixada) \n Previsão usando ARIMA"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5)

plot(forecast(fit_rj_murder_interior,h=12)
 ,main = "Total de Homicidios no RJ de 91-2011 (Interior) \n Previsão usando ARIMA"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5)

 

ARIMA

 

Um bom resultado, mas agora vamos ver o que conseguimos fazer usando o package forecast default, com o horizonte de previsão de 12 meses:

#Forecasting using confidence intervals in 80%, 95% and 99% with 12 months ahead
ahead_rj_murder_total <- forecast(rj_murder_total, level=c(80, 95, 99), h=12)
ahead_rj_murder_capital <- forecast(rj_murder_capital, level=c(80, 95, 99), h=12)
ahead_rj_murder_interior <- forecast(rj_murder_interior, level=c(80, 95, 99), h=12)
ahead_rj_murder_baixada <- forecast(rj_murder_baixada, level=c(80, 95, 99), h=12)

Modelos ajustados, vamos plotar os resultados:

#Plot forecasting
par(mfrow=c(2,2))
plot(ahead_rj_murder_total
 ,main = "Total de Homicidios no RJ de 91-2011 (Total) \n Previsão usando Forecast package"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5
 ,shadecols="oldstyle")

plot(ahead_rj_murder_capital
 ,main = "Total de Homicidios no RJ de 91-2011 (Capital) \n Previsão usando Forecast package"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5
 ,shadecols="oldstyle")

plot(ahead_rj_murder_baixada
 ,main = "Total de Homicidios no RJ de 91-2011 (Baixada) \n Previsão usando Forecast package"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5
 ,shadecols="oldstyle")

plot(ahead_rj_murder_interior
 ,main = "Total de Homicidios no RJ de 91-2011 (Interior) \n Previsão usando Forecast package"
 ,xlab = "Ano"
 ,ylab = "Qtde Homicidios"
 ,type = "l"
 ,lwd = 2.5
 ,shadecols="oldstyle")

Forecast Package Predictions

Podemos ver que tanto usando o modelo ARIMA quanto com o uso do package forecast vimos que haverá uma queda no número de homicídios. Com isso podem ser elaboradas (usando mais dados) políticas públicas de segurança.

Refs:

[1] – http://www.inside-r.org/packages/cran/forecast/docs/auto.arima

[2] – http://www.ucamcesec.com.br/wordpress/wp-content/uploads/2011/04/RJ_2011_evolucao.xls

[3] – http://www.statmethods.net/advstats/timeseries.html

 

Previsão do número de homicídios no Rio de Janeiro (Sim, eu voltei a postar!!!)

Previsão em séries temporais probabilísticas

Abstract

A large body of the forecasting literature so far has been focused on forecasting the conditional mean of future observations. However, there is an increasing need for generating the entire conditional distribution of future observations in order to effectively quantify the uncertainty in time series data. We present two different methods for probabilistic time series forecasting that allow the inclusion of a possibly large set of exogenous variables. One method is based on forecasting both the conditional mean and variance of the future distribution using a traditional regression approach. The other directly computes multiple quantiles of the future distribution using quantile regression. We propose an implementation for the two methods based on boosted additive models, which enjoy many useful properties including accuracy, flexibility, interpretability and automatic variable selection. We conduct extensive experiments using electricity smart meter data, on both aggregated and disaggregated scales, to compare the two forecasting methods for the challenging problem of forecasting the distribution of future electricity consumption. The empirical results demonstrate that the mean and variance forecasting provides better forecasts for aggregated demand, while the flexibility of the quantile regression approach is more suitable for disaggregated demand. These results are particularly useful since more energy data will become available at the disaggregated level in the future.

Probabilistic time series forecasting with boosted additive models

Previsão em séries temporais probabilísticas

A predição que eu não quero…

Este site trata de questões ligadas diretamente à Data Mining e as demais variantes em relação à análise de dados, aprendizado de máquina, meta-heurísticas, matemática e estatística.

No entanto, um artigo do John Katz do New York Times que fala sobre os modelos de predição para as eleições do senado deste ano é um (mal) exemplo claro de que as atividades de análise de dados nunca podem ser um fim em si mesmas.

Em suma o artigo fala dos problemas dos modelos de predição, e mostra que mais uma vez os modelos erraram em detectar uma onda Republicana.

Até aí nada de mais: Modelos preditivos falhando.

Contudo, depois do excelente  livro do Nate Silver  um efeito nocivo dessa popularização da análise de dados e da mineração de dados é que muitos jornais, revistas, sites começaram a realizar o que eu chamo de análises estéreis no qual essas análises não olham a consequência da decisão, mas sim olham somente os números como se a análise preditiva fosse uma imensa gincana.

Não que eleições dessa natureza venham contribuir em termos de práticos para os pagadores de impostos; porém, para o pagador de impostos melhor do que saber qual indicador preditivo está com melhor desempenho; o certo seria entender como a composição de um senado iria influenciar em questões orçamentarias, fiscais, e principalmente de grandes questões importantes para todos.

A lição que fica é que a análise e a mineração de dados sempre está sujeita a questões ligadas ao suporte à decisão, e não somente a análise per se.

PS: As análises e o código fonte estão neste link.

A predição que eu não quero…

Escolha de Variáveis

Um dos maiores desafios na construção de modelos de classificação e de modelos preditivos é saber escolher as variáveis corretas para inclusão no modelo.

Como foi falado aqui em inúmeras vezes, antes de cometer o erro clássico de escalar hardware e software antes de analisar os dados, mesmo que superficialmente; veja se as variáveis do modelo estão adequadas.

Neste excelente vídeo de um webnar da Salford Systems sobre importância das variáveis usando CART isso é explicado de maneira bem simples.

O Dan Steinberg neste vídeo fala da importância de se saber importância das variáveis no modelo, no qual não somente essas variáveis vão dar o aspecto de compreensão relativa a qual o espectro de dados são pertinentes para as tarefas do algoritmo; como também, entender essa importância pode dar subsídio para outras análises que por ventura venham a eliminar a fragilidade do modelo.

Um dos aspectos levantados foi que antigamente para levantamento da importância dessas variáveis eram usados técnicas de regressão as quais de acordo os respectivos coeficientes regressores  eram utilizados como maneira de ranquear as variáveis.

Contudo, com as técnicas mais modernas de análise de dados, e em especial com novos algoritmos, e a necessidade de modelos que além de terem um alto poder de classificação e predição devem ser compreensíveis, conhecer a importância de cada uma das variáveis ajuda entender o grau de especificidade do modelo.

Em outras palavras, essa atividade auxilia no entendimento do papel – ou força – de cada uma das variáveis no modelo.

Uma heurística interessante que foi explicada no vídeo é conhecida como Leave-One-Variable-Out (LOVO).

A técnica de LOVO consiste em retirar sistematicamente uma variável por vez do modelo, e após isso o modelo preditivo é gerado sem essa variável e de acordo com a variância, isto é, a degradação dos resultados, esse processo auxilia em medir o quanto o modelo perde se aquela variável sair.

Essa heurística é extremamente válida em casos em que se trabalha com heurísticas como Redes Neurais Artificiais, no qual muitas vezes mesmo com alterações em parâmetros de arquitetura (Hidden Layers, Neurônios de Entrada, Neurônios de Saída, Momentum, Taxa de Aprendizado, etc) não há uma visão tão nítida da influência da variável na convergência do modelo.

Escolha de Variáveis

Resenha: Predictive Analytics: The Power to Predict Who Will Click, Buy, Lie, or Die

Uma pequena mea culpa antes da resenha: Tenho lido inúmeros livros de Analytics, Data Mining, e afins no entanto por mera obra de exibicionismo barato acabei postando todos os mini-reviews no meu instagram ao invés de colocar esforço em uma audiência mais apropriada/qualificada que está neste espaço. Sendo assim até o final do mês teremos muitos reviews que estavam represados.

– – –

51xwlO0bTlL

Comprei esse livro para ler de acordo com o a recomendação do KDNuggets que eu postei aqui.

E ao final do livro eu tive uma sensação estranha, mas que eu vou explicar adiante que é não gostei, mas recomendo.

Pode parecer estranho essa ultima frase, mas por incrível que pareça é a mais pura verdade.

O livro é muito bem editorado e tem uma fluência no texto que causa inveja em muitos autores da área, dado que não é um livro estritamente técnico; e tem como principal trunfo consolidar diversas pesquisas e consolidação de diversos cases que saíram ao longo desses últimos dois anos em um material único.

A maior vantagem nesse livro em especial é que o autor tenta colocar um pouco de ordem do que é Análise Preditiva e o que não é, coloca uma coleção de cases que se lidos com atenção, principalmente por diretores/gerentes que estão sentados em uma mina de ouro de dados podem motivar a adoção de programas dessa natureza.

No entanto essa coleção de cases (que para o público com um background mais gerencial pode ser ótimo) é o ponto fraco do livro dentro da perspectiva do Data Miner ou analistas de dados.

Em alguns momentos do livro parece que o autor teve somente o trabalho de copiar o trabalho de alguém e colar no livro como uma maneira de referenciar o trabalho. Contudo, o erro mais grave é o que o autor tenta vender como preditivo na ideia de prever o futuro, mesmo com um disclaimer informando que o autor leu os trabalhos do Nassim Taleb  ele ainda considera a hipótese de previsão, seja lá o que isso signifique em seu plano semântico.

Mesmo assim para quem deseja conhecer como a modelagem preditiva está sim moldando o mundo esse livro é uma boa pedida, mas vamos nas indicações.

É indicado para: Gerentes, Gestores, Diretores, estudantes que não sabem o que é Data Mining, e demais analistas de dados/negócios que desejam saber como a modelagem preditiva vem talhando o mundo e nos influencia na maneira de tomar as nossas decisões (mesmo em um plano de uma pseudo-aleatoriedade)

Não é indicado para: Quem deseja detalhes de implementação dessa modelagem preditiva, cases com detalhes técnicos, quem se interessa por aspectos técnicos, quem acha que Big Data é uma buzz-word de mal gosto, e quem busca um livro técnico.

Resenha: Predictive Analytics: The Power to Predict Who Will Click, Buy, Lie, or Die

Os perigos da segmentação racial na criação de modelos

Essa á uma nota mais pessoal do que um post propriamente dito, então relevem o âmbito personalista do que será escrito abaixo.

No blog Mathbabe,é apontada uma questão interessante sobre a reportagem da Gillian Tett no Financial Times sobre o fato de que a modelagem preditiva realizada pelo departamento de policia de Chicago dos EUA foi construída através de uma base de dados baseada onde as pessoas estiveram presas no passado.

Até aí nada de interessante, como em qualquer modelo de mineração de dados tem-se as etapas de Treinamento – Teste – Validação.

No entanto o problema é ético, o qual o aprendizado indutivo realizado pelos algoritmos levam a seguinte consideração ética:

“Se um modelo de aprendizado de máquina que realiza uma segmentação baseada em atributos raciais, mostra-se muito efetivo na questão de redução da criminalidade (em especial a taxa de homicídios), vale a pena defender este modelo em face dos potenciais benefícios? ”

A resposta é um sonoro NÃO!

Erros do Tipo I (mandar para a cadeia algum inocente) tem um peso muito maior do que um erro Tipo II (deixar a solta um ‘potencial’ homicida).

Mas a resposta da Cathy foi simplesmente sensacional, dado que a autora do post no FT é também é mulher:

“Se nós permitíssemos um modelo que fosse utilizado para admissão na universidade com dados em 1870, nós teríamos ainda 0.7% de mulheres indo para a universidade. Agradeça a Deus que nós não tínhamos um Big Data para isto”

Fica claro que a questão da modelagem preditiva ainda tem algumas ‘questões em aberto’ quando trata-se do assunto ética, no entanto deve-se ter um cuidado se variáveis que qualifiquem os registros (características religiosas e raciais por exemplo) pois esse tipo de incorporação de dados ao modelo podem trazer vieses de análise no minimo ruins.

Os perigos da segmentação racial na criação de modelos

Medindo a Acurácia das Previsões

Neste paper do Rob Hyndman é apresentado algumas formas de medir a acurácia de modelos de predição. Obrigatório para quem trabalha/estuda modelos de classificação e regressão.

Measuring forecast accuracy

Medindo a Acurácia das Previsões

Estratégia para a construção de modelos preditivos

Neste post do Mirko Krivanek é apresentada uma estratégia para a construção de modelos preditivos bem interessante. Leitura obrigatória para quem deseja conhecer um pouco mais sobre modelos orientados a realização de previsões.

Estratégia para a construção de modelos preditivos

6 erros em modelos preditivos

Neste post do Data Science Central postado pela Caitlin Garrett aponta seis erros básicos na modelagem preditiva. Em geral são boas análises baseadas no que é conhecido como “rule of thumb“, algo como melhores práticas.

Em geral modelos preditivos apresentam muitos obstáculos, e minimizar aspectos que possam a vir colocar em risco esses modelos é de fundamental importância para o sucesso desse tipo de modelagem.

6 erros em modelos preditivos

O Paradoxo do Overfitting

No site do Dr. Bruce Ratner ele posta um artigo bem interessante sobre Overfitting.

Para quem já teve oportunidade de trabalhar com modelagem preditiva ou classificatória o Overfitting é quase que uma regra em muitos papers picaretas que saem em algumas revistas (em especial papers que realizam análise preditiva sobre indices de bolsas de valores).

Tratando-se de aprendizado de máquina o Overfitting tem algumas características interessantes como:

  1. Péssima amostragem;
  2. Desconhecimento do Cross-Validation;
  3. Holdout que não representa a variância natural dos dados; e
  4. Analistas querendo fazer Data Snooping.

Simples assim.

Veja abaixo um parágrafo relativo o Overfitting:

My Idiomatic Definition of Overfitting to Help Remember the Concept
A model is built to represent training data, not to reproduce training data. Otherwise, a visitor from validation data will not feel at home. The visitor encounters an uncomfortable fit in the model because s/he probabilistically does not look like a typical data-point from the training data. The misfit visitor takes a poor prediction. The model is overfitted.

O Paradoxo do Overfitting

Previsão de Investimento em Porfólios utilizando Mineração de Dados

Este artigo de Adebimpe, Adedara e Longe pode ser descrito como um apanhado geral de idéias pertinentes a utilização de mineração de dados para administração e construção de portfólios, no qual os autores utilizam a técnica de árvore de decisão no qual fazem a classificação de atributos fundamentalistas para formulação de estratégias de investimento para portfólios financeiros de ativos em bolsa.

O artigo por si só é bem curto, entretanto trás uma bibliografia rica e apresenta uma idéia plausível para quem deseja realizar uma análise inicial sobre ativos em bolsa para formulação de estratégias de investimento de forma organizada e coordenada.

Forecasting Portfolio Investment Using Data Mining

Previsão de Investimento em Porfólios utilizando Mineração de Dados