Skip to content

Exploração de Dados

Descrição da base de dados e código de exploração

O câncer de mama é o tipo de câncer mais comum entre mulheres em todo o mundo, responsável por aproximadamente 25% de todos os casos e afetando milhões de pessoas todos os anos. Ele se desenvolve quando células da mama começam a crescer de forma descontrolada, formando tumores que podem ser identificados por exames de imagem (raios-X) ou detectados como nódulos.

O principal desafio no diagnóstico é diferenciar corretamente os tumores malignos (cancerosos) dos benignos (não cancerosos). O objetivo deste projeto é desenvolver um modelo de classificação supervisionada capaz de prever, com base em atributos numéricos das células, se um tumor é maligno ou benigno.

Sobre o Dataset

Total de registros: 569 amostras

Variável alvo: diagnosis (M = maligno, B = benigno)

Número de variáveis preditoras: 30 atributos numéricos relacionados ao tamanho, textura, formato e concavidade das células

import matplotlib.pyplot as plt
import pandas as pd
from io import StringIO
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score
from tabulate import tabulate  


#carregamento da base
df = pd.read_csv('https://raw.githubusercontent.com/MariaLuizazz/MACHINE-LEARNING-PESSOAL/refs/heads/main/dados/breast-cancer.csv')
print(df.sample(n=10, random_state=42).to_markdown(index=False))
id diagnosis radius_mean texture_mean perimeter_mean area_mean smoothness_mean compactness_mean concavity_mean concave points_mean symmetry_mean fractal_dimension_mean radius_se texture_se perimeter_se area_se smoothness_se compactness_se concavity_se concave points_se symmetry_se fractal_dimension_se radius_worst texture_worst perimeter_worst area_worst smoothness_worst compactness_worst concavity_worst concave points_worst symmetry_worst fractal_dimension_worst
87930 B 12.47 18.6 81.09 481.9 0.09965 0.1058 0.08005 0.03821 0.1925 0.06373 0.3961 1.044 2.497 30.29 0.006953 0.01911 0.02701 0.01037 0.01782 0.003586 14.97 24.64 96.05 677.9 0.1426 0.2378 0.2671 0.1015 0.3014 0.0875
859575 M 18.94 21.31 123.6 1130 0.09009 0.1029 0.108 0.07951 0.1582 0.05461 0.7888 0.7975 5.486 96.05 0.004444 0.01652 0.02269 0.0137 0.01386 0.001698 24.86 26.58 165.9 1866 0.1193 0.2336 0.2687 0.1789 0.2551 0.06589
8670 M 15.46 19.48 101.7 748.9 0.1092 0.1223 0.1466 0.08087 0.1931 0.05796 0.4743 0.7859 3.094 48.31 0.00624 0.01484 0.02813 0.01093 0.01397 0.002461 19.26 26 124.9 1156 0.1546 0.2394 0.3791 0.1514 0.2837 0.08019
907915 B 12.4 17.68 81.47 467.8 0.1054 0.1316 0.07741 0.02799 0.1811 0.07102 0.1767 1.46 2.204 15.43 0.01 0.03295 0.04861 0.01167 0.02187 0.006005 12.88 22.91 89.61 515.8 0.145 0.2629 0.2403 0.0737 0.2556 0.09359
921385 B 11.54 14.44 74.65 402.9 0.09984 0.112 0.06737 0.02594 0.1818 0.06782 0.2784 1.768 1.628 20.86 0.01215 0.04112 0.05553 0.01494 0.0184 0.005512 12.26 19.68 78.78 457.8 0.1345 0.2118 0.1797 0.06918 0.2329 0.08134
927241 M 20.6 29.33 140.1 1265 0.1178 0.277 0.3514 0.152 0.2397 0.07016 0.726 1.595 5.772 86.22 0.006522 0.06158 0.07117 0.01664 0.02324 0.006185 25.74 39.42 184.6 1821 0.165 0.8681 0.9387 0.265 0.4087 0.124
9012000 M 22.01 21.9 147.2 1482 0.1063 0.1954 0.2448 0.1501 0.1824 0.0614 1.008 0.6999 7.561 130.2 0.003978 0.02821 0.03576 0.01471 0.01518 0.003796 27.66 25.8 195 2227 0.1294 0.3885 0.4756 0.2432 0.2741 0.08574
853201 M 17.57 15.05 115 955.1 0.09847 0.1157 0.09875 0.07953 0.1739 0.06149 0.6003 0.8225 4.655 61.1 0.005627 0.03033 0.03407 0.01354 0.01925 0.003742 20.01 19.52 134.9 1227 0.1255 0.2812 0.2489 0.1456 0.2756 0.07919
8611161 B 13.34 15.86 86.49 520 0.1078 0.1535 0.1169 0.06987 0.1942 0.06902 0.286 1.016 1.535 12.96 0.006794 0.03575 0.0398 0.01383 0.02134 0.004603 15.53 23.19 96.66 614.9 0.1536 0.4791 0.4858 0.1708 0.3527 0.1016
911673 B 13.9 16.62 88.97 599.4 0.06828 0.05319 0.02224 0.01339 0.1813 0.05536 0.1555 0.5762 1.392 14.03 0.003308 0.01315 0.009904 0.004832 0.01316 0.002095 15.14 21.8 101.2 718.9 0.09384 0.2006 0.1384 0.06222 0.2679 0.07698

Cada ponto azul/roxo/amarelo no gráfico é um paciente representado nessas duas dimensões condensadas.

Esses componentes carregam a maior parte da variabilidade dos dados originais (30 features)

Você aplicou PCA para reduzir a dimensionalidade dos dados.

O primeiro componente principal explica ≈44,3% da variância total dos dados.

O segundo componente principal explica ≈18,97% da variância.

Isso significa que, juntos, os dois componentes capturam ≈63,2% da informação original do dataset.

Relatório do Modelo: K-Means com PCA

1. Descrição do Modelo

O modelo aplicado combina duas técnicas:

  1. PCA (Análise de Componentes Principais): usada para reduzir a dimensionalidade dos dados originais, mantendo a maior parte da variabilidade.
  2. K-Means: algoritmo de clustering que agrupa os dados em 3 clusters distintos com base na proximidade aos centróides.

O objetivo do modelo é identificar agrupamentos naturais nos dados de câncer de mama, considerando as características das células.


2. Variância Explicada pelos Componentes Principais

Componente Principal Variância Explicada Variância Acumulada
PC1 0,44272 0,44272
PC2 0,189712 0,632432
  • PC1 explica aproximadamente 44,3% da variância dos dados.
  • PC2 explica aproximadamente 18,97%.
  • Variância total explicada pelos 2 componentes: 63,24%.

Interpretação: Mais da metade da informação original dos dados é preservada nesses dois componentes, permitindo uma visualização e análise de clusters eficaz.


3. Centròides Finais dos Clusters

Os centróides identificados pelo K-Means no espaço reduzido (PCA) são:

[[ 2.67596132 3.31195566] → Cluster 1 [-2.3259273 -0.20749033] → Cluster 2 [ 4.90974577 -1.89255356]] → Cluster 3

  • Cada centróide representa o “ponto médio” de cada cluster.
  • Cada ponto do dataset é atribuído ao cluster cujo centróide está mais próximo.

4. Inércia (WCSS)

  • Inércia final: 3871,15
  • Representa a soma das distâncias quadráticas dos pontos aos seus centróides.
  • Quanto menor a inércia, mais compactos são os clusters.

Interpretação prática: A dispersão dos clusters é moderada. Para otimizar o número de clusters, pode-se usar o método do cotovelo.


5. Gráfico dos Clusters


2026-01-20T18:12:00.521753 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/
import numpy as np
import matplotlib.pyplot as plt
from io import StringIO
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import pandas as pd


df = pd.read_csv('https://raw.githubusercontent.com/MariaLuizazz/MACHINE-LEARNING-PESSOAL/refs/heads/main/dados/breast-cancer.csv')

# Features
X = df.drop(columns=['diagnosis', 'id'])



scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)


kmeans = KMeans(n_clusters=3, init='k-means++', max_iter=100, random_state=42)
labels = kmeans.fit_predict(X_pca)

# Adicionar clusters ao dataframe
df['Cluster'] = labels

plt.figure(figsize=(10, 8))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis', s=50)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
            c='red', marker='*', s=200, label='Centróides')
plt.title('Clusters após redução de dimensionalidade (PCA)')
plt.xlabel('Componente Principal 1')
plt.ylabel('Componente Principal 2')
plt.legend()
plt.show()





buffer = StringIO()
plt.savefig(buffer, format="svg", transparent=True)
print(buffer.getvalue())

6. Conclusão

  • O modelo reduziu os dados para 2 dimensões mantendo 63% da variância, facilitando visualização.
  • Foram identificados 3 clusters distintos, cada um representado por um centróide.
  • O WCSS sugere que os clusters são relativamente coesos.

  • Explorar mais componentes do PCA para capturar mais variabilidade.

  • Testar diferentes números de clusters (K) usando o método do cotovelo.
  • Investigar quais características impactam mais a separação dos clusters.