Für meine Social Media-Charts der Medien werte ich nicht nur die Metriken aus, die ich von den sozialen Netzwerken über eine Schnittstelle (API) erhalte – wie zum Beispiel die Fanzahlen, Interaktionen, Viralitäten, Engagements und Wachstumsraten –, sondern erstelle für jede einzelne Metrik auch einen passenden Score-Wert. Darüber erfahre ich, wie gut ein Medium in der jeweiligen Metrik und im Vergleich zu anderen Medien steht – gewertet wird von 1 bis 100 Score-Punkten. Wie die transparente Formel genau funktioniert und wie man sie beispielsweise in ein PHP-Skript einbauen kann, möchte ich in diesem Artikel erklären. Alle Formeln und Skripte sind lizenzfrei – Sie können sie ohne Quellenangabe nutzen und frei verwenden.

Ein Scoring ist erst einmal nichts weiter als ein analytisches Verfahren, um mehrere Werte in Relation zu setzen. Am bekanntesten dürften die Schulnoten von 1 bis 6 sein, denn das Notensystem ist eine Leistungsbeurteilung. Habe ich eine 2 erhalten, ist diese Note das Verhältnis zwischen der besten Zahl 1 und der schlechtesten Zahl 6. Mein mündliches und schriftliches Handeln wird in Relation zu den Vorgaben für das Beste und Schlechteste gesetzt. Auch die Schufa ist nichts weiter als das: Das fragwürdige Kreditscoring des Unternehmens klassifiziert die Werte eines Kunden in einen Bereich zwischen 1 und 1.000 Punkten. Je höher die Punktzahl, desto größer die Bonität. Mathematisch gesehen ist die Berechnung (zumindest grundsätzlich) nicht fragwürdig.

Auch in den sozialen Netzwerken spielen Score-Werte eine Rolle. Für den sogenannten Newsfeed Algorithmus von Facebook, der für den unmündigen Nutzer entscheidet, was er sehen darf, entscheidet ebenfalls ein nicht-öffentliches Scoring bzw. Ranking, ob der Post einer Facebook-Seite oder eines Freundes im Nachrichtenstrom auf der Startseite erscheint – oder halt nicht. Für die Social Media-Analyse gibt es im Web gefühlt Tausende Dienste, die einen Score-Wert aus öffentlich verfügbaren Daten berechnen. Der populärste dürfte Klout sein, der Facebook-Seiten, Twitter-Accounts und andere Präsenzen in sozialen Netzwerken in eine Skala von 1 bis 100 einsortiert. Auch der Kred-Score (0 bis 1.000 Punkte) setzt wie viele andere Social Analytics auf ein Scoring, um den Erfolg (oder wie auch immer Sie es bezeichnen möchten) in einem Wertebereich darzustellen. Social Media-Redakteuren kann es außerdem bei der Optimierung ihrer Arbeit helfen.

Leider eint diese Dienste ihr Betriebsgeheimnis um die Berechnungsformel. Die Analysen sind nicht transparent. Es ist also nicht nachvollziehbar, weshalb und wie der Score-Wert zustande kommt. Das war auch der Grund, weshalb ich – neben dem Spaß am Datenjournalismus, Programmieren und an Statistiken – ein eigenes Scoring überlegte und die Social Media-Charts, die ich seit 2011 betreibe, mit transparenten Berechnungsmodellen versehe. Anfang 2015 ging die Neuauflage der Social Media-Charts der Medien online. Mehr möchte ich darüber auch nicht verlieren, alle Details dazu finden Sie in den ausführlichen Infotabs am Ende der Seite. Wichtig war für mich jedenfalls, dass alle Daten öffentlich verfügbar sind – ich stelle alle Rohdaten zum Download bereit – und die Formeln bzw. die Ergebnisse nachvollziehbar sind.

Die Scoring-Formel

1 + ((Referenzwert – Tiefstwert) × (99 : (Höchstwert – Tiefstwert)))

Wollten wir einen Score-Wert entwickeln, der mehrere Werte in Relation setzt und diese Werte auch noch in Punkte zwischen 1 und 100 klassifiziert, müssen wir uns dieser Formel bedienen. Diese Berechnung hat zunächst einmal nichts mit der Social Media-Analyse zu tun; die Formel kann auf alles übertragen werden, bei dem mindestens zwei Zahlen vorkommen. Bei der Formel gibt es drei Variablen: Tiefstwert, Höchstwert und Referenzwert. Bei einer Zahlenfolge ist die niedrigste Zahl der Tiefstwert, die höchste Zahl logischerweise der Höchstwert und die Zahl, für die wir einen Score haben möchten, ist der Referenzwert.

Ohne auf die Formel oben zu schielen, wissen wir: Der tiefste Referenzwert hat immer den Score 1 und der höchste Referenzwert immer den Score 100. Nehmen wir als Beispiel die Zahl 1 und 100. Die Zahl 1 hat den Score-Wert 1 (da niedrigste Zahl) und die 100 (da höchste Zahl) den Score-Wert 100. Logisch. Haben wir die zwei Zahlen 2 und 100, dann hat auch die Zahl 2 den Score-Wert 1, denn sie ist in der Zahlenfolge die niedrigste. Und die Zahl 100 hat wieder den höchsten Score 100. Ein Missverständnis kann aufkommen, wenn Sie es mit Prozentrechnung durcheinanderbringen. Mit Prozenten hat das erst mal nichts zu tun.

Beispiele

Spannend wird es ab drei Zahlen. Bleiben wir beim erst genannten Beispiel 1 und 100 – und ergänzen um eine dritte Zahl 50. Während die Zahlen 1 und 100 weiter die Score-Werte 1 und 100 haben, müssen wir die 50 in die obige Formel einsetzen (die Fettmarkierten sind die eingesetzten Variablen):

1 + ((501) × (99 : (1001)))

Das Ergebnis ist wenig überraschend 50. Was passiert aber, wenn wir einen Score für einen Referenzwert benötigen und der Tiefstwert nicht identisch mit dem kleinsten Score-Wert und der Höchstwert nicht identisch mit dem höchsten Score-Wert ist? Sagen wir: Tiefstwert = 12, Höchstwert = 284, Referenzwert = 150. Sie haben noch in Erinnerung, dass der Tiefstwert (hier 12) den Score-Wert 1 hat und der Höchstwert (284) immer den Score-Wert 100 hat. Aber der Referenzwert 150 in Relation zu den beiden? Setzen Sie wieder ein:

1 + ((15012) × (99 : (28412)))

Der Score-Wert lautet gerundet 51,2. Zur Überprüfung können Sie jetzt (endlich) die Prozentrechnung kurz ins Spiel bringen. Der Tiefstwert liegt geschätzt bei eher 0, der Höchstwert bei fast 300 und der Referenzwert bei 150, also so ziemlich in der Mitte. Der Score-Wert 51,2 passt. Die Berechnung funktioniert natürlich auch, wenn Sie negative Zahlen haben. Beispiel: Tiefstwert = -500, Höchstwert = 1.438, Referenzwert = 0.

1 + ((0 – (-500)) × (99 : (1438 – (-500))))

Das Ergebnis lautet gerundet 26,5. Auch hier kurz den Pi mal Daumen-Rechner angeschmissen: Der Tiefstwert liegt bei -500, der Höchstwert bei etwa +1.500 und der Referenzwert bei +500. Die Differenz zwischen Tiefst- und Höchstwert liegt bei etwa 2.000 und der Referenzwert 500 entspricht einem Viertel dieser Differenz. Die 26,5 (von 100) müssen also auch passen.

Varianten

Sie sind natürlich nicht darauf angewiesen, ausschließlich von 1 bis 100 zu messen. Sie können beispielsweise auch einen Score von 0 bis 1.000 nehmen. Die Formel würde dann so aussehen:

(Referenzwert – Tiefstwert) × (1000 : (Höchstwert – Tiefstwert))

Dabei wurde die 99 durch 1.000 ersetzt und das vorgestellte „1 +“ entfällt, da hier der Score schon bei NULL beginnt. Mit dem vorangegangenen Beispiel (Tiefstwert = -500, Höchstwert = 1.438, Referenzwert = 0) läge der Score hier bei gerundet 258 Score-Punkten bei einer Skala von 0 bis 1.000 Score-Punkten. Die Möglichkeiten für Varianten sind vielseitig.

Social Media-Analyse

Zurück zur Social Analyse. Sie wissen nun, wie Sie die Variablen einsetzen und berechnen… letztlich, wie die Formel funktioniert. Das war’s eigentlich schon. Haben wir aber nicht nur drei Zahlen (wie in den Beispielen), sondern eine große Masse an Daten, können wir noch eine weitere Finesse einbauen, um mögliche Ausreißer zu reduzieren. Was für den Median immer gerne wieder als Beispiel herangezogen wird, ist das Insel-Modell: 10 Menschen leben auf einer Insel. Einer verdient monatlich 1 Mio Euro. Die anderen Neun schuften für nur 1 Euro. Der Durchschnittsverdienst liegt bei 100.000 Euro. Der Ausreißer mit 1 Mio Euro zieht das Durchschnittseinkommen also fragwürdig hoch, weshalb in der Statistik gerne der Zentralwert genutzt wird. Beim robusteren Median läge das Einkommen bei 1 Euro.

Auch in meiner Social Media-Analyse mit mehr als 2.400 Medien und rund 65.000 täglich berechneten Metriken stelle ich immer wieder starke Ausreißer fest. Um diese zu vermeiden, zumindest aber etwas zu reduzieren, können die Höchst- und Tiefstwerte angepasst werden. Konkret: Der Höchstwert, wie er in der Formel eingesetzt wird, ist nicht der Höchstwert in der Zahlenfolge, sondern etwas darunter. Das ist kein Muss, hat sich aber bei vielen Analyse- und Statistik-Tools für Big Data als sinnvoll etabliert. Fanpage Karma reduziert für seinen Page Perfomance Index (PPI) sogar um 10 Prozent. Dort erhält ein Social Media-Profil 100 Punkte (bei einer Skala von 0 bis 100), wenn es zu den obersten 10 Prozent gehört.

Das finde ich zu viel. Um bei meinen Social Media-Rankings der Medien Ausreißer zu minimieren, erhalten dort die untersten 1 Prozent (der Medien in einer Metrik) pauschal den schlechtesten Wert 1 und die obersten 1 Prozent (der Medien in einer Metrik) pauschal den besten Wert 100. Beispiel: Wir haben 500 Zahlen, beginnend mit 4, 5, 8, 10, 11, [490 weitere Zahlen], gefolgt von 700, 5000, 5001, 5050, 6060. Ein Prozent sind fünf Zahlen. Das bedeutet, dass die ersten Fünf (4, 5, 8, 10, 11) die schlechtesten sind und den Score 1 erhalten. Die letzten Fünf (700, 5000, 5001, 5050, 6060) sind entsprechend die besten und erhalten den Score 100. Die 490 Zahlen dazwischen werden mit der Scoring-Formel in Relation zum Tiefstwert 11 und Höchstwert 700 gesetzt.

Hinweis am Rande: Da ich nicht nur die Score-Werte, sondern auch die Rohdaten per Download zur Verfügung stelle, können Sie auch eigene Berechnungen (z.B. ohne die Reduzierung der untersten/obersten Top 1 Prozent) vornehmen. Wie schon geschrieben, es ist kein Muss, die potenziellen Ausreißer zu entfernen.

PHP-Snippets

function score($referenzwert,$tiefstwert,$hoechstwert) {

return number_format(1 + (($referenzwert - $tiefstwert) * (99 / ($hoechstwert - $tiefstwert))), 10, ',', '');

}

Mit dieser sehr simplen, bestimmt ausbaufähigen PHP-Funktion können Sie einen Score-Wert von 1 bis 100 bilden. Das Ergebnis wird mit zehn Stellen nach dem Komma ausgegeben. Setzen Sie das hierüber aufgeführte Snippet einfach in den Kopf einer beliebigen PHP-Seite ein (oder Sie speichern das Snippet in eine extra Datei und binden sie per require_once in die gewünschte Seite ein). Um den Score zu berechnen, setzen Sie an die Stelle der Auswertung:

$referenzwert = 0;

$tiefstwert = -500;

$hoechstwert = 1438;

echo score($referenzwert,$tiefstwert,$hoechstwert);

Die Variablen sind die schon von den Formeln her bekannten $referenzwert, $tiefstwert und $hoechstwert. Ihre Werte tauschen Sie nach Belieben aus. Wenn Sie mehr als diese drei Zahlen haben, müssen Sie natürlich vorher erst mal herausfinden, welcher der Tiefstwert und Höchstwert aller Zahlen ist. Falls Sie alle Zahlen in einem Array gespeichert haben, erfahren Sie das recht simpel mit min() und max():

$tiefstwert = min($allezahlen);

$hoechstwert = max($allezahlen);

Diese zwei Zeilen müssen natürlich VOR der Funktionsabfrage (siehe Snippet darüber) eingebaut werden. Das sähe dann wie folgt aus:

$referenzwert = 0;

$tiefstwert = min($allezahlen);

$hoechstwert = max($allezahlen);

echo score($referenzwert,$tiefstwert,$hoechstwert);

Skript ohne Ausreißer

Um das Scoring robuster gegen Ausreißer zu machen und die untersten 1 Prozent pauschal mit dem Score-Wert 1 und die obersten 1 Prozent pauschal mit dem Score-Wert 100 festzulegen, müssen wir etwas ergänzen:

function score($referenzwert,$tiefstwert,$hoechstwert) {

$berechnung = number_format(1 + (($referenzwert - $tiefstwert) * (99 / ($hoechstwert - $tiefstwert))), 10, ',', '');

if ($berechnung < 1) { $berechnung = 1,0000000000; return number_format($berechnung, 10, ',', ''); }

elseif ($berechnung > 100) { $berechnung = 100,0000000000; return number_format($berechnung, 10, ',', ''); }

else { return $berechnung; }

return number_format(1 + (($referenzwert - $tiefstwert) * (99 / ($hoechstwert - $tiefstwert))), 10, ',', '');

}

In der etwas überarbeiteten PHP-Funktion (im Gegensatz zu weiter oben) glätten wir lediglich die Score-Werte, die unter 1 oder über 100 liegen. Weshalb, das wird bei der Anforderung der Funktion klar. Denn zunächst müssen wir die Anzahl aller Zahlen zählen. Hier nutzen wir wieder das Array $allezahlen für die Zählung und wir müssen kurz berechnen, wie viele die obersten bzw. untersten 1 Prozent darstellen. Bei 100 Zahlen ist’s logischerweise 1, bei mehr als 2.400 Medien und um flexibel und korrekt zugleich sein zu können, müssen wir das mit einer Formel klären:

$medien_anzahl = count($allezahlen);

$hoechstwert_index = $medien_anzahl - (number_format((($medien_anzahl / 100) * 1), 0, '', '')) - 1;

$hoechstwert = $allezahlen[$hoechstwert_index];

$tiefstwert_index = number_format((($medien_anzahl / 100) * 1), 0, '', '') - 1;

$tiefstwert = $allezahlen[$tiefstwert_index];

Zum Verständnis: Bei 2.420 Medien ergeben die untersten und obersten ein Prozent = 24. $hoechstwert_index hat also den Wert 2.396 (2.420 Medien – 1 Prozent) und $tiefstwert_index hat entsprechend den Wert 24. Den neuen Höchstwert mit dem Score 100 haben also die 24 besten Medien einer Metrik. Und den neuen Tiefstwert mit dem Score 1 haben die 24 schlechtesten Medien einer Metrik. Klingt etwas kompliziert, ist es aber streng genommen nicht. Da aber nun schlussfolgernd 23 Medien weniger als den Score-Wert 1 und 23 Medien höher als ein Score-Wert von 100 haben, muss mit der überarbeiteten Funktion (siehe function score hierüber) die Ausreißer auf 1 bzw. 100 reduziert werden. Das war’s.

Fazit

Mit einem Score haben Sie die Möglichkeit, mehrere Zahlen ins Verhältnis zueinander zu setzen. Gerade wenn es darum geht, fernab von 1 bis 100 Prozent eine Art Notensystem, eine Art Ranking zu erstellen, ist die Formel perfekt. Mit den aufgezeigten Snippets für PHP können Sie sofort loslegen. Die Formeln und PHP-Snippets sind lizenfrei.