Uso de Machine Learning para predição de pacientes de alto custo no Sistema Único de Saúde (SUS) -

Impacto econômico de doenças crônicas como uma questão de competitividade nacional (Aplicações em Healthcare #1)

Renata Galdino
10 min readFeb 5, 2019
Photo by rawpixel on Unsplash

Análises do setor de saúde têm confirmado que uma pequena parcela de indivíduos com condições crônicas consome a maior parte dos recursos destinados ao tratamento destas doenças.

Fonte: National Center for Chronic Disease Prevention and Health Promotion (https://www.cdc.gov/chronicdisease/about/costs/index.htm)

O artigo “The biggest health challenge of the 21st century — and how little we know about it”, indica que aproximadamente 70% dos gastos com assistência médica nos Estados Unidos são de pessoas com duas ou mais condições crônicas.

Neste sentido, para alcançar os objetivos básicos do setor de melhorar a qualidade, reduzir os custos e melhorar a experiência do paciente, o sistema de saúde deve focar-se em modelos orientados à atuação proativa com foco em intervenção nos pacientes que possuem maior risco de migração para o grupo de alto custo.

Abordagens focadas em populações específicas e com informações íntegras permitem que os tomadores de decisão entendam as necessidades de acordo com cada grupo avaliado e planejem ações direcionadas, de forma a reduzir custos e melhorar a qualidade dos serviços prestados.

Assim, o uso extensivo de técnicas de machine learning seria de extrema utilidade na identificação precisa dos potenciais pacientes crônicos de alto custo com o objetivo de realizar intervenções e procedimentos de wellness antes que estes se tornem custosos para o sistema de saúde.

Desta forma, a ideia deste estudo foi testar vários algoritmos para modelar com precisão a probabilidade de um indivíduo ser um futuro paciente de alto custo, dadas as características demográficas e de utilização do Sistema Único de Saúde (Datasus), com base nos registros dos anos de 2016 e 2017.

Em seguida, foi selecionado o melhor algoritmo com base nos resultados preliminares, a partir do qual foi avaliada a necessidade ou não de realizar a otimização para melhor modelagem dos dados.

Os modelos foram avaliados usando 70% da base de dados e validados com os 30% de dados restantes.

Para fins de análise, a premissa será classificar como alto custo os indivíduos com valor total gasto em procedimentos médicos acima de 5% (custo total acima do percentil de 95%).

Considerando-se tal objetivo de construir um modelo que prevê com precisão se um indivíduo é de alto custo, entender as características dos indivíduos pode ajudar a entender melhor o potencial de gastos com doenças crônicas e soluções preventivas (intervenções ou estratégias de wellness).

Os códigos deste estudo, gerados em Python, estão disponíveis no meu GitHub.

Pipeline do projeto:

Para o desenvolvimento de estudo, foram executadas as seguintes etapas:

  1. Seleção, obtenção e exploração dos dados.
  2. Pré-processamento das bases de dados:
  • Antes que os dados pudessem ser utilizados como input para os algoritmos de aprendizado, foi realizada uma avaliação de necessidade de tratamento, formatação e reestruturação das bases de dados.
  • Também foi avaliada a necessidade de transformação dos principais desvios das variáveis com dados contínuos, caso registros do mesmo atributo contenham valores discrepantes.
  • Outra transformação requerida foi a normalização de escala atributos numéricos, para garantir que cada atributo fosse tratado com o mesmo peso durante a aplicação de aprendizado supervisionado.
  • Transformação de dados categóricos em numéricos: Algoritmos de aprendizado recebem inputs numéricos, o que requer que os atributos categóricos (sexo, escolaridade etc.) sejam convertidos.
  • Embaralhamento e divisão dos dados em conjuntos de treinamento (70%) e test (30%).

3. Avaliação da performance do modelo:

  • Testes de 3 algoritmos de aprendizado supervisionado e naive predictor.
  • Análise de acurácia, precisão, sensibilidade e F1 score.

4. Criação do processo de treinamento e predição:

  • Avaliação de performance dos modelos escolhidos, de forma a treinar modelos utilizando vários tamanhos de conjuntos de dados para treinamento, além de efetuar predições nos dados de teste. Assim, será possível calcular o tempo total de predição, assim como a acurácia e o F-score para os dois conjuntos de dados (treinamento e testes).

5. Validação inicial do modelo, com diferentes tamanhos de conjuntos de dados de treinamento (ex: 1%, 5%, 10%, 50% e 100% dos dados)

6. Escolha do melhor modelo de aprendizado supervisionado, para utilizar nos dados de testes.

7. Validação final do modelo: Refinamento do modelo escolhido, de forma a obter resultados melhores, e comparação entre os resultados do modelo otimizado e o não otimizado.

8. Avaliação de relevância de atributos, de forma a determinar quais variáveis possuem maior poder de predição. Assim, com menos atributos para treinar, espera-se que o treinamento e a predição tenham um tempo reduzido de execução e, consequentemente, menor custo.

Estruturação dos Dados:

O conjunto de dados foi extraído do Sistema Único de Saúde (DATASUS), relacionado às características demográficas e internações realizadas nos 26 estados do Brasil e Distrito Federal. Neste estudo, foram avaliados cerca de 7 milhões de registros referentes aos anos de 2016 e 2017.

As doenças codificadas com CID-10 existentes na base do Datasus foram agrupadas em 18 segmentos, usando-se como referência os grupos definidos no Projeto de Custo e Utilização de Assistência Médica (HCUP), que inclui a maior coleção de dados de atendimento hospitalar dos Estados Unidos:

Grupo 1 — Algumas doenças infecciosas e parasitárias

Grupo 2— Neoplasias [tumores]

Grupo 3— Doenças endócrinas, nutricionais e metabólicas

Grupo 4— Doenças do sangue e dos órgãos hematopoéticos e alguns transtornos imunitários

Grupo 5 — Transtornos mentais e comportamentais

Grupo 6 — Doenças do sistema nervoso

Grupo 7 — Doenças do aparelho circulatório

Grupo 8—Doenças do aparelho respiratório

Grupo 9 — Doenças do aparelho digestivo

Grupo 10 — Doenças do aparelho geniturinário

Grupo 11 — Gravidez, parto e puerpério

Grupo 12 — Doenças da pele e do tecido subcutâneo

Grupo 13 — Doenças do sistema osteomuscular e do tecido conjuntivo

Grupo 14 — Malformações congênitas, deformidades e anomalias cromossômicas

Grupo 15 — Algumas afecções originadas no período perinatal

Grupo 16 — Sintomas, sinais e achados anormais de exames clínicos e de laboratório, não classificados em outra parte

Grupo 17 — Lesões, envenenamento e algumas outras consequências de causas externas

Grupo 18 — Fatores que influenciam o estado de saúde e o contato com os serviços de saúde

Após os tratamentos iniciais, a base final possuía as seguintes características:

Pré-processamento de dados

Antes que os dados pudessem ser utilizados como input para os algoritmos de aprendizado, foi realizada uma avaliação de necessidade de tratamento, formatação e reestruturação das bases de dados.

Também foi avaliada a necessidade de transformação dos principais desvios das variáveis com dados contínuos.

Outra transformação requerida foi a normalização de escala atributos numéricos, para garantir que cada atributo fosse tratado com o mesmo peso durante a aplicação de aprendizado supervisionado. Foi aplicada uma transformação de log nas variáveis contínuas e normalização dos atributos numéricos, conforme gráfico e tabela abaixo:

Após esta etapa, foi realizada a transformação de dados categóricos em numéricos, mediante conversão de variáveis categóricas por meio da estratégia “one-hot encoding”, sendo gerados 56 atributos após aplicação desta técnica.

Por último, foi feito o embaralhamento e divisão dos dados. Com todas as variáveis de categoria como atributos numéricos e todos os atributos numéricos normalizados, eu dividi os dados em conjuntos de treinamento e de teste (70% dos dados serão utilizados para treinamento e 30% para teste), gerando conjunto de treinamento com 3,697,638 amostras e conjunto de testes com 1,584,703 amostras.

Implementação

Nesta etapa, foi feita a avaliação da performance do modelo, contemplando as seguintes etapas:

  • Testes de 3 algoritmos de aprendizado supervisionado e naive predictor.
  • Análise de acurácia, precisão, sensibilidade e F1 score.

Foram escolhidos os seguintes algoritmos:

Usar a acurácia como uma métrica para avaliar a performance de um modelo é um parâmetro adequado. Assim, a habilidade do modelo em predizer com precisão aqueles que possuem alto custo é mais importante do que realizar o recall destes indivíduos. Também será utilizada a fórmula F-beta score como uma métrica que considera ambos: precision e recall.

Para o Naive Predictor foram calculados os seguintes parâmetros: Naive Predictor: [Accuracy score: 0.0500, F-score: 0.0617]

Após esta etapa, foram criados os processos de treinamento e predição, com o objetivo de avaliar a performance dos modelos escolhidos, de forma a treinar modelos utilizando vários tamanhos de conjuntos de dados para treinamento, além de efetuar predições nos dados de teste. Assim, foi possível calcular o tempo total de predição, assim como a acurácia e o F-score para os dois conjuntos de dados (treinamento e testes).

Assim, também foram executadas as seguintes atividades:

  • Importação dos três modelos de aprendizado supervisionado escolhidos.
  • Inicialização dos três modelos e armazenamento nas variáveis `’clf_A’`, `’clf_B’`, e `’clf_C’`.
  • Cálculo do número de registros equivalentes à 1%, 10%, e 100% dos dados de treinamento.
  • Armazenamento dos valores em `’amostra_1'`, `’amostra_10'`, e `’amostra_100'` respectivamente.
  • Validação inicial do modelo, com diferentes tamanhos de conjuntos de dados de treinamento (1%, 10% e 100% dos dados)
  • Escolha do melhor modelo de aprendizado supervisionado, para utilizar nos dados de testes.

Foram gerados os seguintes outputs:

Com base nos 3 modelos analisados, o DecisionTreeClassifier teve resultados bem parecidos com a Regressão Logística em termos de acurácia. Com relação ao f-score nos dados de testes, a Regressão Logística performou melhor, assim como nos tempos de predição, fazendo deste modelo um candidato adequado para o refinamento.

Refinamento

Nesta etapa, de validação final do modelo, minha ideia foi realizar o refinamento do modelo escolhido, de forma a obter resultados melhores, e comparação entre os resultados do modelo otimizado e o não otimizado.

Foi realizado o GridSearch para otimização em todo o conjunto de dados de treino (‘X_train’ e ‘y_train’) por meio do tuning de pelo menos um parâmetro, com o objetivo de verificar se é possível melhorar o F-score anterior do modelo, único parâmetro que precisaria ser melhorado.

Devido às similaridades entre os resultados, executei o GridSearch nos dois modelos. Entretanto, não obtive sucesso na geração de resultados usando a estratégia com o LogisticRegression. Após inúmeras tentativas, o GridSearch não produziu resultados para este modelo, indicando que, embora tenham valores de acurácia elevados, não é muito eficiente no tempo de processamento e consome bastante memória para a geração de resultados.

Com relação ao GridSeach com o DecisionTree, obtive os seguintes resultados:

Com base nos resultados acima, não foram observadas mudanças significativas em relação ao Accuracy Score e ao F-Score, com exceção do tempo de treinamento+predição que foi consideravelmente mais longo no modelo otimizado, fazendo com que essa seja uma opção pouco ideal neste caso. Some-se isso ao fato de não ter sido bem-sucedida na obtenção do modelo otimizado com o Logistic Regression, realmente não traria grande benefícios usar o modelo otimizado.

Cabe destacar que, quando comparado com o Naive Predictor (Accuracy score: 0.0500, F-score: 0.0617), os resultados dos modelos avaliados (tanto não otimizado quanto otimizado) melhoraram consideravelmente.

Avaliação de Relevância dos Atributos

Nesta etapa, resolvi realizar a avaliação de relevância de atributos, de forma a determinar quais variáveis possuem maior poder de predição. Assim, com menos atributos para treinar, espera-se que o treinamento e a predição tenham um tempo reduzido de execução (bastante relevante neste caso) e, consequentemente, menor custo.

Utilizei neste caso o Adaboost, tendo em vista que a regressão logística não possui feature_importance.

Com base no gráfico acima, verificou-se que os atributos que possuem pesos importantes na identificação de pacientes de alto custo são:

  • VAL_UTI — valor de UTI, resultado bastante óbvio, tendo em vista os altos custos neste tipo de internação (aproximadamente 28% do peso).
  • QT_DIARIAS — quantidade de diárias, resultado esperado, também de acordo com o item anterior (aproximadamente 15% do peso).
  • BODY_SYSTEM_2 — Grupo de doenças crônicas 02 (Neoplasias [tumores])(aproximadamente 5% do peso).
  • UF_29 — Bahia (aproximadamente 2% do peso).
  • SEXO_3 — Feminino (aproximadamente 2% do peso).

Levando-se em consideração o F-score do modelo final e o accuracy score do conjunto de dados reduzido utilizando apenas cinco atributos, verificou-se que houve pouca diferença entre o accuracy score e uma redução de 5% para o f-score em relação ao conjunto completo.

Como o tempo de treinamento é uma variável superimportante, tendo em vista que os modelos otimizados não rodaram pela estratégia de GridSearch, torna-se imprescindível a utilização de um conjunto reduzido de dados para uma maior eficiência.

Embora uma das etapas não tenha sido concluída para um dos modelos avaliados (Logistic Regression), acredito que este estudo tenha trazido insights importantes acerca do perfil requerido para a avaliação de pacientes de alto custo com base no Datasus.

De acordo com o artigo “The Economic Impact of Chronic Disease is a Matter of National Competitiveness”, a capacidade de uma economia nacional crescer de forma próspera está em jogo quando se trata de custos com saúde.

E essa capacidade é refletida tanto no setor público quanto privado. Como exemplo, Warren Buffet, Jamie Dimon e Jeff Bezos se uniram para criar uma empresa no setor da saúde, cuja meta é reduzir os gastos de saúde com funcionários das empresas Berkshire Hathaway, JP Morgan e Amazon. Certamente, os custos com doenças crônicas farão parte da estratégia da empresa.

Os códigos deste estudo, gerados em Python, estão disponíveis no meu GitHub.

Gostou? Clique nos aplausos — eles vão de 1 a 50 — e deixe o seu comentário!❤

Nos siga no Facebook, Instagram e no nosso Site.

--

--

Renata Galdino

Responsável pelo blog Seshat Analytics (www.seshatanalytics.com.br) com objetivo de promover o uso de técnicas avançadas de Data Science, Machine Learning e AI.