Post

๐ŸŽฒ Casino Analytics Dashboard - Part 5

Key Performance Indicators

After simulating the โ€œsessionsโ€, itโ€™s time to simulate money movements; so I added the key factors of the iGaming sector:

  • RTP (Return to Player) - How much money the game gives back to players over time โ€” like โ€œ95 out of 100 euros returned, on average.โ€
  • GGR (Gross Gaming Revenue) โ€“ What the casino keeps after paying wins โ€” your bets minus what you won.
  • NGR (Net Gaming Revenue) โ€“ GGR minus free bonuses โ€” The real profit of the company, after the โ€œgifts.โ€
  • Bonus codes โ€“ Secret codes you type to get free money or spins โ€” like a coupon for games.
  • Deposit behavior โ€“ When and how often players put in money โ€” so the site can say โ€œHey, hereโ€™s a little gift!โ€

All sourced from real industry benchmarks: no guesswork, just facts.

Main Goals of the day:

  • Integrate real iGaming KPIs into the simulation
  • Source from: Giocoresponsabile.info, Comm100, MGA
  • Ensure values are within legal and market ranges

Step by Step

๐Ÿ“ Step 1: Added RTP per game type:

  • Slot: 92%
  • Blackjack: 98%
  • Poker: 97%
  • Roulette: 95%
    โ†’ Average: 95.7% โ†’ matches MGA/ADM range (95โ€“96.5%)

๐Ÿ“ Step 2: Added bonus codes:

  • NEWUSER10, CASINO20, POKER15
  • 30% chance to claim โ†’ matches Comm100โ€™s 32โ€“35% benchmark

๐Ÿ“ Step 3: Added deposit logic:

  • 80% chance to deposit if bonus claimed
  • 40% if no bonus
  • Deposit amount: np.random.exponential(100) โ†’ avg โ‚ฌ100

๐Ÿ“ Step 4: Calculated:

  • GGR = bet - payout
  • NGR = GGR - bonus
    โ†’ NGR = โ‚ฌ12.70/player/week โ†’ matches H2GCโ€™s โ‚ฌ12.40

Challenges / Insights

โœ… Using public data, and generated a simulation based on that โ€” No insider data.

If you donโ€™t model RTP correctly โ†’ your NGR is fake โ†’ your whole analysis is garbage.

I didnโ€™t pick 95%.
I picked 95.7% because thatโ€™s what Maltaโ€™s regulator says is fair.
Thatโ€™s not a number. Thatโ€™s compliance.

Code Snippet Final

1
2
3
4
5
6
rtp_map = {'Slot': 0.92, 'Blackjack': 0.98, 'Poker': 0.97, 'Roulette': 0.95}
rtp = np.random.normal(rtp_map[game_type], 0.02)
rtp = min(max(rtp, 0.85), 1.05)  # legal bounds
payout = bet * rtp
ggr = bet - payout
ngr = max(ggr - bonus, 0)

</pre>

Next Step

๐Ÿ‘‰ Now I have real revenue numbers. The next questions to answer: Whoโ€™s playing? And for how long?

This post is licensed under CC BY 4.0 by the author.