Separar o estado, o sinal e a ação
Numa migração fictícia, existe uma condição adversa desconhecida que pode causar perda de cem mil euros. Para o exercício, a probabilidade inicial é 20%. Uma resposta custa vinte mil e elimina essa perda específica; não lhe atribuímos outros efeitos. Sem informação adicional, responder custa vinte mil e não responder tem a mesma perda esperada. Agora acrescenta um teste que chega antes da escolha. O teste não corrige a condição: produz um sinal que pode estar errado. Identifica três elementos distintos na ficha de decisão: estado real, resultado observado e ação escolhida. Num projeto APS, valida primeiro se o ensaio representa versão, volume, permissões e calendário da janela. Não importes a probabilidade do exercício para um serviço real. O modelo serve para praticar cálculo condicionado, não para afirmar que uma tecnologia elimina todo o risco.
Construir a tabela conjunta
O sinal é positivo em 75% das condições adversas e em 10% das condições normais. Estes números são condicionais, não a probabilidade de existir problema após um positivo. Multiplica cada taxa pela probabilidade do estado correspondente: adverso e positivo dá 0,20 × 0,75 = 0,15; normal e positivo dá 0,80 × 0,10 = 0,08. Os restantes ramos são 0,05 e 0,72. A soma dos quatro é um. Portanto, a probabilidade de sinal positivo é 0,23 e a probabilidade de condição adversa dado positivo é 0,15 / 0,23, cerca de 65,2%. Após um negativo, é 0,05 / 0,77, cerca de 6,5%. Desenha os quatro ramos antes de dividir. Num relatório, identifica sempre o denominador: todos os ensaios, apenas positivos ou apenas condições adversas respondem a perguntas diferentes.
Escolher por ramo e descontar o teste
Com o sinal positivo, a perda esperada sem resposta supera vinte mil, pelo que o modelo escolhe responder. Com sinal negativo, a perda esperada sem resposta é aproximadamente 6,49 mil, inferior ao custo da resposta. Antes de observar o teste, a política tem custo esperado de 0,23 × 20 + 0,05 × 100 = 9,6 mil. Não uses 65,2% como probabilidade de receber o sinal; essa percentagem já está condicionada ao positivo. A melhoria bruta face aos vinte mil iniciais é 10,4 mil. Se o teste custa três mil, o total esperado é 12,6 mil e a melhoria líquida 7,4 mil. Inclui ainda custos de espera ou opções perdidas, quando existirem. Um teste tecnicamente preciso pode ter pouco valor para esta escolha se chegar tarde ou se não mudar a ação admissível.
Rever limites e entregar uma recomendação
A informação perfeita neste modelo permitiria responder apenas nos 20% de estados adversos: custo esperado de quatro mil. A melhoria bruta máxima seria dezasseis mil. O teste imperfeito não pode ultrapassar esse limite mantendo as mesmas ações e consequências; valores diferentes indicam erro ou mudança de modelo. Esta comparação usa apenas custo esperado. Um limite obrigatório de perda por ocorrência pode impedir a opção sem resposta, mesmo após um negativo. Para a oficina, entrega a tabela conjunta, decisão após cada sinal, custo total, pressupostos e uma condição que alteraria a recomendação. Pede a um colega para verificar denominadores e a disponibilidade temporal da ação. A execução do código confirma aritmética, não a validade empírica das taxas nem a autoridade para aceitar exposição. Regista questões por resolver e o responsável pela sua validação.
// Original fictional model. Values in thousands of euros; response removes only the specified loss.
function informationModel({prior,sensitivity,falsePositive,loss,responseCost,testCost}){
if(![prior,sensitivity,falsePositive].every(x=>Number.isFinite(x)&&x>=0&&x<=1)||![loss,responseCost,testCost].every(x=>Number.isFinite(x)&&x>=0))throw Error('Invalid model inputs');
const positive={adverse:prior*sensitivity,normal:(1-prior)*falsePositive};
const negative={adverse:prior*(1-sensitivity),normal:(1-prior)*(1-falsePositive)};
const round=x=>Math.round(x*1e10)/1e10;
function branch(x){const p=x.adverse+x.normal;if(p===0)return{probability:0,posterior:null,action:'unreachable',weightedCost:0};const risk=x.adverse/p;return{probability:round(p),posterior:round(risk),action:responseCost<risk*loss?'respond':responseCost===risk*loss?'tie':'do-not-respond',weightedCost:Math.min(p*responseCost,x.adverse*loss)};}
const plus=branch(positive),minus=branch(negative),base=Math.min(responseCost,prior*loss),policy=plus.weightedCost+minus.weightedCost,perfect=prior*Math.min(responseCost,loss);
return {positive:{...plus,weightedCost:round(plus.weightedCost)},negative:{...minus,weightedCost:round(minus.weightedCost)},baseline:round(base),beforeTestCost:round(policy),withTestCost:round(policy+testCost),grossValue:round(base-policy),netValue:round(base-policy-testCost),perfectInformationValue:round(base-perfect)};
}
const inputs={prior:.2,sensitivity:.75,falsePositive:.1,loss:100,responseCost:20,testCost:3};
console.log(JSON.stringify(informationModel(inputs)));O teste custa três mil e chega antes da decisão. A política responde a positivos e não responde a negativos, com custo esperado total de 12,6 mil nas hipóteses dadas. Não é uma garantia sobre a perda de uma migração concreta.
Armadilhas comuns
Inverter probabilidades condicionais, tratar um negativo como ausência de risco, omitir custo ou atraso do teste e confundir um sinal informativo com uma resposta que altera o evento.
Tópicos relacionados: Comparar opções e dimensionar reservas · Decisões quantitativas e valor da informação · Analisar evidência e prioridades
Calcula primeiro a distribuição conjunta e depois a melhor ação em cada ramo. A informação só melhora esta escolha se chegar a tempo e permitir uma decisão útil dentro dos critérios acordados.
Referência: Concerns of project managers: decision analysis approaches · PMI-RMP five-domain ECO, updated-2024 public document