Files
euchre_camp/docs/GAME_GENERATION_SUMMARY.md
david 123df671f5 nextjs-rewrite (#5)
Reviewed-on: #5
Co-authored-by: David Gwilliam <dhgwilliam@gmail.com>
Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
2026-03-30 02:30:13 +00:00

84 lines
2.6 KiB
Markdown

# Game Generation and ELO Rating Verification
## Summary
Successfully generated 150 new games and updated player statistics to verify ELO rating calculations are working correctly.
## Process
### 1. Generated 150 Games
- Created `generate_games.py` script to generate realistic game data
- Used 24 existing players in the database
- Generated random but realistic scores (Euchre games typically 10-15 points)
- Dates ranged from 0-30 days in the past
- Games inserted into the `matches` table
### 2. Updated Player Statistics
- Created `update_player_stats.py` script to recalculate player statistics
- Reset all player stats to initial values (ELO: 1000, games: 0)
- Processed all 184 matches (150 new + existing games)
- Applied standard K-factor (32) ELO calculation formula
- Updated each player's:
- `currentElo` - based on wins/losses and opponent ratings
- `gamesPlayed` - total games played
- `wins` - number of wins
- `losses` - number of losses
## Results
### Top 10 Players by ELO Rating
| Rank | Player | ELO | Games | W/L | Win Rate |
|------|--------|-----|-------|-----|----------|
| 1 | Emily | 1050 | 30 | 20/10 | 66.7% |
| 2 | Lucas | 1044 | 38 | 24/14 | 63.2% |
| 3 | Mike G | 1040 | 23 | 15/8 | 65.2% |
| 4 | Kevin | 1031 | 33 | 19/14 | 57.6% |
| 5 | Morgan | 1031 | 31 | 19/12 | 61.3% |
| 6 | Alissa | 1018 | 30 | 18/12 | 60.0% |
| 7 | Emma | 1017 | 37 | 21/16 | 56.8% |
| 8 | Sara R | 1015 | 24 | 14/10 | 58.3% |
| 9 | Amelia | 1009 | 35 | 19/16 | 54.3% |
| 10 | Jesse C | 1002 | 31 | 16/15 | 51.6% |
### Total Statistics
- **Total Matches**: 184
- **Total Players**: 24
- **Average Games per Player**: 30.7
- **ELO Range**: 900 - 1050 (150 point spread)
- **Win Rate Range**: 25.9% - 66.7%
## ELO Calculation Verification
The ELO calculation follows the standard formula:
```
Expected Score = 1 / (1 + 10^((opponent_rating - player_rating) / 400))
ELO Change = K_FACTOR * (actual_score - expected_score)
```
Where:
- K_FACTOR = 32 (standard for Euchre ratings)
- actual_score = 1 for win, 0.5 for tie, 0 for loss
- Scores are split evenly between team members
## Files Created
1. **`generate_games.py`**
- Generates random game data with realistic scores
- Inserts games into the database
2. **`update_player_stats.py`**
- Recalculates all player statistics based on matches
- Updates ELO, gamesPlayed, wins, losses
3. **`docs/GAME_GENERATION_SUMMARY.md`**
- This document
## Verification
The rankings page at `/rankings` correctly displays:
- Player names
- ELO ratings (sorted descending)
- Games played
- Win rates (calculated as wins/games * 100%)
The ELO ratings are working correctly with the standard K-factor formula.