篮球预测仪表盘

一个结合实时数据和预测模型的篮球赛事仪表盘,提供互动地图、即时比分和胜率预测功能。

  • by RajaChaiban
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 RajaChaiban/MCP_College_Basketball

使用说明

CBB预测仪表板

NCAA男子D1大学篮球赛——实时仪表板+预测获胜概率引擎

仪表板预览

一个全栈Python应用程序,将实时大学篮球MCP服务器与交互式仪表板和游戏内获胜概率预测器相结合。在交互式美国地图上实时观看游戏,探索盒子分数并逐个游戏,并获得由集成ML模型提供支持的实时获胜概率。


特性

实时仪表盘

  • 交互式美国地图 --每场D1比赛按场地绘制,颜色编码状态(绿色=直播,灰色=决赛,蓝色=即将到来)
  • 30秒自动刷新 --实时分数自动更新
  • 游戏面板 --单击任何标记打开实时框分数并逐个播放
  • AP Top 25+所有团队侧栏 --362支D1团队可通过即时搜索按会议浏览
  • AI 聊天 --由实时数据工具(分数、统计数据、排名、比较)支持的自然语言查询
  • 会议筛选器 --将地图缩小到一个会议

预测引擎

  • 游戏中获胜概率 --使用当前分数、剩余时间和游戏时间每30秒更新一次直播百分比
  • 集成模型 --将逻辑回归(稳定锚)和XGBoost(非线性模式)与等权重相结合
  • 特性:分数差、时间比、剩余分钟数、时段
  • 培训管道 --逐个游戏快照收集历史游戏,并使用单个命令重新训练
  • 模型工件 --保存为 cbb_predictor_bundle.joblib (LR型号+XGBoost+定标器+功能列表)

MCP服务器(16个工具)

工具 说明
get_live_scores 任何日期的实时/最终得分,可按会议或前25名进行筛选
get_team 按名称查找任何团队(模糊匹配)
search_teams 按名称或会议搜索团队
get_team_roster 包含球员详细信息的完整名单
get_team_schedule 带结果的完整时间表
get_game_detail 比赛信息及得分总结
get_box_score 每位球员和球队的得分
get_play_by_play 使用时间戳逐个播放
get_rankings 美联社前25名,教练投票
get_standings 会议排名出现连胜
get_team_stats 赛季球队统计数据(PPG、FG%、RPG等)
get_player_stats 球队的个人球员统计数据
get_stat_leaders 按类别分列的国家统计领导人
compare_teams 并排团队比较
get_games_by_date 与电视信息约会的所有游戏
get_tournament_bracket 三月疯狂括号和结果

项目结构

├── src/cbb_mcp/              # MCP server (data layer)
│   ├── server.py             # Tool registrations + entry point
│   ├── config.py             # Environment-based configuration
│   ├── services/             # Business logic (games, teams, rankings, stats)
│   ├── sources/              # ESPN, NCAA, sportsdataverse, cbbpy adapters
│   ├── models/               # Pydantic data models
│   └── utils/                # Cache, rate limiter, HTTP client
├── dashboard/                # Dash web application
│   ├── app.py                # Entry point
│   ├── layout.py             # Full page layout
│   ├── components/           # Map, game panel, rankings sidebar, chat
│   ├── callbacks/            # Dash reactive callbacks
│   ├── ai/                   # AI chat agent + tool dispatcher
│   ├── data/                 # Venue coordinates for all 362 D1 schools
│   └── scripts/
│       ├── collect_historical_data.py   # Fetch play-by-play training data
│       ├── train_predictor.py           # Train + save ensemble model
│       └── build_venue_coords.py        # Geocode venue locations
├── tests/                    # 51 unit tests
├── Dockerfile
├── docker-compose.yml
└── pyproject.toml

快速开始

安装

git clone https://github.com/RajaChaiban/CBB_Predictive_Dashboard.git
cd CBB_Predictive_Dashboard
pip install -e ".[dashboard]"

配置

复制 .env.example 到 .env 并填写您的值:

cp .env.example .env

关键变量:

变量 描述
AI_API_KEY 人工智能聊天后台的API密钥
AI_MODEL 用于聊天的型号名称
CBB_DASH_PORT 仪表板端口(默认 8050)
CBB_TRANSPORT stdio 或 streamable-http

运行仪表板

python dashboard/app.py

打开 http://localhost:8050 在您的浏览器中。


预测引擎

1.收集培训数据

2025-26赛季(推荐),使用预先构建的增强训练数据:

python dashboard/scripts/train_predictor.py --input enhanced_training_data_2025_26.csv

用于自定义日期范围,先收集数据:

python dashboard/scripts/collect_historical_data.py \
  --start 2025-11-01 \
  --end 2026-02-27 \
  --output cbb_training_data_2025_26.csv

python dashboard/scripts/train_predictor.py --input cbb_training_data_2025_26.csv

⚠️ 注: 仅使用2025-26年的季节数据。大学名册在不同季节之间变化很大。

每一行都是一个游戏快照,其中包含: score_diff, momentum, strength_diff, time_ratio, mins_remaining, period,加上12个上下文功能。

输出:

  • 逻辑回归准确率+Brier评分(2025-26年为99.50%)
  • XGBoost精度+Brier评分(2025-26年为99.75%)
  • 集成准确率+Brier评分(2025-26年为99.75%)
  • cbb_predictor_bundle.joblib --已保存的模型包

3.实时预测

曾经 cbb_predictor_bundle.joblib 存在于项目根目录中,仪表板会自动加载它,并在每个实时游戏标记和游戏面板中显示获胜概率。概率每30秒更新一次实时分数刷新。

运作原理

Live Score (ESPN)
    │
    ▼
score_diff = home_score - away_score
time_ratio = elapsed_time / total_game_time
mins_remaining = minutes left in game
period = 1st half / 2nd half / OT
    │
    ▼
Logistic Regression ──┐
                       ├── average → Win Probability %
XGBoost ──────────────┘

数据源

所有来源都是免费的,不需要API密钥:

来源 它提供了什么
ESPN隐藏的API 现场得分、球队、排名、排名、时间表、方框得分
NCAA API 分数、排名、比赛详情
sportsdataverse 每场比赛的历史比赛,球队/球员的得分
cbbpy 盒子得分,逐局播放,时间表

服务器首先尝试ESPN(最全面),然后自动回退。


远程托管(HTTP)

CBB_TRANSPORT=streamable-http python -m cbb_mcp.server

# With API key authentication
CBB_TRANSPORT=streamable-http CBB_SERVER_API_KEY=your-secret python -m cbb_mcp.server

码头工人

docker build -t cbb-dashboard .
docker run -p 8000:8000 -p 8050:8050 cbb-dashboard

# Or with docker-compose
docker compose up

配置

所有配置均通过环境变量或 .env 文件:

变量 默认值 描述
CBB_TRANSPORT stdio stdio 或 streamable-http
CBB_HOST 127.0.0.1 MCP服务器绑定地址
CBB_PORT 8000 MCP服务器端口
CBB_SERVER_API_KEY (空) HTTP身份验证的承载令牌
CBB_DASH_HOST 127.0.0.1 仪表板绑定地址
CBB_DASH_PORT 8050 仪表板端口
CBB_CACHE_ENABLED true 启用/禁用缓存
CBB_CACHE_DIR .cache 磁盘缓存目录
CBB_LOG_LEVEL INFO 日志记录级别
CBB_ESPN_RATE_LIMIT 10 ESPN请求/秒
CBB_NCAA_RATE_LIMIT 5 NCAA请求/秒

发展

pip install -e ".[dev]"
pytest

51个测试,涵盖服务、模型、缓存、速率限制和源回退逻辑。


安全

  • 所有输入都经过验证,长度有限
  • HTTP身份验证使用定时安全比较
  • API密钥从未记录或在响应中返回
  • HTTP响应上限为5 MB
  • 非root Docker用户

许可证

麻省理工学院