Trabalho final desenvolvido para a disciplina de Tópicos Especiais em Software.
O objetivo deste projeto é uma aplicação web completa, desenvolvida em Python com Streamlit, capaz de realizar a ingestão, processamento, análise exploratória e modelagem de Machine Learning sobre um conjunto de dados de incidentes de cibersegurança.
A aplicação cumpre todos os requisitos do trabalho, incluindo o upload dinâmico de novas bases de dados, re-treinamento automático do modelo e um dashboard analítico interativo.
A aplicação é dividida em três páginas principais:
Esta página é o ponto de entrada do sistema e cumpre o requisito de "flexibilidade" e "re-treinamento dinâmico".
- Upload Flexível: Permite o upload de um novo conjunto de dados no formato
.zip(contendo múltiplos CSVs) ou um único arquivo.csv. - Detecção Inteligente: Detecta automaticamente o separador do CSV (vírgula ou ponto-e-vírgula). (Esta funcionalidade estava no seu código original).
- Processamento Robusto: Executa todo o pipeline de ETL (definido no
backend_tasks.py) para limpar, otimizar tipos e salvar os dados em um banco SQLite (CyberSec.db). - Re-treinamento Automático: Após o processamento dos dados, o sistema automaticamente re-treina o modelo de Machine Learning (Random Forest Classifier) e o salva (
modelo_classificador.pkl) para ser usado no simulador.
Um painel de BI (como o Power BI) construído diretamente em Python.
- Visualizações Interativas: Usa Plotly para gerar gráficos dinâmicos (mapa coroplético, barras, dispersão, histograma).
- Métricas de KPI: Apresenta um resumo com os principais indicadores (Total de Incidentes, Prejuízo Total, etc.).
- Análise de Padrões: Permite que o usuário estratégico (Gestor, CISO) identifique visualmente quais ataques são mais caros, mais frequentes e qual a eficiência da equipe de resposta.
Esta é a ferramenta preditiva do sistema, que usa o modelo treinado.
- Inferência em Tempo Real: O usuário (Tático/Operacional) insere as características de um incidente em andamento.
- Previsão de Probabilidade: O modelo Random Forest carregado (
.pkl) prevê não apenas o tipo de ataque mais provável, mas a distribuição de probabilidade (ex: 40% SQL Injection, 21% Ransomware). - Apoio à Decisão: Ajuda a equipe de resposta a incidentes a priorizar ações (mudando de uma postura Reativa para Proativa) e acionar a equipe correta.
- Python 3.10+
- Streamlit: Para a construção da interface web (frontend).
- Pandas: Para manipulação e processamento de dados (ETL).
- Scikit-learn: Para todo o pipeline de Machine Learning (Engenharia de Features, Treinamento,
RandomForestClassifier). - Plotly Express: Para a criação dos gráficos interativos.
- Joblib: Para salvar e carregar o modelo de ML treinado (
.pkl). - SQLite: (Nativo do Python) Para armazenar os dados processados de forma otimizada.
-
Clone o repositório:
git clone [https://github.com/seu-usuario/seu-repositorio.git](https://github.com/seu-usuario/seu-repositorio.git) cd seu-repositorio -
Crie um ambiente virtual (Recomendado):
python -m venv venv - No macOS/Linux: source venv/bin/activate - No Windows: venv\Scripts\activate
-
Instale as dependências:
pip install -r requirements.txt
-
Execute a aplicação Streamlit:
streamlit run app.py
-
Acesse
http://localhost:8501no seu navegador.
-
Primeira Execução:
- Ao iniciar a aplicação pela primeira vez, o sistema detectará que o banco de dados (
CyberSec.db) e o modelo (modelo_classificador.pkl) não existem.
- Ao iniciar a aplicação pela primeira vez, o sistema detectará que o banco de dados (
-
Upload:
- Você será direcionado automaticamente para a página "Atualizar Base de Dados".
-
Processamento:
- Faça o upload do arquivo de dados (ex: CyberSec.zip ou Brasil_Cybersecurity_Threats_2015-2024.csv).
-
Treinamento:
- Clique no botão "Processar e Treinar Nova Base". Aguarde alguns minutos enquanto o backend processa os dados e treina o modelo.
-
Recarregamento:
- A aplicação será recarregada automaticamente.
-
Explorar:
- Agora, com os dados e o modelo carregados, você pode navegar livremente entre as páginas "Análise Exploratória" e "Simulador de Predição".
A1_Project/
│
├── .streamlit/
│ └── config.toml # (Configuração do tema escuro)
│
├── CyberSec/
│ ├── CyberSec.db # (Criado pelo app - O banco otimizado)
│ └── modelo_classificador.pkl # (Criado pelo app - O modelo treinado)
│
├── app.py # (O código da interface web - Streamlit)
├── backend_tasks.py # (O "motor" de processamento e ML - Pandas/Sklearn)
├── requirements.txt # (Lista de dependências do Python)
├── README.md # (Esta documentação)
└── CyberSec.zip # (Exemplo de dados brutos para upload)