Câncer do colo do útero, ou câncer cervical, é um dos cânceres mais comuns nas mulheres e se descoberto numa fase precoce, é muito provável a cura.
Tem sido cada vez mais comum a adesão da tecnologia no setor da saúde e fundamental a integração dela com os profissionais a fim de aperfeiçoar as habilidades de diagnóstico humanas com a precisão tecnológica.
Em grande parte das doenças, o diagnóstico precoce é um fator crítico para as chances de tratamento e cura; com o câncer cervical não é diferente. A fim de estudo e aprendizado, vou apresentar o modelo de predição de risco que uma paciente pode ter de adquirir a doença, fazendo o uso do aprendizado de máquina.
Conhecendo a base de dados
O conjunto de dados foi coletado no 'Hospital Universitário de Caracas' em Caracas, Venezuela em 2017 e fornecido pela UCI. Compreende informações demográficas, hábitos e registros médicos históricos de 858 pacientes. Muitas delas decidiram não responder a algumas perguntas devido a preocupações com a privacidade (valores ausentes).
São 36 atributos: (int) Age (int) Number of sexual partners (int) First sexual intercourse (age) (int) Num of pregnancies (bool) Smokes (bool) Smokes (years) (bool) Smokes (packs/year) (bool) Hormonal Contraceptives (int) Hormonal Contraceptives (years) (bool) IUD (int) IUD (years) (bool) STDs (int) STDs (number) (bool) STDs:condylomatosis (bool) STDs:cervical condylomatosis (bool) STDs:vaginal condylomatosis (bool) STDs:vulvo-perineal condylomatosis (bool) STDs:syphilis (bool) STDs:pelvic inflammatory disease (bool) STDs:genital herpes (bool) STDs:molluscum contagiosum (bool) STDs:AIDS (bool) STDs:HIV (bool) STDs:Hepatitis B (bool) STDs:HPV (int) STDs: Number of diagnosis (int) STDs: Time since first diagnosis (int) STDs: Time since last diagnosis (bool) Dx:Cancer (bool) Dx:CIN (bool) Dx:HPV (bool) Dx (bool) Hinselmann: target variable (bool) Schiller: target variable (bool) Cytology: target variable (bool) Biopsy: target variable
Os quatro testes mais frequentes para identificação do câncer cervical são: Hinselmann, Schiller, Citologia e Biópsia. Estas serão as variáveis alvo do estudo.
Desenvolvimento do modelo de predição
Carregando os dados
Primeiramente é necessário importar o conjunto de dados. Neste estudo utilizei a biblioteca Pandas, que permite a importação e leitura de arquivos .csv por meio do pd.read_csv().
As bibliotecas utilizadas são mostradas na imagem abaixo:
Limpando os dados
O primeiro passo é eliminar as colunas não fundamentais que possuem muitos dados faltantes, neste caso são: 'STDs: Time since first diagnosis','STDs: Time since last diagnosis'.
O próximo passo, é separar os atributos numéricos de atributos categóricos:
Substituir as respostas "?" por "NaN" (Not a Number):
E preencher os valores numéricos faltantes com a média daquele atributo, assim os dados numéricos estarão presentes:
Por último, é feita a conversão dos dados categóricos para numéricos (0 para negativo, 1 para positivo) e a a separação das colunas de nossas variáveis alvo, que são os exames de Hinselmann, Schiller, Citologia e Biópsia.
Explorando os dados para análise
Para a visualização quantitativa dos dados categóricos, é utilizado o catplot, da biblioteca de visualização de dados estatísticos seaborn.
Dentre todos os gráficos gerados, observa-se que o gráfico de 'Contraceptivos Hormonais' destaca-se pelo alto número de registros positivos, o que indica ser um importante atributo na detecção do câncer de colo de útero.
Analisando a relação do uso de contraceptivos hormonais, com os resultados dos 4 exames (nossas variáveis alvo), nota-se que há uma quantidade significativa de resultados positivos nestes exames, indicando uma forte correlação do uso deles com o risco do câncer cervical:
Para saber se a quantidade de tempo de uso dos contraceptivos hormonais, aumentam ou não o risco do câncer, é necessário visualizar a relação dos testes com esse tempo:
Acima é possível notar que o uso de contraceptivos hormonais por mais de 5 anos causa maior risco de câncer cervical. E que os pequenos picos entre 10 e 15 anos de uso, evidenciam um risco bem maior em relação as mulheres que não fazem o uso.
Já o uso do DIU (Dispositivo intrauterino) pode influenciar? Vamos ver.
A grande distribuição de resultados negativos nos testes, mostra que o uso do DIU pode tornar menor o risco de câncer de colo de útero.
Outro dado a ser explorado é o fator Idade das mulheres, neste caso são utilizados gráficos de densidade, que permitem a visualização da relação entre a idade das pacientes do nosso conjunto de dados com os resultados de cada um dos exames de diagnóstico.
Os gráficos acima indicam que a média de idade das pacientes no grupo que enfrentam o risco de câncer cervical é de 26 anos, ou seja, são observados muitos resultados positivos entre 20 e 35 anos de idade. Merece destacar também um número bem significativo em mulheres com idade média de 50 anos.
Múltiplos parceiros sexuais, também indica um fator de risco, já que a paciente está mais propensa a contrair HPV dentre outras DSTs. Vamos visualizar estes dados:
Além disso, primeiras relações sexuais precocemente, mostrou-se um importante fator de risco:
O mesmo vale para o cigarro. Pacientes que têm fumado por 5 anos ou mais, mostram-se com maior risco em relação as que não fumam.
Fatores considerados de risco são: HPV, sexo sem proteção, múltiplos parceiros sexuais, primeiras relações sexuais em idade precoce, já que estão condições tornam a mulher mais propensa a contrair HPV e desenvolver câncer cervical. Pessoas com um sistema imunológico muito fraco, como aqueles com síndrome da imunodeficiência adquirida (SIDA) também tem um risco maior de ter câncer cervical. Outros fatores que aumentam o risco de desenvolver esse câncer são fumar e possuir histórico de doenças sexualmente transmissíveis.
Construção do modelo de machine learning
Para a construção do modelo de machine learning, vamos começar por separar as nossas variáveis alvo do conjunto de dados principal.
A função 'cancer_risk' é responsável por retornar a soma das variáveis alvo, ou seja, a presença de resultados de exames positivos para cada paciente. São estes valores que indicam o grau de risco de ter câncer cervical sendo 0 um risco muito baixo e 4 um risco muito alto. Aplicando a função é possível observar a contagem de pacientes em cada faixa de risco.
Como o risco mais alto (4) possui apenas 6 pontos fica mais difícil treinar o modelo, mas a técnica de "Synthetic Minority Oversampling Technique" ou "SMOTE", ajuda a superar este desbalanceamento. O SMOTE funciona selecionando exemplos que estão próximos no espaço de recurso, desenhando uma linha entre os exemplos no espaço de recurso e desenhando uma nova amostra em um ponto ao longo dessa linha.
No código abaixo, são criados os modelos de machine learning de Logistic Regression, Support Vector Machine e Random Forest.
O próximo passo está em aplicar o SMOTE e realizar a validação cruzada no conjunto de dados.
Os resultados são: LogisticRegMulti: 0.546 (0.028) LogisticRegOVR: 0.526 (0.035) svm_linear: 0.393 (0.088) svm_rbf: 0.856 (0.008) RandomForest: 0.947 (0.004)
Agora é feita a criação de um modelo com RandomForestClassifier para realizar as predições do grau de risco do câncer cervical:
Também criei uma função onde passo o array de dados da paciente como parâmetro, faço a predição e aplico a classificação:
Testando a predição de risco de câncer cervical
Por último, é realizado o teste do modelo de predição para a classificação do grau de risco das pacientes. Abaixo observa-se o exemplo com duas pacientes.
Considerações finais
O câncer de colo do útero quando diagnosticado em fase não invasiva ou em estágio I tem altas chances de cura (entre 80 e 90%). Portanto é necessário que as mulheres sejam permanentemente orientadas sobre os fatores de risco para o desenvolvimento desta doença, além de fazer avaliações ginecológicas periodicamente.
Dada a importância do diagnóstico precoce, temos a tecnologia como aliada do médico para auxiliar em diagnósticos cada vez mais precisos, tornando o machine learning na saúde um assistente pessoal, para otimizar processos e salvar vidas.