골문 앞 중앙까지는,
어느 경기든 똑같이 간다
FC서울은 다섯 골을 넣는 날과 한 골도 못 넣는 날이 뚜렷하게 갈린다. 그런데 골문 앞 중앙에 공을 배달하는 것까지는 두 경우가 같았다. 차이는 그 다음에 있었고, 공개 데이터로는 그 차이를 설명할 수 없었다. 이 글은 어디까지 설명되고 어디서 막히는지, 그리고 막힌 지점을 무엇으로 재야 하는지에 관한 기록이다.
먼저 결론
- 서울 선수가 직접 넣은 골 43개 중 40개가 골문 앞 정중앙 한 칸(zone 17)에서 나왔다. 그런데 그 칸에 공을 넣는 비율은 서울 72% · 상대 11개 팀 69%로 거의 같다. 여기까지는 서울만의 특징이 아니다.
- 갈리는 것은 도착한 다음이다. 배달 한 번이 만드는 기대득점으로 25경기를 줄 세우면 상위 10경기가 10승 0무 0패, 하위 10경기가 3승 5무 2패다.
- 그런데 배달을 더 많이 한 쪽이 골은 5분의 1이었다. 상위 20.7회에 33골, 하위 30.0회에 6골.
- 왜 그런지 데이터에 있는 모든 속성으로 따져봤다. 크로스의 출발 위치·도착 위치·유형·선행 구조 — 상위와 하위가 거의 같다. 결과만 4배 차이가 난다.
- 남은 설명 변수는 영상에만 있다 — 크로스를 올리는 순간 그 선수가 자유로웠는지. 그것을 재는 방법을 제안하며 글을 닫는다.
01시작한 질문
같은 팀이 왜 어떤 날은 다섯 골을 넣고 어떤 날은 한 골도 못 넣는가
FC서울은 25라운드까지 47골을 넣었다. 그중 필드골 43개, 프리킥 2개, 페널티킥 1개, 상대 자책골 1개다. 경기별 편차가 크다. R24 안양 원정에서 7-0, R05 광주 홈에서 5-0으로 이긴 팀이 전북·강원·김천·안양을 상대로는 네 번 무득점에 그쳤다.
선제골을 넣은 16경기에서 15승 1무 0패. 먼저 실점한 5경기에서는 1승 4패. 무득점 4경기는 전부 무승부였다. 이 팀은 넣기만 하면 이긴다. 그래서 질문은 하나로 좁혀진다 — 넣는 날과 못 넣는 날은 무엇이 다른가.
02첫 가설, 그리고 반증
"서울은 박스 중앙을 잘 쓰는 팀이다" — 데이터는 아니라고 답했다
경기를 보면서 세운 첫 가설은 이것이었다. 서울은 박스 안 중앙에 사람을 잘 넣는다. R09 부천 홈(3-0)을 볼 때 특히 그랬다 — 후반 84분 골문 앞 중앙에 네 명이 동시에 들어와 있었다.
이걸 재려면 먼저 "골문 앞 중앙"을 좌표로 정해야 한다. 경기장을 가로 6칸 × 세로 3칸으로 나눈 표준 18구역에서, 골문 앞 정중앙 칸을 zone 17이라 부른다. 좌표로는 X ≥ 83.3, Y 33.3~66.7이다.
서울의 골이 실제로 이 한 칸에 몰려 있다. 서울 선수가 직접 넣은 43개 중 40개(93%)가 여기서 나왔다. 그렇다면 서울은 이 칸을 남들보다 잘 쓰는 팀인가?
아니었다. 서울이 박스 안에 넣은 공 834개 중 602개(72%)가 zone 17에 도착했고, 상대 11개 팀은 636개 중 438개(69%)였다. 팀별로 따로 계산해도 평균 68.6%로 같다. 도착 1회당 기대득점은 소수점 셋째 자리까지 0.050으로 동일하다.
골문 앞 중앙에 공을 넣는 것은 K리그에서 특별한 일이 아니다. 첫 가설은 여기서 기각됐다. 그런데 결과는 같지 않다 — 서울은 그 칸에서 163번 쏴서 40골, 상대는 122번 쏴서 16골이다.
0325경기를 한 줄로 세우면
배달 한 번이 만든 기대득점 — 상위 10경기는 전승, 하위 10경기는 열 경기에 6골
지표를 하나 정한다. 배달당 xG = 그 경기 zone 17에서 만든 기대득점 ÷ zone 17에 공을 넣은 횟수. 골문 앞 중앙에 공을 한 번 배달할 때마다 얼마나 위협적이었는가를 재는 값이다. 횟수가 아니라 한 번의 값어치를 본다.
왼쪽 위와 오른쪽 아래로 갈린다. 그리고 갈리는 방향이 직관과 반대다.
| 순위 | 라운드 | 경기 | 스코어 | 배달 | 슛 | 배달당 xG |
|---|---|---|---|---|---|---|
| 1 | R09 | 부천 홈 | 3-0 | 16 | 9 | 0.156 |
| 2 | R02 | 울산 원정 | 4-1 | 18 | 11 | 0.145 |
| 3 | R05 | 광주 홈 | 5-0 | 17 | 6 | 0.107 |
| … | ||||||
| 17 | R14 | 광주 원정 | 1-0 | 39 | 9 | 0.029 |
| 18 | R13 | 제주 원정 | 1-2 | 51 | 10 | 0.027 |
| 19 | R20 | 울산 홈 | 1-3 | 50 | 11 | 0.025 |
| 25 | R21 | 전북 원정 | 0-0 | 13 | 0 | 0.000 |
5-0으로 이긴 R05 광주 홈은 골문 앞 중앙에 17번만 넣었다. 1-3으로 진 R20 울산 홈은 50번 넣었다. 세 배 가까이 더 넣고 골은 5분의 1이다.
세 번째 줄이 이유를 말해준다. 한 공격에서 배달하는 횟수가 다르다.
잘 되는 날은 한 번 넣고 그 공격이 끝난다 — 슛이 나오든, 뺏기든. 안 되는 날은 넣고 걷어내지고, 주워서 또 넣고, 또 걷어내진다. 같은 공격 안에서 이 순환이 반복된다. 그래서 배달 횟수는 쌓이는데 슛은 안 나오고, 나와도 각도가 좋지 않은 슛이 된다. 들어갈 확률 20% 이상인 슛의 비율이 47% 대 12%, 네 배 차이다.
포항전의 87분 전후가 그 구조를 그대로 보여준다. 1분 남짓 사이에 같은 자리로 세 번 공을 넣었다 — 왼쪽 코너, 오른쪽 코너, 그리고 오픈플레이 크로스. 앞의 두 번은 걷어내졌고, 두 번째 코너의 세컨볼을 김진수가 회수해 네 명이 돌린 뒤 이승모가 세 번째로 올려 골이 됐다.
그런데 공식 하이라이트에는 마지막 15초만 남아 있다. 앞의 코너 두 번과 클리어 두 번이 잘려나가서, 영상만 보면 이 장면은 "수비하고 넘어가서 크로스로 넣은 골"로 보인다. 앞의 49초를 알아야 "세 번 만에 들어간 골"이 된다.
같은 장면, 아는 것에 따라 달라지는 의미
이 세트는 경기 영상과 데이터를 겹쳐서 만든다. 하이라이트 클립만으로는 성립하지 않는 편집이다.
- 왼쪽 화면 — R19 포항 홈 3-1 후반 42분, 공식 하이라이트 원본 15초. 세컨볼 회수부터 골까지.
- 오른쪽 화면 — 같은 시간축의 피치 다이어그램. 하이라이트가 시작되기 49초 전부터 재생돼, 코너 ①과 ②, 클리어 두 번이 먼저 지나간다.
- 합류 지점 — 두 화면의 시간이 만나는 순간(87:02)에 왼쪽 영상이 시작된다. 이때 우상단 배달 카운터가 이미 2를 가리키고 있다.
반복이 항상 실패로 끝나는 것은 아니다. 이 장면은 세 번째에 들어갔다. 다만 25경기 평균으로는 반복이 잦은 날에 골이 적었다(그림 4). 그리고 반복이 끝내 실패로 끝난 장면은 어떤 하이라이트에도 남지 않는다 — R13 제주 원정과 R20 울산 홈의 반복 시퀀스를 클립으로 만들려 했으나, 세 경기 모두 그 구간이 잘려 있었다. 하이라이트는 마지막 액션만 남기고 앞을 버린다. 공개 영상만으로는 실패한 반복을 보여줄 방법이 없다.
04가장 잘 된 날 — R05 광주 홈 5-0
17번 배달, 6번 슛, 5골. 그리고 다섯 골의 경로가 전부 달랐다
3월 22일 R05 광주 홈은 배달당 xG 3위, 슛당 xG는 0.304로 시즌 2위다. 그런데 배달 횟수는 17회로 하위권 경기들과 비슷한 수준이다. 이 경기가 "많이 넣어서 이긴 경기"가 아니라는 뜻이다.
다섯 골의 도착 지점은 모두 같은 칸이다. 그런데 거기까지 가는 방법이 매번 달랐다. 득점 직전 배급의 유형을 분류하면 짧은 패스 · 오픈 크로스 · 세트피스 크로스 · 롱 스로인 네 가지다. 25경기 중 네 가지를 모두 쓴 경기는 이 경기뿐이다. 7-0으로 이긴 R24 안양 원정도 세 가지였고, 그중 오픈 크로스가 여섯 골 중 다섯이었다.
R05 광주 홈 5-0 — 같은 자리에 도착한 다섯 가지 방법
통일 조건 — 도착 공간을 zone 17 하나로 고정하고, 그리로 가는 경로만 바꿔 배열한다. 다섯 골 전부 하이라이트에 수록되어 있다.
- 전반 8분 손정범 — 왼쪽 와이드 리스타트 크로스 → 떨굼 → 중앙
- 후반 1분 클리말라 — 오른쪽 와이드 인스윙 (굴절)
- 후반 14분 로스 — 오른쪽 와이드 세트피스
- 후반 27분 클리말라 — 왼쪽 하프스페이스 침투
- 후반 36분 이승모 — 오른쪽 골라인 러닝 크로스 → 원터치
① 후반 1분 클리말라 골은 정승원의 크로스가 문민서의 머리에 굴절되어 흐른 공이다. 데이터에는 '블락'으로만 남아 있어 굴절인지 차단인지 구분되지 않는다. 설계된 패턴이 아니므로 패턴 사례로 인용하지 않는다.
② 전반 15분에 취소된 골이 하나 더 있었다. 송민규의 파울로 취소됐는데, 이벤트 데이터에는 크로스 '실패'와 '파울 범함'만 남고 골 이벤트 자체가 존재하지 않는다. 영상을 보지 않았다면 그 장면이 있었다는 사실조차 몰랐을 것이다.
05그런데 왜 그런지는 설명되지 않았다
데이터에 있는 모든 속성으로 따져봤고, 전부 같게 나왔다
여기까지가 "무엇이 달랐는가"다. 다음 질문은 "왜 달랐는가"다. 좋은 크로스와 그렇지 않은 크로스를 가르는 것이 무엇인지, 이벤트 데이터에 있는 속성을 하나씩 넣어봤다.
먼저 자유를 만드는 세 가지 구조를 각각 태깅했다. 스위치(반대편으로 크게 전환한 직후 올린 크로스), 3자 조합(직전 세 패스가 서로 다른 세 명을 거친 경우), 개인 돌파(크로서 본인의 드리블 성공 직후). 오픈플레이 크로스 436개 전량이 대상이다.
| 구조 | 횟수 | 크로스당 xG | |
|---|---|---|---|
| 스위치 직후 | 92 | 0.0307 | 효과 없음 |
| 스위치 없음 | 344 | 0.0345 | |
| 3자 조합 | 90 | 0.0412 | +29% |
| 3자 조합 없음 | 346 | 0.0319 | |
| 드리블 직후 | 10 | — | 표본 부족 |
3자 조합만 약한 방향성을 보이고, 나머지는 무효다. 그런데 진짜 문제는 그 다음이었다.
상위 경기와 하위 경기의 크로스는 구별되지 않는다. 구조를 거친 비율도, 컷백 비율도, 도착 정확도도, 올린 위치도 거의 같다. 그런데 크로스 1개가 만드는 기대득점은 0.0700 대 0.0167, 네 배다.
가장 선명한 사례가 하나 있다.
최준이 오른쪽 같은 자리에서 클리말라에게 올린 크로스 4개. 올린 선수도, 받은 선수도, 출발 좌표도, 사이드도, 공간도 전부 같다. 두 번은 이긴 경기(R03 제주 원정 2-1, R09 부천 홈 3-0)에서, 두 번은 못 이긴 경기(R17 강원 홈 0-0, R12 안양 홈 0-0)에서 나왔다. 이벤트 데이터로는 이 넷을 구별할 방법이 없다.
크로서와 리시버까지 고정하면
위 네 장면 중 강원전·안양전은 최준 → 클리말라였다. 여기에 같은 조합의 나머지 둘을 더하면 여섯 항목이 전부 고정된 네 개가 된다 — 그래도 결과는 갈리지 않는다.
이긴 경기의 0.27·0.16과 못 이긴 경기의 0.18·0.11. 네 값이 겹쳐 있다. 같은 선수가 같은 자리에서 같은 선수에게 올렸는데, 그날 팀이 이겼는지 아닌지를 이 크로스만으로는 알 수 없다.
올리는 순간 그 선수가 자유로웠는지는 아무도 기록하지 않는다.
같은 자리에서 같은 형태로 올린 크로스 네 개
통일 조건 — 오른쪽 와이드 깊은 위치에서 골라인 쪽으로 감아 들어가 zone 17에 떨어지는 오픈플레이 크로스. 사이드·공간·깊이·크로스 형태·국면·도착지가 모두 고정된다. 네 장면 중 둘은 골, 둘은 유효슈팅이라 전부 하이라이트에 있다.
- R02 울산 원정 4-1 · 전반 2분 — 손정범 → 후이즈 · 골 · xG 0.87
- R03 제주 원정 2-1 · 후반 47분 — 최준 → 이승모 · 골 · xG 0.33
- R17 강원 홈 0-0 · 전반 40분 — 최준 → 클리말라 · 유효슈팅 · xG 0.18
- R12 안양 홈 0-0 · 전반 7분 — 최준 → 클리말라 · 유효슈팅 · xG 0.11
넷 중 셋은 최준이 같은 자리에서 올린 것이다. 크로서가 달라서 생긴 차이가 아니라는 뜻이며, 그림 8이 보여주듯 최준이 클리말라에게 올린 네 개만 따로 떼어놓아도 좌표상으로는 구별되지 않는다. 볼 것은 크로스가 아니라 크로스를 올리기 직전 1초다 — 크로서 주위에 상대가 몇 명 있었는지, 그리고 박스 안에서 누가 어느 쪽 어깨로 들어가고 있었는지.
06그래서 무엇을 재야 하는가
크로스의 질을 "올리는 순간의 여유"로 옮겨 적는다
크로스를 재는 지표는 셋뿐이다 — 시도, 성공, 성공률. 그런데 성공률은 "동료에게 닿았는가"만 묻고 "닿아서 위험해졌는가"는 묻지 않는다. 좌표를 넣어도 마찬가지였다. 그래서 네 번째 축이 필요하다.
제안하는 것은 크로스를 올리는 시점에 그 선수가 확보한 여유를 세 축으로 태깅하는 것이다.
| 축 | 2점 | 1점 | 0점 |
|---|---|---|---|
| F1 압박 | 반경 3m 안에 상대 없음 | 3~7m에 접근 중 | 3m 이내 또는 신체 접촉 |
| F2 시간 | 2터치 이상 또는 정지 상태 | 1터치 후 | 원터치 / 흘러나온 볼 |
| F3 선택 폭 | 컷백·컷인·재전개가 모두 가능 | 대안 하나 | 크로스 외에 남은 선택지 없음 |
합계 5~6점이면 자유 크로스, 0~2점이면 압박 크로스다. 코너·프리킥은 구조적으로 압박이 없으므로 반드시 분리 집계한다. F1의 3m·7m 기준은 FIFA Football Language가 "appropriate distance"라고만 쓰고 수치를 비워둔 칸을 분석자가 채운 것이며, 그렇게 표기한다.
그리고 이 태깅은 처방으로 이어진다
서울의 하위 10경기는 세로축이 이미 계산돼 있다 — 크로스당 xG 0.0162. 그런데 가로축이 비어 있어서 어느 칸에 있는지 판정할 수 없다. 왼쪽 위(자유 낭비)라면 처방은 크로스 기술과 판단 훈련이고, 왼쪽 아래(이중 실패)라면 처방은 빌드업 구조 재설계다. 정반대다.
이 체계에는 자기 자신을 죽이는 조건도 함께 정의돼 있다. 자유 크로스의 슛 전환율과 압박 크로스의 슛 전환율 차이가 0에 가까우면, 이 개념 자체가 틀린 것이다. 그때는 다른 축을 찾아야 한다.
이 분석에 쓴 데이터는 전부 공개된 것이고, 경기는 직접 보고 기록했다. 다만 영상 작업은 유튜브 하이라이트로만 가능했다 — 풀타임 영상을 구할 수 없었기 때문이다. 그래서 인용할 수 있는 장면이 골과 유효슈팅으로 제한됐고, 클립 선정 기준에 그 제약을 반영했다.
크로스를 몇 개 올렸는지는 이미 다 기록돼 있다. 올리는 순간 그 선수가 자유로웠는지는 아무도 기록하지 않는다. 그 기록이 경기력 향상에 도움이 되는 데이터가 될 수 있으리라 믿는다.
부록 · 데이터 출처와 검증
이 글의 모든 숫자는 K리그 데이터 포털의 공식 기록에서 직접 수집했다. 수집 원본 8종(21MB)의 SHA-256 해시를 기록해 두었으며, 모든 표와 그림은 원본 CSV에서 스크립트로 직접 렌더된다 — 손으로 옮겨 적은 숫자는 없다.
| 항목 | 값 |
|---|---|
| 원시 이벤트 | 34,518행 × 33열 (25경기 양 팀 전량, 좌표 100%) |
| 핵심 원본 | 05_events_chalkboard.json · 14,310,821 B · 88da5555a40fa9c8… |
| 좌표 정규화 | 라운드·팀·전후반별 공격 방향을 슛 좌표로 판정 후 통일. 상대 경합 X 합이 평균 99.9로 검증 |
| 등급 | A 포털 원문 그대로 · B 원문에서 파생 · C 분석자 조작적 정의 |
등급 C(분석자가 정의한 것)는 다음과 같다 — zone 17의 좌표 경계, "박스 투입"(크로스로 태깅되지 않았어도 좌표상 박스 밖에서 안으로 8m 이상 배달된 패스를 포함), "한 공격(국면)"의 경계, 크로스 후 슛까지의 8초 창, 자유 크로스도 3축의 3m·7m 기준. 전부 본문에 명시했다.
정정 이력
분석 과정에서 일곱 번 틀렸고, 일곱 번 고쳤다.
| # | 무엇을 틀렸나 | 어떻게 고쳤나 |
|---|---|---|
| 1 | 공중 경합을 필드 전체로 뭉쳐 "서울 우세"로 보고 | 구역·상황·시간대로 분리 → 박스 안 크로스 상황만 보면 서울 1승 10패 |
| 2 | 박스 첫 볼 획득률 9%로 과소 집계 | 슛이 된 헤더는 경합으로 태깅되지 않음을 발견 → 15%로 정정 |
| 3 | 실점 코드(GC)를 골킥으로 오독해 공격 국면을 끊음 | 9건 전수 확인 후 재계산, 누락됐던 골 복원 |
| 4 | "슈팅 수 포털과 완전 일치"라고 보고 | 실제 295 대 293 불일치 확인 → 검증 항목에서 철회 |
| 5 | 부천전 국면당 xG에 페널티킥을 포함 | PK 제외 후 0.089 → 0.052 |
| 6 | 득점 원문의 "PK지점"을 페널티킥으로 오독 | 슈팅존(페널티 스팟) 표기였음. 서울의 시즌 PK는 1개뿐. 47골 분류 전면 재계산 |
| 7 | 대전전 김진수의 자책골이 서울 득점으로 집계 | 이벤트 데이터가 자책골도 해당 선수 소속 팀의 골로 기록함을 확인. 제외 후 필드골 44 → 43개 |
남은 불일치와 한계
- 포털 화면의 슈팅 합계(299·293)와 이벤트 데이터 집계(295·282)가 어긋난다. 원인 미확인이므로 본문에서는 이벤트 데이터 기준만 사용했다.
- 19라운드부터 세트피스 크로스가 오픈플레이 코드로 기록된다. 세트피스 코드(STCS/STCU)는 1~18라운드에 178건, 19라운드 이후 0건인데, 코너 위치 좌표를 대조해 보면 같은 킥이 19라운드부터 OPCS/OPCU로 넘어가 있다. 기록이 사라진 것이 아니라 재분류된 것이다. 시즌 중 태깅 기준이 바뀐 것으로 보이나 원인은 확인하지 못했다. 본문에서는 직전 이벤트와 15초 이상 떨어진 크로스를 데드볼로 판정해 표본에서 제외했으며(1~18라운드 오검출 0건), 해당 구간의 세트피스 자체를 분석하는 것은 여전히 불가능하다.
- 취소된 득점은 이벤트 데이터에서 흔적 없이 삭제된다.
- 공식 하이라이트는 슛 앞 5~10초만 남긴다. 한 공격에서 배달이 반복되는 29~56초짜리 시퀀스는 어느 경기에서도 온전히 남아 있지 않아, 이 글의 핵심 발견 하나를 영상으로 보여줄 수 없었다.
- 공을 만지지 않은 선수의 위치는 기록되지 않는다. 박스 안 인원 수, 무볼 움직임, 수비 대형은 이 데이터로 알 수 없다.
- 이 글의 상관계수는 25경기 표본에 기반한다. 슛·득점 계열 지표는 한 시즌 이상을 확보하기 전까지 '검정'이 아니라 '관찰'로 다룬다.
관찰 기록
R05 광주 홈, R02 울산 원정, R20 울산 홈, R09 부천 홈 네 경기를 90분 또는 지정 구간으로 보고, 관찰 항목을 이벤트 데이터와 1:1로 대조했다. R05 기준 확인 11 · 수정 5 · 기각 0 · 검증불가 7이며, 검증불가 7건은 전부 공을 만지지 않은 선수의 위치에 관한 것이다.