Inspiration The Gilded Ace's general manager wants to replace the ten lowest-earning slot machines. That sounds reasonable, until you ask why they earn less. A machine can trail because it sat on the floor for fewer days, runs a low-hold game, sits in a quiet corner, had an unlucky payout run, or is actually weak. Replacing a machine fixes only the last cause. We wanted a dashboard that separates luck, location and a leak before anyone spends the budget.
What it does The dashboard answers all six guide questions in seven chapters, and every claim links to its evidence:
Verdict: the ten machines' $541,425 shortfall breaks into five additive parts:
Gap
Exposure + Game math + Location + Machine + Payout residual Gap=Exposure+Game math+Location+Machine+Payout residual
Game math accounts for −$209,724, location −$143,519, exposure −$128,590 and payout residual −$63,357. The combined machine component is positive (+$3,765). After location adjustment, the weakest machines on the floor are M-1184, M-1532 and M-1154, and none of the GM's ten ranks in the bottom ten.
Floor explorer: filter by date, zone and bank, and drill into any machine. Nine of the ten spent time in Back Forty, a zone with far lower footfall. Demand: a weekday forecast frozen before May - June, plus a walkway closure used as a natural experiment for the access hypothesis. Downtime: 5,021 unavailable hours, about $1.115M in estimated missing wagers. Swing shift carries 53% of that, and guests may simply have moved to other machines. Guests & comps: carded players aggregated per person. The top 1% placed 20.41% of wagers. Redemption point prices fell about 53% in May within every matched benefit and tier. Placement Lab: a time-validated model that prices machine moves and swaps, including lead time, downtime and displaced play. Action studio: a $1,200 inspection of M-1158 (the only payout signal surviving a floor-wide Bonferroni screen) and a $7,500 Back Forty wayfinding test. That's $8,700 spent and $91,300 kept. How we built it Data: the organizers' Parquet release, verified by SHA-256 and row counts, then queried with DuckDB and pandas. All rates are ratios of sums, such as ( \text{hold} = \sum \text{house win} / \sum \text{coin-in} ), never means of ratios. Gaming days run 6 AM to 6 AM, and dated placements follow machines as they move. Peer benchmarks exclude the target machine everywhere, so a machine is never compared against itself. Forecasting: the model form was chosen on Jan–Feb → Mar–Apr, refit on Jan–Apr, then evaluated once on a frozen 61-day May–June holdout. Daily MAE was $68,699 vs $218,258 for a constant baseline, a 68.5% reduction. Placement Lab: histogram gradient boosting with scikit-learn, selected on expanding time folds. It scored $3.69 vs $4.29 weighted MAE per machine-hour against a configuration/weekday baseline (13.9% lower). Front end: React, TypeScript, Vite and Recharts, with a WebGL card-and-particle opening. It ships as a static site on Vercel, plus a single-file offline version. Testing: Python tests for the money math, plus 13,616 numerical assertions comparing the browser's aggregations to the Python reports, and UI interaction tests. Challenges we ran into Our first ranking leaked location into "machine quality." When a zone had too few same-game peers, it fell back to the whole floor and blamed machines for their corner. The five-part decomposition replaced it. Honest uncertainty: our nominal 90% forecast band covered only 85.25% of test days. We report that instead of hiding it. Thin evidence for moves: the data has only four historical relocations, so Placement Lab prices scenarios but never claims a proven relocation gain. Tooling: the organizer's checksum script failed on Windows paths, so we wrote a portable verifier that waives no checks. Accomplishments that we're proud of An exact accounting identity: the five components sum to each machine's gap (max error about 10 − 11 10 −11 ), so nothing is hidden in a residual we can't explain. Reframing the question: the analysis shows the GM's list mostly reflects game mix, location and time on the floor, and points to different machines as the real underperformers. A plan that buys information instead of guessing: $8,700 of tests, a predeclared measurement plan, and $91,300 kept in reserve. A Claims & Evidence appendix where every claim lists its table and query, result, alternative explanation and limitation. A forecast that beats its baseline by 68.5% on a holdout we froze before looking. What we learned The most expensive mistake in analytics is answering the question you were asked instead of the one that matters. "Which machines earn least?" and "Which machines are bad?" have different answers here. We also learned to write claims at the strength the evidence supports: observational, descriptive, conditional. Every recommendation in the dashboard comes with its alternative explanation and its limitation.
What's next for Dashboard Royale Team_Clt_Alt_Defeat Run the July tests and measure them: compare Back Forty occupancy after wayfinding against predeclared controls, and record the M-1158 inspection result. Move from association to causation: use staggered rollouts or randomized signage to measure location effects directly. Grow Placement Lab as more machine moves are logged, so relocation estimates gain real support. Live data: connect the pipeline to daily meter feeds so the dashboard refreshes itself. All casino data is synthetic. AI assistance (OpenAI Codex and Anthropic Claude) is disclosed in the repository.