K LEAGUE 1 2026 · FC SEOUL · 25 MATCHES · 11 OPPONENTS

How the league learned to play FC Seoul

This began as an attempt to sort Seoul's opponents into high, mid and low blocks. It failed: the same team did not turn up the same way the second time. Following that failure produced something else — 8 of 11 teams dropped their block for the rematch, and the expected goal Seoul get from each ball played into the centre of the box fell by a third over the second half of the season. Their points per game went up anyway.

Hyuckjin HanSeptember 2026 Data: K League data portal, 34,518 events Sequel to “Everyone gets the ball to the same place”

WHAT THE DATA SAYS

  1. A team is not a type. Across 17 repeat pairings the within-team correlation of block height is r = −0.280. Ulsan set the second-highest block in the league in March and one of the lowest in August.
  2. A match is a type. Split the measurement in half inside a single match and it reproduces at 0.930; it correlates −0.874 with PPDA; intraclass correlation 0.844. Round-level classification holds.
  3. The league changed direction. 8 of 11 teams dropped their block for the rematch. Mean −5.7, exact sign test p = 0.012. It survives controls for match status, possession and home/away.
  4. Part 1's axis moved by the same amount. xG per delivery into zone 17 — the expected goal earned each time the ball is played into the central cell in front of goal — fell from 0.0587 to 0.0414, −30%. The fall is locatable: the phase where Seoul win the ball in the opponent's half and build from it fell −46%.
  5. The points held. Opponents attacking less meant xG conceded per game fell −42%. Points per game 2.00 → 2.08.

1A team cannot carry a label

The scouting table that fell apart first

The original plan was simple. Sort the 11 teams Seoul faced into high, mid and low blocks, then see which approach worked. A table you could carry straight into next season's opposition analysis.

That table was never built. Ulsan stopped it.

Same team, two answers — Ulsan's two matchesOne dot = one Ulsan defensive action · Seoul attack →46.9R02 · home, won 1-0High block · PPDA 2.61 · 176 defensive actions28.8R20 · away, lost 0-3Low block · PPDA 10.65 · 156 defensive actionsColoured bar = mean defensive position
Figure 6 · Why a team cannot carry a label. In March, Ulsan set the second-highest block in the league against Seoul (46.9). In August they set one of the lowest (28.8). Between the two, their PPDA rose from 2.61 to 10.65 — a fourfold drop in pressing intensity. A scouting note reading "Ulsan sit in a low block" is wrong in one of these two matches, guaranteed.

Same club, same manager, five months apart. In March, Ulsan came to win the ball off Seoul above the halfway line. In August they put ten players in front of their own box and waited. Between the two matches their PPDA — how many passes Seoul get to play in the opponent's half per opposing defensive action — went from 2.61 to 10.65, a fourfold drop in pressing intensity.

It was not only Ulsan. Across all 11 teams, I took the 17 repeat pairings and correlated block height between a team's own matches.

r = −0.280. If a team were a type, this number would be positive.

Negative means the teams that pressed highest at the first meeting sat deepest at the next. A scouting note reading “Ulsan sit in a low block” is wrong in one of those two matches, guaranteed.

So the unit of classification changed. Not the team — the match. Not “what kind of side is this” but “how did they set up in this game”. Which first required checking whether match-level measurement is trustworthy at all.

2Can a match be classified?

Validating the ruler before using it

Block height is the average position of the opponent's defensive actions — tackles won and lost, interceptions, clearances, recoveries, blocks, fouls — expressed as distance from their own goal. 0 is their own goal line, 100 is Seoul's. Sample size runs 103–185 actions per match.

Does the measurement reproduce?

I split each match's defensive actions into odd- and even-numbered events and computed block height twice. If the two halves of the same match disagree, the number cannot be trusted.

CheckValueReading
Odd/even split-half correlation+0.868Spearman-Brown corrected 0.930
Correlation with PPDA−0.874An independent metric agrees
Correlation with share of defending in own third−0.969Same
Between-match SD ÷ within-match SE4.92 ÷ 1.94Signal is 2.5× the noise
Intraclass correlation0.844Match-level classification holds

Splitting by first and second half instead gives only +0.445. That is not a flaw in the measurement, it is an observation — some sides change their block at the interval. Section 4 returns to it.

Where should the cut go?

My first cut was near-terciles: low below 37, high at 43 or above. Then I resampled each match's defensive actions 1,000 times to see whether the label survived. Nine of 25 matches did not. A match near a boundary flips between mid and low on a slightly different draw of the same events.

BoundaryMean label agreementUnstable (under 70%)
Low < 37 / High ≥ 4377.5%9 matches
Low < 36 / High ≥ 4485.8%3 matches
Low < 35 / High ≥ 4591.2%0 matches
Low < 34 / High ≥ 4692.6%1 match

I took low below 35, high at 45 or above. It widens the middle band to 18 matches, but a wide honest middle beats a tidy three-way split whose labels do not hold.

253035404550Block heighttrend −0.27 per round · r = −0.390High block, 45+Low block, under 35R1R5R10R15R20R25IncheonUlsanJejuPohangGwangjuAnyangJeonbukDaejeonBucheonGangwonGimcheonAnyangJejuGwangjuDaejeonIncheonGangwonBucheonPohangUlsanJeonbukGimcheonDaejeonAnyangBucheonWDLVertical bars = bootstrap 95% CI
Figure 1 · Opponent block height across the season. Each point is one match: the average position of the opponent's defensive actions, expressed as distance from their own goal. Higher means they defended further up the pitch. Vertical bars are 95% confidence intervals from 1,200 bootstrap resamples of that match's defensive actions. Hover a point for match details.

The resulting classification:

TypeMatches
High (45+)R10 Gangwon 49.5 · R02 Ulsan 46.9
Mid (35–45)R21 Jeonbuk 43.7 · R09 Bucheon 43.4 · R15 Daejeon 43.0 · R01 Incheon 41.6 · R04 Pohang 41.5 · R05 Gwangju 41.3 · R24 Anyang 40.4 · R16 Incheon 40.0 · R22 Gimcheon 39.3 · R08 Daejeon 38.9 · R11 Gimcheon 38.8 · R06 Anyang 38.8 · R03 Jeju 37.7 · R17 Gangwon 37.5 · R12 Anyang 37.5 · R07 Jeonbuk 37.4 · R18 Bucheon 37.1 · R23 Daejeon 36.8
Low (under 35)R14 Gwangju 33.6 · R25 Bucheon 32.4 · R19 Pohang 32.3 · R20 Ulsan 28.8 · R13 Jeju 28.0

All five low-block matches fall in round 13 or later. That is the rest of this piece.

3The league changed direction

Eight dropped, three raised

First meeting → last meeting, opponent block height3035404550Ulsan2 games−18.0Gangwon2 games−12.0Bucheon3 games−11.0Jeju2 games−9.7Pohang2 games−9.1Gwangju2 games−7.6Daejeon3 games−2.1Incheon2 games−1.6Gimcheon2 games+0.4Anyang3 games+1.7Jeonbuk2 games+6.3○ first meeting ● last meeting8 teams dropped, 3 raised · mean −5.7 · exact sign test p = 0.012
Figure 2 · The same team, meeting Seoul again. The hollow circle is the season's first meeting, the filled circle the last, and horizontal position is that match's block height. Across 17 repeat pairings the within-team correlation is r = −0.280, so a team cannot be reduced to a single type. What survives is direction — the 8 teams that dropped moved on average −8.9, three times the +2.8 of the 3 that raised.

The eight teams that dropped moved −8.9 on average; the three that raised moved +2.8. The split is not in direction alone but in magnitude. Enumerating all 2,048 sign combinations of the 11 differences, 24 give a mean at or below the observed −5.70 — p = 0.012.

Plotted against round number the same thing appears. Round ↔ block height r = −0.390; round ↔ PPDA r = +0.339. As the season went on, opponents sat deeper and pressed less.

Could something else explain it?

In Part 1, match status destroyed the correlation between crosses and points. The same trap had to be checked here.

CandidateTestResult
Match status
Did opponents step up because Seoul led?
Recomputed on 0-0 passages only
6 matches with under 30 level-state actions excluded, n=19
Round ↔ block r = −0.312
Round ↔ PPDA r = +0.238
Direction holds
Possession
Did Seoul simply have the ball more later?
Pass share by half of season 56.9% → 56.6%
No change
Home / away
Were away games back-loaded?
Home matches 6 of 13 · 6 of 12
Balanced
Causation is outside this data. What opponents were reacting to — Seoul's league position, goals conceded in the earlier meeting, the threat created from zone 17 — is not something an event feed can answer. What remains is direction, magnitude and timing.

4The same thing happens inside a match

Season-long learning and 90-minute learning point the same way

Opponent block height — time band × match statusAll 25 matches pooled · sample size in bracketsLevelSeoul aheadSeoul behind0-15 min39.8(523)46.8(52)30.4(14)16-30 min38.1(395)43.6(106)30.2(60)31-45 min38.0(300)43.4(151)30.9(98)46-60 min36.9(339)42.2(342)29.3(109)61-75 min38.4(145)41.5(289)34.6(89)76-90+ min35.6(322)42.7(459)33.7(160)Darker = the opponent defended further from their own goal.
Figure 3 · Two directions of the same drop. Read down a column and the block falls with time even inside a single match state (level: 39.8 → 35.6). Read across a row and the opponent steps up when Seoul lead and drops when Seoul trail. The second axis is a reminder — block height is a tactical choice and a function of the scoreboard at once.

This grid reads two ways.

Read across and you get the scoreboard. When Seoul lead, opponents defend at 41–47; when Seoul trail, they drop to 29–35. Block height is a tactical preference and a function of the score at the same time. This is also why an earlier hypothesis — that Seoul are vulnerable to sides who defend deep and counter — did not survive: opponents did not sit deep and beat Seoul, they stepped up because Seoul were ahead.

Read down and you get time. Even restricting to level passages, the block falls from 39.8 in the opening 15 minutes to 35.6 after the 76th. Seoul are not ahead and the opponent is not chasing, yet the line keeps retreating. That is why the first-half/second-half split-half correlation in section 2 came out at only +0.445.

What took 25 matches to happen across the season also happens inside 90 minutes. Opponents try to meet Seoul high, pay for it, and drop.

5What happened to Seoul

Measured on Part 1's axis

Part 1 concluded that Seoul's goals come not from how often they get the ball into the central cell in front of goal (zone 17) but from how good each of those deliveries is. What that axis did when the league dropped its block is the substantive question here.

One term to settle first — “delivery” and “xG per delivery”.

A delivery is one ball played into the central cell in front of goal (zone 17). Most are crosses, but not all — of the 604 across these 25 matches, 475 (79%) carry a cross code and the remaining 129 are passes of 8m or more played from outside the box into it. A cutback pulled back along the byline and a through-ball from the half-space both count as one delivery.

xG per delivery is not the xG of the shot that delivery produced. It is the total xG of every shot taken from zone 17 in that period, divided by the number of deliveries. So it measures something different from cross completion, or from the share of crosses that become shots — it is closer to the expected goal a team earns, on average, each time it puts the ball into that place. A shot off the second delivery, or off a clearance won back and played in again, counts in the numerator just the same. This is the number Part 1 meant when it said the answer lay not in how many deliveries but in how good each one is.
Rounds 1-13 → Rounds 14-25Arrow colour marks whether the change favours Seoul, not its directionOpponentblock height40.137.1−7%Opponent PPDA3.995.32+33%xG per deliveryinto zone 170.05870.0414−30%xG concededper game1.360.79−42%Pointsper game2.002.08+4%Goals 24 → 20 · conceded 11 → 8
Figure 5 · The axis came down, the points did not. As opponents dropped their block and eased their press, Seoul's xG per delivery into zone 17 fell −30%. For the same reason opponents attacked less, so xG conceded per game fell −42% — and points per game went up, from 2.00 to 2.08.

xG per delivery went from 0.0587 to 0.0414, −30%. The number of deliveries did not fall — it rose, from 22.5 to 25.9 per match. Put on Part 1's scatter, the shape of it is immediate.

10203040500.000.050.100.15Deliveries into the central cell in front of goal, per matchxG per deliveryR1-13 meanR14-25 mean↖ fewer deliveries, more xG eachmore deliveries, less xG each ↘WDLGrey = rounds 1-13 · blue = rounds 14-25
Figure 7 · Back on Part 1's scatter. Part 1 showed the wins clustering in the top left — fewer deliveries, more xG from each. Split the season in half and the centre of mass moves down and to the right: deliveries per match rose from 22.5 to 25.9 while xG per delivery fell from 0.0587 to 0.0414. Deliveries up, return on each one down.

Part 1 showed the wins clustering in the top left: fewer deliveries, more xG from each. Second-half-of-season Seoul moved down and to the right — deliveries up, return on each one down.

Where the xG went

Every shot was traced back through its possession to the moment the ball was won, then sorted into three phases: won in the opponent's half and finished within 15 seconds (counter), won in the opponent's half but built slowly (transition), and built from Seoul's own half (settled).

Seoul's xG by build-up phase — first half of season vs second% under each bar = share of that period's total xGCounterwon high, shot within 15s3.8819%R1~135.2333%R14~25+35%Transitionwon high, built slowly7.3537%R1~133.9425%R14~25−46%Settledbuilt from own half8.8144%R1~136.7642%R14~25−23%
Figure 4 · Where the xG went. Once opponents sat deeper, the phase in which Seoul win the ball high and build from there shrank hardest (transition −46%). Settled possession from their own half fell −23%. Only counters rose (+35%) — with fewer chances to win the ball high, the ones that came were taken faster.

The largest loss is not the counter but the transition: −46%. Once opponents settle deep in their own half, the chance to win the ball high disappears — there is no one there to win it from. Settled possession fell −23% too. Only counters rose (+35%), and that reads less like “the counter improved” than like the counter being what was left.

And yet the points went up

The same cause ran in the other direction. A side sitting deep also attacks less. xG conceded per game fell from 1.36 to 0.79, −42%, and goals against from 11 to 8. Four fewer goals scored were offset by three fewer conceded.

As opponents stepped back, the return on each Seoul delivery fell — and for the same reason, so did what Seoul gave up at the other end. The two second-half changes are not separate events but two sides of one cause.

6What belongs in a scouting report

How far this classification can be pushed

One more trap sits here. Tie the labels straight to results and a very convincing number appears.

Labelled onHighMidLow
Whole match → points per game3.00 (2)2.20 (20)0.33 (3)
0-0 passages only → points per game1.50 (2)2.00 (13)2.50 (4)

Read the top row and the headline is “Seoul take 0.33 points per game against a low block”. It is wrong. Two of those three matches (R13 Jeju, R20 Ulsan) are games where Seoul conceded first and the opponent then dropped. Relabel using only the 0-0 passages and the order inverts.

So this classification has exactly one use: recording how an opponent set up. It cannot be used to explain why a match was won. Block height is both cause and consequence, and which one it is in a given match is invisible without the scoreboard beside it.

Three things that do survive

One. Opposition profiles have to be versioned by round. Not “this is how they set up” but “this is how they set up last time, and this is what happened”. In a league where the within-team correlation is negative, a profile written in March is unusable in August.

Two. For Seoul, a low block is a cost, not a threat. Labelled on 0-0 passages, low-block matches return the most points. What changes is the way the points arrive — xG per delivery falls, the transition phase disappears, and goals conceded fall with it. The accurate line is not “Seoul cannot break down a deep block” but “against a deep block, Seoul end up playing 1-0 matches”.

Three. The next thing to measure sits before the delivery. Part 1 ended unable to say what determines the quality of a delivery. This piece shows that quality moving −30% with the opponent's block height. What is left is the variance within a given block height, and that will live in the three seconds before the ball is played — the gaps between defenders, the body orientation of the passer, the timing of the far-post run. None of those moments exist in an event feed. Writing the next part needs tracking data.


Appendix · Data and definitions

Source

Definitions

Validation

Limitations

What carries over from Part 1

“Everyone gets the ball to the same place” showed that Seoul's goals come from the quality of their zone-17 deliveries, and ended without being able to say what determines that quality. This piece identifies one variable moving it from the outside: the opponent's block height. Both pieces use the same event feed, the same coordinate normalisation and the same own-goal handling.