Mapa da aula
Aula 15 publicada. Mapa, exemplo, EX043.
flowchart TD
N0["15.1 A tarefa do laboratório"]
N1["Laboratório — Sinalizar desvios suspeitos num manife"]
N2["15.2 Definir limiares"]
N3["15.3 Explicar os alertas"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX043"]
Desenho lógico
flowchart LR
N0["15.1 A tarefa do laboratório"]
N1["Laboratório — Sinalizar desvios suspeitos num manife"]
N2["15.2 Definir limiares"]
N3["15.3 Explicar os alertas"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX043"]
[15.1 A tarefa do laboratório]
|
v
[Laboratório — Sinalizar desvios suspeitos num manife]
|
v
[15.2 Definir limiares]
|
v
[15.3 Explicar os alertas]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX043]
Objetivos de aprendizagem
Você vai (1) validar manifestos em busca de mudanças suspeitas; (2) definir limiares a partir dos dados; (3) explicar os alertas à equipe de operações.
15.1 A tarefa do laboratório
Ruth propõe um laboratório guiado: escrever um script que compare um novo manifesto com o anterior do mesmo varejista e sinalize mudanças suspeitas, como muitas encomendas desviadas para um único endereço novo. O script roda sobre manifestos sintéticos. Tomás começa listando como é o normal: os varejistas raramente mudam mais do que alguns endereços entre um upload e outro, e quase nunca enviam muitas encomendas para um único endereço novo. Definir primeiro o normal mantém a regra ligada ao negócio, e não a palpites sobre os atacantes.
Laboratório — Sinalizar desvios suspeitos num manifesto
# Flag manifests sending more than three parcels to the same new address (synthetic).
known = {"12 Hill Rd", "4 Mill St", "7 Park Ave", "22 Dock St", "3 Elm Ct"}
manifests = {"R1": ["12 Hill Rd", "4 Mill St", "8 Oak Way", "7 Park Ave"],
"R2": ["9 Quay Lane"] * 5 + ["22 Dock St", "3 Elm Ct"],
"R3": ["5 Bay Rd", "5 Bay Rd", "6 Fern Cl", "12 Hill Rd"]}
for r, addrs in manifests.items():
new = {}
for a in addrs:
if a not in known: new[a] = new.get(a, 0) + 1
hits = {a: n for a, n in new.items() if n > 3}
print(f"{r}: {len(addrs)} parcels, new addresses {new} -> {'FLAG ' + str(hits) if hits else 'ok'}")
Execute com python3 lab_manifest.py. Saída verificada:
R1: 4 parcels, new addresses {'8 Oak Way': 1} -> ok
R2: 7 parcels, new addresses {'9 Quay Lane': 5} -> FLAG {'9 Quay Lane': 5}
R3: 4 parcels, new addresses {'5 Bay Rd': 2, '6 Fern Cl': 1} -> ok
15.2 Definir limiares
O script conta as encomendas cujo endereço mudou e as encomendas enviadas a um endereço que aparece pela primeira vez. Tomás define um limiar: sinalizar se mais de três encomendas forem para o mesmo endereço novo. O laboratório encontra o manifesto de um varejista com cinco encomendas desviadas para um único endereço novo, que ele marca para um telefonema ao varejista antes do despacho. Ele confere o limiar contra três meses de histórico sintético, para garantir que ele não teria sinalizado manifestos normais mais de uma vez por semana.
15.3 Explicar os alertas
Tomás escreve uma explicação de um parágrafo para os supervisores dos centros de distribuição: o que o alerta significa, por que importa e o que fazer, que é reter as encomendas e ligar para o varejista num número conhecido, e não num número que esteja no manifesto. Ele acrescenta um exemplo do laboratório. Os supervisores perguntam com que frequência os alertas vão aparecer; ele responde com sua estimativa histórica. Explicações claras importam, porque um alerta que ninguém entende é ignorado, e um alerta que diz o que fazer é atendido. A explicação é impressa e mantida na mesa de cada supervisor.
Exemplo resolvido
Tomás constrói uma regra de comparação de manifestos, define um limiar conferido contra o histórico e escreve uma instrução clara para os supervisores.
Caso sintético. Os manifestos e o histórico são sintéticos.
Erros e limites
Os limiares deixam passar ataques abaixo deles. Ligar para os varejistas acrescenta atraso.
Exercícios
-
EX043 — Normal primeiro. Por que definir o normal antes de escrever a regra?
Mostrar critérios de avaliação
Rubrica: 3 = para ligar a regra ao negócio, e não a palpites;; 2 = negócio;; 1 = vago;; 0 = nenhuma. -
EX044 — Achado do laboratório. O que o laboratório sinalizou?
Mostrar critérios de avaliação
Rubrica: 3 = varejista R2: 5 encomendas para o novo endereço 9 Quay Lane;; 2 = cinco;; 1 = vago;; 0 = nenhuma. -
EX045 — Número conhecido. Por que ligar para o varejista num número conhecido?
Mostrar critérios de avaliação
Rubrica: 3 = o número do manifesto pode pertencer ao criminoso;; 2 = fraude;; 1 = é mais rápido;; 0 = nenhuma.
Síntese
Regras simples construídas a partir do comportamento normal, com instruções claras, detectam fraudes que os controles técnicos deixam passar.