Skip to content

P0: Player Relevance Filter - Stop Generating Cards for Bench Players #157

@kevsilk597

Description

@kevsilk597

Problem

44 of 45 cards generated today are about end-of-bench players nobody has heard of: Brooks Barnhizer, Kel'el Ware, Jahmai Mashack, PJ Hall, Yuki Kawamura, Yanic Konan Niederhäuser.

Zero cards about: LeBron, Curry, Jokic, Tatum, Giannis, Luka, Embiid, Durant, Booker, Morant, Edwards.

This makes the product useless. Sports media professionals do not care about the 12th man getting 8 minutes of garbage time.

Root Cause

The workload card generator triggers on ANY player with a minutes increase, regardless of whether anyone cares about that player.

Requirements

1. Add Player Tier System

Create a player relevance scoring system:

def get_player_tier(player_name: str, player_stats: dict) -> int:
    """
    Tier 1: Stars (always generate cards)
    - Season PPG >= 20 OR
    - Season MPG >= 32 OR
    - All-Star this season OR
    - Top 50 in PER/Win Shares
    
    Tier 2: Rotation players (generate cards if signal is strong)
    - Season PPG >= 12 OR
    - Season MPG >= 24 OR
    - Starter on their team
    
    Tier 3: Bench players (only generate cards for extreme signals)
    - Season PPG >= 6 OR
    - Season MPG >= 15
    
    Tier 4: Deep bench (NEVER generate cards)
    - Everyone else
    """

2. Apply Filter to All Card Generators

In every card generation function, add tier check:

# In workload card generator
tier = get_player_tier(player_name, player_stats)
if tier == 4:
    continue  # Skip deep bench players entirely
if tier == 3 and signal_strength < 2.0:  # Need very strong signal for bench
    continue
if tier == 2 and signal_strength < 1.5:  # Need moderate signal for rotation
    continue
# Tier 1 generates with any signal

3. Prioritize Stars in Output

When selecting final cards, sort by:

  1. Player tier (Tier 1 first)
  2. Signal strength
  3. Verification score

4. Add Logging

Log every skipped card with reason:

[CARD_FILTER] Skipped workload card for Yanic Konan Niederhäuser: tier=4 (deep_bench)
[CARD_FILTER] Skipped workload card for Brooks Barnhizer: tier=3, signal=1.2 (below_threshold)

Validation

After deploy:

  • Run card generation for today
  • Verify 0 cards for players averaging <15 MPG (unless extreme outlier)
  • Verify at least 50% of cards feature players averaging >24 MPG
  • Verify star players (LeBron, Curry, Jokic, etc.) appear if they have any signal

Definition of Done

  • Player tier function implemented
  • All card generators filter by tier
  • Deep bench (Tier 4) players never get cards
  • Bench (Tier 3) players only get cards for extreme signals
  • Card output prioritizes stars over role players

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions