LottoLogic IQ  ·  Scratch Value Ranker
Loading current catalogue…
PCA / Factor Value Ranker

Which scratch-offs are
the least-bad value
right now.

Scratch tickets come from a finite pool. As a game sells, its real prizes get claimed, so two games on the shelf today can carry genuinely different present value. We measure five value factors per game, then use principal-component analysis to collapse them into one axis and rank the catalogue from least-bad to worst.

Still −EVEvery game, every rank
This is not a prediction and not a system. It finds no winning ticket and makes no game profitable. A better rank means a less-bad bet today — never a good one. This is consistent with our randomness & strategy audit.
01 — The five factors

What goes into the score

Each game is reduced to five standardized factors. PCA finds the single combination of them that explains the most variation across the catalogue — the value axis. The loadings below show how much each factor pulls on that axis for the current data.

EV Yield
Current expected value divided by ticket price. The core of value — but it stays below 1.0, which is exactly why every game is −EV.
Pool Freshness
Share of all prizes still unclaimed across every tier. A fresh pool hasn't been drained of its wins yet.
Top Freshness
Share of the headline top prizes still live. Low values mean the jackpots are already gone.
Win Quality
Inverse of overall odds — how often a ticket wins anything at all, large or small.
Sharpe
Stored reward-per-unit-variance. Tends to carry little weight; it's mostly noise across games.
PC1 loading (value axis) negative loading
02 — The ranking

The catalogue, least-bad first

Every live game projected onto the value axis and sorted. The 0–100 column rescales the raw projection so the worst live game sits at 0 and the least-bad at 100 — it is a relative position within today's shelf, not a probability and not a grade.

Loading ranking…
03 — The method

Reproduce it

No black box. The endpoint reads one row per game, standardizes the five factors (z-score), builds their correlation matrix, runs a cyclic Jacobi eigensolver, takes the leading eigenvector as the value axis (sign-aligned so higher EV yield is positive), and projects each game onto it.

GET /api/scratch/factor-rank

// per game
ev_yield       = ev / price
overall_fresh  = Σ remaining / Σ total     // all prize tiers
top_fresh      = top_remaining / total_top_prizes
win_quality    = 1 / overall_odds
sharpe         = stored risk-adjusted value

// pipeline
Z = zscore(features)          // standardize
C = correlation(Z)            // 5×5 symmetric
(λ, V) = jacobiEigen(C)        // eigen-decompose
PC1 = sign_align(V[0])        // value axis
score = Z · PC1               // project & rank

The response includes variance_explained, the full factor loadings for PC1 and PC2, and every game's raw value_score, so the numbers on this page can be checked against the source.