# language: fr Fonctionnalité: Neutralisation des pénalités de skip pour abonnés En tant que système de jauges d'intérêt Je veux neutraliser les pénalités de skip pour les abonnés d'un créateur Afin de reconnaître l'affinité globale malgré des skips ponctuels contextuels Contexte: Étant donné qu'un utilisateur existe avec les jauges suivantes: | catégorie | niveau | | Automobile | 45% | | Voyage | 60% | Et qu'un créateur "CreateurA" publie des contenus tagués "Automobile" # Skip <10s - Utilisateur NON abonné Scénario: Skip rapide <10s par non-abonné - Pénalité -0.5% Étant donné que l'utilisateur n'est PAS abonné à "CreateurA" Et qu'un contenu "Podcast Auto" de "CreateurA" est tagué "Automobile" Et que la jauge "Automobile" est à 45% Quand l'utilisateur skip le contenu après 5 secondes Alors la jauge "Automobile" descend de -0.5% Et la jauge "Automobile" passe de 45% à 44.5% Et cela indique un désintérêt marqué pour ce contenu Scénario: Skip rapide <10s par non-abonné - Colonne is_subscribed=false Étant donné que l'utilisateur n'est PAS abonné à "CreateurA" Et qu'un contenu est skippé après 8 secondes Quand l'événement est enregistré dans user_listening_history Alors la colonne is_subscribed = false Et la colonne completion_rate = 0.05 (8s sur 160s) Et la colonne source = "recommendation" Et ce skip compte dans les métriques d'engagement du contenu # Skip <10s - Utilisateur ABONNÉ Scénario: Skip rapide <10s par abonné - Pénalité neutre 0% Étant donné que l'utilisateur EST abonné à "CreateurA" Et qu'un contenu "Podcast Auto" de "CreateurA" est tagué "Automobile" Et que la jauge "Automobile" est à 45% Quand l'utilisateur skip le contenu après 5 secondes Alors la jauge "Automobile" reste à 45% (pénalité 0%) Et aucune pénalité n'est appliquée Et cela reflète que l'abonnement indique une affinité globale Scénario: Skip rapide <10s par abonné - Colonne is_subscribed=true Étant donné que l'utilisateur EST abonné à "CreateurA" Et qu'un contenu est skippé après 7 secondes Quand l'événement est enregistré dans user_listening_history Alors la colonne is_subscribed = true Et la colonne completion_rate = 0.04 (7s sur 180s) Et la colonne source = "recommendation" Et ce skip NE compte PAS dans les métriques d'engagement du contenu # Calcul métriques engagement créateur Scénario: Métriques engagement - Skip d'abonné ne pénalise pas Étant donné qu'un contenu "Podcast A" de "CreateurA" a reçu: | utilisateur | abonné ? | action | source | completion_rate | | User1 | Non | Skip <10s | recommendation | 0.05 | | User2 | Oui | Skip <10s | recommendation | 0.04 | | User3 | Non | Écoute complète | recommendation | 0.90 | | User4 | Oui | Skip <10s | recommendation | 0.03 | | User5 | Non | Écoute partielle | recommendation | 0.60 | Quand le système calcule les métriques d'engagement du contenu Alors les écoutes pertinentes comptabilisées sont: | utilisateur | comptabilisé ? | raison | | User1 | ✅ Oui | Non-abonné, source pertinente | | User2 | ❌ Non | Abonné, skip contextuel | | User3 | ✅ Oui | Non-abonné, source pertinente | | User4 | ❌ Non | Abonné, skip contextuel | | User5 | ✅ Oui | Non-abonné, source pertinente | Et le total écoutes pertinentes = 3 (User1, User3, User5) Et le taux de complétion = 2 complètes (User3, User5 >80%) / 3 = 66.7% # Sources d'écoute et neutralisation Scénario: Skip d'abonné via "recommendation" - Ne compte pas Étant donné que l'utilisateur EST abonné à "CreateurA" Et qu'un contenu est recommandé via l'algorithme (source="recommendation") Quand l'utilisateur skip après 5s Alors l'écoute NE compte PAS dans "total écoutes" pour métriques Et la pénalité jauge est neutralisée (0%) Scénario: Skip d'abonné via "live_notification" - Ne compte pas Étant donné que l'utilisateur EST abonné à "CreateurA" Et que "CreateurA" publie un contenu en live Et qu'une notification live est envoyée (source="live_notification") Quand l'utilisateur skip après 6s Alors l'écoute NE compte PAS dans "total écoutes" pour métriques Et la pénalité jauge est neutralisée (0%) Scénario: Skip d'abonné via "search" - Ne compte pas (indépendamment abonnement) Étant donné que l'utilisateur EST abonné à "CreateurA" Et qu'il trouve un contenu via la recherche (source="search") Quand l'utilisateur skip après 4s Alors l'écoute NE compte PAS dans "total écoutes" (source non pertinente) Et la pénalité jauge est neutralisée (0%) Et cela s'applique à tous users (abonnés ou non) pour source="search" Scénario: Skip non-abonné via "direct_link" - Ne compte pas Étant donné que l'utilisateur N'est PAS abonné à "CreateurA" Et qu'il clique sur un lien direct partagé (source="direct_link") Quand l'utilisateur skip après 3s Alors l'écoute NE compte PAS dans "total écoutes" (source non pertinente) Mais la pénalité jauge s'applique quand même (-0.5%) pour non-abonné # Reproposition Scénario: Skip <10s non-abonné - Pas de reproposition Étant donné que l'utilisateur N'est PAS abonné à "CreateurA" Et qu'un contenu est skippé après 8 secondes Quand l'algorithme calcule les prochaines recommandations Alors ce contenu n'est jamais reproposé à cet utilisateur Car c'est un signal négatif clair de désintérêt Scénario: Skip <10s abonné - Reproposition possible Étant donné que l'utilisateur EST abonné à "CreateurA" Et qu'un contenu est skippé après 7 secondes Quand l'algorithme calcule les prochaines recommandations plusieurs jours plus tard Alors ce contenu PEUT être reproposé à cet utilisateur Car l'abonnement indique une affinité globale Et le skip peut être contextuel ("pas maintenant", "pas ce sujet") Scénario: Stockage is_subscribed dans user_content_history Étant donné qu'un utilisateur EST abonné à "CreateurA" au moment de l'écoute Quand un contenu de "CreateurA" est écouté/skippé Alors la table user_content_history enregistre: | colonne | valeur | | user_id | 123 | | content_id | 456 | | creator_id | 789 (CreateurA) | | is_subscribed | true | | completion_rate| 0.05 | | source | "recommendation" | | listened_at | 2026-02-07 10:30:00 | # Cohérence UX Scénario: Abonnement = Signal affinité fort malgré skip ponctuel Étant donné que l'utilisateur est abonné à "CreateurA" depuis 6 mois Et qu'il a écouté 50 contenus de "CreateurA" avec 90% de complétion moyenne Quand il skip 1 contenu après 5 secondes aujourd'hui Alors ce skip ponctuel ne pénalise pas: | aspect | impact | | Jauges d'intérêt user | 0% (neutre) | | Métriques engagement créateur | Ne compte pas dans total écoutes | | Reproposition future | Contenu peut être reproposé | Et cela reflète que le skip est contextuel, pas un rejet du créateur # Anti-raid naturel Scénario: Raid malveillant via liens directs - Inefficace Étant donné qu'un groupe malveillant veut nuire à "CreateurA" Et qu'ils partagent des liens directs pour inciter au skip massif Quand 1000 personnes cliquent sur le lien et skip après 2s Alors ces 1000 skips NE comptent PAS dans les métriques engagement Car source="direct_link" n'est pas une source pertinente Et "CreateurA" est protégé contre ce type de raid Scénario: Raid malveillant via recherche - Inefficace Étant donné qu'un groupe cherche à nuire à "CreateurA" Et qu'ils trouvent le contenu via recherche et skip massivement Quand 500 skips rapides arrivent via source="search" Alors ces 500 skips NE comptent PAS dans les métriques engagement Car source="search" n'est pas une source pertinente Et "CreateurA" est protégé # Cas limites Scénario: Utilisateur s'abonne pendant l'écoute d'un contenu Étant donné qu'un utilisateur N'est PAS abonné à "CreateurA" Et qu'il démarre l'écoute d'un contenu de "CreateurA" Et que is_subscribed=false est enregistré au démarrage Quand l'utilisateur s'abonne à "CreateurA" pendant l'écoute Et qu'il skip le contenu après 8 secondes Alors is_subscribed=false reste enregistré (état au moment du démarrage) Et la pénalité -0.5% s'applique (car non-abonné au démarrage) Scénario: Utilisateur se désabonne puis écoute ancien contenu Étant donné qu'un utilisateur ÉTAIT abonné à "CreateurA" Et qu'il se désabonne aujourd'hui Quand il écoute un ancien contenu de "CreateurA" demain Et qu'il skip après 6 secondes Alors is_subscribed=false (état au moment de l'écoute) Et la pénalité -0.5% s'applique Et l'écoute compte dans les métriques d'engagement # Comparaison tableaux sources Scénario: Table récapitulative sources et abonnements Étant donné les règles de comptabilisation définies Quand on résume le comportement par source et abonnement Alors le tableau complet est: | Source | Abonné ? | Skip <10s pénalise ? | Compte "total écoutes" ? | | recommendation | Non | ✅ Oui (-0.5%) | ✅ Oui | | recommendation | Oui | ❌ Non (0%) | ❌ Non | | search | Peu imp. | Variable* | ❌ Non | | direct_link | Peu imp. | Variable* | ❌ Non | | profile | Peu imp. | Variable* | ❌ Non | | history | Peu imp. | Variable* | ❌ Non | | live_notification | Non | ✅ Oui (-0.5%) | ✅ Oui | | live_notification | Oui | ❌ Non (0%) | ❌ Non | | audio_guide | Peu imp. | ❌ Non | ❌ Non | (* Variable = -0.5% si non-abonné, 0% si abonné, mais source non pertinente donc pas dans métriques)