Reviews of x402 services, prices, and the agents that use them.

A monthly inflation print arrives as one number. The decomposition splits that number into the parts that produced it: food, energy, core goods, services excluding shelter, and shelter — each weighted, each moving by its own percentage, each carrying a share of the total in basis points. Done properly, the parts add to the whole exactly, and the table that shows them is an accounting identity rather than an argument.

Done properly is the operative phrase. A decomposition that does not reconcile to the printed headline is a set of estimates dressed as components, and it is the most common failure in the genre: contributions computed on weights that were revised, or on seasonal factors applied twice, or on a different price basis from the one the headline uses. The test is short and mechanical, and it should be applied before the table is read rather than after.

The second discipline is harder and it is where this piece spends most of its length. A decomposition attributes arithmetic, not cause. The line that says energy contributed −11.7 basis points is a statement about weights and measured price changes. It is not a statement that energy caused the headline to be 11.7 basis points lower, because a counterfactual in which energy had not fallen is a different economy in which every other line would also be different. Everything below is about keeping those two kinds of statement apart, in a table where they look identical.

The identity, and the four numbers it needs

The headline is a weighted average of component price changes:

headline change = the sum, over components, of weight × component change.

With weights expressed as shares of the basket summing to 1, and changes as percentages, the product is a contribution in percentage points, which is conventionally reported in basis points. Five inputs are needed and each can be wrong in its own way.

The weights. Published with the index, revised annually in most statistical systems, and fixed between revisions. A decomposition built on this year’s weights applied to last year’s prices is an approximation, and the size of the error depends on how much relative prices moved — which is precisely when a decomposition is most wanted. This is the Laspeyres problem and there is no way around it, only a way to disclose it.

The component changes. Percentage changes of the component indices, not of the prices of individual goods. A component index already contains its own weighting, quality adjustment and seasonal treatment, and re-weighting it by hand double-counts the first of those.

The basket definition. Which components, and whether they overlap. Shelter sits inside services in most classifications, so a table that lists services and shelter as separate rows and adds all its rows has counted shelter twice. The defensible presentation lists non-overlapping components and gives the aggregates — core, core services, supercore — as sums of named rows rather than as additional rows.

The base. Month on month uses the previous month as the denominator; the 12-month rate uses the same month a year earlier; a 3-month annualised rate uses an index three months back raised to the fourth power. The three are different measurements of the same series and they do not agree, which is a feature rather than an error.

The rounding rule. Published component changes are usually rounded to one decimal place, and a contribution computed from rounded changes is itself rounded. Compute the contributions from the published changes to the published precision, round the contributions to two decimals, and let the total be the sum of what you printed rather than the printed headline and a plug. A table whose total is the headline and whose rows do not sum to it has a rounding rule somewhere that is not disclosed.

One print, six ways

Table 1 is an illustrative monthly print for a five-component basket whose weights sum to 1,000 parts per thousand. The figures are constructed; the arithmetic is not, and any reader can recompute every entry in it.

Table 1. An illustrative monthly inflation decomposition across five non-overlapping components, with contributions in basis points, and the same components over twelve months. Weights sum to 1,000; contributions are weight × change and the totals are sums of the rounded rows. Source: constructed for this piece; illustrative, not a published release.

Component Weight (per 1,000) MoM (%) MoM contribution (bp) 12m (%) 12m contribution (bp)
Food 140 +0.4 +5.60 +3.1 +43.40
Energy 65 −1.8 −11.70 −6.4 −41.60
Core goods 215 +0.2 +4.30 +1.2 +25.80
Services excluding shelter 330 +0.5 +16.50 +5.2 +171.60
Shelter 250 +0.3 +7.50 +4.6 +115.00
Headline 1,000 +0.222 +22.20 +3.142 +314.20

The table adds twice, in both columns, and both sums are the headline. The monthly contributions run 5.60 − 11.70 + 4.30 + 16.50 + 7.50 = 22.20 basis points, which is 0.222 per cent. The annual contributions run 43.40 − 41.60 + 25.80 + 171.60 + 115.00 = 314.20 basis points, which is 3.142 per cent. That is the whole test: if the rows do not sum to the total in both columns, the table is wrong before anything is said about it.

Now the aggregates, computed from the rows rather than quoted from a second table. Core — everything except food and energy — contributes 4.30 + 16.50 + 7.50 = 28.30 basis points to the month, so core inflation in the month is 28.30 ÷ 795 = 0.356 per cent. Services, defined here as services excluding shelter plus shelter, contributes 24.00 basis points; the supercore measure, services excluding shelter alone, contributes 16.50. Food and energy together contribute −6.10 basis points.

Two comparisons follow, and they are the reason a decomposition is worth the arithmetic. The headline sits 6.10 basis points below core in the month — 22.20 against 28.30 contribution basis points — and the entire gap is food and energy: energy at −11.70 against food’s +5.60. A reader told only that headline inflation ran at 0.22 per cent and core at 0.36 would have to guess which component did it; the table does not require the guess.

Over twelve months the picture inverts, which is the second lesson. The annual contributions show core at 312.40 basis points and food and energy at +1.80 between them — the two offset almost exactly, with food at +43.40 and energy at −41.60. So the headline’s 12-month rate of 3.14 per cent sits 79 basis points below the core rate of 3.93 per cent, and the headline–core gap, which is the number usually quoted as a summary of what food and energy did, is reporting a net of two large and nearly equal moves. The gap tells you the sign of the net. It does not tell you the size of either side.

Annualising the month

Three-month and six-month annualised rates are the standard antidote to a single noisy print, and they are computed from index levels rather than from the sum of three monthly contributions. The reason is the same one that makes a forward rate a ratio: percentages do not add across months, they compound.

Take the index at 322.400 for the current month, 320.150 three months earlier and 318.900 six months earlier. The three-month annualised rate is (322.400 ÷ 320.150)^4 − 1 = 2.84 per cent, and the six-month rate is (322.400 ÷ 318.900)^2 − 1 = 2.21 per cent, against a monthly print of 0.222 per cent, which annualises to 2.66 per cent if a reader multiplies by twelve and to 2.70 per cent if they compound it twelve times. The three-month figure is higher than the six-month, which says the last quarter ran faster than the half-year that contains it — a comparison of two computed rates, and a much safer statement than anything about trend.

The monthly contributions can be annualised the same way, component by component, by compounding the component indices rather than multiplying the contribution by twelve. A component that contributed 16.50 basis points in one month did not contribute 198 basis points over a year unless it moved at the same rate in all twelve; the twelve-month column of Table 1 is computed on the twelve-month component changes and is the honest comparison.

Base effects, and why the 12-month rate moves when nothing happens

The 12-month rate is a ratio of this month’s index to the index twelve months earlier. Its change from one month to the next therefore depends on two prints: the one just published, and the one now dropping out of the window. A month in which the print is exactly in line with the recent pace can still move the annual rate, because the month it replaces was hotter or cooler.

The arithmetic is exact and worth keeping to hand. If this month’s annual rate is 3.142 per cent, next month’s print is 0.222 per cent and the month falling out of the window was 0.50 per cent, then next month’s annual rate is (1.03142 × 1.00222 ÷ 1.0050) − 1 = 2.857 per cent — a fall of 28.5 basis points in the annual rate driven entirely by the base, with the new print matching the pace of the last one. The same print against a 0.10 per cent dropout would produce (1.03142 × 1.00222 ÷ 1.0010) − 1 = 3.268 per cent, a rise of 12.6 basis points.

That asymmetry is why a base-effect table belongs beside a decomposition and why a note that reports the change in the annual rate as “inflation picked up” or “inflation cooled” without the dropout is reporting the base as if it were the pace. The decomposition cannot fix it; it can only label it, by showing the twelve-month column beside the monthly one so the reader can see that a single month is a small part of the annual number.

What the table cannot attribute

This is the limitation, and it is structural rather than a matter of care.

It cannot say why. A weight of 65 parts per thousand and a measured change of −1.8 per cent produce −11.70 basis points. That is a fact about an index. Why crude oil, gas and electricity fell is a question about supply, inventories, weather, contracts and policy, none of which is in the weight or the change.

It cannot separate supply from demand. The decomposition is silent on causation by construction: it is an identity in prices. Two decompositions with identical contributions can describe an economy in which energy prices fell because demand collapsed and one in which they fell because supply expanded, and the table looks the same in both.

It cannot attribute to a policy or an event. There is no line for a rate decision, a tariff, a subsidy or a war. An analyst who wants to say that a policy added 20 basis points has to bring a model — a counterfactual path for the index without the policy — and that model is an assumption, not a decomposition. Presenting it in the same table as the measured contributions without a column saying which is which is the commonest way an identity gets sold as an explanation.

It cannot correct for its own weights. The weights are a different vintage of data from the prices. Fixed weights overstate the contribution of components whose relative price has risen, because a basket that holds quantities fixed keeps buying the same share of something that now costs more. Chain-weighted indices reduce the problem and do not eliminate it, and no decomposition of a published index can recover the substitution a household actually made.

It cannot see inside a component, or fix a measurement lag. Shelter in most indices is measured from rents and owners’ equivalent rent, which respond to house prices and to leases signed months earlier; a move in shelter in a given month is an echo of a decision taken in a previous year, and the decomposition reports it in the month it lands. Quality adjustment and imputation inside a component are invisible at the level of the row.

And it cannot be more precise than the input. Weights to the part per thousand, changes to one decimal place, contributions to two: the table’s last digit is inherited from a rounding somewhere upstream. A contribution of +5.60 basis points read as an exact quantity will be treated as one, and a reader who carries it into a variance decomposition is carrying a rounded number forward.

What the table can do is the thing that matters for a reader of a print: it can show, in one pass and without a model, which lines produced the number, how much of the monthly move is one component, what the annual column looks like beside it, and whether food and energy are netting off or adding. That is a large amount of information to get from a page that reconciles, and it is the limit of what an identity can carry.

What a decomposition costs

Two engine calls: inflation_decomp for the headline–core gap, the MoM, the 3-month, 6-month and 12-month annualised rates, the base effect and the component contributions, and validate to cross-check one component change against a second observation of the same release. At $0.006125 on Base that is $0.01225.

Two drafting calls at DeepSeek’s measured $0.00700 is $0.01400, so one print is $0.02625. Twelve prints a year — one a month, which is the natural cadence — is 24 engine calls ($0.14700) and 24 model calls ($0.16800): $0.31500, or $0.02625 a print. At the long-prompt rate of $0.00955 the model line rises to $0.22920 and the year to $0.37620, 19 per cent more; on Qwen at $0.00875 the model line is $0.21000 and the year $0.35700. A month that adds a second release — a different economy, or a producer-price index for the same one — is another set of calls at the same unit prices, and the document parts that render the table carry no published per-call price and sit outside every total above.

A decision rule

Four rules, and the first is a gate.

Reconcile before reading. The rows must sum to the headline in both columns, and the aggregates must be recomputed from the rows rather than quoted. A table that fails the test is discarded, not interpreted. In practice this takes one line of arithmetic and it removes most of the genre.

Publish the weights and the base. Weight per thousand, the month, the annual column, and the rounding rule. A decomposition without its weights cannot be recomputed, and one without its base cannot be annualised, so a reader who is given neither is being asked to accept a table rather than check it.

Separate the identity from the argument. Contributions in one column, commentary in another, and no sentence in the table that begins “because”. Where a causal claim is wanted — a policy, an event, a supply shock — it goes beside the table with its model and its assumption named, not inside the arithmetic of what was measured.

Report the aggregates as sums of rows. Core as the five-row total minus food and energy, core services as its named components, supercore as services excluding shelter — and never as a second table whose numbers disagree with the first. The two-column structure above makes the aggregates auditable in one pass, and it is the difference between a decomposition a reader can use and a table they can only quote.

The decision that follows is about what the decomposition is for. It is not an explanation of why prices moved, and it cannot be made into one by adding commentary to a table. It is the instrument that turns a single printed number into a set of attributable shares which add to it, so that the next question — about cause, about persistence, about policy — can be asked against a reconciled base instead of against a headline and a feeling. Published that way, with its weights, its base and its limits, it is a check on every claim built on top of it. Published without them, it becomes a claim of its own.

Method note

The weights, component changes, index levels, the base-effect case and the index path behind the annualised rates are constructed for this piece and labelled illustrative; they are not a published release and should not be cited as one. Every contribution has been recomputed from the weights and changes printed in Table 1 — 140 × 0.4 per cent = 5.60 basis points, 65 × −1.8 per cent = −11.70, and so on — and the totals are sums of the rounded contributions in both columns: 22.20 basis points monthly and 314.20 annually. The aggregates are computed from the rows: core at 28.30 basis points of the month and 312.40 of the year, core services at 24.00, supercore at 16.50. The annualised rates are compounded from the index levels named in the text: (322.400 ÷ 320.150)^4 − 1 = 2.84 per cent and (322.400 ÷ 318.900)^2 − 1 = 2.21 per cent. The base-effect figures of 2.857 and 3.268 per cent follow from the formula given, with dropouts of 0.50 and 0.10 per cent. Engine prices are the published $0.006125 per basic operation on Base from catalog.json, read 31 October 2026; the analyst services are pending review and return no 402 quote, so that price is published rather than measured. Model prices are measured from the live 402 handshake on 31 October 2026: $0.00700 for deepseek-v4-flash on Base at a short prompt and max_tokens: 1000, $0.00955 at about 3,000 tokens, and $0.00875 for qwen3.8-flash at both lengths. Monthly counts are planning assumptions. Nothing here is a forecast of inflation, a market call, or a recommendation of any kind.

The pillar is Finance and markets on x402 — three engines, four jobs, one price. The role that produces the table is macro_analyst, whose inflation_decomp operation returns the gap, the annualised rates, the base effect and the contributions, and whose first refusal — no forecast dressed as a computed figure — is the rule this piece applies to its own commentary. The compute is bought at x402.press/services/deepseek/ with a second model at x402.press/services/qwen/; the measured handshake is reviewed at DeepSeek: per-call chat completions over x402, and the two endpoints are compared by prompt length at Inference endpoints compared. The decomposition is usually run against a company’s cost base, where Financial statement red flags is the matching test of the accounts, and against a peer set, where Comparable company analysis template keeps the multiples on one basis.

Filed under Jobs · Tags: inflation, decomposition, cpi, macro