Selo de estado:
Preview(teto atual do produto) · Curso ACD-420 — Analista de IA: relatórios, alertas, anomalias e previsões · Aula 8 de 9 · Atualizado em 2026-10-04.
Objetivo#
Ao final desta aula você vai decompor variação por dimensão — e saber por que contribuição não é causa.
Vídeo#
Identificador no manifesto: acd-420-08-decomposicao-de-variacao · duração-alvo 6 min · tela do produto: /relatorios.
Roteiro de gravação (4 capítulos):
| # | Minutagem-alvo | Capítulo | Tela do produto |
|---|---|---|---|
| 1 | 0:00–1:00 | Abertura: título + selo Preview. O que a decomposição responde e por que ela é determinística. | /dashboards/[id] |
| 2 | 1:00–3:00 | A conta que fecha: Σ contribuições == Δ total, com resíduo explícito; segmentos que entraram e que saíram. | planilha de apoio |
| 3 | 3:00–4:30 | Estado: motor provado por testes, sem botão na interface nesta versão; o que isso significa na prática. | /relatorios/[id] |
| 4 | 4:30–6:00 | Limites: uma dimensão por vez, razões têm conta própria, contribuição ≠ causa. Encerramento com a checagem. | /dashboards/[id] |
Conteúdo#
A pergunta que ela responde
Um KPI mostra "receita −12% vs. o período anterior". A pergunta seguinte é sempre a mesma: quem puxou isso para baixo? A decomposição de variação pega essa variação — o mesmo par de períodos que o Δ% do KPI usa — e a reparte por dimensão: quanto cada categoria, filial, canal ou produto contribuiu para o número subir ou cair.
E ela é determinística: aritmética no servidor, com soma compensada para não perder centavos em cifras grandes, divisão segura e desempate alfabético. Nenhum modelo de linguagem decide o que contribuiu. Quando a narrativa de relatório (Aula 2) usa essa evidência, o LLM recebe a conta pronta e só redige — ele não calcula.
A conta fecha, e o que não fecha aparece
A propriedade central é esta: a soma das contribuições fecha com a variação total. O que não fecha aparece como resíduo explícito — nunca é escondido, nunca é redistribuído em silêncio.
| Filial | Período anterior | Período atual | Contribuição | % da variação |
|---|---|---|---|---|
| Uberlândia | 62.000 | 48.000 | −14.000 | 70% |
| Uberaba | 41.000 | 36.000 | −5.000 | 25% |
| Araguari (nova) | — | 3.000 | +3.000 | −15% |
| Patos (encerrada) | 4.000 | — | −4.000 | 20% |
| Total | 107.000 | 87.000 | −20.000 | 100% |
Repare em duas linhas: a filial nova (apareceu no período atual) e a encerrada (saiu). As duas entram na conta — ignorá-las quebraria o fechamento. E repare no sinal: um segmento que cresceu num total que caiu tem contribuição positiva e percentual negativo da variação. Isso confunde na primeira leitura e está certo.
A decomposição também opera sobre o snapshot já filtrado por RLS do painel: quem não vê uma filial no visual também não a vê na decomposição. Dimensões categóricas e métricas numéricas — texto nunca vira métrica.
Esta aula é de
conhecimento: ainda não há botão na interface O motor está implementado e provado por testes, mas a superfície do produto — o "explique a variação" dentro dos insights do painel e da narrativa do relatório — ainda está em construção nesta versão. Não há nada para ligar ou desligar. Quando a superfície chegar, ela seguirá a chave de desligamento e os papéis da capacidade que a exibir. É por isso que o exercício desta aula é de leitura e conta à mão, não de clique.
As recusas
- Sem período anterior (primeiro snapshot): não há variação a decompor — e a capacidade não inventa uma base. É a mesma honestidade da narrativa sem comparativo (Aula 2).
- Base zero: a variação percentual sai vazia e sinalizada, nunca
InfinitonemNaN. A contribuição absoluta continua válida e útil. - Valores não numéricos na métrica contam zero nos dois períodos — a regra é simétrica, então o fechamento não quebra.
Limites
| Limite | Consequência prática |
|---|---|
| Contribuição não é causa | "Uberlândia respondeu por 70% da queda" é aritmética sobre o dado; não diz por que Uberlândia caiu |
| Uma dimensão por vez | não cruza filial × categoria; você decompõe por uma, depois pela outra |
| Não detecta sazonalidade | a conta não sabe que dezembro é diferente |
| Não compara com meta | o par é atual × anterior, não realizado × meta |
| Razões têm conta própria | ticket médio, margem %, conversão: somar contribuições de uma razão como se fossem valores absolutos daria conta errada |
O último merece um exemplo. Ticket médio é MEDIDA('Receita') dividida por MEDIDA('Pedidos') — uma razão. Se você decompusesse o ticket médio somando contribuições por filial como se cada uma fosse um valor absoluto, a soma não fecharia com a variação do ticket total, porque o denominador também mudou. Para razões existe uma decomposição própria, que separa o efeito do numerador do efeito do denominador. Na prática: não aplique a conta de SOMA(valor) a uma métrica que é divisão.
Exemplo Aurora
A receita da Aurora caiu R$ 20 mil (de R$ 107 mil para R$ 87 mil) entre duas semanas. A tabela acima é a decomposição por filial: Uberlândia responde por 70% da queda, Uberaba por 25%, a filial encerrada de Patos por 20%, e a nova de Araguari suaviza a queda em R$ 3 mil. Soma: exatamente −R$ 20 mil, sem resíduo.
O que maria pode dizer na reunião: "70% da queda está em Uberlândia". O que ela não pode dizer: "a queda foi causada por Uberlândia" — ou pior, "foi causada pela troca de gerente em Uberlândia". A decomposição aponta onde olhar; o porquê exige investigação, e nenhuma capacidade deste curso entrega causa.
Decompondo a mesma variação por categoria, ela descobre que 60% dela está em "Hidráulica" — e a interseção entre Uberlândia e Hidráulica é a próxima pergunta, que a capacidade não responde (uma dimensão por vez).
Erros comuns
| Erro | Por que é erro |
|---|---|
| Ler contribuição como causa | é aritmética sobre o dado, não explicação |
| Esperar um botão "explique a variação" nesta versão | o motor existe; a superfície está em construção |
| Ignorar o resíduo informado | ele é a parte que a conta não explica — e existe para ser vista |
| Esquecer segmentos novos e encerrados | sem eles o fechamento quebra |
| Aplicar a conta de valor absoluto a uma razão | ticket médio e margem % exigem a decomposição de razão |
| Cruzar duas dimensões na mesma decomposição | é uma dimensão por vez |
| Esperar decomposição no primeiro snapshot | sem período anterior não há variação a decompor |
Estado e gates
Preview no teto do produto; o motor é GA-candidato na matriz de capacidades, com o fechamento matemático provado (Σ contribuições == Δ total dentro de uma tolerância explícita, testado em estilo property-based com entradas aleatórias e semente fixa, mais segmentos novos e que saíram, base zero e determinismo byte a byte). A exposição na interface está pendente. Custo zero: não consome orçamento de IA, não há egress. Se a evidência for depois narrada por uma capacidade com LLM, valem as regras de egress daquela capacidade.
Faça você mesmo#
Esta aula é de conhecimento: não há superfície para operar nesta versão, então o exercício é de leitura e conta à mão — nenhum passo consome orçamento de IA.
- No workspace de treino Aurora Varejo, abra um painel com um KPI que mostre Δ% vs. o período anterior e anote a variação total em valor absoluto.
- Exporte (ou copie) a tabela do visual que quebra essa mesma métrica por filial, com os dois períodos.
- Calcule a contribuição de cada filial:
atual − anterior, incluindo as que apareceram e as que saíram entre os períodos. - Some as contribuições e compare com a variação total do passo 1 — se não fechar, o que falta é o resíduo; identifique-o.
- Ordene por contribuição e escreva a frase correta ("X responde por N% da variação") e a frase errada ao lado ("a variação foi causada por X"), para fixar a diferença.
- Repita os passos 2 a 4 por categoria e observe que a resposta muda sem que nenhuma das duas esteja errada.
- Pegue uma métrica que seja razão (ticket médio =
MEDIDA('Receita')÷MEDIDA('Pedidos')), tente a mesma conta e mostre que a soma não fecha — explique por quê. - Confirme na interface que, nesta versão, não existe um botão de "explique a variação" para clicar.
Você terminou quando sua soma de contribuições por filial fechar com a variação total do KPI (ou você souber apontar o resíduo) e você conseguir explicar, com a sua própria tabela, por que contribuição não é causa.
Checagem rápida#
Três perguntas no final da aula, corrigidas no servidor. A aula só conta como concluída depois da checagem.
Documentação relacionada#
Capacidades ensinadas#
C13.3 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".