A modelagem preditiva utiliza dados históricos para identificar padrões e estimar eventos futuros, apoiando a tomada de decisão. Na saúde pública, contribui para antecipar riscos, fortalecer sistemas de alerta precoce e orientar ações preventivas.
A previsão no sector da saúde é fundamental para antecipar riscos, reduzir impactos de surtos e melhorar a resposta dos serviços de saúde. Ao permitir a identificação precoce de períodos e áreas de maior risco, a previsão apoia o planeamento estratégico, a alocação eficiente de recursos e a implementação oportuna de medidas preventivas. Dessa forma, contribui para a proteção da população, o fortalecimento da vigilância epidemiológica e a tomada de decisão baseada em evidências.
Ciclo de um Algoritmo preditivo
Aprendizado de Maquina ou Machine Learning
Machine Learning é um ramo da inteligência artificial que se baseia no desenvolvimento de algoritmos capazes de aprender padrões automaticamente a partir dos dados, sem necessidade de programação explícita para cada situação. Esses métodos identificam relações complexas e não lineares entre variáveis, tornando-se especialmente úteis quando os fenómenos analisados são influenciados por múltiplos fatores interligados.
Etapas do Desenvolvimento
Preparação dos Dados
Reunir todas as fontes de informação em uma única base de dados limpa e organizada. Tratar valores ausentes, duplicados e inconsistências.
Definição dos Rótulos (Labels)
Determinar a variável alvo que o modelo deverá prever ou classificar. Exemplo: ocorrência de surto, nível de risco, número de casos.
Treinamento dos Modelos
Desenvolver vários algoritmos de Machine Learning utilizando os dados históricos. Durante essa etapa, os modelos “aprendem” padrões e relações presentes nos dados.
Validação dos Modelos
Avaliar o desempenho dos modelos em dados não utilizados no treinamento. Métricas comuns: acurácia, sensibilidade, especificidade, erro médio.
Seleção do Modelo Preditivo
Comparar os modelos treinados e escolher o que apresenta melhor desempenho. Este modelo selecionado será utilizado para fazer previsões em novos dados.
Previsão
Aplicar o modelo preditivo em dados futuros ou desconhecidos para antecipar eventos ou classificar riscos.
Tipos de Aprendizado
Existem 3 tipos de aprendizado de maquina principais:
Aprendizado Supervisionado
O Aprendizado Supervisionado é uma técnica de Machine Learning em que o modelo aprende a partir de dados rotulados, ou seja, conjuntos de dados em que a variável alvo já é conhecida. O objetivo é treinar o modelo para prever ou classificar novos casos com base em padrões aprendidos.
Características principais:
Os dados de entrada incluem variáveis explicativas (features) e rótulos (labels).
O modelo ajusta seus parâmetros para minimizar a diferença entre as previsões e os valores reais.
Amplamente utilizado em problemas de:
Classificação: prever categorias, como risco baixo/médio/alto ou ocorrência de surto.
Regressão: prever valores contínuos, como número esperado de casos ou incidência de doenças.
Exemplbos em saúde pública:
Prever a probabilidade de um surto de malária em determinado distrito.
Estimar a quantidade de casos semanais de dengue com base em variáveis climáticas.
Classificar regiões quanto ao nível de vulnerabilidade a doenças sensíveis ao clima.
O aprendizado supervisionado é uma das abordagens mais utilizadas em saúde, pois permite gerar previsões confiáveis quando há dados históricos rotulados disponíveis.
Aprendizado Não Supervisionado
O Aprendizado Não Supervisionado é uma técnica de Machine Learning em que o modelo trabalha com dados não rotulados, ou seja, não existe uma variável alvo conhecida. O objetivo é identificar padrões, estruturas ou agrupamentos presentes nos dados sem orientação externa.
Características principais:
O modelo procura semelhanças e diferenças entre as observações para formar grupos ou detectar anomalias.
Não há “resposta correta” conhecida, portanto não há treinamento supervisionado.
Útil para exploração de dados, segmentação e descoberta de padrões ocultos.
Exemplos em saúde pública:
Agrupamento (Clustering): identificar grupos de distritos com padrões semelhantes de incidência de doenças.
Detecção de anomalias (Outlier Detection): identificar semanas ou regiões com número de casos muito diferente do esperado.
Redução de dimensionalidade (PCA, t-SNE): simplificar dados complexos, combinando variáveis climáticas e epidemiológicas para análise visual ou modelagem posterior.
O aprendizado não supervisionado é especialmente útil quando os dados são abundantes, mas os resultados não estão previamente classificados, permitindo descobrir relações e padrões que podem orientar decisões e estratégias em saúde pública.
Aprendizado por Reforço
O Aprendizado por Reforço (Reinforcement Learning – RL) é uma abordagem de Machine Learning em que um agente aprende a tomar decisões em um ambiente para maximizar uma recompensa cumulativa. Diferentemente do aprendizado supervisionado, o modelo não recebe rótulos ou respostas corretas, mas sim feedback baseado nas ações tomadas.
Características principais:
O agente interage com o ambiente, tomando ações e recebendo recompensas ou penalidades.
O objetivo é aprender uma política ótima, ou seja, a melhor sequência de decisões para alcançar um resultado desejado.
Muito utilizado em problemas de otimização e planejamento dinâmico, onde decisões sequenciais impactam o resultado final.
Exemplos em saúde pública:
Otimização da distribuição de recursos médicos, como vacinas ou medicamentos, para minimizar surtos.
Planejamento de estratégias de intervenção em epidemias, ajustando ações ao longo do tempo com base no impacto observado.
Modelagem de fluxos hospitalares para reduzir tempo de espera e melhorar atendimento.
O aprendizado por reforço é particularmente útil quando os problemas envolvem decisões sequenciais complexas, com múltiplos fatores interagindo ao longo do tempo, permitindo que sistemas inteligentes aprendam estratégias eficazes a partir de experiência simulada ou real.
Prática
Análise de Regressão
# Bibliotecaslibrary(readxl)library(dplyr)
Warning: pacote 'dplyr' foi compilado no R versão 4.4.3
Anexando pacote: 'dplyr'
Os seguintes objetos são mascarados por 'package:stats':
filter, lag
Os seguintes objetos são mascarados por 'package:base':
intersect, setdiff, setequal, union
library(ggplot2)
Warning: pacote 'ggplot2' foi compilado no R versão 4.4.3
library(broom)
Warning: pacote 'broom' foi compilado no R versão 4.4.3
# 1. Carregar dadosmalaria <-read_excel("base_treino_malaria.xlsx")# Visualizar primeiras linhashead(malaria)
# A tibble: 6 × 8
provincia semana ano tmin tmax rh tp casos_malaria
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Sul 1 2021 19 30.9 54.5 24.9 72
2 Sul 2 2021 20.9 30.6 61.9 20.5 68
3 Sul 3 2021 18.4 29 65.4 30.4 78
4 Sul 4 2021 16 27.4 58.8 29.8 88
5 Sul 5 2021 20.6 31.4 55.3 27.7 90
6 Sul 6 2021 19.9 29.3 60.9 29.4 70
# 2. Análise Exploratória# Resumo estatístico e estrutura dos dadossummary(malaria)
provincia semana ano tmin
Length:468 Min. : 1.00 Min. :2021 Min. :13.30
Class :character 1st Qu.: 39.75 1st Qu.:2021 1st Qu.:18.20
Mode :character Median : 78.50 Median :2022 Median :19.90
Mean : 78.50 Mean :2022 Mean :19.96
3rd Qu.:117.25 3rd Qu.:2023 3rd Qu.:21.82
Max. :156.00 Max. :2023 Max. :26.90
tmax rh tp casos_malaria
Min. :23.90 Min. :40.00 Min. : 0.00 Min. : 17.00
1st Qu.:29.77 1st Qu.:56.50 1st Qu.:13.28 1st Qu.: 70.75
Median :32.00 Median :65.00 Median :30.10 Median : 99.00
Mean :31.98 Mean :64.85 Mean :30.89 Mean :100.44
3rd Qu.:34.30 3rd Qu.:72.92 3rd Qu.:46.15 3rd Qu.:128.00
Max. :40.80 Max. :90.30 Max. :80.10 Max. :193.00
# A tibble: 3 × 6
provincia Minimo Mediana Maximo Media SD
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Centro 40 96 156 97.1 23.4
2 Norte 99 142 193 142. 23.5
3 Sul 17 61.5 105 62.1 21.1
# 2a. Boxplot dos casos por provínciaggplot(malaria, aes(x =factor(provincia), y = casos_malaria)) +geom_boxplot(fill ="lightblue", alpha =0.7) +stat_summary(fun = mean, geom ="point", color ="red", size =3) +labs(x ="Província",y ="Casos de Malária",title ="Distribuição dos Casos de Malária por Província" ) +theme_minimal()
# 2b. Dispersão: Casos de Malária vs Temperatura Máximaggplot(malaria, aes(x = tmax, y = casos_malaria)) +geom_point(color ="blue", alpha =0.6, size =2) +geom_smooth(method ="lm", color ="red", se =TRUE) +labs(x ="Temperatura Máxima (°C)",y ="Casos de Malária",title ="Dispersão entre Temperatura Máxima e Casos de Malária" ) +theme_minimal()
`geom_smooth()` using formula = 'y ~ x'
# 2c. Dispersão com Facetas por Provínciaggplot(malaria, aes(x = tmax, y = casos_malaria)) +geom_point(color ="blue", alpha =0.6, size =2) +geom_smooth(method ="lm", color ="red", se =TRUE) +labs(x ="Temperatura Máxima (°C)",y ="Casos de Malária",title ="Dispersão entre Temperatura Máxima e Casos de Malária por Província" ) +theme_bw() +facet_wrap(~provincia)
# 3. Modelo de Regressão Linear Simplesmodelo_1 <-lm(casos_malaria ~ tp, data = malaria)summary(modelo_1)
Call:
lm(formula = casos_malaria ~ tp, data = malaria)
Residuals:
Min 1Q Median 3Q Max
-54.47 -13.95 -2.19 14.38 58.03
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 48.49038 1.60846 30.15 <2e-16 ***
tp 1.68154 0.04326 38.87 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 19.36 on 466 degrees of freedom
Multiple R-squared: 0.7643, Adjusted R-squared: 0.7637
F-statistic: 1511 on 1 and 466 DF, p-value: < 2.2e-16
# 4. Modelo de Regressão Linear Múltiplamodelo_2 <-lm(casos_malaria ~ tp + tmax, data = malaria)summary(modelo_2)
Call:
lm(formula = casos_malaria ~ tp + tmax, data = malaria)
Residuals:
Min 1Q Median 3Q Max
-54.91 -13.18 -1.12 14.39 58.21
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -8.11084 15.85705 -0.511 0.609246
tp 1.42380 0.08358 17.034 < 2e-16 ***
tmax 2.01869 0.56270 3.588 0.000369 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 19.12 on 465 degrees of freedom
Multiple R-squared: 0.7706, Adjusted R-squared: 0.7696
F-statistic: 781 on 2 and 465 DF, p-value: < 2.2e-16
# Comparação entre modelosanova(modelo_1, modelo_2)
Analysis of Variance Table
Model 1: casos_malaria ~ tp
Model 2: casos_malaria ~ tp + tmax
Res.Df RSS Df Sum of Sq F Pr(>F)
1 466 174621
2 465 169918 1 4703 12.87 0.0003692 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Machine Learning
# Bibliotecaslibrary(dplyr)library(caret)
Warning: pacote 'caret' foi compilado no R versão 4.4.3
Carregando pacotes exigidos: lattice
Warning: pacote 'lattice' foi compilado no R versão 4.4.3
# Para reprodutibilidadeset.seed(123) # 1. Dividir a base em treino e teste 80% treino, 20% testeindices <-createDataPartition(malaria$casos_malaria, p =0.8, list =FALSE)treino <- malaria[indices, ]teste <- malaria[-indices, ]# 2. Treinar modelo de regressão linearmodelo_ml <-train(casos_malaria ~ tmax + tp, # Variáveis explicativasdata = treino,method ="lm")# Resumo do modelosummary(modelo_ml$finalModel)
Call:
lm(formula = .outcome ~ ., data = dat)
Residuals:
Min 1Q Median 3Q Max
-54.526 -12.468 -1.153 12.931 50.797
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -11.44737 17.50789 -0.654 0.513617
tmax 2.11254 0.62252 3.394 0.000764 ***
tp 1.41865 0.09308 15.242 < 2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 18.93 on 373 degrees of freedom
Multiple R-squared: 0.7754, Adjusted R-squared: 0.7742
F-statistic: 643.8 on 2 and 373 DF, p-value: < 2.2e-16
# 3. Previsão nos dados de testepredicoes <-predict(modelo_ml, teste)# Calcular R²R2 <-cor(predicoes, teste$casos_malaria)^2cat("R² no conjunto de teste:", round(R2, 3), "\n")
R² no conjunto de teste: 0.754
# Correlação entre previsto e observadocorrelacao <-cor(predicoes, teste$casos_malaria)cat("Correlação entre previsto e observado:", round(correlacao, 3), "\n")