brackt/drizzle
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
..
meta feat: implement Expected Value System with ICM probability calculator 2025-11-17 22:19:46 -08:00
0000_short_donald_blake.sql Initial commit from create-react-router 2025-10-10 23:04:50 -07:00
0001_serious_la_nuit.sql feat: add fantasy league schema and new league routes 2025-10-11 00:07:39 -07:00
0002_tired_iron_man.sql feat: add commissioner model and league management features 2025-10-11 00:29:04 -07:00
0003_public_shadowcat.sql feat: add user model, routes, and Clerk webhook integration 2025-10-11 00:53:39 -07:00
0004_spicy_zarda.sql feat: add user model, routes, and Clerk webhook integration 2025-10-11 00:53:39 -07:00
0005_abnormal_thunderbird.sql refactor: remove guest book feature and update league settings success flow 2025-10-11 01:03:31 -07:00
0006_needy_junta.sql feat: add current season tracking and active league listing by user 2025-10-11 21:10:01 -07:00
0007_pink_nebula.sql feat: add sports and participant models with admin user functionality 2025-10-12 21:16:00 -07:00
0008_salty_trauma.sql feat: add icon support for sports with file upload and active seasons display 2025-10-13 10:30:47 -07:00
0009_fuzzy_korvac.sql refactor: remove isRequired field from season sports and templates 2025-10-13 15:00:59 -07:00
0010_complex_the_stranger.sql feat: add invite code system for league seasons with member access control 2025-10-14 12:20:36 -07:00
0011_gifted_mystique.sql feat: add username field to users and display in league views 2025-10-14 21:20:58 -07:00
0012_yielding_phil_sheldon.sql feat: add team settings route and logo URL field to teams table 2025-10-14 22:04:37 -07:00
0013_pink_the_order.sql feat: add draft order management with UI for manual and random ordering 2025-10-15 08:58:35 -07:00
0014_lowly_gateway.sql feat: add bulk participant creation and expected value field 2025-10-15 21:21:33 -07:00
0015_exotic_loners.sql feat: add draft rounds configuration to league settings 2025-10-15 21:50:02 -07:00
0016_majestic_roulette.sql feat: add draft date/time selection to league creation and settings 2025-10-15 22:02:21 -07:00
0017_calm_zarda.sql feat: add draft pick, queue, and timer models with database schema updates 2025-10-16 00:32:48 -07:00
0018_numerous_stardust.sql feat: add public draft board and simplify draft speed settings 2025-10-20 15:03:11 -07:00
0019_acoustic_ben_grimm.sql feat: add autodraft status and team connection indicators to draft grid 2025-10-21 23:22:17 -07:00
0020_slim_spacker_dave.sql feat: Add comprehensive scoring system database schema 2025-10-28 23:40:11 -07:00
0021_fair_ser_duncan.sql feat: Implement bracket expansion plan to support various tournament structures 2025-11-03 09:36:16 -08:00
0022_shiny_mother_askani.sql feat: Implement bracket expansion plan to support various tournament structures 2025-11-03 09:36:16 -08:00
0023_cynical_jack_power.sql Refactor code structure for improved readability and maintainability 2025-11-03 13:16:37 -08:00
0024_faithful_mesmero.sql feat: implement Expected Value System with ICM probability calculator 2025-11-17 22:19:46 -08:00
0025_rename_participant_ev_season_to_sports_season.sql feat: implement Expected Value System with ICM probability calculator 2025-11-17 22:19:46 -08:00
0026_add_source_odds_to_participant_ev.sql feat: implement Expected Value System with ICM probability calculator 2025-11-17 22:19:46 -08:00