◇ OpenCyber Academy
Pesquisa doutoral · Capítulo 5 · Português

Capítulo 5 — Estudo principal e validação independente

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 5 — Estudo principal e validação independente

Mapa da aula

Aula 05 publicada. Mapa, exemplo, EX027.

flowchart TD
  N0["5.1 Executando a análise"]
  N1["Laboratório — Diferença em diferenças da mediana da"]
  N2["5.2 Resultados"]
  N3["5.3 Interpretando com honestidade"]
  N4["5.4 Validação independente"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX027"]

Desenho lógico

flowchart LR
  N0["5.1 Executando a análise"]
  N1["Laboratório — Diferença em diferenças da mediana da"]
  N2["5.2 Resultados"]
  N3["5.3 Interpretando com honestidade"]
  N4["5.4 Validação independente"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX027"]
[5.1 Executando a análise]
    |
    v
[Laboratório — Diferença em diferenças da mediana da]
    |
    v
[5.2 Resultados]
    |
    v
[5.3 Interpretando com honestidade]
    |
    v
[5.4 Validação independente]
    |
    v
[Exemplo resolvido] --> [Exercício EX027]

Objetivos de aprendizagem

Você vai (1) executar uma análise de diferença em diferenças pré-registrada; (2) interpretar um intervalo que inclui o zero; (3) providenciar a validação independente da análise.

5.1 Executando a análise

Com o pré-registro congelado, Yusuf extrai registros sintéticos de correção para trezentas instâncias de vulnerabilidades críticas em cada um de quatro grupos: os departamentos adotantes antes e depois da correção ordenada pelo risco, e os departamentos de comparação nos mesmos dois períodos. Ele calcula a mediana da latência em cada grupo, a diferença em diferenças das medianas e um intervalo de confiança bootstrap, reamostrando cada grupo mil vezes com uma semente aleatória fixa. O script usa apenas os módulos statistics e random do Python, para que os revisores possam executá-lo de novo sem software especial. Os quatro grupos usam a mesma regra de extração.

Laboratório — Diferença em diferenças da mediana da latência de correção crítica com intervalo bootstrap

"""Difference-in-differences of median critical-patch latency with bootstrap interval (stdlib only)."""
import random, statistics as st
random.seed(23)
def gen(n, m): return [random.expovariate(1/m) for _ in range(n)]
t_pre, t_post = gen(300, 21), gen(300, 12)   # departments using risk-ranked patching
c_pre, c_post = gen(300, 20), gen(300, 18)   # comparison departments
did = (st.median(t_post) - st.median(t_pre)) - (st.median(c_post) - st.median(c_pre))
bs = []
for _ in range(1000):
    r = lambda x: [random.choice(x) for _ in x]
    bs.append((st.median(r(t_post)) - st.median(r(t_pre))) - (st.median(r(c_post)) - st.median(r(c_pre))))
bs.sort()
print(f"medians days: treated {st.median(t_pre):.1f} -> {st.median(t_post):.1f}; comparison {st.median(c_pre):.1f} -> {st.median(c_post):.1f}")
print(f"difference-in-differences {did:.1f} days; 95% bootstrap CI {bs[25]:.1f} to {bs[974]:.1f}")

Execute com python3 lab_patch.py. Saída verificada:

medians days: treated 14.6 -> 10.1; comparison 12.6 -> 11.6
difference-in-differences -3.4 days; 95% bootstrap CI -7.4 to 1.2

5.2 Resultados

Nos departamentos adotantes, a mediana da latência cai de 14,6 para 10,1 dias. Nos departamentos de comparação, cai de 12,6 para 11,6 dias. A diferença em diferenças é de menos 3,4 dias, o que sugere que os adotantes melhoraram cerca de três dias e meio a mais que os departamentos de comparação. No entanto, o intervalo bootstrap de 95 por cento vai de menos 7,4 a mais 1,2 dia, então inclui o zero. Os dados são compatíveis com uma melhora útil, mas também com nenhum efeito. Yusuf apresenta as medianas dos grupos e o intervalo numa única tabela, para que os leitores vejam as mudanças brutas além da estimativa-resumo. Ele evita arredondar o intervalo para esconder seu limite superior.

5.3 Interpretando com honestidade

Yusuf resiste à tentação de descrever o resultado como prova de que a correção ordenada pelo risco funciona. Seguindo seu pré-registro, ele relata a estimativa, o intervalo e o fato de que a hipótese não é confirmada no nível de confiança planejado. Ele também relata as medianas anteriores à adoção, que mostram os adotantes começando mais lentos que os departamentos de comparação, o que levanta a possibilidade de que parte da queda reflita uma recuperação do atraso. A Prof.ª Hald observa que um resultado inconclusivo honesto é uma contribuição, porque diz aos profissionais que o efeito é incerto.

5.4 Validação independente

Yusuf envia seu script congelado, os dados sintéticos e o pré-registro a uma pesquisadora de outra universidade que não tem interesse no resultado. Ela executa a análise de novo e obtém números idênticos, depois tenta uma alternativa razoável, comparando médias do logaritmo da latência, e encontra a mesma direção e um intervalo que também inclui o zero. Seu relatório escrito confirma que a conclusão não depende de uma única escolha analítica. Yusuf inclui o relatório no apêndice da tese, com a permissão dela. O relatório dela nomeia cada arquivo que ela conferiu.

Exemplo resolvido

Yusuf executa a análise pré-registrada, encontra medianas que caem de 14,6 para 10,1 nos adotantes e de 12,6 para 11,6 nas comparações, uma diferença de menos 3,4 dias com intervalo de menos 7,4 a 1,2, relata o resultado como inconclusivo e o faz reproduzir de forma independente.

Caso sintético. Os registros são sintéticos; as saídas vêm de lab_patch.py.

Erros e limites

Descrever um intervalo que inclui o zero como prova de um efeito engana os profissionais.

Exercícios

Continue estudando — aula 05 (capítulo 05 de 08)

← Capítulo 04 · Índice das aulas · Capítulo 06 →

Continue para a próxima aula já escrita.