KPI Lab · 구상 · 부품 ② 전술 시뮬레이터
최종 목표는 같은 경기를 같이 보며 대화하고, 그 대화가 감독의 결정에 쓰이는 것이다. 그 목표를 향해 예비 측정 4종을 수행했고, 그 결과에 따라 지금 구현 가능한 범위는 예측이 아니라 계획 평가로 확정했다. 측정 데이터·판정·설계 결정·남은 한계를 순서대로 적는다.
이 글의 범위
구현물은 없다. HOVI 글이 예고한 부품 ② 전술 시뮬레이터의 설계 문서이며, 문헌 조사와 자체 측정으로 무엇이 가능하고 무엇이 불가능한지를 확정하는 것이 목적이다. 문헌 수치는 인용, 측정 수치는 자체 산출이며 08절의 인터페이스는 목업이다.
교체 가능 인원은 3명에서 5명으로 늘었다. 실제 사용량은 팀당 경기 평균 4.4장(FC서울) · 4.9장(화성FC)으로, 양 팀 합산 경기당 8.84건이다. 경기 중 감독이 직접 통제할 수 있는 변수 중 가장 큰 단위다.
한 경기의 교체 카드
FC서울 2026 K리그1 25경기 · 양 팀 교체 221건의 실제 시점 분포
2026년 9월 기준, 이벤트 데이터로 경기를 이어서 생성하는 기술은 이미 공개돼 있다. 아래는 조사 범위에서 확인한 계보다.
| 시스템 | 하는 일 | 필요 데이터 | 교체 | 상대 반응 |
|---|---|---|---|---|
| TacticAI → 팔메이라스 2026.06 | 선수를 드래그해 옮기면 양 팀의 재배열이 보인다. 코너킥 전용에서 오픈플레이로 확장 | 브로드캐스트 트래킹 | ✕ | 위치는 ○ |
| TacticGen 2026.04 | 전술을 생성한다. 규칙·자연어로 조건 부여 | 이벤트 330만 + 트래킹 1억 프레임 | ✕ | 생성에 포함 |
| LEM (Large Events Model) 2024–2025 · 코드 공개 | 이벤트를 언어처럼 학습해 임의 시점부터 경기를 이어서 생성한다. 몬테카를로로 결과 분포 파생판은 팀별 파인튜닝으로 "이 선수를 이 팀에 넣으면"을 돌린다 | 이벤트 데이터 172만 이벤트 | ✕ 선수 신원 미포함 | ✕ |
| ScoutGPT 2026 | 이벤트 데이터만으로 선수를 바꿔 끼우고 경기를 이어서 생성한다 | 이벤트 데이터 | 선수 교체 ○ 인게임은 ✕ | ✕ 다루지 않음 |
| 퍼지 로직 교체 우선순위 2025 | "지금 누구를 빼야 하는가"를 규칙으로 감사한다 | 이벤트 + 출전시간 | 빼는 쪽 ○ | ✕ |
| KU Leuven 교체 분석 2020/21–2021/22 · 6개 리그 | 교체 유형·타이밍 분류, xGD 기반 예측 74% | 슈팅 데이터 | 사후 평가 ○ | ✕ |
두 생성 계보(LEM · ScoutGPT)는 모두 경기 시작 시점의 라인업에서 선수를 교체한다. 경기 중 교체와 그에 대한 상대의 조정은 다루지 않는다. 교체를 양 팀이 주고받는 시퀀스로 다룬 연구는 조사 범위에서 확인되지 않았다.
단, 선행 연구가 없다는 사실이 그 방향의 타당성을 보증하지는 않는다. 신호가 존재하지 않아 다루지 않았을 가능성을 먼저 배제해야 한다. 03·04절이 그 확인이다.
가설 — 상대 교체는 우리 교체에 반응한다.
데이터 — 화성FC 2026시즌 23경기, 양 팀 교체 224건. 우리 교체 114건 각각에 대해 상대의 N분 내 응수 비율을 산출.
귀무 모형 — 상대 교체 시각 집합을 다른 경기의 것으로 3,000회 치환(각 팀의 시점 분포는 보존, 동일 경기라는 사실만 제거).
우리 교체 뒤 상대가 응수하는 비율
● 실제 관측 · ▬ 뒤섞은 세계의 95% 구간 (화성FC 23경기 · 교체 224건)
판정 — 미지지. 네 개 창 모두 관측값이 귀무 95% 구간 내에 위치한다. 양 팀 교체 시점 중앙값도 71분 대 68.5분으로 근접한다. 상대 교체 타이밍 예측 기능은 설계에서 제외한다.
한계 — 1팀·1시즌·1리그 표본이다. 이 결과는 "신호가 검출되지 않았다"이지 "상호작용이 없다"의 증명이 아니다.
가설 — 반응은 시점이 아니라 종류에 있다. 공격적 교체에 수비적 교체로 응수한다.
데이터 — FC서울 K리그1 25경기, 양 팀 교체 221건. 포지션 등급(GK 0 · DF 1 · MF 2 · FW 3)의 차이로 공격적 / 동종 / 수비적 분류.
화성FC 데이터는 K리그2로 리그 단위 선수 파일이 없어 투입 선수의 46%가 포지션 미확인이다. 종류 분석에서는 제외했다.
스코어 상태별 교체 종류
FC서울 2026 K리그1 25R · 양 팀 교체 221건
행위자 교체와 응답자 교체의 성격 순위상관(응수가 발생한 쌍만):
하위군 하나에서만 방향성이 나타났다. 추격 중 공격 카드를 사용한 경우 상대의 수비적 응수가 21.1 / 26.3 / 36.8%로 그 외(4.7 / 6.2 / 10.9%)의 3~4배다. 단 3상태 × 3창 = 9개 검정 중 최소 p가 0.014이며, 다중검정 보정 시 0.126으로 유의하지 않다. 해당 응수 5건은 4경기에서 발생했다. 가설로만 유지한다.
포지션 등급으로 보면 교체의 3분의 2가 "아무 일 없음"
FC서울 25R · 교체 221건의 분류 결과
판정 — 종류 수준 응수 예측은 보류. 신호 부재와 측정 도구의 해상도 부족이 구분되지 않는다. 필요한 것은 포지션 라벨이 아니라 역할 라벨이다.
질문 — "같은 선수를 다르게 쓴다"는 것이 데이터에 실재하는가.
데이터 — FC서울 25경기 원시이벤트 34,518건에서 선수-경기 519건 추출(출전 20분↑ · 이벤트 24건↑ · GK 제외). 그중 4경기 이상 출전 17명의 261건으로 분산분해.
지표 — "성과"가 아닌 "사용 방식"을 나타내는 벡터 9종(위치 2 · 액션 믹스 5 · 패스 성격 2).
좌표 처리 — 원시이벤트의 좌표는 공격 방향으로 정규화돼 있지 않다. 홈/원정 × 전후반에 따라 좌우가 반전된다. GK 평균 X로 규칙을 확인해 보정했다(보정 후 GK 8~9 · DF 40 · MF 50~56 · FW 58~61). 기존 FC서울 분석 스크립트는 이미 보정하고 있어 배포된 리포트는 영향이 없다.
전진성 ICC 0.69, 측면성 0.69. 분산의 약 70%가 선수 고유 특성으로 설명된다. 주전은 같은 위치에서 뛴다.
ICC가 낮은 변수를 "경기마다 지시가 바뀌는 것"으로 해석하면 오류다. 변동의 원인은 셋이다 — 지시 변화 · 상대와 상황 · 측정 오차. 이를 분리하기 위해 같은 경기 내 이벤트를 홀수·짝수로 분할해 각각 측정하고 비교했다(반분신뢰도, 스피어만-브라운 보정). 같은 경기라면 임무가 동일하므로, 두 값의 불일치는 측정 오차다.
각 변수의 분산은 무엇으로 이루어져 있나
FC서울 25R · 4경기 이상 17명 · 261건 · 분산분해 + 경기 내 반분신뢰도
드리블 비중의 반분신뢰도는 0.00, 경합 0.04, 슈팅 0.02, 수비액션 0.24다. 한 경기당 해당 이벤트가 수 건에 불과해 비율이 불안정하다. 이 네 변수는 현 측정 체계로 사용할 수 없다.
전진성의 경기별 변동은 같은 경기 내에서 81%가 재현된다(측면성 75%). 전체 분산의 약 25%가 실재하는 경기 단위 변동이다.
역할은 시즌 단위로 고정되고, 같은 역할 안에서 서는 위치가 경기마다 평균 8m, 넓게는 27m 이동한다. 이 변동이 임무에 해당한다.
선수 정체성을 제거한 선수 내 교차검증에서 쓰임새가 개인 공격 산출을 설명하는 정도는 R² 0.117이었다. 그러나 신뢰도가 확인된 변수만 사용하면 R² 0.035로 하락한다.
0.117을 구성한 주요 변수가 슈팅 비중·드리블 비중인데, 산출 지표에 PA내 슈팅과 드리블 성공이 포함돼 있다. 동일 이벤트를 양변에 넣은 결과이며, 두 변수는 위 반분신뢰도 기준으로도 사용 불가다. 유효값은 0.035다. 참고로 2026년 연구 하나는 선수·팀 임베딩을 추가해도 다음 이벤트 예측이 유의하게 개선되지 않는다고 보고했으며, 다만 그 임베딩이 역할·팀 스타일 패턴을 담고 있다고 덧붙였다.
판정 — 임무 변화가 결과를 바꾼다는 증거는 확보하지 못했다. 산출 지표 선택의 문제일 가능성이 있다. 인버티드 윙어의 효과는 해당 선수의 지표가 아니라 풀백이 확보한 공간에 나타난다. 팀 국면 산출로 재측정이 필요하며 이는 이벤트 데이터로 구성 가능하다.
선발 3경기 이상 · 교체 2경기 이상을 모두 가진 11명에 대해 신뢰도 확인 변수로 비교했다. 교체 투입 시 전진성이 증가한 선수는 11명 중 5명, 측면성은 3명이며 평균 변화는 각각 −0.28%p, −0.77%p다. 투입이라는 사건 자체는 사용 방식을 결정하지 않는다.
04절은 역할 라벨의 부재를, 05절은 위치 축만이 측정 가능함을 보였다. 두 결과가 하나의 설계로 수렴한다. 역할을 데이터에서 추정하지 않고, 사용자가 선언하게 한다.
선언 대상은 역할이 아니라 임무다. 한 시즌에 주전의 역할은 고정된다(ICC 0.69). 교체 시점에 "포지션을 바꾼다"고 선언하는 경우는 드물다. 실제로 지시되는 것은 역할 내의 임무이며 — "오른쪽에서 안으로 접어 들어가게" — 그것이 05절에서 측정된 위치 축 변동(±8.3m)에 대응한다.
질의 형태가 P(결과 | 선수)에서 P(결과 | 선수, 선언된 임무, 맥락)으로 바뀐다. 이 설계의 근거는 선행 연구의 한계 서술에서도 확인된다.
Fine-tuned LEM (2024) — 저자들의 한계 서술
"모델은 선수가 팀의 플레이 모델에 가져올 변화를 추론하지 못한다. 현재의 플레이스타일을 재현할 뿐이다."
생성 모델은 관측된 사용 방식을 재현하며, 새로 지시되는 사용 방식은 학습 분포 밖이다. 그 입력을 사람이 제공하는 구조다.
상대 측도 같은 원리로 처리한다. 상대 교체는 예측 대상이 아니라 관측된 사건이다. 발생 후 투입 선수를 조회하고 대응 분기를 여는 방식이므로, 03절에서 제외한 타이밍 예측을 필요로 하지 않는다.
68분, 사이드라인
⚠️ 인터페이스 목업 — 화면 속 수치는 동작을 보이기 위한 예시이며 측정값이 아니다
측정 4종의 결과를 기능 요구사항과 대조하면 다음과 같다.
| 측정 결과 | 예측 기능 | 평가 기능 |
|---|---|---|
| 교체 타이밍 상호작용 미검출 (03절) | 필요 | 불필요 |
| 교체 종류 응수 미검출 (04절) | 필요 | 불필요 |
| 임무 → 결과 관계 미확인 (05절) | 필요 | 불필요 |
| 액션 성향 측정 불가 (05절) | 필요 | 부분 — 위치 축으로 대체 |
예측 기능은 미검증 전제 4건에 의존한다. 평가 기능은 0~1건에 의존한다. "이 교체의 결과"는 정답이 존재하지 않아 검증할 수 없지만, "선언한 계획대로 실행됐는가"는 관측값이다. 레퍼런스 제시는 검색이다. 둘 다 추론을 포함하지 않는다.
한 바퀴
주중에 선언하고 · 경기에서 재고 · 끝나면 채점하고 · 쌓인다
05절의 반분신뢰도가 그대로 기능 범위를 규정한다.
| 측정 축 | 반분신뢰도 | 판정 | 대응하는 감독의 말 |
|---|---|---|---|
| 전진성 (X 위치) | 0.81 | ○ 잰다 | "더 앞으로" · "내려서 받아라" |
| 측면성 (|Y−50|) | 0.75 | ○ 잰다 | "안으로 접어라" · "폭을 벌려라" |
| 패스 비중 | 0.42 | △ 부분 | "짧게 돌려라" |
| 전진패스 비중 | 0.35 | △ 부분 | "앞으로 찔러라" |
| 롱패스 비중 | 0.25 | ✕ 못 잰다 | "길게 넘겨라" |
| 수비액션 비중 | 0.24 | ✕ 못 잰다 | "더 강하게 압박" |
| 경합 비중 | 0.04 | ✕ 못 잰다 | "세컨볼 잡아라" |
| 드리블 비중 | 0.00 | ✕ 못 잰다 | "1대1 걸어라" |
게임 플랜을 위치와 방향의 언어로 기술하면 평가 가능하다. 강도와 빈도의 언어로 기술하면 현 단계에서 평가 불가다.
따라서 계획 입력 시 시스템이 반환해야 할 응답이 하나 추가된다 — "해당 지시는 현재 측정 체계로 정량화할 수 없습니다. 위치 기준으로 기술해 주십시오." 09절의 Tier 규율을 입력 측에 적용한 것이다.
국면(빌드업·전환·수비)은 자동 검출하지 않는다. 이벤트만으로 판별 시 정확도가 불충분하며, 해당 정보는 사용자가 이미 보유하고 있다. 선언 항목에 포함한다.
선언된 임무에 대한 데이터 지지도는 균일하지 않다. 05절과 동일한 17명 기준으로, 서로 다른 사용 방식을 각 3경기 이상 확보한 선수는 41~59%다(사용 방식을 몇 갈래로 분할하느냐에 따라). 나머지는 외삽 구간이다.
지지도를 구분하지 않고 응답하면 근거 없는 값을 정상 응답과 동일한 형식으로 반환하게 된다. 30초 내 판단을 요구받는 사용자에게 이는 치명적 실패 모드다.
Tier 규율 — 근거의 두께를 답에 붙인다
같은 질문이라도 지지도에 따라 답의 성격이 달라야 한다
tier·support_n 필드를 필수로 두면 규율이 설계 수준에서 강제된다. 답변 가능 범위는 좁아지지만 범위 내 오답은 발생하지 않는다.상대 선수의 사용 방식을 조건화하려면 해당 선수의 복수 경기 관측이 필요하다.
우리 선수와 상대 선수의 관측 두께
FC서울 25경기 · 선수-경기 519건 (09절과 같은 필터)
경기 중 반사실 생성 모델을 몬테카를로로 수백 회 실행할 시간은 없고, HOVI 글에서 정한 원칙상 LLM에 계산을 위임할 수도 없다. 계산 시점을 주중으로 이동하면 이 제약이 해소된다.
계산은 주중에, 경기 중엔 꺼내기만
같은 도구를 언제 쓰느냐가 실행 비용을 결정한다
선언된 임무와 기대효과·반증조건은 라벨이 부착된 예측이므로 경기 후 채점 가능하다. 시즌 100건 규모면 04절에서 결여를 확인한 역할·임무 라벨이 별도 수집 없이 축적된다.
위험 — 기대효과만 선언하면 확증 편향이 발생한다. 반증조건을 함께 선언해야 기록이 검증 가치를 갖는다.
최종 목표는 같은 경기를 같이 보면서 축구 대화를 주고받고, 그 대화가 감독의 결정에 사용되는 것이다. 이 글은 그 목표를 축소하지 않는다. 현 시점에서 도달 가능한 지점을 확정하는 문서다.
최종 목표까지의 계단
단계별 구현 범위와 각 단계를 막는 제약
| 막는 것 | 왜 | 내가 풀 수 있나 |
|---|---|---|
| 오프더볼이 없다 | 이벤트 데이터는 공을 만진 순간만 담는다. 형태 변경 시뮬이 여기서 막힌다 | 방송 트래킹 검증 후 |
| 강도·빈도의 말 | 압박·경합·드리블은 반분신뢰도 0.24 이하 — 지금 자로는 못 잰다 | 자를 바꿔야 한다 |
| 실시간 데이터 | 훈련용 GPS를 갖는 것과 경기 중 벤치로 텔레메트리가 오는 건 다른 제품 등급이다 | 아니오 — 구단의 일 |
| 경기장 음성인식 | 스포츠 현장 오류율은 공개된 수치가 하나도 없다 | 재보면 안다 |
| 중계권 | 규정 문제가 아니라 권리 문제다 | 아니오 |
| 임무 → 결과 증명 | 개인 산출로는 R² 0.035. 팀 국면 지표로 다시 재야 한다 | 다음 과제 |
여섯 개 중 직접 해결 가능한 것은 둘이다. 나머지는 구단 내부 접근권이나 외부 기술 진전을 필요로 한다. 따라서 현 단계 구현 범위는 1단계로 한정한다.
현 단계 구현 범위
주중에 게임 플랜을 위치·방향의 언어로 선언하고, 경기 후 해당 계획의 구간별 준수도와 반증조건 결과를 산출하며, 관련 레퍼런스를 함께 제시하는 도구.
레퍼런스 소스는 자체 축적분이다 — 우리 팀 과거 경기 이벤트, Dual-View로 분절된 클립, 그리고 전술 문헌을 자체 철학 체계와 연결해 축적한 위키(453개 문서 · 9.3MB · 상호링크 12,142개).
1단계는 3단계의 선행 조건이기도 하다. 계획 선언과 채점을 한 시즌 반복하면 05절에서 결여를 확인한 임무 라벨이 축적되고, 그 라벨이 임무 조건부 시뮬레이션의 학습 데이터가 된다. 2단계는 1단계의 산출물 위에서 열린다.
현재 확인된 것은 없다. 확인 순서대로 적는다.
세 개의 글, 하나의 물건
HOVI는 대화하는 층이고, 그 아래 두 개의 기관이 필요하다
이 도구의 응답 범위는 "계획이 실행됐는가"까지이며 "계획이 옳았는가"는 포함하지 않는다. 후자는 판단이고, HOVI 글에서 정한 분업선의 반대편에 있다.