/churn

Primary LanguageJupyter NotebookMIT LicenseMIT

Demo

Autores

Base de dados

Introdução

Estrutura

O projeto foi organizado de uma forma linear de modo a facilitar a navegação e compreensão do passo a passo.

.
├── data
│   ├── 01_raw
│   │   ├── ...
│   ├── 02_intermediate
│   ├── ├── ...
│   │   03_processed
│   │   ├── ...
│   ├── 04_models
│   │   ├── ...
│   ├── 05_model_output
│   │   ├── ...
│   ├── 06_reporting
│   │   ├── ...
│   ├── 07_prediction
│   │   ├── ...
│   ├── temp
│   │   ├── ...
├── notebooks
│   ├── 01_data_validation.ipynb
│   ├── 02_split.ipynb
│   ├── 03_eda_cleansing.ipynb
│   ├── 04_encoding.ipynb
│   ├── 05_1_check_collinearity.ipynb
│   ├── 06_model_linear.ipynb
│   ├── 06_model_tree_rf.ipynb
│   ├── 06_model_tree_xgboost.ipynb
│   ├── 07_model_selection.ipynb
│   ├── 08_final_model.ipynb
│   ├── sandbox05_2_feature_engineering.ipynb
├── papers
│   ├── ...
├── src
│   ├── model.py
│   ├── params.py
│   ├── s03_encoding.py
│   ├── s04_1_feature_engineering.py
│   ├── utils.py
├── temp
├── presentation.pdf
├── presentation.pptx
├── README.md
├── requirements.txt
└── runtime.txt

Observações sobre arquivos

Raw data

from case

others

Data pipeline

Notebooks

Scripts python

  • model.py: funções voltadas para modelos de Machine Learning
  • params.py: parâmetros principais do projeto
  • s03_encoding.py: seção não utilizada, mas análoga ao s03_encoding.ipynb
  • s05_2_feature_engineering.py: diversas funções que formulam pré-processamento e alimentam parte de modelagem
  • utils.py: funções genéricas, mas aplicadas ao longo de notebooks diversos do projeto

pdfs

Reports over datasets and case.

temp

Requerimentos

Esse projeto usa Python 3.7.5 e os seguintes pacotes devem ser instalados se não estiver usando uma distribuição como Anaconda:

impyute - matplotlib - numpy - pandas - scipy - seaborn - scikit-learn - statsmodels - xgboost

Os pacotes podem ser automaticamente instalados por meio do arquivo requirements.txt. Para utilizá-los, é necessário criar um ambiente virtual, por exemplo via virtualenv e rodar o seguinte código no terminal:

pip install -r requirements.txt

Lembrando que IDEs como pycharm automatizam toda essa tarefa.

Python

Para trabalhar com os arquivos, é necessário ter jupyter notebook instalado (se possuir distribuições como anaconda, pode pular esse passo). Para instalar, digite no terminal:

sudo apt update
pip install jupyter

Considerações

Um projeto de machine learning demanda cuidado minucioso sobre diversas etapas. Abaixo, fiz um fluxograma (via figma) de um projeto usual: alt text

O modelo final utilizado foi um xgboost com um set específico de hiperparâmetros e features. O score, seja ele acurácia, precisão, recall, f1, não é o único fator relevante para a tomada de decisão. Interpretabilidade, velocidade de treinamento e de predição também podem ser relevantes a depender de cada problema de negócio com o qual as empresas se deparam.

Segue abaixo gráficos comparativos da performance de cada modelo:

alt text

alt text

alt text

Obs: diferenças de velocidade dependem não apenas do modelo escolhido, mas também da configuração do hyperparameter tuning.

Os notebooks possuem análises mais detalhadas de acordo com cada etapa.

O racional para decisões quanto a escolha do modelo e estratégias sugeridas será demonstrado na apresentação.

Caminhos possíveis de melhorias

  • Customizar pipeline de pré-processamento dentro do sklearn para garantir eficácia da validação dos modelos
  • adicionar docstrings
  • adicionar testes unitários
  • refatorar código (com assistência de IDEs como pycharm)
  • preparar código para produção
  • implementar modelo na nuvem (AWS, GCP ou Azure)

Além disso, cada notebook poderia ter um trabalho mais minucioso quanto à escolha de técnicas, assim como de parâmetros.

Outras ideias