Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Consumer Price Index: Difference between revisions

From Prosperity SMP Wiki
2026-06-10 staleness scan: tooltips retired, real AH fees, /trade status, PvP rules, CPI dual basket, eviction reclaim
Redact exact basket weights and manipulation-defense thresholds (keep page substance)
 
Line 13: Line 13:
{| class="wikitable" style="width:100%;"
{| class="wikitable" style="width:100%;"
|-
|-
! Category !! Weight !! Key items
! Category !! Key items
|-
|-
| Building materials || 20% || Cobblestone, stone, deepslate, logs, planks, sand, glass
| Building materials || Cobblestone, stone, deepslate, logs, planks, sand, glass
|-
|-
| Basic inputs || 30% || Iron ingot (12%), coal (6%), copper (4%), gold (4%), redstone (4%)
| Basic inputs || Iron ingot, coal, copper, gold, redstone
|-
|-
| Food and farming || 20% || Wheat, potato, carrot, cooked meats, sugar cane
| Food and farming || Wheat, potato, carrot, cooked meats, sugar cane
|-
|-
| Utility consumables || 15% || Arrow, torch, firework rocket, lapis lazuli
| Utility consumables || Arrow, torch, firework rocket, lapis lazuli
|-
|-
| Premium commodities || 15% || Diamond (8%), emerald (3%), netherite scrap (4%)
| Premium commodities || Diamond, emerald, netherite scrap
|}
|}


Diamond is weighted at 8%, not higher — the basket is deliberately tilted toward staples so a few large diamond trades cannot distort the signal.
Premium items carry deliberately modest weights — the basket is tilted toward staples so a few large trades cannot distort the signal. The exact weights are internal.


== Index formula ==
== Index formula ==
Line 33: Line 33:
: '''P = exp( SUM of weight_i x ln(price_i_trimmed) )'''
: '''P = exp( SUM of weight_i x ln(price_i_trimmed) )'''


Each item's observed unit prices are sorted, then the top and bottom 10% are clamped (winsorized) before the geometric mean is computed. This prevents a single outlier trade from skewing the index.
Each item's observed unit prices are sorted, then the extreme tails are clamped (winsorized) before the geometric mean is computed. This prevents a single outlier trade from skewing the index.


== Data source ==
== Data source ==
Line 47: Line 47:


=== Depth gates ===
=== Depth gates ===
An item is excluded from the policy basket unless it meets all three thresholds:
An item is excluded from the policy basket unless it clears minimum thresholds for transaction depth and for the number of unique buyers and sellers in the window. The exact gates are internal.
* 10+ transactions in the 7-day window
* 3+ unique buyers
* 3+ unique sellers


Items below these thresholds still appear in <code>/market</code> with a low-confidence flag but do not influence the engine.
Items below these thresholds still appear in <code>/market</code> with a low-confidence flag but do not influence the engine.


=== Rate-of-change clamp ===
=== Rate-of-change clamp ===
No single item can move more than 8% per week. Excess movement is dampened.
No single item can move faster than an internal weekly limit. Excess movement is dampened.


=== Manipulation risk score ===
=== Manipulation risk score ===
Line 62: Line 59:
# Low buyer diversity
# Low buyer diversity
# Low seller diversity
# Low seller diversity
# Account concentration (one account over 60% of volume)
# Account concentration (volume dominated by a single account)
# Category outlier (item moved more than 2 standard deviations from its category)
# Category outlier (a price moving far out of line with its category)


When risk exceeds 0.5, upward price moves are partially dampened while downward moves are trusted. This reflects that most MC economy manipulation is bullish.
When risk is high, upward price moves are partially dampened while downward moves are trusted. This reflects that most MC economy manipulation is bullish.


=== Median lag ===
=== Median lag ===
The [[Simulated ChestShop]] reads a CPI snapshot '''7 days old''', not current. A manipulator would need to sustain artificial prices for over a week — expensive and risky.
The [[Simulated ChestShop]] reads a '''lagged''' CPI snapshot, not current prices, so short-lived price spikes never reach it.


== Per-item confidence ==
== Per-item confidence ==

Latest revision as of 12:11, 21 July 2026

The Consumer Price Index (CPI) is a custom-built price tracking system on Prosperity SMP. It measures the cost of a fixed basket of goods using real player-to-player trade data, producing a single index number that represents the overall price level. The CPI feeds directly into the Monetary policy engine and is reported weekly via Discord.

What it measures

The CPI tracks the price of a weighted basket of 27 common items. It answers: are things getting more or less expensive?

A rising CPI means inflation. A falling CPI means deflation. A stable CPI means equilibrium.

Since 2026-06-09 the system tracks two baskets: the policy basket of curated staples described below (the cautious signal used for policy decisions), and an observed market basket built from what players actually trade, which adapts to real market activity.

Basket composition

The policy basket is weighted toward everyday staples, not luxury items:

Category Key items
Building materials Cobblestone, stone, deepslate, logs, planks, sand, glass
Basic inputs Iron ingot, coal, copper, gold, redstone
Food and farming Wheat, potato, carrot, cooked meats, sugar cane
Utility consumables Arrow, torch, firework rocket, lapis lazuli
Premium commodities Diamond, emerald, netherite scrap

Premium items carry deliberately modest weights — the basket is tilted toward staples so a few large trades cannot distort the signal. The exact weights are internal.

Index formula

The CPI uses a winsorized geometric mean, the same approach used by real-world national statistics offices:

P = exp( SUM of weight_i x ln(price_i_trimmed) )

Each item's observed unit prices are sorted, then the extreme tails are clamped (winsorized) before the geometric mean is computed. This prevents a single outlier trade from skewing the index.

Data source

The CPI is computed from completed, non-simulated, player-to-player ChestShop transactions only:

  • Only real trades count. Simulated ChestShop activity is tagged simulated: true and excluded.
  • Only completed sales count, not listed prices.
  • Rolling 7-day window.

This separation prevents a feedback loop where Sim Shop activity inflates CPI, which causes the Sim Shop to adjust prices upward, which inflates CPI further.

Manipulation defenses

Depth gates

An item is excluded from the policy basket unless it clears minimum thresholds for transaction depth and for the number of unique buyers and sellers in the window. The exact gates are internal.

Items below these thresholds still appear in /market with a low-confidence flag but do not influence the engine.

Rate-of-change clamp

No single item can move faster than an internal weekly limit. Excess movement is dampened.

Manipulation risk score

Each item receives a composite score from five equally-weighted factors:

  1. Low transaction count
  2. Low buyer diversity
  3. Low seller diversity
  4. Account concentration (volume dominated by a single account)
  5. Category outlier (a price moving far out of line with its category)

When risk is high, upward price moves are partially dampened while downward moves are trusted. This reflects that most MC economy manipulation is bullish.

Median lag

The Simulated ChestShop reads a lagged CPI snapshot, not current prices, so short-lived price spikes never reach it.

Per-item confidence

Each basket item receives its own confidence score based on transaction depth and participant diversity:

confidence = sqrt(depth_score x diversity_score)

Items with low confidence contribute less to the overall index.

Player-facing: /market

Command Shows
/market Top 10 items by 7-day trading volume
/market <item> Median price, fair range (25th-75th percentile), volume, category

The /market command shows real player data only. It does not reveal Sim Shop buy prices, CentralBank balance, or engine state.

Weekly Discord report

Every Monday, an automated report posts to Discord showing total turnover, top items by value, and per-item medians. Same data pipeline as the policy CPI but formatted as a public summary.

Commodity index

Separately from the policy CPI, the system computes a commodity index tracking premium items (diamond, gold, netherite, emerald). This is dashboard-only and does not influence the Monetary policy engine.

See also