Mapa da aula
Aula 09 publicada. Mapa, exemplo, EX025.
flowchart TD
N0["9.1 O que uma boa medida declara"]
N1["9.2 Distribuições, e não só médias"]
N2["9.3 Itens em aberto e viés de sobrevivência"]
N3["9.4 Amostras pequenas precisam de intervalos"]
N4["9.6 Atividade prática: medidas honestas"]
N5["Síntese do capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX025"]
Desenho lógico
flowchart LR
N0["9.1 O que uma boa medida declara"]
N1["9.2 Distribuições, e não só médias"]
N2["9.3 Itens em aberto e viés de sobrevivência"]
N3["9.4 Amostras pequenas precisam de intervalos"]
N4["9.6 Atividade prática: medidas honestas"]
N5["Síntese do capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX025"]
[9.1 O que uma boa medida declara]
|
v
[9.2 Distribuições, e não só médias]
|
v
[9.3 Itens em aberto e viés de sobrevivência]
|
v
[9.4 Amostras pequenas precisam de intervalos]
|
v
[9.6 Atividade prática: medidas honestas]
|
v
[Síntese do capítulo]
|
v
[Exemplo resolvido] --> [Exercício EX025]
Objetivos de aprendizagem e conexão
Depois deste capítulo, você deve ser capaz de:
- escolher uma medida que responda a uma pergunta operacional e declarar o seu numerador, denominador e período;
- relatar distribuições com medianas e percentis altos, e dizer o que uma média esconde;
- incluir o que ainda não aconteceu (itens em aberto) nas medidas de latência;
- relatar uma taxa de sucesso a partir de um número pequeno de tentativas, com um intervalo honesto.
Todos os capítulos seguintes pedem que você prove algo com evidências: que um controle funciona, que a aplicação de patches é tempestiva, que uma restauração cumpre a sua meta. A medição é como um implementador transforma "está tudo bem" numa afirmação que alguém pode conferir. É também como as organizações se enganam — em geral não mentindo, mas escolhendo um denominador conveniente.
9.1 O que uma boa medida declara
Uma medida é útil quando outra pessoa conseguiria recalculá-la. Declare a pergunta ("com que rapidez instalamos as correções dos fornecedores nos controladores das estações?"), a população (quais ativos, quais correções), o numerador e o denominador, o período, a fonte dos dados e o que é excluído e por quê. Uma cifra de conformidade de patches de "96 %" sem denominador pode significar 96 % dos laptops do escritório, o que nada diz sobre as estações de bombeamento.
A mediana agregada de 9 dias do Laboratório 9 falha nesse teste: não informa a população, e o seu denominador exclui em silêncio sete correções em aberto.
9.2 Distribuições, e não só médias
As grandezas operacionais — tempo para aplicar o patch, tempo para restaurar, tempo de resposta a alertas — costumam ser assimétricas: a maioria é rápida, algumas são muito lentas, e as lentas são as que importam. A mediana descreve o caso típico; o percentil 90 (p90) descreve os casos ruins; a média é puxada pelos valores extremos e não descreve bem nenhum dos dois. Relate a mediana e o p90 juntos, e olhe para o máximo.
No Laboratório 9, a mediana de 95 dias dos controladores das estações, com cinco correções ainda em aberto, é a cifra que a mediana agregada escondia.
9.3 Itens em aberto e viés de sobrevivência
Um erro comum nas medidas de latência é calculá-las apenas sobre os itens concluídos. Se cinco correções para os controladores das estações foram lançadas, mas não instaladas, elas são as mais lentas de todas — e são invisíveis para uma mediana calculada sobre as correções instaladas. Relate sempre quantos itens ainda estão em aberto e há quanto tempo. A orientação do NIST sobre gestão corporativa de patches trata a aplicação de patches como um processo de resposta a riscos com uma tempestividade mensurável, e recomenda métricas que a reflitam (NIST SP 800-40 Rev. 4).
Agregar grupos com comportamentos muito diferentes é a armadilha relacionada. Uma única mediana sobre a TI de escritório, os servidores e os controladores das estações é dominada pelo grupo com mais itens — em geral a TI de escritório — e esconde o grupo de maior consequência.
9.4 Amostras pequenas precisam de intervalos
Os testes em serviços críticos são caros, então as amostras são pequenas: dez exercícios de restauração, oito alertas de teste injetados. "9 de 10 exercícios cumpriram a meta" é um fato; "a nossa taxa de sucesso de restauração é de 90 %" é uma afirmação exagerada. Um intervalo de confiança mostra a faixa de taxas subjacentes compatíveis com os dados. Para proporções de amostras pequenas, o intervalo de escore de Wilson se comporta bem (Wilson, 1927). Para 9 de 10, o intervalo de Wilson de 95 % vai aproximadamente de 0,60 a 0,98: a taxa verdadeira poderia, de forma plausível, ser tão baixa quanto 60 %.
É por isso que a restauração de backup do Laboratório 23, com 9 de 10 exercícios na meta, ainda falha numa regra de afirmação cujo limite inferior precisa chegar a 0,70.
9.5 Exemplo resolvido: latência de patches e exercícios de restauração (sintético)
O relatório mensal da FSTS diz "mediana da latência de patches: 9 dias". O Laboratório 9 a recalcula por grupo. TI corporativa: 12 de 12 correções instaladas, mediana de 5,5 dias, p90 de cerca de 9. Relay/historiador: 6 de 8 instaladas, mediana de 18,5 dias, p90 de cerca de 31,5, duas ainda em aberto. CLP/RTU das estações: apenas 3 de 8 instaladas, mediana de 95 dias, cinco ainda em aberto. A mediana agregada de 9 dias está aritmeticamente correta e é operacionalmente enganosa: ela descreve laptops, e omite as sete correções em aberto — cinco delas nos ativos de maior consequência.
Os controladores das estações recebem patches mais devagar por bons motivos: os fornecedores precisam certificar as correções, e a instalação pode exigir uma visita ao local e uma janela de interrupção acordada com a operação (Capítulo 16). A medida não deve punir isso; deve mostrá-lo, para que os controles compensatórios possam ser justificados durante o período de exposição.
9.6 Atividade prática: medidas honestas
Laboratório 9 (salve como lab09.py, execute com python3 lab09.py):
# Lab 9 - measuring patch latency and a restore drill honestly (offline, standard library only)
# Synthetic: days from vendor fix release to installation, Fallowmere estate, last two quarters.
import math, statistics as st
latency = {"corp IT": [3, 5, 4, 9, 6, 2, 7, 5, 30, 4, 6, 8],
"relay/historian": [12, 19, 15, 41, 22, 18],
"station PLC/RTU": [64, 140, 95]}
not_yet = {"corp IT": 0, "relay/historian": 2, "station PLC/RTU": 5} # fixes released but not installed
def pct(xs, p):
xs = sorted(xs); k = (len(xs) - 1) * p; f = math.floor(k); c = math.ceil(k)
return xs[f] + (xs[c] - xs[f]) * (k - f)
for g, xs in latency.items():
n = len(xs) + not_yet[g]
print(f"{g:<16} installed {len(xs):>2}/{n:<2} median {st.median(xs):>5.1f} d p90 {pct(xs, .9):>6.1f} d mean {st.mean(xs):>5.1f} d")
allx = [x for xs in latency.values() for x in xs]
print(f"pooled (misleading) median {st.median(allx):.1f} d over {len(allx)} installed fixes; {sum(not_yet.values())} still open are invisible to it")
def wilson(k, n, z=1.96):
p = k / n; d = 1 + z*z/n; c = (p + z*z/(2*n)) / d; h = z*math.sqrt(p*(1-p)/n + z*z/(4*n*n)) / d
return c - h, c + h
k, n = 9, 10 # restore drills that met the 4-hour target
lo, hi = wilson(k, n)
print(f"restore drills within target: {k}/{n} = {k/n:.0%}, 95% Wilson interval [{lo:.2f}, {hi:.2f}]")
Saída esperada (Python 3.13.5):
corp IT installed 12/12 median 5.5 d p90 8.9 d mean 7.4 d
relay/historian installed 6/8 median 18.5 d p90 31.5 d mean 21.2 d
station PLC/RTU installed 3/8 median 95.0 d p90 131.0 d mean 99.7 d
pooled (misleading) median 9.0 d over 21 installed fixes; 7 still open are invisible to it
restore drills within target: 9/10 = 90%, 95% Wilson interval [0.60, 0.98]
Escreva a linha de relatório que você enviaria no lugar de "mediana da latência de patches: 9 dias". Ela deve caber em duas frases.
Uma linha de duas frases que passaria: "A TI corporativa instalou 12 de 12 correções, mediana de 5,5 dias; relay e historiador, 6 de 8, mediana de 18,5 dias, duas em aberto. Os controladores das estações instalaram 3 de 8, mediana de 95 dias, com cinco correções em aberto sob controles compensatórios e planos com data." Ela é mais longa que "9 dias", mas o leitor agora consegue ver onde está o risco, e os controladores das estações não estão mais escondidos atrás dos laptops do escritório.
9.7 Erros comuns e limites
- Relatar uma porcentagem sem o seu denominador.
- Médias para grandezas assimétricas.
- Calcular a latência apenas sobre os itens fechados.
- Agregar grupos de modo que o grupo grande e de baixa consequência esconda o pequeno e de alta consequência.
- Transformar um pequeno número de tentativas bem-sucedidas numa taxa sem intervalo.
- Mudar a definição de uma medida entre relatórios sem avisar.
As medidas descrevem o que foi registrado. Se os dados de origem estiverem incompletos — correções não registradas, exercícios não anotados —, nenhuma estatística vai consertar isso.
No Laboratório 9, a mediana agregada mostra três desses erros de uma vez: sem denominador, itens em aberto excluídos e grupos agregados.
Exercícios — capítulo 9
EX025 — Reescreva a linha do relatório. Objetivo: comunicar uma medida com honestidade. Entradas: a saída do Laboratório 9. Restrições: no máximo duas frases; inclua os denominadores e os itens em aberto. Etapas: escreva-a e depois liste o que você deixou de fora e por quê. Evidência esperada: a linha e uma nota. Rubrica: 3 = medianas ou p90 por grupo com contagens de instaladas/total, correções em aberto das estações mencionadas explicitamente, nenhuma cifra agregada apresentada como destaque; 2 = quase tudo; 1 = repete a mediana agregada; 0 = nada.
EX026 — Envelheça os itens em aberto. Objetivo: incluir os itens em aberto na medida. Entradas: as cinco correções em aberto das estações foram lançadas há 20, 45, 70, 130 e 200 dias; as duas correções em aberto do relay/historiador, há 10 e 35 dias. Restrições: trate a idade de cada correção em aberto como um limite inferior da sua latência. Etapas: (1) combine as latências das instaladas com as idades das em aberto para CLP/RTU das estações; (2) calcule uma mediana que seja um limite inferior; (3) explique por que isso é um limite inferior, e não uma estimativa. Evidência esperada: cálculo e explicação. Rubrica: 3 = valores combinados 20, 45, 64, 70, 95, 130, 140, 200 → limite inferior da mediana de 82,5 dias, corretamente explicado (os itens em aberto só vão envelhecer); 2 = deslize aritmético; 1 = ignora os itens em aberto; 0 = nada.
EX027 — Quantos exercícios? Objetivo: planejar o tamanho da amostra a partir de um intervalo. Entradas: a função de Wilson do Laboratório 9. Restrições: presuma que todo exercício tenha sucesso. Etapas: (1) encontre o menor número de exercícios consecutivos bem-sucedidos para o qual o limite inferior de Wilson de 95 % seja pelo menos 0,80; (2) diga se isso é viável a um exercício por mês e o que você faria em vez disso. Evidência esperada: o número, com a execução que o mostra, e um parágrafo. Rubrica: 3 = 16 exercícios (limite inferior ≈ 0,806; 15 dá ≈ 0,796), reconhecidos como 16 meses a um por mês, com alternativas sensatas, como restaurações parciais menores e mais frequentes ou testes de restauração automatizados; 2 = número certo, sem plano; 1 = chutado; 0 = nada.
Síntese do capítulo
Uma medida é útil quando declara a sua pergunta, população, numerador, denominador, período, fonte e exclusões. Relate medianas com percentis altos para grandezas assimétricas; inclua os itens em aberto; não agregue grupos com consequências diferentes; e acrescente intervalos às taxas de sucesso de amostras pequenas. O objetivo não é um número lisonjeiro, mas um que outra pessoa consiga recalcular e sobre o qual consiga agir.