Methodology
Every measure this application shows, what it means, and what it does not. Each KPI tile links here by its method id.
Sample size and confidence
Every figure carries the number of observations behind it. Confidence combines that count with how spread out the underlying values are, and a cell below the floor is not published as a number at all — it renders as “insufficient data”. A yield built from two hundred sales and three tenancies is a three-observation figure and is treated as one.
The thresholds live in a single file read by both the API and this interface, so the two can never disagree about whether a cell has enough data to show.
Median price per square metre
The median of price divided by floor area across every recorded sale in the window. Per square metre because it compares across unit sizes; median rather than mean because a handful of penthouses would otherwise carry the figure.
Moves when the mix of what sold changes, not only when prices change. The repeat-sales index exists for that reason.
median_ppsqm_v1
Sales in the last twelve months
A count of recorded transactions, not of listings or of viewings. Every row is a completed registration.
volume_12m_v1
Total value transacted
The sum of recorded prices over the window. It measures money that changed hands, not the value of the housing stock.
total_value_12m_v1
Gross yield
Median annual registered rent divided by median sale price for the same community, property type and bedroom count, over the same window.
The number every portal quotes, and close to meaningless alone: it ignores the service charge, the transfer fee, vacancy and management.
gross_yield_v1
Net yield
Rent after vacancy, less the service charge, management fee, maintenance and the one-off purchase costs spread over an assumed holding period, divided by the full acquisition cost including fees.
Every input is an editable assumption, and the largest of them — the service charge — is currently an estimate rather than a per-building measurement.
net_yield_v1
Hedonic valuation
A gradient-boosted regressor on log price per square metre, using community, property type, bedroom count, floor area, off-plan status and time. Predictions are transformed back with Duan's smearing correction, without which they would be biased low.
Tested on the most recent twelve months only, never on data it was trained on.
hedonic_v1
Repeat-sales index
Bailey-Muth-Nourse weighted least squares on period dummies, comparing each property against itself so composition cancels out. Pairs are weighted by the inverse of their holding period.
Only published across a connected set of periods. Where two chains of periods share no repeat sale, their relative level is not identified by the data and is not invented.
repeat_sales_v1
Forecast
A damped local trend on log median price per square metre, scored against a seasonal naive benchmark on a held-out final year.
Damped deliberately: an undamped trend extrapolated twelve months turns one good year into an absurd one.
forecast_v1
Risk score
A weighted blend of off-plan exposure, developer concentration, price volatility, illiquidity and anomaly density, each scaled to a bounded range and clipped rather than extrapolated.
A judgement, not a measurement. The weights are published and the components are always shown beside the total.
risk_v1
Holding-period cash flows
Deposit and fees at entry, net rent less debt service each year, and sale proceeds after costs and after repaying the loan. Reduced to an internal rate of return.
Reported levered and unlevered, because a levered return quoted alone describes the loan as much as the property.
dcf_v1
Developer premium
A project's median price per square metre against the median for the same community in the same month, so both location and timing are held constant.
The registry carries a project name but no developer identifier, so projects stand in for developers.
developers_v1