👨💻👩💻 Projeto desenvolvido por: José Pedro Cândido L.P. , Pedro Montenegro, Natália Siqueira Cardoso, e Renan Mazzilli Dias.
Este projeto utiliza a AWS para treinar um modelo de machine learning que classifica reservas de hotéis em faixas de preço, utilizando o dataset do Kaggle. Os dados são processados e armazenados no DynamoDB, o modelo é treinado no SageMaker e salvo no S3. Um serviço de inferência em Python, desenvolvido com FastAPI, carrega o modelo do S3 e expõe um endpoint para previsões, registrando logs no DynamoDB. O serviço é containerizado com Docker e implantado no Elastic Beanstalk, acessível via API Gateway, garantindo escalabilidade e gerenciamento eficiente.
- Configuração do ambiente na AWS, incluindo serviços como DynamoDB, SageMaker, S3, Elastic Beanstalk e API Gateway.
- Leitura dos dados do Kaggle e armazenamento no DynamoDB.
- Pré-processamento e tratamento dos dados, com salvamento do dataset alterado no DynamoDB.
- Carregamento dos dados e treinamento do modelo no SageMaker, seguido de salvamento do modelo no S3.
- Desenvolvimento de um serviço em Python (FastAPI) para receber requisições POST, carregar o modelo salvo no S3, realizar a predição e retornar o resultado.
- Containerização do serviço com Docker e implantação no Elastic Beanstalk.
- Random Forest
- XGBoost
- fastapi
- uvicorn
- boto3
- python-dotenv
- pandas
- scikit-learn
- xgboost
- numpy
- seaborn
- matplotlib
- sklearn
- joblib
-
./docker-compose.yml→ Arquivo de configuração do Docker Compose para a execução do projeto. -
./.dockerignore→ Arquivo que contém os diretórios e arquivos que serão ignorados pelo Docker.
├── /api
│ ├── /controllers
│ │ ├── controller.py
│ │ ├──__init__.py
│ ├── /models
│ │ ├── _init_.py
│ │ ├── dataModel.py
│ ├── /services
│ │ ├── accessS3Service.py
│ │ ├── credentialService.py
│ │ ├── inferenceLogsToDynamo.py
│ │ └── predictionService.py
│ └── /utils
│ ├── requirements.txt
│ └── api.py
├── assets
│ ├── dataset_schema.png
│ └── sprint4-5.jpg
├── notebooks
│ ├── dataset_preprocessing_upload.ipynb
│ ├── infrastructure_role_settings.ipynb
│ ├── locally_train_models.ipynb
│ └── sagemaker_train_model.ipynb
├──.gitignore
└── README.md$ git clone https://github.com/Compass-pb-aws-2024-MARCO/sprints-4-5-pb-aws-marco.git$ cd sprints-4-5-pb-aws-marco$ git checkout grupo-3$ cd api $ pip install -r requirements.txt$ python3 api.pyFaça uma requisição POST para o endpoint <endereço-da-api>/api/v1/predict, o formato da requisição deve ser:
{
"no_of_adults": 3,
"no_of_children": 3,
"type_of_meal_plan": "example"
...
}