Utilizando Machine Learning para detectar câncer de mama
Este artigo foi escrito com o objetivo de analisar dados de exames de pacientes diagnosticadas com câncer de mamas e utilizar algoritmos para prever o tipo de câncer (benigno ou maligno) de acordo com os valores de teste.
Também conhecido como neoplasia, o câncer de mama é caracterizado pelo crescimento de células cancerígenas na mama. Segundo dados do Instituto Nacional do Câncer (INCA), é o segundo tumor mais comum entre as mulheres, atrás apenas para o câncer de pele, e o primeiro em letalidade.
Algumas medidas preventivas podem ser tomadas, de acordo com o Ministério da Saúde:
Segundo o Instituto Nacional do Câncer (Inca), as formas mais eficazes para detecção precoce do câncer de mama são o exame clínico da mama e a mamografia. Para o controle do câncer de mama, é recomendado que as mulheres realizem exames periodicamente, mesmo que não tenham alterações. É necessário que a mulher conheça o próprio corpo e caso veja alguma alteração, já procure atendimento médico, pois o exame das mamas realizado pela própria mulher não substitui o exame físico realizado por profissional de saúde em atendimento hospitalar qualificado para essa atividade. O diagnóstico precoce aumenta a chance de cura do câncer de mama.
O dataset foi retirado do Kaggle e faz parte do repositório da UCI Machine Learning. As colunas são cálculos feitos a partir de uma imagem digitalizada do exame fine needle aspirate (FNA) de uma massa mamária. Elas descrevem as características dos núcleos celulares presentes na imagem.
Os valores computados são:
a) raio (média das distâncias do centro aos pontos do perímetro)
b) textura (desvio padrão dos valores da escala de cinza)
c) perímetro
d) área
e) suavidade (variação local nos comprimentos dos raios)
f) compactação (perímetro ^ 2 / área — 1,0)
g) concavidade (severidade das porções côncavas do contorno)
h) pontos côncavos (número de porções côncavas do contorno)
i) simetria
j) dimensão fractal (“aproximação da linha costeira” — 1)
Iremos começar o nosso projeto importando a biblioteca Pandas, para ler os dados e realizar um pré-processamento.
Estas são as 5 primeiras linhas do nosso dataset:
Em seguida, iremos buscar por valores nulos.
De todas as colunas, apenas uma possui:
Portanto, podemos excluí-la do nosso dataset. Isso só é possível pois há uma grande quantidade de valores "perdidos" e em apenas uma coluna. Caso ocorresse em outras, teríamos que realizar um tratamento diferenciado para tentar preencher estas lacunas.
Seguindo adiante, excluiremos a coluna e criaremos um novo DataFrame:
A coluna que excluímos é a última no nosso dataset.
Agora, podemos utilizar uma função chamada de Label Encoder a fim de fazer um "encode" na nossa variável target, a qual pretendemos utilizar para o diagnóstico e transformar seus valores em 0 e 1.
Com isto, temos que o benigno será 0 e o maligno 1.
A matriz de confusão abaixo indica as métricas de perfomance do nosso algoritmo, cruzando os resultados preditos com as classes originais observadas.
Essa matriz de confusão nos diz que nosso algoritmo acertou 88 Verdadeiros Positivos (no nosso caso, malignos), 8 Falsos Positivos (previu malignos, porém são benignos), 3 Falsos Negativos (previu benignos, mas são malignos) e 44 Verdadeiros Negativos (benignos).
Esta é a métrica de perfomance do nosso algoritmo, descrito logo abaixo.
Após concluir nosso pré-processamento e análise inicial, partiremos para o algoritmo de Machine Learning.
O escolhido foi o SVM. Iremos utilizar o train test split, um método de dividir arrays ou matrizes em conjuntos de treino e subconjuntos de teste aleatórios.
Separamos o nosso dataset em dados de treino e de teste, o x indica as colunas das características do exame, enquanto o y é o nosso valor alvo, ou seja, o diagnóstico.
Com isso, o algoritmo irá se "adaptar" a estes dados e fazer a predição.
A acurácia deste modelo é:
Obrigada por ter chegado até aqui, espero que tenha gostado!
Github: https://bit.ly/3oKANuv
Portfólio: https://bit.ly/3vh4PIO