Fast alles Schurken
Die gerade durch die Medien gehende Geschichte von Georg Nüßlein zeichnet, ganz egal, was an Steuerhinterziehung und Bestechung nachher übrig bleibt, jedenfalls das Bild von einem Menschen, der, während rundrum die Kacke am Dampfen ist, erstmal überlegt, wie er da noch den einen oder anderen Euro aus öffentlichen Kassen in seine Taschen wandern lassen kann.
Die Unverfrorenheit mag verwundern, nicht aber, dass Schurken in die Fraktionsleitung der CSU aufsteigen. Im Gegenteil – seit ich gelegentlich mal mit wichtigen Leuten umgehe, fasziniert mich die Systematik, mit der die mittlere Schurkigkeit von Menschen mit ihrer Stellung in der Hierarchie steil zunimmt: Wo in meiner unmittelbaren Arbeitsumgebung eigentlich die meisten Leute recht nett sind, gibt es unter den Profen schon deutlich weniger Leute mit erkennbarem Herz. Im Rektorat wird es schon richtig eng, und im Wissenschaftsministerium verhalten sich oberhalb der Sekretariate eigentlich alle wie Schurken, egal ob nun früher unter Frankenberg oder jetzt unter Bauer.
Tatsächlich ist das mehr oder minder zwangsläufig so in Systemen, die nach Wettbewerb befördern. Alles, was es für ein qualitatives Verständnis dieses Umstands braucht, sind zwei Annahmen, die vielleicht etwas holzschnittartig, aber, so würde ich behaupten, schwer zu bestreiten sind.
- Es gibt Schurken und Engel
- Wenn Schurken gegen Engel kämpfen (na ja, wettbewerben halt), haben die Schurken in der Regel bessere Chancen.
Die zweite Annahme mag nach dem Konsum hinreichend vieler Hollywood-Filme kontrafaktisch wirken, aber eine gewisse moralische Flexibilität und die Bereitschaft, die Feinde (na ja, Wettbewerber halt) zu tunken und ihnen auch mal ein Bein zu stellen, dürfte unbestreitbar beim Gewinnen helfen.
Um mal ein Gefühl dafür zu kriegen, was das bedeutet: nehmen wir an, der Vorteil für die Schurken würde sich so auswirken, dass pro Hierarchieebene der Schurkenanteil um 20% steigt, und wir fangen mit 90% Engeln an (das kommt für mein soziales Umfeld schon so in etwa hin, wenn mensch hinreichend großzügig mit dem Engelbegriff umgeht). Als Nerd fange ich beim Zählen mit Null an, das ist also die Ebene 0.
Auf Ebene 1 sind damit noch 0.9⋅0.8, also 72% der Leute Engel, auf Ebene 2 0.9⋅0.8⋅0.8, als knapp 58% und so fort, in Summe also 0.9⋅0.8n auf Ebene n. Mit diesen Zahlen sind in Hierarchieebene 20 nur noch 1% der Leute Engel, und dieser Befund ist qualitativ robust gegenüber glaubhaften Änderungen in den Anfangszahlen der Engel oder der Vorteile für Schurken.
Tatsächlich ist das Modell schon mathematisch grob vereinfacht, etwa weil die Chancen für Engel sinken, je mehr Schurken es gibt, ihr Anteil also schneller sinken sollte als hier abgeschätzt. Umgekehrt sind natürlich auch Leute wie Herr Nüßlein nicht immer nur Schurken, sondern haben manchmal (wettbewerbstechnisch) schwache Stunden und verhalten sich wie Engel. Auch Engel ergeben sich dann und wann dem Sachzwang und sind von außen von Schurken nicht zu unterscheiden. Schließlich ist wohl einzuräumen, dass wir alle eher so eine Mischung von Engeln und Schurken sind – wobei das Mischungsverhältnis individuell ganz offensichtlich stark schwankt.
Eine Simulation
All das in geschlossene mathematische Ausdrücke zu gießen, ist ein größeres Projekt. Als Computersimulation jedoch sind es nur ein paar Zeilen, und die würde ich hier gerne zur allgemeinen Unterhaltung und Kritik veröffentlichen (und ja, auch die sind unter CC-0).
Ein Ergebnis vorneweg: in einem aus meiner Sicht recht plausiblen Modell verhält sich die Schurkigkeit (auf der Ordinate; 1 bedeutet, dass alle Leute sich immer wie Schurken verhalten) über der Hierarchiebene (auf der Abszisse, höhere Ebenen rechts) wie folgt (da sind jeweils mehrere Punkte pro Ebene, weil ich das öfter habe laufen lassen):
Das Programm, das das macht, habe ich Schurken und Engel getauft, sunde.py – und lade zu Experimenten damit ein.
Zunächst das Grundmodell, in Python formuliert:
ROGUE_ADVANTAGE = 0.66 _WIN_PROB = { (False, False): 0.5, (False, True): 1-ROGUE_ADVANTAGE, (True, False): ROGUE_ADVANTAGE, (True, True): 0.5,} class Actor: def __init__(self, angelicity): self.angelicity = angelicity def is_rogue(self): return random.random()>self.angelicity def wins_against(self, other): return _WIN_PROB[self.is_rogue(), other.is_rogue()]>random.random()
Es wird also festgelegt, dass, wenn ein Schurke gegen einen Engel wettbewerbt, der Schurke mit zu 66% gewinnt (und ich sage mal voraus, dass der konkrete Wert hier qualitativ nicht viel ändern wird), während es ansonsten 50/50 ausgeht. Das ist letztlich das, was in _WIN_PROB steht.
Und dann gibt es das Menschenmodell: Die Person wird, wir befinden uns in gefährlicher Nähe zu Wirtschafts„wissenschaften“, durch einen Parameter bestimmt, nämlich die Engeligkeit (angelicity; das Wort gibts wirklich, meint aber eigentlich nicht wie hier irgendwas wie Unbestechlichkeit). Diese ist die Wahrscheinlichkeit, sich anständig zu verhalten, so, wie das in der is_rogue-Methode gemacht ist: Wenn eine Zufallszahl zwischen 0 und 1 (das Ergebnis von random.random()) großer als die Engeligkeit ist, ist die Person gerade schurkig.
Das wird dann in der wins_against-Methode verwendet: sie bekommt eine weitere Actor-Instanz, fragt diese, ob sie gerade ein Schurke ist, fragt sich das auch selbst, und schaut dann in _WIN_PROB nach, was das für die Gewinnwahrscheinlichkeit bedeutet. Wieder wird das gegen random.random() verglichen, und das Ergebnis ist, ob self gegen other gewonnen hat.
Der nächste Schritt ist die Kohorte; die Vorstellung ist mal so ganz in etwa, dass wir einem Abschlussjahrgang bei der Karriere folgen. Für jede Ebene gibt es eine Aufstiegsprüfung, und wer die verliert, fliegt aus dem Spiel. Ja, das ist harscher als die Realität, aber nicht arg viel. Mensch fängt mit vielen Leuten an, und je weiter es in Chef- oder Ministerialetage geht, desto dünner wird die Luft – oder eher, desto kleiner die actor-Menge:
class Cohort: draw = random.random def __init__(self, init_size): self.actors = set(Actor(self.draw()) for _ in range(init_size)) def run_competition(self): new_actors = set() for a1, a2 in self.iter_pairs(): if a1.wins_against(a2): new_actors.add(a1) else: new_actors.add(a2) self.actors = new_actors def get_meanness(self): return 1-sum(a.angelicity for a in self.actors)/len(self.actors)
(ich habe eine technische Methode rausgenommen; für den vollen Code vgl. oben).
Interessant hier ist vor allem das draw-Attribut: Das zieht nämlich Engeligkeiten. In dieser Basisfassung kommen die einfach aus einer Gleichverteilung zwischen 0 und 1, wozu unten noch mehr zu sagen sein wird. run_competition ist der Karriereschritt wie eben beschrieben, und get_meanness gibt die mittlere Schurkigkeit als eins minus der gemittelten Engeligkeit zurück. Diesem Wortspiel konnte ich nicht widerstehen.
Es gäbe zusätzlich zu meanness noch interessante weitere Metriken, um auszudrücken, wie schlimm das Schurkenproblem jeweils ist, zum Beispiel: Wie groß ist der Anteil der Leute mit Engeligkeit unter 0.5 in der aktuellen Kohorte? Welcher Anteil von Friedrichs (Engeligkeit<0.1) ist übrig, welcher Anteil von Christas (Engeligkeit>0.9)? Aus wie vielen der 10% schurkgisten Personen „wird was“? Aus wie vielen der 10% Engeligsten? Der_die Leser_in ahnt schon, ich wünschte, ich würde noch Programmierkurse für Anfänger_innen geben: das wären lauter nette kleine Hausaufgaben. Andererseits sollte mensch wahrscheinlich gerade in so einem pädagogischen Kontext nicht suggerieren, dieser ganze Metrik-Quatsch sei unbestritten. Hm.
Nun: Wer sunde.py laufen lässt, bekommt Paare von Zahlen ausgegeben, die jeweils Hierarchiestufe und meanness der Kohorte angeben. Die kann mensch dann in einer Datei sammeln, etwa so:
$ python3 sunde.py >> results.txt $ python3 sunde.py >> results.txt
und so fort. Und das Ganze lässt sich ganz oldschool mit gnuplot darstellen (das hat die Abbildung oben gemacht), z.B. durch:
plot "results.txt" with dots notitle
auf der gnuplot-Kommandozeile.
Wenn mir wer ein ipython-Notebook schickt, das etwa durch matplotlib plottet, veröffentliche ich das gerne an dieser Stelle – aber ich persönlich finde shell und vi einfach eine viel angenehmere Umgebung...
Anfangsverteilungen
Eine spannende Spielmöglichkeit ist, die Gesellschaft anders zu modellieren, etwa durch eine Gaußverteilung der Engeligkeit, bei der die meisten Leute so zu 50% halb Engel und halb Schurken sind (notabene deckt sich das nicht mit meiner persönlichen Erfahrung, aber probieren kann mensch es ja mal).
Dazu ersetze ich die draw-Zuweisung in Cohort durch:
def draw(self): return min(1, max(0, random.normalvariate(0.5, 0.25)))
Die „zwei Sigma“, also – eine der wichtigeren Faustformeln, die mensch im Kopf haben sollte – 95% der Fälle, liegen hier zwischen 0 und 1. Was drüber und drunter rausguckt, wird auf „immer Engel“ oder „immer Schurke“ abgeschnitten. Es gibt in diesem Modell also immerhin 2.5% Vollzeitschurken. Überraschenderweise sammeln sich die in den ersten 16 Wettbewerben nicht sehr drastisch in den hohen Chargen, eher im Gegenteil:
Deutlich plausibler als die Normalverteilung finde ich in diesem Fall ja eine …