AI pricing compliance and algorithmic fairness
When the Civil Investigative Demand arrives, the answer should be a file. Equity is a pricing-defensibility audit layer that sits on top of whatever pricing engine a retailer already runs. It replays the engine's own decision log, scores every pricing input for protected-class leakage including the compound proxies per-feature checks cannot see. It gates the outcome against the EEOC four-fifths rule in deterministic code, measures what the fairness constraint costs in revenue, shows why the obvious fix gets gamed, and seals the record into a SHA-256-hashed, regulation-mapped evidence pack built for exactly that demand.
+26.2%
Higher price for the majority-minority-ZIP, old-device cohort, same SKU
Cohort means over 3,037 and 2,880 seeded synthetic decisions, matched demand signals
0.43 to 0.82
EEOC four-fifths ratio, Fail to Pass, after fairness-aware reward shaping
At a measured 1.3% revenue cost on this synthetic engine and scenario
0.73
Joint mutual information of a compound proxy whose two components each pass
Referral × Dwell Time; dropping ZIP and device alone still fails the gate at 0.59
Every demo figure on this page is synthetic and seeded. ShopMart Dynamic Pricing is a LinUCB contextual bandit we built as the stand-in for the engine a client would run, the Aura Wireless Earbuds and the 10,000 shoppers are generated, and the proxy structure is planted so the audit has something real to catch. No real retailer was audited and no real shopper was overcharged.
A General Counsel or Head of Pricing at an e-commerce platform with New York and California volume runs a dynamic-pricing engine that never ingests race or income and is still exposed, because the engine prices on ZIP code, device tier and session behaviour, and each of those carries demographic signal. A contextual bandit optimizing revenue will find every input that predicts willingness to pay, including the ones that are really predicting who the shopper is. ZIP predicts income; income predicts price sensitivity; an old Android phone predicts less comparison shopping. None of those is race. All of them move with it. By the time the Civil Investigative Demand lands, a team with none of this on record spends months in reactive forensic extraction.
The FTC's $60M settlement with Instacart over its Eversight pricing experiments (FTC, December 2025) was an outcome-based action. The complaint documented different shoppers being shown different prices for identical items, up to 23% apart. It was not a finding of group-based discrimination, and it did not depend on what the algorithm had been told.
New York's Algorithmic Pricing Disclosure Act, effective November 10, 2025, requires conspicuous disclosure when personal data moves a price and carries a civil penalty of up to $1,000 per violation. Colorado's SB 24-205, effective June 30, 2026, treats pricing as a consequential decision that needs an impact assessment.
The EU AI Act's high-risk obligations apply from August 2, 2026. Articles 13 and 14 cover high-risk transparency and anti-discrimination documentation, and high-risk non-compliance carries penalties up to a statutory maximum of €15M or 3% of global turnover.
The pipeline is one pass over the engine's own decision log: 10,000 pricing decisions from the engine under audit, a deterministic input audit, a four-fifths gate, a fairness-constraint synthesis compared against a gameable cap, agent narration, a SHA-256-hashed evidence pack, and a labeled benchmark. Agents advise, code decides, and that split is what keeps the pack filable whichever model sits underneath.
01 / THE ENGINE UNDER AUDIT
The engine under audit is ShopMart Dynamic Pricing, a 7-arm LinUCB contextual bandit seeded at 42, pricing one SKU, the Aura Wireless Earbuds at a $79.00 list, for a synthetic labeled population of 10,000 shoppers. It prices on ZIP income index, device tier, referral, dwell time, cart size, repeat rate, session count, premium membership and hour, plus referral by dwell cross-terms of the kind many real engines carry. The protected cohort is a latent label the audit never receives. In the demo, this bandit is the engine under audit.
02 / THE DETERMINISTIC INPUT AUDIT
Run Audit computes, in pure numpy, the absolute Pearson correlation of every pricing input against the protected cohort, its normalized mutual information, a joint mutual information for feature pairs, and a counterfactual price move: overwrite one input for the protected cohort with the advantaged cohort's reference value, hold everything else constant, re-run the engine's own policy and measure how far the protected cohort's price moves. The verdict rules are code, checked in order: an input whose effective sample falls under 400 is returned as insufficient evidence rather than given a proxy verdict, a rule no input in this run triggers; the dual-use loyalty signal with any material association is an ABSTAIN routed to legal review before the violation test runs; an absolute correlation of at least 0.30 or a mutual information of at least 0.05 is a VIOLATION; a correlation from 0.20 up to 0.30 is an ABSTAIN; everything else is a PASS. For every other input the counterfactual corroborates and never triggers a verdict on its own; only for the dual-use signal does a material counterfactual move count toward the ABSTAIN.
03 / THE GATE AND THE CONSTRAINT
The Disparate-Impact Gate applies the EEOC four-fifths rule (29 CFR 1607.4(D)) adapted to price tiers: the protected cohort's rate of receiving the favorable price tier divided by the advantaged cohort's, against a 0.80 threshold. Remediation then synthesizes Fairness-Aware Reward Shaping, which pulls each price continuously toward a proxy-free reference price from a second bandit trained with the four proxy inputs dropped, and binary-searches the smallest pull weight that clears 0.80. It is shown beside a Hard-Cap Baseline at 115% of the fair price, the naive fix, with the gaming signature measured for both.
04 / THE CREW AND THE PACK
A Feature Auditor explains each flagged input and an Adversarial Challenger argues the case for treating the abstained input as a legitimate signal; the Regulatory Mapper role is a fixed table that attaches each VIOLATION to five regimes and the ABSTAIN to a single legal-review line. The crew is provider-swappable, falls back to deterministic templates when no model provider is configured so the app runs identically, and cannot compute a number or set a verdict. Evidence Pack seals the engine name and version, the population audited, the gate, every finding with its rationale, the regulatory mapping, the remediation result and the narration summary into JSON plus a printable HTML pack, with a SHA-256 digest of the pack body as its tamper-evident hash.
The console is two views plus dialogs. The manual view holds the Pricing Outcome Comparison card and an activity panel that streams each stage; every result opens as a dialog titled Audit Results, Remediation Results or Evidence Pack Results, and Remediation and Evidence Pack stay disabled until Run Audit completes. Run Benchmark switches to a separate Benchmark Results view. About Demo states the scenario boundary on screen: a synthetic engine with known ground truth, whose results demonstrate the method and are not evidence of field-validated intent. Every number below sits inside that boundary.
The demo audits 10,000 seeded synthetic pricing decisions on one SKU. What follows is what the run puts on screen, in the order it puts it there.







The numbers above come from one seeded synthetic population of 10,000 pricing decisions on one SKU with a planted, reproducible proxy structure. The figures show that the method recovers planted structure with labeled-set accuracy. They are not an accuracy rate on real pricing data, not a benchmark against competitors, and not a claim about any real retailer.
| Question | What Equity does in this demo | What remains outside the demo |
|---|---|---|
| Integration | Audits the LinUCB bandit the demo app carries as its stand-in engine, and is designed so a client's engine can be swapped in behind an adapter. | Any adapter code or live pricing-platform connector. None exists in this build, and no named vendor is a customer or partner. |
| Demographic data | Reads a curated reference table of ten New York and California ZIPs and a seeded device skew hard-coded in the app. | A live census or device-ownership feed. The table is small and hand-curated, and the protected cohort is a planted label. |
| Findings | Recovers the planted proxy structure and records every input's verdict with its rationale in the pack. | Proof of real-world discrimination or intent; the machinery issues no verdict of intent. |
Equity does not set a price for any customer and does not replace Pricefx, PROS, Zilliant or Competera; the engine prices, Equity audits and constrains. It does not certify compliance, guarantee a pass or give legal advice; the pack is evidence for the client's counsel. The build covers one SKU and the disparate-impact track from audit to evidence pack; algorithmic collusion, multi-jurisdiction disclosure middleware, streaming monitoring and a checkout surface are outside it. The South Bronx and Upper East Side profiles on the Pricing Outcome Comparison card are representative labels for multi-ZIP, multi-device cohorts, not claims about any real neighbourhood.
Because the engine does not need to see race or income to price by it. In the demo the engine under audit prices on ZIP income index, device tier and session behaviour, and those inputs carry the protected class: ZIP income index correlates with it at 0.95 and device tier at 0.32. The result on the seeded synthetic population is a 26.2% higher price for the majority-minority-ZIP, old-device cohort on the same earbuds with matched demand signals, and a four-fifths ratio of 0.43 against the 0.80 threshold. The FTC's Instacart action was an outcome case about different shoppers seeing different prices for identical items, not a finding about what the algorithm had been told.
On this engine, no. The Fairness Through Unawareness baseline in the benchmark retrains without the ZIP and device inputs, and the four-fifths ratio only climbs from 0.43 to 0.59, still a fail. How the shopper arrived and how long they lingered each pass on their own yet jointly encode the cohort at a mutual information of 0.73. Per-feature correlation is blind to that pair; a joint mutual-information check is not, which is why the audit scores interactions as well as single inputs.
You can, and the demo shows what a revenue-maximizer does with it. The Hard-Cap Baseline forbids any price above 115% of the fair reference price. The engine gives up 0.2% of revenue to comply with the letter of it and lands 29% of the protected cohort inside 1% of the cap, so the four-fifths ratio only reaches 0.59 and the gate still fails. A cap is a target. Fairness-Aware Reward Shaping has no boundary to aim at, and it passes at 0.82 for a 1.3% revenue cost on this synthetic engine.
No. Equity never sets a price. It audits the engine's decisions and proposes a constraint; your engine, whether Pricefx, PROS, Zilliant, Competera or a custom bandit, keeps doing the pricing. The seam for a client's engine is a documented swap point; in the demo there is no adapter code and no live integration, so the LinUCB bandit we built is the engine, and it is audited directly.
Nothing a lawyer would have to defend is model output: the statistics, the threshold comparison, each verdict, the constraint and the pack hash all come from deterministic numpy code outside the agent layer. The Feature Auditor and Adversarial Challenger write prose; they never compute a number and cannot set or change a verdict, and the regulatory mapping is a fixed table rather than model output. With no model provider the crew falls back to deterministic templates and the app produces the same verdicts. The narration in the recorded walkthrough is a validated, cached model output, and the pack header says so.
A CID-ready evidence pack as JSON and printable HTML. It records the engine name and version, the 10,000 decisions audited, the four-fifths gate before and after remediation, every input's verdict with its rationale, the mapping of each flagged input to the EEOC four-fifths rule, the NY Algorithmic Pricing Disclosure Act, the Colorado AI Act SB 24-205, EU AI Act Articles 13 and 14 and FTC Act Section 5, the remediation result, and a SHA-256 digest of the pack body. We provide the evidence; your legal team makes the call.
It is a labeled-set self-check, and it should be read as one. The benchmark regenerates the demo's seeded 10,000-decision synthetic population and asks one question of it: did the audit find the three proxies we planted and nothing else? It did. All three were flagged, none of the four legitimate demand signals was flagged, and the single dual-use signal was abstained rather than flagged or cleared. That shows the method recovers planted structure. Real pricing logs are confounded, and you cannot ethically A/B-test charging demographic groups different prices, so on an engagement the same machinery produces evidence for legal review, never an automated verdict.
The research behind this demo — the architecture, the verification design, and the enterprise blueprint.
We are an AI engineering team, not a pricing vendor and not a compliance certifier. We start from your engine's own decision log and end at a pack your counsel can file; the call on what it shows stays with them.
A useful first conversation is concrete: which engine prices your catalog, which inputs it sees, whether it carries cross-terms or trees that could price on a compound proxy, and which of New York, California, Colorado or the EU your volume touches. We can work through the audit, the constraint synthesis and the evidence-pack format alongside your pricing, legal and data teams.