Methodology

One Piece TCG only. Every published number traces to a formula and a dated artifact — no hype, no buy calls.  ·  Home  ·  Leaderboards  ·  Data status

Statistical framing

Pack EV is the expected value E[X] of singles value returned by one randomly opened pack, under a pull-rate model and listed market prices. It is a population mean, not a forecast for one pack. Opening outcomes are highly skewed: most packs return far below EV; a tiny fraction carry the chase hits that pull the average up. By the law of large numbers, realized value per pack approaches EV only over many independent opens (hundreds+), and even then only if market prices match realized sale prices.

We use arithmetic means within rarity tiers and do not model card-to-card covariance, print-run scarcity beyond the slot model, or buyer/seller fees.

Core formulas

Expected value per pack

Each booster pack is modeled as independent slots (commons, rares, alt-art slot, DON slot, etc.). For slot s with expected_cards_per_pack = nₛ, configured tier weights are renormalized over tiers that have at least one priced card in that set (unpriced tiers drop out of the active pool).

μᵣ = (1 / |Cᵣ|) · Σ price(c) for cards c in rarity tier r πₛ,ᵣ = wₛ,ᵣ / Σ wₛ,ᵣ′ over active tiers r′ in slot s contribₛ,ᵣ = nₛ · πₛ,ᵣ · μᵣ ev_per_pack = Σₛ Σᵣ contribₛ,ᵣ

Stored as ev_math.slot_breakdown in set metrics. Rounded to 2 decimals for display; reconciliation gates allow ≤ $0.01 drift vs the unrounded sum.

Pack cost & profit / loss

pack_cost = TCGplayer market pack SKU when pinned else booster_box_market / packs_per_box profit_per_pack = ev_per_pack − pack_cost loss_per_pack = pack_cost − ev_per_pack (internal sign; UI shows profit)

Pack cost source is shown per set (tcgplayer_market, box_derived, etc.).

Total set raw value

total_raw_value = Σ price(c) over checklist cards c

No pull-rate weighting — checklist liquidation fantasy, not rip value.

Chase concentration

chase_ev_share = 100 · (Σ contrib where μᵣ ≥ $15) / ev_per_pack

Uses the same slot contributions as EV. Tiers with tier-average ≥ $15 (alt arts, manga, SP, etc.) are “chase” tiers. High % = lottery-style set where a few hits carry most of E[X].

Per-card pull odds & cost to chase

P(card c in tier r, slot s) = πₛ,ᵣ / |Cᵣ| cost_to_chase_usd(c) = pack_cost / P(c)

Expected packs to pull a specific card at modeled rates (not a guarantee). Ultra-chase EN-only slots may be suppressed when no EN pull slot exists.

Trends & movers

Δ% = (vₜ − vₜ₋ₖ) / vₜ₋ₖ default k = 7 days profit boards: Δ$ = vₜ − vₜ₋ₖ (signed $; % near zero is noise)

Built from dated set_metrics snapshots — one value per calendar day (latest file wins). Like-for-like only: same set, same formula era, TCGplayer NM market inputs. Missing days are skipped; we never interpolate prices between snapshots.

Per-card price history

Card profile pages show TCGplayer Near Mint market snapshots, not individual eBay or auction sales.

Cardmarket prices may appear on card pages for reference; they are not used in EV math.

Data sources

InputSourceRefresh
Card prices (EV) TCGplayer market from one_piece_pricing_real.json (NM listing feed) Daily
Sealed prices TCGplayer market for booster packs, boxes, starter decks (sealed_prices_one_piece.json) Daily
Price history Nightly snapshots + TCGplayer infinite-api backfill (see above) Nightly
Pull rates Versioned slot models in pull_rates_one_piece.json (sourced / estimated / community) On change

Confidence & trust signals

Pull-rate quality and price coverage are separate dimensions — the UI surfaces each independently.

Pull-rate confidence (config)

Live audit: status page · data/evidence/op_pull_rate_openings.json

Price coverage (computed)

Catalog only

Promo pools and other products with catalog_only: true skip the pack model entirely. We show total raw value only and exclude the set from EV leaderboards.

Known gap: DON!! / Gold DON chase slots in some modern sets carry pull weight but often have $0 priced listings — contribution is $0 (conservative) and flagged by the op_pure_math_tier_coverage gate.

Quality gates

verification_gates.py runs before publish. Deploy approved when all critical gates pass; some non-critical FAILs (e.g. DON tier coverage, TCGplayer scrape gaps) are documented but do not block deploy.

CheckThreshold
Pricing artifact freshnessWARN if > 72h old
Global pricing coverage≥ 85% of catalog cards priced (critical)
EV formula reconcileUI vs computed within $0.01 per set
UI/API coherenceLeaderboard top rows within $0.02 of source metrics
Image coverage≥ 98% of cards have image_url
Rarity completeness≥ 95% of cards have valid rarity labels

Live results: status page.

What we do not claim