Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andremenezesds/machine_learning_test
Testing among various Machine Learning models and parameters, in order to further study their behaviour for Classification, Regression and Clustering analysis.
https://github.com/andremenezesds/machine_learning_test
classification-models clustering-models machine-learning numpy pandas regression-models sklearn
Last synced: 8 days ago
JSON representation
Testing among various Machine Learning models and parameters, in order to further study their behaviour for Classification, Regression and Clustering analysis.
- Host: GitHub
- URL: https://github.com/andremenezesds/machine_learning_test
- Owner: AndreMenezesDS
- License: mit
- Created: 2023-10-19T02:05:25.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-07T03:46:11.000Z (about 1 year ago)
- Last Synced: 2023-11-07T05:46:53.102Z (about 1 year ago)
- Topics: classification-models, clustering-models, machine-learning, numpy, pandas, regression-models, sklearn
- Language: Jupyter Notebook
- Homepage:
- Size: 5.05 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DATA MONEY COMPANY - MACHINE LEARNING INSIGHTS PROJECT
___
![Project Cover](img/project_cover.jpg "Project Cover")
_A demonstração detalhada do código pode ser conferida [neste link.](https://github.com/AndreMenezesDS/machine_learning_test/blob/main/ml_trials.ipynb)_
# 1.0 RESUMO
___
Data Money é uma empresa que oferece consultoria em análise e ciência de dados, com orientação a otimizar resultados de empresas parceiras ao redor do mundo.
A metodologia de trabalho da empresa consiste na realização de ensaios para treino e configuração de modelos de machine learning, obtendo insights acionáveis através da interpretação dos resultados obtidos._*Este é um projeto fictício. A empresa, o contexto e as perguntas de negócio não são reais, e prestam apenas como simulação de um projeto real._
# 2.0 PROBLEMA DE NEGÓCIO
___
## 2.1 Descrição do Problema
Em vias de manter o ganho de performance do time de dados da empresa, a Data Money
exigiu a execução de um número maior de testes dos modelos em treino de machine learning, com o objetivo de melhor esclarecer o funcionamento e cenários adequados da aplicação de cada um.
Para tornar essa tarefa possível, fui contratado como cientista de dados com o objetivo de entregar um **ensaio**, explicitando o funcionamento de cada modelo com o uso comparativo de métricas de performance entre os algoritmos.
Como forma de guiar o desenvolvimento do projeto, foram propostas as perguntas de negócio:- Através dos resultados obtidos, quais os insights podem ser considerados acionáveis para entender o comportamento de cada modelo de Machine Learning?
- Em caso de discrepância nos resultados observados de um mesmo modelo para diferentes bases de dados, é possível inferir alguma característica de funcionamento do modelo de Machine Learning?![ml_diagram](img/ml_diagram.jpeg "Machine Learning Diagram")
## 2.2 Proposta de Solução
Para organizar a entrega do resultado, separei os resultados dos ensaios em 3 categorias: Ensaios de Classificação, Regressão e Clusterização.
Para os modelos de **aprendizagem supervisionada (Classificação e Regressão)**, foram feitas validações de resultados a partir de uma base de dados pré selecionada de treino:* No próprio dataset de **treino**;
* Em uma base de dados exclusivamente voltada à **validação**;
* Em um base de dados exclusivamente voltada à **testes**
* Totaliza-se então 6 tabelas com os resultados obtidos em aprendizagem supervisionada (3 para modelos de classificação; 3 para modelos de regressão)Os modelos de aprendizagem supervisionada treinados, seus hiperparâmetros testados e suas respectivas métricas de avaliação serão:
| Modelos de Classificação |Hiperparâmetros|
| --------------------- | ------------------------------------------------- |
| KNN | Número de Vizinhos (n_neighbors) |
| Árvore de Decisão | Profundidade de Árvore (max_depth) |
| Random Forest | Número de estimadores (n_estimators), Profundidade de Árvore(max_depth) |
| Classificação via Regressão Logística | Força de Regularização ( C ), algoritmo para otimização da função custo (solver), Máximo de iterações p/ convergência(max_iter) |* _Métricas para Classificação_: Accuracy, Precision, Recall e F1_score.
| Modelos de Regressão | Hiperparâmetros|
| --------------------- | ------------------------------------------------- |
| Regressão Linear | (sem parâmetros iteráveis) |
| Regressão Linear Regularizada Lasso (L1) | termo multiplicador da penalidade L1(alpha), Número máximo de iterações(max_iter) |
| Regressão Linear Regularizada Ridge (L2) | termo multiplicador da penalidade L1(alpha), Número máximo de iterações(max_iter) |
| Regressão Linear Regularizada Elastic Net (L1 & L2) | termo multiplicador da penalidade L1(alpha), Número máximo de iterações(max_iter), Proporção entre as penalidades L1 e L2(l1_ratio) |
| Regressão Polinomial | Grau do Polinômio(degree) |
| Regressão Polinomial Regularizada Lasso (L1) | termo multiplicador da penalidade L1(alpha), Número máximo de iterações(max_iter), grau do polinômio(degree) |
| Regressão Polinomial Regularizada Ridge (L2) | termo multiplicador da penalidade L1(alpha), Número máximo de iterações(max_iter), grau do polinômio(degree) |
| Regressão Polinomial Regularizada Elastic Net (L1 & L2) | termo multiplicador da penalidade L1(alpha), Número máximo de iterações(max_iter), grau do polinômio(degree), Proporção entre as penalidades L1 e L2(l1_ratio) |
| Árvore de Regressão | Profundidade da árvore(max_depth) |
| Random Forest Regressor | Número de estimadores(n_estimators), Profundidade da Árvore(max_depth) |* _Métricas para Regressão_: R² score, Mean Squared Error(MSE), Rooted Mean Squared Error(RMSE), Mean Absolute Error(MAE), Mean Absolute Percentual Error(MAPE)
Para os modelos de **aprendizagem não-supervisionada (Clusterização)**, será apenas 1 tabela com o resultado final contendo os valores da métrica de avaliação obtida para cada modelo. Os modelos treinados, os hiperparâmetros testados e suas respectivas métricas de avaliação serão:
| Modelos de Clusterização |Hiperparâmetros|
| --------------------- | ------------------------------------------------- |
| KMeans | Número de Clusters(k) |
| Affinity Propagation | Preference |* _Métrica para Clusterização_: Silhouette Score
# 3.0 ANÁLISE DE PERFORMANCE
___
## 3.1 Análise dos Resultados
_O Detalhamento da setagem dos hiperparâmetros que contextualizam os resultados aqui mostrados podem ser conferidos [neste link.](https://github.com/AndreMenezesDS/machine_learning_test/blob/main/ml_trials.ipynb)_### 3.1.1 Classificação
* Training Dataset
![training_classification_results](img/training_class_results.png "Classification Results - Training Dataset")
* Validation Dataset
![validation_classification_results](img/validation_class_results.png "Classification Results - Validation Dataset")
* Test Dataset
![test_classification_results](img/test_class_results.png "Classification Results - Test Dataset")
### 3.1.2 Regressão
* Training Dataset
![training_regression_results](img/training_regression_results.png "Regression Results - Training Dataset")
* Validation Dataset
![validation_regression_results](img/validation_regression_results.png "Regression Results - Validation Dataset")
* Test Dataset
![test_regression_results](img/test_regression_results.png "Regression Results - Test Dataset")
### 3.1.3 Clusterização
![clustering_results](img/clustering_results.png "Clustering Results")
## 3.2 Principais Insights Obtidos
* Foram identificadas situações de underfitting em:
* Algoritmos simples(base) que não conseguem representar o comportamento dos dados: KNN(Classificação), Regressões Lineares, Regressões Polinomiais de baixo grau.
* Modelos de Regressões Regularizadas com altos valores de penalidade L1 e L2.
* Foram identificadas situações de overfitting em:
* Algoritmos baseados em árvores com grandes profundidades;
* Regressões polinomiais de alto grau
* NOTA: Expansões polinomiais de grau elevado são processos custosos computacionalmente.
* Insights referentes à Generalização da aplicação dos modelos treinados:
* Na Classificação via regressão Logística, otimizadores da função de custo com adição da penalidade L1 não foram capazes de convergir a função de custo para a otimização dos scores, uma vez que há uma tendência em não performar bem para datasets pequenos (validação e teste)
* Regressores Regularizados, em geral, conferem maior capacidade de generalização aos modelos de machine learning.
* O aumento no número de estimadores em algoritmos de Random Forest conferem maior capacidade de generalização quando em comparação ao modelo de uma árvore singular.
* Clusterização:
* A escolha inapropriada de parametros (como nº de clusters em KMeans), geram resultados muito abaixo do esperado, fazendo-se necessário o monitoramento da setagem do modelo.
* Ambos os algoritmos não lidam bem com outliers, uma vez que deslocam o cálculo da média dos centroídes de cada cluster(KMeans)/não se saia bem com dados em formatos complexos em clusters não esféricos(Affinity Propagation)# 4.0 FERRAMENTAS E TÉCNICAS UTILIZADAS
___
- Backend & Data Science: [![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54)](https://www.python.org/downloads/release/python-380/)
- Apresentação & Frontend : ![HTML5](https://img.shields.io/badge/html5-%23E34F26.svg?style=for-the-badge&logo=html5&logoColor=white) , [![Markdown](https://img.shields.io/badge/markdown-%23000000.svg?style=for-the-badge&logo=markdown&logoColor=white)](https://www.markdownguide.org/)
- Machine Learning & Análise de Dados: [![Pandas](https://img.shields.io/badge/pandas-%23150458.svg?style=for-the-badge&logo=pandas&logoColor=white)](https://pandas.pydata.org/) , [![NumPy](https://img.shields.io/badge/numpy-%23013243.svg?style=for-the-badge&logo=numpy&logoColor=white)](https://numpy.org/) , [![Matplotlib](https://img.shields.io/badge/Matplotlib-%23ffffff.svg?style=for-the-badge&logo=Matplotlib&logoColor=black)](https://matplotlib.org/), [![scikit-learn](https://img.shields.io/badge/scikit--learn-%23F7931E.svg?style=for-the-badge&logo=scikit-learn&logoColor=white)](https://scikit-learn.org/stable/)
- Editores & IDEs : [![Jupyter Notebook](https://img.shields.io/badge/jupyter-%23FA0F00.svg?style=for-the-badge&logo=jupyter&logoColor=white)](!https://jupyter.org/) , [![Visual Studio Code](https://img.shields.io/badge/Visual%20Studio%20Code-0078d7.svg?style=for-the-badge&logo=visual-studio-code&logoColor=white)](!https://code.visualstudio.com/)
- Versionamento de Código: [![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white)](!https://git-scm.com/) , [ ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white)](!https://github.com/)# 5.0 CONTATOS
___
- [![Gmail](https://img.shields.io/badge/-Gmail-EA4335?logo=Gmail&logoColor=white&style=for-the-badge)]([email protected]) ou [![Gmail](https://img.shields.io/badge/-Gmail-EA4335?logo=Gmail&logoColor=white&style=for-the-badge)]([email protected])
- [![LinkedIn](https://img.shields.io/badge/linkedin-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/andremenezesds/)
- [![Telegram](https://img.shields.io/badge/-Telegram-26A5E4?logo=Telegram&logoColor=white&style=for-the-badge)](https://t.me/andre_menezes_94)