A regional price average can fall simply because an expensive region disappeared from today's sample. Before publishing a trend, compare the same planned regional observations, keep the weighting policy fixed and report how much of that panel was actually observed. A correctly calculated change for the remaining regions still does not tell you what happened in the missing ones.

This guide is for teams delivering recurring, authorized price-monitoring reports. It helps you decide whether to release a whole-panel headline, publish a clearly scoped subset observation or hold the report. It does not recommend automatic repricing or establish that a proxy provider caused a missing observation.

Freeze the reporting contract before the collection window

Define a panel as a versioned list of region-and-offer keys. For the example below, each of four fictional regions has one quote for the same unit of the same product. Within each region, the baseline and current quote must use the same currency, customer eligibility, destination and tax/shipping-inclusive price basis. Capture them in the agreed comparable time windows. Item matching and complete charges must already have passed the comparable-price checks.

Give each planned region a fixed weight and a named business reason. Equal weights answer an equal-region question; verified sales-share weights would answer a different question. Successful request counts are not sales shares. Keep the panel version, weight version, price basis, freshness deadline and report owner in the output. Add new regions through a reviewed new panel version, not by silently replacing a failed region.

Retain a row for every planned key, including missing or stale observations. Use separate fields for price and evidence state. Missing is not a zero price, an unchanged price or proof of no stock. A documented zero quote is a real value; this ratio-based indicator requires a positive baseline. A free baseline needs a separately defined measure.

Reproduce a misleading “12% price drop”

These are invented quotes, all in the same currency and comparable delivered-unit price basis. We assign each region a 25% weight solely for this teaching example. They are not customer data, measured prices, revenue shares or IPHTML results.

RegionFixed weightBaseline quoteCurrent observed quoteWithin-region change
A25%8088+10%
B25%100110+10%
C25%120132+10%
D25%200UnknownUnknown

Yesterday's unweighted mean across A–D is (80 + 100 + 120 + 200) / 4 = 125. Today's observed mean across A–C is (88 + 110 + 132) / 3 = 110. Comparing those different samples gives 110 / 125 - 1 = -12%. Yet every observed matched region rose 10%. The denominator changed: this is not evidence that the planned panel became cheaper.

For this report, define an indicator as the fixed-weight arithmetic mean of within-region percentage changes, relative to the declared baseline. It is not the percentage change of an average price level; those are different measures when relative changes differ. With all four regions observed and each up 10%, this indicator is +10%. With D missing, the whole-panel result remains unknown.

r[i] = current_price[i] / baseline_price[i] - 1
C = sum of original weights for valid matched observations
K = sum of original weight[i] × r[i] for those observations

Observed-subset change = K / C, only if C > 0
Whole-panel change = K, only if all planned positive weights are observed

Here: C = 0.75; K = 0.075; observed-subset change = +10%
Whole-panel change = UNKNOWN

The subset calculation renormalizes only the observed weights and must say so. Do not label it “all regions” or write the missing 25% as a zero contribution. Both count coverage and weight coverage belong beside the number. They happen to equal 75% here; with unequal weights they can differ substantially.

A high coverage percentage is not a bias guarantee

The three remaining regions may be the easiest to collect, not a random sample of the missing one. D might have risen, fallen, changed its commercial conditions or become temporarily inaccessible. A provider change or extra requests cannot answer that from the existing observations alone. Even an internally approved 90% coverage rule would be an operating policy, not proof that the missing portion behaves like the rest.

For a sensitivity exercise only, suppose D's change could range from -40% to +10%. The full-panel indicator would range from 0.075 + 0.25 × (-0.40) = -2.5% to 0.075 + 0.25 × 0.10 = +10%. The sign can change. These bounds are deliberately assumed, not measured or statistically estimated; they are not a confidence interval. Without defensible bounds, keep the full-panel result unknown.

Do not silently carry yesterday's quote forward. That assumes no change for the missing region. The BLS description of imputation shows that statistical estimation of missing prices is an explicit method with assumptions, distinct from collection. Its CPI calculation documentation also specifies aggregation weights and formulas. Our small equal-region indicator does not reproduce CPI methodology or represent a market. Its conservative release policy is to withhold the whole-panel result when coverage is incomplete; a separately governed estimation process would need its own assumptions, validation and labels.

Run six scenarios and inspect the decision

Download the offline Python exercise, inspect it, and run with Python 3.9 or later. It uses standard-library decimal arithmetic, makes no network calls and does not change any collection or pricing system.

python3 regional-price-coverage-bias.py
Independent synthetic scenarioWeight coverageMatched-subset changeWhole-panel result and decision
A–D all rise 10%100%+10%+10%; send for report review
D is missing75%+10%Unknown; hold full-panel headline. Unpaired mean misleadingly gives -12%.
A is missing; B–D rise 10%75%+10%Unknown; hold. Unpaired mean misleadingly gives +23.2%.
Alternative recovery: D is confirmed at 120, A–C at 88/110/132100%-2.5%-2.5%; send for review. This is a separate possible recovery outcome, not evidence of D's hidden price.
D has a verified zero quote; A–C rise 10%100%-17.5%-17.5%; send for review. Zero is retained, not dropped as missing.
D has a stored quote of 220, but its evidence is stale75%+10%Unknown; hold. Stored value does not satisfy the observation window.

The exercise yields three REVIEW_FULL_PANEL and three HOLD_FULL_PANEL results. Five counterexamples reject duplicated rows, an unapproved replacement region, a zero baseline and invalid weights, and confirm that a completely missing panel yields no price signal. A review result is not automatic approval: the script trusts the supplied evidence states and comparability assumptions. It does not verify them against a merchant or validate the business meaning of a zero quote.

Make coverage part of the report your customer receives

  1. Publish the denominator. Include panel/weight versions, baseline and current windows, planned and observed key counts, observed weight and missing regions. Separate a descriptive mean of available quotes from the fixed-panel change indicator.
  2. Hold the claim at the right scope. Under this example policy, incomplete coverage holds the whole-panel headline. A reviewed note may still say “A–C rose 10%; D unavailable; 75% of planned weight observed.” It must not imply a market-wide change or trigger automatic repricing.
  3. Assign the evidence gap. Record whether the missing observation reflects access permission, a request failure, stale evidence, changed page fields or changed commercial context. Use the record-quality gate for invalid fields and the regional QA matrix for location context. Diagnose the failed layer before attributing it to a proxy.
  4. Recover within the authorized window. Use an approved feed, permitted retry or manual confirmation if it can still satisfy the report's time basis. A later quote cannot silently stand in for an earlier window. If evidence arrives after release, issue a labelled revision with the original coverage record preserved.
  5. Review useful coverage before capacity. Track completed comparable panels, held reports and missing-weight reasons alongside successful requests. Repeating an easy region does not recover a missing one. Use the monthly usage review to decide whether a route or plan change addresses the actual bottleneck.

A practical report row is panel version | weight version | time windows | matched keys | observed weight | missing reasons | subset result | full-panel result | release/revision owner. Keep sensitive source evidence in controlled records, not in public reports or analytics events.

If the gap is an authorized need to observe a particular regional network, evaluate residential proxy options against that missing region and discuss the region, permitted source, cadence and acceptance criteria with IPHTML. Confirm suitability before spending. An IP does not establish item identity, delivery destination, currency, freshness or permission. When an existing API, licensed feed or direct authorized route supplies adequate evidence, keep it. This exercise makes no claim about IPHTML's coverage, success rate, savings or customer retention.