Prevendo roubos de celulares em São Paulo

Em um mundo cada vez mais conectado, os celulares/smartphones são cada vez mais utilizados. No fim de 2016, 138,3 milhões de brasileiros, ou 77,1% da população com 10 anos ou mais de idade, tinham celular próprio, segundo o IBGE. [1] Com isso, os roubos de celulares também cresceram e tem se tornado uma das atividades criminosas mais comuns nos centros urbanos.

Através dos dados públicos do portal de transparência da Secretária de Segurança Pública do Governo de SP, vamos utilizar a linguagem Python para analisar, encontrar padrões e prever os roubos de celulares na cidade de São Paulo a fim de responder algumas questões:

  • Como os roubos de celular evoluíram em relação ao tempo e como podem evoluir nos próximos anos?
  • Quais são os períodos mais perigosos?
  • Quais são os logradouros, tipos de locais, bairros e regiões com maiores índices de roubos de celular?
  • Quais os veículos mais visados pelos ladrões para roubar um celular de dentro de um veículo?

O diretório da análise com todos os dados e código pode ser acessado aqui.

Mãos à obra:

Importando os pacotes necessários para a análise:

Leitura dos dados

Após baixar todos os dados, podemos realizar a leitura de todos os arquivos de uma só vez e coloca-los em um único dataframe da seguinte forma:

Pré-processamento

Antes de prosseguir para a análise, os dados necessitam de um pré-processamento para limpar os dados, isto é, remover dados duplicados, tratar strings e digitações incorretas, realizar filtragens, converter os dados para outros formatos e criar novas colunas como por exemplo dia, dia da semana e mês.

Análise Exploratória

Uma vez que os dados estão devidamente tratados e padronizados, podemos começar a analisa-los de tantos pontos de vistas quanto quisermos e descobrir relações e informações escondidas no meio das milhares de linhas do dataset.

Vamos começar criando uma série temporal com o número de ocorrências de roubo de celular ao longo do tempo.

Ao olhar para o gráfico, vemos claramente que os roubos de celulares cresceram com o passar do tempo. Entretanto, a série temporal também apresenta oscilações significativas, causadas pelo forte crescimento de roubos durante os anos de 2013, 2015 e 2016, e diminuição durante os anos de 2014 e 2017. Para investigar em mais detalhes essas variações anuais, vamos criar um gráfico apenas das variações anuais e acumuladas.

O gráfico acima revela que houve crescimento nos roubos de celular na maioria dos anos, com exceção dos anos 2015, 2017 e 2018.

Resta a pergunta, o que ocasiona essas oscilações no número de roubos de celulares? Uma pergunta que merece ser estudada e respondida, uma vez que pode conter a chave para o combate deste tipo de crime.

Vamos verificar agora o número de ocorrência por dia da semana:

Podemos ver que nos fins de semana, o número de ocorrências foi menor do que nos dias da semana. Nos fins de semana tem menos pessoas nas ruas e portanto menos roubos? ou os criminosos folgam nos fins de semana?

E quanto ao período, a noite é realmente mais perigosa como se diz?

Quase metade dos roubos ocorreram de madrugada (44.8%), o número menor de pessoas nas ruas e pouca iluminação tornam a madrugada o ambiente perfeito para os criminosos.

Agora vamos visualizar os locais onde ocorrem os roubos de celulares

Aqui foi necessário utilizar escala logarítmica, pois quase que a totalidade das ocorrências se concentraram em apenas dois itens, “Via pública” e “Outros”.

Ainda podemos agrupar as ocorrências por logradouros e bairros, e visualizar os lugares onde você tem as maiores chances de ter o seu celular roubado.

Por fim, vamos ver no mapa onde ocorreram os roubos a partir de outubro de 2018. Duas ótimas formas e complementares de visualizar este tipo de informação são os mapas de calor e os cluster maps, que podemos criar com poucas linhas de código utilizando a biblioteca do python folium.

Prevendo roubos de celulares

Para prever o número de roubos de celular dos próximos meses e anos podemos usar o modelo ARIMA.

O modelo ARIMA

O modelo ARIMA (autoregressivo integrado de médias móveis) é um dos métodos mais utilizados para previsões de séries temporais. O modelo possui três parâmetros (p, d, q) que são responsáveis pela sazonalidade, tendência e ruído.

O modelo ARIMA ainda possui uma variação, o modelo ARIMA sazonal, em que outros parâmetros (P, D, Q)s são adicionados para lidar com os efeitos sazonais da série temporal.

Vamos fazer algumas transformações na série temporal e decompor as suas características:

Uma exigência das analises de séries temporais, incluindo o modelo ARIMA, é que a série temporal seja estacionária, ou seja, não possua tendência. Nossa série temporal aparentemente possui tendência, vamos confirmar essa característica com a ajuda de um plot de correlação ACF.

Analisando o plot de correlação ACF, verificamos que o seu valor decresce lentamente e constantemente, essa característica é típica de uma série temporal não estacionaria. Para transformarmos a série temporal não estacionária em estacionaria, basta diferenciá-la n ordens, até que o resultado seja uma série temporal estacionaria.

A série temporal resultante após a diferenciação de ordem 1 é uma série temporal estacionaria, portanto encontramos o primeiro parâmetro do modelo ARIMA, o parâmetro d = 1.

Além de informar a estacionalidade de uma série temporal, o plot de correlação ACF também pode indicar os melhores valores para o parâmetro q do modelo ARIMA.

No plot acima, os valores 12 e 13 estão fora do nível de significância, portanto um desses valores devem ser escolhidos para o parâmetro q, neste caso vamos escolher o valor q = 13.

Para encontrar o parâmetro p, podemos utilizar o plot de correlação PACF. Porém, outra forma de encontra-lo é através de testes com diferentes valores. Vamos então utilizar este ultimo método, criar o modelo com os melhores parâmetros que serão encontrados e usar a função plot_diagnostics para realizar o diagnóstico do modelo.

Melhores parâmetros: ((3, 1, 13), (3, 1, 0, 12)) AUC: 916.56046

Analisando o diagnóstico do modelo, vemos que a distribuição dos resíduos é próxima a uma distribuição Gaussiana com média 0 e desvio padrão 1. O qq plot também sugere a distribuição normal dos resíduos. Equanto isso, o plot dos resíduos ao longo do tempo em conjunto com o correlograma não apresentam tendencia ou sazonalidade. Desta forma, o modelo não apresenta nenhum comportamento fora do esperado.

Validação

Para validar as previsões do modelo, vamos prever o número de ocorrências a partir de 2017, e comparar com os valores reais.

O Mean Squared Error da previsão foi 260887

O MSE foi de 260887, um valor razoável para uma série temporal com oscilações tão significativas.

Previsão

Enfim, vamos utilizar o modelo para prever o número de ocorrências por mês para os próximos três anos e visualizar o resultado:

A previsão realizada pelo modelo reforça a tendência histórica de crescimento dos roubos de celulares. Entretanto, os intervalos de confiança se elevam rapidamente, indicando que outros fatores podem levar a um rápido aumento ou queda no número dos roubos, como já aconteceu em anos anteriores.

Bibliografia

[1] https://agenciadenoticias.ibge.gov.br/agencia-sala-de-imprensa/2013-agencia-de-noticias/releases/20073-pnad-continua-tic-2016-94-2-das-pessoas-que-utilizaram-a-internet-o-fizeram-para-trocar-mensagens
[2] https://www.digitalocean.com/community/tutorials/a-guide-to-time-series-forecasting-with-arima-in-python-3