Zum Hauptinhalt springen

Scoring Services

Die Scoring-Services berechnen normalisierte Performance-Scores für Profile und Videos. Beide verwenden ein tier-normalisiertes System, das faire Vergleiche innerhalb von Größenklassen ermöglicht.

ProfileScoreCalculator

Location: app/Services/Scoring/ProfileScoreCalculator.php

Berechnet den Postbox Score (0-100) für Social Profiles. Der Score ist tier-normalisiert, sodass kleine Creator nicht gegen Mega-Channels konkurrieren müssen.

Public Methods

MethodParameterReturnBeschreibung
calculate()SocialProfile $profilearrayScore berechnen und Komponenten zurückgeben
determineTier()int $followersstringFollower-Tier bestimmen
getDataPointsInfo()SocialProfile $profilearrayDatenpunkt-Status (Anzahl, Status)

Score-Komponenten

KomponenteGewichtMessung
Growth40%Follower-Wachstum relativ zum Tier-Durchschnitt
Momentum30%Beschleunigung des Wachstums (2. Ableitung)
Consistency20%Regelmäßigkeit des Wachstums (geringe Varianz)
Engagement10%Plattform-spezifisch (Views/Subs bei YouTube, Likes/Follower bei Instagram)

Tier-Definitionen

TierFollower-BereichNormalisierung
micro< 10.000Innerhalb Micro verglichen
small10.000 - 99.999Innerhalb Small verglichen
medium100.000 - 499.999Innerhalb Medium verglichen
large500.000 - 999.999Innerhalb Large verglichen
mega>= 1.000.000Innerhalb Mega verglichen

Status-Lifecycle

Der Score durchläuft verschiedene Reifestufen basierend auf der Anzahl verfügbarer Datenpunkte:

StatusDatenpunkteBeschreibung
no_data0Kein Datenpunkt vorhanden
pending1-6Zu wenig Daten für verlässlichen Score
preliminary7-9Vorläufiger Score, kann noch schwanken
stable>= 10Stabiler Score mit ausreichender Datenbasis

Manual Penalty

Admins können über das Feld manual_penalty (0-100%) einen Score-Abzug verhängen:

$finalScore = $rawScore * (1 - $profile->manual_penalty / 100);

Ein Profil mit manual_penalty = 50 und einem Raw-Score von 80 erhält einen finalen Score von 40.

Berechnung im Detail

$result = [
'score' => 72, // Finaler Score (0-100)
'growth_score' => 80, // Growth-Komponente
'momentum_score' => 65, // Momentum-Komponente
'consistency_score' => 70, // Consistency-Komponente
'engagement_score' => 55, // Engagement-Komponente
'tier' => 'small', // Aktueller Tier
'status' => 'stable', // Reife-Status
'data_points' => 28, // Verfügbare Datenpunkte
'manual_penalty' => 0, // Admin-Penalty
];

Low-Priority-Profile

Für Low-Priority-Profile (unter dem Follower-Threshold, seltener gescrapt) werden angepasste Parameter verwendet:

ParameterRegulärLow-PriorityGrund
LOOKBACK_DAYS28494 Wochen — bei 3-Tage-Rotation liefert dies ~9 Datenpunkte (über MIN_DATA_POINTS=7)
MAX_DATA_GAP_DAYS58Toleranz für längere Lücken zwischen Scrapes

Die Erkennung erfolgt automatisch über $profile->isLowPriorityProfile() beim Score-Berechnen.

Abhängigkeiten

  • SocialProfile Model, SocialProfileDailyMetric Model, SocialProfileExploreMetrics Model

Verwendet von

  • CalculateProfileScores-Command (täglich 05:00 UTC), Admin Social Profiles View, Explore Profile Cards

VideoScoreCalculator

Location: app/Services/Scoring/VideoScoreCalculator.php

Berechnet den Performance-Score (0-100) für einzelne YouTube-Videos. Berücksichtigt View-Performance, Engagement, Wachstumsdynamik und Aktualität.

Public Methods

MethodParameterReturnBeschreibung
calculate()YouTubeVideo $videoarrayVideo-Score berechnen und Komponenten zurückgeben
hasShortDuration()YouTubeVideo $videoboolPrüfen ob Video ein Short ist (< 62 Sekunden)

Score-Komponenten

KomponenteGewichtMessung
View Performance40%Views relativ zum Channel-Durchschnitt und Tier
Engagement25%Like-Rate, Comment-Rate relativ zu Views
Growth20%View-Wachstumsrate in den letzten Tagen
Freshness15%Alter des Videos (neuere Videos erhalten Bonus)

Freshness-Berechnung

Video-AlterFreshness-Score
< 7 Tage100
7-14 Tage80
14-30 Tage60
30-90 Tage40
90-180 Tage20
> 180 Tage10

Shorts-Erkennung

Videos mit einer Dauer unter 62 Sekunden werden als YouTube Shorts klassifiziert. Der Score-Algorithmus berücksichtigt dies bei der View-Performance-Berechnung, da Shorts typischerweise höhere View-Zahlen aber niedrigere Engagement-Raten haben.

Return-Struktur

$result = [
'score' => 68, // Finaler Score (0-100)
'view_score' => 75, // View-Performance
'engagement_score' => 60, // Engagement-Rate
'growth_score' => 70, // View-Wachstum
'freshness_score' => 80, // Aktualität
'is_short' => false, // Shorts-Flag
];

Abhängigkeiten

  • YouTubeVideo Model, YouTubeVideoStat Model, SocialProfile Model

Verwendet von

  • CalculateVideoScores-Command (täglich), Explore Trending Videos, Video-Detailansicht