☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Bayes. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Bayes. Mostrar todas as mensagens

domingo, 4 de agosto de 2024

O Sysprog Bayesiano: por que um veterano vê um S0C7 e já começa a atualizar probabilidades na cabeça

 

Bellacosa Mainframe e o sysprog bayesino

☕ Um Café no Bellacosa Mainframe

O Sysprog Bayesiano: por que um veterano vê um S0C7 e já começa a atualizar probabilidades na cabeça

🧙‍♂️ Bayes, troubleshooting, observabilidade, dumps, experiência e o estranho fenômeno pelo qual trinta anos de produção transformam “acho que é isso” numa distribuição de probabilidades ambulante

Existe um fenômeno curioso nos CPDs.

Você coloca um programador iniciante diante de uma mensagem:

ABEND S0C7

Ele olha para a tela.

A tela olha para ele.

Durante alguns segundos acontece uma negociação diplomática silenciosa.

Então vem a primeira conclusão:

— O MAINFRAME QUEBROU.

Nesse instante, vindo de algum ponto escuro da sala, aparece um veterano carregando café.

Ele nem senta.

Olha para o código.

Olha para o dump.

Pergunta:

— Em qual instrução?

— Aqui.

— Qual campo?

— WS-VALOR.

— De onde veio?

— Arquivo.

— Mudaram o layout ontem?

Silêncio.

Alguém responde:

— Talvez.

O veterano toma um gole.

— Então começa por aí.

O jovem fica perplexo.

Como aquele sujeito chegou a uma hipótese em vinte segundos?

Telepatia?

Magia?

Décadas respirando ar reciclado de CPD?

Ele nasceu com um SYS1.LOGREC dentro do cérebro?

Não.

O que aconteceu foi muito mais interessante.

Sem perceber, o veterano acabou de executar uma espécie de inferência bayesiana humana.

Ele recebeu uma evidência.

Atualizou probabilidades.

Recebeu outra.

Atualizou novamente.

Eliminou hipóteses improváveis.

Aumentou o peso das plausíveis.

E começou a procurar onde havia maior chance de encontrar o defeito.

Ele talvez nunca tenha escrito:

P(H|E)

num quadro.

Mas passou quarenta anos fazendo exatamente isso.

Pegue o café.

Hoje vamos descobrir por que todo bom profissional de troubleshooting acaba virando, em algum grau, um Bayesiano de produção.


Capítulo I — Antes de falarmos de Bayes, precisamos quebrar alguma coisa

Vamos montar nosso pequeno desastre.

Programa COBOL:

WORKING-STORAGE SECTION.

01 WS-VALOR      PIC 9(7)V99.
01 WS-QUANTIDADE PIC 9(5).

PROCEDURE DIVISION.

    COMPUTE WS-TOTAL =
        WS-VALOR * WS-QUANTIDADE.

O programa funcionava havia meses.

Numa bela terça-feira às 10h37:

SYSTEM COMPLETION CODE=0C7

Pronto.

Produção abriu chamado.

O gerente pergunta:

— O que aconteceu?

Resposta tecnicamente perfeita:

— Tivemos um S0C7.

Gerente:

— E o que significa?

— Data exception.

Gerente:

— E o que significa?

— Temos algum dado incompatível com uma operação decimal.

Gerente:

— E o que significa?

— Alguma coisa está errada.

Gerente:

— Excelente. Vou informar à diretoria.

Troubleshooting começou.


Capítulo II — O iniciante vê possibilidades; o veterano vê probabilidades

Quando recebemos apenas:

S0C7

existem várias causas possíveis.

Talvez:

  • um campo numérico tenha caracteres inválidos;

  • um layout esteja incorreto;

  • tenha ocorrido deslocamento de dados;

  • um campo packed decimal esteja corrompido;

  • uma área tenha sido sobrescrita;

  • um programa esteja utilizando definição diferente do arquivo;

  • uma alteração recente tenha introduzido inconsistência;

  • o offset esteja apontando para uma rotina específica;

  • exista problema em dados provenientes de outro sistema.

O programador iniciante pensa:

“Pode ser qualquer coisa.”

O veterano pensa:

“Pode ser muita coisa, mas algumas são muito mais prováveis que outras.”

Essa diferença é gigantesca.

O iniciante possui um conjunto:

H1 H2 H3 H4 H5 H6 H7 H8...

O veterano possui algo parecido com:

H1  45%
H2  25%
H3  12%
H4   8%
H5   5%
outros...

Esses números não estão escritos conscientemente.

Provavelmente nem são números precisos.

Mas existe uma ordenação implícita das hipóteses.

Isso é experiência.


Capítulo III — Entre Thomas Bayes carregando café

Thomas Bayes foi um matemático e ministro presbiteriano britânico do século XVIII.

Séculos depois, sem jamais imaginar CICS, COBOL, Db2 ou alguém chamando às três da manhã porque “o batch parou”, seu nome ficaria associado a uma das ideias mais poderosas da estatística:

quando recebemos nova evidência, devemos atualizar aquilo que acreditávamos anteriormente.

De maneira clássica:

P(A|B) = P(B|A) × P(A) / P(B)

Não fuja.

Vamos traduzir isso para português de CPD.

A é uma hipótese.

Por exemplo:

“O S0C7 foi causado por dado não numérico vindo do arquivo de entrada.”

B é uma evidência.

Por exemplo:

“O erro começou exatamente depois de uma alteração no layout desse arquivo.”

Bayes pergunta:

sabendo dessa nova evidência, quanto devo aumentar ou diminuir minha confiança na hipótese?

Pronto.

Você acabou de fazer estatística.

Pode guardar a calculadora.


Capítulo IV — O prior: aquilo que você acreditava antes de olhar o dump

Antes de receber qualquer evidência específica, você já possui alguma noção sobre quais causas são comuns.

Isso é chamado de prior probability, ou probabilidade a priori.

Imagine mil incidentes históricos de S0C7.

Hipoteticamente:

dados inválidos             45%
layout incompatível         25%
área sobrescrita            15%
erro de lógica               8%
outros                       7%

Esses números são apenas ilustrativos.

Mas representam algo real:

alguns defeitos aparecem mais frequentemente que outros.

O profissional experiente acumulou isso na cabeça.

Talvez nunca tenha registrado estatisticamente.

Mas lembra de vinte incidentes semelhantes.

Quando vê:

S0C7

seu cérebro imediatamente diz:

— Primeiro vou procurar dados.

Isso não é preconceito irracional.

É utilização de frequência histórica.

O nome elegante é:

prior.

No CPD chamamos:

— Já vi essa porcaria antes.


Capítulo V — Agora chega a evidência

Então descobrimos:

O programa funcionava normalmente até ontem.

Interessante.

Isso altera probabilidades.

Se fosse um erro estrutural presente no programa havia meses, por que apareceu justamente hoje?

Talvez algum dado novo tenha provocado o caminho.

Ou alguma alteração tenha ocorrido.

O veterano pergunta:

— Teve mudança?

Resposta:

— Sim. Alteraram o arquivo upstream ontem à noite.

BUM.

A hipótese:

LAYOUT INCOMPATÍVEL

ganha peso.

Outras perdem.

Nosso cérebro fez aproximadamente:

ANTES DA EVIDÊNCIA

dados inválidos       █████████
layout                █████
storage overwrite     ███
outros                 ██

Depois:

DEPOIS DA MUDANÇA CONHECIDA

layout                ██████████████
dados inválidos       ███████
storage overwrite     █
outros                 █

Não sabemos ainda a causa.

Mas reorganizamos nossa fila de investigação.


Capítulo VI — Troubleshooting não é descobrir imediatamente a resposta

Esse ponto merece um café inteiro.

Um bom diagnóstico raramente funciona assim:

ERRO
↓
EUREKA
↓
SOLUÇÃO

Normalmente funciona:

ERRO
↓
HIPÓTESES
↓
EVIDÊNCIA
↓
ATUALIZAÇÃO
↓
NOVO TESTE
↓
NOVA EVIDÊNCIA
↓
ATUALIZAÇÃO
↓
HIPÓTESE MAIS FORTE
↓
CONFIRMAÇÃO

Ou seja:

troubleshooting é um processo iterativo de redução de incerteza.

Cada pergunta deveria servir para eliminar possibilidades.

Perguntar:

— O sistema está ruim?

ajuda pouco.

Perguntar:

— Qual foi o primeiro job que falhou?

ajuda muito mais.

Perguntar:

— Qual alteração entrou imediatamente antes?

melhor ainda.

Perguntar:

— O mesmo input reproduz o problema?

agora estamos cozinhando com gás.


Capítulo VII — O dump é uma máquina de reduzir entropia

No artigo anterior falamos sobre entropia como incerteza.

Receber apenas:

SISTEMA NÃO FUNCIONA

é alta entropia.

Pode ser praticamente qualquer coisa.

Agora recebemos:

JOB ABC123
STEP STEP040
PGM COBPAY01
ABEND S0C7

Já reduzimos bastante.

Depois:

OFFSET X'03A8'

Menos incerteza.

Mapeamos para:

COMPUTE WS-TOTAL =
        WS-VALOR * WS-QTD

Menos ainda.

Inspecionamos WS-VALOR.

Encontramos:

12A45

Praticamente resolvido.

Observe o processo.

Não fomos ficando “mais inteligentes”.

Recebemos informação discriminatória.

Cada pedaço eliminou hipóteses.


Capítulo VIII — Observabilidade é infraestrutura para Bayes

É por isso que observabilidade é tão importante.

Logs.

Métricas.

Traces.

SMF.

RMF.

Mensagens.

Dumps.

SQLCODEs.

File Status.

Registros de auditoria.

Histórico de mudanças.

Todos esses elementos possuem uma finalidade profunda:

fornecer evidências que permitam distinguir hipóteses concorrentes.

Sem observabilidade:

SISTEMA ESTÁ LENTO.

Com observabilidade:

CPU NORMAL
I/O ELEVADO
DB2 GETPAGES +600%
ACCESS PATH ALTERADO
APÓS RUNSTATS

Agora nossa distribuição mental muda completamente.

Talvez CPU não seja o problema.

Talvez rede não seja.

Talvez storage físico não seja.

O access path acabou de se tornar nosso principal suspeito.

Observabilidade não resolve automaticamente o incidente.

Ela melhora brutalmente a qualidade das probabilidades.


Capítulo IX — O detetive ruim coleta dados; o bom coleta dados discriminatórios

Imagine um investigador perguntando:

— Qual foi a temperatura da sala?

Resposta:

— 22 graus.

Talvez útil.

Talvez completamente irrelevante.

Agora:

— O problema começou antes ou depois do deploy?

Isso pode dividir o universo em dois.

Uma boa pergunta de troubleshooting possui alto valor informacional.

Ela separa hipóteses.

Perguntas ruins produzem fatos interessantes.

Perguntas boas destroem possibilidades.

Isso vale para qualquer ambiente:

CICS
DB2
IMS
JES2
VSAM
z/OS
Linux
Cloud
Kubernetes
rede
aplicação

O profissional experiente pergunta pouco.

Mas pergunta aquilo que muda o mapa.


Capítulo X — Exemplo: CICS está lento

Chamado:

“CICS está lento.”

Maravilha.

Talvez sejam:

  • transações;

  • Db2;

  • MQ;

  • CPU;

  • storage;

  • locking;

  • network;

  • runaway task;

  • file control;

  • região chegando ao limite;

  • aplicação;

  • downstream;

  • usuário exagerando;

  • Mercúrio retrógrado.

Bayes entra na sala.

Pergunta número 1:

— Todas as transações?

Resposta:

— Não. Apenas PAY1.

Pronto.

Hipótese de problema generalizado do CICS cai.

Pergunta número 2:

— Quando começou?

— Depois da implantação das 14h.

Outra atualização.

Pergunta número 3:

— O que mudou no PAY1?

— Uma nova consulta Db2.

A distribuição entra em colapso.

Pergunta:

— Temos SQL elapsed?

— Sim. A consulta nova responde em 11 segundos.

Caso quase encerrado.

Não precisamos desmontar o LPAR.

Não precisamos reiniciar CICS.

Não precisamos sacrificar um estagiário ao deus do throughput.

Obtivemos evidência.


Capítulo XI — O problema da ação prematura

Agora conhecemos um personagem muito perigoso:

o técnico que age antes de atualizar probabilidades.

Sistema lento?

— Reinicia.

CICS estranho?

— Recicla região.

Db2?

— Rebind.

Servidor?

— Reboot.

Aplicação?

— Redeploy.

Esse comportamento às vezes funciona.

E justamente por funcionar ocasionalmente torna-se perigosíssimo.

Porque cria aprendizado incorreto:

PROBLEMA
+
RESTART
=
RESOLVIDO

Talvez o restart apenas tenha removido temporariamente o sintoma.

O problema real permanece.

É como encontrar uma pessoa caída no chão, trocar o tapete e declarar vitória porque agora ela está deitada numa superfície limpa.


Capítulo XII — O veterano não pergunta apenas “o que aconteceu?”

Ele pergunta:

o que seria esperado se minha hipótese estivesse correta?

Isso é crucial.

Hipótese:

“O problema é exaustão de storage.”

Então deveríamos observar determinados sinais.

Se eles não aparecem, a hipótese perde força.

Hipótese:

“O problema é lock contention no Db2.”

Então deveríamos observar waits, locks e padrões compatíveis.

Não apareceram?

Probabilidade cai.

Essa é uma diferença fundamental entre investigação e superstição.

Superstição:

“Da última vez era storage.”

Investigação:

“Se for storage, quais evidências deveriam existir agora?”


Capítulo XIII — Bayes também sabe dizer “eu estava errado”

Essa é talvez a característica mais valiosa.

O profissional ruim se apaixona pela primeira hipótese.

O profissional bom permite que evidências destruam sua teoria.

Ele começa:

— Acho que é Db2.

Nova evidência:

DB2 NORMAL

Ele responde:

— Então não é.

Fim.

Não existe crise existencial.

Não existe defesa de honra.

Não existe:

— MAS EU TENHO 30 ANOS DE EXPERIÊNCIA!

Experiência deveria melhorar seus priors.

Não tornar suas hipóteses imunes à evidência.


Capítulo XIV — Confirmation bias: o inimigo mora no mesmo cérebro

Existe um perigo.

Quando acreditamos numa hipótese, começamos naturalmente a procurar evidências que a confirmem.

Sysprog:

— É aplicação.

Programador:

— É infraestrutura.

DBA:

— É rede.

Rede:

— É DNS.

DNS:

— Como sempre, ninguém lembra de mim até alguma coisa quebrar.

Cada equipe possui seus priors.

E seus preconceitos.

É por isso que investigação disciplinada pergunta:

O QUE CONFIRMARIA MINHA HIPÓTESE?

mas também:

O QUE A REFUTARIA?

Essa segunda pergunta salva horas.

Às vezes dias.


Capítulo XV — O incidente começa às 02h37

Agora vamos ao verdadeiro laboratório bayesiano:

a madrugada.

Telefone toca.

— Produção caiu.

Você abre o olho esquerdo.

— Tudo?

— Pagamentos.

Seu cérebro já começa.

Pergunta:

— Online ou batch?

— Online.

Atualização.

— Todos os canais?

— Só mobile.

Atualização.

— Web funciona?

— Sim.

Atualização.

— Houve mudança no mobile?

— Versão nova às 23h.

A probabilidade de:

IPL DO MAINFRAME

ser necessária neste momento é aproximadamente equivalente à probabilidade de um macaco escrever Hamlet antes do café esfriar.

Mesmo assim alguém inevitavelmente pergunta:

— Não seria melhor reiniciar tudo?

Não.

Volte para a cama.


Capítulo XVI — Incident response é uma árvore de hipóteses

Podemos imaginar:

                     INCIDENTE
                         |
        --------------------------------
        |              |               |
    APLICAÇÃO       INFRA           DADOS
        |              |               |
     código          CPU            inválido
     deploy          memória        faltando
     config          rede           duplicado
        |
   -------------
   |           |
mudança      bug antigo

Cada nova evidência corta galhos.

Isso é extraordinariamente parecido com algoritmos de busca.

Uma investigação eficiente evita visitar todos os nós.

Ela usa informação para podar a árvore.

O veterano não necessariamente conhece a resposta.

Conhece a ordem inteligente de investigação.


Capítulo XVII — A intuição do veterano não é mágica

Isso merece destaque.

Quando alguém trabalha durante décadas com:

  • milhares de jobs;

  • centenas de incidentes;

  • dezenas de migrações;

  • falhas absurdas;

  • mudanças ruins;

  • dados corrompidos;

  • problemas de performance;

começa a desenvolver reconhecimento de padrões.

Em psicologia cognitiva podemos chamar parte disso de pattern recognition.

No bar do CPD chamamos:

— Esse cheiro é de arquivo.

E frequentemente é.

O cérebro compara a situação atual com milhares de padrões armazenados.

Não realiza conscientemente uma equação.

Mas produz algo semelhante a:

JÁ VI ISSO
+
CONTEXTO ATUAL
=
HIPÓTESE FORTE

Capítulo XVIII — Mas experiência sem observabilidade vira folclore

Existe um perigo enorme.

Veterano:

— Toda vez que acontece isso é rede.

Pergunta:

— Quantas vezes?

— Sempre.

— Temos registro?

— Não.

— Métricas?

— Não.

— Incident database?

— Não.

— Evidência?

— Eu lembro.

Agora entramos numa dimensão perigosa.

Memória humana sofre:

  • viés de disponibilidade;

  • recência;

  • confirmação;

  • seleção;

  • esquecimento.

Precisamos transformar experiência em dados.

Por isso pós-mortem é importante.

Por isso histórico de incidentes importa.

Por isso conhecimento operacional deve ser registrado.

O melhor dos mundos combina:

EXPERIÊNCIA HUMANA
+
TELEMETRIA
+
HISTÓRICO
+
EVIDÊNCIA

Capítulo XIX — O CMDB pode ser uma máquina bayesiana

Imagine possuir histórico:

INCIDENTE 8231
Sintoma: S0C7
Causa: layout incompatível
Mudança anterior: COPYBOOK alterado

INCIDENTE 9102
Sintoma: S0C7
Causa: dado não numérico

INCIDENTE 10221
Sintoma: S0C7
Causa: integração enviando campo inválido

Depois chega incidente novo:

S0C7
+
COPYBOOK ALTERADO HOJE

Seu sistema poderia procurar casos semelhantes.

Agora experiência organizacional começa a virar memória operacional.

Uma espécie de:

P(CAUSA | HISTÓRICO + EVIDÊNCIA ATUAL)

Isso já aponta para aplicações modernas de IA em operações.


Capítulo XX — AIOps: o sysprog bayesiano virou software?

Em certo sentido, muitas ferramentas modernas de observabilidade e AIOps tentam fazer justamente aquilo que um excelente operador humano sempre fez:

  1. observar sinais;

  2. correlacionar eventos;

  3. detectar anomalias;

  4. procurar padrões históricos;

  5. priorizar hipóteses;

  6. sugerir causas.

A diferença está na escala.

Um humano consegue acompanhar determinados sistemas.

Uma grande organização produz milhões de eventos.

Então surgem sistemas tentando responder:

“Dado este conjunto de sinais, qual causa parece mais provável?”

Soa familiar?

Nosso velho Bayes está sorrindo no fundo da sala.


Capítulo XXI — E o LLM entra novamente

Nosso artigo anterior mostrou:

P(próximo token | contexto)

Agora troubleshooting pergunta:

P(causa | sintomas e evidências)

Perceba a semelhança estrutural.

Não estamos dizendo que troubleshooting e LLM são a mesma coisa.

Não são.

Mas ambos demonstram algo profundo:

contexto transforma probabilidades.

Sem contexto:

S0C7

Com contexto:

S0C7
+
COMPUTE
+
CAMPO PACKED
+
ARQUIVO ALTERADO
+
PROBLEMA COMEÇOU HOJE

Outra história.


Capítulo XXII — O prompt perfeito para um incidente

Imagine pedir ajuda a uma IA:

Meu COBOL deu erro. Ajude.

Universo gigantesco.

Agora:

Programa Enterprise COBOL em z/OS.
Batch.
Abend S0C7.
O PSW aponta para um COMPUTE.
Campo de entrada é PIC S9(7)V99 COMP-3.
O arquivo upstream mudou ontem.
O dump mostra bytes incompatíveis com packed decimal.

Você praticamente realizou o trabalho bayesiano antes mesmo da pergunta.

Reduziu a incerteza.

Essa é uma das regras de ouro ao trabalhar com humanos ou IA:

não peça respostas melhores; forneça evidências melhores.


Capítulo XXIII — Easter egg: o Ministério das Causas Prováveis

Em algum prédio governamental britânico existe:

MINISTRY OF PROBABLE ROOT CAUSES

Você entra.

— Estou com S0C7.

Funcionário:

— Formulário?

— Qual?

— Solicitação de hipótese.

— Quero descobrir a causa.

— Antes precisa declarar a causa provável.

— Mas se soubesse a causa não estaria aqui.

— Exatamente.

— Então como preencho?

— Pode solicitar uma hipótese provisória.

— Onde?

— Departamento de Evidências.

— Onde fica?

— Só podemos fornecer essa informação mediante evidência de que você já sabe onde fica.

Thomas Bayes abandona o prédio.

Nunca mais volta.


Capítulo XXIV — Não confunda correlação com causa

Sistema caiu às 14h03.

Deploy ocorreu às 14h00.

Conclusão:

— FOI O DEPLOY!

Calma.

A proximidade temporal aumenta a probabilidade.

Não prova causalidade.

Talvez:

  • uma carga também tenha começado;

  • certificado tenha expirado;

  • algum recurso tenha atingido limite;

  • outro sistema tenha falhado.

Bayes permite:

DEPLOY RECENTE
→ HIPÓTESE SOBE

mas não:

DEPLOY RECENTE
→ CULPADO CONDENADO

Precisamos continuar coletando evidências.


Capítulo XXV — O valor negativo da evidência

Algo que não aconteceu também informa.

Se esperamos que um problema de rede provoque múltiplos serviços afetados, mas apenas uma determinada função falha, isso reduz a força dessa hipótese.

Ausência de sintomas pode ser evidência.

Exemplo:

Hipótese:

CPU SATURADA

Mas RMF mostra:

CPU 32%

Hipótese perde peso.

Hipótese:

DB2 LENTO

Mas todas as queries respondem normalmente exceto uma.

Talvez não seja “Db2 lento”.

Talvez seja:

UMA QUERY RUIM

Toda investigação deveria perguntar:

o que eu deveria estar vendo caso minha teoria fosse verdadeira?


Capítulo XXVI — O poder extraordinário da linha do tempo

Uma das ferramentas mais poderosas de qualquer incidente é extremamente simples:

13:42 deploy iniciado
13:48 deploy finalizado
13:51 primeira mensagem XYZ
13:52 erros começam
13:54 throughput cai
14:01 chamados de usuários

Uma timeline cria relações.

Sem timeline:

UM MONTE DE COISAS ACONTECEU.

Com timeline:

EVENTO A
↓
EVENTO B
↓
SINTOMA C

Não prova automaticamente causalidade.

Mas reorganiza probabilidades brutalmente.

Por isso perguntar:

“quando exatamente começou?”

é uma das armas mais poderosas da engenharia.


Capítulo XXVII — O S0C7 encontra Occam

Outra ideia útil:

quando várias hipóteses explicam os mesmos fatos, normalmente começamos pela mais simples ou pela que requer menos suposições extras.

Não porque o Universo prometa simplicidade.

Ele não promete nada.

Mas porque investigar hipóteses simples e comuns primeiro costuma ser eficiente.

S0C7 depois de alteração de layout.

Possibilidade A:

O arquivo começou a fornecer caracteres não numéricos.

Possibilidade B:

Uma partícula cósmica atravessou o processador, alterou memória exatamente naquele campo e desapareceu deixando nenhuma outra evidência.

Fisicamente talvez B não seja absolutamente impossível.

Mas começaremos por A.

O macaco infinito teria orgulho da B.

Produção não.


Capítulo XXVIII — Base rate: cavalos antes de zebras

Outro princípio importantíssimo.

Quando ouvimos cascos:

pense primeiro em cavalos.

Não zebras.

Em troubleshooting:

comece pelas causas frequentes compatíveis com as evidências.

Isso evita passar quatro horas investigando uma condição extremamente rara enquanto o arquivo possui simplesmente:

00012A45

O veterano parece rápido porque já conhece os base rates.

Sabe o que costuma quebrar.

Isso não significa ignorar coisas raras.

Significa investigar numa ordem economicamente inteligente.


Capítulo XXIX — O novato pergunta “qual é a causa?”

O veterano pergunta:

“qual é a próxima evidência mais barata que pode separar minhas hipóteses?”

Essa pergunta vale ouro.

Temos duas hipóteses:

A = DADO INVÁLIDO
B = STORAGE OVERWRITE

Qual teste é mais simples?

Talvez olhar os bytes do campo no dump.

Se estão inválidos já na entrada:

A sobe muito.

Se estavam corretos e depois aparecem corrompidos:

B sobe.

Investigue primeiro aquilo que possui:

  • baixo custo;

  • alta capacidade discriminatória;

  • baixo risco.

Isso é troubleshooting eficiente.


Capítulo XXX — Reiniciar é uma evidência terrível

Alguém reinicia.

Problema some.

Conclusão:

— Era memória.

Não necessariamente.

O restart alterou dezenas de condições simultaneamente:

  • memória;

  • conexões;

  • filas;

  • locks;

  • caches;

  • processos;

  • sessões;

  • timers.

Portanto ele possui baixo poder discriminatório.

Sabemos:

ESTADO ANTERIOR → PROBLEMA
ESTADO NOVO → SEM PROBLEMA

Mas não sabemos qual diferença foi causal.

Restart é poderoso operacionalmente.

Diagnosticar com ele é frequentemente horrível.


Capítulo XXXI — Nunca desperdice um incidente

Quando corrigimos e simplesmente fechamos:

RESOLVIDO.

perdemos aprendizado.

O fechamento deveria registrar:

SINTOMA
CAUSA
EVIDÊNCIAS
TIMELINE
MUDANÇA RELACIONADA
COMO CONFIRMAMOS
AÇÃO CORRETIVA
COMO DETECTAR MAIS RÁPIDO

Por quê?

Porque estamos construindo os priors da organização.

O incidente de hoje melhora a investigação de amanhã.

Esse é o verdadeiro valor do conhecimento operacional.


Capítulo XXXII — Runbook não deve ser livro de receitas

Runbook ruim:

SE S0C7:
1. REINICIAR
2. TENTAR NOVAMENTE
3. CHAMAR FULANO

Runbook bom:

S0C7

1. Identifique instrução e offset.
2. Determine quais operandos participam.
3. Inspecione representação dos dados.
4. Confirme origem dos campos.
5. Verifique alterações recentes.
6. Compare com layout esperado.
7. Reproduza com input específico.
8. Confirme causa antes da correção.

O segundo ensina investigação.

O primeiro ensina ritual.

Sistemas complexos precisam de raciocínio, não pajelança tecnológica.


Capítulo XXXIII — Quando experiência vira arrogância

Existe uma frase terrível:

“Eu sei o que é.”

Talvez saiba.

Mas a versão profissional é:

“Minha hipótese principal é X porque A, B e C. Vou verificar D para confirmar.”

Veja a diferença.

A primeira encerra investigação.

A segunda cria um teste.

Veteranos realmente bons possuem confiança sem abandonar falsificabilidade.

Eles sabem que experiência melhora probabilidade.

Não concede infalibilidade.


Capítulo XXXIV — O aprendiz pode acelerar décadas de experiência

Aqui existe uma boa notícia.

Você não precisa viver quarenta anos para começar a pensar assim.

Pode criar deliberadamente hábitos bayesianos.

Ao receber um incidente, escreva:

HIPÓTESE 1
HIPÓTESE 2
HIPÓTESE 3

Depois:

EVIDÊNCIA QUE CONFIRMA
EVIDÊNCIA QUE REFUTA

Em seguida pergunte:

QUAL TESTE SEPARA MELHOR ESSAS HIPÓTESES?

Faça isso repetidamente.

Após meses, começa a ficar natural.

Depois de anos:

alguém mostra S0C7.

Você pede café.

E pergunta:

— Mudaram o arquivo ontem?

A metamorfose está completa.


Capítulo XXXV — O Sysprog Bayesiano nasce

Nosso jovem programador finalmente volta ao incidente original.

Temos:

ABEND S0C7

A instrução é:

COMPUTE WS-TOTAL =
        WS-VALOR * WS-QUANTIDADE

Descobrimos:

WS-VALOR = bytes inválidos

A origem:

arquivo upstream

Alteração:

COPYBOOK MODIFICADO ONTEM

Investigação do arquivo mostra:

o produtor passou a gerar determinado campo com nova definição.

O consumidor continuou interpretando o layout antigo.

Pronto.

Causa encontrada.

Não tivemos magia.

Tivemos:

SINTOMA
+
HISTÓRICO
+
HIPÓTESES
+
EVIDÊNCIA
+
ATUALIZAÇÃO
+
CONFIRMAÇÃO

Thomas Bayes acabaria de receber acesso ao RACF.


Epílogo — O velho homem e o dump

Alguns anos depois, aquele programador iniciante está numa sala com outro novato.

O monitor mostra:

S0C7

O jovem pergunta assustado:

— O que pode ser?

Nosso antigo iniciante pega café.

Observa o horário.

Pergunta:

— Quando começou?

— Hoje.

— Mudaram alguma coisa?

— Um arquivo upstream.

Ele sorri.

— Mostra o layout.

O novato pergunta:

— Como você sabia?

Ele pensa por alguns segundos.

Poderia explicar:

prior probabilities.

Likelihood.

Posterior.

Base rate.

Conditional probability.

Entropia.

Information gain.

Pattern recognition.

Observabilidade.

Décadas de incidentes.

Mas responde apenas:

— Experiência.

No fundo da sala, Thomas Bayes derruba a cabeça sobre a mesa.

Porque aquela palavra simples esconde uma máquina extraordinariamente sofisticada.

O cérebro do veterano não possui certeza.

Possui probabilidades bem calibradas.

Ele não conhece todas as causas.

Aprendeu quais causas procurar primeiro.

Ele não lê todas as linhas do dump.

Sabe quais linhas diminuem a incerteza.

Ele não testa todas as hipóteses.

Procura a evidência que elimina mais delas.

E talvez seja essa a verdadeira evolução da nossa trilogia.

O Macaco Infinito dizia:

TENTE TUDO.

O LLM dizia:

USE O CONTEXTO PARA DESCOBRIR
O QUE É MAIS PROVÁVEL.

O Sysprog Bayesiano responde:

USE A EVIDÊNCIA PARA ATUALIZAR
O QUE VOCÊ ACREDITA.

São três formas completamente diferentes de atravessar um universo de possibilidades.

O macaco depende de tempo infinito.

O modelo depende de padrões aprendidos.

O veterano depende de experiência, contexto e observabilidade.

E produção?

Produção não possui tempo infinito.

Produção possui SLA.

Às 03h17, o telefone toca.

— Caiu de novo.

O veterano olha o dashboard.

Depois pergunta:

— Mesmo erro?

— Não.

Ele toma um gole de café.

Apaga todas as hipóteses anteriores.

E começa novamente.

Porque existe uma última regra que todo verdadeiro Sysprog Bayesiano aprende:

a evidência de ontem melhora seu prior — mas nunca substitui a evidência de hoje.

☕🧙‍♂️🖥️

No console:

INCIDENT 004217 CLOSED
ROOT CAUSE CONFIRMED

Trinta segundos depois:

NEW INCIDENT 004218 OPEN

O veterano olha para a tela.

— Interessante.

O novato pergunta:

— Você já sabe o que é?

— Não.

— Então por que está sorrindo?

Ele pega a caneca.

— Porque já sei qual é a primeira pergunta.

E, em troubleshooting, às vezes isso vale mais que saber a resposta.

quinta-feira, 10 de março de 2011

Base Rate Neglect: Doctor Who, COBOL e o Dia em que um Alerta Assustador Fez Todo Mundo Esquecer os Números

Bellacosa Mainframe e a base rate neglect

☕ Um Café no Bellacosa Mainframe

Base Rate Neglect: Doctor Who, COBOL e o Dia em que um Alerta Assustador Fez Todo Mundo Esquecer os Números

Uma viagem pela TARDIS dos incidentes para entender por que um caso convincente pode nos fazer ignorar a frequência real dos eventos

09:07.

War Room.

Um alerta aparece.

SECURITY ALERT

POSSIBLE FRAUD
CONFIDENCE: HIGH

Silêncio.

O gerente pergunta:

— Fraude?

O analista responde:

— Parece.

O especialista de segurança olha.

— Muito suspeito.

Nosso jovem programador COBOL pergunta:

— Quantas transações fraudulentas normalmente existem?

Silêncio.

— Como assim?

— Quantas dessas transações, no total, costumam realmente ser fraude?

O especialista responde:

— Pouquíssimas.

— E quantos alertas desse tipo o sistema gera?

Outro silêncio.

O Doctor, que naturalmente escolheu esse exato momento para estacionar uma cabine policial azul entre dois racks de produção, sai da TARDIS.

VWORP.

VWORP.

VWORP.

Ele olha para o alerta.

Depois para a equipe.

— Qual é a chance de uma transação qualquer ser fraudulenta antes desse alerta?

O gerente cruza os braços.

— Mas o sistema disse “high confidence”.

O Doctor sorri.

— Não foi isso que perguntei.

Pausa.

— Eu perguntei qual era a probabilidade antes de vocês verem esse sinal.

Nosso programador começa a sorrir.

Porque acabou de perceber que estamos diante de outro monstro.



Base Rate Neglect

Ou:

Negligência da Taxa Base

A tendência de dar peso demais a uma informação específica e chamativa e peso de menos à frequência básica com que aquele evento acontece no mundo real.


🌀 Onde estamos na nossa TARDIS dos incidentes?

Já encontramos muita coisa.

Swiss Cheese Model nos ensinou que várias barreiras imperfeitas podem falhar juntas.

Normalization of Deviance mostrou como desvios viram rotina.

Hindsight Bias explicou por que tudo parece óbvio depois.

Confirmation Bias mostrou como buscamos aquilo que confirma nossa teoria.

Anchoring Bias mostrou o peso exagerado da primeira informação.

Groupthink revelou como consenso pode sufocar análise.

Authority Gradient mostrou como hierarquia pode transformar dúvida em silêncio.

Plan Continuation Bias explicou por que continuamos planos que já perderam sentido.

Alarm Fatigue mostrou como excesso de sinais destrói atenção.

Automation Bias mostrou como confiamos demais nas máquinas.

Drift Into Failure mostrou como sistemas inteiros derivam lentamente para a borda.

Diffusion of Responsibility mostrou como todos podem ver e ninguém agir.

Normalcy Bias mostrou como esperamos que tudo volte ao normal.

Survivorship Bias ensinou a procurar quem desapareceu da amostra.

Agora precisamos olhar para outra coisa:

o denominador.

Porque números isolados contam histórias muito convincentes.

Mas sem contexto podem nos enganar completamente.


🧠 O que é Base Rate?

Antes de falar em negligência da taxa base, precisamos entender a taxa base.

Imagine:

em um banco, de cada 1 milhão de transações:

999.900 são legítimas
100 são fraude

Então a taxa base de fraude é:

100 / 1.000.000

Ou:

0,01%.

Muito baixa.

Agora aparece um sistema de detecção.

Ele identifica padrões suspeitos.

Excelente.

Mas mesmo um sistema muito bom pode gerar falsos positivos.

Se você esquece que fraude é extremamente rara, pode olhar para qualquer alerta positivo e concluir:

“Provavelmente é fraude.”

Talvez não.

A taxa base importa.


🎯 O clássico problema do teste

Vamos simplificar.

Imagine uma condição rara.

Só 1 pessoa em cada 1.000 possui.

Um teste detecta corretamente 99% dos casos.

Parece excelente.

Mas também acusa positivamente 1% das pessoas saudáveis.

Agora testamos 100.000 pessoas.

Aproximadamente:

DOENTES: 100
SAUDÁVEIS: 99.900

Dos 100 doentes:

99 testam positivo.

Dos 99.900 saudáveis:

aproximadamente 999 também testam positivo.

Então temos:

POSITIVOS REAIS:   99
FALSOS POSITIVOS: 999

Se seu teste deu positivo, a chance de realmente pertencer ao grupo raro não é 99%.

Esse é exatamente o tipo de erro produzido quando ignoramos a taxa base.


☕ Bellacosa Mainframe: “o monitor disse que é Db2”

Imagine uma ferramenta de RCA automática.

Ela diz:

POSSIBLE ROOT CAUSE:
DB2 CONTENTION

CONFIDENCE: 85%

A equipe entra em pânico.

Mas histórico mostra:

Últimos 1.000 incidentes semelhantes:

Aplicação: 510
MQ:        260
Rede:      120
Db2:        80
Outros:     30

A taxa base para Db2 é 8%.

Isso não significa que a ferramenta está errada.

Significa que sua saída precisa ser interpretada junto com o histórico.

Um sinal novo muda a probabilidade.

Mas não apaga a probabilidade anterior.


🧠 Antes e depois

Essa é a essência do pensamento bayesiano.

Antes do sinal:

temos uma probabilidade inicial.

Depois do sinal:

atualizamos.

Em linguagem simples:

não comece do zero só porque apareceu uma evidência impressionante.

O mundo já tinha uma distribuição antes.


👻 Easter Egg nº 1 — “Há um Dalek!”

Companion:

— Doctor! Um Dalek!

Doctor:

— Onde?

— Uma silhueta metálica no corredor!

Doctor olha.

— Quantas criaturas metálicas existem nessa estação?

— Muitas.

— Quantos Daleks?

— Nenhum conhecido.

— Então talvez devêssemos investigar antes de gritar “EXTERMINATE”.

É uma brincadeira, claro.

Mas é Base Rate Neglect puro.

Uma pista compatível com Dalek não significa automaticamente Dalek se Daleks forem raríssimos naquele contexto.


⚓ Anchoring Bias e Base Rate Neglect

A primeira hipótese aparece:

“Fraude.”

Isso vira âncora.

Agora a equipe esquece que 99,99% das transações são legítimas.

A evidência chamativa domina.

Base Rate Neglect frequentemente chega de mãos dadas com Anchoring Bias.


🔎 Confirmation Bias entra logo depois

A equipe acredita em fraude.

Começa a procurar:

IP diferente.

Horário incomum.

Valor alto.

Cada detalhe passa a parecer confirmação.

Mas talvez milhões de transações legítimas possuam algumas dessas características.

Sem taxa base:

um padrão comum pode parecer raro.


🤖 Automation Bias piora

A ferramenta diz:

HIGH RISK.

O usuário pensa:

então é alta probabilidade.

Mas “high risk” pode significar:

alta pontuação interna.

Não necessariamente:

alta probabilidade posterior real.

É preciso conhecer:

  • prevalência;

  • false positive;

  • false negative;

  • calibração.

Caso contrário:

interface vira oráculo.


🚨 Alarm Fatigue tem uma relação curiosa

Imagine um sistema que ignora taxa base e gera alerta para qualquer anomalia.

Resultado:

milhares de falsos positivos.

Depois:

Alarm Fatigue.

Então Base Rate Neglect pode contribuir indiretamente para o ruído.

Uma classificação ruim cria um monitoramento que grita demais.


🧀 Swiss Cheese e falsa confiança estatística

Uma barreira de detecção pode parecer excelente porque:

“99% de precisão.”

Mas 99% de quê?

Esse número precisa de contexto.

Imagine:

ataque real ocorre 1 vez em 10.000.

Detector gera 1% de falsos positivos.

Ele pode produzir muito mais falsos alarmes que detecções reais.

A barreira existe.

Mas sua efetividade operacional pode ser muito diferente da impressão inicial.


📊 Accuracy pode enganar

Imagine dataset:

99.900 transações legítimas
100 fraudulentas

Modelo burro:

“Tudo é legítimo.”

Accuracy:

99,9%.

Maravilhoso?

Não.

Fraudes detectadas:

zero.

Por isso métricas como:

precision;

recall;

specificity;

sensitivity;

F1

existem.

Não basta um número bonito.


🧠 Base Rate Neglect em incidentes

War Room recebe um sintoma:

TIMEOUT

Primeira pergunta costuma ser:

“O que pode causar timeout?”

Muitas coisas.

Melhor pergunta:

“Nesse ambiente, o que historicamente costuma causar timeout?”

Agora temos priorização inteligente.

Não para eliminar hipóteses raras.

Mas para organizar investigação.


☕ Um exemplo prático

Últimos 500 timeouts:

Downstream lento: 250
Rede:            120
MQ:               70
Db2:              40
Outros:           20

Novo timeout.

Sem outras evidências:

downstream é um excelente ponto inicial.

Mas surge uma evidência:

PACKET LOSS: 35%

Agora probabilidade de rede sobe muito.

Isso é atualização racional.

Você usa taxa base + evidência.


🧠 O erro é escolher apenas um dos dois

Erro A:

“Historicamente sempre foi downstream, então é downstream.”

Isso pode ser Anchoring/Normalcy Bias.

Erro B:

“Tem packet loss, então esquece todo histórico.”

Isso pode ser Base Rate Neglect.

Bom raciocínio:

“Downstream era hipótese inicial mais provável, mas esse novo sinal aumenta fortemente a hipótese de rede.”

Esse é o pensamento que queremos ensinar.


🧮 Bayes sem assustar o COBOL iniciante

Você não precisa decorar fórmula para aplicar a ideia.

Pense assim:

PROBABILIDADE ANTES
+
FORÇA DA EVIDÊNCIA
=
PROBABILIDADE DEPOIS

Simples.

Se um evento é extremamente raro, uma evidência moderada talvez não seja suficiente para torná-lo provável.

Se é muito comum, uma evidência pequena pode reforçá-lo bastante.


📚 Exemplo médico

Uma doença é raríssima.

Pessoa possui um sintoma compatível.

Esse sintoma também aparece em doenças muito comuns.

Se alguém olha só para o sintoma:

pode superestimar doença rara.

Taxas base ajudam a manter proporção.

Mesma coisa em TI.


💻 O ABEND raro

Imagine:

S0C7

Normalmente em sua aplicação:

80% vêm de dados inválidos.

15% de mudança de copybook.

5% de outros motivos.

Surge novo S0C7.

Um iniciante pode começar imediatamente na hipótese mais exoticamente interessante:

corrupção de memória.

Possível.

Mas comece pela base.

Dados inválidos.

Depois evidências atualizam.


🧠 Occam não é Bayes, mas são amigos

Navalha de Occam:

não multiplique entidades sem necessidade.

Em debugging:

hipóteses simples e comuns merecem atenção.

Mas Base Rate é mais específico:

olhe para frequência histórica.

Não significa:

sempre escolha o mais comum.

Significa:

o mais raro precisa de evidência proporcionalmente forte.


👻 Easter Egg nº 2 — zebra e cavalo

Existe uma frase famosa na medicina:

Quando ouvir cascos, pense em cavalos antes de zebras.

Em mainframe:

quando ouvir:

S0C7

pense primeiro em dado inválido antes de imaginar radiação cósmica alterando um nibble no packed decimal.

Embora...

se o Doctor estiver por perto, nunca descarte completamente radiação cósmica.


🏦 Fraude bancária é um ótimo laboratório

Fraude normalmente possui baixa prevalência.

Então detecção precisa lidar com false positives.

Imagine:

10 milhões de transações.

Fraudes reais:

1.000.

Modelo marca 100.000 como suspeitas.

Detecta 900 fraudes.

Bom recall.

Mas analistas precisam verificar quase 100 mil casos.

Operationalmente:

caríssimo.

Taxa base determina a experiência real.


🔐 Segurança cibernética

Mesma coisa.

SIEM gera alerta.

EDR.

IDS.

UEBA.

Se atividades maliciosas são raras em relação ao volume total, falsos positivos podem dominar.

Por isso SOC precisa:

priorização;

correlação;

contexto;

base rate.

Sem isso:

Alarm Fatigue.


🧠 False Positive Paradox

É possível ter um detector tecnicamente muito bom e ainda assim receber mais falsos positivos que verdadeiros.

Especialmente quando evento real é raro.

Isso parece contraintuitivo.

Mas é fundamental para segurança, medicina, fraude e observabilidade.


📊 Precision responde pergunta útil

Pergunta:

“Entre os casos que o sistema marcou como positivos, quantos realmente eram positivos?”

Isso é precision.

Essa métrica é crucial quando taxa base é baixa.


📈 Recall responde outra

“Entre todos os casos realmente positivos, quantos encontramos?”

Esse é recall.

Em fraude:

você quer bom recall.

Mas se aumentar demais com muitos falsos positivos:

analistas afogam.

Trade-off.


🧠 Métricas precisam refletir custo

Um falso negativo pode ser muito caro.

Um falso positivo também.

Não existe melhor threshold universal.

Depende de:

impacto;

prevalência;

capacidade operacional;

risco.

É engenharia de decisão.


🌀 Survivorship Bias e Base Rate Neglect

Nosso capítulo anterior perguntou:

qual é o denominador?

Base Rate Neglect pergunta:

qual é a frequência real antes do caso observado?

São parentes próximos.

Survivorship Bias pode distorcer a taxa base se você só observa sobreviventes.

A taxa base que você calcula pode estar errada porque sua amostra já veio filtrada.

Excelente combinação.


🧠 Exemplo

Você calcula:

“Só 1% dos deploys falham.”

Mas banco de dados registra apenas deploys concluídos.

Rollbacks precoces não entram.

Taxa base está errada.

Agora Base Rate Neglect opera sobre base enviesada.

Nossos monstros estão formando sindicato.


🌀 Drift Into Failure e taxas-base antigas

Outro perigo.

Você usa histórico:

falha acontece 0,1%.

Mas sistema mudou:

volume 5x;

equipe menor;

arquitetura nova.

Taxa base antiga pode não valer mais.

Então:

taxas base também envelhecem.

Elas precisam ser recalibradas.


📅 Contextual Base Rate

Pergunta melhor:

não:

“Qual taxa de falha histórica?”

Mas:

“Qual taxa de falha em situações parecidas com esta?”

Exemplo:

deploy normal:

1%.

deploy na madrugada pós-migração:

8%.

Contexto muda tudo.


🧠 Segmentação

Você pode segmentar:

dia;

horário;

tipo de transação;

canal;

volume;

versão;

região.

Uma taxa agregada pode esconder comportamento.


🎯 Simpson’s Paradox no horizonte

Às vezes taxas agregadas e segmentadas contam histórias diferentes.

Isso nos leva ao famoso Paradoxo de Simpson.

Excelente tema futuro.

Mas por enquanto:

saiba que agregação pode enganar.


💻 Exemplo COBOL com files

Sistema processa dois tipos de arquivo.

Tipo A:

1 erro em 10.000.

Tipo B:

1 erro em 100.

Hoje o erro ocorreu no B.

Taxa global de erro pode parecer baixa.

Mas para B:

muito maior.

Base rate correta precisa ser específica.


🧠 “Rare but catastrophic”

Um evento pode ser raro e ainda exigir atenção enorme.

Base Rate Neglect não significa:

ignore coisas raras.

Muito importante.

Explosão de data center é rara.

Mesmo assim precisamos prevenção.

O cálculo de risco envolve:

probabilidade × impacto.

Evento raro + impacto devastador pode justificar fortes controles.


⚠️ Black Swan não é desculpa

Não diga:

“Era raro, então não precisamos considerar.”

Precisamos separar:

probabilidade;

impacto;

detectabilidade;

controlabilidade.

Segurança trabalha com tudo isso.


☕ Bellacosa Mainframe: o incidente improvável

Sysprog diz:

— Chance de dataset encher hoje é 0,01%.

Gerente:

— Então ignora.

Calma.

Se encher:

sistema para?

dados corrompem?

clientes afetados?

Quanto custa?

Taxa baixa não significa risco irrelevante.


🧠 Risk Matrix e Base Rate

Uma matriz simples:

Probabilidade baixa + impacto baixo
→ tolerável

Probabilidade baixa + impacto crítico
→ talvez controle forte

Probabilidade alta + impacto baixo
→ gestão operacional

Probabilidade alta + impacto crítico
→ prioridade máxima

Taxa base informa probabilidade.

Não decide sozinha.


🤖 IA e Base Rate Neglect

Imagine IA dizendo:

82% probability of cyberattack

Pergunte:

  • como foi calibrada?

  • qual prevalência na amostra?

  • qual base rate no seu ambiente?

  • esse 82% é probabilidade real ou score?

Score e probabilidade não são sinônimos.


🧠 Calibration

Um modelo calibrado deveria, idealmente, apresentar algo como:

de 100 casos classificados como 80%,

cerca de 80 ocorrerem.

Se não:

confidence score pode ser enganoso.


📊 Confusion Matrix

Para entender ferramenta de classificação:

TRUE POSITIVE
FALSE POSITIVE
TRUE NEGATIVE
FALSE NEGATIVE

Isso deveria ser alfabetização básica para quem usa IA, fraude, SOC ou alertas.

Não precisa ser cientista de dados.

Precisa entender o que a ferramenta pode errar.


🧠 Automation Bias novamente

Se ninguém entende confusion matrix:

“AI confidence 95%”

vira:

“95% de chance de estar certo.”

Talvez não seja isso.

Automation Bias adora estatística mal compreendida.


🪜 Authority Gradient e números

Consultor apresenta:

“Modelo tem 99,7% accuracy.”

Diretor impressionado.

Júnior pergunta:

— Qual base rate?

Sala olha.

Authority Gradient pode impedir a melhor pergunta da reunião.

Não deixe.


👥 Groupthink e números bonitos

99,7%.

Todos concordam.

Ninguém pergunta:

quantos falsos negativos?

Qual classe minoritária?

Qual dataset?

Número sofisticado pode gerar Groupthink técnico.


🎯 Pergunta Bellacosa nº 1

Quando alguém disser:

“O sistema detecta com 99%.”

Pergunte:

“99% de quê?”

Accuracy?

Precision?

Recall?

Specificity?


🎯 Pergunta Bellacosa nº 2

Quando alerta aparece:

“Quão comum é esse evento antes desse alerta?”


🎯 Pergunta Bellacosa nº 3

Quando hipótese rara domina:

“Que evidência temos forte o suficiente para superar a taxa base?”


🎯 Pergunta Bellacosa nº 4

Quando histórico é usado:

“Essa taxa ainda representa o sistema atual?”


🧪 Passo a passo contra Base Rate Neglect

Passo 1 — Defina a população

Qual universo estamos analisando?


Passo 2 — Descubra frequência histórica

Quantos eventos reais ocorrem?


Passo 3 — Segmente contexto

Mesma hora?

Mesmo serviço?

Mesmo tipo?


Passo 4 — Avalie qualidade do detector

False positive?

False negative?


Passo 5 — Atualize com evidência

Não ignore base.

Também não ignore sinal.


Passo 6 — Compare hipóteses

Qual é mais comum?

Qual é mais compatível com evidência?


Passo 7 — Considere impacto

Evento raro pode continuar crítico.


Passo 8 — Recalibre periodicamente

Sistema muda.


Passo 9 — Não trate score como probabilidade sem validar

Pergunte.


Passo 10 — Registre previsões

Depois compare com resultado real.

Isso melhora calibração humana.


📓 Incident History como ativo

Histórico de incidentes não serve só para auditoria.

Serve para criar base rates.

Exemplo:

Sintoma: Queue Growth

Últimos 200 casos:

Consumer failure: 110
Volume spike:      45
Network:           25
Db2:               12
Unknown:            8

Excelente material de triagem.


🧠 Mas não vire escravo do histórico

Taxa base é ponto de partida.

Não sentença.

Novo dado forte pode inverter completamente.

Essa é a beleza do raciocínio bayesiano.


🔎 Likelihood importa

Pergunta:

“Se fosse rede, qual a chance de vermos esse packet loss?”

Alta.

“Se não fosse rede, qual a chance de vermos?”

Baixa.

Então evidência discrimina.

Você atualiza.


💻 Debugging Bayesiano informal

Hipóteses:

A — input inválido.

B — copybook incompatível.

C — storage corruption.

Taxas históricas:

A alta.

B média.

C baixíssima.

Evidência:

erro ocorre apenas após nova versão do copybook.

Agora B sobe muito.

Perfeito.

Não precisamos fórmula.

Precisamos raciocínio.


🧠 Strong evidence beats base rate

Importante.

Evento raro + evidência muito específica = pode virar provável.

Exemplo:

corrupção de memória é rara.

Mas dump mostra alteração consistente em área específica exatamente após overwrite.

Agora temos evidência forte.

Não fique preso à base.

Base Rate Neglect é ignorar taxa base.

Não respeitá-la cegamente.


🔄 Base Rate + Evidence

Pense sempre:

O QUE ERA PROVÁVEL ANTES?
+
O QUE A NOVA EVIDÊNCIA MUDA?

Esse é o coração.


🕰️ Hindsight Bias depois

Depois que descobrimos a causa rara:

— Era óbvio!

Não.

Talvez antes fosse racional considerar causas comuns primeiro.

O fato de hipótese rara vencer não significa que era a melhor hipótese inicial.

Hindsight Bias tentará reescrever.

Não deixe.


🧠 Boa investigação pode começar errada

Você começa com hipótese mais provável.

Testa.

Descarta.

Vai para próxima.

Encontra causa rara.

Isso não significa que investigação foi ruim.

Foi racional.

O importante é:

não ficar preso.


📚 Curiosidade: estatística é uma vacina contra histórias

Seres humanos gostam de narrativas.

“Um hacker sofisticado.”

“Uma falha raríssima.”

“Um bug misterioso.”

São histórias interessantes.

“Foi input inválido de novo.”

Menos cinematográfico.

Mas frequência existe independentemente de entretenimento.

Estatística é um antídoto contra sedução narrativa.


👻 Easter Egg nº 3 — o monstro mais chato

Doctor:

— Pode ser uma entidade extradimensional.

Companion:

— E é?

Doctor:

— Não. É um cabo solto.

— Decepcionante.

— Sim.

Pausa.

— Mas produção voltou.

Às vezes o monstro mais provável é pouco interessante.

Ainda assim deve ser testado.


🧬 Regeneração organizacional

Uma organização madura contra Base Rate Neglect começa a:

registrar incidentes consistentemente;

manter denominadores;

medir false positives;

medir false negatives;

segmentar eventos;

recalibrar thresholds;

treinar leitura de métricas;

e incorporar histórico à triagem.

Ela muda:

“isso parece grave”

para:

“isso parece grave e, dado o histórico e a evidência atual, nossa hipótese principal é X.”

Muito mais forte.


📋 Checklist anti-Base Rate Neglect

Antes de concluir:

[ ] Qual é a taxa base desse evento?

[ ] Qual é a população total?

[ ] Minha amostra está completa?

[ ] O evento é raro ou comum?

[ ] Que evidência nova temos?

[ ] Essa evidência é realmente específica?

[ ] Qual é a taxa de falso positivo?

[ ] Qual é a taxa de falso negativo?

[ ] Estou confundindo score com probabilidade?

[ ] O histórico ainda representa o sistema atual?

[ ] Estou ignorando uma causa comum por uma história mais interessante?

[ ] Estou ignorando uma causa rara apesar de evidência muito forte?

As duas últimas precisam existir juntas.


📓 Diário do Doctor

Se guardar apenas algumas ideias desta viagem, guarde estas:

Base Rate Neglect acontece quando ignoramos a frequência básica de um evento e damos peso excessivo à evidência específica.

Probabilidade começa antes do alerta.

Um detector de 99% pode produzir muitos falsos positivos quando o evento real é raro.

Accuracy isolada pode enganar.

Precision e recall ajudam a entender classificadores.

Taxas históricas são pontos de partida, não sentenças.

Evidência forte pode superar uma taxa base baixa.

Contexto precisa segmentar a taxa base.

Taxas antigas podem ficar inválidas após Drift Into Failure ou mudanças arquiteturais.

Automation Bias torna scores automáticos mais perigosos quando ninguém entende seu significado.

E principalmente:

Antes de perguntar “o quanto essa evidência parece convincente?”, pergunte “o quão provável esse evento já era antes de eu vê-la?”.


🕰️ De volta à War Room

O alerta continua:

POSSIBLE FRAUD
CONFIDENCE: HIGH

Nosso programador pergunta:

— Quantas transações temos por dia?

— Dez milhões.

— Quantas fraudes reais?

— Cerca de mil.

— Quantos alertas desse modelo?

— Cem mil.

Ele pensa.

— Então precisamos olhar para precision.

O gerente pergunta:

— Você acha que não é fraude?

— Não.

— Então?

— Acho que ainda não sabemos.

Boa resposta.

Eles analisam o caso.

Valor alto.

IP novo.

Dispositivo desconhecido.

Mas existe algo mais.

O cliente acabou de trocar de aparelho.

Localização compatível.

Autenticação forte passou.

Outros sinais benignos.

O score cai após enriquecimento.

Não era fraude.

Horas depois aparece outro alerta.

Mesmo tipo.

Agora há:

IP de país incompatível;

device fingerprint estranho;

tentativa de bypass;

sequência incomum.

A hipótese muda rapidamente.

Fraude confirmada.

Nosso programador percebe.

Base Rate não impediu detectar caso raro.

Apenas impediu tratar todo alerta como certeza.

O Doctor sorri.

— Exatamente.

— Então taxa base serve para não exagerar?

— Também.

— E para quê mais?

— Para lembrar que a realidade começou antes do seu dashboard.

VWORP.

VWORP.

VWORP.


🥚 Easter Egg final

No dia seguinte aparece:

BELLACOSA.BIAS(BASE)

Dentro:

       IF ALERT = 'POSITIVE'
           PERFORM CHECK-BASE-RATE
       END-IF.

       IF EVENT = 'RARE'
          AND EVIDENCE = 'WEAK'
           MOVE 'CAUTION' TO CONCLUSION
       END-IF.

       IF EVIDENCE = 'STRONG'
           PERFORM UPDATE-BELIEF
       END-IF.

Comentário:

* START WITH THE PRIOR.
* THEN RESPECT THE EVIDENCE.

Outro:

* 99% OF WHAT?

E, naturalmente:

* BAD WOLF WAS STATISTICALLY UNLIKELY.

Nosso jovem programador ri.

Fecha o membro.

O telefone toca.

Operador:

— Temos um S0C7.

— Dados inválidos?

— Provavelmente.

— Por quê?

— Histórico.

— Excelente.

— Já fecho como dados?

— Não.

O programador abre o dump.

— Primeiro usamos a taxa base para escolher onde começar.

Pausa.

— Depois deixamos a evidência decidir onde terminar.

Em algum lugar do universo, a TARDIS desaparece.

VWORP.

VWORP.

VWORP.

No quadro fica escrita uma frase:

O caso mais chamativo não é necessariamente o mais provável — e o caso mais provável não está automaticamente certo.

Entre os dois existe investigação.

E é justamente ali que queremos morar.

☕🌀

Next stop: Availability Heuristic — quando lembramos facilmente de um desastre recente e começamos a acreditar que ele é muito mais provável do que realmente é.

 

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...