K리그1 2026 · FC서울 25경기 · 상대 11개 팀

리그가 서울을 학습한 25경기

상대를 하이·미들·로우 블록으로 분류하려다 실패했다. 같은 팀이 서울을 두 번째로 만났을 때 같은 방식으로 나오지 않았기 때문이다. 그 실패를 따라가니 다른 것이 나왔다 — 11개 팀 중 8팀이 재대결에서 블록을 내렸고, 서울이 골문 앞 중앙에 공을 한 번 보낼 때 얻는 기대득점은 시즌 후반에 3분의 1이 줄었다. 그런데 승점은 오르는 쪽으로 유지됐다.

한혁진2026년 9월데이터: K리그 데이터 포털 이벤트 34,518건 1편 「골문 앞 중앙까지는 똑같이 간다」의 속편

먼저 결론부터

  1. 팀은 유형이 아니다. 재대결 17쌍의 블록 높이 팀 내 상관은 r = −0.280이다. 울산은 3월에 리그에서 두 번째로 높은 블록을 섰고, 8월에 리그 최저에 가까운 블록을 섰다.
  2. 경기는 유형이다. 같은 경기 안에서 측정을 반으로 갈라 재보면 신뢰도 0.930, PPDA와의 상관 −0.874, 급내상관 0.844. 라운드 단위 분류는 성립한다.
  3. 리그가 방향을 바꿨다. 11팀 중 8팀이 재대결에서 블록을 낮췄다. 평균 −5.7, 부호 정확검정 p = 0.012. match status·점유율·홈원정을 통제해도 남는다.
  4. 1편의 축도 같은 폭으로 움직였다. zone 17 배달당 xG — 골문 앞 중앙에 공을 한 번 보낼 때 얻는 기대득점 — 가 0.0587에서 0.0414로 −30%. 줄어든 자리는 특정된다: 상대 진영에서 볼을 빼앗아 전개하는 국면이 −46%.
  5. 그런데 승점은 유지됐다. 상대가 공격을 덜 하면서 경기당 피xG가 −42% 줄었다. 경기당 승점 2.00 → 2.08.

1팀에 딱지를 붙일 수 없었다

스카우팅용 분류를 만들려다 먼저 무너진 것

처음 하려던 일은 단순했다. 서울을 상대한 11개 팀을 하이 블록·미들 블록·로우 블록으로 나누고, 어느 유형이 서울에게 통했는지 보는 것. 다음 시즌 상대 분석에 그대로 쓸 수 있는 표를 만들 생각이었다.

그 표는 만들어지지 않았다. 울산 때문이다.

같은 팀, 다른 응수 — 울산의 두 경기점 하나가 울산의 수비 액션 한 번 · 서울 공격 방향 →46.9R02 · 홈 1-0 승하이 블록 · PPDA 2.61 · 수비 액션 176개28.8R20 · 원정 0-3 패로우 블록 · PPDA 10.65 · 수비 액션 156개색 막대 = 평균 수비 위치
그림 6 · 왜 팀에 딱지를 붙일 수 없는가. 울산은 3월에 리그에서 두 번째로 높은 블록(46.9)을 섰고, 8월에 리그 최저에 가까운 블록(28.8)을 섰다. 두 경기 사이 PPDA는 2.61에서 10.65로 네 배 늘었다. “울산은 로우 블록 팀”이라고 적은 스카우팅 리포트는 두 경기 중 한 경기에서 반드시 틀린다.

같은 팀이고, 같은 감독이고, 다섯 달 차이다. 3월의 울산은 서울의 빌드업을 하프라인 위에서 잡으러 왔다. 8월의 울산은 자기 페널티 박스 앞에 열 명을 세워두고 기다렸다. 두 경기 사이에 PPDA — 서울이 상대 진영에서 패스 몇 번을 할 때마다 상대가 한 번 수비 행동을 하는가 — 는 2.61에서 10.65로 네 배 늘었다.

울산만의 일이 아니었다. 11개 팀 전체를 놓고 재대결 17쌍의 블록 높이 상관을 재봤다.

r = −0.280. 팀이 유형이라면 이 값은 양수여야 한다.

음수가 나왔다는 건, 첫 대결에서 높이 섰던 팀일수록 다음 대결에서 낮게 섰다는 뜻이다. “울산은 로우 블록 팀”이라고 적은 리포트는 두 경기 중 한 경기에서 반드시 틀린다.

그래서 분류 단위를 바꿨다. 팀이 아니라 경기다. “이 팀은 어떤 팀인가”가 아니라 “이 경기에서 상대는 어떻게 나왔는가”를 기록하는 쪽으로. 다만 그러려면 경기 단위 측정이 믿을 만한지부터 확인해야 했다.

2경기는 분류할 수 있는가

결론을 쓰기 전에 자를 먼저 검증했다

블록 높이는 상대가 수비 행동(태클·인터셉트·클리어링·볼 획득·차단·파울)을 한 평균 위치를 자기 골문으로부터의 거리로 환산한 값이다. 0이면 자기 골라인, 100이면 상대 골라인이다. 경기당 표본은 103~185개다.

측정이 재현되는가

각 경기의 수비 행동을 홀수 번째와 짝수 번째로 반씩 갈라, 두 절반으로 각각 블록 높이를 계산했다. 같은 경기의 두 절반이 같은 값을 내야 측정을 믿을 수 있다.

검증값해석
홀·짝 반분 상관+0.868스피어만-브라운 보정 0.930
PPDA와의 상관−0.874독립 지표와 같은 말을 한다
자기 진영 1/3 수비 비율과의 상관−0.969동일
경기 간 표준편차 ÷ 경기 내 표준오차4.92 ÷ 1.94신호가 잡음의 2.5배
급내상관 ICC0.844경기 단위 분류 가능

전·후반으로 갈랐을 때의 상관은 +0.445로 낮다. 이건 측정의 결함이 아니라 관측이다 — 하프타임에 블록이 바뀌는 팀이 있다는 뜻이고, 4장에서 다시 다룬다.

어디서 잘라야 하는가

처음에는 3분위에 가깝게 로우 < 37, 하이 ≥ 43으로 잘랐다. 그런데 각 경기의 수비 행동을 1,000회 재표집해 라벨이 유지되는지 보니, 25경기 중 9경기가 흔들렸다. 경계에 걸린 경기는 표본을 조금만 바꿔도 미들이 됐다가 로우가 됐다가 한다.

경계평균 라벨 일치율불안정(70% 미만) 경기
로우 < 37 / 하이 ≥ 4377.5%9경기
로우 < 36 / 하이 ≥ 4485.8%3경기
로우 < 35 / 하이 ≥ 4591.2%0경기
로우 < 34 / 하이 ≥ 4692.6%1경기

로우 < 35, 하이 ≥ 45를 채택한다. 미들이 18경기로 넓어지지만, 흔들리는 라벨을 예쁘게 3등분하는 것보다 낫다고 판단했다.

253035404550블록 높이추세 −0.27/라운드 · r = −0.390하이 블록 45 이상로우 블록 35 미만R1R5R10R15R20R25울산강원제주광주포항울산부천승무패세로선 = 부트스트랩 95% 신뢰구간
그림 1 · 상대 블록 높이의 시즌 추이. 각 점은 한 경기에서 상대가 수비 액션을 한 평균 위치를 자기 골문으로부터의 거리로 환산한 값이다. 높을수록 앞에서 막았다는 뜻이다. 세로선은 그 경기의 수비 액션을 1,200회 재표집해 얻은 95% 신뢰구간이다. 점에 커서를 올리면 경기 정보가 나온다.

이렇게 나온 분류는 다음과 같다.

유형경기
하이 (45 이상)R10 강원 49.5 · R02 울산 46.9
미들 (35~45)R21 전북 43.7 · R09 부천 43.4 · R15 대전 43.0 · R01 인천 41.6 · R04 포항 41.5 · R05 광주 41.3 · R24 안양 40.4 · R16 인천 40.0 · R22 김천 39.3 · R08 대전 38.9 · R11 김천 38.8 · R06 안양 38.8 · R03 제주 37.7 · R17 강원 37.5 · R12 안양 37.5 · R07 전북 37.4 · R18 부천 37.1 · R23 대전 36.8
로우 (35 미만)R14 광주 33.6 · R25 부천 32.4 · R19 포항 32.3 · R20 울산 28.8 · R13 제주 28.0

로우 블록 다섯 경기가 모두 R13 이후에 몰려 있다. 그게 이 글의 나머지다.

3리그가 방향을 바꿨다

8팀이 내렸고 3팀이 올렸다

1차전 → 마지막 대결, 상대 블록 높이3035404550울산2경기−18.0강원2경기−12.0부천3경기−11.0제주2경기−9.7포항2경기−9.1광주2경기−7.6대전3경기−2.1인천2경기−1.6김천2경기+0.4안양3경기+1.7전북2경기+6.3○ 첫 대결 ● 마지막 대결8팀이 낮추고 3팀이 올렸다 · 평균 −5.7 · 부호 정확검정 p = 0.012
그림 2 · 같은 팀이 서울을 다시 만났을 때. 빈 원이 시즌 첫 대결, 채운 원이 마지막 대결이고 가로 위치가 그 경기의 블록 높이다. 재대결 17쌍의 팀 내 상관은 r = −0.280으로, 한 팀을 하나의 유형으로 묶는 것은 성립하지 않는다. 대신 방향이 남는다 — 낮춘 8팀의 평균 폭(−8.9)이 올린 3팀의 폭(+2.8)보다 세 배 크다.

블록을 낮춘 8팀의 평균 폭은 −8.9, 올린 3팀의 평균 폭은 +2.8이다. 방향이 갈린 게 아니라 크기가 갈렸다. 11개 값의 부호 조합 2,048가지를 전부 계산했을 때 관측 평균(−5.70) 이하가 나오는 것은 24가지 — p = 0.012다.

라운드를 축으로 놓고 봐도 같다. 라운드 ↔ 블록 높이 r = −0.390, 라운드 ↔ PPDA r = +0.339. 시즌이 진행될수록 상대는 낮게 서고 덜 압박했다.

다른 설명이 가능한가

1편에서 크로스와 승점의 상관을 무너뜨린 것이 match status였다. 같은 함정을 여기서도 확인해야 했다.

교란 후보확인결과
match status
서울이 앞서서 상대가 올라온 것 아닌가
0-0 구간만으로 재계산
동점 표본 30개 미만 6경기 제외, n=19
라운드↔블록 r = −0.312
라운드↔PPDA r = +0.238
방향 유지
점유율
서울이 후반기에 볼을 더 가진 것 아닌가
전·후반기 패스 점유율 56.9% → 56.6%
변화 없음
홈·원정
후반기에 원정이 몰린 것 아닌가
홈경기 수 전반기 6/13 · 후반기 6/12
균형
인과는 데이터 밖이다. 상대가 무엇을 보고 조정했는지 — 서울의 순위인지, 앞선 대결의 실점 장면인지, zone 17 배달이 만든 위협인지 — 는 이벤트 데이터가 답할 수 없다. 남는 것은 방향과 크기와 시점뿐이다.

4경기 안에서도 같은 일이 일어난다

시즌 단위 학습과 90분 단위 학습이 같은 방향을 가리킨다

상대 블록 높이 — 시간대 × match status전 경기 통합 · 괄호는 수비 액션 표본 수동점서울 리드서울 열세0-15분39.8(523)46.8(52)30.4(14)16-30분38.1(395)43.6(106)30.2(60)31-45분38.0(300)43.4(151)30.9(98)46-60분36.9(339)42.2(342)29.3(109)61-75분38.4(145)41.5(289)34.6(89)76-90+분35.6(322)42.7(459)33.7(160)진할수록 상대가 앞에서 막았다는 뜻이다.
그림 3 · 두 방향의 하락. 세로로 읽으면 같은 상태 안에서도 시간이 갈수록 블록이 내려간다 (동점 39.8 → 35.6). 가로로 읽으면 서울이 앞설 때 상대가 올라오고, 뒤질 때 내려간다. 두 번째 축은 앞선 검증에서 이미 확인한 것이다 — 블록 높이는 전술 성향이자 동시에 스코어보드의 함수다.

이 표는 두 방향으로 읽힌다.

가로로 읽으면 스코어보드다. 서울이 앞설 때 상대는 41~47에서 막고, 뒤질 때 29~35까지 내려간다. 블록 높이는 전술 성향인 동시에 점수의 함수다. 앞선 검증에서 “서울은 선수비 후역습에 취약하다”는 가설이 무너진 것도 이 축 때문이었다 — 상대가 내려앉아서 서울이 진 게 아니라, 서울이 앞서니까 상대가 올라왔다.

세로로 읽으면 시간이다. 동점 구간만 따로 봐도 0-15분 39.8에서 76분 이후 35.6까지 내려간다. 서울이 앞선 것도 아니고 상대가 지고 있는 것도 아닌데, 시간이 갈수록 물러선다. 2장에서 전·후반 반분 상관이 +0.445로 낮게 나온 이유가 여기 있다.

시즌 25경기에 걸쳐 일어난 일이 90분 안에서도 일어난다. 상대는 서울을 앞에서 막아보고, 대가를 치르고, 내려앉는다.

5그래서 서울에게 무슨 일이 있었나

1편의 축으로 다시 재보면

1편의 결론은 서울의 득점이 골문 앞 중앙(zone 17)에 공을 넣는 횟수가 아니라 한 번 넣을 때의 질에서 나온다는 것이었다. 리그가 블록을 내렸을 때 그 축이 어떻게 움직였는지가 이 글의 실질적인 질문이다.

용어 하나만 정리하고 간다 — ‘배달’과 ‘배달당 xG’.

배달은 골문 앞 중앙 칸(zone 17)에 도달한 투입 한 번이다. 크로스가 대부분이지만 크로스만은 아니다 — 25경기 합계 604회 중 크로스 코드가 475회(79%)이고, 나머지 129회는 박스 밖에서 박스 안으로 8m 이상 찔러 넣은 패스다. 바이라인에서 낮게 당긴 컷백도, 하프스페이스에서 골문 앞으로 보낸 스루패스도 한 번의 배달로 센다.

배달당 xG는 그 배달이 직접 만들어낸 슈팅의 xG가 아니다. 그 시기 zone 17에서 나온 모든 슈팅의 xG 총합을 배달 횟수로 나눈 값이다. 그래서 ‘크로스 성공률’이나 ‘크로스가 슛으로 이어진 비율’과는 다른 것을 잰다 — 그 자리에 공을 한 번 보낼 때 팀이 평균적으로 얻어내는 기대득점에 가깝다. 첫 배달이 걷어내진 뒤 주워서 다시 넣어 나온 슛도, 두 번째 배달에서 나온 슛도 모두 분자에 들어간다. 1편이 “배달 횟수가 아니라 배달의 질”이라고 말한 것이 이 값이다.
전반기 R1~13 → 후반기 R14~25화살표 색은 방향이 아니라 서울에게 유리한지 여부다상대블록 높이40.137.1−7%상대 PPDA3.995.32+33%zone 17배달당 xG0.05870.0414−30%경기당 피xG1.360.79−42%경기당 승점2.002.08+4%득점 24 → 20 · 실점 11 → 8
그림 5 · 축은 내려갔고, 승점은 내려가지 않았다. 상대가 블록을 내리고 압박을 풀자 서울의 zone 17 배달당 xG는 −30%로 떨어졌다. 그런데 같은 이유로 상대가 공격을 덜 하면서 경기당 피xG도 −42% 줄었고, 결과적으로 경기당 승점은 2.00에서 2.08로 오히려 올랐다.

배달당 xG는 0.0587에서 0.0414로 −30%다. 그런데 배달 횟수 자체는 줄지 않았다 — 경기당 22.5회에서 25.9회로 오히려 늘었다. 1편의 산점도 위에 올려놓으면 무슨 일이 있었는지가 한눈에 보인다.

10203040500.000.050.100.15한 경기에서 골문 앞 중앙에 공을 넣은 횟수배달 한 번당 xG전반기 평균후반기 평균↖ 적게 넣고 많이 남긴 경기많이 넣고 적게 남긴 경기 ↘승무패회색 = 전반기 · 파랑 = 후반기
그림 7 · 1편의 산점도로 되돌아오면. 1편은 이 그림의 왼쪽 위(적게 넣고 많이 남긴 경기)에 승리가 모인다는 것을 보여줬다. 시즌을 반으로 갈라 색을 입히면 무게중심이 오른쪽 아래로 이동한다 — 경기당 배달은 22.5회에서 25.9회로 늘었는데 배달 한 번당 xG는 0.0587에서 0.0414로 줄었다. 배달은 늘었고, 한 번당 남는 값은 줄었다.

1편은 이 그림의 왼쪽 위에 승리가 모인다는 것을 보여줬다. 적게 넣고 많이 남긴 경기들이다. 시즌 후반의 서울은 오른쪽 아래로 이동했다. 배달은 늘었고, 한 번당 남는 값은 줄었다.

xG가 사라진 자리

모든 슈팅을 볼 획득 지점까지 역추적해 세 국면으로 나눴다. 상대 진영에서 뺏어 15초 안에 끝낸 것(역습), 상대 진영에서 뺏었지만 천천히 간 것(전환), 자기 진영부터 쌓아 올린 것(지공)이다.

서울이 만든 xG — 국면별 · 전반기 vs 후반기막대 아래 %는 그 시기 전체 xG에서 차지하는 비중역습상대 진영에서 뺏어 15초 안에3.8819%R1~135.2333%R14~25+35%전환상대 진영에서 뺏어 천천히7.3537%R1~133.9425%R14~25−46%지공자기 진영부터 쌓아서8.8144%R1~136.7642%R14~25−23%
그림 4 · 사라진 xG의 자리. 상대가 내려앉자 서울이 상대 진영에서 볼을 빼앗아 전개하는 국면 자체가 줄었다 (전환 −46%). 자기 진영부터 쌓는 지공도 −23%. 오직 역습만 늘었다(+35%) — 내려앉은 상대에게서 볼을 뺏을 기회가 줄어든 대신, 어쩌다 뺏으면 더 빨리 나갔다는 뜻이다.

가장 크게 빠진 것은 역습이 아니라 전환이다. −46%. 상대가 자기 진영 깊은 곳에 자리를 잡으면, 서울이 상대 진영에서 볼을 빼앗을 기회 자체가 사라진다. 빼앗을 상대가 거기 없기 때문이다. 지공도 −23%로 줄었다. 늘어난 것은 역습 하나뿐인데(+35%), 이건 “역습이 좋아졌다”기보다 남은 것이 역습밖에 없었다는 쪽에 가깝다.

그런데 승점은 오히려 올랐다

같은 이유가 반대쪽에서도 작동했다. 내려앉은 상대는 공격도 덜 한다. 경기당 피xG가 1.36에서 0.79로 −42% 줄었고, 실점은 11에서 8로 내려갔다. 줄어든 득점 4골을 줄어든 실점 3골이 상쇄했다.

상대가 물러선 만큼 서울의 배달 한 번이 만드는 값이 줄었고, 같은 이유로 서울이 내주는 값도 줄었다. 후반기의 두 변화는 별개가 아니라 한 원인의 앞뒤다.

6스카우팅 리포트에 무엇을 쓸 것인가

이 분류를 어디까지 쓸 수 있는지

여기서 한 번 더 조심해야 한다. 라벨과 성적을 바로 엮으면 아주 그럴듯한 숫자가 나온다.

라벨 기준하이미들로우
경기 전체로 라벨 → 경기당 승점3.00 (2경기)2.20 (20경기)0.33 (3경기)
0-0 구간으로만 라벨 → 경기당 승점1.50 (2경기)2.00 (13경기)2.50 (4경기)

위 줄만 보면 “서울은 로우 블록에 경기당 0.33점”이라는 헤드라인이 나온다. 틀렸다. 그 세 경기 중 둘(R13 제주·R20 울산)은 서울이 먼저 실점한 뒤에 상대가 내려앉은 경기다. 0-0 구간만으로 라벨을 다시 매기면 순서가 뒤집힌다.

그래서 이 분류의 용도는 하나다. 상대가 어떻게 나왔는가를 기록하는 것. 그 경기를 왜 이겼는가의 설명으로 쓰면 안 된다. 블록 높이는 원인이자 결과이고, 어느 쪽인지는 스코어보드를 함께 보지 않으면 알 수 없다.

그럼에도 남는 세 가지

하나. 상대 분석에서 팀 프로필은 라운드 단위로 갱신해야 한다. “이 팀은 이렇게 나온다”가 아니라 “이 팀은 지난번에 이렇게 나왔고, 그 결과가 이랬다”로 적어야 한다. 재대결 상관이 음수인 리그에서 시즌 초의 프로필은 8월에 쓸 수 없다.

둘. 서울에게 로우 블록은 위협이 아니라 비용이다. 0-0 구간 라벨로 보면 로우 블록 상대 승점이 가장 높다. 다만 이기는 방식이 바뀐다 — 배달당 xG가 떨어지고, 전환 국면이 사라지고, 대신 실점이 줄어든다. “내려앉은 상대를 못 뚫는다”가 아니라 “내려앉은 상대와는 1-0 경기를 하게 된다”가 정확하다.

셋. 다음에 재야 할 것은 배달 이전이다. 1편은 배달의 질이 무엇으로 결정되는지 이벤트 데이터로 설명하지 못한 채 끝났다. 이 글은 그 질이 상대의 블록 높이에 따라 −30% 움직인다는 것까지는 보여준다. 남은 것은 같은 블록 높이 안에서의 편차다. 그건 배달이 나가기 직전 3초 — 상대 수비 사이의 간격, 서울 선수의 몸 방향, 뒷문 선수의 출발 시점 — 에 있을 텐데, 이벤트 데이터에는 그 순간이 기록되지 않는다. 트래킹 데이터가 있어야 다음 편을 쓸 수 있다.


부록 · 데이터와 정의

출처

정의

검증

한계

1편에서 이어지는 것

1편 「골문 앞 중앙까지는 똑같이 간다」는 서울의 득점이 zone 17 배달의 질에서 나온다는 것을 보이고, 그 질이 무엇으로 결정되는지는 설명하지 못한 채 끝났다. 이 글은 그 질을 바깥에서 움직이는 변수 하나 — 상대의 블록 높이 — 를 특정한다. 두 편 모두 같은 이벤트 데이터, 같은 좌표 정규화, 같은 자책골 처리를 쓴다.