Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AEW Relative Value Index — Open-Data Replication

A Quantitative Framework for Cross-Sector Private Real Estate Valuation

Python 3.10+ License: MIT Data: NCREIF Data: FRED


What This Is

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.


Methodology

Core Framework: Gordon Growth Model for Real Estate

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.


Composite Scoring

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)


Cap Rate Decomposition

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.


Backtest Validation

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).


Current Scorecard (NCREIF-only mode, Q4 2024)

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.


Repository Structure

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

Setup & Usage

Install

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

Run (no API key required)

# Uses bundled NCREIF seed data + placeholder macro
python run_rvi.py --no-fred

Run with live FRED macro data (recommended)

# 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.py

CLI options

python 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.2

Use as a library

from 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))

Data Sources

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.


Academic References

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

Extending This Project

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.


License

MIT — see LICENSE.

All analysis is for research and educational purposes.
This project is not affiliated with or endorsed by AEW Capital Management.

About

Open-data replication of the AEW Relative Value Index: Gordon Growth Model sector scoring across NCREIF NPI cap rates, NOI growth momentum, and FRED macro data. Includes walk-forward IC backtest.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages