Win % Attribution Methodology
How Full Flight VHL assigns a win percentage to an individual skater or goalie.
Working Model
Each player’s Win % is a win probability added (WPA) score derived from their complete stat breakdown. Rather than counting team results, we estimate how many wins the player contributed to through their on-ice actions.
Step 1: Coefficient Generation
Win coefficients are calculated using the Analyze_Wins.py script by correlating individual statistics with team wins across all VHL and VHLM regular season and playoff data:
Coefficient = correlation(stat, team_wins)
Positive stats (goals, assists, hits, etc.) use positive correlations, while negative stats (penalties, giveaways) use negative correlations
Step 2: Win Probability Added Calculation
The Win_Probability_Added.py script applies these coefficients to season data using a sophisticated weighting system:
Player Score = Σ (player_stat / team_total_stat) × coefficient
Category WPA = team_wins × category_weight × (player_score / team_score_total)
Scores are adjusted to ensure non-negative values and scaled so team totals equal actual wins
Key Weighting Parameters
- Category Weight Blend (35%): Balances score-based vs. roster-size weighting between skaters and goalies
- Point Priority (70%): Special boost for goal/assist contributors using separate weightings (goals: 2.0x, assists: 1.5x, total points: 4.0x)
- Team Uniform Blend (40%): Ensures some baseline WPA distribution across all players
- Player Ratio Exponent (0.75): Dampens extreme individual contributions
Final win percentages are normalized so each team's player contributions sum to exactly 100% of their wins, distributed proportionally across skaters and goalies.
Statistical Categories
Skater Stats (Positive Correlation)
- G: Goals
- A: Assists
- +/-: Plus/Minus
- HIT: Hits
- SHT: Shots
- SB: Shot Blocks
- PPG/PPA: Power Play Goals/Assists
- PKG/PKA: Penalty Kill Goals/Assists
- SCHT: Successful Hits
- TA: Takeaways
- PRET: Puck Retrievals
- PI: Pass Interceptions
Skater Stats (Negative Correlation)
- PIM: Penalty Minutes
- HTT: Hits Taken
- SCHTA: Successful Hits Against
- GA: Giveaways
- PIA: Pass Interceptions Against
Goalie Stats
Positive:
- PCT: Save Percentage
- GA: Goals Against
- SA: Shots Against
- SAR: Shots Against Rate
- PS%: Penalty Shot Save %
- PSA: Penalty Shots Against
Negative:
- PIM: Penalty Minutes
Dataset Notes
- Data combines VHL and VHLM regular season and playoff statistics for coefficient calculation
- Excluded stats: Points (P), PPP, PKP - calculated separately to avoid double-counting
- Coefficient aliases: Goals use Assist coefficients (G→A), Power Play Goals use Power Play Assist coefficients (PPG→PPA)
- Special handling for Takeaway Difference (TOD = TA - GA) in skater calculations
Technical Implementation Details
Score Adjustment Process
Raw player scores undergo several adjustments to ensure meaningful WPA values:
- Baseline Addition: Small baseline (1e-6 × total) added to prevent zero-sum issues
- Non-negative Enforcement: Negative scores shifted up by minimum value
- Point Boosting: Special multiplicative bonuses for goal/assist production with exponential scaling
Category Weighting Algorithm
Skater and goalie contributions are balanced using a hybrid approach:
Score Weight: Category's share of total team performance score
Player Weight: Category's share of total roster size
Blended Weight: 35% score + 65% player count
Final weights are raised to 0.75 power and renormalized
Output Normalization
Individual win percentages are calculated using precise fractional distribution:
- Team WPA totals are scaled to sum to exactly 100.00%
- Remainder distribution uses largest fraction method for exact percentage allocation
- Combined rankings adjust for team win rates and roster sizes
Future Enhancements
The analytics team is evaluating the following ideas:
- Publishing the complete coefficient table with statistical significance measures