Skip to content

Limitations — what EthicLens does not prove

A fairness tool that oversells itself is worse than none. This page states, plainly, the boundaries of what EthicLens can and cannot establish. Read it before trusting any number this system produces.

EthicLens computes statistical fairness metrics (Disparate Impact, Statistical Parity Difference, Equalized Odds, …). Meeting the 0.80 four-fifths threshold is evidence, not a legal safe harbour. Adverse-impact law (EEOC Uniform Guidelines; EU AI Act conformity) involves job-relatedness, business necessity, and the availability of less-discriminatory alternatives — none of which a metric can settle. Use EthicLens to triage and document, not to certify.

2. The Composite Bias Score is a convenience, not a standard

The composite folds three metrics into one number with chosen weights (0.40 / 0.35 / 0.25). The weights are a product decision, not a law of nature. Always read the raw per-group metrics and their confidence intervals — the composite can mask a single severely-harmed group. (Despite the name, a higher composite is fairer.)

3. The golden Disparate Impact is empirically pinned, not analytically known

The golden-reference model's DI (≈ 0.55) is a regression anchor reproduced under a frozen seed, dataset, and code version — not a closed-form truth. A trained classifier's selection-rate ratio is an emergent property of the model, features, threshold and fit; it cannot be derived in closed form. The CI band (±0.02) exists to absorb platform-level floating-point non-determinism. The value is meaningful as a drift detector, and that is all it claims to be.

4. Error-based metrics require ground-truth labels

Equalized Odds, Equal Opportunity, predictive parity and calibration compare error rates, which need true outcomes Y. On a label-free cohort (e.g. purely synthetic personas) these are uncomputable, and EthicLens returns INSUFFICIENT_DATA rather than a fabricated value. This is the central correction over the original specification — see docs/methodology.md.

5. Confidence intervals depend on subgroup size

Bootstrap CIs are only as trustworthy as the sample they resample. Below the minimum-subgroup floors (100 for rates; 30 positives and 30 negatives for error metrics) EthicLens reports INSUFFICIENT_DATA. Intersectional subgroups thin out fast; a wide CI means "we don't know," not "it's fair."

6. Untrusted model files are not safely sandboxed

The current code can deserialize Python pickle/joblib files inside the API or worker process — a remote-code-execution risk. Model-file HTTP endpoints and model-backed execution are disabled by default; the Cloud Run entrypoint enforces that mode. ENABLE_MODEL_FILE_INGESTION=true is only for trusted local model files and must not be enabled on a public API. A real isolated loader is future work; see ADR 0002.

7. Counterfactual probing tests a narrow notion of fairness

Flipping a single protected attribute and holding all else fixed measures ceteris paribus individual sensitivity. Real causal pathways are entangled (a protected attribute correlates with many features), so a low counterfactual flip-rate does not imply the absence of structural bias.

8. Benchmarks are not your data

The bundled datasets (Folktables/ACS, COMPAS, German Credit) illustrate the engine. Fairness findings on them say nothing about your model on your population. Re-run on representative, governed data before drawing conclusions.

9. The hosted agent is a demonstration deployment, not production infrastructure

The live agent (Cloud Run + Supabase + Vercel, see DEPLOYMENT.md) runs on free tiers with no uptime guarantee. Cloud Run scales to zero between requests, so the first request after idle time pays a cold-start cost (a few seconds). Treat it as a portfolio artifact to click through, not a system to depend on.

10. The agent's narrative and Q&A can silently downgrade to numeric-only

The LLM layer (schema inference, narrative, chat) degrades to a plain numeric summary — never a fabricated explanation — under any of: no GROQ_API_KEY/GEMINI_API_KEY configured, the daily LLM call budget exhausted (agent_daily_llm_call_cap in config.py), or two consecutive generations failing the number-grounding validator (agent/grounding.py). Every response carries grounded/degraded flags so this is never silent to the API caller — the UI surfaces them as badges — but it means two audits of the same data can produce different prose (never different numbers) depending on quota state.

11. Measured mitigation is one strategy, not a menu

The agent's before/after mitigation chart is measured (fit on a train split, evaluated on held-out data) only for group-specific decision thresholds (Fairlearn's ThresholdOptimizer), and only when the uploaded CSV has both a continuous score column and true labels. Reweighing and constrained-retraining strategies — available in the core fairness_core.mitigation engine and the enterprise /sessions workbench — need a trainable model object, which a predictions-only CSV structurally never provides. This is a design constraint of the hosted agent, not an oversight; see agent/executor.py.

12. The agent never persists what you upload

Predictions CSVs are parsed in memory and discarded; only the derived scorecard JSON and narrative are stored (AgentAuditRecord). Uploads are capped at 5MB / 50,000 rows. The three demo datasets are the only data that ships with the deployment. Schema inference (Stage 1) does send the column names and five sample rows to the configured third-party LLM provider (Groq or Gemini) to propose column roles, subject to that provider's own retention policy — "never persisted by EthicLens" does not mean "never seen by a third party."

13. The hosted agent intentionally exposes a smaller surface than the full repo

Model-file ingestion and the arq/Redis worker queue exist in this repository, but model-file ingestion and execution are explicitly disabled in the hosted deployment. The hosted agent accepts predictions CSVs only (see agent/csv_ingest.py) and runs every job in-process (EAGER_TASKS=true) instead of queuing to a worker. Each is a deliberate scope decision for a public, free-tier deployment, not a missing feature — see DEPLOYMENT.md.


If you find a place where the code claims more than this document allows, that is a bug — please open an issue.

14. Sign-off fingerprints are not cryptographic attestations

Signing off captures a canonical SHA-256 fingerprint of the audit session, protected attributes, metrics and mitigation logs. The integrity endpoint can detect subsequent changes, especially when the original fingerprint was retained in an independent system. However, both the fingerprint and data live in the same database: anyone able to rewrite both can conceal changes. This is not a digital signature or immutable audit ledger. See docs/governance-integrity.md.

15. Insufficient evidence must not look like a fairness pass

The audit now checks minimum subgroup sizes on both sides of every comparison, withholds the three-metric composite if any metric is missing (including label-free Equalized Odds), and reserves statistical flags for valid confidence intervals. A point estimate below 0.80 is descriptive, not automatically a statistically supported violation. Conversely, no flag may mean inconclusive evidence rather than a clean result. The Model Card and PDF explicitly distinguish these states.

16. Excluded cohorts cannot silently disappear from overall summaries

The hosted agent omits extremely small (<30-row) subgroups from direct comparison. When any such subgroup is excluded, the overall minimum DI and three-metric composite are withheld rather than computed from a selected subset. Available per-comparison findings are still shown. This avoids implying a full-population fairness assessment based only on the larger groups.

17. Threshold crossings in mitigation are point estimates

A mitigation's reported before/after improvement is measured on held-out rows when available, but the UI's "crosses 0.80" label only refers to the point estimate. It is not a confidence-qualified threshold crossing, proof of generalization to deployment, or clearance under any regulatory standard.