Capítulo 38 — Implementação do trabalho de conclusão
Mapa da aula
Aula 38 publicada. Mapa, exemplo, EX112.
flowchart TD
N0["38.1 Incrementos"]
N1["38.2 Registros de decisão"]
N2["38.3 Avaliação"]
N3["38.4 Lendo a matriz de confusão"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX112"]
Desenho lógico
flowchart LR
N0["38.1 Incrementos"]
N1["38.2 Registros de decisão"]
N2["38.3 Avaliação"]
N3["38.4 Lendo a matriz de confusão"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX112"]
[38.1 Incrementos]
|
v
[38.2 Registros de decisão]
|
v
[38.3 Avaliação]
|
v
[38.4 Lendo a matriz de confusão]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX112]
Objetivos de aprendizagem
Você vai (1) implementar o artefato do trabalho de conclusão em incrementos pequenos e testados; (2) manter um registro de mudanças e um registro de decisões; (3) avaliar o artefato num conjunto rotulado, com uma matriz de confusão; e (4) relatar precisão e revocação com os seus denominadores.
38.1 Incrementos
Construa primeiro a menor versão de ponta a ponta: ler um arquivo de captura, classificar cada escrita, imprimir as decisões. Depois acrescente as regras uma de cada vez, cada uma com testes (Capítulo 8) e vetores de conformidade (Capítulo 27). Uma ferramenta pequena funcionando na semana 4 vale mais que uma ambiciosa que nunca roda. A versão da semana 4 de Maya lia uma captura sintética, classificava cada escrita Modbus contra a lista de permissão do Capítulo 27 e imprimia uma decisão por linha. A regra de taxa veio depois, com os seus próprios testes, e a regra de mudança cumulativa só depois que a avaliação mostrou que o ataque de deriva passava despercebido. Cada incremento podia ser executado e conferido contra os oito casos rotulados antes de o próximo começar.
38.2 Registros de decisão
Quando você escolhe, registre o porquê: "Decisão 7: tratar escritas durante uma janela de manutenção programada como benign-maint apenas se o ID do chamado aparecer na lista da janela; alternativas consideradas: regra só por horário (rejeitada: insiders poderiam cronometrar ataques)." Os registros de decisão permitem que os examinadores sigam o raciocínio. As decisões posteriores de Maya seguem o mesmo formato. Depois da avaliação, um registro acrescenta uma regra de mudança cumulativa para o ataque de deriva não detectado, com a alternativa de um limiar mais baixo por escrita rejeitada porque sinalizava ajustes comuns dos operadores. Outro registra a correlação das escritas da HMI com os eventos de login dos operadores, para tratar a escrita de setpoint que veio da HMI-1, que está na lista de permissão.
38.3 Avaliação
O laboratório avalia a saída de um monitor em oito casos rotulados do conjunto sintético de Maya.
"""Lab 38: capstone evaluation - precision/recall with denominators (synthetic results)."""
cases = [("replay", True, True), ("replay", True, True), ("setpoint", True, False), ("setpoint", True, True),
("benign-maint", False, True), ("benign", False, False), ("benign", False, False), ("drift", True, False)]
tp = sum(a and d for _, a, d in cases); fp = sum((not a) and d for _, a, d in cases)
fn = sum(a and not d for _, a, d in cases); tn = sum((not a) and not d for _, a, d in cases)
print(f"TP={tp} FP={fp} FN={fn} TN={tn}")
print(f"precision={tp}/{tp+fp}={tp/(tp+fp):.2f} recall={tp}/{tp+fn}={tp/(tp+fn):.2f}")
print("missed classes:", sorted({c for c, a, d in cases if a and not d}))
Execute com python3 lab_eval.py. Saída verificada:
TP=3 FP=1 FN=2 TN=2
precision=3/4=0.75 recall=3/5=0.60
missed classes: ['drift', 'setpoint']
Os oito casos incluem cinco ataques e três escritas benignas, entre elas uma escrita de manutenção. O laboratório calcula a precisão e a revocação a partir dos rótulos do monitor e imprime a matriz de confusão. O conjunto é de brinquedo: o seu propósito é mostrar quais classes o monitor deixa passar, e um nono caso poderia mudar todas as taxas. O seu valor está em que cada caso tem uma resposta conhecida, escrita antes de o monitor ser executado, de modo que uma divergência é sempre um erro do monitor ou do rótulo, e Maya registra qual dos dois.
38.4 Lendo a matriz de confusão
Três verdadeiros positivos, um falso positivo (uma escrita de manutenção sinalizada), dois falsos negativos (um ataque de setpoint e o ataque de deriva não detectados), dois verdadeiros negativos. Precisão 3/4 = 0,75; revocação 3/5 = 0,60. Oito casos são poucos demais para taxas precisas — um intervalo de Wilson para 3/5 vai de aproximadamente 0,23 a 0,88 —, então o uso honesto desta tabela é encontrar classes de falha, e não classificar ferramentas.
O único falso positivo é a escrita de manutenção, que a Decisão 7 trata como benigna apenas quando o ID do chamado aparece na lista da janela. As duas falhas apontam para correções diferentes, uma regra de mudança cumulativa para o ataque de deriva e a correlação com logins para a escrita da HMI-1, e por isso Maya examina cada classe separadamente em vez de ajustar um único limiar.
Exemplo resolvido (LDHP sintética)
Maya examina as duas falhas de detecção. O ataque de deriva usou muitas escritas pequenas, cada uma dentro da faixa da lista de permissão — um monitor baseado em regras sem uma regra de taxa ou de tendência não consegue vê-lo. O ataque de setpoint não detectado veio da própria HMI-1, que está na lista de permissão. Os dois levam a novos registros de decisão: acrescentar uma regra de mudança cumulativa e correlacionar as escritas da HMI com os eventos de login dos operadores.
Caso sintético — Lakeside District Heating Plant. Os oito casos são um conjunto de brinquedo para ilustração.
Erros e limites
Os rótulos só são tão bons quanto o autor do cenário; um ataque rotulado como "benigno" corrompe todas as métricas. Não ajuste as regras nos casos de avaliação para depois relatar os mesmos números.
Exercícios
- EX112 — Corrigindo o falso positivo. Proponha uma mudança que evite sinalizar a escrita de manutenção sem esconder ataques reais. Rubrica: 3 = exigir chamado/janela correspondente e conta de engenharia, continuando a registrar; 2 = parcial; 1 = ignorar o horário de manutenção; 0 = nada.
- EX113 — Revocação depois de uma correção. Se a regra de mudança cumulativa pegar o caso de deriva e nada mais mudar, qual é a nova revocação? Rubrica: 3 = 4/5 = 0,80; 2 = número certo, sem fração; 1 = 0,75; 0 = nada.
- EX114 — Por que o intervalo importa. Explique por que a revocação de 0,60 não pode ser comparada com os 0,70 de outra ferramenta num conjunto diferente de 10 casos. Rubrica: 3 = amostras minúsculas, intervalos largos e sobrepostos, combinação diferente de casos; 2 = um; 1 = "ferramentas diferentes"; 0 = nada.
Síntese
Implemente em incrementos testados, registre as decisões e use conjuntos de avaliação pequenos para encontrar classes de falha, e não para alegar taxas.
Continue estudando — capítulo 38 de 40
← Capítulo 37 · Índice de capítulos do curso · Capítulo 39 →
Siga para a próxima lição escrita.