Skip to content

feat(reco): tiered intent scores, TF-IDF genres, completion prediction, seen-proxy filter, household strict - #76

Merged
Athenox14 merged 1 commit into
masterfrom
claude/wizardly-tesla-cD6iV
Jun 4, 2026
Merged

feat(reco): tiered intent scores, TF-IDF genres, completion prediction, seen-proxy filter, household strict#76
Athenox14 merged 1 commit into
masterfrom
claude/wizardly-tesla-cD6iV

Conversation

@Athenox14

Copy link
Copy Markdown
Owner

Résumé

5 améliorations au moteur de recommandation.

1. Scores de genre par niveau d'intention (analyticsEngine.ts)

Trois nouvelles maps dans preferences au lieu d'un compteur unique :

  • genreIntentScores — WATCHLIST_ADD, MEDIA_LIKE, WATCH_COMPLETE
  • genreEngageScores — WATCH_START, MEDIA_PLAY_INTENT, MEDIA_DETAIL_ENGAGEMENT (>5s)
  • genreBrowseScores — HOVER, MEDIA_VIEW, CARD_CLICK et tout le reste

genreScores reste inchangé. Les anciens profils basculent automatiquement sur le chemin fallback.

2. Pondération IDF des genres (recoScoring.ts + mediaStatsEngine.ts)

  • getCatalogGenreFreqs() calcule la fréquence de chaque genre dans le catalogue (cache 30 min).
  • Le score genre est multiplié par log2(1 + 1/freq) plafonné à 3.5×.
  • Résultat : Aventure (55% du catalogue) pèse ~1.1× ; Guerre (2%) pèse ~3.5×.

3. Prédiction de complétion (recoScoring.ts)

Nouveau signal completionRisk / completionFit :

  • avgCompletionRate × bucket runtime → pénalise long/epic si l'utilisateur abandonne systématiquement
  • Heure ≥ 22h ou < 2h → pénalité supplémentaire sur les épics

4. Filtre hard "déjà vu" (media.ts)

Exclut les candidats où ≥2 des 3 premiers acteurs ont un actorScore ≥ p75 du profil. Proxy de visionnage passé non tracké.

5. Household strict (recoScoring.ts)

Quand lastClass === 'adult' et que ce n'est pas un moment famille, le blend kids est à zéro absolu.

Test plan

  • Profil sans genreIntentScores (ancien) utilise le fallback genreScores
  • getCatalogGenreFreqs retourne des fractions correctes
  • likelySeen ne filtre rien quand actorP75 < 5 (profil froid)
  • Session adulte en soirée ne remonte plus de contenu Animation/Familial via household

https://claude.ai/code/session_01XcJo4UywxcJC2XmiRSy1Wm


Generated by Claude Code

…prediction, seen-proxy filter, household strict mode

1. analyticsEngine: track genreIntentScores / genreEngageScores / genreBrowseScores
   separately so watchlist/like/complete carry more weight than hover/browse.
2. recoScoring: use tiered genre maps when populated (intent×10, engage×4, browse×2);
   apply IDF weighting via catalogGenreFreqs so ubiquitous genres (Aventure, Comédie)
   are dampened relative to rare discriminating ones (Guerre, Histoire).
3. recoScoring: completion prediction — penalise long/epic content when avgCompletionRate
   is low, boost short content for poor completers, add late-night epic penalty.
4. media.ts: hard pre-filter for "probably already seen" titles using 75th-percentile
   actor score threshold (≥2 of top-3 cast qualify → skip candidate).
5. recoScoring: household strict — when lastClass='adult' and not a family moment,
   suppress kids genre blend entirely (zero, not just scaled down).
6. mediaStatsEngine: getCatalogGenreFreqs() with 30-min cache for IDF computation.

https://claude.ai/code/session_01XcJo4UywxcJC2XmiRSy1Wm
@Athenox14
Athenox14 merged commit 424ce9f into master Jun 4, 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