Clemson and the Transfer Portal
For five seasons Clemson added fewer transfers than almost any team in major college football, while the rest of the sport rebuilt rosters through the portal. Over the same stretch, the Tigers went from a perennial playoff team to 7–6. This post uses team-level data on every FBS roster to estimate how much of that decline the portal actually explains.
The dynasty and the slide
From 2015 to 2020 Clemson went 79–7, won two national titles, and finished in the top four of the opponent-adjusted ratings every season. Its roster talent, measured by a recruiting-based team talent composite, kept climbing. By 2021 it was 4th in the country, and it stayed 3rd or 4th through 2024.
The results went the other way. Clemson's on-field rating ranked 37th in 2021, 10th in 2022, 26th in 2023, and 34th in 2024. In 2025 it fell to 53rd and the team finished 7–6. To compare across seasons, Figure 1 puts both numbers on the same scale: standard deviations above the FBS average for that year.
Through 2020 the two lines moved together, and the team played about as well as, or better than, its talent. From 2021 on, a gap of 1.4 to 2.4 standard deviations opens up between them, narrowing only in the partial 2026 season. That gap is the subject of this post.
How little Clemson used the portal
The NCAA's one-time transfer exception, which let players move once without sitting out a year, took effect in 2021. Transfers exploded: the median FBS team added 6 that season and 20 by 2025. Clemson added 0, 1, 3, 1, and 5 over those five years, which ranked between 123rd and 132nd in FBS every season.
The data comes from the sportsdataverse's team-level portal table, which gives each FBS team's roster size, transfers in and out, and a "transfer talent" score that rates each incoming transfer on a 20–100 scale and sums them. Joining it to talent, returning production, and ratings takes a few lines, though one detail matters: some tables store ESPN team IDs as text and others as integers.
def load(table):
files = sorted(glob.glob(f"cfb/{table}_20*.parquet"))
d = pd.concat([pd.read_parquet(f) for f in files], ignore_index=True)
if "team_id" in d.columns: # some tables store the ESPN id as text
d["team_id"] = pd.to_numeric(d.team_id, errors="coerce").astype("Int64")
return d
panel = (load("cfb_ratings")
.merge(load("cfb_team_portal"), on=["season", "team_id"])
.merge(load("cfb_team_talent"), on=["season", "team_id"])
.merge(load("cfb_returning_production"), on=["season", "team_id"], how="left"))
# Put talent and rating on a per-season standard-deviation scale
z = lambda s: (s - s.mean()) / s.std()
panel["talent_z"] = panel.groupby("season").talent_composite.transform(z)
Checking the retention claim
Dabo Swinney's case for this approach is retention. He has said Clemson "led the nation in retention" over the last three seasons. That claim is testable: retention is the share of the roster that transfers out.
Against the whole country, the claim doesn't hold. Clemson's out-transfer rate ranked 98th in FBS in 2021, then 57th, 34th, and 19th, and finally 5th in 2025. Many small programs lose very few players simply because few of their players have better options.
Against its real peers, though, the claim is close to right. Among the 25 most talented rosters, Clemson had the 3rd-lowest out-transfer rate in 2022, 2023, and 2024, and the lowest in 2025: 6.3% of the roster, against a peer median of 20.2%. Clemson kept its players far better than other elite programs did. It just didn't replace the ones it lost.
Underperforming the roster
How unusual is Clemson's gap between talent and results? Regressing each team's rating on its talent (with a season effect) across all FBS team-seasons from 2021–2025 gives the rating a roster "should" produce. The residual is how far a team played above or below that.
era = panel[panel.season.between(2021, 2025)]
fit = smf.ols("net_z ~ talent_z + C(season)", data=era).fit()
era["gap"] = fit.resid
elite = (era[era.talent_rank <= 15]
.groupby("team").agg(seasons=("gap", "size"), gap=("gap", "mean"))
.query("seasons >= 3")
.sort_values("gap"))
Clemson underperformed its talent by 0.88 standard deviations per season, more than twice as much as the next program, Alabama (−0.41). Ohio State and Miami sit at the other end. Clemson also took the fewest transfers of anyone on this list, an average of 2.0 a year. Every other program averaged at least 6.
Modeling what the portal is worth
That's suggestive, but lots of things changed at Clemson in this stretch, including the departure of both coordinators after the 2021 season. To isolate the portal, I fit a model of every FBS team's rating from 2022 to 2025 (524 team-seasons), with the things that should predict it:
- Last season's rating: good teams tend to stay good.
- Roster talent, standardized within the season.
- Returning production: the share of last year's production that's back.
- Transfer talent in and transfer talent out, in units of 100 points.
Standard errors are clustered by team, since the same program appears in up to four seasons.
import statsmodels.formula.api as smf
prev = panel[["season", "team_id", "net_z"]].assign(season=panel.season + 1)
panel = panel.merge(prev.rename(columns={"net_z": "prev_net_z"}), on=["season", "team_id"], how="left")
panel["tin100"] = panel.transfer_talent_in / 100
panel["tout100"] = panel.transfer_talent_out / 100
train = panel[panel.season.between(2022, 2025)].dropna(subset=["prev_net_z", "overall_returning"])
model = smf.ols(
"net_z ~ prev_net_z + talent_z + overall_returning + tin100 + tout100 + C(season)",
data=train,
).fit(cov_type="cluster", cov_kwds={"groups": train.team_id.astype(int)})
| Predictor | Effect on rating (SD) | 95% interval |
|---|---|---|
| Last season's rating (per SD) | +0.51 | 0.43 – 0.59 |
| Roster talent (per SD) | +0.32 | 0.23 – 0.42 |
| Returning production (per +10%) | +0.13 | 0.09 – 0.17 |
| Transfer talent in (per 100 points) | +0.045 | 0.019 – 0.070 |
| Transfer talent out (per 100 points) | +0.023 | −0.006 – 0.053 |
The model explains 63% of the variation in team ratings. Incoming transfers clearly help: each 100 points of transfer talent adds about 0.045 standard deviations. Fitting the same model with raw counts instead of talent points gives about +0.02 SD per transfer (95% interval 0.011–0.030). Losing transfers has no clear cost. The estimate is slightly positive, possibly because many of the players who leave weren't playing much.
Those per-transfer effects are small next to roster talent and returning production, but they add up. A typical top-25 program in 2025 brought in 725 points of transfer talent, worth about a third of a standard deviation.
What a normal portal class would have changed
With the model in hand, the counterfactual is simple: give Clemson the median transfer talent of a top-25 roster each season, hold everything else fixed, and see how its predicted rating moves.
typical = panel[panel.talent_rank <= 25].groupby("season").transfer_talent_in.median()
clem = panel[panel.team_id == 228].copy()
clem["pred"] = model.predict(clem)
clem["pred_typical"] = clem.pred + model.params["tin100"] * (
clem.season.map(typical) / 100 - clem.tin100
)
The answer is that the portal mattered, but much less than the gap. A typical top-25 transfer class would have raised Clemson's predicted rating by about 0.15 standard deviations per season from 2023 to 2025. In ranking terms, that moves the 2023 team from 26th to about 23rd, 2024 from 34th to 28th, and 2025 from 53rd to 42nd. That's a better team, but not a playoff contender.
The bigger finding is in the gray bars. Even with its real, minimal portal use, the model expected Clemson to be much better than it was: a predicted 1.45, 1.20, and 0.98 standard deviations in 2023–25, against actual ratings of 0.91, 0.74, and 0.35. Averaged over those three seasons, Clemson fell 0.69 SD short of a version with a typical portal class. Only about 0.15 of that comes from the portal. The other 0.55 SD is Clemson underperforming a talented, experienced roster, which points at development, scheme, or quarterback play rather than roster construction.
2026: the first real portal class
Clemson changed course this offseason, adding 10 transfers, its most ever (the median top-25 roster added 21). Through five rated games, Clemson's rating is 0.71 SD, above the model's 0.51 prediction. That's the first positive residual since 2022, though it includes a 51–10 loss at LSU and a 41–13 loss to Miami. Five games is far too few to say whether the approach is working.
Caveats
- The portal data is team-level. It can't tell which transfers played, or at what positions, so a quarterback and a fourth-string linebacker with the same rating count the same.
- The model is correlational. Programs that use the portal heavily may differ in other ways (staff turnover, NIL budgets) that also affect results.
- Ratings are one season's opponent-adjusted EPA. They capture how well a team played, not how lucky it was in close games, so they can differ from the record.
- A team-fixed-effects version, comparing each program only with itself, would be a stronger test of the portal's effect. With only four seasons per team, it's also much noisier.
Data and code
Team-level portal, talent, returning-production, ratings, and schedule tables from the
sportsdataverse releases (the data behind
cfbfastR), 2015–2026. Retention claims from
On3.
Every number and chart comes from
analysis/clemson_portal.py.