Métodos de Tomada de Decisão

Decisão, Lógica e Incerteza — MINTER/DINTER

Prof. Marcelo R.P. Ferreira/Prof. Hemílio F.C. Coelho

PPGMDS - UFPB - Programa de Pós-Graduação em Modelos de Decisão e Saúde

julho, 2026

Métodos de Tomada de Decisão

“A boa decisão não é a que garante o melhor resultado, mas a que é tomada da melhor forma possível com a informação disponível.”

— adaptado de H. A. Simon

Como esta aula se encaixa

O que vocês já viram

  • Com a Profª. Cristina Kátya/Juliana Sampaio: o processo decisório, modelos racional e não-racional, Simon, ambientes de decisão, hierarquia DIKW, qualidade da informação, Sistemas de Informação e SIS do SUS, e os tipos de raciocínio (dedutivo, indutivo, abdutivo, probabilístico)
  • Em Aprendizagem de Máquina: como modelos aprendem padrões a partir de dados

O que faremos hoje

  • Quantificar a decisão: probabilidade, Bayes e utilidade esperada
  • Formalizar o raciocínio: lógica clássica e sistemas baseados em regras
  • Tratar a imprecisão: lógica fuzzy
  • Tratar a incerteza: redes bayesianas
  • Amarrar tudo com o que vocês já viram em Aprendizagem de Máquina

Mapa do Dia

Decisão, Lógica e Incerteza 2 turnos · 4h cada Bloco 1 · Turno 1 Decisão sob risco Utilidade esperada · SAD Bloco 2 · Turno 1 Probabilidade e Bayes Sensibilidade · VPP Bloco 3 · Turno 1 Lógica clássica Sistemas especialistas Blocos 4–6 Turno 2 Lógica fuzzy · Redes bayesianas definição + muitos exemplos clínicos Ponte com Aprendizagem de Máquina

Combinado sobre o conteúdo

  • Toda fórmula será lida em português antes de ser usada
  • Todo código em R é demonstração — vocês não precisam saber programar para acompanhar
  • O que importa é: o que o método faz, quando usar e como interpretar o resultado
  • Perguntem na hora.

Se em algum momento a notação matemática travar o raciocínio, me interrompam. O objetivo não é decorar fórmula — é entender o que ela diz.

Bloco 1 — Da decisão descrita à decisão calculada

Retomando: os ambientes de decisão

Ambiente O que sei sobre os desfechos Exemplo em saúde
Certeza Sei exatamente o que vai acontecer Preço e prazo de seringas em contrato
Risco Não sei o desfecho, mas conheço as probabilidades Cirurgia com 5% de mortalidade tabelada
Incerteza Não conheço nem as probabilidades Início de uma epidemia nova

Importante

O bloco de hoje mora no risco. É o único ambiente em que conseguimos calcular — e é onde a Medicina Baseada em Evidências opera, porque ela nos entrega as probabilidades.

As três teorias da decisão — e por que isso importa

Aspecto Normativa Descritiva Prescritiva
Pergunta Como decidir idealmente? Como as pessoas de fato decidem? Como ajudar a decidir melhor?
Base Racionalidade matemática Psicologia, observação Síntese das duas
Limitação Ignora a cognição humana Não prescreve melhorias Depende de boas evidências

O modelo racional e os modelos não-racionais que vocês viram são, respectivamente, o lado normativo e o lado descritivo. A teoria prescritiva é a ponte — e é ela que justifica a existência de um Sistema de Apoio à Decisão.

O ponto que mais gera erro: processo ≠ resultado

  • Uma decisão correta pode ter desfecho ruim por azar
  • Uma decisão mal informada pode ter desfecho bom por sorte
  • Avaliamos o processo, não apenas o resultado

Importante

Um médico que prescreve corretamente segundo toda a evidência disponível, e ainda assim o paciente tem uma reação rara e adversa, não tomou uma decisão ruim. Confundir as duas coisas tem nome: viés de resultado (outcome bias).

Decisão sob risco: a utilidade esperada

Quando conheço as probabilidades, posso calcular qual alternativa é melhor:

\[EU(A) = \sum_{i} P(O_i \mid A) \cdot U(O_i)\]

Lendo em português: a utilidade esperada de uma ação \(A\) é a soma, sobre todos os desfechos possíveis, do valor de cada desfecho multiplicado pela chance dele acontecer.

  • \(U(O_i)\)utilidade: quanto vale aquele desfecho, numa escala que nós definimos (ex.: 0 a 10)
  • \(P(O_i \mid A)\) — a probabilidade daquele desfecho, dado que escolhemos \(A\)

Exemplo: cirurgia ou medicamento?

Cirurgia: 80% de cura plena (\(U=10\)), 20% de falha (\(U=2\)) Medicamento: 100% de cura parcial (\(U=7\))

Na mão, passo a passo:

\(EU(\text{cirurgia})\) \(= 0{,}80 \times 10 + 0{,}20 \times 2\) \(= 8{,}0 + 0{,}4 = \mathbf{8{,}4}\)

\(EU(\text{medicamento})\) \(= 1{,}00 \times 7 = \mathbf{7{,}0}\)

Escolha prescritiva: cirurgia

ue_cirurgico   <- 0.8 * 10 + 0.2 * 2
ue_medicamento <- 1.0 * 7

cat(sprintf("UE Cirurgia:    %.2f\n", ue_cirurgico))
cat(sprintf("UE Medicamento: %.2f\n", ue_medicamento))
cat(ifelse(ue_cirurgico > ue_medicamento,
           "Escolha: Cirurgia", "Escolha: Medicamento"))
#> UE Cirurgia:    8.40
#> UE Medicamento: 7.00
#> Escolha: Cirurgia

A utilidade não é neutra

  • Os valores de \(U\) são escolhas — refletem preferências, valores e contexto
  • Mudar a utilidade muda a decisão

Importante

Se o paciente é um pianista profissional e a falha da cirurgia implica perda de função fina da mão, talvez \(U(\text{falha})\) não seja 2 — seja 0. Refaça a conta: \(0{,}80 \times 10 + 0{,}20 \times 0 = 8{,}0\). Ainda ganha, mas a margem cai. Se a falha valesse \(-5\), o medicamento passaria à frente.

  • É exatamente aqui que entram a sabedoria (o W do DIKW) e o valor do paciente da MBE
  • O modelo não decide — ele torna explícito o que está sendo decidido e com base em quê

Exercício 1 — Internar ou observar?

Exercício: um protocolo de triagem oferece duas condutas. Calcule a utilidade esperada de cada uma e decida.

  • Internar: 95% de resolução completa (\(U=10\)), 5% de complicação (\(U=3\))
  • Observar em casa: 80% de resolução completa (\(U=10\)), 20% de piora exigindo internação tardia (\(U=4\))
ue_internar <- 0.95*10 + 0.05*3
ue_observar <- 0.80*10 + 0.20*4

cat(sprintf("UE Internar: %.2f\nUE Observar: %.2f\n", ue_internar, ue_observar))
cat(ifelse(ue_internar > ue_observar,
           "Conduta prescritiva: Internar",
           "Conduta prescritiva: Observar em casa"))
#> UE Internar: 9.65
#> UE Observar: 8.80
#> Conduta prescritiva: Internar

Do cálculo ao sistema: dois tipos de SAD

Aspecto Orientado a Dados Orientado a Modelos
Pergunta central O que aconteceu? Qual a melhor ação?
Insumo principal Grande volume de dados históricos Lógica matemática e restrições
Técnicas típicas Painéis, mineração, OLAP Otimização, simulação, árvores de decisão
Olhar Retrospectivo Prospectivo
Exemplo em saúde Identificar comorbidades recorrentes Definir escala ótima de plantões

A Profª. Kátya/Juliana já definiu o que é um SAD e quais são seus componentes. Esta distinção é o acréscimo de hoje — e é ela que vai reaparecer no fim da aula, quando ligarmos tudo à Aprendizagem de Máquina.

Exercício 2 — Dados ou modelos?

Exercício: classifique cada cenário como SAD orientado a dados ou a modelos.

  1. Painel que identifica os 10 diagnósticos mais frequentes do último trimestre
  2. Simulação que testa o impacto de abrir mais 5 leitos de UTI no tempo de espera
  3. Sistema que agrupa pacientes por padrão de exames similares
  4. Modelo que define a escala ótima de plantonistas dentro do orçamento

Resposta: 1 — Dados · 2 — Modelos · 3 — Dados · 4 — Modelos

Bloco 2 — Probabilidade e o Teorema de Bayes

Probabilidade: conceitos básicos

  • Probabilidade mede o quanto acreditamos que um evento vai ocorrer
  • Notação: \(P(A)\), sempre entre 0 e 1
  • \(P(A) = 0\): impossível · \(P(A) = 1\): certo
  • Complementar: \(P(\bar{A}) = 1 - P(A)\)

Exemplo: se \(P(\text{diabetes}) = 0{,}08\) em adultos brasileiros, então \(P(\text{não ter diabetes}) = 0{,}92\). Só isso.

  • Probabilidade não é só frequência histórica — pode expressar o grau de crença de um especialista

Probabilidade condicional

\[P(A \mid B) = \frac{P(A \cap B)}{P(B)}\]

Lendo em português: a probabilidade de \(A\) dado que \(B\) já aconteceu.

  • A barra \(\mid\) significa “dado que” — não é divisão
  • Condicionar em \(B\) é estreitar o mundo: só os casos em que \(B\) é verdade
  • Exemplo: \(P(\text{doença} \mid \text{teste} +)\) — chance de ter a doença entre os positivos

Importante

\(P(A \mid B) \neq P(B \mid A)\) — a falácia da transposição, o erro mais comum na leitura de exames.

Independência e comorbidades

  • Se \(A\) e \(B\) são independentes: \(P(A \cap B) = P(A) \times P(B)\)
  • Ou seja: saber de um não muda nada sobre o outro

Importante

Na saúde, eventos raramente são independentes. A probabilidade de hipertensão e diabetes coexistirem não é \(P(\text{HAS}) \times P(\text{DM})\) — as duas condições andam juntas.

  • Multiplicar probabilidades de condições associadas subestima a chance real de coexistência
  • Essa estrutura de dependência é exatamente o que as redes bayesianas vão representar à tarde

Teorema de Bayes

\[P(D \mid +) = \frac{P(+ \mid D) \cdot P(D)}{P(+)}\]

Termo Nome técnico Significado clínico
\(P(D)\) Probabilidade a priori Prevalência da doença
\(P(+ \mid D)\) Verossimilhança Sensibilidade do teste
\(P(+)\) Evidência Chance total de dar positivo
\(P(D \mid +)\) Probabilidade a posteriori Valor Preditivo Positivo (VPP)

Bayes é uma máquina de atualizar crença: entra o que eu achava antes do exame, sai o que devo achar depois dele.

Sensibilidade, especificidade e valores preditivos

Características do teste (não mudam com a população)

  • Sensibilidade \(= P(+ \mid D)\) Dos doentes, quantos testam positivo
  • Especificidade \(= P(- \mid \bar{D})\) Dos sadios, quantos testam negativo

Características do contexto (mudam com a população)

  • VPP \(= P(D \mid +)\) Dos positivos, quantos têm a doença
  • VPN \(= P(\bar{D} \mid -)\) Dos negativos, quantos não têm

Importante

VPP e VPN dependem da prevalência. O mesmo teste pode ter VPP de 8% num rastreamento populacional e de 85% numa clínica especializada.

O jeito mais fácil de entender Bayes: contar pessoas

Teste com sensibilidade 95% e especificidade 90%. Imagine 1.000 pessoas rastreadas numa população onde a doença atinge 1%.

Doentes Sadios Total
Teste + 10 99 109
Teste − 0 891 891
Total 10 990 1.000

De onde vêm os números:

  • 1% de 1.000 = 10 doentes
  • 95% de 10 ≈ 10 positivos entre eles
  • 10% de 990 = 99 falsos positivos
  • Positivos no total: 10 + 99 = 109

\[VPP = \frac{10}{109} \approx \mathbf{9\%}\]

O mesmo cálculo com a fórmula

vpp_vpn <- function(prev, sens, espec) {
  p_pos <- sens * prev + (1 - espec) * (1 - prev)   # regra da probabilidade total
  c(VPP = 100 * (sens * prev) / p_pos,
    VPN = 100 * (espec * (1 - prev)) / (1 - p_pos))
}

round(rbind(`Rastreamento (prev. 1%)`   = vpp_vpn(0.01, 0.95, 0.90),
            `Clínica espec. (prev. 30%)` = vpp_vpn(0.30, 0.95, 0.90)), 1)
#>                             VPP  VPN
#> Rastreamento (prev. 1%)     8.8 99.9
#> Clínica espec. (prev. 30%) 80.3 97.7

Mesmo teste, duas populações: VPP de ~8,8% vs. ~80,3%. O teste não mudou — o contexto mudou.

Visualizando o efeito da prevalência

Clique para ver o código
library(ggplot2)
library(scales)

prev_seq <- seq(0.001, 0.50, by = 0.001)
sens <- 0.95; espec <- 0.90
vpp_seq <- (sens * prev_seq) / (sens * prev_seq + (1 - espec) * (1 - prev_seq))
df_vpp  <- data.frame(prevalencia = prev_seq, vpp = vpp_seq)

ggplot(df_vpp, aes(x = prevalencia, y = vpp)) +
  geom_line(color = "#7ecff7", linewidth = 1.3) +
  geom_vline(xintercept = 0.01, color = "#f07050", linetype = "dashed") +
  geom_vline(xintercept = 0.30, color = "#a8f77e", linetype = "dashed") +
  annotate("text", x = 0.01, y = 0.15, label = "1%\n(rastreamento)",
           color = "#f07050", size = 3.5, hjust = -0.1) +
  annotate("text", x = 0.30, y = 0.50, label = "30%\n(clínica especializada)",
           color = "#a8f77e", size = 3.5, hjust = -0.05) +
  scale_x_continuous(labels = percent_format()) +
  scale_y_continuous(labels = percent_format()) +
  labs(title = "Valor Preditivo Positivo em função da prevalência",
       subtitle = "Sensibilidade = 95%, Especificidade = 90%",
       x = "Prevalência da doença", y = "VPP") +
  theme_minimal(base_size = 13)

Atualização sequencial: cada exame é um novo Bayes

  • A probabilidade a posteriori de um exame vira a a priori do próximo

\[P(D \mid +_A, +_B) \;\propto\; P(+_B \mid D) \cdot \underbrace{P(D \mid +_A)}_{\text{nova priori}}\]

  • Exemplo: paciente com fatores de risco (priori já alta) → ECG alterado (sobe) → troponina elevada (sobe muito)
  • É exatamente isso que o raciocínio clínico faz de forma intuitiva
  • E é exatamente isso que uma rede bayesiana faz de forma automática e explícita

Exercício 3 — Sepse na UTI

Exercício: um teste para sepse tem sensibilidade 85% e especificidade 80%. Numa UTI com prevalência estimada de 25%, calcule o VPP e o VPN e interprete clinicamente.

Comece imaginando 1.000 pacientes: quantos têm sepse? Desses, quantos o teste pega? E quantos falsos positivos vêm dos demais?

Exercício 3 — A solução

sens <- 0.85; espec <- 0.80; prev <- 0.25

p_pos <- sens * prev + (1 - espec) * (1 - prev)
p_neg <- (1 - sens) * prev + espec * (1 - prev)

cat(sprintf("VPP: %.1f%%\nVPN: %.1f%%\n",
            100 * (sens * prev) / p_pos, 100 * (espec * (1 - prev)) / p_neg))
#> VPP: 58.6%
#> VPN: 94.1%

VPN ~94% dá boa segurança para excluir. VPP ~59%: cerca de 4 em cada 10 positivos são falso alarme — positivo isolado não confirma sepse.

Bloco 3 — Lógica Clássica e Sistemas Especialistas

O que é Lógica?

  • Lógica é o estudo das formas corretas de raciocínio e inferência
  • Permite derivar conclusões válidas a partir de premissas dadas
  • Em computação e IA, fornece a linguagem para representar e manipular conhecimento

A Profª. Kátya/Juliana classificou os tipos de raciocínio — dedutivo, indutivo, abdutivo, probabilístico. Hoje vamos ao maquinário formal do raciocínio dedutivo.

Os quatro tipos que nos interessam

Tipo de lógica Lida com Exemplo em saúde
Clássica Verdadeiro ou falso “O paciente tem febre”
Não monotônica Revisão de conclusões “Já não parece mais gripe”
Fuzzy Graus de verdade “A febre é alta”
Probabilística Incerteza quantificada “85% de chance de infecção”

Esta tabela é o roteiro do resto do dia: as duas últimas linhas são o Turno 2.

Proposições e valores de verdade

  • Uma proposição (\(p\), \(q\), …) é uma sentença declarativa que pode ser verdadeira (V) ou falsa (F)
  • Não é pergunta, ordem ou exclamação

São proposições:

  • “O paciente tem temperatura acima de 38°C”
  • “A pressão sistólica é maior que 140 mmHg”

Não são proposições:

  • “Qual é a saturação de O₂?” → pergunta
  • “A dor está melhorando” → vago

A lógica clássica exige que toda afirmação seja precisamente V ou F. É exatamente essa rigidez que a lógica fuzzy vai suavizar à tarde.

Conectivos lógicos

Sejam \(p\) e \(q\) proposições.

Conectivo Símbolo Nome Significado
Negação \(\neg p\) NÃO inverte o valor de \(p\)
Conjunção \(p \wedge q\) E V somente se ambos V
Disjunção \(p \vee q\) OU V se ao menos um V
OU exclusivo \(p \oplus q\) XOR V somente se exatamente um V
Condicional \(p \rightarrow q\) SE…ENTÃO F apenas se \(p\) V e \(q\) F
Bicondicional \(p \leftrightarrow q\) SE E SOMENTE SE V se ambos iguais

Exemplo clínico: “SE febre \(\wedge\) tosse \(\wedge\) dispneia ENTÃO suspeitar de pneumonia”

Tabelas-verdade: negação e conjunção

Negação \(\neg p\)

\(p\) \(\neg p\)
V F
F V

Conjunção \(p \wedge q\)

\(p\) \(q\) \(p \wedge q\)
V V V
V F F
F V F
F F F

Exemplo clínico — critérios SIRS:

  • \(p\): temperatura > 38°C
  • \(q\): frequência cardíaca > 90 bpm
  • \(r\): frequência respiratória > 20 rpm

A regra SIRS exige ao menos dois dos critérios:

\[\text{SIRS} \equiv (p \wedge q) \vee (p \wedge r) \vee (q \wedge r)\]

Se \(p = V\), \(q = V\), \(r = F\): \(\text{SIRS} = V\)

Tabelas-verdade: disjunção e condicional

Disjunção \(p \vee q\)

\(p\) \(q\) \(p \vee q\)
V V V
V F V
F V V
F F F

Condicional \(p \rightarrow q\)

\(p\) \(q\) \(p \rightarrow q\)
V V V
V F F
F V V
F F V

Importante

O condicional só é falso quando a premissa é V e a conclusão é F — ou seja, quando a regra mente.

Todos os conectivos numa tabela só

\(p\) \(q\) \(\neg p\) \(p \wedge q\) \(p \vee q\) \(p \oplus q\) \(p \rightarrow q\) \(p \leftrightarrow q\)
V V F V V F V V
V F F F V V F F
F V V F V V V F
F F V F F F V V

A segunda linha é a mais reveladora: é a única em que o condicional é falso (a premissa valeu, a conclusão não veio) e é também onde o XOR é verdadeiro.

Os mesmos conectivos em R

Conectivo Símbolo lógico R (vetorizado) R (escalar)
Negação \(\neg p\) !x !x
Conjunção \(p \wedge q\) x & y x && y
Disjunção \(p \vee q\) x | y x || y
OU exclusivo \(p \oplus q\) xor(x, y) xor(x, y)

Importante

& e | operam elemento a elemento (paciente a paciente, numa base de dados). && e || avaliam apenas o primeiro elemento — use-os só em condições de if.

Regras lógicas em ação: os dados

# Dados simulados de 5 pacientes
febre       <- c(TRUE, TRUE, FALSE, TRUE, FALSE)
taquicardia <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
dispneia    <- c(FALSE, TRUE, FALSE, TRUE, FALSE)

# Conjunção: dois critérios SIRS ao mesmo tempo
cat("Alerta SIRS (febre E taquicardia):\n")
print(febre & taquicardia)
#> Alerta SIRS (febre E taquicardia):
#> [1]  TRUE FALSE FALSE  TRUE FALSE

Cada operação devolve um valor por paciente — é assim que um sistema de alerta varre a base inteira de uma vez.

Regras lógicas em ação: combinando critérios

# Disjunção: qualquer critério respiratório
cat("taquicardia OU dispneia:\n");  print(taquicardia | dispneia)

# Combinação: febre E (taquicardia OU dispneia)
cat("febre E (taquic. OU dispneia):\n");  print(febre & (taquicardia | dispneia))
#> taquicardia OU dispneia:
#> [1]  TRUE  TRUE  TRUE  TRUE FALSE
#> febre E (taquic. OU dispneia):
#> [1]  TRUE  TRUE FALSE  TRUE FALSE

Os parênteses importam: febre & (taquicardia | dispneia) não é o mesmo que (febre & taquicardia) | dispneia.

Inferência: Modus Ponens e Modus Tollens

Modus Ponens (afirmar afirmando)

\[\frac{p \rightarrow q \;;\; p}{\therefore \; q}\]

SE febre E tosse ENTÃO suspeitar de gripe.
O paciente tem febre e tosse.
\(\therefore\) Suspeitar de gripe. ✓

Modus Tollens (negar negando)

\[\frac{p \rightarrow q \;;\; \neg q}{\therefore \; \neg p}\]

SE pneumonia ENTÃO raio-X alterado.
O raio-X está normal.
\(\therefore\) Provavelmente não é pneumonia. ✓

São os dois padrões de inferência que sustentam o raciocínio automático de qualquer sistema especialista clínico.

Lógica de predicados: falando de grupos

  • Estende a lógica proposicional com variáveis e quantificadores
  • Para todo (\(\forall\)): \(\forall x \; [\text{Diabético}(x) \rightarrow \text{MonitorarGlicemia}(x)]\)“Todo paciente diabético deve ter a glicemia monitorada”
  • Existe ao menos um (\(\exists\)): \(\exists x \; [\text{Internado}(x) \wedge \text{Febre}(x)]\)“Existe ao menos um paciente internado com febre”

Em R (e em qualquer banco de dados): \(\forall\) vira all(), \(\exists\) vira any(). É assim que um prontuário eletrônico verifica regras clínicas sobre toda a população internada.

Sistemas especialistas: arquitetura

Base de Conhecimento Regras SE...ENTÃO Memória de Trabalho Fatos do caso atual Motor de Inferência Forward / Backward Interface com o Usuário Médico / Enfermeiro nova consulta

Forward chaining: dos dados para a conclusão

  • Parte dos fatos conhecidos e avança em direção a conclusões
  • Estratégia: “dado o que sei, o que posso concluir?”

Exemplo — triagem no pronto-socorro:

  1. Fato: temperatura = 39,2°C → ativa regra “febre alta”
  2. Fato: SpO₂ = 91% → ativa regra “hipoxemia”
  3. Fato: frequência respiratória = 28 rpm → ativa regra “taquipneia”
  4. Combinação das três → conclui “alerta de insuficiência respiratória aguda”
  5. Ação: acionar protocolo de emergência

Backward chaining: da hipótese para os dados

  • Parte de uma hipótese e busca os fatos que a sustentam
  • Estratégia: “para confirmar X, quais evidências preciso?”

Exemplo — investigação de pneumonia:

  1. Meta: confirmar pneumonia
  2. Preciso de: febre E tosse E (infiltrado no raio-X OU consolidação na TC)
  3. Verificar febre → presente ✓
  4. Verificar tosse → presente ✓
  5. Solicitar raio-X → infiltrado presente ✓
  6. Conclusão: hipótese confirmada → iniciar antibiótico

Fatores de certeza: quando a regra não é 100%

  • A lógica clássica é binária, mas na clínica as evidências têm graus de confiança
  • Shortliffe & Buchanan (MYCIN, 1975) introduziram os fatores de certeza (CF)
  • CF varia de \(-1\) (certamente falso) a \(+1\) (certamente verdadeiro), com \(0\) neutro
  • Combinação: se CF(\(p\)) \(= 0{,}7\) e CF(\(q\)) \(= 0{,}6\), então
    • CF(\(p \wedge q\)) \(= \min(0{,}7;\, 0{,}6) = 0{,}6\)
    • CF(\(p \vee q\)) \(= \max(0{,}7;\, 0{,}6) = 0{,}7\)

O MYCIN foi o primeiro sistema especialista médico de sucesso (infecções bacterianas). Em testes cegos, igualou o desempenho de especialistas humanos em cerca de 65% dos casos — nos anos 1970.

As limitações da lógica clássica em saúde

  • Tudo é V ou F — não há meio-termo
  • “Febre alta” é verdadeiro ou falso? Depende do limiar — 37,9°C não é febre, mas 38,0°C é?
  • Não modela gradações: “dor leve”, “pressão levemente elevada”
  • Regras são rígidas: um valor fora do limiar invalida a regra inteira
  • Não lida bem com dados ruidosos — comuns em ambiente clínico real

Importante

A linguagem médica é inerentemente vaga e gradual. A lógica clássica força uma precisão artificial que os dados reais muitas vezes não têm.

Exercício 4 — Motor de inferência na prática

Exercício: classifique o risco de desidratação em pacientes pediátricos pelos critérios da OMS (turgor cutâneo reduzido, olhos fundos, mucosas secas): grave se os 3 sinais, leve se 1 ou 2, sem desidratação se nenhum.

Clique para ver a solução
classificar_desidratacao <- function(turgor, olhos, mucosas) {
  n_sinais <- as.integer(turgor) + as.integer(olhos) + as.integer(mucosas)
  ifelse(n_sinais == 3, "GRAVE",
  ifelse(n_sinais >= 1, "Leve", "Sem desidratação"))
}

dados <- data.frame(
  turgor  = c(TRUE,  TRUE,  FALSE, FALSE),
  olhos   = c(TRUE,  TRUE,  FALSE, TRUE),
  mucosas = c(TRUE,  FALSE, FALSE, FALSE)
)
dados$classificacao <- classificar_desidratacao(dados$turgor, dados$olhos, dados$mucosas)
print(dados)
#>   turgor olhos mucosas    classificacao
#> 1   TRUE  TRUE    TRUE            GRAVE
#> 2   TRUE  TRUE   FALSE             Leve
#> 3  FALSE FALSE   FALSE Sem desidratação
#> 4  FALSE  TRUE   FALSE             Leve

Discussão: este sistema trata os três sinais como igualmente importantes. Isso é clinicamente correto?

A tabela-verdade do casamento


Marcelo Juliana Conclusão
Errado Certa Juliana está certa
Certo Certa Juliana está certa
Certo Errada Juliana está certa
Errado Errada Marcelo está errado


“Qualquer semelhança com a realidade é mera coincidência.”

Fim do Turno 1 — o que levamos daqui

  1. ✅ Decisão sob risco se calcula: utilidade esperada = valor × probabilidade
  2. ✅ A utilidade é uma escolha explícita de valores, não um dado da natureza
  3. Bayes atualiza crença; VPP e VPN dependem da prevalência
  4. ✅ A lógica clássica formaliza regras SE-ENTÃO e sustenta sistemas especialistas
  5. ✅ A lógica clássica quebra diante da linguagem vaga e dos limiares arbitrários

No Turno 2: as duas ferramentas que resolvem o que ficou em aberto — a lógica fuzzy (para a imprecisão) e as redes bayesianas (para a incerteza) — e o fechamento com Aprendizagem de Máquina.

Turno 2 — Do impreciso ao incerto

Antes: uma lógica que muda de ideia

  • Na lógica clássica, o que foi provado é sempre verdadeiro (monotônico)
  • Lógica não monotônica: permite revogar conclusões anteriores
  1. Tosse + febre → suspeita de gripe
  2. Contato com caso de tuberculose → suspeita revista
  3. Raio-X com cavitação → conclusão anterior revogadaTB
  • As redes bayesianas farão isso com números, não com pesos arbitrários

Bloco 4 — Lógica Fuzzy

O problema do limiar

  • “O paciente está com febre alta” — o que é alto? Acima de 38? De 39? De 40?
  • Pressão elevada” — 135 mmHg é elevada? E 139? E 141?
  • Dor moderada” — como quantificar?
  • Idoso” — 60 anos é idoso? 65? 70?

Importante

Um paciente com PAS = 139 mmHg está “normal”. Com 140 mmHg está “hipertenso”. 1 mmHg mudou o diagnóstico — mas mudou o risco clínico?

Conjunto crisp × conjunto fuzzy

Conjunto crisp (clássico)

Pertence ou não pertence: 0 ou 1

“Febre” se temperatura > 38°C:

Temp (°C) Pertence?
37,9 0 (não)
38,0 1 (sim)
39,5 1 (sim)
41,0 1 (sim)

Salto abrupto em 38°C — irreal.

Conjunto fuzzy

Pertence em algum grau: qualquer valor de 0 a 1

“Febre alta”:

Temp (°C) Grau \(\mu\)
37,5 0,00
38,5 0,33
39,5 0,83
40,5 1,00
41,0 1,00

Transição suave — realista. ✓

Conjunto fuzzy e grau de pertinência

Um conjunto fuzzy \(A\) atribui a cada elemento \(x\) um número entre 0 e 1:

\[\mu_A(x) \in [0, 1]\]

Lendo em português: \(\mu_A(x)\) é o quanto \(x\) pertence ao conjunto \(A\).

  • \(\mu_A(x) = 0\): não pertence
  • \(\mu_A(x) = 1\): pertence totalmente
  • \(\mu_A(x) = 0{,}6\): pertence em grau 0,6

Pertinência não é probabilidade

Importante

\(\mu_{\text{febre alta}}(39{,}2) = 0{,}7\)não significa 70% de chance de ter febre alta.

  • Probabilidade pergunta: qual a chance de ser verdade? — há um fato desconhecido
  • Pertinência pergunta: em que medida a descrição se aplica? — não há fato desconhecido; sei que a temperatura é 39,2
  • Consequência: os graus não precisam somar 1

O mesmo paciente pode ter grau 0,4 de “febre moderada” e grau 0,7 de “febre alta” ao mesmo tempo.

Funções de pertinência: as formas mais usadas

Clique para ver o código
library(ggplot2)

x <- seq(35, 42, by = 0.05)
tri   <- pmax(0, pmin((x - 37.5)/1, (39.5 - x)/1))          # triangular
trap  <- pmax(0, pmin((x - 38.5)/1, 1, (42 - x)/0.5))       # trapezoidal
gauss <- exp(-0.5 * ((x - 36.8)/0.4)^2)                     # gaussiana

df <- data.frame(
  x = rep(x, 3), mu = c(tri, trap, gauss),
  tipo = rep(c("Triangular — Febre Moderada",
               "Trapezoidal — Febre Alta",
               "Gaussiana — Temperatura Normal"), each = length(x))
)

ggplot(df, aes(x = x, y = mu, color = tipo)) +
  geom_line(linewidth = 1.3) +
  scale_color_manual(values = c("#7ecff7", "#f07050", "#a8f77e")) +
  labs(title = "Funções de pertinência para temperatura corporal",
       x = "Temperatura (°C)", y = "Grau de pertinência μ(x)", color = "") +
  theme_minimal(base_size = 13) + theme(legend.position = "bottom")

Variáveis linguísticas: matemática que fala como médico

  • Uma variável linguística tem como valores palavras, não números
  • Cada palavra é representada por um conjunto fuzzy

Variável: Temperatura → Valores: “Normal”, “Subfebril”, “Febre Moderada”, “Febre Alta”

Variável: Dor → Valores: “Leve”, “Moderada”, “Intensa”, “Insuportável”

  • O especialista clínico define o sistema na própria linguagem dele
  • Quem constrói o sistema converte cada palavra numa função de pertinência

Exemplo: a escala de dor é naturalmente fuzzy

Clique para ver o código
library(ggplot2)

dor <- seq(0, 10, by = 0.05)
mu_leve    <- pmax(0, pmin(1, (3 - dor)/2))
mu_mod     <- pmax(0, pmin((dor - 1)/2, (6 - dor)/2, 1))
mu_intensa <- pmax(0, pmin((dor - 4)/2, (9 - dor)/2, 1))
mu_insup   <- pmax(0, pmin((dor - 7)/2, 1))

df <- data.frame(
  x = rep(dor, 4), mu = c(mu_leve, mu_mod, mu_intensa, mu_insup),
  cat = rep(c("Leve","Moderada","Intensa","Insuportável"), each = length(dor))
)
df$cat <- factor(df$cat, levels = c("Leve","Moderada","Intensa","Insuportável"))

ggplot(df, aes(x = x, y = mu, color = cat)) +
  geom_line(linewidth = 1.3) +
  geom_vline(xintercept = 5, linetype = "dashed", color = "#aaa") +
  scale_color_manual(values = c("#a8f77e","#7ecff7","#f7c87e","#f07050")) +
  labs(title = "Escala Visual Analógica de dor (0–10)",
       x = "Intensidade referida pelo paciente", y = "Grau de pertinência μ(x)",
       color = "Categoria") +
  theme_minimal(base_size = 13)

Operações: E, OU e NÃO no mundo fuzzy

Operação Fórmula Equivalente clássico
E (interseção) \(\min(\mu_A,\ \mu_B)\) \(p \wedge q\)
OU (união) \(\max(\mu_A,\ \mu_B)\) \(p \vee q\)
NÃO (complemento) \(1 - \mu_A\) \(\neg p\)

Exemplo: paciente com \(\mu_{\text{febre alta}} = 0{,}7\) e \(\mu_{\text{taquicardia}} = 0{,}5\)

  • Febre alta E taquicardia: \(\min(0{,}7;\ 0{,}5) = \mathbf{0{,}5}\)
  • Febre alta OU taquicardia: \(\max(0{,}7;\ 0{,}5) = \mathbf{0{,}7}\)
  • NÃO febre alta: \(1 - 0{,}7 = \mathbf{0{,}3}\)

Regras fuzzy: SE-ENTÃO com graus

  • Mesma forma das regras clássicas: SE <condição> ENTÃO <conclusão>
  • A diferença: condição e conclusão têm grau, não V/F

Base de regras para triagem de dor:

Regra SE (dor) E (duração) ENTÃO (prioridade)
R1 leve curta baixa
R2 leve longa moderada
R3 moderada qualquer moderada
R4 intensa qualquer alta
R5 insuportável qualquer emergência

Como o sistema funciona: quatro etapas

Entradas temp, SpO₂, dor... Fuzzificação número → graus μ Regras quanto cada uma ativa Defuzzificação graus → um número só
  1. Fuzzificar: converter os valores medidos em graus de pertinência
  2. Avaliar as regras: ver o quanto cada regra foi ativada
  3. Agregar: combinar as conclusões de todas as regras ativas
  4. Defuzzificar: produzir um número para orientar a ação

Percurso completo — Etapa 1: fuzzificação

Paciente: temperatura = 39,5°C, SpO₂ = 91%. Qual a urgência?

temp <- 39.5; spo2 <- 91.0

# o `1` dentro do pmin garante que nenhum grau ultrapasse 1
mu_t_febre <- pmax(0, pmin((temp - 37.5)/1, (40.5 - temp)/1, 1))
mu_t_alta  <- pmax(0, pmin((temp - 39.0)/0.8, 1))
mu_s_leve  <- pmax(0, pmin((spo2 - 89)/2, (96 - spo2)/2, 1))
mu_s_grave <- pmax(0, pmin((92 - spo2)/2, 1))

cat(sprintf("μ(febre)=%.2f  μ(febre alta)=%.2f\n", mu_t_febre, mu_t_alta))
cat(sprintf("μ(hipox. leve)=%.2f  μ(hipox. grave)=%.2f\n", mu_s_leve, mu_s_grave))
#> μ(febre)=1.00  μ(febre alta)=0.62
#> μ(hipox. leve)=1.00  μ(hipox. grave)=0.50

Percurso completo — Etapas 2 a 4: regras e escore

# 2. REGRAS — o "E" é o mínimo
R2 <- min(mu_t_febre, mu_s_leve)    # moderada
R3 <- min(mu_t_alta,  mu_s_leve)    # alta
R4 <- min(mu_t_febre, mu_s_grave)   # crítica

# 3-4. AGREGAÇÃO E DEFUZZIFICAÇÃO — média ponderada dos centros
centros <- c(moderada = 4.0, alta = 7.0, critica = 9.5)
escore  <- sum(centros * c(R2, R3, R4)) / sum(c(R2, R3, R4))

cat(sprintf("Ativação: R2=%.3f  R3=%.3f  R4=%.3f\n", R2, R3, R4))
cat(sprintf("Escore: %.2f / 10  ->  LARANJA (urgente)\n", escore))
#> Ativação: R2=1.000  R3=0.625  R4=0.500
#> Escore: 6.18 / 10  ->  LARANJA (urgente)

Três regras disparam ao mesmo tempo, com forças diferentes (1,00 · 0,625 · 0,50). É esse “várias ao mesmo tempo” que um protocolo de limiares não faz.

Por que isso importa: a superfície de decisão

Clique para ver o código
library(ggplot2)

temp_grid <- seq(36.5, 41, by = 0.2)
spo2_grid <- seq(88, 100, by = 0.5)
grade <- expand.grid(temp = temp_grid, spo2 = spo2_grid)

calcular_urgencia <- function(t, s) {
  mu_tf <- pmax(0, pmin((t - 37.5)/1, 1));  mu_ta <- pmax(0, pmin((t - 39.0)/0.8, 1))
  mu_sn <- pmax(0, pmin((s - 94)/2, 1));    mu_sl <- pmax(0, pmin((s - 89)/2, (96 - s)/2, 1))
  mu_sg <- pmax(0, pmin((92 - s)/2, 1))

  ativacao <- c(min(1 - mu_tf, mu_sn),   # baixa
                min(mu_tf, mu_sl),       # moderada
                min(mu_ta, mu_sl),       # alta
                min(mu_tf, mu_sg),       # crítica
                min(mu_ta, mu_sg))       # emergência
  centros  <- c(1.5, 4.0, 7.0, 8.5, 9.5)

  if (sum(ativacao) == 0) return(1)
  sum(centros * ativacao) / sum(ativacao)   # mesma média ponderada de antes
}

grade$urgencia <- mapply(calcular_urgencia, grade$temp, grade$spo2)

ggplot(grade, aes(x = temp, y = spo2, fill = urgencia)) +
  geom_tile() +
  scale_fill_gradient2(low = "#a8f77e", mid = "#f7c87e", high = "#f07050",
                       midpoint = 5, limits = c(0, 10), name = "Urgência") +
  labs(title = "Superfície de urgência — sistema de triagem fuzzy",
       subtitle = "Verde: baixa urgência | Vermelho: emergência",
       x = "Temperatura (°C)", y = "SpO₂ (%)") +
  theme_minimal(base_size = 13)

Exercício 5 — Clássico contra fuzzy, lado a lado

Um hospital usa dois sistemas para classificar risco de readmissão em insuficiência cardíaca:

  • Sistema A (clássico): risco alto SE idade > 70 E FE < 35% E internações > 2 no último ano
  • Sistema B (fuzzy): graus de pertinência para “idoso”, “FE muito reduzida” e “múltiplas internações”

Importante

Paciente: 68 anos, FE = 36%, 2 internações no último ano.

Como cada sistema classifica este paciente?

Exercício 5 — A solução

Clique para ver o código
idade <- 68; fe <- 36; intern <- 2

risco_a <- (idade > 70) & (fe < 35) & (intern > 2)
cat(sprintf("Sistema A (clássico): %s\n\n", ifelse(risco_a, "RISCO ALTO", "risco baixo")))

mu_idoso <- pmax(0, pmin((idade - 60)/15, 1))
mu_fe    <- pmax(0, pmin((40 - fe)/10, 1))
mu_int   <- pmax(0, pmin((intern - 1)/3, 1))

cat("Sistema B (fuzzy):\n")
cat(sprintf("  μ(idoso):             %.2f\n", mu_idoso))
cat(sprintf("  μ(FE muito reduzida): %.2f\n", mu_fe))
cat(sprintf("  μ(múltiplas intern.): %.2f\n", mu_int))
cat(sprintf("  Grau de risco (mín):  %.2f\n", min(mu_idoso, mu_fe, mu_int)))
#> Sistema A (clássico): risco baixo
#> 
#> Sistema B (fuzzy):
#>   μ(idoso):             0.53
#>   μ(FE muito reduzida): 0.40
#>   μ(múltiplas intern.): 0.33
#>   Grau de risco (mín):  0.33

Importante

A: risco baixo — o paciente sai sem nenhum sinalizador. B: pertinência positiva nos três critérios (0,53 · 0,40 · 0,33) — grau de risco 0,33, pequeno mas não zero.

Lógica fuzzy na prática: onde ela já está

  • Dosagem de medicamentos: bombas de insulina, sedação em UTI, heparina — combinando vários parâmetros fisiológicos
  • Monitores multiparamétricos: índices de deterioração clínica que combinam sinais com graus de alarme
  • Imagem médica: sistemas de auxílio que devolvem grau de suspeição, não “positivo/negativo”
  • Protocolos de triagem: versões fuzzy do Manchester e do ESI, sem os paradoxos de limiar

A lógica fuzzy já está em equipamentos que vocês usam — normalmente sem esse nome no manual.

Bloco 5 — Redes Bayesianas

O problema: Bayes com muitas variáveis

  • De manhã: uma doença, um teste → conta simples
  • Na prática: fatores de risco, vários sintomas, vários exames, vários diagnósticos possíveis
  • Se todas as variáveis dependessem de todas, o número de números a estimar explode

Importante

Com 4 variáveis binárias, a tabela completa tem \(2^4 = 16\) combinações. Com 20 variáveis, mais de 1 milhão. Nenhum hospital tem dados para preencher isso.

  • A solução: dizer explicitamente quem depende de quem — e só isso precisa ser estimado
  • Esse desenho de dependências é uma rede bayesiana

O que é uma rede bayesiana? Duas peças

1. Um desenho (grafo)

  • Cada variável é um nó
  • Cada seta \(X \rightarrow Y\) diz: \(Y\) depende diretamente de \(X\)
  • Sem ciclos: nenhuma seta volta ao ponto de partida

2. Tabelas de probabilidade

  • Para cada variável, uma tabela dizendo qual a chance de cada estado, dado o estado dos seus “pais”
  • São as CPTs (Conditional Probability Tables)

Rede bayesiana = desenho + tabelas. O desenho vem do conhecimento clínico (ou é aprendido dos dados); as tabelas vêm dos dados (ou da opinião do especialista).

Exemplo-guia: triagem de dor torácica

Fator de Risco Doença (SCA) ECG Alterado Troponina ↑
  • FR → D: fatores de risco cardiovascular aumentam a chance de síndrome coronariana aguda
  • D → ECG e D → Tn: a doença altera ambos os exames
  • Os dois exames não se ligam diretamente — o que eles têm em comum é a doença

As tabelas do exemplo

Fator de Risco (sem pais)

FR P
sim 0,30
não 0,70

Doença (pai: FR)

FR = sim FR = não
D = sim 0,35 0,05
D = não 0,65 0,95

ECG (pai: D)

D = sim D = não
ECG + 0,75 0,10
ECG − 0,25 0,90

Troponina (pai: D)

D = sim D = não
Tn + 0,85 0,06
Tn − 0,15 0,94

As tabelas de ECG e Troponina são exatamente sensibilidade e especificidade — as mesmas quantidades da manhã, agora dentro da rede.

Por que o desenho economiza tanto

\[P(FR, D, ECG, Tn) = P(FR)\cdot P(D \mid FR)\cdot P(ECG \mid D)\cdot P(Tn \mid D)\]

Lendo em português: para saber a chance de qualquer combinação, basta multiplicar, para cada variável, a chance dela dado os seus pais.

  • Sem a estrutura: tabela de \(2^4 = 16\) combinações → 15 números a estimar
  • Com a estrutura: \(2 + 2 + 2 + 2 =\) 8 números
  • Com 4 variáveis a economia é modesta; com 20 variáveis, é a diferença entre possível e impossível

Lendo o grafo: as três conexões

Serial FR D ECG saber D corta a ligação Divergente D ECG Tn saber D corta a ligação Convergente A S E saber E cria ligação
  • Serial e divergente: conhecer o nó do meio desliga a associação entre as pontas
  • Convergente: conhecer o nó de baixo liga duas variáveis que eram independentes

Inferência: montando a conta

Pergunta: paciente chega com dor torácica. Como a probabilidade de SCA muda conforme os exames chegam?

# As tabelas da rede, em código
p_FR     <- 0.30
p_D_dado <- c(sim = 0.35, nao = 0.05)   # P(D=sim | FR)
p_ECG    <- c(sim = 0.75, nao = 0.10)   # P(ECG=+ | D)
p_Tn     <- c(sim = 0.85, nao = 0.06)   # P(Tn=+  | D)

# Probabilidade da doença ANTES de qualquer exame
p_D <- p_FR * p_D_dado["sim"] + (1 - p_FR) * p_D_dado["nao"]

cat(sprintf("P(SCA) antes dos exames: %.1f%%\n", p_D * 100))
#> P(SCA) antes dos exames: 14.0%

Inferência: a crença sendo atualizada

num1 <- p_D * p_ECG["sim"]                                   # ECG +
p_D_ecg <- num1 / (num1 + (1 - p_D) * p_ECG["nao"])

num2 <- p_D * p_ECG["sim"] * p_Tn["sim"]                     # ECG + e Tn +
p_D_ecg_tn <- num2 / (num2 + (1 - p_D) * p_ECG["nao"] * p_Tn["nao"])

cat(sprintf("Antes dos exames:     %.1f%%\n", p_D * 100))
cat(sprintf("Com ECG alterado:     %.1f%%\n", p_D_ecg * 100))
cat(sprintf("Com ECG + troponina:  %.1f%%\n", p_D_ecg_tn * 100))
#> Antes dos exames:     14.0%
#> Com ECG alterado:     55.0%
#> Com ECG + troponina:  94.5%

Importante

14% → 55% → 94% — o raciocínio clínico de vocês, com números e auditável.

Um caso particular famoso: Naïve Bayes

Diagnóstico (o que quero prever) Sintoma 1 Sintoma 2 ... Exame k
  • Estrutura em estrela: o diagnóstico é pai de todos os sintomas e exames
  • Suposição ingênua: dado o diagnóstico, os sintomas são independentes entre si
  • Quase nunca é verdade — mas prevê bem e torna o nº de parâmetros linear

Vocês já viram este nome em Aprendizagem de Máquina — é o mesmo objeto, de outro ângulo.

Panorama: o que existe além disso

Classificadores mais flexíveis

  • TAN: cada variável pode ter mais um pai além do diagnóstico
  • KDB: permite até \(K\) pais adicionais
  • AODE: combina vários modelos simples

Todos relaxam progressivamente a suposição “ingênua”, ao custo de mais parâmetros.

Aprender o grafo dos dados

  • Baseados em restrição (PC, GS): testam independências e montam o grafo
  • Baseados em pontuação (hill-climbing, busca tabu): pontuam grafos candidatos e buscam o melhor

Ambos usam listas de permissão e bloqueio para incorporar conhecimento clínico.

Estes nomes ficam como mapa para leitura futura — o essencial é saber que existem duas escolhas: desenhar a rede com o especialista ou aprendê-la dos dados. E que dá para fazer as duas coisas juntas.

Cautela essencial: seta não é causa

  • Uma seta \(X \rightarrow Y\) codifica dependência estatística, não necessariamente causalidade
  • Interpretar setas como causa exige suposições adicionais e fortes
  • Os algoritmos que aprendem estrutura não garantem causalidade — só encontram grafos compatíveis com as associações observadas

Importante

Encontrar uma seta entre duas variáveis não é provar uma relação de causa e efeito. Este é o erro mais grave e mais comum no uso de redes bayesianas em pesquisa clínica.

Onde as redes bayesianas ajudam na saúde

  • Diagnóstico diferencial: várias hipóteses atualizadas simultaneamente conforme sintomas e exames chegam
  • Predição de desfechos: readmissão, mortalidade, complicações
  • Prontuário eletrônico: tolerância nativa a dados faltantes — a rede não quebra com campos vazios
  • Combinar dados com opinião de especialista: útil quando a amostra é pequena, situação comum em doenças raras

É essa combinação — interpretabilidade, tratamento explícito da incerteza e tolerância a dados incompletos — que mantém as redes bayesianas relevantes mais de trinta anos depois de propostas por Judea Pearl.

Exercício 6 — Montando sua própria rede

Exercício: um posto de saúde tem dados de 300 pacientes triados para suspeita de dengue, com quatro variáveis: Idade, Fator de Risco, Resultado do Teste Rápido e Confirmação Laboratorial.

  1. Desenhe um grafo plausível para essas quatro variáveis, com base em julgamento clínico. Justifique cada seta.
  2. Onde entraria a sensibilidade e a especificidade do teste rápido nesse desenho?
  3. Se você usasse um Naïve Bayes para prever a confirmação laboratorial, o desenho seria o mesmo? O que mudaria?

Bloco 6 — Amarrando com Aprendizagem de Máquina

Quem escreve a regra?

Abordagem Quem escreve a regra Que incerteza trata Interpretabilidade
Lógica clássica O especialista Nenhuma (tudo V/F) Total
Lógica fuzzy O especialista Imprecisão da linguagem Total
Rede bayesiana (grafo desenhado) O especialista Incerteza probabilística Alta
Rede bayesiana (grafo aprendido) Os dados Incerteza probabilística Alta
Aprendizagem de Máquina Os dados Incerteza + padrões complexos Variável

Importante

O eixo central é: o conhecimento vem da cabeça do especialista ou vem do banco de dados? Tudo o mais é consequência.

O trajeto do dado à decisão

Dado SIS, prontuário Informação qualidade, contexto Modelo regras · fuzzy · rede · ML Decisão utilidade · conduta Sabedoria julgamento humano Aprendizagem de Máquina é uma caixa, não o trajeto "Garbage in, garbage out" — nenhuma etapa à direita corrige um problema à esquerda
  • O modelo — qualquer modelo — é apenas uma etapa do trajeto
  • A Aprendizagem de Máquina ocupa a caixa “Modelo”, não o trajeto inteiro
  • A última caixa, a sabedoria, continua humana

Três pontes concretas com o que vocês já viram

1. Naïve Bayes Apareceu em ML como classificador. Hoje: uma rede bayesiana de estrutura fixa. Mesmo objeto, dois olhares.

2. Árvores de decisão Em ML, aprendidas dos dados. Aqui: a mesma estrutura de regras SE-ENTÃO encadeadas dos sistemas especialistas — só que ninguém as escreveu à mão.

3. Probabilidade predita Todo classificador devolve uma probabilidade. Escolher o ponto de corte para agir não é questão estatística — é a utilidade esperada do Bloco 1.

Um corte que minimiza erro total pode ser péssimo se falso negativo custa vidas e falso positivo custa um exame a mais.

E as métricas que vocês viram em ML?

  • Sensibilidade e especificidade já estavam aqui, no Bloco 2 — são as mesmas de sempre
  • A curva ROC é o desempenho do modelo variando o ponto de corte
  • VPP e VPN dependem da prevalência — logo, um modelo validado numa população pode ter desempenho preditivo muito diferente em outra

Importante

Um modelo treinado num hospital terciário (alta prevalência) e aplicado na atenção primária (baixa prevalência) terá VPP muito pior, mesmo com sensibilidade e especificidade idênticas. Isso não é falha do algoritmo — é o efeito da prevalência que calculamos hoje de manhã.

Interpretabilidade e responsabilidade

  • “Quem responde se o algoritmo recomendar errado e o paciente piorar?”
  • Legalmente, o sistema é apoio — a decisão (e a caneta) continuam sendo do profissional
  • Modelos explicáveis — regras, sistemas fuzzy, redes bayesianas — permitem justificar o porquê da recomendação
  • Modelos de alto desempenho podem ser caixas-pretas: acertam mais e explicam menos

Viés algorítmico: um modelo aprende os padrões dos dados que recebeu — inclusive as desigualdades de acesso já embutidas neles. É o alerta que a Profª. Kátya/Juliana fez sobre os SIS, agora do lado do modelo.

Lista de verificação: o que você deve saber

  1. ✅ Calcular e interpretar a utilidade esperada de duas condutas
  2. ✅ Explicar por que VPP e VPN dependem da prevalência
  3. ✅ Construir tabelas-verdade e identificar modus ponens e modus tollens
  4. ✅ Explicar a diferença entre forward e backward chaining
  5. ✅ Definir conjunto fuzzy e grau de pertinência, e diferenciá-lo de probabilidade
  6. ✅ Percorrer as quatro etapas de um sistema de inferência fuzzy
  7. ✅ Explicar as duas peças de uma rede bayesiana e ler as três conexões num grafo
  8. ✅ Situar Aprendizagem de Máquina dentro do trajeto dado → informação → modelo → decisão

Atividade de fechamento

Para entregar (máximo duas páginas): escolha uma decisão recorrente da sua prática profissional e analise-a:

  1. Ela é estruturada, semiestruturada ou não estruturada?
  2. Em que ambiente ela ocorre: certeza, risco ou incerteza?
  3. Que tipo de ferramenta a apoiaria melhor: regras, lógica fuzzy, rede bayesiana ou um modelo preditivo? Justifique com os conceitos da aula.
  4. Que dado seria necessário, e ele existe hoje no seu serviço com qualidade suficiente?

Referências (1/2)

Decisão e Sistemas de Apoio à Decisão

  • SAUTER, V. L. Decision Support Systems for Business Intelligence. 2. ed. Wiley, 2010.
  • BEKMAN, O. R. Análise Estatística da Decisão. 2. ed. São Paulo: Blucher, 2009.
  • SIMON, H. A. Administrative Behavior. 4. ed. Free Press, 1997.

Lógica clássica e sistemas especialistas

  • GENESERETH, M.; NILSSON, N. Logical Foundations of Artificial Intelligence. Morgan Kaufmann, 1987.
  • SHORTLIFFE, E. H.; BUCHANAN, B. G. A model of inexact reasoning in medicine. Mathematical Biosciences, v. 23, 1975.

Referências (2/2)

Lógica fuzzy

  • ZADEH, L. A. Fuzzy sets. Information and Control, 8(3), 1965.
  • NGUYEN, H. T.; WALKER, E. A. A First Course in Fuzzy Logic. CRC Press, 2019.
  • KLIR, G. J.; YUAN, B. Fuzzy Sets and Fuzzy Logic. Prentice Hall, 1995.

Redes bayesianas

  • ARA, A. Redes Bayesianas e Aplicações. Handouts #01–#04. UFPR, 2021.
  • SCUTARI, M.; DENIS, J.-B. Bayesian Networks: With Examples in R. CRC Press, 2022.
  • PEARL, J. Probabilistic Reasoning in Intelligent Systems. Morgan Kaufmann, 1988.

Obrigado!

Métodos de Tomada de Decisão · PPGMDS · UFPB

Turma MINTER/DINTER

Prof. Marcelo R.P. Ferreira/Prof. Hemílio F.C. Coelho · DE-UFPB