Methodology

How a mix-adjusted asking-price index is built

A mix-adjusted asking-price index measures the change in advertised price per square meter while holding the composition of what is advertised fixed. Offers are grouped into cells of property type, region and layout, each cell's monthly median is chained Laspeyres-style with the earlier month's weights, and a step is published only when 12 split-half estimates agree within 1.0 percentage point.

1.0 pp
maximum standard error of a month-over-month step before it is withheld
12
deterministic half-splits of the sample behind every step's standard error
4,000 vs 400
minimum advertised properties behind a published step and behind a published level
10 cells, 5 per cell
structural floors for a step: at least ten cells, each with at least five offers in both months
+18.03 %
a rent step chained over two cells whose two independent halves disagreed by 22 percentage points; the gate withheld it
12.58 vs 1.01
price points per advertised property in 30 days on a census sample against a change-log sample

The problem: mix shift, and the cells that remove it

A median asking price over everything advertised this month is a statement about what is advertised, not about prices. If more large flats come to market, the median rises with no flat repriced; if a cheap region's portals grow their stock, it falls. Apartments cost roughly twice as much per square meter as houses, so even the split between the two moves a headline further than most real price changes do: in one comparison of two markets, the published gap between their headline levels was +47 percent, and +38 percent once both were put on the same 50/50 apartment-house mix. That 9-point difference is composition, not price.

A mix-adjusted index removes composition in two places. Between cells, it holds the weight of each segment fixed across the step being measured, so a change in what is advertised cannot move the index by itself. Within cells, it works on price per square meter rather than total price, so a shift toward larger flats inside a segment does not read as inflation. Eurostat's handbook on residential property price indices calls this family stratification, or mix adjustment, and it is the standard alternative to hedonic regression when the attributes available are few, but the sample is large.

The unit of the index is therefore a cell of property type, region and layout. Each offer is assigned to exactly one, and everything downstream is computed per cell first. The table lists the three dimensions and the floors each cell must clear.

DimensionValuesWhy it is in the key
Property typeApartment, house, and separately sale and rentThe largest price-per-m2 difference in the market; never chained across
RegionFirst-level administrative regions of the marketRegional stock moves independently; a capital-city surge must not be read as a national one
LayoutNumber of rooms (studio, one room, two rooms, and so on)Small units carry a per-m2 premium, so a shift toward studios would otherwise read as a price rise
Cell floorAt least 5 offers in a cell in both months for the cell to chainA median of three offers is noise
Step floorAt least 10 cells and at least 4,000 offers behind a stepA chain over few cells is not a mix adjustment
Level floorAt least 400 offers behind a month's levelA level is one weighted mean; one layout row can legitimately span only 8 regional cells

Publication floors of the Bytero Live index engine.

Monthly medians and the chained Laspeyres step

The index is chain-linked month to month with the earlier month's weights, which is the Laspeyres convention: the basket is the one that existed before the change being measured. Levels are kept in real currency per square meter rather than rebased to 100, so a reader sees a price, not an abstraction. The computation per step is short.

  1. 1

    Median per cell per month

    For each cell, the median asking price per m2 over its offers in the month. The median, not the mean, so a single mispriced offer cannot move a cell.

  2. 2

    Select the cells that chain

    Only cells present in both the earlier month and the current month with at least five offers in each. A cell that appeared or vanished contributes nothing to the step.

  3. 3

    Weight with the earlier month

    Step ratio = Σ (n_prev × median_cur) / Σ (n_prev × median_prev) over the chaining cells, where n_prev is the earlier month's count in the cell. The current month's counts never enter the weights, so growth in one segment's stock cannot move the index.

  4. 4

    Chain

    Level_cur = Level_prev × ratio, walking forward from the first month that clears the floors. There is no fixed base period; every step compares adjacent months on the same basket, and the chain carries the basket forward.

  5. 5

    Publish the level separately

    Each month also gets an unchained level: the count-weighted mean of its own cell medians over cells with at least five offers, published when at least 400 offers stand behind it. This is what the market costs now and needs no chain.

The gate: split-half standard error

A chained step over a thin month produces a confident-looking number that is sampling noise. The gate measures every step before it is published. Offers are hashed into two halves by a deterministic hash of their identity and each half is chained independently; if the market moved, both halves see it, and if the step is noise, they disagree. Twelve fixed splits give the step's standard error, and a step whose error exceeds 1.0 percentage point is returned as null. The split is deterministic on purpose: a random split would re-roll nightly and make borderline steps flap in and out of a public page. The table shows the calibration against a wider, independent set of splits.

SeriesEngine standard error (pp)Independent reference (pp)Verdict
A dense sale series, every step0.10 to 0.270.12 to 0.35Published
A dense rent series, every step0.12 to 0.520.13 to 0.34Published
A thinner sale series, every step0.65 to 0.740.78 to 0.87Published
A sale step on a month with a change-log sample2.202.00Withheld
A sale step before the flat curve started2.341.40Withheld
Rent steps chained over two cells6.9 to 3312 to 27Withheld

Bytero Live stability probe, which re-runs the engine's own cells and splits and fails if a published step is one the wider evidence calls noise; current state, zero failures.

Three estimator choices, made by measurement

The gate's design was settled empirically rather than by preference, and each alternative failed in a specific way. An analytic, split-free error estimate was tried first and rejected: it conflates genuine divergence between segments with sampling error and disagreed with the split evidence by factors between 0.4 and 8. Averaging five splits was optimistic: on dense steps the mean matched the reference (0.16 against 0.15 pp), but on thin ones it read 0.31 against a reference 0.86 and twice published a step that the wider evidence called noise. Taking the worst split over-corrected and withheld an entire sale trend that the reference endorsed. The fix was more evidence, not a cleverer statistic: twelve splits, and the mean is steady.

The two floors are deliberately different because they guard different things. A level is a single weighted mean of one month's cells; a step is a ratio of two such quantities in different months and needs an order of magnitude more sample before that ratio is measurable, hence 4,000 offers against 400. The step floor also protects the error estimate itself: below a few thousand offers the split-half measurement is unreliable, and the two straggler steps the calibration caught, on 3,258 and 1,340 offers, were exactly there, with the engine reading the error just under the threshold and the wider evidence just over it. Levels are gated too, on their own floor: one rent month priced a market at 23.90 EUR/m2 next to a 13.80 neighbor, on 64 offers, and was withheld.

A level survives a broken chain; a trend does not. Where a step is withheld, the basket has to be re-anchored and the two sides are no longer comparable, so the trend line stops and the break is recorded. The re-anchored levels are deliberately not plotted as a line: in one market they ran 3,084, 3,265, 3,341 and 3,766 across four months whose steps had just been refused, and a reader would have taken that for a 17 percent rise nobody measured. Each month's own level is still shown as a figure.

The flat curve: why a change log is not a sample

The thing that makes a market publishable is not the method but the shape of its price history. If a price point is written only when a price changes, the history is a change log, and a median over it is a median of the movers, not of the market: a biased sample, not a thin one. If a price point is written for every advertised property in every period, whether or not the price moved, the history is a census and the monthly median means what it says. In one measurement over 30 days, a census market carried 12.58 price points per advertised property while three change-log markets carried 1.12, 1.01 and 1.02.

The remedy is the flat curve: a sweep that writes a price point for every property it confirms as still advertised, at an unchanged price, on a fixed cadence. Cadence is the cost control. A daily point in every market would be about 1.1 million rows and 120 MB of storage a day; a weekly point is a seventh of that, about 480 MB a month across three markets, and still gives the monthly index four observations per property. A market gains a publishable trend roughly two months after its flat curve starts, when it first has two consecutive months of representative sample to chain. The rule follows for any index built on advertised prices: unless the history holds a point per property per period, the index is measuring who repriced.

Back-extension, currency and provenance

Months before a market's own history, and months its sample cannot carry, come from published statistics rescaled to the index's own level, so the line stays in real money. Every month is flagged with its source, and the chart draws borrowed stretches faint.

FlagSource of the monthMethod
ownThe index's own chained mediansAs described above; a step between two own months keeps the gate's verdict
aggregateSale: the market's house price index (Eurostat prc_hpi_q, quarterly) or a national asking-price series where one exists; rent: the Eurostat HICP sub-index for actual rentals for housing (COICOP 04.1)Quarterly levels interpolated log-linearly between quarter midpoints, then rescaled to the anchor month; interpolation invents no level, only the path between two published ones
projectedThe aggregate's own trailing-12-month growthCarries the aggregate across the seam to the anchor when the published series stops a quarter or two short
CurrencyOffers quoted in a currency other than the market's ownConverted at a fixed rate per row, never a floating one, so no exchange-rate movement can enter the index; an earlier single-currency filter had dropped about 16,000 offers, 14 and 13 percent of two monthly samples

Bytero Live methodology notes. One earlier bug is instructive: back-extension used to recompute month-over-month from levels and resurrected a +73.7 percent rent month off five cells that the gate had rejected; a step between own months now keeps the gate's answer.

Asking prices are not transaction prices

An index on advertised prices reads what sellers ask, never what buyers paid. Asking prices lead realized prices and do not equal them: the gap is a regional baseline that widens when mortgage rates rise and as an offer ages unsold, and it is not constant across a cycle. The official alternative is the transaction-based house price index that national statistical offices compile under the EU regulation and Eurostat republishes quarterly about a quarter and a week after the reference period, which is an index, not a level, and lags the market by a quarter or more, whereas asking prices lag by days. The two are complementary: the transaction index sets direction and revision discipline, the asking-price index gives a current level per square meter by region and layout. The price data-source guide sets out what each family can and cannot answer.

Three further metrics are withheld when a market cannot support them. Days on market is measured from first observation, so it cannot exceed the observation window and is withheld unless the window comfortably contains it. Offer flow needs both arrivals and departures; before a market's removal sweep runs, removals are always zero and a net figure describes coverage, not supply. And a bulk re-ingestion, a whole-catalog refresh that stamps hundreds of thousands of rows at once, is detected when a week's arrivals exceed 25 percent of the book, and both flow and days on market are withheld for that week.

Reading the index

  • A null step is a statement. It means the month's sample could not carry a measurement to within 1.0 percentage point, not that prices were flat. The chart breaks rather than joining two different baskets.
  • Level and trend are different products. A level says what the market costs this month on its own sample; a trend says how it moved on a fixed basket. A market can publish the first without the second.
  • The headline is a within-market series. It blends apartments and houses in whatever proportion the market advertises, so it is not a ranking between markets; the caption states the mix and the by-type table is where a like-for-like comparison belongs.
  • Faint stretches are borrowed. Months flagged aggregate or projected come from published statistics rescaled to the index level; the tooltip names the source.
  • Per square meter, asking, mix-adjusted. Every figure is a price per square meter of advertised stock with composition held fixed; none is a transaction price, and none is a valuation of any one property.
  • Recalibrate, never loosen. The thresholds are calibrated against an independent set of splits by a harness that fails on a bad publish; a change to any floor is re-run through it before it ships.

In practice

Bytero publishes an index built exactly this way as Bytero Live: standardized asking price per square meter by property type, region and layout, monthly, with every step gated on its split-half error, levels gated on their own floor, and every borrowed month flagged. The page for each market states its mix and its chain breaks; availability by market is on the coverage page.

Questions

Why per square meter and not total price?

Because total price mixes size with price. A month with more large flats advertised would show a rising median with no flat repriced. Price per square meter removes size within a cell, and cell weights remove composition between cells.

What is a chained Laspeyres index?

An index where each month is compared with the previous one on the previous month's basket, and the ratios are multiplied forward. Laspeyres means the earlier period supplies the weights; chained means the basket is refreshed every step rather than fixed at a base year.

Why is a step sometimes missing while the level is shown?

The two are gated separately. A level is one weighted mean and needs 400 offers; a step is a ratio of two medians in different months and needs 4,000 offers, ten cells and a split-half standard error of at most 1.0 percentage point. A thin month can price itself but cannot measure its own change.

Is this a house price index?

No. Official house price indices are transaction-based, quarterly and lagged. This is an asking-price index: current, monthly, per square meter, but a measure of what sellers ask. The two are complementary, and the gap between them is not constant.

Sources

  1. Eurostat: Handbook on Residential Property Prices Indices (RPPIs), 2013
  2. Eurostat: House price index, quarterly data (prc_hpi_q), reference metadata
  3. Eurostat: Harmonized index of consumer prices (HICP), reference metadata
  4. Eurostat Statistics Explained: Housing price statistics, house price index