Skip to content

feat(reco): cold-start, decay, MMR, anti-genre, reasons, eval + full … - #75

Merged
Athenox14 merged 1 commit into
masterfrom
claude/pensive-pascal-PENgR
Jun 3, 2026
Merged

feat(reco): cold-start, decay, MMR, anti-genre, reasons, eval + full …#75
Athenox14 merged 1 commit into
masterfrom
claude/pensive-pascal-PENgR

Conversation

@Athenox14

Copy link
Copy Markdown
Owner

…signal coverage

Implements the 10 proposed algorithm improvements and ensures every tracked profile field actually influences scoring.

New module server/utils/recoScoring.ts (scoreCandidate + applyMMR):

  • calibrated 0-100 match score with labeled contributions
  • localized 'why' reasons surfaced on MediaCard (fr/en/de reco.reason.*)
  • negative-keyword / anti-genre / anti-actor / anti-director demotion
  • genre x moment + genre x month (seasonality) terms
  • sessions-to-finish effort signal; household/co-viewing kids sub-profile blend
  • deriveUserStyle() consumes 100% of profileData fields (global biases)
  • MMR diversity re-ranking (genre/collection similarity)

youMightAlsoLike rewrite (media.ts):

  • cold-start trending/popular fallback rail
  • epsilon-greedy exploration (~15% of slots, outside top genres)
  • MMR re-rank; reasons + 0-100 matchScore exposed
  • reads per-title stats from cached materialized snapshot (off hot path)

analyticsEngine.ts:

  • applyRecencyDecay() — ~75d half-life decay of all taste maps (decayAt)
  • genreMonth seasonality recording; household kids/adult sub-profiles + co-viewing

mediaStatsEngine.ts: getAllMediaStatsCached() materialized 60s cache.

recoEval.ts + analytics.evaluateReco (admin): offline precision@k / recall@k / NDCG@k / MRR harness for objective weight tuning.

Docs updated (recommendation-algorithm.md, WHATS_WATCHED.md).

https://claude.ai/code/session_01RF3jY6P1ySdMQzuv97NFtL

…signal coverage

Implements the 10 proposed algorithm improvements and ensures every tracked
profile field actually influences scoring.

New module server/utils/recoScoring.ts (scoreCandidate + applyMMR):
- calibrated 0-100 match score with labeled contributions
- localized 'why' reasons surfaced on MediaCard (fr/en/de reco.reason.*)
- negative-keyword / anti-genre / anti-actor / anti-director demotion
- genre x moment + genre x month (seasonality) terms
- sessions-to-finish effort signal; household/co-viewing kids sub-profile blend
- deriveUserStyle() consumes 100% of profileData fields (global biases)
- MMR diversity re-ranking (genre/collection similarity)

youMightAlsoLike rewrite (media.ts):
- cold-start trending/popular fallback rail
- epsilon-greedy exploration (~15% of slots, outside top genres)
- MMR re-rank; reasons + 0-100 matchScore exposed
- reads per-title stats from cached materialized snapshot (off hot path)

analyticsEngine.ts:
- applyRecencyDecay() — ~75d half-life decay of all taste maps (decayAt)
- genreMonth seasonality recording; household kids/adult sub-profiles + co-viewing

mediaStatsEngine.ts: getAllMediaStatsCached() materialized 60s cache.

recoEval.ts + analytics.evaluateReco (admin): offline precision@k / recall@k /
NDCG@k / MRR harness for objective weight tuning.

Docs updated (recommendation-algorithm.md, WHATS_WATCHED.md).

https://claude.ai/code/session_01RF3jY6P1ySdMQzuv97NFtL
@Athenox14
Athenox14 merged commit 27c2bb9 into master Jun 3, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants