WebApp - Heroku
Linkedin - Rodrigo Fragoso
Email : rodrigoandradefragoso@gmail.com
- Em época de quarentena, decidi reservar um pouco do meu tempo para realizar algumas atividades físicas, principalmente de corrida (de forma segura, sempre). Sendo assim, me deparei com o problema de escolher o melhor tênis para comprar, dada a quantidade imensa de opções no mercado.
- Para otimizar minha escolha, criei um pipeline completo, desde a formulação do problema até o deploy, para escolher o melhor tênis de corrida, tudo isso baseado em dados. Para isso, passamos por várias etapas: scraping, processamento dos dados, modelagem, otimização, até chegar na solução final que foi hospedada no heroku, me auxiliando bastante a decidir qual produto adquirir.
Como cheguei nesse WebApp?
-
Formulei o problema e procurei o melhor site, para extrair informações e realizar o meu projeto. A página escolhida foi o RunRepeat Official Website, que possui diversas informações sobre milhares de tênis, além de uma vasta quantidade de reviews feitos por especialistas e membros da sua comunidade;
-
Com o site escolhido, criei um Web Scraper dividido em duas etapas: o coletor de dados da busca do site, que era responsável por listar todos os tênis da categoria desejada, e o coletor dos dados de cada tênis encontrado. A segunda parte demandou maiores esforços por possuir muitas informações na página;
-
De posse de todos esses dados brutos, realizei o seu processamento para criar um dataset consumível para treinar os modelos de machine learning que iria utilizar;
-
Para chegar na modelagem, foi necessário fazer a anotação de alguns exemplos no nosso dataset e para realizar isso de forma otimizada, reduzindo tempo e recurso, foi utilizada a metodologia do Active Learning, no qual também foram treinados alguns modelos de classificação tendo sua performance avaliada via validação cruzada;
-
Com todos os dados que foram anotados, criei mais dois modelos, Random Forest e LightGBM, otimizei os seus hiperparâmetros para realizar um classificação mais precisa, e fundi seus resultados utilizando um ensemble entre eles;
-
Por fim, construí um container utilizando o docker e hospedei minha aplicação no heroku, concluindo o projeto.
-
Para adicionar algumas funcionalidades ao aplicativo, foram adicionadas duas APIs com o intuito de consultar o score de qualquer tênis que pertença ao site e outra para mandar um comando que atualiza o banco de dados do app.
- A primeira, denominada de predict https://como-um-ds-compra-um-tenis.herokuapp.com/predict?shoes_name={nome_do_tenis}, e deve ser preenchida com o nome do tênis de acordo com sua página do RunRepeat.
Exemplo: para o https://runrepeat.com/nike-epic-react-flyknit-2, podemos acessar seu score via API por:
https://como-um-ds-compra-um-tenis.herokuapp.com/predict?shoes_name=nike-epic-react-flyknit-2; - A primeira, denominada de predict https://como-um-ds-compra-um-tenis.herokuapp.com/predict?shoes_name={nome_do_tenis}, e deve ser preenchida com o nome do tênis de acordo com sua página do RunRepeat.
- A segunda, denominada de update é consultada pelo link:
https://como-um-ds-compra-um-tenis.herokuapp.com/update?code={senha}&pages={pagina_de_busca}.
Nesse caso, podemos escolher quantas páginas de busca serão adicionadas e é necessária uma senha para liberar a atualização, por segurança.
- Extração a Modelagem : Pasta com todos notebooks utilizados para realizar os passos de extração dos dados até a modelagem.
- deploy : Pasta com os arquivos utilizados para criar o container do docker e realizar o deploy no heroku.
- scikit-learn
- scikit-optimize
- pandas
- numpy
- scipy
- regex
- flask
- docker
- heroku
- beautifulsoup4
- requests
- Agradecimento especial ao Mario Filho que criou um curso fenomenal, utilizado de base para boa parte deste projeto, e sempre está criando conteúdo sobre Data Science que venho consumindo e aprendendo diversos tópicos a bastante tempo.
- Ao Jonathan Cabreira por disponibilizar o seu template da página web para o deploy.