Skip to content

Scoutkick/scoutkick

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ScoutKick

ScoutKick

PyPI Python

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.


Python API

pip install scoutkick-api
from 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_clusters

REST API

Live 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

Local server

$env:PYTHONPATH="."
pip install -r backend/requirements.txt
python backend/main.py

Data is cached in backend/cache/. Populate with python backend/run_all_seasons.py.


How it works

  1. Fetch — Match data from FTC Scout GraphQL API
  2. Clean — Map scores to a 32-dim EPA vector (7 seasons: 2019–2025)
  3. Learn — EWMA loop. Each team is a SkewNormal distribution. Prediction error updates mean/variance/skewness
  4. Calibrate — Compute score baseline from match data
  5. Serve — Results stored in SQLite/PostgreSQL, served via FastAPI

License

MIT

Releases

Packages

Contributors

Languages