Inspiration
House Edge scores our probabilities against the simulator's hidden true odds, so luck can't decide the result. We asked what the simulator is doing underneath, instead of adding a bigger black box.
What we built
For each machine we predict $p=(p_0,p_1,p_2,p_5,p_{20})$ from history before the cutoff. We replaced boosted models (~39/60) with exact Bayesian inference over the simulator's rules: which lagged payouts matter, their direction, and when flips happen. Flip evidence is pooled across the episode, the payout table is inferred, and a small logit correction handles residuals.
Results (cross-validated on validation, not test)
- Main: about 58.9/60.
- Adaptation: about 19.7/20. The rules changed (lag pairs moved from (1,3), (2,5), (4,7) to (1,4), (2,6), (3,8)). The main model run unchanged scored only 7.73/20, but the same pipeline rediscovered the new rules from the new data in about 11 minutes, with no hand-tuning.
Learned
Finding the generating structure beat adding capacity. We kept whole episodes together and used leave-one-episode-out scoring and held-out halves to check for overfitting.
Challenges
Hidden state, sparse short histories, missing ticks (unknown, not zero), and packaging for an offline runner. Round two had a 90-minute window, so refitting is automatic and a family_check flags a changed rule family.
Built With
- bayesian-inference
- cpu-only
- cross-validation
- github
- machine-learning
- numpy
- probabilistic-forecasting
- python
- reproducible-research
- time-series