Soccer Research Pipeline — Council Ruling
Date: 2026-04-01
Process: Full 5-phase council (Advisory → Anonymization → Peer Review → Chairman Synthesis → Boss Ruling)
Advisors: Opus, Sonnet, Gemini 3.1 Pro, Grok 4.20 Reasoning, gpt-oss-120b
Winner: Opus (3 of 5 peer review votes — strongest consensus)
Status: PENDING BOSS RULING on open questions
COUNCIL SUMMARY
Where Advisors Agreed
- 6 edge scanners required — 1X2 (match result), Asian Handicap, Totals (over/under goals), BTTS (both teams to score), Correct Score, Double Chance
- Bivariate Poisson for goal modeling — correlated home/away goal distributions (not independent Poisson)
- xG (expected goals) is the #1 advanced metric — from FBref/StatsBomb/Opta
- League-specific models — different leagues have vastly different goal-scoring rates and home advantage
- Team form (last 5-10 matches) with EWMA — recency-weighted performance
- Injury/suspension tracking is critical — especially for key players (GK, strikers, CBs)
- Pinnacle as sharp anchor — de-vig via Shin method for true probabilities
- Multi-league coverage — EPL, La Liga, Bundesliga, Serie A, Ligue 1, Champions League minimum
- Motivation context matters — relegation battles, title races, dead rubbers, cup rotation
- Home advantage varies by league — Bundesliga ~0.4 goals, EPL ~0.3, some leagues higher
Where Advisors Disagreed
- Correct Score distribution: Some used raw bivariate Poisson probabilities, Opus used Dixon-Coles correction for low-scoring draws (0-0, 1-0, 0-1, 1-1). Council verdict: Dixon-Coles correction is essential — standard bivariate Poisson misprices low scores.
- Asian Handicap pricing: Some treated as simple spread, Opus noted it's a continuous market requiring interpolation between quarter-lines. Council verdict: Must handle 0.25 and 0.75 handicap splits (half-win/half-push).
- Data source priority: Gemini relied on generic search, others specified FBref + Club Elo + Understat + WhoScored. Council verdict: FBref for xG data (free StatsBomb), Club Elo for historical ratings, Understat for shot maps.
Strongest Arguments (from peer review)
Opus wins with the most complete and soccer-specific design:
- Dixon-Coles correction for low-scoring draws (bivariate Poisson misprices 0-0 and 1-1)
- Asian Handicap quarter-line handling (0.25/0.75 splits)
- League-specific parameterization (separate models per league with different home advantage coefficients)
- Squad rotation detection for cup/European fixtures
- VAR impact tracking on penalty rates and goal disallowals
- Manager tactical system classification (possession-based, counter-attack, high-press)
- Comprehensive matchup card with xG form, defensive metrics, and set-piece data
Biggest Blind Spot
Gemini: Generic search queries, no soccer-specific data sources specified, no Dixon-Coles correction, no Asian Handicap quarter-line handling, thin database schema.
What Everyone Missed (from peer reviews)
- In-play market dynamics — Red cards, early goals, and injuries fundamentally change all markets mid-game. No advisor designed a live data integration layer.
- Betfair exchange data — Betfair exchange volume and price is a stronger sharpness signal than Pinnacle for soccer. Not mentioned by most advisors.
- Multi-club ownership and loan conflicts — Players on loan can't play against parent club. Same-ownership clubs may have coordinated rotation.
- Weather and pitch conditions — Heavy rain, frozen pitches, and altitude (e.g., La Paz in Copa Libertadores) affect goal scoring rates.
- Referee assignment impact — Some referees systematically award more penalties, cards, and stoppages. Need ref-specific models.
BUILD PLAN
Phase 1: Soccer Data Tables
soccer_team_stats:
- team_id, team_name, league, season
- matches_played, wins, draws, losses, goals_for, goals_against
- xg_for, xg_against, xg_diff (from FBref)
- shots_per_game, shots_on_target_per_game
- possession_avg, pass_completion_pct
- home_goals_per_game, away_goals_per_game
- home_xg_per_game, away_xg_per_game
- clean_sheet_pct, btts_pct (both teams score rate)
- set_piece_goals_pct
- Source: FBref (free StatsBomb xG)
soccer_team_form:
- team_id, date, stat_type
- last_3, last_5, last_10, season_avg
- ewma_010, ewma_015
- home_form, away_form
- goals_scored_ewma, goals_conceded_ewma
- xg_for_ewma, xg_against_ewma
soccer_club_elo:
- team_id, date, elo_rating, elo_change
- league_rank, elo_percentile
- Source: ClubElo.com (free API)
soccer_player_availability:
- team_id, date, player_id, player_name, position
- status (available/injured/suspended/doubtful/international_duty)
- injury_type, expected_return_date
- importance_score (1-10 based on minutes played and contribution)
- Source: Transfermarkt, team announcements, beat reporters
soccer_fixtures:
- fixture_id, date, league, home_team_id, away_team_id
- kickoff_time, venue, referee_id
- match_importance_home (1-10), match_importance_away (1-10)
- days_since_last_match_home, days_since_last_match_away
- cup_fixture (boolean), european_fixture_midweek (boolean)
- weather_conditions, pitch_status
soccer_referee_stats:
- referee_id, referee_name, league
- avg_fouls_per_game, avg_cards_per_game
- penalty_rate (penalties per game), var_overturn_rate
- avg_added_time
Phase 2: Distribution Models Per Market
| Market |
Distribution |
Parameters |
Notes |
| 1X2 (Match Result) |
Bivariate Poisson with Dixon-Coles |
λ_home, λ_away from xG × form × home_adv × matchup; ρ correction for low scores |
P(H) + P(D) + P(A) = 1 |
| Asian Handicap |
Derived from bivariate Poisson |
Goal difference distribution; quarter-line splits (0.25/0.75 = half-win/half-push) |
Most liquid soccer market — tightest Pinnacle margins |
| Totals (O/U) |
Derived from bivariate Poisson |
P(total goals > threshold); standard lines 2.5, 3.5 |
Combined goal distribution from bivariate model |
| BTTS |
Derived from bivariate Poisson |
P(home ≥ 1 AND away ≥ 1) = 1 - P(0,any) - P(any,0) + P(0,0) |
Highly correlated with defensive quality |
| Correct Score |
Dixon-Coles bivariate Poisson |
P(home=x, away=y) for all score combinations up to 5-5 |
Low-scoring corrections essential (ρ parameter) |
| Double Chance |
Derived from 1X2 |
P(1X) = P(H) + P(D); P(X2) = P(D) + P(A); P(12) = P(H) + P(A) |
Simple derivation — useful for lower-edge, higher-confidence bets |
Phase 3: Edge Scanners (6 scanners)
Common engine:
- Ingest Pinnacle odds (all markets)
- De-vig using Shin method (3-way for 1X2, 2-way for AH/totals/BTTS)
- Build bivariate Poisson probability matrix with Dixon-Coles
- Compare to Kalshi contract prices
- Min edge: 4 cents after Kalshi 7% fee
- Min sample: 10+ league matches for both teams this season
- Output:
{fixture_id, market, selection, model_prob, kalshi_price, edge, confidence}
Per-market unique logic:
| Scanner |
Unique Logic |
| 1X2 |
Full 3-way probabilities; draw is soccer-specific (most mispriced market in lower leagues) |
| Asian Handicap |
Quarter-line interpolation; most liquid/sharp market |
| Totals |
Weather adjustment (rain → fewer goals); team tempo (possession vs counter) |
| BTTS |
Defensive injury impact amplified; clean sheet rate is key input |
| Correct Score |
Dixon-Coles ρ correction critical; aggregate into score groups for calibration |
| Double Chance |
Derived from 1X2 scanner; useful for heavy favorites where 1X2 edge is small |
Phase 4: Matchup Card Format
MATCH: [Home] vs [Away] | [League] | [Date] [Kickoff Time]
VENUE: [Stadium] | REFEREE: [Name] (Pen/G: [rate], Cards/G: [avg])
WEATHER: [Conditions] | PITCH: [Status]
HOME TEAM: [Name] | Elo: [rating] ([rank] in league)
Form (Last 5): [W/D/L sequence] | Pts: [total/15]
Season: GF [avg] | GA [avg] | xGF [avg] | xGA [avg]
Home: GF [avg] | GA [avg] | xGF [avg] | xGA [avg]
BTTS Rate: [%] | Clean Sheet Rate: [%]
Shots/G: [avg] | SOT/G: [avg] | Possession: [avg%]
Set Piece Goals: [% of total] | Penalty Rate: [per game]
AWAY TEAM: [Name] | Elo: [rating] ([rank] in league)
Form (Last 5): [W/D/L sequence]
Season: GF [avg] | GA [avg] | xGF [avg] | xGA [avg]
Away: GF [avg] | GA [avg] | xGF [avg] | xGA [avg]
[Same fields as home]
KEY ABSENCES:
Home: [Player (position) — reason — importance: X/10]
Away: [Player (position) — reason — importance: X/10]
MOTIVATION:
Home: [Title race / Relegation / Mid-table / Cup rotation]
Away: [Same]
Days Since Last Match: Home [n] | Away [n]
Midweek European: Home [Y/N] | Away [Y/N]
H2H (Last 5 meetings):
[Date: Score, Date: Score, ...]
Home Wins: [n] | Draws: [n] | Away Wins: [n]
INTELLIGENCE:
[CRITICAL/MODERATE/CONTEXT findings]
Phase 5: Dashboard
- Daily fixtures: All matches with market edge counts, key absences, motivation flags
- Match drill-down: Full matchup card + all 6 market edges + probability matrix + score grid
- League overview: League-by-league standings, form tables, xG rankings
- Injury board: All key absences across leagues with impact scores
- Edge alerts: Sorted by magnitude, filterable by market type and league
- P&L tracker: By league, by market type, by edge bucket, Brier scores
- Correct Score grid: Visual probability matrix for selected match
OPEN QUESTIONS FOR BOSS RULING
League coverage scope: Start with Big 5 European leagues + Champions League? Or include MLS, Eredivisie, Liga Portugal, Scottish Premiership?
Dixon-Coles ρ parameter: Council recommends this correction for correct score pricing. Requires fitting from historical data (~2 seasons). Confirm?
Asian Handicap quarter-lines: These are complex (half-win/half-push on 0.25/0.75 lines). Build full quarter-line pricing now or start with whole/half lines only?
FBref xG data: Free StatsBomb xG via FBref. Should we also consider paid Opta/StatsBomb feeds for real-time, or is FBref sufficient?
In-play integration: Council identified this as a gap. Should we design pre-match only (like other desks) or include basic in-play triggers (red card, early goal)?
Correct Score scanner: Very high variance, low hit rate. Worth building, or focus on 1X2/AH/totals/BTTS first?
COUNCIL METADATA
| Detail |
Value |
| Council date |
2026-04-01 |
| Advisory responses |
5 (all completed) |
| Peer reviews |
5 (all completed) |
| Strongest advisor |
Opus (3/5 votes — strongest consensus) |
| Runner-up |
Grok (1/5), Gemini (1/5) |
| Biggest blind spot |
Gemini (2/5 votes) |
| Full council data |
/home/ubuntu/edgeclaw/data/councils/2026-04-01/soccer-research/ |
Source: ~/edgeclaw/results/panel-results/soccer-research-ruling.md