The Women’s National Basketball Association (WNBA) begins its 30th season on May 8, 2026, with Toronto and Portland entering the league as expansion teams [1]. If one of those teams starts slowly, the simplest story will be talent.
That story may be right. It may also be too narrow. Expansion teams are assembled under constraints. Players are new to each other. Coaches are installing systems while roles are still settling.
A slow expansion start can be a talent story, a continuity story, or a roster-construction story selected by the same expansion rules.
Share: Early expansion losses can reflect talent, but they can also reflect continuity that has not had time to form. #Causality #WNBA #Basketball
This article treats the early record like a decision memo: what should a front office update after a slow start?
The decision is not “panic or wait”
The WNBA expansion draft gave the Portland Fire and Toronto Tempo their first roster-building step in April 2026 [2]. Once games begin, early net rating can tempt a team into overreacting.
The decision is more precise:
- if the issue is talent fit, the team needs roster moves
- if the issue is continuity, the team needs reps and stable lineups
- if the issue is expansion-draft limits, the first two explanations are downstream of the same roster-building constraint
The directed acyclic graph (DAG), a graph whose arrows do not loop back on themselves, separates those paths:
ExpansionDraftLimits: constraints on who can be selected or protectedRosterTurnover: how new the roster is to itselfPracticeTime: shared reps before the season settlesContinuity: timing, defensive calls, and role clarityTalentFit: whether player skills fit the intended systemEarlyNetRating: early point differential per possession, represented here as an index

Here is the graph as a py-scm setup. This uses the py-scm reference implementation for a continuous Gaussian structural causal model (SCM). An SCM defines each variable through direct causes. The coefficients are toy parameters.
import numpy as np
from pyscm.reasoning import create_reasoning_model
nodes = [
"ExpansionDraftLimits",
"RosterTurnover",
"PracticeTime",
"Continuity",
"TalentFit",
"EarlyNetRating",
]
weighted_edges = [
("ExpansionDraftLimits", "RosterTurnover", 0.80),
("ExpansionDraftLimits", "TalentFit", -0.50),
("ExpansionDraftLimits", "EarlyNetRating", -0.25),
("RosterTurnover", "PracticeTime", -0.35),
("RosterTurnover", "Continuity", -0.75),
("RosterTurnover", "EarlyNetRating", -0.20),
("PracticeTime", "Continuity", 0.60),
("TalentFit", "EarlyNetRating", 0.80),
("Continuity", "EarlyNetRating", 0.70),
]
idx = {node: i for i, node in enumerate(nodes)}
B = np.zeros((len(nodes), len(nodes)))
for parent, child, weight in weighted_edges:
B[idx[child], idx[parent]] = weight
A = np.eye(len(nodes)) - B
cov = np.linalg.inv(A) @ np.eye(len(nodes)) @ np.linalg.inv(A).T
model = create_reasoning_model(
{"nodes": nodes, "edges": [(p, c) for p, c, _ in weighted_edges]},
{"v": nodes, "m": [0.0] * len(nodes), "S": cov.tolist()},
)
The model makes Continuity and TalentFit separate treatment candidates. It also leaves ExpansionDraftLimits as a background cause that can move both.
Compare the two levers
The inference code asks two intervention questions:
continuity_effect = model.equery(
"EarlyNetRating",
{"Continuity": 1.0},
{"Continuity": 0.0},
)
talent_effect = model.equery(
"EarlyNetRating",
{"TalentFit": 1.0},
{"TalentFit": 0.0},
)
The first query asks what happens when continuity improves. The second asks what happens when talent fit improves.
Observed continuity gap: +0.98
Intervention continuity effect: +0.70
Observed talent-fit gap: +1.18
Intervention talent-fit effect: +0.80
Both mechanisms matter in the toy model. Both observed gaps are larger than their intervention effects because expansion constraints and roster turnover still shape what gets observed.

The memo answer
The decision memo should not say “the roster is bad” after two weeks. It should say which evidence would separate the causes.
If lineup communication improves while talent fit stays the same, the continuity explanation gets stronger. If the same lineup keeps producing weak spacing or defensive mismatches after enough reps, the talent-fit explanation gets stronger. If both move together, the expansion-draft constraint may be the upstream cause.
Sources
- WNBA Slated To Tip Off 30th Season Friday, May 8, WNBA, accessed April 28, 2026.
- Portland Fire, Toronto Tempo Select 22 Players in WNBA Expansion Draft 2026, WNBA, accessed April 28, 2026.
Download the runnable standalone Python example: Python example ZIP.


Leave a Reply