An open-data replication of the AEW Relative Value Index — the proprietary sector-ranking framework developed by AEW Capital Management's Head of Research, Mike Acton, which anchors the firm's quarterly U.S. Research Perspectives and has been cited as one of his most significant methodological contributions to institutional real estate research (2023 PREA Graaskamp Research Award).
The framework answers a fundamental question for any real estate allocator:
Which property sector offers the best risk-adjusted expected return relative to its required return right now — and how does that compare historically?
This replication is built entirely on publicly available data (NCREIF press releases, FRED API, NAREIT) with no proprietary data required.
The expected total return for a private real estate sector is decomposed as:
E[R_sector] = Cap Rate + g_NOI − E[ΔCap Rate]
Where:
- Cap Rate — NCREIF NPI appraisal-based going-in yield (annualised)
- g_NOI — Expected NOI growth, estimated from trailing income return momentum
- E[ΔCap Rate] — Expected cap rate change from OLS model (RF + macro inputs)
The required return sets the hurdle:
Required Return = RF (10Y Treasury) + Property Risk Premium (PRP)
PRP is calibrated sector-by-sector from long-run NCREIF excess return history (Apartment: 180 bps, Industrial: 200 bps, Retail: 220 bps, Office: 240 bps).
The RVI Score (in basis points) is the gap:
RVI Score = (E[R_sector] − Required Return) × 10,000
Positive → sector is attractively priced. Negative → sector is expensive.
Three sub-scores are z-score normalised over a trailing 20-quarter window and weighted into a composite:
| Sub-Score | Weight | Signal |
|---|---|---|
| Spread Score | 50% | Cap rate spread over 10Y vs history |
| Growth Score | 25% | NOI growth momentum (YoY %) |
| Value Score | 25% | GGM expected return minus required return |
Sectors are rated: Strong Buy (z > 1) · Buy (0–1) · Hold (−1–0) · Sell (z < −1)
Following the explicit decomposition in AEW's quarterly research:
Cap Rate = RF + RP − g
→ RP_implied = Cap Rate − RF + g
Tracking RP_implied vs its historical average reveals whether a sector is
pricing in more or less risk than normal — the core of AEW's "Figure 7"
(Cap Rate vs Treasury / BAA Bond Yield), replicated here as Figure 2.
Walk-forward IC (Spearman rank correlation between RVI rank and forward h-quarter cumulative return) validates whether the index has predictive power.
An IC of 0.10–0.20 at a 4-quarter horizon is considered institutionally strong for private real estate (Grinold & Kahn 1999).
Sector Cap Rate Expected Required RVI Score Rating
──────────── ───────── ───────── ───────── ───────── ──────────
Apartment 4.80% 6.73% 6.30% +43 bps Strong Buy
Industrial 4.55% 9.05% 6.50% +255 bps Buy
Office 10.75% 10.75% 6.90% +385 bps Buy
Retail 5.62% 6.87% 6.70% +17 bps Hold
Note: Scores shift materially with live FRED macro data. Run python run_rvi.py
with a FRED API key for current readings incorporating live cap rate spread
dynamics and NOI growth signals.
aew-rvi-replication/
│
├── run_rvi.py ← CLI entry point
├── setup.py ← pip install -e .
├── requirements.txt
├── README.md
├── LICENSE
├── .gitignore
│
├── src/
│ └── rvi/ ← Installable Python package
│ ├── __init__.py
│ │
│ ├── data/
│ │ ├── fred.py ← FRED macro loader (DGS10, CPI, GDP…)
│ │ ├── ncreif.py ← NCREIF NPI loader (400 quarters)
│ │ ├── reit.py ← REIT sector data + implied cap rates
│ │ └── loader.py ← Aligned quarterly panel assembler
│ │
│ ├── models/
│ │ ├── cap_rate.py ← Decomposition: RF + RP − g; direction OLS
│ │ └── expected_return.py ← GGM expected return + required return
│ │
│ └── scoring/
│ ├── scorer.py ← Composite z-score RVI engine
│ ├── backtest.py ← Walk-forward IC, hit rate, IR
│ └── report.py ← 6 publication-quality figures
│
├── data/
│ └── raw/
│ └── ncreif_npi.csv ← 400 quarters of NPI data (2000–2024)
│
└── outputs/ ← Auto-generated on run
├── figures/
│ ├── fig1_cap_rate_history.png
│ ├── fig2_cap_rate_spread.png ← AEW "Figure 7" replication
│ ├── fig3_rvi_time_series.png
│ ├── fig4_scorecard.png
│ ├── fig5_ic_analysis.png
│ └── fig6_return_cycles.png
└── tables/
├── latest_scorecard.csv
├── ic_series.csv
└── backtest_summary.csv
git clone https://github.com/YOUR_USERNAME/aew-rvi-replication.git
cd aew-rvi-replication
pip install -r requirements.txt
pip install -e . # optional: install as editable package# Uses bundled NCREIF seed data + placeholder macro
python run_rvi.py --no-fred# Get a free API key at: https://fred.stlouisfed.org/docs/api/api_key.html
export FRED_API_KEY=your_key_here
python run_rvi.pypython run_rvi.py --help
# Print current scorecard only (fast)
python run_rvi.py --scorecard-only
# Change forecast horizon (default: 4 quarters)
python run_rvi.py --horizon 8
# Override composite weights
python run_rvi.py --spread-weight 0.6 --growth-weight 0.2 --value-weight 0.2from src.rvi.data.ncreif import NcreifLoader
from src.rvi.data.loader import DataAssembler
from src.rvi.models.expected_return import ExpectedReturnModel
from src.rvi.scoring.scorer import RVIScorer
# Assemble data
data = DataAssembler(fred_api_key="your_key").build()
panel = data["panel"]
# Compute expected returns
er = ExpectedReturnModel(panel).compute_expected_return()
# Score and rank sectors
scored = RVIScorer(er).compute()
print(RVIScorer(er).latest_scorecard(scored))| Source | Series | Used For |
|---|---|---|
| NCREIF NPI | Quarterly total return, income return, cap rate by sector | Core private RE performance |
| FRED | DGS10, BAA, CPIAUCSL, GDPC1, UNRATE, HOUST5F | Macro overlay, required return |
| yfinance | Sector REIT ETFs | Public market cap rate proxies |
NCREIF data note: The bundled ncreif_npi.csv was compiled from public NCREIF
quarterly press releases (2000 Q1 – 2024 Q4). All figures are drawn directly from
public NCREIF NPI fact sheets. To update after a new quarterly release, append rows
following the existing schema.
| Reference | Applied In |
|---|---|
| AEW Capital Management, U.S. Research Perspectives (2000–2025) | Methodology, Figure 7 |
| Grinold & Kahn (1999) — Active Portfolio Management | IC, IR, backtest framework |
| Gordon (1959) — Dividends, Earnings and Stock Prices | GGM expected return model |
| Geltner & Miller (2007) — Commercial Real Estate Analysis | Cap rate decomposition |
| Fuerst & McAllister (2011) — Pricing Sustainability in Office Markets | Risk premium calibration |
Three natural extensions for further research:
1. Market-Level RVI — Disaggregate from sector to MSA level using CoStar or CBRE market-level cap rate surveys combined with BLS employment data as the demand driver. This is how AEW applies the framework internally.
2. Public-Private Convergence Signal — Track the spread between
NCREIF implied cap rates and public REIT implied cap rates (from the
reit.py module). Wide private-vs-public spread historically precedes
private market repricing by 2–4 quarters.
3. Machine Learning Overlay — Replace the OLS cap rate direction model with a gradient-boosted classifier trained on the macro panel. Test whether non-linear macro interactions improve the forward IC.
MIT — see LICENSE.
All analysis is for research and educational purposes.
This project is not affiliated with or endorsed by AEW Capital Management.