SFSad Fantasy

Sad Fantasy Hockey Scoring v1

How scoring works

The model rewards continued deployment paired with ineffective or negative results. Higher sadness points mean worse real-world outcomes.

Skaters

Even strength uses MoneyPuck 5on5, power play uses 5on4, shorthanded uses 4on5, and all-situation totals use all. Overlapping rows are never added together.

EVProduction = 1.5 × EVGoals + EVAssists
PPProduction = 1.5 × PPGoals + PPAssists

EVWaste = EVTOI − EVProduction / position_EV_rate
PPWaste = PPTOI − PPProduction / league_PP_rate
GAX = Goals − xG
GD5 = 5v5 GoalsFor − 5v5 GoalsAgainst
SkaterSadnessPoints =
  1.575 × GP + 0.252 × EVWaste + 0.756 × PPWaste
  − 3.150 × SHPoints − 12.600 × GAX − 3.150 × GD5
  + 0.630 × MissWaste + 1.260 × BlockWaste
  + 2.100 × NetPenaltiesTaken

Negative GAX and negative 5v5 goal differential increase sadness points.

Goalies

GSAx = xGA − GA
ReboundExcess = Rebounds − ExpectedRebounds

GoalieSadnessPoints =
  0.1071 × TOI − 8.925 × GSAx + 0.5355 × ReboundExcess
  + 7.140 × ChaseProxy − 7.140 × Shutouts
  + 7.140 × RegulationLosses − 10.710 × Wins − 3.570 × OTL

A ChaseProxy is recorded when a starter plays under 55 minutes, allows at least three goals, and a teammate goalie records positive ice time. It is a deterministic proxy, not confirmation of a performance-related pull.

Negative goalie GSAx increases sadness points.

Weekly calculation

Game inputs are summed across the Monday–Sunday scoring period first. The displayed coefficients already include the 4.2 scale and, for goalies, the 0.85 position adjustment. Each displayed contribution therefore adds directly to Sadness Points. Calculations keep full precision; screens show two decimals.