KPI Lab · Concept · Component ② Tactical Simulator
The final goal is to watch the same match together, talk about it, and have that conversation feed the manager's decisions. Working towards it I ran four preliminary measurements, and on their results fixed the currently buildable scope as plan evaluation rather than prediction. Below: the measurement data, the verdicts, the design decisions that follow, and what remains out of reach.
Scope of this write-up
There is no implementation. This is the design document for component ②, the tactical simulator, promised at the end of the HOVI write-up. Its purpose is to establish, through literature review and my own measurements, what is and is not possible. Figures from the literature are cited; measurements are my own; the interface in §06 is a mockup.
Permitted substitutions went from three to five. Actual usage is 4.4 per team per match at FC Seoul and 4.9 at Hwaseong FC, or 8.84 per match across both sides. It is the largest single variable a manager controls directly during a match.
Ten cards per match
FC Seoul, 25 K League 1 matches, 2026 · timing of all 221 substitutions, both teams
As of September 2026, generating match continuations from event data is already published and in some cases open-sourced. The table lists what the review turned up.
| System | What it does | Data required | Substitutions | Opponent response |
|---|---|---|---|---|
| TacticAI → Palmeiras June 2026 | Drag a player and both teams rearrange. Extended from corners to open play | Broadcast tracking | ✕ | positions ○ |
| TacticGen April 2026 | Generates tactics, conditioned on rules or natural language | 3.3M events + 100M tracking frames | ✕ | included in generation |
| LEM (Large Events Model) 2024–2025 · code released | Learns events as a language and continues a match from any point. Monte Carlo outcome distributions A derivative fine-tunes per team to answer "this player in this squad" | Event data 1.72M events | ✕ no player identity | ✕ |
| ScoutGPT 2026 | From event data alone, swaps a player in and continues the match | Event data | player swap ○ in-game ✕ | ✕ not addressed |
| Fuzzy-logic substitution priority 2025 | Audits "who should come off now" by rule | Events + minutes | removals ○ | ✕ |
| KU Leuven substitution analysis 2020/21–2021/22 · 6 leagues | Type and timing classification, 74% xGD-based prediction | Shot data | post-hoc ○ | ✕ |
Both generative lines — LEM and ScoutGPT — swap players in the starting line-up. Neither covers in-game substitutions or the opponent's adjustment to them. No study in the reviewed literature treats substitutions as a sequence exchanged between the two sides.
The absence of prior work does not vouch for the direction. The possibility that no signal exists has to be ruled out first. §03 and §04 are that check.
Hypothesis — opponent substitutions respond to ours.
Data — Hwaseong FC, 2026 season, 23 matches, 224 substitutions across both sides. For each of our 114 substitutions, the share of opponent responses within N minutes.
Null model — the opponent's set of substitution times replaced with another match's, 3,000 times (each side's timing distribution preserved; only the fact of being the same match removed).
Opponent response rate after our substitution
● observed · ▬ 95% interval of the shuffled null (Hwaseong FC, 23 matches · 224 substitutions)
Verdict — unsupported. In all four windows the observed value sits inside the null 95% interval. The two sides' median timings are also close, at 71′ and 68.5′. Prediction of opponent substitution timing is removed from the design.
Limitation — one team, one season, one league. This is "no signal detected", not proof that no interaction exists.
Hypothesis — the response is in type rather than timing; an attacking change is answered with a defensive one.
Data — FC Seoul, 25 K League 1 matches, 221 substitutions across both sides. Classified attacking / like-for-like / defensive by the difference in positional rank (GK 0 · DF 1 · MF 2 · FW 3).
Hwaseong FC data was excluded here: K League 2 has no league-wide player file, leaving 46% of incoming players without a confirmed position.
Substitution type by score state
FC Seoul, 25 K League 1 matches, 2026 · 221 substitutions, both teams
Rank correlation between the actor's substitution type and the responder's, over pairs where a response occurred:
One subgroup showed direction. Where an attacking card was played while trailing, defensive responses ran at 21.1 / 26.3 / 36.8% against 4.7 / 6.2 / 10.9% otherwise — three to four times higher. However, the minimum p across 3 states × 3 windows = 9 tests is 0.014, which corrects to 0.126 and is not significant. The five responses concerned came from four matches. Retained as a hypothesis only.
By positional rank, two-thirds of substitutions register as "no change"
FC Seoul, 25 matches · classification of 221 substitutions
Verdict — type-level response prediction is held. Absence of signal cannot be separated from insufficient resolution in the instrument. What is required is not a positional label but a role label.
Question — does "using the same player differently" exist in the data?
Data — 519 player-matches drawn from 34,518 raw events across FC Seoul's 25 matches (20+ minutes played, 24+ events, goalkeepers excluded). Variance decomposed on the 261 player-matches from the 17 players with four or more appearances.
Variables — nine describing how a player was used rather than how well (2 positional · 5 action mix · 2 pass character).
Coordinate handling — raw event coordinates are not normalised to attacking direction; they flip with home/away × half. The rule was confirmed against goalkeeper mean X and corrected (after correction: GK 8–9 · DF 40 · MF 50–56 · FW 58–61). Existing FC Seoul analysis scripts already apply this correction, so published reports are unaffected.
ICC 0.69 for advancement and 0.69 for width. About 70% of variance is explained by player identity. Regulars play in the same place.
Reading a low ICC as "instructions change from match to match" is an error. Variation has three sources — changed instruction, opponent and situation, and measurement error. To separate them, events within a single match were split into odd and even halves, measured separately and compared (split-half reliability, Spearman-Brown corrected). Within one match the task is constant, so any discrepancy between the two halves is measurement error.
What each variable's variance is made of
FC Seoul, 25 matches · 17 players with 4+ appearances · 261 player-matches · variance decomposition + within-match split-half reliability
Split-half reliability is 0.00 for dribble share, 0.04 for duels, 0.02 for shots and 0.24 for defensive actions. A match contains only a handful of these events, so the share is unstable. These four variables are unusable under the current measurement scheme.
81% of the match-to-match variation in advancement reproduces within the same match (75% for width). About 25% of total variance is real match-level variation.
Role is fixed across a season; within that role the position taken up moves by about 8 m per match and as much as 27 m across matches. That variation is what "task" refers to.
In a within-player cross-validation with player identity removed, usage explained individual attacking output at R² 0.117. Restricted to variables with confirmed reliability, this falls to R² 0.035.
The 0.117 was driven mainly by shot share and dribble share, while the output metric itself contains penalty-area shots and completed dribbles. The same events appear on both sides of the equation, and both variables are unusable by the reliability criterion above. The valid figure is 0.035. For context, a 2026 study reports that adding player and team embeddings does not significantly improve next-event prediction, while noting that those embeddings do carry meaningful patterns about role and team style.
Verdict — no evidence was obtained that a change of task changes outcomes. The choice of output metric may be responsible: the effect of an inverted winger appears not in that player's numbers but in the space the full-back gains. Re-measurement against team-phase output is required and is constructible from event data.
For the 11 players with at least three starts and two substitute appearances, compared on the reliable variables: advancement increased in 5 of 11 and width in 3, with mean changes of −0.28 pp and −0.77 pp. The act of being introduced does not determine how a player is used.
§04 showed the absence of role labels; §05 showed that only the positional axis is measurable. Both converge on one design. Do not infer the role from data; have the user declare it.
What is declared is not the role but the task. Within a season a regular's role is fixed (ICC 0.69), and it is rare to declare a change of position at the moment of a substitution. What is actually instructed is a task inside the role — "cutting inside from the right" — and that corresponds to the ±8.3 m positional variation measured in §05.
The query changes shape, from P(outcome | player) to P(outcome | player, declared task, context). The same design is supported by a limitation stated in the prior literature.
Fine-tuned LEM (2024) — the authors' stated limitation
"The model cannot reason about the changes a player may bring to a team's play model. It reproduces the current playing style."
A generative model reproduces observed usage; newly instructed usage lies outside the training distribution. This design supplies that input from a person.
The opponent side follows the same principle. An opponent substitution is not an object of prediction but an observed event. The system looks up the incoming player after the fact and opens response branches, so it does not require the timing prediction removed in §03.
68 minutes, touchline
⚠️ Interface mockup — the figures on screen illustrate behaviour and are not measurements
Matching the four measurement results against the two candidate feature sets:
| Measurement result | Prediction | Evaluation |
|---|---|---|
| Timing interaction not detected (§03) | required | not required |
| Type-level response not detected (§04) | required | not required |
| Task → outcome link unconfirmed (§05) | required | not required |
| Action-tendency axis unmeasurable (§05) | required | partial — replaced by positional axis |
Prediction depends on four unverified premises. Evaluation depends on zero or one. "What this substitution will produce" has no ground truth and cannot be validated, whereas "was the declared plan carried out" is an observation. Returning references is retrieval. Neither involves inference.
The loop
Declared midweek · measured in the match · scored afterwards · accumulated
The split-half reliabilities from §05 define the feature range directly.
| Axis | Split-half | Verdict | Corresponding instruction |
|---|---|---|---|
| Advancement (X) | 0.81 | ○ measurable | "Push further up" · "Drop in to receive" |
| Width (|Y−50|) | 0.75 | ○ measurable | "Cut inside" · "Stay wide" |
| Pass share | 0.42 | △ partial | "Keep it short" |
| Forward-pass share | 0.35 | △ partial | "Play it forward" |
| Long-pass share | 0.25 | ✕ not measurable | "Go long" |
| Defensive-action share | 0.24 | ✕ not measurable | "Press harder" |
| Duel share | 0.04 | ✕ not measurable | "Win the second ball" |
| Dribble share | 0.00 | ✕ not measurable | "Take him on" |
A game plan written in the language of position and direction can be evaluated. A game plan written in the language of intensity and frequency cannot, at this stage.
One response therefore has to exist on the input side — "That instruction cannot be quantified under the current measurement scheme. Please state it in positional terms." It is the Tier discipline of §09 applied to input.
Match phase (build-up, transition, defending) is not detected automatically. Accuracy from events alone is insufficient, and the user already holds the information. It becomes a declared field.
Data support for a declared task is not uniform. Across the same 17 players as §05, those with three or more matches in each of two distinct usage modes number 41–59%, depending on how finely usage is partitioned. The remainder is extrapolation.
Answering without distinguishing support means returning unsupported values in the same format as supported ones. For a user deciding within thirty seconds, that is the critical failure mode.
Tier discipline — the thickness of the evidence travels with the answer
The same question must be answered differently depending on data support
tier and support_n required fields in the response schema enforces the discipline at the design level. The answerable range narrows; within it, wrong answers do not occur.Conditioning on an opponent's usage requires repeated observations of that player.
Observation depth: our players vs opponents
FC Seoul, 25 matches · 519 player-matches (same filter as §05)
There is no time in-match to run a counterfactual generative model through hundreds of Monte Carlo samples, and by the principle set out in the HOVI write-up the computation cannot be delegated to the LLM either. Moving computation into the training week removes the constraint.
Compute midweek, retrieve during the match
When the tool is used determines what it costs to run
A declared task with its expected effect and falsifier is a labelled prediction, and can therefore be scored after the match. At roughly 100 per season, the role and task labels whose absence §04 identified accumulate without a separate collection effort.
Risk — declaring only the expected effect invites confirmation bias. The falsifier has to be declared alongside it for the record to carry verification value.
The final goal is to watch the same match together, exchange football conversation, and have that conversation used in the manager's decisions. This write-up does not reduce that goal. It fixes the point reachable now.
The staircase to the final goal
Scope at each stage, and what blocks the next
| Constraint | Why | Solvable by me |
|---|---|---|
| No off-ball data | Event data records only moments on the ball. Shape-change simulation stops here | after broadcast tracking is validated |
| Intensity and frequency language | Pressing, duels and dribbles have split-half reliability of 0.24 or below | requires a different instrument |
| Live data | Holding training GPS and receiving telemetry at the bench during a match are different product tiers | no — the club's domain |
| Stadium speech recognition | No published error rates exist for sports environments | measurable |
| Broadcast rights | Not a regulatory question but a rights question | no |
| Task → outcome proof | R² 0.035 on individual output. Re-measurement against team-phase output required | next task |
Two of the six are solvable directly. The rest require access inside a club or progress elsewhere. The scope of this stage is therefore limited to stage 1.
Scope at this stage
A tool that takes a game plan declared midweek in the language of position and direction, reports where that plan held and where it broke down after the match, and returns the relevant references alongside.
The reference sources are my own accumulation — past match events for our team, clips segmented by Dual-View, and a wiki built by connecting tactical literature to my own framework (453 documents · 9.3 MB · 12,142 internal links).
Stage 1 is also a precondition for stage 3. Repeating declaration and scoring across a season accumulates the task labels whose absence §05 identified, and those labels become the training data for task-conditioned simulation. Stage 2 opens on top of stage 1's output.
Nothing is confirmed yet. In order of verification:
Three write-ups, one system
HOVI is the conversational layer; two organs sit beneath it
The answer range of this tool ends at "was the plan carried out" and does not include "was the plan right". The latter is judgement, and sits on the other side of the line drawn in the HOVI write-up.