Expected Points Added (EPA) rating system for FIRST Tech Challenge (FTC), ported from Statbotics. ScoutKick pulls match data from FTC Scout, computes EPA ratings via an EWMA learning loop, and exposes them through a REST API and Python package.
pip install scoutkick-apifrom scoutkick_api import ScoutKick
sk = ScoutKick()
print(sk.get_team(26914))
print(sk.predict(red=[26914, 32736], blue=[23400, 24599]))
print(sk.compare(teams=[26914, 32736, 23400]))
# All methods: get_seasons, get_teams, get_team, get_events,
# get_event, get_matches, get_match, predict, compare,
# get_clusters, get_complementarity, get_alliance_partners,
# get_trajectory_clustersLive at scoutkick.onrender.com — docs at /docs.
| Endpoint | Description |
|---|---|
GET /v1/teams?season=2025 |
List teams |
GET /v1/team/{team}?season=2025 |
Team EPA + match history |
GET /v1/events?season=2025 |
List events |
GET /v1/event/{code}?season=2025 |
Event detail |
GET /v1/matches?season=2025 |
List matches |
GET /v1/match/{event}/{match}?season=2025 |
Match detail |
GET /v1/predict?red=26914,32736&blue=23400,24599 |
Predict match |
GET /v1/compare?teams=26914,32736 |
Compare teams |
$env:PYTHONPATH="."
pip install -r backend/requirements.txt
python backend/main.pyData is cached in backend/cache/. Populate with python backend/run_all_seasons.py.
- Fetch — Match data from FTC Scout GraphQL API
- Clean — Map scores to a 32-dim EPA vector (7 seasons: 2019–2025)
- Learn — EWMA loop. Each team is a SkewNormal distribution. Prediction error updates mean/variance/skewness
- Calibrate — Compute score baseline from match data
- Serve — Results stored in SQLite/PostgreSQL, served via FastAPI
