brackt/app/models
Chris Parsons 79ec477a98 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
..
__tests__ feat: implement Expected Value System with ICM probability calculator 2025-11-17 22:19:46 -08:00
commissioner.ts feat: add commissioner model and league management features 2025-10-11 00:29:04 -07:00
draft-pick.ts fix: Pass database instance to isParticipantDrafted in timer context 2025-10-28 23:40:29 -07:00
draft-queue.ts feat: Refactor database connection handling in draft-related functions for improved flexibility 2025-10-26 20:35:55 -07:00
draft-slot.ts feat: add draft order management with UI for manual and random ordering 2025-10-15 08:58:35 -07:00
draft-timer.ts feat: add draft pick, queue, and timer models with database schema updates 2025-10-16 00:32:48 -07:00
draft-utils.ts fix: Pass database instance to isParticipantDrafted in timer context 2025-10-28 23:40:29 -07:00
event-result.ts feat: Add scoring event and results management with comprehensive scoring rules and standings tracking 2025-10-28 23:50:50 -07:00
index.ts feat: add draft pick, queue, and timer models with database schema updates 2025-10-16 00:32:48 -07:00
league.ts ci: reorganize workflow dependencies and remove standalone test workflow 2025-10-21 12:57:03 -07:00
participant-expected-value.ts feat: implement Expected Value System with ICM probability calculator 2025-11-17 22:19:46 -08:00
participant-result.ts feat: Implement bracket expansion plan to support various tournament structures 2025-11-03 09:36:16 -08:00
participant-season-result.ts feat: Implement season standings processing and participant result management for final standings events 2025-11-08 22:35:07 -08:00
participant.ts feat: Refactor database connection handling in draft-related functions for improved flexibility 2025-10-26 20:35:55 -07:00
playoff-match.ts feat: Implement AFL Finals bracket template and scoring logic with double-chance system 2025-11-12 23:21:22 -08:00
qualifying-points.ts feat: Implement Qualifying Points Standings component and related logic 2025-11-11 10:08:25 -08:00
scoring-calculator.ts feat: add standings page and enhance standings functionality 2025-11-13 13:24:03 -08:00
scoring-event.ts Refactor code structure for improved readability and maintainability 2025-11-03 13:16:37 -08:00
scoring-rules.ts feat: Add scoring rules editor to league settings and creation pages 2025-10-29 00:04:27 -07:00
season-sport.ts feat: Refactor database connection handling in draft-related functions for improved flexibility 2025-10-26 20:35:55 -07:00
season-template-sport.ts refactor: remove isRequired field from season sports and templates 2025-10-13 15:00:59 -07:00
season-template.ts feat: add sports and participant models with admin user functionality 2025-10-12 21:16:00 -07:00
season.ts feat: add recharts library and implement PointProgressionChart component for historical views 2025-11-14 21:18:34 -08:00
sport.ts feat: add icon support for sports with file upload and active seasons display 2025-10-13 10:30:47 -07:00
sports-season.ts feat: add bulk participant creation and expected value field 2025-10-15 21:21:33 -07:00
standings.ts feat: add recharts library and implement PointProgressionChart component for historical views 2025-11-14 21:18:34 -08:00
team.ts feat: add fantasy league schema and new league routes 2025-10-11 00:07:39 -07:00
user.ts feat: add team ownership management UI with admin controls 2025-10-21 22:15:15 -07:00