πŸ§ͺThis is a one-person passion project, still very much in beta. Some roster data is off β€” fresh data drops Monday. Poke around, have fun, and bear with me!

Metrics & Methodology

How NWSL Notebook computes the numbers behind every team and player profile. All models are trained on NWSL event data from 2016 to present.

VAEP β€” Valuing Actions by Estimating Probabilities

Every on-ball action in a match β€” passes, carries, tackles, shots, interceptions β€” is scored by how much it changed the probability of scoring or conceding within the next 10 actions. A through-ball that puts an attacker in on goal might score +0.08 VAEP (an 8 percentage-point increase in scoring probability). A sloppy back-pass that leads to a turnover scores negative.

VAEP is computed using the socceraction framework (Tom Decroos et al., KU Leuven). The model is trained on SPADL-converted event data from all NWSL seasons 2016–2025. Offensive and defensive VAEP are separated β€” a midfielder who wins the ball back (defensive VAEP) and then plays a key pass (offensive VAEP) gets credit for both.

Season VAEP totals are the sum of all individual action values across a season. Per-match VAEP is the sum for a single game. Higher is better.

xT β€” Expected Threat

Expected Threat measures how much a ball carry or pass moved the ball to a more dangerous position on the pitch. The pitch is divided into a 16Γ—12 grid, and each zone has a pre-computed "threat" value based on the historical probability that possession in that zone leads to a goal within the next few actions.

When a player carries or passes the ball from a low-threat zone (e.g. their own half) to a high-threat zone (e.g. the edge of the box), the xT value is the difference. xT+ (positive expected threat) captures only the value-adding movements. Negative xT captures backwards or lateral play that reduces threat.

The xT grid is computed from NWSL match data using the Karun Singh methodology.

pG β€” Post-Shot Expected Goals

Post-shot expected goals (pG) refines standard xG by incorporating information available after the shot is taken: shot placement, trajectory, and goalkeeper position. While pre-shot xG asks "how likely is a goal from this position?", pG asks "given where the shot actually went, how likely is it to go in?"

pG values closer to 1.0 indicate shots that were almost certain to score. A match pG of 1.8–0.9 means the home team's shots were collectively worth 1.8 expected goals based on their quality and placement. The pG timeline on match pages shows how shot quality accumulated through the match.

Embeddings & Archetypes β€” The Style Space

Every team's tactical identity is encoded as a high-dimensional embedding vector (typically 64 or 128 dimensions) that captures their playing style across multiple facets: pressing intensity, build-up patterns, defensive shape, transition speed, width of play, and more.

These embeddings are computed from aggregated match-level statistics using the team_style_embedding_v2 model. Teams with similar playing styles end up close together in embedding space. The Style Space Map projects these high-dimensional vectors down to 2D using PCA so you can visually see which teams play similarly.

Archetypes are cluster labels derived from Gaussian Mixture Model (GMM) clustering of the embedding space. Each cluster gets a human-readable name (e.g. "High-press possession", "Direct counter-attack") based on the statistical properties of its members. The archetype narratives are AI-generated descriptions that summarize each cluster's distinctive tactical traits.

Signals β€” CASLO Framework

The CASLO signal framework tracks five dimensions of team behavior over time:

β€’ Coherence β€” How internally consistent is a team's play? High coherence means the team executes a clear tactical plan; low coherence suggests disorganization. β€’ Aggression β€” Pressing intensity, tackle frequency, and high defensive line metrics. β€’ Structure β€” Positional discipline, passing network connectivity, formation adherence. β€’ Luck β€” Variance between expected and actual outcomes (xG vs goals, expected points vs actual points). β€’ Opportunity β€” Quality of chances created relative to opponent quality.

Each signal is computed per-match and smoothed over rolling windows. The pattern state (e.g. "ascending", "descending", "volatile") is derived from the trajectory of the friction metric, which combines multiple signals into a single momentum indicator.

Drift β€” Tactical Evolution

Drift measures how much a team's tactical identity has shifted from their season baseline. It is computed as the cosine distance between a team's rolling embedding (computed over a sliding window of recent matches) and their full-season embedding.

A drift value of 0.01 means the team is playing almost identically to their season average. A drift of 0.05+ indicates significant tactical change β€” perhaps due to injuries, transfers, or a deliberate style shift by the coaching staff.

Three embedding families are tracked for drift: Identity (overall playing patterns), Style (tactical approach), and Roster (personnel-driven changes). The drift timeline shows how each evolves through the season.

Οƒ β€” Standard Deviation Annotations

The Οƒ (sigma) annotations throughout the site show how far a value is from the league average in standard deviations. A value of +1.5Οƒ means the team or player is 1.5 standard deviations above the league mean for that metric β€” roughly in the top 7% of the distribution.

Color coding: green indicates values that are "good" (above average for positive metrics like goals scored, below average for negative metrics like goals conceded). Red indicates the opposite. Values within Β±0.15Οƒ of the mean are not annotated.

This z-score approach makes it easy to compare across metrics with different scales β€” a +2.0Οƒ in VAEP is comparably exceptional to a +2.0Οƒ in goal difference.

Questions about methodology? The underlying models and computations are documented in the socceraction framework (VAEP) and internal NWSL analytics pipelines.