Skip to content

Este projeto utiliza AWS SageMaker para treinar um modelo de inferência que classifica reservas de hotéis em faixas de preço, utilizando o dataset do Kaggle e recebe requisições através do API Gateway.

Notifications You must be signed in to change notification settings

PeterYouseph/AWS-Hotel-Classification-Inference

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desenvolvimento da aplicação Compass

👨‍💻👩‍💻 Projeto desenvolvido por: José Pedro Cândido L.P. , Pedro Montenegro, Natália Siqueira Cardoso, e Renan Mazzilli Dias.

📚 Contextualização do projeto

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.

🖥️ Funcionamento do sistema

  • 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.

🛠️ Tecnologias/Ferramentas utilizadas

Para a implementação do projeto, foram utilizadas as seguintes tecnologias/ferramentas:

Bibliotecas e modelos do projeto:
  • Random Forest
  • XGBoost
  • fastapi
  • uvicorn
  • boto3
  • python-dotenv
  • pandas
  • scikit-learn
  • xgboost
  • numpy
  • seaborn
  • matplotlib
  • sklearn
  • joblib
Ferramentas para o desenvolvimento, versionamento e deploy do projeto:

Organização do Time:

📁 Estrutura do projeto

  • ./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.

📁 Estrutura da API

├── /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

📌 Como executar a API localmente

Clone o repositório

$ git clone https://github.com/Compass-pb-aws-2024-MARCO/sprints-4-5-pb-aws-marco.git

Acesse a pasta do projeto no terminal/cmd:

$ cd sprints-4-5-pb-aws-marco

Realize um check-out para a branch de desenvolvimento:

$ git checkout grupo-3

Entre na pasta da API

$ cd api 

Instale as dependências

$ pip install -r requirements.txt

Execute a API

$ python3 api.py

📌 Como fazer a requisição

Faç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"
    ...
}

🤯 Dificuldades encontradas

Dificuldades técnicas

Configuração do ambiente de produção no AWS Elastic Beanstalk com Docker

Dificuldades de organização

Organização do time e divisão de tarefas

About

Este projeto utiliza AWS SageMaker para treinar um modelo de inferência que classifica reservas de hotéis em faixas de preço, utilizando o dataset do Kaggle e recebe requisições através do API Gateway.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published