Back to Public Spending Explorer

Methodology

How we identify patterns in spending data using neutral language and transparent rules. Every signal is a statistical observation, not an allegation.

What are “signals”?

Signals are patterns in the data that may warrant closer review by researchers, journalists, or auditors. They are not accusations of wrongdoing.

Each signal uses a documented rule to flag records. The rule, the data, and the source links are all shown together so anyone can verify the finding.

Important: Signals ≠ Allegations. Statistical patterns can have legitimate explanations. Context matters.

Signal definitions

Below are the neutral pattern detectors currently active. Each includes the rule, what triggers it, and what is shown to the user.

Unusual pattern

v1

Plain language:

Payments split across consecutive days to the same vendor just under a common approval threshold.

What it means:

This flag appears when multiple smaller payments to the same vendor occur close together and individually stay below a threshold, but their total exceeds it.

Exact rule:

Group payments by vendor + agency within a 30-day window; flag when 3+ payments are each within 5% below a configured threshold and total exceeds the threshold.

What is shown:

Show the grouped rows and the computed total; never hide source values.

Not an allegation: This pattern may indicate legitimate budget cycles, procurement rules, or timing constraints. It is shown for review, not as evidence of wrongdoing.

Requires review

v1

Plain language:

Missing or inconsistent identifiers that limit traceability (e.g., vendor id present but address missing).

What it means:

This flag indicates that some expected data fields are missing or outdated in the publisher's record.

Exact rule:

Flag rows where payment_id is present but vendor_id is null, or where source_updated_at is older than 180 days versus other rows in the same dataset.

What is shown:

List the specific rows with null or old fields so a reviewer can request publisher updates.

Not an allegation: Incomplete records are common in large datasets and often result from data entry workflows, not intentional concealment.

Statistical deviation

v1

Plain language:

Vendor average payment amount materially higher than peers within the same object code and fiscal year.

What it means:

This flag shows when a vendor's typical payment size is significantly different from other vendors in the same category.

Exact rule:

Compute z-score against agency+object_code peer set; flag when |z| ≥ 2.5 and count of records ≥ 5.

What is shown:

Show the vendor mean, peer mean/standard deviation, sample size, and the rows that triggered the flag.

Not an allegation: Deviation may reflect specialized services, bulk purchases, or contract structures. Statistical outliers are not evidence of impropriety.

Versioning & changes

We version all signal rules so researchers and journalists can track changes over time.

  • Current version: v1 (initial release)
  • When a rule is updated, we publish the change log and mark results with the version used
  • Historical results remain tagged with their original rule version for reproducibility

Future versions may refine thresholds, add new signals, or remove signals that prove unreliable.

What signals are NOT

  • ✗
    Not allegations of corruption, fraud, or illegality. Signals are statistical observations only.
  • ✗
    Not investigations. We do not conduct audits or probes. We only surface patterns in public data.
  • ✗
    Not conclusions. Patterns may have legitimate explanations. Context and additional review are essential.
  • ✗
    Not hidden or selective. All rules are documented here. No secret algorithms.

Our goal is transparency and research utility, not judgment. If you find a signal misleading or inaccurate, contact us at transparency@hacigroup.org