Possession Value Models

Advanced 10 min read 245 views Nov 25, 2025

Possession Value Models

Advanced frameworks for valuing possession and ball progression. This chapter explores on-the-ball value (OBV), expected threat (xT) models, and VAEP frameworks. Learn how to quantify action value in different contexts.

Topics Covered

  • Possession value frameworks
  • Pitch control and territory
  • On-the-ball value (OBV)
  • Expected threat (xT) models
  • VAEP (Valuing Actions by Estimating Probabilities)
  • Action value in different contexts

Code Examples

Calculate Corsi

Calculate Corsi For Percentage (CF%) - a hockey possession metric

def calculate_corsi(shots_for, shots_against, goals_for, goals_against,
                      missed_for, missed_against, blocked_for, blocked_against):
    """Calculate Corsi For Percentage"""
    cf = shots_for + goals_for + missed_for + blocked_for
    ca = shots_against + goals_against + missed_against + blocked_against

    if cf + ca == 0:
        return 50.0

    cf_pct = (cf / (cf + ca)) * 100
    return round(cf_pct, 1)

# Example: Team with 60 CF, 45 CA
corsi = calculate_corsi(30, 25, 3, 2, 15, 10, 12, 8)
print(f"CF%: {corsi}%")  # Should be above 50% (good)

Discussion

Have questions or feedback? Join our community discussion on Discord or GitHub Discussions.