
«Removemos raça e renda do modelo» é a frase que perde o processo sobre precificação
Em dezembro de 2025, a FTC firmou um acordo de 60 milhões de dólares com a Instacart referente aos experimentos de precificação da Eversight, com a denúncia documentando variações de até 23 % nos preços de itens idênticos. A FTC nunca precisou comprovar o que havia sido repassado ao algoritmo; a acusação baseou-se estritamente nos preços que foram efetivamente exibidos a diferentes compradores para o mesmo produto.
A frase à qual toda equipe de precificação recorre é o exato oposto de um argumento focado em desfechos: removemos raça e renda do modelo. Eu acredito nas equipes que dizem isso. Também acredito que é a frase que perde a causa na Justiça, e em vez de debater isso em abstrato, desenvolvi um motor de precificação capaz de afirmar isso de si mesmo com total veracidade e, em seguida, o auditei. O motor é um LinUCB contextual bandit com sete opções de preço, inicializado com a seed 42, treinado para ser ótimo em receita sobre uma população sintética de 10.000 consumidores que gerei com uma estrutura de variáveis proxy inserida intencionalmente. Chamei a varejista fictícia de ShopMart. Nenhum lojista real foi auditado e nenhum cliente real foi sobretaxado, e é exatamente por isso que conheço a verdade de base (ground truth) e posso aferir a auditoria a partir dela. A camada superior é um console que chamei de Equity, projetado para operar sobre qualquer motor de precificação que o varejista já possua; nesta implementação, o motor sob exame é meu próprio bandit. O fluxo completo está disponível em veriprajna.com/demos/ai-pricing-compliance.
Mesmos fones de ouvido, demanda correspondente, 26 % mais caro
Forneci ao bandit nove variáveis de entrada e nenhuma delas é um atributo protegido: índice de renda do CEP, categoria do dispositivo, canal de origem, tempo de permanência, volume do carrinho, taxa de recompra, contagem de sessões, assinatura premium e hora do dia, além de termos cruzados de origem por permanência. Motores reais frequentemente utilizam termos cruzados ou árvores decisórias, e eu queria que o meu replicasse essas capacidades. Depois, deixei que ele precificasse um único SKU, o Aura Wireless Earbuds, com preço de tabela de 79.00 $, ao longo de todas as 10.000 decisões.
O cartão principal no console é a primeira coisa na tela antes de qualquer execução. Duas coortes, um produto, sinais de demanda correspondentes. O Conjunto de Decisões A representa a coorte de CEP de alta renda e dispositivo novo, 2.880 decisões, figurada no cartão por um CEP do Upper East Side e um iPhone novo: preço exibido 74.06 $. O Conjunto de Decisões B é a coorte de CEP de maioria minoritária e dispositivo antigo, 3.037 decisões, figurada por um CEP do South Bronx e um Android antigo: 93.47 $. Variância medida: +26.2 %. Essas são médias de coorte sobre cerca de 3.000 decisões cada; portanto, trata-se do comportamento sistemático da política e não de um comprador azarado isolado. O CEP e o celular em cada cartão constituem o perfil representativo da coorte, não a sua definição.

O que me desconsertou foi que eu não havia escrito nada que pudesse ser rotulado como regra discriminatória. Programei um maximizador de receita e forneci a ele sinais que predizem a propensão a pagar. O CEP prediz a renda, a renda prediz a elasticidade de preço, um Android antigo prediz menor comparação de ofertas. Nenhum desses dados é raça. No entanto, todos se movem em consonância com ela, e um bandit incentivado por receita descobre cada correlação. Esses 26 % são o reflexo exato de como a otimização de receita se manifesta quando os sinais carregam a coorte.
O proxy oculto entre duas entradas limpas
Projetei a auditoria para pontuar cada entrada por três vias, porque cada teste individual que idealizei apresentava brechas: correlação linear de Pearson absoluta com a coorte protegida (um rótulo que a auditoria nunca recebe), informação mútua normalizada (NMI) e um replay contrafactual de preços. Este último sobrescreve essa única entrada para a cohorte protegida com o valor de referência da coorte favorecida, mantém constantes todas as demais variáveis, executa novamente a política do motor e mede o deslocamento do preço. O replay é agnóstico ao modelo: varia a entrada e observa a saída, não importando se o motor é um bandit, uma árvore ou uma caixa-preta corporativa.
As duas primeiras linhas da tabela Input Audit correspondem às previsões mais óbvias. Índice de renda do CEP: |r| 0.95, MI 1.00, contrafactual +7.8 %, VIOLATION. A geografia codifica integralmente a classe protegida nessa população e o motor baseia seus preços nela. Categoria do dispositivo: 0.32, 0.08, +2.9 %, VIOLATION, um sinal aparentemente neutro que ultrapassa o limiar de correlação de 0.30 e o limiar de MI de 0.05 programados no código.
A terceira VIOLATION é aquela que uma auditoria isolada por variáveis não consegue enxergar. Origem isolada: |r| 0.00, MI 0.00, PASS. Tempo de permanência isolado: 0.17, 0.03, PASS. Uma auditoria individual aprova ambos e segue adiante. A linha de interação Origem × Permanência acusa |r| 0.00, MI conjunta de 0.73, contrafactual +1.7 %, VIOLATION. Isso representa um ganho de interação de 0.71 sobre o melhor componente individual.

Estruturei esse padrão simulando uma porta lógica XOR. Um acesso orgânico com permanência longa marca a coorte protegida. Um acesso por comparador com permanência curta também a marca. Acessos orgânicos curtos e comparadores longos marcam a coorte favorecida. Nem o canal de chegada nem a permanência separam os grupos isoladamente; a combinação de ambos o faz. A correlação linear é cega para isso. A informação mútua do par evidencia isso nitidamente. Um programa de conformidade que audita variáveis isoladamente está auditando o objeto errado, e não encontrei outra maneira de provar isso a não ser construindo uma população em que o resultado da análise individualizada estivesse flagrantemente equivocado.
A linha de defesa que eu mesmo teria apresentado
Testei a linha defensiva que eu outrora teria apresentado a um órgão regulador, a saber, a equidade pelo desconhecimento (fairness through unawareness): remover o CEP e o dispositivo, retreinar o motor e apresentar o resultado. Eu sabia que o proxy composto continuava lá. O que eu não sabia era quanto daquele 0.43 cabia unicamente ao CEP e ao dispositivo, e quanto ao par oculto. Omitir CEP e dispositivo e retreinar deslocou a razão de quatro quintos de 0.43 para 0.59. Ainda uma reprovação, e a discrepância restante é exatamente a parte que sobrevive a qualquer auditoria univariada. O cartão de benchmark resume o motivo em quatro palavras: Compound Proxy Still Leaks.

Esse desfecho mudou a forma como encaro aquela frase. O motor localizou a coorte de qualquer maneira, por meio de dois sinais aprovados em todos os testes univariados, e continuará localizando, porque localizar é precisamente o que um maximizador de receita é recompensado por fazer. A premissa do desconhecimento não custa nada para a equipe alegar, mas entrega um dado que ela terá de justificar em juízo.
O índice de 100 % naquele cartão possui um significado estritamente delimitado. O benchmark reconstrói a mesma população de seed 42 e pontua a auditoria diante dos parâmetros que inseri; precisão e revocação de 100 % significam 3 de 3 proxies plantados recuperados com 0 falsos positivos naquele conjunto sintético rotulado. Trata-se de uma checagem interna diante de uma verdade controlada, a qual eu não citaria como taxa de acerto nos registros reais de vendas de uma empresa, carregados de fatores de confusão impossíveis de simular.
O que significa 0.43 e por que não deixei um modelo decidir isso
Recusei-me a inventar uma métrica interna de conformidade, porque uma autoridade fiscalizadora não tem qualquer razão para validar um número fabricado. O filtro em Equity adota um padrão jurídico externo: a regra dos quatro quintos da EEOC, 29 CFR 1607.4(D), adaptada de taxas de seleção para faixas tarifárias. Favorável significa ser enquadrado em uma faixa inferior à máxima. No motor padrão, 36 % da coorte protegida recebe a faixa tarifária favorável contra 83 % da coorte favorecida. 0.36 dividido por 0.83 resulta em 0.43, a exigência legal é de 0.80, e o mostrador fica vermelho em Fail. Ao lado: 64 % da coorte protegida na faixa de preço máxima e um sobrepreço médio de +15.6 % em relação à coorte favorecida.

A lógica decisória roda em NumPy puro, fora da camada de agentes, em uma sequência rigorosa que posso expor a qualquer advogado. O sinal de duplo uso é avaliado antes do teste de infração: Membro Premium apresenta correlação de 0.24 com a coorte protegida e é simultaneamente um indicador comercial legítimo; o código retorna ABSTAIN e o encaminha para auditoria jurídica em vez de acusá-lo ou absolvê-lo sumariamente, impedindo que qualquer rotina posterior o promova a infração. Seguem-se os limiares de violação, a margem de abstenção e finalmente PASS. Tamanho do carrinho, recompra, sessões e hora são todos aprovados. A auditoria não condena indiscriminadamente tudo, e uma auditoria que aponta falhas em tudo é tão inútil diante de uma intimação civil (Civil Investigative Demand) quanto uma que não aponta nada.
Os agentes do time colegiado — um auditor de variáveis e um contestador — redigem análises fundamentadas; o terceiro papel previsto, o mapeador regulatório, consiste nesta versão em uma tabela de consulta estática em vez de um modelo. O papel do contestador é defender energicamente o benefício de fidelidade para a variável abstida, o que ele faz na tela. Todavia, ele não pode alterar o valor 0.24, não pode mudar um veredito nem decidir se 0.43 é inferior a 0.80. Estabeleci essa fronteira desde o início: agentes aconselham, código decide, e o modelo é livre para argumentar com toda a eloquência sobre números nos quais não pode tocar.
O ajuste que eu esperava que funcionasse
A primeira correção que testei foi um teto, pois é a resposta imediata de qualquer equipe de preços: nunca cobrar mais de 15 % acima do preço de referência justo. Criei essa abordagem como Hard-Cap Baseline acreditando que seria a solução sóbria e satisfatória. Ela custou 0.2 % da receita e falhou na auditoria com 0.59. A assinatura de manipulação evidente no cartão elucida o motivo: 29 % da coorte protegida acabou precificada a menos de 1 % do limite máximo. O veredito acusa Gamed To The Boundary. O teto custa pouco exatamente porque o motor reposicionou a coorte prejudicada logo abaixo do limiar — e essa combinação de baixo custo e reprovação é atraente em reuniões orçamentárias, mas indefensável na fase de exibição de provas.
Um maximizador de receita encara um teto como uma meta.

O controle que se sustentou é a modelagem de recompensas com foco em equidade (Fairness-Aware Reward Shaping). Em vez de uma barreira rígida, ela puxa continuamente cada preço em direção a um valor de referência isento de proxies — um segundo bandit treinado sem as variáveis distorcidas e preservando os sinais legítimos —, localizando por busca binária o menor peso que supere 0.80. Neste motor esse peso é de 0.65; um degrau abaixo, em 0.625, alcançou-se apenas 0.778. Razão de quatro quintos após a remediação: 0.82, Pass. Custo sobre a receita: 1.3 %. Padrão de manipulação de 2 %, visto que não há barreira artificial para explorar. As letras miúdas do console ressaltam que o impacto na receita é específico para este motor sintético, e reitero isso veementemente: 1.3 % é uma medição em uma população de teste, não uma tarifa universal para a justiça algorítmica.
Para que serve o dossiê probatório
Desenvolvi o dossiê de evidências por último, pois tudo o que veio antes só ganha relevância se um advogado puder juntá-lo aos autos. Quando uma intimação investigativa (CID) é recebida, a empresa que não registrou os dados corretos passa meses em exaustivas extrações periciais. O Equity consolida os achados da auditoria em um pacote JSON acompanhado de uma versão HTML pronta para impressão: nome e versão do motor, as 10.000 decisões avaliadas, a conformidade apurada, a disparidade documentada, o veredito e fundamentação de cada variável, o resultado da remediação e um hash SHA-256 do documento para comprovar inviolabilidade. Cada VIOLATION é vinculada a cinco regimes legais: a regra dos quatro quintos da EEOC, a Lei de Divulgação de Precificação Algorítmica de Nova York (vigente em 10 de novembro de 2025, multa civil de até 1.000 $ por violação), a Lei de IA do Colorado (SB 24-205, efetiva em 30 de junho de 2026), os artigos 13 e 14 da Lei de IA da UE (obrigações de alto risco a partir de 2 de agosto de 2026) e a Seção 5 do FTC Act. A variável retida direciona para uma linha de análise jurídica.
O enquadramento regulatório é uma tabela estática. Teria sido simples delegar sua redação a um modelo de linguagem, mas descartei isso: cada VIOLATION recebe exatamente as mesmas cinco linhas legais, a abstenção recebe sua nota de análise e nenhum texto argumentativo é gerado para essa amarração. Um modelo que divaga sobre a incidência de leis é um modelo cujos argumentos mudarão na versão seguinte — e um dossiê cuja tipificação jurídica oscila com o modelo é um dossiê que um perito judicial desconstruirá sem esforço. Os resumos narrativos no pacote são gerados por modelo e armazenados em cache; os números, vereditos e enquadramentos legais decorrem de código determinístico. O dossiê mantém sua validade processual independentemente do modelo subjacente. O detalhamento completo, com o exame minucioso do dossiê na tela, encontra-se em veriprajna.com/demos/ai-pricing-compliance.
A Veriprajna não estipula preços, não substitui Pricefx, PROS, Zilliant ou Competera, nem emite pareceres jurídicos formais. O motor do cliente segue operando sua precificação. Eu forneço as provas materiais contundentes; o corpo jurídico deles toma as decisões.
E se você preferir acompanhar a execução da auditoria em vez de ler meu relato, aqui está o procedimento completo de ponta a ponta.
Volto reiteradamente à afirmação da equipe de precificação porque ela condiz com os fatos: raça e renda não constam no modelo. No motor que desenvolvi, essa frase verdadeira convive com uma defasagem de 26 % nos mesmos fones de ouvido, um indicador de 0.43 e um teto que falhou enquanto parecia ter funcionado. Ninguém informou ao motor o perfil do comprador. Uma função de recompensa por faturamento foi suficiente, porque deduzir esse perfil representava a estimativa mais rentável possível — e a auditoria apurou com rigor científico até onde isso foi. A declaração que se sustenta diante de um magistrado é bem mais contundente: sabíamos que o motor inferiria a coorte sem receber instruções, medimos a extensão do desvio, e este foi o custo para contê-lo.


