Inspiration
ThunderHacks 2026 — OLG "Intelligent Player Protection & Fraud Detection" challenge. OLG's own brief names the problem directly: rule-based monitoring generates large numbers of alerts but provides limited insight into why activity is flagged. We wanted investigators to get answers, not just alerts.
What it does
A pipeline that flags players for both anti-money laundering (AML) and safer-gambling (harm) review, explains every flag in plain English, and gives investigators a prioritized queue instead of an unranked alert list. OLG provided no data, so the project includes a calibrated synthetic data generator with labelled scenarios to test against.
How we built it
simulate.py → features.py → score.py → app.py — four stages sharing one SQLite database. The simulator generates patrons and transactions calibrated to published research (BC PlayNow spending concentration, Ontario harm-group revenue share). Features computes 59 context-aware features per player. Score runs a rules scorecard first (every point traceable to evidence) with a LightGBM model as a second opinion. App is a Streamlit console for investigators.
Challenges we ran into
No real data was provided, so getting the synthetic simulator to produce statistically realistic patterns — not just random noise — took calibration against actual published research (FATF typologies, FINTRAC's own indicator list) rather than guesswork. Separating "unusual because of fraud" from "unusual because of gambling harm" on the same underlying signal was the core design problem, since the two require different investigator responses.
Accomplishments that we're proud of
Every flag is explainable and traceable to a specific rule or evidence, not a black-box score. Demographics only select the peer comparison group — they never add risk points, which matters for a compliance-facing tool. The system routes each case to AML, safer gambling, both, or neither, rather than a single undifferentiated alert.
What we learned
We learnt how to work on GitHub together.
Built With
- lightgbm
- numpy
- pandas
- python
- scikit-learn
- sqlite
- streamlit
Log in or sign up for Devpost to join the conversation.