Strata Singapore 2016 – Machine learning in practice with Spark MLlib: An intelligent data analyzer

Pessoal,

No próximo dia 8 o meu amigo Eiti Kimura e eu faremos uma apresentação no Strata Hadoop World em Singapura para falarmos de uma solução que fizemos na Movile de monitoramento usando Machine Learning.

Já tivemos a oportunidade de falar um pouco (de maneira bem breve é verdade) no TDC 2016 aqui em São Paulo, mas agora iremos falar em um evento que pode ser considerado o mais importante de Big Data, Analytics e Machine Learning do mundo.

screen-shot-2016-11-30-at-8-55-12-pm

Falaremos um pouco do nosso case que basicamente é um problema de previsão de série temporal, em que tínhamos MUITOS alarmes que não funcionavam da maneira adequada e mais: como a nossa plataforma de tarifação funciona 24 x 7, a cada minuto que ela fica parada estamos perdendo muito dinheiro.

E a nossa solução que foi batizada de Watcher-AI usa basicamente o Spark MLLib e é acoplada na nossa plataforma de billing; e em qualquer sinal de instabilidade faz notificação para todo o time para solucionar o problema o mais rápido possível.

Ao longo dos dias vamos falar um pouco da conferência, sobre as novidades em relação à Machine Learning, Big Data, e algumas reflexões sobre Data Science e Machine Learning.

Não percam os próximos dias.

 

 

 

 

Strata Singapore 2016 – Machine learning in practice with Spark MLlib: An intelligent data analyzer

Movendo modelos de Machine Learning para produção

Isso ainda vai virar um post extenso aqui no blog, mas vamos com esse belo post do Ram Balakrishnan.

After building, training and deploying your models to production, the task is still not complete unless you have monitoring systems in place. A crucial component to ensuring the success of your models is being able to measure and quantify their performance. A number of questions are worth answering in this area.

Movendo modelos de Machine Learning para produção

Quando haverá a chegada do próximo inverno em Inteligência Artificial?

Direto do Inference

Não é preciso pesquisar muito pra saber que Data Mining, Machine Learning e Inteligência Artificial está na crista da onda, seja em termos de investimentos ou mesmo de utilização pela indústria.

Contudo, para quem não sabe há um termo chamado AI Winter (ou inverno da Inteligência Artificial) que é utilizado quando há um período de desilusão em relação a tudo o que é prometido dentro de uma onda de hype em IA.

Esse artigo fala de que mesmo com todas as evoluções em deep/machine learning ainda há tarefas que possivelmente ficarão com os seres humanos.

Será que estamos chegando em um inverno em machine/deep learning?

At the end of this machine/deep learning hype cycle, either of two scenarios could occur:

  1. winter scenario: we have exploited current state of AI/ML to its limits, and discovered the boundaries of tasks we can easily and feasibly solve with this new technology, and we agree that human-level general intelligence is not within those boundaries. As a result, we have characterised what makes humans intelligent a bit better, developed very powerful and valuable technologies along the way, Nature has published a couple more of DeepMind’s papers, but research-wise an AI winter is likely to set in. AI will no doubt continue to be useful for industry, but some of the research community will scale back and search for the next breakthrough idea or component.
  2. holy shit scenario: (also known as Eureka moment) We really do solve AI in a way that is clearly and generally recognised as artificial intelligence, and some form of singularity happens. Intelligence is a case of ‘I recognise it when I see it’, but it’s hard to predict what shape it will take.

 

Quando haverá a chegada do próximo inverno em Inteligência Artificial?

Como não rodar um teste A/B

Esse artigo da Evan Miller é quase um clássico sobre esse assunto.

When an A/B testing dashboard says there is a “95% chance of beating original” or “90% probability of statistical significance,” it’s asking the following question: Assuming there is no underlying difference between A and B, how often will we see a difference like we do in the data just by chance? The answer to that question is called the significance level, and “statistically significant results” mean that the significance level is low, e.g. 5% or 1%. Dashboards usually take the complement of this (e.g. 95% or 99%) and report it as a “chance of beating the original” or something like that.

However, the significance calculation makes a critical assumption that you have probably violated without even realizing it: that the sample size was fixed in advance. If instead of deciding ahead of time, “this experiment will collect exactly 1,000 observations,” you say, “we’ll run it until we see a significant difference,” all the reported significance levels become meaningless. This result is completely counterintuitive and all the A/B testing packages out there ignore it, but I’ll try to explain the source of the problem with a simple example.

Como não rodar um teste A/B

Qual a diferença entre o Gradiente Descendente e o Gradiente Descendente Estocástico?

Aqui no Quora a resposta mais simples elaborada na história do mundo:

In both gradient descent (GD) and stochastic gradient descent (SGD), you update a set of parameters in an iterative manner to minimize an error function.

While in GD, you have to run through ALL the samples in your training set to do a single update for a parameter in a particular iteration, in SGD, on the other hand, you use ONLY ONE training sample from your training set to do the update for a parameter in a particular iteration.

Thus, if the number of training samples are large, in fact very large, then using gradient descent may take too long because in every iteration when you are updating the values of the parameters, you are running through the complete training set. On the other hand, using SGD will be faster because you use only one training sample and it starts improving itself right away from the first sample.

SGD often converges much faster compared to GD but the error function is not as well minimized as in the case of GD. Often in most cases, the close approximation that you get in SGD for the parameter values are enough because they reach the optimal values and keep oscillating there.

Qual a diferença entre o Gradiente Descendente e o Gradiente Descendente Estocástico?

Conselhos práticos para análise de dados

Direto do Blog não oficial da Google.

Nesse post do Patrick Riley há uma ótima descrição de uma heurística de como realizar análise de dados de uma maneira um pouco mais sistematizada.

Technical: Ideas and techniques for how to manipulate and examine your data.
Process: Recommendations on how you approach your data, what questions to ask, and what things to check.
Social: How to work with others and communicate about your data and insights.

Em relação aos desdobramentos dessa heurística ele apresenta os seguintes pontos:

Technical
– Look at your distributions
– Consider the outliers
– Report noise/confidence
– Look at examples
– Slice your data
– Consider practical significance
– Check for consistency over time

Process
– Separate Validation, Description, and Evaluation
– Confirm expt/data collection setup
– Check vital signs
– Standard first, custom second
– Measure twice, or more
– Check for reproducibility
– Check for consistency with past measurements
– Make hypotheses and look for evidence
– Exploratory analysis benefits from end to end iteration

Social
– Data analysis starts with questions, not data or a technique
– Acknowledge and count your filtering
– Ratios should have clear numerator and denominators
– Educate your consumers
– Be both skeptic and champion
– Share with peers first, external consumers second
– Expect and accept ignorance and mistakes
– Closing thoughts

Conselhos práticos para análise de dados

Enciclopédia das Distâncias (Michel Deza & Elena Deza)

Para quem está interessado em conhecer mais sobre as distâncias matemáticas (ex: Encludiana, Mahalanobis, ou a Minkowski) esse livro é essencial.

É um compêndio de inúmeras distâncias matemáticas, e além disso contém inúmeras informações de quais distâncias devem ser usadas de acordo com inúmeros contextos.

Enciclopédia das Distâncias (Michel Deza & Elena Deza)

Introdução sobre Análise de Cluster

Por mais que a análise exploratória de dados ocupe um espaço muito grande em relação em problemas de ciência de dados, os métodos de aprendizado não-supervisionados ainda tem o seu valor, mesmo que nas comunidades científicas e profissionais pouco se fala sobre esse tema com a mesma recorrência dos métodos preditivos.

Uma das técnicas mais subestimadas em machine learning é a técnica de clustering (ou análise de agrupamento).

Esse post do Kunal Jain trás um dos melhores reviews sobre análise de cluster e as suas peculiaridades.

Connectivity models: As the name suggests, these models are based on the notion that the data points closer in data space exhibit more similarity to each other than the data points lying farther away. These models can follow two approaches. In the first approach, they start with classifying all data points into separate clusters & then aggregating them as the distance decreases. In the second approach, all data points are classified as a single cluster and then partitioned as the distance increases. Also, the choice of distance function is subjective. These models are very easy to interpret but lacks scalability for handling big datasets. Examples of these models are hierarchical clustering algorithm and its variants.
Centroid models: These are iterative clustering algorithms in which the notion of similarity is derived by the closeness of a data point to the centroid of the clusters. K-Means clustering algorithm is a popular algorithm that falls into this category. In these models, the no. of clusters required at the end have to be mentioned beforehand, which makes it important to have prior knowledge of the dataset. These models run iteratively to find the local optima.
Distribution models: These clustering models are based on the notion of how probable is it that all data points in the cluster belong to the same distribution (For example: Normal, Gaussian). These models often suffer from overfitting. A popular example of these models is Expectation-maximization algorithm which uses multivariate normal distributions.
Density Models: These models search the data space for areas of varied density of data points in the data space. It isolates various different density regions and assign the data points within these regions in the same cluster. Popular examples of density models are DBSCAN and OPTICS.

Introdução sobre Análise de Cluster

Panorama Competitivo em Machine Learning

Para quem desejar saber como está a indústria de Machine Learning e suas sub-divisões, esse artigo da Harvard Business Review apresenta um ótimo diagrama que pode ser baixado no link a seguir: the_state_of_machine_intelligence.

Panorama Competitivo em Machine Learning

Previsão de Séries Temporais usando XGBoost – Pacote forecastxgb

Para quem já teve a oportunidade de trabalhar com previsão de variáveis categóricas em Machine Learning sabe que o XGBoost é um dos melhores pacotes do mercado, sendo largamente utilizado em inúmeras competições no Kaggle.

A grande diferença feita pelo Peter Ellis foi realizar algumas adaptações para incorporar algumas variáveis independentes através do parâmetro xreg ao modelo preditivo de séries temporais.

Para quem trabalha com análise de séries temporais, esse trabalho é muito importante até porque o forecastxgb  tríade Média-Móvel/ARIMA (ARMA)/(S)ARIMA em que tanto estatísticos/Data Miners/Data Scientists ficam presos por comodidade ou falta de meios.

Um exemplo da utilização do pacote está abaixo:

# Install devtools to install packages that aren't in CRAN
install.packages("devtools")

# Installing package from github 
devtools::install_github("ellisp/forecastxgb-r-package/pkg") 

# Load the libary
library(forecastxgb)

# Time Series Example
gas

# Model
model <- xgbts(gas)

# Summary of the model
summary(model)

# Forecasting 12 periods 
fc <- forecast(model, h = 12)

# Plot
plot(fc)
Previsão de Séries Temporais usando XGBoost – Pacote forecastxgb

Stealing Machine Learning Models via Prediction APIs

Via Cornell University

Machine learning (ML) models may be deemed confidential due to their sensitive training data, commercial value, or use in security applications. Increasingly often, confidential ML models are being deployed with publicly accessible query interfaces. ML-as-a-service (“predictive analytics”) systems are an example: Some allow users to train models on potentially sensitive data and charge others for access on a pay-per-query basis.
The tension between model confidentiality and public access motivates our investigation of model extraction attacks. In such attacks, an adversary with black-box access, but no prior knowledge of an ML model’s parameters or training data, aims to duplicate the functionality of (i.e., “steal”) the model. Unlike in classical learning theory settings, ML-as-a-service offerings may accept partial feature vectors as inputs and include confidence values with predictions. Given these practices, we show simple, efficient attacks that extract target ML models with near-perfect fidelity for popular model classes including logistic regression, neural networks, and decision trees. We demonstrate these attacks against the online services of BigML and Amazon Machine Learning. We further show that the natural countermeasure of omitting confidence values from model outputs still admits potentially harmful model extraction attacks. Our results highlight the need for careful ML model deployment and new model extraction countermeasures.

 

Stealing Machine Learning Models via Prediction APIs

Rexer Analytics Data Science Survey

Some interesting highlights.

• SURVEY & PARTICIPANTS: 59-item online survey conducted in 2015. Participants: 1,220 analytic professionals from 72 countries. This is the 7th survey in this ongoing research program.

• CORE ALGORITHM TRIAD: Regression, Decision Trees, and Cluster analysis remain the most commonly used algorithms in the field.

• THE ASCENDANCE OF R: 76% of respondents report using R. This is up dramatically from just 23% in 2007. More than a third of respondents (36%) identify R as their primary tool.

• JOB SATISFACTION: Job satisfaction in the field remains high, but has slipped since the 2013 survey. A number of factors predict Data Scientist job satisfaction levels.

• DEPLOYMENT: Deployment continues to be a challenge for organizations, with less than two thirds of respondents indicating that their models are deployed most or all of the time. Getting organizational buy-in is the largest barrier to deployment, with real-time scoring and other technology issues also causing significant deployment problems.

• TERMINOLOGY: The term “Data Scientist” has surged in popularity with over 30% of us describing ourselves as data scientists now compared to only 17% in 2013.

rexer-analytics-white-paper-9-21-16

Rexer Analytics Data Science Survey

Regras de Associação no Combate ao Crime no Brasil – Por Flávio Clesio

Não é segredo que vivemos em um país que está lamentavelmente listado como um dos mais violentos do mundo, em que temos 21 cidades entre as 50 mais violentas do mundo.

Se levarmos em consideração que em alguns estados do Brasil a taxa de esclarecimento de homicídios é de menos de 15%, temos um problema grave na segurança pública de maneira geral.

Mas se o crime por si só é a externalidade/consequência de diversos fatores como aspectos socioeconômicos, educacionais, e de ambiente (para citar alguns); o policiamento preventivo, isto é, o ataque direto das causas deve ser o norte de qualquer política de segurança pública; e é sobre isso que se trata esse post.

Através de uma base de dados sintética (extremamente desbalanceada) de dados que poderiam se extraídos de qualquer distrito policial ou mesmo de algum departamento de segurança pública vamos fazer a aplicação de uma técnica de Machine Learning chamada Association Rules ou Regras de Associação para formulação de políticas de segurança pública.

Como vamos iniciar a nossa análise sem nenhum tipo de hipótese e o objetivo é ver o conhecimento intrínseco da base de dados, vamos fazer um aprendizado não-supervisionado.

Contexto colocado, vamos para o R Studio.

Antes de mais nada, vamos limpar o nosso console e na sequência importar a biblioteca _arules_ no R.

# Clear the console
cat("\014") 

# Load arules library
library(arules)

Com a nossa lib importada, vamos realizar carregar a nossa base de dados no R.

# Load Dataset - This is a synthetic dataset, some inconsistencies can be found... as in the real world!😉
crimes <- read.csv("https://raw.githubusercontent.com/fclesio/learning-space/master/Datasets/01%20-%20Association%20Rules/Crimes.csv")

Com a nossa base de dados importada, vamos agora ver as colunas da base de dados:

# See variables types
str(crimes)

Temos uma base de dados com 780 crimes com 16 variáveis que são:

  • Crime_id: Número da ocorrência.
  • Zona: Zona da cidade que a ocorrência foi registrada.
  • Periculosidade: Nível de periculosidade da área de acordo com mapeamentos anteriores.
  • Viaturas_Apoio_Forca_Tatica: Indica se tem reforços da Força Tática disponíveis na região. A grosso modo, Força Tática é um destacamento que ‘flutua’ na circulação e tem como objetivo atender a ocorrência mais próxima que a primeira força de atendimento não conseguir solucionar.
  • Patrulhamento: Indica se há patrulhamento pelas viaturas do batalhão mais próximo.
  • Policiamento_Ostensivo: Informa se há operações acontecendo com mais frequência. Um maior nível de policiamento aumenta também o enfrentamento policial, o que pode acarretar em mais óbitos de ambas as partes.
  • Apoio_GCM: Esse campo indica se a Guarda Civil Metropolitana circula na área da ocorrência. Diferente da PM ou da Civil; a GCM apesar das mesmas prerrogativas policiais tem uma função mais voltada à segurança patrimonial de alguns pontos da cidade e escolas.
  • Arma_Fogo: Houve arma de fogo na ocorrência.
  • Qtde_Vitimas: Número de vitimas da ocorrência.
  • Possui_DP: Tem Distrito Policial nas redondezas.
  • Tipo_Policiamento: O tipo de policiamento local influencia também na prática de crimes, em que áreas menos assistidas pelos batalhões podem ter um maior índice de violência em relação à áreas que não tem esse tipo de atendimento com um maior volume de viaturas e policiais.
  • Area_Residencial: Indica se é área residencial ou não.
  • Ocorrencia_Atendida_15_Minutos: Sabe-se que quanto mais demorado for o atendimento da ocorrência, as chances de resolução do evento criminoso em questão converge para a não solução efetiva. Esse campo indica se a ocorrência foi prontamente atendida.
  • Pericia: Informa se houve a perícia para auxiliar nas investigações.
  • Possui_UPP: Mostra se tem Unidade de Polícia Pacificadora instalada nas redondezas do evento criminoso
  • Iluminacao: Informa se o local do crime tinha iluminação ou não.

Com um pouco mais de trabalho na parte de data wrangling é possível criar mais algumas variáveis, mas como o foco aqui será de fazer uma primeira análise básica vamos seguir com algumas estatísticas básicas em relação a cada uma das variáveis da base de dados.

# See basic stats
summary(crimes)

Uma olhada rápida no sumário podemos tirar as seguintes informações:

  • Em relação ao tipo de policiamento vemos que temos um patrulhamento feito por diversos batalhões na metade dos casos, o que indica que há uma dispersão de batalhões (i.e. nenhum batalhão cuida específicamente de uma área) nessas áreas mais críticas;
  • 69% das localidades tem algum tipo de Distrito Policial nas redondezas do evento criminoso;
  • Apenas 1% dos locais não tem nenhum tipo de viatura da Força Tática;
  • Quase 70% das ocorrências acontecem com 3 ou mais pessoas. Isso nos faz a crer que pode ter dois tipos de vieses que são a) os crimes coletivos (e.g. arrastões, chacinas, etc.) são os mais reportados ou estão acontecendo de fato, ou b) os crimes menores como roubo de celular não estão sendo notificados;
  • Mais de metade das áreas dos eventos aconteceram em áreas consideradas com o nível de periculosidade altíssimo;
  • Pelos dados a Zona Sul está em chamas;
  • Com 88% dos locais com iluminação, pode ser que essa variável não seja mais a responsável pela inibição dos eventos criminosos;
  • Com apenas 49% dos casos periciados, as atividades de investigação podem em algum momento ter problemas de robustez de provas; e
  • Sendo o índice de patrulhamento em 90% e o policiamento ostensivo 83% nas regiões criminosas há indícios de que os criminosos estão indiferentes à presença policial.

São insights interessantes que nos auxiliam em algumas hipóteses como as levantadas. Neste ponto a análise descritiva básica pode ajudar e muito no início de uma política de segurança efetiva, e não pode ser descartada em nenhum momento. No nosso caso vamos avançar para a parte aplicada de machine learning que é o foco desse post.

Vamos criar um objeto utilizando o algoritmo a priori escolhendo um suporte de 55% (isso é, os conjuntos de itens estarão no mínimo em 55% de todas as transações) e com a confiança de 80% (isso é, a grosso modo é como dizer que há a probabilidade de 80% das transações encontradas serão derivadas dos itens contidos na base do suporte).

Não há uma regra única em relação à utilização do suporte e confiança, mas trazendo aqui uma heurística que eu sempre uso é que se o problema tem um volume de transações muito grande, o suporte será a métrica que vai dar mais robustez para descartar muitas regras redundantes, já se o problema tem uma caracterização com um menor volume de instâncias e se há uma necessidade de entrar mais no detalhe das regras e elas precisam de um grau de assertividade naturalmente maior (e.g. uma campanha de cartas em que há um custo operacional envolvido) aí utiliza-se a confiança. Mas lembrando, tudo isso depende do problema em questão.

Nesse caso, como os recursos a serem empregados são caros e escassos (viaturas e pessoal militar), então partiremos para uma confiança de 80%.

# The most important thing it's get a good support and a great confidence (This is a wishful thinking, in real world EVERYTHING can be happen!)
# The main task here is get a set a most meaningful way, so, shity rules will be discarted.
crimes_rulez <- apriori(crimes, parameter = list(minlen=4,maxlen=10, supp=0.55, conf=0.80))

Com o objeto criado, vamos agora reduzir para duas casas decimais as métricas de avaliação dessas regras para fins de simplicidade.

# Reduce the number of digits in measures of quality of the model
quality(crimes_rulez) <- round(quality(crimes_rulez), digits=2)

Apenas para fins de visualização, vamos criar alguns objetos de regras ordenando pela confiança e suporte para que possamos identificar de maneira mais efetiva as regras mais interessantes e acionáveis.

# Sort by Confidence and Support and Lift
model_srt_confidence <- sort(crimes_rulez, by="confidence")

model_srt_support <- sort(crimes_rulez, by="support")

Vamos agora inspecionar as nossas regras, de acordo com a confiança e o suporte:

# Check models (#66 rules)
inspect(model_srt_confidence)

inspect(model_srt_support)

Com esse comando acima, temos algumas regras:

      
   lhs                                     rhs                                  support confidence lift

1  {Apoio_GCM=Nao,                                                                                     
    Area_Residencial=Sim,                                                                              
    Iluminacao=Sim}                     => {Patrulhamento=Sim}                     0.57       0.98 1.09

63 {Area_Residencial=Sim,                                                                              
    Ocorrencia_Atendida_15_Minutos=Sim,                                                                
    Iluminacao=Sim}                     => {Zona=Zona_Sul}                         0.55       0.82 0.96

49 {Patrulhamento=Sim,                                                                                 
    Area_Residencial=Sim,                                                                              
    Ocorrencia_Atendida_15_Minutos=Sim,                                                                
    Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}            0.58       0.89 1.08
  • A regra 1 indica que o patrulhamento está funcionando nos locais em que a PM não tem o apoio da GCM em áreas iluminadas de bairros residenciais;
  • A regra de número 63 mostra um primeiro padrão em relação a Zona Sul, em que com 82% de confiança essas ocorrências estão ligadas a lugares com malha residencial, iluminadas e a ocorrência foi feita dentro dos primeiros 15 minutos;
  • Já a regra 49 que o policiamento ostensivo está ocorrendo com 89% de confiança em áreas já patrulhadas em uma malha residencial iluminada em que o evento foi atendido em 15 minutos ou menos.

Com essas poucas regras acima podemos observar que o trabalho de primeiro atendimento está sendo feito dado que grande parte dessas ocorrências (dado o nível de suporte e confiança) estão sendo atendidas em um tempo de 15 minutos.

Outro ponto a ser considerado é que nas áreas residenciais estão ocorrendo muitos eventos criminosos. Isso pode ser um indicativo de que nas áreas de comércio e indústrias podem estar com baixa atratividade criminosa ou mesmo o policiamento nessas áreas está mais efetivo.  Uma estratégia aqui seria ver esses dois aspectos, e caso a segunda hipótese estiver correta replicar as ações de combate ao crime.

Já a Zona Sul que concentra grande parte das ocorrências, parece estar em chamas mesmo com um alto nível de patrulhamento, iluminação e policiamento ostensivo. Neste caso há a hipótese de que são o maior patrulhamento e um policiamento mais ostensivo além de ter uma ação mais rápida – que converge como o fato do atendimento de ocorrências demorar menos de 15 minutos –  ela tem o poder de jogar luz em uma demanda reprimida de registros policiais (i.e. crimes que não seriam registrados por ausência do poder público, ou mesmo por descaso do estado nunca entrariam nas estatísticas oficiais).

Em um segundo caso pode ser mesmo que uma facção criminosa esteja disputando controle direto com a polícia através de confrontos armados, ou mesmo atentados e roubos em áreas que são vigiadas pela polícia; o que sugere uma estratégia de inteligência para desarticular de dentro para fora milícias, grupos criminosos ou quadrilhas free lance que estejam levando terror a essas áreas.

Como são muitas regras e o objetivo é encontrar o máximo de regras específicas, vamos minerar algumas dessas regras usando campos específicos. Sendo assim vamos explorar um pouco mais das ocorrências que apresentaram as características de terem ocorrido na Zona Sul, em lugares iluminados, casos que as ocorrências foram atendidas em menos de 15 minutos ou que tiveram policiamento ostensivo.

# See specific rules of zones (I already mined some rules, but feel free to discover)
Zona_Sul <- subset(crimes_rulez, subset = rhs %pin% "Zona=Zona_Sul")

Iluminacao_Sim <- subset(crimes_rulez, subset = rhs %pin% "Iluminacao=Sim")

Ocorrencia_Atendida_15_Minutos_Sim <- subset(crimes_rulez, subset = rhs %pin% "Ocorrencia_Atendida_15_Minutos=Sim")

Policiamento_Ostensivo <- subset(crimes_rulez, subset = rhs %pin% "Policiamento_Ostensivo=Sim")

Esses objetos criados, tem somente as regras em que o RHS (right-hand-side) foram esses campos descritos no parágrafo anterior.

Vamos inspecionar esses objetos.

# Specific Rules
inspect(Zona_Sul)

inspect(Iluminacao_Sim)

inspect(Ocorrencia_Atendida_15_Minutos_Sim)

inspect(Policiamento_Ostensivo)

Seguindo a mesma lógica da análise acima, podemos ter os seguintes conjuntos de regras específicas:

Zona_Sul
8  {Patrulhamento=Sim,                                                            
    Policiamento_Ostensivo=Sim,                                                   
    Iluminacao=Sim}                     => {Zona=Zona_Sul}    0.66       0.88 1.03

9  {Patrulhamento=Sim,                                                            
    Area_Residencial=Sim,                                                         
    Iluminacao=Sim}                     => {Zona=Zona_Sul}    0.66       0.85 0.99


Iluminacao_Sim
   lhs                                     rhs              support confidence lift
12 {Patrulhamento=Sim,                                                             
    Policiamento_Ostensivo=Sim,                                                    
    Area_Residencial=Sim,                                                          
    Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}    0.58       0.96 1.09

13 {Zona=Zona_Sul,                                                                 
    Patrulhamento=Sim,                                                             
    Policiamento_Ostensivo=Sim,                                                    
    Area_Residencial=Sim}               => {Iluminacao=Sim}    0.61       0.95 1.08    


Ocorrencia_Atendida_15_Minutos_Sim
  lhs                             rhs                                  support confidence lift
5 {Zona=Zona_Sul,                                                                             
   Area_Residencial=Sim,                                                                      
   Iluminacao=Sim}             => {Ocorrencia_Atendida_15_Minutos=Sim}    0.55       0.81 1.08

7 {Patrulhamento=Sim,                                                                         
   Policiamento_Ostensivo=Sim,                                                                
   Area_Residencial=Sim,                                                                      
   Iluminacao=Sim}             => {Ocorrencia_Atendida_15_Minutos=Sim}    0.58       0.83 1.11


Policiamento_Ostensivo
   lhs                                     rhs                          support confidence lift
10 {Patrulhamento=Sim,                                                                         
    Area_Residencial=Sim,                                                                      
    Ocorrencia_Atendida_15_Minutos=Sim,                                                        
    Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}    0.58       0.89 1.08

11 {Zona=Zona_Sul,                                                                             
    Patrulhamento=Sim,                                                                         
    Area_Residencial=Sim,                                                                      
    Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}    0.61       0.93 1.12       

No caso dessas regras, tudo indica que mesmo com as ocorrências sendo atendidas em menos de 15 minutos em áreas residenciais iluminadas, a Zona Sul está com um problema grave de segurança.

A estratégia nesse caso seria investir de forma intensa em atividades de inteligência, dado que pelo que vimos pelos dados há uma situação de combate intenso com policia na rua e crimes acontecendo mesmo em situações em que os bandidos supostamente estariam intimidados.

Conclusão
Usando uma base sintética, vimos que é possível com algumas linhas de código e estatística descritiva básica ter insights sobre uma base de dados mesmo sem um conhecimento prévio.

No caso da nossa análise, vimos que pode haver uma situação de confronto clara em áreas residenciais mesmo com patrulhamento da polícia e policiamento ostensivo acontecendo.

Isso leva a crer que esses crimes estejam sendo reportados pelos aspectos acima, ou mesmo por uma maior disposição dos criminosos em agir em áreas controladas pela polícia. Isso pode indicar que o trabalho da polícia nesse caso não está sendo eficiente, e que uma estratégia de investigação através de atividades de inteligência devem ser colocadas em campo.

Regras de Associação no Combate ao Crime no Brasil – Por Flávio Clesio

A (very) provocative essay about systematic reviews

Via O’Reilly Ideas

Systematic reviews still the best method to validate (with some degree of certainty) any theory, but this is not a silver bullet.

Context: Currently, most systematic reviews and meta-analyses are done retrospectively with fragmented published information. This article aims to explore the growth of published systematic reviews and meta-analyses and to estimate how often they are redundant, misleading, or serving conflicted interests.

Methods: Data included information from PubMed surveys and from empirical evaluations of meta-analyses.

Findings: Publication of systematic reviews and meta-analyses has increased rapidly. In the period January 1, 1986, to December 4, 2015, PubMed tags 266,782 items as “systematic reviews” and 58,611 as “meta-analyses.” Annual publications between 1991 and 2014 increased 2,728% for systematic reviews and 2,635% for meta-analyses versus only 153% for all PubMed-indexed items. Currently, probably more systematic reviews of trials than new randomized trials are published annually. Most topics addressed by meta-analyses of randomized trials have overlapping, redundant meta-analyses; same topic meta-analyses may exceed 20 sometimes. Some fields produce massive numbers of meta-analyses; for example, 185 meta-analyses of antidepressants for depression were published between 2007 and 2014. These meta-analyses are often produced either by industry employees or by authors with industry ties and results are aligned with sponsor interests. China has rapidly become the most prolific producer of English-language, PubMed-indexed meta-analyses. The most massive presence of Chinese meta-analyses is on genetic associations (63% of global production in 2014), where almost all results are misleading since they combine fragmented information from mostly abandoned era of candidate genes. Furthermore, many contracting companies working on evidence synthesis receive industry contracts to produce meta-analyses, many of which probably remain unpublished. Many other meta-analyses have serious flaws. Of the remaining, most have weak or insufficient evidence to inform decision making. Few systematic reviews and meta-analyses are both non-misleading and useful.

Conclusions: The production of systematic reviews and meta-analyses has reached epidemic proportions. Possibly, the large majority of produced systematic reviews and meta-analyses are unnecessary, misleading, and/or conflicted.

 

A (very) provocative essay about systematic reviews

Ten Myths About Machine Learning

A killer post of Pedro Domingos about the common myths in Machine Learning.

Learning algorithms just discover correlations between pairs of events. This is the impression you get from most mentions of machine learning in the media. In one famous example, an increase in Google searches for “flu” is an early sign that it’s spreading. That’s all well and good, but most learning algorithms discover much richer forms of knowledge, such as the rule If a mole has irregular shape and color and is growing, then it may be skin cancer.

Ten Myths About Machine Learning