A atividade final da disciplina de Introdução à Inteligência Artificial. O grupo é composto por Luan Motta, Samuel Almeida e Emmanuel Aprígio, e optamos pelo tema Previsão de Risco de Criminalidade, que envolve a predição de criminalidade em diversas cidades do estado do Rio Grande do Sul.
O dataset utilizado, ou melhor dizendo, os datasets utilizados foram instalados através do site da Secretaria de Segurança - RS (https://ssp.rs.gov.br/dados-abertos), que disponibiliza o acesso livre aos dados de criminalidade como forma de transparência.
Portanto, as bases de dados usadas foram dos anos de 2024 e 2025. O ano de 2026 não foi utilizado devido à incompletude dos dados (Afinal, o ano ainda não acabou).
O projeto traz como requisições o uso de Técnicas de IA, de ramos diferentes dessa esfera do conhecimento.
- K-Means (Não-Supervisionado)
- Rede Neural (Supervisionado)
- Algoritmo Genético
Instale as bases de dados dos anos de 2023, 2024 e 2025 no site referido na seção [Banco de Dados]. Depois disso, crie
um diretório chamado data na raíz do projeto. Dentro dessa pasta, crie um diretório chamado bulk, e coloque os arquivos
extraídos como seg_{ano}.csv. Depois disso, execute src/clean_csv.py e main.py logo em seguida!
.
├── main.py # Ponto de entrada: orquestra o pipeline completo (init → kmeans → nn)
├── requirements.txt # Dependências do projeto com versões mínimas
├── README.md # Este arquivo
├── proj_final.pdf # Enunciado do trabalho final da disciplina
│
├── data/
│ ├── bulk/ # CSVs brutos originais (seg_2023.csv, seg_2024.csv, seg_2025.csv)
│ ├── clean/ # CSVs limpos após processamento (uma linha por vítima)
│ └── rs_shapefile/ # Shapefile dos municípios do RS para geração de mapas geográficos
│ ├── RS_Municipios_2022.shp
│ ├── RS_Municipios_2022.dbf
│ ├── RS_Municipios_2022.shx
│ ├── RS_Municipios_2022.prj
│ └── RS_Municipios_2022.cpg
│
├── src/
│ ├── init.py # Carrega CSVs, agrega por cidade/mês e gera features temporais e de lag
│ ├── clean_csv.py # Converte CSVs brutos: expande cada ocorrência em uma linha por vítima
│ ├── kmeans.py # K-Means para clusterização de municípios por perfil de criminalidade
│ ├── nn.py # Rede neural (MLP) para classificação de risco + integração com GA
│ ├── ga.py # Algoritmo genético para otimização de thresholds de classificação
│ └── eda.py # Análise exploratória: gráficos temporais, geográficos e feature importance
│
├── utils/
│ ├── embellish.py # Utilitários de formatação ANSI (cores, estilos) para output no terminal
│ └── fitness_bar.py # Barra de progresso customizada para acompanhar a evolução do GA
│
└── outputs/ # Resultados gerados pelo pipeline
├── agg_dataset.csv # Dataset agregado (cidade/mês) com todas as features
├── nn_predictions.csv # Previsões da rede neural (classes real, prevista, probabilidades)
├── kmeans_clusters.csv # Atribuição de cluster por município
├── kmeans_stats.csv # Estatísticas descritivas de cada cluster
├── eda_feature_importance.csv # Importância das features (Random Forest + Permutation)
├── cm_predict.png # Matriz de confusão da rede neural (predict padrão)
├── cm_ga.png # Matriz de confusão após otimização pelo GA
├── roc_curves.png # Curvas ROC one-vs-rest para cada classe de risco
├── kmeans_pca.png # Visualização PCA 2D dos clusters de municípios
├── eda_temporal.png # Análise temporal: ocorrências por mês, violin plot, média móvel, crescimento
├── eda_geographic.png # Análise geográfica: mapa do RS, distribuição, scatter, top cidades
├── eda_feature_importance.png # Gráfico de importância das features (RF + Permutation)
├── eda_real_vs_previsto.png # Comparação de ocorrências reais vs previstas em 2025
└── eda_barra_previsto_real.png # Barras: distribuição de classes reais vs previstas por mês
| Biblioteca | Versão mínima | Por quê é utilizada |
|---|---|---|
pandas |
2.0 | Leitura, manipulação e agregação dos DataFrames de criminalidade (CSV → features) |
numpy |
1.24 | Operações numéricas (normalização, seno/cosseno para sazonalidade, digitize para classes) |
matplotlib |
3.7 | Geração de todos os gráficos: matrizes de confusão, ROC, PCA, mapas, barras, temporais |
scikit-learn |
1.3 | K-Means, MLPClassifier, StandardScaler, RandomForest, métricas (F1, silhouette, ROC/AUC) |
geopandas |
0.14 | Leitura do shapefile dos municípios do RS e plotagem do mapa geográfico na EDA |
shapely |
2.0 | Manipulação de geometrias (centróides) para anotação de cidades no mapa do RS |
Mapa, gráfico mostrando perfis de cidades, previsão de risco e análise dos resultados.