Skip to content

Latest commit

 

History

History
113 lines (71 loc) · 5.58 KB

File metadata and controls

113 lines (71 loc) · 5.58 KB

Inspiration

Football clubs still talk about the pitch and the payroll as if they live on different planets. Recruitment boards celebrate goals and expected goals; finance teams stare at wage bills and amortisation schedules. Fans argue about “value,” but usually mean vibes.

We wanted a single board that answers a sharper question:

How much on-pitch production do clubs and players deliver for the wages and market prices they command?

That question sits at the intersection of sports analytics and sports business — exactly the space AQX Sports Analytics Data Bowl 3.0 encourages. PitchValue grew from that gap: not another shot map for its own sake, but a decision surface that turns performance data into buy, sell, and restructure signals.

What it does

PitchValue is an interactive football (soccer) analytics dashboard that links:

  • club wage bills and points
  • process quality via (xG - xGA)
  • finishing variance (“table luck”)
  • player contribution (goals, assists, progressive actions, defensive work, minutes)
  • market values and weekly wages

into:

  1. a club efficiency board
  2. a player fair-value radar
  3. a form + short-horizon forecast view
  4. an actions feed (buy / sell / watch / hold)

The prototype ships with a Premier League–style demo dataset so anyone can run it with zero API keys, then swap in live feeds later.

How we built it

Stack

  • React + TypeScript + Vite for a fast, shareable web prototype
  • Recharts for wage–points scatters, efficiency bars, market-vs-performance plots, and form series
  • A small in-repo analytics engine (src/lib/analytics.ts) so every score is transparent and auditable

Club efficiency

For each club we compute points productivity relative to wages, process quality, and a mild penalty for extreme finishing luck.

Let (P) be points, (W) wage bill (£M), (xG) and (xGA) expected goals for and against.

[ \text{Process} = xG - xGA ]

[ \text{Finishing luck} = (GF - GA) - (xG - xGA) ]

Wage productivity is essentially (P / W). We then blend productivity and process into a (0)–(100) efficiency score, and report a value gap:

[ \text{Value gap} = P \cdot \overline{(W/P)}_{\text{league}} - W ]

Positive gap ≈ leaner than the league wage-to-points norm; negative ≈ overpaying for current output.

Player fair value

Each player gets a performance index (PI) from box outcomes, creation, progressive actions, defensive contribution, and availability. Fair market value is an age- and position-adjusted transform of PI:

[ V_{\text{fair}} = f(\text{PI}, \text{age}, \text{position}) ]

[ \text{Premium} = V_{\text{market}} - V_{\text{fair}} ]

Relative premium tags players as undervalued, fair, or overvalued. A simple form series (last eight match contribution scores) produces a short forecast for the next window.

Product decisions

We treated the UI as part of the analysis: brand-first hero, one job per section, interactive tables tied to charts, and board-ready insight cards so judges (and non-technical readers) can see what to do, not only what happened.

Challenges we ran into

  1. Balancing realism and reproducibility. Live Transfermarkt / Opta feeds need keys, scraping, or paid access. For an open-source bowl we chose a rich offline demo dataset plus a documented path to real feeds — so the prototype always runs, and the method stays honest.

  2. Avoiding a black-box “AI valuation.” A mysterious model score doesn’t help a sporting director. We kept formulas explainable (PI → fair value → premium tag) even if that meant a simpler regression-style story.

  3. Separating process from results. Points alone punish good process and reward finishing variance. Explicitly surfacing (xG - xGA) and finishing luck forced harder product choices, but made the efficiency ranking more trustworthy.

  4. Insight quality vs. chart noise. Early versions showed every metric at once. We cut down to one composition per section and auto-generated a short action feed so impact stayed readable.

  5. Environment friction. Local Node tooling differences slowed the first scaffold; pinning a Vite 5 + React 18 stack kept the project portable for GitHub / Vercel.

What we learned

  • Sports business metrics (wages, market values) become much more useful when fused with process metrics, not only outcomes.
  • Judges and users respond to actionable framing (buy / sell / restructure) more than raw leaderboards.
  • Open-source sports analytics wins when the repo is clone → npm installnpm run dev with no secrets required.
  • Transparency matters: if you can’t write the valuation idea in a few lines of Markdown and light math, the dashboard probably won’t convince a front office either.

Accomplishments that we're proud of

  • A working, public-ready prototype centered on a real sports problem: payroll vs. pitch production
  • Interactive club and player boards with linked selection and scouting cards
  • An auto-generated decision layer, not only charts
  • Clean MIT-licensed repo structure, README submission blurb, and one-click deploy config

What's next for PitchValue

  • Plug in live FBref / StatsBomb / Transfermarkt-style feeds
  • Multi-league comparison and a simple transfer simulator
  • Injury-adjusted minutes and stronger forecast validation
  • Exportable PDF scouting packs for recruitment workflows

One-liner for Devpost: PitchValue is an open-source football analytics app that prices squad efficiency — linking wages, market values, and on-pitch process metrics into buy/sell/watch actions clubs can actually use.