{"id":49563361,"url":"https://github.com/madsondeluna/mvp_pucrio_data_analysis","last_synced_at":"2026-05-03T10:47:36.900Z","repository":{"id":302929343,"uuid":"1013975021","full_name":"madsondeluna/mvp_pucrio_data_analysis","owner":"madsondeluna","description":"MVP de análise de dados com boas práticas, usando o dataset de câncer de mama. A análise segue o Módulo 1 da especialização em Data Science da PUC-Rio, com foco em inspeção, limpeza, visualização e extração de insights iniciais para projetos futuros.","archived":false,"fork":false,"pushed_at":"2025-07-21T17:41:20.000Z","size":42739,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T10:47:25.436Z","etag":null,"topics":["data-exploration","data-science","data-visualization","knn-classification","puc-rio","python"],"latest_commit_sha":null,"homepage":"https://colab.research.google.com/drive/1--VBTH2w0f66WHhe33Wdgm40o6nHTX__?usp=sharing","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/madsondeluna.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-04T19:54:31.000Z","updated_at":"2025-07-21T17:41:23.000Z","dependencies_parsed_at":"2025-07-04T20:37:44.474Z","dependency_job_id":"bbb37779-9f32-4ea8-90ff-ddc91b63d156","html_url":"https://github.com/madsondeluna/mvp_pucrio_data_analysis","commit_stats":null,"previous_names":["madsondeluna/mvp_pucrio_data_analysis"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/madsondeluna/mvp_pucrio_data_analysis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madsondeluna%2Fmvp_pucrio_data_analysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madsondeluna%2Fmvp_pucrio_data_analysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madsondeluna%2Fmvp_pucrio_data_analysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madsondeluna%2Fmvp_pucrio_data_analysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/madsondeluna","download_url":"https://codeload.github.com/madsondeluna/mvp_pucrio_data_analysis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madsondeluna%2Fmvp_pucrio_data_analysis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32566444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-exploration","data-science","data-visualization","knn-classification","puc-rio","python"],"created_at":"2026-05-03T10:47:36.160Z","updated_at":"2026-05-03T10:47:36.870Z","avatar_url":"https://github.com/madsondeluna.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MVP I (Análise de Dados e Boas Práticas)\n\n**Pontifícia Universidade Católica do Rio de Janeiro - PUC-Rio**\n\n**Especialização em Ciência de Dados \u0026 Analytics**  \n\n**Autor:** Madson Aragão\n\n**Sementre**: 25/1\n\n---\n\n![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54) ![NumPy](https://img.shields.io/badge/numpy-%23013243.svg?style=for-the-badge\u0026logo=numpy\u0026logoColor=white) ![Pandas](https://img.shields.io/badge/pandas-%23150458.svg?style=for-the-badge\u0026logo=pandas\u0026logoColor=white) ![Matplotlib](https://img.shields.io/badge/Matplotlib-%23ffffff.svg?style=for-the-badge\u0026logo=Matplotlib\u0026logoColor=black) ![scikit-learn](https://img.shields.io/badge/scikit--learn-%23F7931E.svg?style=for-the-badge\u0026logo=scikit-learn\u0026logoColor=white) ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)![Google Colab](https://img.shields.io/badge/Google%20Colab-%23F9A825.svg?style=for-the-badge\u0026logo=googlecolab\u0026logoColor=white) \n\n---\n\n\n#### 🟡 [Acesse o notebook no Google Colab](https://colab.research.google.com/drive/1--VBTH2w0f66WHhe33Wdgm40o6nHTX__?usp=sharing)\n\n#### ⚪️ [Acesse o notebook no GitHub](https://github.com/madsondeluna/mvp_pucrio_data_analysis/blob/main/mvp_pucrio_data_analysis_final.ipynb)\n\n\n---\n\n## I. Introdução\n\n### Objetivo Geral\n\nValidar a viabilidade de classificar dados extraídos a partir de células mamárias em processos de alteração celular (benignas vs. malignas) usando técnicas clássicas de análises de dados baseadas em Python, além de iniciar o preparo do dataset para treinamento e testes de modelos de Aprendizado de Máquina. O projeto também visa explorar a relevância biológica das variáveis envolvidas e avaliar o potencial diagnóstico do modelo.\n\n### Detalhamento da Problemática\n\nA figura abaixo ilustra, em três níveis de ampliação (4×, 10× e 20×), o contraste entre **amostras benignas** e **amostras malignas** de tumores de mama:\n\n![Benign vs Malignant Samples](https://raw.githubusercontent.com/madsondeluna/mvp_pucrio_data_analysis/main/imagens/bvsm.jpg)\n\nA figura acima apresenta um **comparativo de amostras histopatológicas** de tumores de mama, divididas em duas colunas principais:\n\n1. **Coluna “Benign samples” - (Amostras benignas)**  \n2. **Coluna “Malignant samples” - (Amostras malignas)**  \n\nCada coluna é organizada em três linhas, que correspondem a diferentes **níveis de ampliação** do microscópio:\n\n| Linha | Ampliação | O que significa                                    |\n|-------|-----------|----------------------------------------------------|\n| 1     | 4×        | Visão geral da arquitetura                          |\n| 2     | 10×       | Organização tecidual                                |\n| 3     | 20×       | Detalhes nucleares e citoplasmáticos                |\n\n### Funcionalidades\n\n- **Seleção e Carregamento dos Dados**  \n  - Importação do arquivo CSV contendo métricas morfológicas extraídas de imagens clínicas.  \n  - Verificação da integridade do dataset (dimensões, tipos de variáveis, rótulos disponíveis).  \n  - Remoção de colunas irrelevantes ou redundantes (ex.: IDs, campos vazios).  \n  - Classificação do tipo de variável (numérica contínua, categórica ou binária) para orientar futuras transformações.  \n  - Identificação prévia de colinearidade, valores extremos e valores faltantes.  \n  - Registro da proporção entre amostras benignas e malignas para verificar eventual desbalanceamento.\n\n- **Visualização Exploratória dos Dados**  \n  - Análise gráfica da distribuição das variáveis por meio de histogramas, boxplots e pairplots.  \n  - Detecção visual de outliers e padrões por classe (benigno vs. maligno).  \n  - Representação gráfica de correlações via heatmap para identificar redundância entre variáveis.  \n  - Visualização/exibição (imagem ou texto) da distribuição das classes na base original e após divisão em treino/teste.\n\n- **Pré-processamento dos Dados**  \n  - Tratamento de valores ausentes e remoção de duplicatas.  \n  - Padronização das variáveis contínuas utilizando z-score (StandardScaler).  \n  - Separação dos dados em conjuntos de treino e teste com proporção 75/25, utilizando `train_test_split` com `random_state=10` para reprodutibilidade.  \n  - Verificação da distribuição de classes entre treino e teste para garantir equilíbrio.  \n  - Armazenamento das estatísticas de normalização aplicadas na base de treino para uso posterior.\n\n- **Transformação e Mineração de Dados**  \n  - Análise de correlações entre variáveis para identificar multicolinearidade.  \n  - Aplicação de PCA (Análise de Componentes Principais) para reduzir dimensionalidade e observar agrupamentos de classes.  \n  - Comparação entre variáveis para avaliar valor das informações.  \n  - Avaliação qualitativa da separação entre classes no espaço transformado.\n\n- **Modelo Inicial de Classificação (Extra-MVP)**  \n  - Treinamento e avaliação de um classificador K-NN (k-Nearest Neighbors) com variação de k para análise de desempenho.  \n  - Cálculo de métricas: acurácia, precisão, recall e F1-score com base no conjunto de teste.  \n  - Avaliação visual do desempenho via curvas de decisão, matriz de confusão e curva AUC-ROC.  \n  - Avaliação do Matthews Correlation Coefficient (MCC), métrica robusta para avaliação de modelos de classificação binária, especialmente eficaz em cenários com classes desbalanceadas.\n\n- **Relatório de Resultados (Extra-MVP)**  \n  - Tabela sumarizando as principais métricas por valor de k.  \n  - Exibição da curva ROC com cálculo da AUC.  \n  - Discussão dos erros (falsos positivos e negativos) e suas implicações clínicas.  \n  - Indicação de configurações de k que maximizam a performance sem sobreajuste.\n\n### Checklist\n\n- (OK) Pipeline executando sem erros do início ao fim, com resultados reprodutíveis.  \n- (OK) Código documentado e validado em ambiente Jupyter.  \n- (OK) Notebook estruturado com seções claras: título, objetivos, hipóteses, análise, conclusões.  \n- (OK) MVP devidamente depositado, formatado e compartilhado via GitHub.\n\n---\n\n## II. Contexto da Base de Dados\n\nNesta análise, utilizamos o **Breast Cancer Wisconsin (Diagnostic) Dataset**, um dos datasets mais consagrados em aprendizado de máquina biomédico, disponível no UCI ML Repository e outras fontes públicas.\n\n- **Tumores benignos:** 357 amostras — células com arquitetura preservada, sem capacidade de metástase.  \n- **Tumores malignos:** 212 amostras — células agressivas, com invasão de tecidos e potencial metastático.\n\nOs dados foram coletados por punção aspirativa com agulha fina (FNA) de lesões mamárias, modelando características morfológicas dos núcleos celulares via análise de imagens digitalizadas.\n\n### Referências importantes\n\n- Clínica Einstein – Câncer de Mama Benigno e Maligno  \n  https://www.einstein.br/noticias/noticia/cancer-benigno-maligno  \n- Breast Cancer: Pathogenesis and Treatments  \n  https://www.nature.com/articles/s41392-024-02108-4  \n- The Size Differences of Breast Cancer and Benign Tumors Measured by Two-Dimensional Ultrasound and Contrast-Enhanced Ultrasound  \n  https://onlinelibrary.wiley.com/doi/10.1002/jum.16449  \n- Distinguishing Between Benign and Malignant Breast Lesions using Diffusion Weighted Imaging and Intravoxel Incoherent Motion: A Systematic Review and Meta-Analysis  \n  https://www.sciencedirect.com/science/article/abs/pii/S0720048X21002904  \n\n---\n\n## III. Descrição Detalhada da Base de Dados\n\nO Wisconsin Breast Cancer Dataset contém **569 amostras**, cada uma com **30 variáveis morfológicas** discretizadas em três escalas:\n\n| Sufixo    | Significado          | Exemplos                  |\n|-----------|----------------------|--------------------------|\n| _mean     | Média do atributo    | radius_mean, texture_mean |\n| _se       | Erro-padrão da média | radius_se, area_se       |\n| _worst    | Valor extremo        | perimeter_worst, concavity_worst |\n\n### Variáveis capturadas\n\n- **Tamanho:** raio, perímetro, área  \n- **Textura:** desvio-padrão dos tons de cinza  \n- **Irregularidade de contorno:** smoothness, compactness, concavity, concave points  \n- **Simetria e complexidade fractal do contorno**\n\n### Motivações para uso desta base\n\n- Alta relevância clínica para diagnóstico precoce e triagem.  \n- Qualidade e consistência amplamente validadas.  \n- Desafio binário com leve desbalanceamento, ideal para métricas robustas.  \n- Facilita comparação com trabalhos acadêmicos prévios.\n\n---\n\n## IV. Exploração e Preparação dos Dados\n\n- Checagem inicial: dimensões, tipos, valores faltantes e duplicados.  \n- Balanceamento: proporção 357 benignos : 212 malignos, com amostragem estratificada.  \n- Análise de correlação: heatmap para identificar pares com correlação alta (|r| \u003e 0.9), por exemplo, `radius_mean`, `perimeter_mean`, `area_mean`.  \n- Seleção de atributos: priorização das variáveis com sufixo `_mean`, descartando `_se` e `_worst` para reduzir multicolinearidade.  \n- Padronização: aplicação do `StandardScaler()` do sklearn.  \n- Divisão treino/teste: 75% treino · 25% teste, com `random_state=10` e estratificação.\n\n---\n\n## V. Hipóteses e Justificativa Biológica\n\n| Hipótese | Descrição                                                                                      |\n|----------|------------------------------------------------------------------------------------------------|\n| H1       | Pleomorfismo nuclear — tumores malignos exibem maior variação no `radius_mean` e `area_mean`. |\n| H2       | Irregularidade de contorno — aumento do `perimeter_mean` refletindo formas invaginadas.       |\n| H3       | Agrupamento em PCA — separação clara entre benigno e maligno.                                 |\n| H4       | Performance do K-NN — distância separa amostras benignas e malignas eficientemente.            |\n\n---\n\n## VI. Variáveis Principais\n\n| Variável           | Descrição Técnica              | Relevância Clínica/Biológica                           |\n|--------------------|-------------------------------|-------------------------------------------------------|\n| `radius_mean`      | Média do raio do núcleo        | Núcleos malignos tendem a ser maiores                  |\n| `texture_mean`     | Desvio-padrão dos tons de cinza | Cromatina heterogênea em tumores malignos              |\n| `perimeter_mean`   | Média do perímetro do contorno | Reflete tamanho e irregularidade nuclear               |\n| `area_mean`        | Média da área do núcleo        | Área aumentada indica maior atividade tumoral          |\n| `smoothness_mean`  | Variação local do raio         | Bordas irregulares típicas de células agressivas       |\n| `concavity_mean`   | Profundidade média das concavidades | Concavidades refletem invaginações nucleares           |\n| `concave points_mean` | Número médio de pontos côncavos | Marcas de contornos recortados em malignidades         |\n| `symmetry_mean`    | Assimetria média               | Assimetria nuclear correlaciona-se ao grau de diferenciação |\n| `fractal_dimension_mean` | Complexidade fractal do contorno | Alto valor indica desorganização estrutural extrema     |\n\n*(Demais variáveis com sufixos `_se` e `_worst` estão no dataset completo.)*\n\n---\n\n## OBS: Que restrições ou condições foram impostas para selecionar os dados?\n\nEmbora tenha utilizado o dataset completo, foram definidas condições para a seleção de features que alimentaram meu modelo final. A principal condição foi a redução de multicollinearidade. Com base nas análises dos mapas de calor, logo foi dedicido por remover um conjunto de características (`droplist_final`) que eram altamente correlacionadas, com o objetivo de evitar redundância, simplificar o modelo e torná-lo mais estável.\n\n---\n\n## VII. Modelagem com K-NN\n\n| Etapa          | Detalhe                                          |\n|----------------|-------------------------------------------------|\n| Divisão de dados | 75% treino · 25% teste, estratificado           |\n| Padronização    | `StandardScaler()` — z-score                      |\n| Seleção de k    | Teste de k = 1 a 14; k = 7 é o mais indicado     |\n| Modelo final    | `KNeighborsClassifier(n_neighbors=7)` (distância Euclidiana) |\n\n---\n\n## VIII. Resultados\n\n### Matriz de Confusão (k = 7)\n\n|                 | Predito: Benigno | Predito: Maligno |\n|-----------------|------------------|------------------|\n| **Real: Benigno**  | 89 (VN)          | 2 (FP)           |\n| **Real: Maligno**  | 4 (FN)           | 48 (VP)          |\n\n### Métricas Principais\n\n| Métrica                | Valor  |\n|------------------------|--------|\n| Acurácia               | 0.9580 |\n| Matthews Correlation (MCC) | 0.9090 |\n| AUC-ROC                | 0.9968 |\n| Precisão (Benigno/Maligno) | 0.96 / 0.96 |\n| Recall (Benigno/Maligno) | 0.98 / 0.92 |\n| F1-Score (Benigno/Maligno) | 0.97 / 0.94 |\n\n---\n\n## IX. Interpretação dos Resultados\n\n- Alta sensibilidade (92%) para tumores malignos reduz falsos-negativos.  \n- Especificidade elevada (98%) minimiza falsos-positivos.  \n- MCC elevado demonstra predições confiáveis em conjunto desbalanceado, sugerindo a exclusão de overfitting.  \n- AUC próxima a 1 reflete poder discriminativo excepcional.  \n- Pipeline de pré-processamento (seleção de variáveis e normalização) foi decisivo para estabilidade e performance.\n\n---\n\n## X. Próximos Passos\n\n- Ajuste de limiar via `predict_proba` para minimizar falsos-negativos.  \n- Testar algoritmos com penalização assimétrica (SVM, Random Forest, XGBoost).  \n- Avaliar importância de features por permutação (SHAP/LIME).  \n- Validar em dados externos e cross-validation estratificada.  \n- Explorar redes neurais (CNN) e XAI para classificação direta em imagens.\n\n---\n\n## XI. Conclusão\n\nA aplicação criteriosa do K-NN, com foco em seleção de atributos relevantes e pré-processamento rigoroso, atingiu acurácia de 95,8%, AUC de 0.9968 e MCC de 0.9090. O modelo mostrou-se robusto e promissor como ferramenta de triagem diagnóstica não invasiva de câncer de mama.\n\n---\n\n## Licença\n\nEste projeto faz parte das atividades acadêmicas da disciplina de Análise de Dados e Boas Práticas como parte da Especialização em Data Science \u0026 Analytics da PUC-Rio, com fins educacionais e científicos.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadsondeluna%2Fmvp_pucrio_data_analysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmadsondeluna%2Fmvp_pucrio_data_analysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadsondeluna%2Fmvp_pucrio_data_analysis/lists"}