Major refactor: Fantabeto 26/27 — modular package, GBM ensemble, MILP/MCTS optimization
Phase 1: Data Engineering
- Refactored notebooks into src/{scraper,features,models,optimization,bot}
- FBref scraper with proxy rotation + Playwright Cloudflare bypass
- Fantacalcio.it integrated scraper (authenticated API + HTML fallback)
- api-football RapidAPI client for supplementary xG/xA/injuries
- RAG news pipeline: Gazzetta, Sky Sport, Di Marzio → injury/suspension/tactical extraction
- 26/27 season config: teams, scoring rules, name mappings, news sources
Phase 2: SOTA ML Architecture
- GBM Ensemble (LightGBM + CatBoost + XGBoost) with stacked blending
- Bootstrap ensemble for uncertainty quantification
- SinhArcsinh distribution head (ported from original TF Probability)
- Card classifiers (yellow/red), penalty model, goal probability (Poisson)
- Temporal GNN for player interaction modeling (crosses→goals, passes→assists)
- Optuna hyperparameter tuning with time-series CV
Phase 3: Operations Research
- Auction solver: MILP knapsack with PuLP (budget + role constraints)
- Grid Auction (Asta a Griglia): Minimax game theory bidding strategy
- Weekly lineup optimizer: MCTS maximizing win probability vs opponent
- Modificatore Difesa integration + captain selection
- Transfer market analyzer: buy-low/sell-high via xG regression to mean
- Opponent behavior modeling from historical lineage patterns
Phase 4: Agentic Workflow
- Telegram bot: auto-briefing (Friday + Sunday morning)
- Tactical briefing generator with start/sit recommendations
- GitHub Actions CI/CD: scheduled pipeline (scrape → predict → notify)
Infrastructure:
- 31 pytest unit tests (features, models, scraper, optimization)
- requirements.txt (lightgbm, catboost, xgboost, optuna, pulp, playwright, langchain)
- Makefile with install/test/lint/scrape/train/bot targets
- Jupyter notebook: 26_27_strategy.ipynb demonstrating auction + matchday 1 mockup
- Completely rewritten README.md with architecture diagram
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
.PHONY: help install test lint pipeline scrape train optimize predict bot clean
|
||||
|
||||
help:
|
||||
@echo "Fantabeto 26/27 Commands"
|
||||
@echo "========================"
|
||||
@echo "make install - Install dependencies"
|
||||
@echo "make test - Run test suite"
|
||||
@echo "make lint - Run ruff linter"
|
||||
@echo "make scrape - Scrape FBref data for 2024-26 seasons"
|
||||
@echo "make features - Build feature datasets"
|
||||
@echo "make train - Train ML models"
|
||||
@echo "make optimize - Run auction + lineup optimization"
|
||||
@echo "make predict - Generate matchday predictions"
|
||||
@echo "make pipeline - Run full pipeline (scrape -> features -> train)"
|
||||
@echo "make bot - Send Telegram briefing"
|
||||
@echo "make clean - Remove generated data files"
|
||||
|
||||
install:
|
||||
pip install -r requirements.txt
|
||||
playwright install chromium
|
||||
|
||||
test:
|
||||
python -m pytest tests/ -v
|
||||
|
||||
lint:
|
||||
ruff check src/ tests/
|
||||
|
||||
scrape:
|
||||
python -c "from src.pipeline import Pipeline; p = Pipeline(); p.scrape_fbref(['2024-2025','2025-2026'], current=True)"
|
||||
|
||||
features:
|
||||
python -c "from src.pipeline import Pipeline; p = Pipeline(); p.build_features()"
|
||||
|
||||
train:
|
||||
python -c "import pandas as pd; from src.pipeline import Pipeline; p = Pipeline(); df = pd.read_excel('data/match_dataset.xlsx'); y = df['fantavote']; X = df.drop(columns=['fantavote','vote','matchday','player','team','oppteam'], errors='ignore'); p.train_models(X,y)"
|
||||
|
||||
predict:
|
||||
python -c "from src.pipeline import Pipeline; p = Pipeline(); p.run_full_pipeline()"
|
||||
|
||||
bot:
|
||||
python -c "from src.bot.telegram_bot import TelegramBot; from src.bot.briefing import BriefingGenerator; bot = TelegramBot(); gen = BriefingGenerator(); print('Bot ready. Use send_briefing() to dispatch.')"
|
||||
|
||||
pipeline: scrape features train
|
||||
|
||||
clean:
|
||||
rm -rf data/
|
||||
find . -type d -name __pycache__ -exec rm -rf {} +
|
||||
find . -type f -name "*.pyc" -delete
|
||||
Reference in New Issue
Block a user