리그가 서울을 학습한 25경기
상대를 하이·미들·로우 블록으로 분류하려다 실패했다. 같은 팀이 서울을 두 번째로 만났을 때 같은 방식으로 나오지 않았기 때문이다. 그 실패를 따라가니 다른 것이 나왔다 — 11개 팀 중 8팀이 재대결에서 블록을 내렸고, 서울이 골문 앞 중앙에 공을 한 번 보낼 때 얻는 기대득점은 시즌 후반에 3분의 1이 줄었다. 그런데 승점은 오르는 쪽으로 유지됐다.
먼저 결론부터
- 팀은 유형이 아니다. 재대결 17쌍의 블록 높이 팀 내 상관은 r = −0.280이다. 울산은 3월에 리그에서 두 번째로 높은 블록을 섰고, 8월에 리그 최저에 가까운 블록을 섰다.
- 경기는 유형이다. 같은 경기 안에서 측정을 반으로 갈라 재보면 신뢰도 0.930, PPDA와의 상관 −0.874, 급내상관 0.844. 라운드 단위 분류는 성립한다.
- 리그가 방향을 바꿨다. 11팀 중 8팀이 재대결에서 블록을 낮췄다. 평균 −5.7, 부호 정확검정 p = 0.012. match status·점유율·홈원정을 통제해도 남는다.
- 1편의 축도 같은 폭으로 움직였다. zone 17 배달당 xG — 골문 앞 중앙에 공을 한 번 보낼 때 얻는 기대득점 — 가 0.0587에서 0.0414로 −30%. 줄어든 자리는 특정된다: 상대 진영에서 볼을 빼앗아 전개하는 국면이 −46%.
- 그런데 승점은 유지됐다. 상대가 공격을 덜 하면서 경기당 피xG가 −42% 줄었다. 경기당 승점 2.00 → 2.08.
1팀에 딱지를 붙일 수 없었다
스카우팅용 분류를 만들려다 먼저 무너진 것
처음 하려던 일은 단순했다. 서울을 상대한 11개 팀을 하이 블록·미들 블록·로우 블록으로 나누고, 어느 유형이 서울에게 통했는지 보는 것. 다음 시즌 상대 분석에 그대로 쓸 수 있는 표를 만들 생각이었다.
그 표는 만들어지지 않았다. 울산 때문이다.
같은 팀이고, 같은 감독이고, 다섯 달 차이다. 3월의 울산은 서울의 빌드업을 하프라인 위에서 잡으러 왔다. 8월의 울산은 자기 페널티 박스 앞에 열 명을 세워두고 기다렸다. 두 경기 사이에 PPDA — 서울이 상대 진영에서 패스 몇 번을 할 때마다 상대가 한 번 수비 행동을 하는가 — 는 2.61에서 10.65로 네 배 늘었다.
울산만의 일이 아니었다. 11개 팀 전체를 놓고 재대결 17쌍의 블록 높이 상관을 재봤다.
음수가 나왔다는 건, 첫 대결에서 높이 섰던 팀일수록 다음 대결에서 낮게 섰다는 뜻이다. “울산은 로우 블록 팀”이라고 적은 리포트는 두 경기 중 한 경기에서 반드시 틀린다.
2경기는 분류할 수 있는가
결론을 쓰기 전에 자를 먼저 검증했다
블록 높이는 상대가 수비 행동(태클·인터셉트·클리어링·볼 획득·차단·파울)을 한 평균 위치를 자기 골문으로부터의 거리로 환산한 값이다. 0이면 자기 골라인, 100이면 상대 골라인이다. 경기당 표본은 103~185개다.
측정이 재현되는가
각 경기의 수비 행동을 홀수 번째와 짝수 번째로 반씩 갈라, 두 절반으로 각각 블록 높이를 계산했다. 같은 경기의 두 절반이 같은 값을 내야 측정을 믿을 수 있다.
| 검증 | 값 | 해석 |
|---|---|---|
| 홀·짝 반분 상관 | +0.868 | 스피어만-브라운 보정 0.930 |
| PPDA와의 상관 | −0.874 | 독립 지표와 같은 말을 한다 |
| 자기 진영 1/3 수비 비율과의 상관 | −0.969 | 동일 |
| 경기 간 표준편차 ÷ 경기 내 표준오차 | 4.92 ÷ 1.94 | 신호가 잡음의 2.5배 |
| 급내상관 ICC | 0.844 | 경기 단위 분류 가능 |
전·후반으로 갈랐을 때의 상관은 +0.445로 낮다. 이건 측정의 결함이 아니라 관측이다 — 하프타임에 블록이 바뀌는 팀이 있다는 뜻이고, 4장에서 다시 다룬다.
어디서 잘라야 하는가
처음에는 3분위에 가깝게 로우 < 37, 하이 ≥ 43으로 잘랐다. 그런데 각 경기의 수비 행동을 1,000회 재표집해 라벨이 유지되는지 보니, 25경기 중 9경기가 흔들렸다. 경계에 걸린 경기는 표본을 조금만 바꿔도 미들이 됐다가 로우가 됐다가 한다.
| 경계 | 평균 라벨 일치율 | 불안정(70% 미만) 경기 |
|---|---|---|
| 로우 < 37 / 하이 ≥ 43 | 77.5% | 9경기 |
| 로우 < 36 / 하이 ≥ 44 | 85.8% | 3경기 |
| 로우 < 35 / 하이 ≥ 45 | 91.2% | 0경기 |
| 로우 < 34 / 하이 ≥ 46 | 92.6% | 1경기 |
로우 < 35, 하이 ≥ 45를 채택한다. 미들이 18경기로 넓어지지만, 흔들리는 라벨을 예쁘게 3등분하는 것보다 낫다고 판단했다.
이렇게 나온 분류는 다음과 같다.
| 유형 | 경기 |
|---|---|
| 하이 (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팀이 올렸다
블록을 낮춘 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 균형 |
4경기 안에서도 같은 일이 일어난다
시즌 단위 학습과 90분 단위 학습이 같은 방향을 가리킨다
이 표는 두 방향으로 읽힌다.
가로로 읽으면 스코어보드다. 서울이 앞설 때 상대는 41~47에서 막고, 뒤질 때 29~35까지 내려간다. 블록 높이는 전술 성향인 동시에 점수의 함수다. 앞선 검증에서 “서울은 선수비 후역습에 취약하다”는 가설이 무너진 것도 이 축 때문이었다 — 상대가 내려앉아서 서울이 진 게 아니라, 서울이 앞서니까 상대가 올라왔다.
세로로 읽으면 시간이다. 동점 구간만 따로 봐도 0-15분 39.8에서 76분 이후 35.6까지 내려간다. 서울이 앞선 것도 아니고 상대가 지고 있는 것도 아닌데, 시간이 갈수록 물러선다. 2장에서 전·후반 반분 상관이 +0.445로 낮게 나온 이유가 여기 있다.
시즌 25경기에 걸쳐 일어난 일이 90분 안에서도 일어난다. 상대는 서울을 앞에서 막아보고, 대가를 치르고, 내려앉는다.
5그래서 서울에게 무슨 일이 있었나
1편의 축으로 다시 재보면
1편의 결론은 서울의 득점이 골문 앞 중앙(zone 17)에 공을 넣는 횟수가 아니라 한 번 넣을 때의 질에서 나온다는 것이었다. 리그가 블록을 내렸을 때 그 축이 어떻게 움직였는지가 이 글의 실질적인 질문이다.
배달은 골문 앞 중앙 칸(zone 17)에 도달한 투입 한 번이다. 크로스가 대부분이지만 크로스만은 아니다 — 25경기 합계 604회 중 크로스 코드가 475회(79%)이고, 나머지 129회는 박스 밖에서 박스 안으로 8m 이상 찔러 넣은 패스다. 바이라인에서 낮게 당긴 컷백도, 하프스페이스에서 골문 앞으로 보낸 스루패스도 한 번의 배달로 센다.
배달당 xG는 그 배달이 직접 만들어낸 슈팅의 xG가 아니다. 그 시기 zone 17에서 나온 모든 슈팅의 xG 총합을 배달 횟수로 나눈 값이다. 그래서 ‘크로스 성공률’이나 ‘크로스가 슛으로 이어진 비율’과는 다른 것을 잰다 — 그 자리에 공을 한 번 보낼 때 팀이 평균적으로 얻어내는 기대득점에 가깝다. 첫 배달이 걷어내진 뒤 주워서 다시 넣어 나온 슛도, 두 번째 배달에서 나온 슛도 모두 분자에 들어간다. 1편이 “배달 횟수가 아니라 배달의 질”이라고 말한 것이 이 값이다.
배달당 xG는 0.0587에서 0.0414로 −30%다. 그런데 배달 횟수 자체는 줄지 않았다 — 경기당 22.5회에서 25.9회로 오히려 늘었다. 1편의 산점도 위에 올려놓으면 무슨 일이 있었는지가 한눈에 보인다.
1편은 이 그림의 왼쪽 위에 승리가 모인다는 것을 보여줬다. 적게 넣고 많이 남긴 경기들이다. 시즌 후반의 서울은 오른쪽 아래로 이동했다. 배달은 늘었고, 한 번당 남는 값은 줄었다.
xG가 사라진 자리
모든 슈팅을 볼 획득 지점까지 역추적해 세 국면으로 나눴다. 상대 진영에서 뺏어 15초 안에 끝낸 것(역습), 상대 진영에서 뺏었지만 천천히 간 것(전환), 자기 진영부터 쌓아 올린 것(지공)이다.
가장 크게 빠진 것은 역습이 아니라 전환이다. −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초 — 상대 수비 사이의 간격, 서울 선수의 몸 방향, 뒷문 선수의 출발 시점 — 에 있을 텐데, 이벤트 데이터에는 그 순간이 기록되지 않는다. 트래킹 데이터가 있어야 다음 편을 쓸 수 있다.
부록 · 데이터와 정의
출처
- K리그 데이터 포털 CHALK BOARD 이벤트 피드. 2026시즌 FC서울 25경기, 양 팀 이벤트 34,518건.
- 좌표는 0~100 정규화 값이다. 공격 방향은 (라운드, 팀, 전후반)마다 슈팅 종료 X좌표로 판정했고, 상대 팀 경합 이벤트의 X좌표 합으로 검증했다(일치율 99.9).
- 모든 지표는 서울 공격 프레임(0 = 서울 골문, 100 = 상대 골문)으로 통일했다.
정의
- 블록 높이 — 상대 수비 행동(TKS 태클 성공 · TKU 태클 실패 · INT 인터셉트 · CLG 클리어링 · RCV 볼 획득 · CUT 차단 · FOC 파울)의 평균 위치를 상대 자기 골문으로부터의 거리로 환산한 값. 경합(공중·지상)은 소유권이 모호해 제외했다.
- PPDA — 서울이 상대 진영(블록 높이 40 이상 구역)에서 시도한 패스 수 ÷ 상대가 같은 구역에서 한 수비 행동 수. 낮을수록 강한 압박이다.
- zone 17 — 표준 18분할 격자의 골문 앞 중앙 칸. X ≥ 83.3, Y 33.3~66.7.
- 배달 · 배달당 xG — 1편과 동일한 정의를 썼다. 배달은 zone 17로 들어간 크로스, 또는 박스 밖에서 박스 안으로 향한 8m 이상 패스. 배달당 xG는 그 시기 zone 17 슈팅의 xG 총합 ÷ 배달 횟수. 25경기 합계 배달 604회, zone 17 슈팅 163회, xG 30.08.
- 국면 분류 — 모든 슈팅에서 소유 시퀀스를 볼 획득 시점까지 역추적했다. 소유 전환은 온볼 이벤트(패스·드리블·슈팅·볼 획득·태클 성공·인터셉트·경합 승)로만 판정하고, 수비 개입(클리어링·차단·블락·파울)은 소유권을 바꾸지 않는 것으로 처리했다. 역습 = 상대 진영(40 이상)에서 획득 & 15초 이내 & 패스 4개 이하. 전환 = 상대 진영 획득이지만 그보다 느림. 지공 = 자기 진영에서 시작.
- match status — 각 이벤트 시점의 득점 차. 자책골은 득점한 팀 쪽으로 옮겨 계산했다 (포털은 자책골을 넣은 선수의 소속 팀 기록으로 남긴다).
검증
- 블록 높이 반분 신뢰도 — 홀·짝 분할 r = +0.868, 스피어만-브라운 보정 0.930.
- 수렴 타당도 — PPDA r = −0.874, 자기 진영 1/3 수비 비율 r = −0.969, 서울 최종 3분의 1 패스 성공률 r = −0.349.
- 구분력 — 경기 간 표준편차 4.92, 경기 내 부트스트랩(1,200회) 표준오차 평균 1.94, ICC 0.844.
- 경계 안정성 — 각 경기 1,000회 재표집 시 라벨 유지율. 채택 경계(35/45)에서 평균 91.2%, 70% 미만 경기 0건.
- 재대결 변화 — 11개 팀 짝지은 차이의 부호 무작위화 정확검정(211 = 2,048개 조합 전수). 관측 평균 −5.70 이하 24개, p = 0.012.
한계
- 표본은 한 시즌이다. 25경기, 11개 팀, 재대결 17쌍. 부호 정확검정 p = 0.012는 11개 값에서 나온 값이고, 다음 시즌에 같은 방향이 반복되는지는 확인되지 않았다.
- 인과는 없다. 상대가 무엇을 근거로 조정했는지는 이벤트 데이터로 답할 수 없다. 이 글이 주장하는 것은 시점과 방향과 크기까지다.
- 0-0 구간 표본이 부족한 경기가 있다. R02·R04·R05·R13·R20·R24는 조기 득실로 동점 구간의 수비 행동이 30개 미만이라, match status를 통제한 분석에서 제외했다. 공교롭게 로우 블록 두 경기 (R13·R20)가 여기 포함되므로, 그 두 경기의 라벨은 경기 전체 기준으로만 유효하다.
- 세트피스 기록 방식이 R19부터 바뀐다. 포털이 코너킥 위치의 크로스를 오픈플레이 코드로 남기기 시작해, 전·후반기 세트피스 비교는 신뢰할 수 없다. 이 글은 세트피스 관련 비교를 일절 쓰지 않았다. 배달 집계에는 1편과 동일하게 전 구간에 같은 기준을 적용했다.
- 블록 높이는 위치만 잰다. 같은 평균 위치라도 4-4-2 미들 블록과 5-3-2 미들 블록은 다른 것이다. 대형과 간격은 이벤트 좌표로 복원되지 않는다.
1편에서 이어지는 것
1편 「골문 앞 중앙까지는 똑같이 간다」는 서울의 득점이 zone 17 배달의 질에서 나온다는 것을 보이고, 그 질이 무엇으로 결정되는지는 설명하지 못한 채 끝났다. 이 글은 그 질을 바깥에서 움직이는 변수 하나 — 상대의 블록 높이 — 를 특정한다. 두 편 모두 같은 이벤트 데이터, 같은 좌표 정규화, 같은 자책골 처리를 쓴다.