Project Info
This project did not submit a demo video on Devpost.
Inspiration
Anyone can run a regression and report a coefficient. The hard part that separates a real finding from a spurious one is robustness: does the result survive different specifications, samples, and controls, or did it only appear because of a confounder? In econometrics this is usually a manual, tedious process: re-run the model ten different ways, eyeball whether the coefficient moves, argue about it. We wanted to see if a team of autonomous agents could automate that discipline end to end : fetch real data, estimate an effect, and then attack it from every angle a skeptical reviewer would. We framed it around a concrete question every renter and buyer cares about: how strongly do home values track rents across US metros? — the price–rent elasticity β in $$\log(\text{value}) = \alpha + \beta \,\log(\text{rent}) + \varepsilon.$$
What it does
The system is three agents on Agentverse, all discoverable and chat-invocable through ASI:One: Housing Robustness Agent . On request it: fetches a real multi-metro panel from Zillow Research (ZHVI home values + ZORI rents, no API key), estimates the baseline price–rent elasticity (pooled OLS with heteroskedasticity-robust standard errors), and runs a robustness battery: metro fixed effects (the key omitted-variable-bias check), classical vs robust inference, outlier trimming, first-half/second-half time splits, a drop-one-metro jackknife, and a permutation placebo test. It returns a verdict and a 0–100 robustness score. Housing Robustness Agent . On request it: fetches a real multi-metro panel from Zillow Research (ZHVI home values + ZORI rents, no API key), estimates the baseline price–rent elasticity (pooled OLS with heteroskedasticity-robust standard errors), and runs a robustness battery: metro fixed effects (the key omitted-variable-bias check), classical vs robust inference, outlier trimming, first-half/second-half time splits, a drop-one-metro jackknife, and a permutation placebo test. It returns a verdict and a 0–100 robustness score. San Jose Housing Agent is a focused single-metro service that returns the current San Jose market snapshot (typical home value and rent, with month-over-month and year-over-year trends) from live Zillow feeds. San Jose Housing Agent is a focused single-metro service that returns the current San Jose market snapshot (typical home value and rent, with month-over-month and year-over-year trends) from live Zillow feeds. Housing Intelligence Orchestrator . A user asks it one question; it fans the query out to both agents, collects their replies, and returns a single combined report. Housing Intelligence Orchestrator . A user asks it one question; it fans the query out to both agents, collects their replies, and returns a single combined report. Result On live Zillow data (10 metros, ~1,370 monthly observations, 2015–2026), the system found a price–rent elasticity of β = 1.49. Critically, it survived metro fixed effects (dropping only to 1.36) meaning the relationship isn't just an artifact of expensive metros being expensive in both rent and price. It held across time splits and the drop-one-metro jackknife, and the permutation placebo collapsed to ≈ 0 (p = 0.000). Verdict: ROBUST, score 99.7 / 100. To prove the checker isn't a rubber stamp, we tested it on a deliberately confounded null effect — it correctly flagged the collapse under fixed effects and scored it 33 / 100 (NOT ROBUST). A 65-point separation between a real effect and a confounded one.
How we built it
We used Claude (Anthropic) as a pair-programming and design partner: drafting the agent code and econometric, working through Agentverse's deployment constraints, and debugging the live hosted agents. Architecture decisions, the choice of research question and robustness checks, and validation against ground truth were directed and verified by us. Agent framework: Fetch.ai uAgents, deployed as hosted agents on Agentverse, communicating over the ASI:One chat protocol. Orchestration: a coordinator agent using inter-agent messaging plus Agent Storage to hold per-session state (hosted agents are stateless, so pending replies are tracked in storage). Econometrics: built with NumPy; OLS, HC1 robust standard errors, within-group demeaning for fixed effects, jackknife, and a permutation test. No black-box library; every number is auditable. The HC1 robust covariance is $$\widehat{\text{Var}}(\hat\beta) = \frac{n}{n-k}\,(X^\top X)^{-1} \Big(\textstyle\sum_i \hat{e}_i^2\, x_i x_i^\top\Big)(X^\top X)^{-1}.$$ Data: Zillow Research public CSV feeds (ZHVI, ZORI), fetched live at request time. Local demo: a uAgents Bureau runs the three-stage pipeline (data → estimation → robustness) in one process for a reproducible laptop demo.
Challenges we ran into
Hosted-environment constraints. Agentverse hosts one agent per project, bans Bureau, and resets globals between calls. We re-architected the local three-agent pipeline into a self-contained hosted agent for the heavy compute, and moved orchestration state into Agent Storage. Data labeling mismatches. Our first deploy matched zero metros, Zillow labels the row "San Jose, CA," not the full Census metro name. We made the matching resilient. Making the score honest. An early scoring rule rewarded a confounded estimate because most specifications agreed on the biased number. We made the fixed-effects result a hard gate, so omitted-variable bias is penalized the way a real reviewer would penalize it. Python 3.14. uAgents doesn't yet support 3.14; tracking that down and pinning to 3.12 cost real time. Accomplishments we're proud of A robustness checker that demonstrably distinguishes a real effect from a confounded one Econometrics (fixed effects, robust SEs, permutation inference) running live inside a hosted agent on actual market data. A working multi-agent architecture where a coordinator delegates to and aggregates specialist agents.
What we learned
Multi-agent design on a hosted, stateless platform is a different discipline from local orchestration. The value of a robustness tool is entirely in the checks, not the headline estimate; the fixed-effects gate is what makes it trustworthy. A clean, dependency-light numerical core is worth more than a heavy library when you need every step to be transparent and portable.
What's next
Move from associational elasticity to a causal design or an event study around a rate change or policy date, with the same battery applied to the treatment effect. Add more research questions and metros, and let users specify their own question in natural language. Surface the spec curve visually so users see the coefficient's stability at a glance. Built with Python · Fetch.ai uAgents · Agentverse · ASI:One chat protocol · NumPy · Zillow Research data · Git/GitHub· Claude LLM Try it Orchestrator: agent1qv20xqzrp5tu9n4kg0xzyv53y76kve3suucqwdwa574pn006s7s22p2hmkr Housing Robustness Agent: agent1qvu8g4e5v2c76fwm90zax7varr7j2cjhxxlapureta9rsty8nqmwcdytn6n San Jose Housing Agent: agent1qtpqu2gamrv43fgnnqgy30lxk5awhwr6hn0lrggfksxhdcyqpk7qjlnt99j Code: https://github.com/leonatientran/AIHackathon
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:
- Baseline — pooled OLS, robust SEs.
- Metro fixed effects — within-metro demeaning. The key omitted-variable-bias check: if the coefficient collapses or flips here, the baseline was confounded.
- Classical vs robust SEs — does inference change?
- Outlier trimming — drop 1st/99th percentile of rent.
- Time-window split — first half vs second half of the sample.
- Jackknife by metro — drop each metro once; report the spread.
- 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.
Analysis
View
Metric
- 6
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- PythonIn code
2 of 2 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
37 KB
Source files
13
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
leonatientran/AIHackathon
15 files · 37 KB · @ 8091255
Structure
Application logic
11 files · 73%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python81%
- Markdown19%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
requirements.txt
pypi · 5- anthropic
- numpy
- requests
- uagents
- uagents-core
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.