123df671f5
Reviewed-on: #5 Co-authored-by: David Gwilliam <dhgwilliam@gmail.com> Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
84 lines
2.6 KiB
Markdown
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.
|