brackt/drizzle/0024_faithful_mesmero.sql

8 lines
874 B
MySQL
Raw Normal View History

feat: implement Expected Value System with ICM probability calculator Implements Phase 5.2 of the EV system with Harville-Malmuth Independent Chip Model for calculating participant placement probabilities from futures odds. ## Key Features ### ICM Probability Calculator - Implements Harville-Malmuth method for distributing probabilities - Converts American odds to championship probabilities - Generates P(1st) through P(8th) for all participants - Column-normalized: each placement sums to 100% across all teams - Works with any number of participants (not limited to 8) ### Admin UI - Futures Odds Entry - Enter American odds (e.g., +550, -200) for championship futures - Live preview of ICM-calculated probability distributions - Displays all 8 placement probabilities - Persists odds for editing on subsequent visits - Automatic probability normalization (removes bookmaker vig) ### Database Schema Updates - Renamed participant_expected_values.season_id → sports_season_id - Updated foreign key to reference sports_seasons instead of seasons - Added source_odds field to store original futures odds - Migration 0025: Column rename and FK update - Migration 0026: Add source_odds field ### Model Layer - participant-expected-value: CRUD operations for probability distributions - Supports multiple probability sources (manual, futures_odds, elo_simulation) - Automatic EV calculation based on league scoring rules - Probability validation and normalization ### Service Layer - icm-calculator: Harville-Malmuth probability distribution - probability-engine: Odds conversion and Elo utilities (for future use) - bracket-simulator: Monte Carlo simulation (for future hybrid approach) - ev-calculator: Expected value computation from probabilities ## Technical Details - Uses exponential decay favoring top positions for strong teams - Preserves championship probability ordering in final distributions - Row sums vary (strong teams ~100%, weak teams lower) - All probabilities between 0-1, mathematically valid - Comprehensive test suite: 97 tests passing ## Future Enhancements - Hybrid approach: ICM pre-playoffs, bracket simulation during playoffs - Integration with league-specific scoring rules - Historical probability tracking for accuracy analysis 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 22:19:46 -08:00
CREATE TYPE "public"."probability_source" AS ENUM('manual', 'futures_odds', 'elo_simulation', 'performance_model');--> statement-breakpoint
ALTER TABLE "participant_expected_values" ADD COLUMN "source" "probability_source" DEFAULT 'manual';--> statement-breakpoint
ALTER TABLE "sports_seasons" ADD COLUMN "elo_calibration_exponent" numeric(3, 2);--> statement-breakpoint
ALTER TABLE "sports_seasons" ADD COLUMN "elo_min_rating" integer DEFAULT 1250;--> statement-breakpoint
ALTER TABLE "sports_seasons" ADD COLUMN "elo_max_rating" integer DEFAULT 1750;--> statement-breakpoint
ALTER TABLE "team_standings_snapshots" ADD COLUMN "actual_points" numeric(10, 2);--> statement-breakpoint
ALTER TABLE "team_standings_snapshots" ADD COLUMN "projected_points" numeric(10, 2);--> statement-breakpoint
ALTER TABLE "team_standings_snapshots" ADD COLUMN "participants_finished" integer;