Skip to content

leonatientran/AIHackathon

Repository files navigation

Multi-Agent Robustness Checker for Causal Estimates

A multi-agent system that takes an econometric estimate from real housing-market data and stress-tests how robust it is. The headline question:

What is the price–rent elasticity of home values across US metros?

The system estimates that elasticity, then re-runs it under a battery of perturbations to ask: does the coefficient survive fixed effects, sub-samples, outlier handling, and placebo tests — or was it an artifact of confounding?

The pipeline

 data_agent  ──EstimationRequest──▶  estimation_agent  ──BaselineEstimate──▶  robustness_agent
 (real Zillow         (panel)            (baseline OLS)      (coef + panel)         (battery + verdict)
  panel)
Agent Role
data_agent.py Fetches a real multi-metro panel from Zillow Research (ZHVI home values + ZORI rents), builds log(value) / log(rent) series, sends it on. (Recode of the old zillow_agent.py.)
estimation_agent.py Runs the baseline spec: pooled OLS of log home value on log rent, with HC1 robust SEs. Forwards the point estimate.
robustness_agent.py Runs the robustness battery and reports a verdict + score. (Recode of the old valuator_agent.py.)

Supporting modules:

  • econ.py — pure-numpy OLS (classical + HC1 robust SEs), fixed-effects demeaning, and the robustness battery. No statsmodels dependency.
  • panel.py — builds the Zillow panel across metros.
  • models.py — shared uAgents message models.

The robustness battery

For the coefficient of interest, the checker runs:

  1. Baseline — pooled OLS, robust SEs.
  2. Metro fixed effects — within-metro demeaning. The key omitted-variable-bias check: if the coefficient collapses or flips here, the baseline was confounded.
  3. Classical vs robust SEs — does inference change?
  4. Outlier trimming — drop 1st/99th percentile of rent.
  5. Time-window split — first half vs second half of the sample.
  6. Jackknife by metro — drop each metro once; report the spread.
  7. Permutation placebo — shuffle rent; a real effect should collapse toward zero (reports a permutation p-value).

It then produces a robustness score (0–100) that gates hard on the fixed-effects result, plus sign stability, significance consistency, coefficient spread, and the placebo. Score ≥ 75 → ROBUST, 50–74 → FRAGILE, < 50 → NOT ROBUST.

Running it

One-process demo (recommended — no address copy-pasting):

pip install -r requirements.txt
python bureau.py

Or run the three agents in separate terminals (data_agent.py, estimation_agent.py, robustness_agent.py), pasting each printed address into the upstream agent's *_ADDRESS constant.

Data sources

Zillow Research public CSVs (no API key required), updated monthly:

  • ZHVI — Zillow Home Value Index (typical home value, 35th–65th pct)
  • ZORI — Zillow Observed Rent Index (typical asking rent)

Notes

  • ZHVI is a typical value, not a median sale price.
  • The price–rent elasticity here is an associational baseline; the project's contribution is the robustness machinery around it, which is what reveals whether such an estimate would survive scrutiny.
  • A separate San Jose Housing Research Agent (deployed on Agentverse) serves live single-metro snapshots over the ASI:One chat protocol.

About

Multi-agent robustness checker for causal estimates

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages