Quant Memo
Advanced

Hasbrouck's Pricing Error Variance

The price you see printed on the tape is the true, efficient price plus temporary noise from bid-ask bounce and order-flow friction. Hasbrouck's decomposition estimates how big that noise piece is, which tells you how much of the tape is signal versus static.

Prerequisites: Bid-Ask Bounce, Vector Autoregression (VAR)

Every trade prints a price, and every printed price is a mix of two things: where the stock is really worth trading (the efficient price, reflecting all available information) and a temporary wobble caused purely by market mechanics — whether the last trade happened to hit the bid or the ask, inventory pressure on a market maker, or a large order temporarily pushing the tape away from fair value. If you want to know how good a market is at reflecting true value — how "efficient" the price discovery is — you need to separate these two pieces, because the visible price bounces around by more than the true value ever does.

Think of it like a scale that's slightly loose on its mounting: weigh the same object five times in a row and you'll get five slightly different readings, none of them wrong exactly, just jittering around the true weight because of mechanical play in the scale itself. The true weight didn't change between readings — only the noise did. A market's transaction price is that jittery scale reading; the efficient price is the true weight.

Hasbrouck's framework models the observed log price ptp_t as the sum of a random-walk efficient price mtm_t (which moves only on genuine information) and a stationary, mean-reverting pricing error sts_t (the noise):

pt=mt+stp_t = m_t + s_t

In words: what you observe equals the true evolving value plus a wobble that doesn't persist. Because mtm_t is a random walk, its variance grows without bound over time — that's the permanent component. Because sts_t is stationary, it has a fixed, finite variance that doesn't grow — that's the transient component. The key statistic is the pricing error variance, Var(st)\text{Var}(s_t), estimated using a vector autoregression (VAR) fit to trades and quote revisions, which decomposes the total variance of observed price changes into how much comes from genuine information (mtm_t moving) versus how much comes from noise (sts_t jittering).

Worked example, simplified. Suppose over a trading day the total variance of the transaction price series is measured at Var(pt)=0.00012\text{Var}(p_t) = 0.00012 (in log-price units squared, aggregated appropriately). A VAR-based decomposition attributes Var(mt)\text{Var}(m_t)'s contribution — the permanent, information-driven component — at 0.000080.00008, and the pricing error variance at Var(st)=0.00004\text{Var}(s_t) = 0.00004. The ratio Var(st)/Var(pt)=0.00004/0.00012=0.33\text{Var}(s_t) / \text{Var}(p_t) = 0.00004/0.00012 = 0.33 says roughly a third of observed price variance is noise, not information — a third of every tick's "movement" is mechanical wobble that will mean-revert rather than persist.

Second example, comparing two names. Stock A (a liquid, tight-spread large cap) has pricing error variance equal to 8% of total observed price variance. Stock B (a thinly traded small cap with a wide spread) has pricing error variance equal to 45% of total observed price variance. This tells you Stock B's tape is nearly half noise: almost half of every price wiggle you see is bid-ask bounce and temporary liquidity effects rather than the market actually learning something new, which means signals built directly off Stock B's tick-by-tick prices need much heavier smoothing or larger sample sizes before a real edge would be distinguishable from the noise floor.

price paths m_t (efficient) p_t (observed) variance split permanent transient
Left: the observed price (solid) jitters around the smooth efficient price (dashed) it's trying to reveal. Right: total price variance splits into a large permanent (information) share and a smaller transient (noise) share — the pricing error variance.

What this means in practice

Pricing error variance is a market-quality metric: exchanges, regulators, and execution desks use it to compare how "clean" price discovery is across venues or across time for the same name (e.g., before and after a tick-size change or a change in market-making obligations). A rising pricing-error share over time on a given venue is evidence that liquidity or price discovery quality is deteriorating, independent of whether volatility itself went up or down. It's also a direct input to how much weight a signal-generation process should put on raw tick prices versus a smoothed or microprice-adjusted series.

Observed price = efficient price (permanent, information-driven) + pricing error (transient, mechanical noise). The share of total variance that's pricing error tells you how much of the tape is signal versus static.

The classic confusion

It's tempting to treat pricing error variance as simply "the bid-ask spread's contribution," but the decomposition captures more than spread bounce — it also picks up inventory effects, temporary price impact from large orders, and any other transient friction, and separating these requires the full VAR structure (which uses the dynamics of trades and quotes, not just their static levels) rather than a simple spread-based formula. Two stocks with identical quoted spreads can have very different pricing error variances if one has much heavier temporary price impact from order flow.

This decomposition is the formal cousin of Intraday Variance Ratios — both separate genuine price discovery from mechanical noise, using different statistical machinery — and its output directly informs Hasbrouck's Information Share, which asks which of several linked markets contributes more to the permanent, information-driven component mtm_t.

Related concepts

Practice in interviews

Further reading

  • Hasbrouck (1993), Assessing the Quality of a Security Market: A New Approach to Transaction-Cost Measurement
  • Hasbrouck, Empirical Market Microstructure
ShareTwitterLinkedIn