Este projeto é o Trabalho Final de Engenharia de Sistemas Inteligentes. Ele consiste em uma solução completa de Machine Learning para prever preços de venda de apartamentos na cidade de São Paulo, utilizando dados como área, localização (bairro), número de quartos e vagas de garagem.
A solução expõe uma API REST construída com FastAPI, permitindo o treinamento do modelo e a realização de predições de forma programática.
Siga os passos abaixo para rodar a aplicação localmente.
- Python 3.12+
- Poetry (Gerenciador de dependências)
- Clone o repositório:
git clone https://github.com/davyeeh/trabalho-final-de-engenharia-de-sistemas-inteligente.git
cd trabalho-final-de-engenharia-de-sistemas-inteligente- Instale as dependências:
poetry run uvicorn app:appA API estará rodando em:
👉 http://127.0.0.1:8000
Acesse a documentação (Swagger UI):
👉 http://127.0.0.1:8000/docs
├── app.py # Ponto de entrada da API (FastAPI) e rotas
├── pyproject.toml # Configuração do projeto e dependências (Poetry)
├── README.md # Documentação do projeto
│
├── artifacts/ # Pasta onde o modelo treinado (.pkl) é salvo
│ └── modelo_campeao.pkl
│
├── dados/ # Armazenamento do histórico de dados processados
│ └── historico_apartamentos.csv
│
├── dataset/ # Dados brutos originais (fonte de dados)
│ ├── dataset_original.csv
│ └── SaoPaulo_OnlyAppartments_2024-11-25.csv
│
├── notebooks/ # Jupyter Notebooks para análises e testes
│ ├── projeto_final_ESI.ipynb
│ └── Treinamento_ESI.ipynb
│
└── src/ # Código fonte do pipeline de ML
├── pipeline_dados.py # Lógica de limpeza e engenharia de features
└── pipeline_modelos.py # Lógica de treinamento e validação
O sistema recebe os dados brutos e aplica as seguintes transformações:
- Limpeza: Remoção de nulos em coordenadas (Latitude/Longitude).
- Outliers: Filtragem de preços discrepantes usando IQR (Interquartile Range).
- Engenharia de Features:
- Extração do ano da data de criação do anúncio.
- Padronização de nomes de bairros.
- Padronização: Renomeia colunas para o padrão esperado pelo modelo (CamelCase).
Pipeline do Scikit-Learn contendo:
- Pré-processador (ColumnTransformer):
- Variáveis Numéricas: imputação pela mediana +
StandardScaler. - Variáveis Categóricas (bairro):
OneHotEncoder.
- Variáveis Numéricas: imputação pela mediana +
- Modelo Preditivo:
- XGBoost Regressor ou Random Forest Regressor.
- Otimização baseada em RMSE e R².
Retreina o modelo a partir de um arquivo CSV ou Excel.
- Input:
.csvou.xlsx - Ação:
- Limpa os dados
- Atualiza o histórico (
dados/) - Treina o modelo
- Salva em
artifacts/
Retorna o preço estimado de um imóvel.
Body (JSON):
{
"area": 57,
"bedrooms": 2,
"bathrooms": 1,
"parking_spaces": 1,
"neighborhood": "Pinheiros",
"latitude": -23.56,
"longitude": -46.69,
"created_date": 2024
}Response:
{
"preco_estimado": 650000.0,
"neighborhood": "Pinheiros"
}Para testar o fluxo completo sem Postman ou Insomnia, utilize:
notebooks/Treinamento_ESI.ipynbprojeto_final_ESI.ipynb
Esses notebooks permitem:
- Carregar o dataset original
- Enviar dados para a rota de treino
- Executar predições de teste