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
Initial content
 
Audit corrections from locked spec
 
Line 1: Line 1:
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 of the server economy. The CPI feeds directly into the [[Monetary policy engine]] and is reported weekly to the community via Discord.
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 the CPI measures ==
== What it measures ==
The CPI tracks the price of a weighted basket of 27 common items across five categories. It answers the question: "Are things getting more or less expensive on the server?"
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 prices are going up (inflation). A falling CPI means prices are dropping (deflation). A stable CPI means the economy is in equilibrium.
A rising CPI means inflation. A falling CPI means deflation. A stable CPI means equilibrium.


== Basket composition ==
== Basket composition ==
The policy CPI basket is weighted to reflect typical player spending patterns:
The policy basket is weighted toward everyday staples, not luxury items:


{| class="wikitable" style="width:100%;"
{| class="wikitable" style="width:100%;"
|-
|-
! Category !! Weight !! Items
! Category !! Weight !! Key items
|-
|-
| Building materials || 20% || Cobblestone, stone, deepslate, sand, gravel, logs, planks, sandstone, glass, bricks
| Building materials || 20% || Cobblestone, stone, deepslate, logs, planks, sand, glass
|-
|-
| Basic inputs || 30% || Iron ingot (12%), coal (6%), copper ingot (4%), gold ingot (4%), redstone (4%)
| Basic inputs || 30% || Iron ingot (12%), coal (6%), copper (4%), gold (4%), redstone (4%)
|-
|-
| Food and farming || 20% || Wheat, potato, carrot, cooked beef, cooked chicken, cooked porkchop, sugar cane, paper
| Food and farming || 20% || Wheat, potato, carrot, cooked meats, sugar cane
|-
|-
| Utility consumables || 15% || Arrow, torch, firework rocket, lapis lazuli
| Utility consumables || 15% || Arrow, torch, firework rocket, lapis lazuli
Line 24: Line 24:
|}
|}


Diamond is weighted at 8%, not 30% — the basket is deliberately tilted toward everyday staples rather than luxury items. A few large diamond trades should not distort the overall price signal.
Diamond is weighted at 8%, not higher — the basket is deliberately tilted toward staples so a few large diamond trades cannot distort the signal.


== Index formula ==
== Index formula ==
The CPI uses a '''winsorized geometric mean''', the same mathematical approach used by real-world national statistics offices:
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) )'''
: '''P = exp( SUM of weight_i x ln(price_i_trimmed) )'''


Where each item price is winsorized (extreme outliers in the top and bottom 10% are clamped) before the geometric mean is computed. This prevents a single unusual trade from skewing the index.
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.


== Data source ==
== Data source ==
The CPI is computed exclusively from '''completed, non-simulated, player-to-player''' [[ChestShop]] transactions:
The CPI is computed from '''completed, non-simulated, player-to-player''' [[ChestShop]] transactions only:


* Only real trades between players count. [[Simulated ChestShop]] activity is excluded.
* Only real trades count. [[Simulated ChestShop]] activity is tagged <code>simulated: true</code> and excluded.
* Only completed sales count. Listed prices (signs with no actual purchase) are tracked separately and do not affect the policy CPI.
* Only completed sales count, not listed prices.
* The rolling window covers the last 7 days of trade data.
* Rolling 7-day window.


This separation prevents a feedback loop where the [[Simulated ChestShop|Sim Shop]] buying activity inflates the CPI, causing the Sim Shop to buy at higher prices, causing CPI to rise further.
This separation prevents a feedback loop where [[Simulated ChestShop|Sim Shop]] activity inflates CPI, which causes the Sim Shop to adjust prices upward, which inflates CPI further.


== Manipulation defenses ==
== Manipulation defenses ==
The CPI includes several custom-built defenses against price manipulation:


=== Depth gates ===
=== Depth gates ===
An item is excluded from the policy basket if it does not meet minimum thresholds:
An item is excluded from the policy basket unless it meets all three thresholds:
* At least 10 transactions in the 7-day window
* 10+ transactions in the 7-day window
* At least 3 unique buyers
* 3+ unique buyers
* At least 3 unique sellers
* 3+ unique sellers


Items below these thresholds still appear in the <code>/market</code> command with a low-confidence flag, but they 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 item can move the CPI by more than 8% per week. If an item price jumps more than 8% from the prior week, the excess is attributed to possible manipulation and dampened.
No single item can move more than 8% per week. Excess movement is dampened.


=== Manipulation risk score ===
=== Manipulation risk score ===
Each item receives a composite risk score based on five factors (each weighted equally at 0.20):
Each item receives a composite score from five equally-weighted factors:
# Low transaction count
# Low buyer diversity
# Low seller diversity
# Account concentration (one account over 60% of volume)
# Category outlier (item moved more than 2 standard deviations from its category)


# Low transaction count (fewer than 10)
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.
# Low buyer diversity (fewer than 3 unique buyers)
# Low seller diversity (fewer than 3 unique sellers)
# Account concentration (one account responsible for more than 60% of trade volume)
# Category outlier (item moved more than 2 standard deviations from its category average)
 
When the risk score exceeds 0.5, the system applies asymmetric trust dampening — upward price moves are partially discounted while downward moves are trusted at face value. This reflects the reality that most market manipulation in Minecraft economies is bullish (inflating prices to profit from the Sim Shop).


=== Median lag ===
=== Median lag ===
The [[Simulated ChestShop]] reads a CPI snapshot that is '''7 days old''', not the current snapshot. This means a manipulator would need to sustain artificial prices for over a week before the Sim Shop adjusts raising the cost and risk of manipulation.
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.


== Per-item confidence ==
== Per-item confidence ==
Each item in the basket receives its own confidence score:
Each basket item receives its own confidence score based on transaction depth and participant diversity:


: '''confidence = sqrt(depth_score x diversity_score)'''
: '''confidence = sqrt(depth_score x diversity_score)'''


Where depth_score reflects transaction count (maxes at 50 trades) and diversity_score reflects unique participant count (maxes at 8 unique buyers + sellers). Items with low confidence contribute less to the overall basket index.
Items with low confidence contribute less to the overall index.
 
== Player-facing: /market command ==
Players can check current market prices using <code>/market</code>:


== Player-facing: /market ==
{| class="wikitable"
{| class="wikitable"
|-
|-
! Command !! What it shows
! Command !! Shows
|-
|-
| <code>/market</code> || Top 10 items by total dollar volume traded (last 7 days)
| <code>/market</code> || Top 10 items by 7-day trading volume
|-
|-
| <code>/market &lt;item&gt;</code> || Median price, fair range (25th-75th percentile), volume, category
| <code>/market &lt;item&gt;</code> || Median price, fair range (25th-75th percentile), volume, category
|}
|}


The <code>/market</code> command shows real player-to-player data only. It does '''not''' reveal the Sim Shop buy price, CentralBank balance, or engine recommendations.
The <code>/market</code> command shows real player data only. It does '''not''' reveal Sim Shop buy prices, CentralBank balance, or engine state.


== Weekly Discord report ==
== Weekly Discord report ==
Every Monday at midnight, an automated report posts to the server Discord with:
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.
* Total items traded and turnover
* Top 10 items by value
* Per-item median prices
 
This report uses the same data pipeline as the policy CPI but is formatted as a public-facing summary.


== Commodity index ==
== Commodity index ==
In addition to the policy CPI (which drives the [[Monetary policy engine]]), the system computes a separate '''commodity index''' tracking premium items (diamond, gold, netherite, emerald, ancient debris). This index is for dashboard display only and does not influence policy decisions.
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 ==
== See also ==
* [[Monetary policy engine]] — the system that consumes the CPI
* [[Monetary policy engine]] — consumes the CPI for recommendations
* [[Economy]] — how the economy works
* [[Economy]] — how money flows through the server
* [[Simulated ChestShop]] — the market activity system (excluded from CPI)
* [[Simulated ChestShop]] — excluded from CPI by design
* [[Trading]] — how trading works on the server
* [[Trading]] — how trading works
* [[ChestShop]] — the shop system that generates CPI data
* [[ChestShop]] — the shop system generating CPI data


[[Category:Systems]]
[[Category:Systems]]

Latest revision as of 16:59, 27 May 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.

Basket composition

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

Category Weight Key items
Building materials 20% Cobblestone, stone, deepslate, logs, planks, sand, glass
Basic inputs 30% Iron ingot (12%), coal (6%), copper (4%), gold (4%), redstone (4%)
Food and farming 20% Wheat, potato, carrot, cooked meats, sugar cane
Utility consumables 15% Arrow, torch, firework rocket, lapis lazuli
Premium commodities 15% Diamond (8%), emerald (3%), netherite scrap (4%)

Diamond is weighted at 8%, not higher — the basket is deliberately tilted toward staples so a few large diamond trades cannot distort the signal.

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 top and bottom 10% 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 meets all three thresholds:

  • 10+ transactions in the 7-day window
  • 3+ unique buyers
  • 3+ unique sellers

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 more than 8% per week. 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 (one account over 60% of volume)
  5. Category outlier (item moved more than 2 standard deviations from 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.

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.

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