Fairness messen - Eine Einführung
Fairness messen - Eine Einführung
In meinem letzten Blogpost, Data Science - Hip, cool, und sinnvoll. Eine kurze Einführung., haben wir mit Hilfe des Chi-Quadrat-Tests den Gender Gap in einem fiktiven Fachgebiet untersucht.
Dabei haben wir im Prinzip eine Fairness-Untersuchung gemacht. Wir haben untersucht, ob die Situation “momentane Beschäftigung” für die Eigenschaft “Geschlecht” als fair betrachtet werden kann. Wir hätten Fairness jedoch auch relativ zur Eigenschaft “sozio-ökonomischer Hintergrund”, “Muttersprache” oder “Alter” (und so weiter) oder zur Situation “Neueinstellungen”, “Bewerbungen im letzten Jahr”, “momentaner Bildungsstand”, “Jahre Berufserfahrung” (und so weiter) definieren können.
Es gibt also viele mögliche Definitionen für Fairness. Fairness ist immer situationsabhängig und relativ zu einer festgelegten Eigenschaft. Wenn ich Fairness untersuchen möchte, muss ich also erst eine Situation und eine Eigenschaft auswählen.
Als wir den Gender Gap in einem fiktiven Fachgebiet untersucht haben, haben wir das Chi-Quadrat als eine Metrik für Fairness verwendet. Je kleiner das Chi-Quadrat, desto kleiner der Unterschied in der Anzahl der Beschäftigten, desto größer die Fairness.
Es gibt jedoch weitere Möglichkeiten, Fairness zu messen, wenn mehr Daten zur Verfügung stehen. Im folgenden benutzen wir exemplarisch die Fairness-Metrik der Statistischen Parität.
Das Beispiel, das wir hier durchrechnen, wird auch in diesem Colab vorgeführt und erhält noch mehr Details zu den Berechnungen.
Nehmen wir an, wir arbeiten für die HR-Abteilung einer großen Firma. Die HR-Abteilung möchte überprüfen, ob sie in ihrem Einstellungsverfahren faire Entscheidungen gegenüber Personen aller Altersgruppen getroffen hat, oder ob es Verbesserungsbedarf gibt. Wir erhalten eine Liste davon, wieviele Personen, die sich im Jahr 2019 auf eine Anstellung bei uns beworben haben, welcher Altersgruppe zugehörig sind und wieviele hiervon in ihrer Bewerbung erfolgreich waren.
Altersgruppe | Anzahl gesamt | Anzahl erfolgreich |
---|---|---|
Unter 30 | 1500 | 100 |
30 - 50 | 2500 | 150 |
Über 50 | 800 | 20 |
Gesamt | 4800 | 270 |
Die “Statistische Parität”, die wir berechnen wollen, misst, ob die Wahrscheinlichkeit, eingestellt zu werden, für Personen aller Altersgruppen gleich ist. Mathematisch können wir das mit der Schreibweise P(E|B)
ausdrücken, was soviel heißt wie “Die Wahrscheinlichkeit P für das Ergebnis E unter der Bedingung B” (Siehe auch Bedingte Wahrscheinlichkeit):
P(E = "eingestellt"|B = "Unter 30")
P(E = "eingestellt"|B = "30 - 50")
P(E = "eingestellt"|B = "Über 50")
P(E|B)
berechnen wir mit der Formel P(E und B) / P(E)
. Die Wahrscheinlichkeit ist der relative Anteil am Ganzen.
Im folgenden rechne ich die Wahrscheinlichkeit P(E = "eingestellt"|B = "Unter 30")
Schritt für Schritt aus. Das Ergebnis runde ich grob.
P(E = "eingestellt"|B = "Unter 30")
= P(E = "eingestellt" und B = "Unter 30") / P (B = "Unter 30")
= (100 / 4800) / (1500 / 4800)
= 0.067
Also ist die Wahrscheinlichkeit, eingestellt zu werden, unter der Bedingung, dass man in unter 30 Jahre alt ist, 7%. Jetzt müssen wir prüfen, ob die Wahrscheinlichkeiten, eingestellt zu werden, für die anderen Altersgruppen ähnlich sind. Die anderen Wahrscheinlichkeiten sind ausgerechnet:
P(E = "eingestellt"|B = "30 - 50") = 0.06
P(E = "eingestellt"|B = "Über 50") = 0.025
Sind die Unterschiede der Wahrscheinlichkeiten signifikant und kann man deshalb auf eine unfaire Behandlung bestimmter Altersgruppen schließen?
Hierfür führen wir einen Hypothesentest aus, wie auch schon im vorherigen Blogpost.
Wir nutzen diesmal nicht Chi-Quadrat. Dieser ist nämlich in unserem Fall nicht gut geeignet, denn wir wissen nicht, wieviele angenommenen Bewerbungen wir pro Altersgruppe erwarten müssen. Stattdessen nutzen wir Welch’s t-test aus Python’s SciPy Bibliothek. Dieser vergleicht den durchschnittlichen Erfolg zweier Altersgruppen und gibt eine Teststatistik t
und eine p-value p
zurück, die wir dann mit unserem selbstdefinierten Signifikanzniveau Alpha
vergleichen. Den Test müssen wir dreimal durchführen, um jede Altersgruppe mit jeder zu vergleichen.
Die Nullhypothese ist jeweils: Der mittlere Erfolg der beiden Altersgruppen ist nicht signifikant unterschiedlich. Die alternative Hypothese ist jeweils: Der mittlere Erfolg der beiden Altersgruppen ist signifikant unterschiedlich.
Falls wir die Nullhypothese verwerfen können gilt: Ist die Teststatistik t
positiv, so ist die erste eingegebene Gruppe erfolgreicher als die zweite Gruppe. Ist die Teststatistik t
negativ, gilt das umgekehrte.
Bei einem Signifikanzniveu Alpha von 0.01
(“Bei einem in 100 Tests wird die Nullhypothese zu unrecht verworfen”) erhalten wir folgende Ergebnisse:
- Die Durchschnitte von Altersgruppe “Unter 30” und Altersgruppe “30 - 50” sind nicht signifikant unterschiedlich. (
p > Alpha
) - Der Durchschnitt von Altersgruppe “30 - 50” ist signifikant größer als der von Altersgruppe “Über 50”. (
p < Alpha, t > 0
) - Der Durchschnitt von Altersgruppe “Über 50” ist signifikant kleiner als der von Altersgruppe “Unter 30”.(
p < Alpha, t < 0
)
Ausführliche Details können im Colab zu diesem Post gefunden werden.
Wir können also folgendes schlussfolgern:
- Es kann keine Unfairness durch Verstoß gegen Statistical Parity zwischen den Altersgruppen “Unter 30” und “30 bis 50” nachgewiesen werden
- Jedoch wird die Altersgruppe “Über 50” diskriminiert: Für Personen über 50 ist es weniger wahrscheinlich, eingestellt zu werden.
- Insgesamt gesehen wird Statistical Parity also von der HR-Abteilung nicht erfüllt. Sie sollte in Zukunft darauf achten, mehr Personen einzustellen, die älter als 50 Jahre alt sind.
Wie man die Fairness einer API messen kann, die einem Namen ein “Geschlecht” oder eine “Ethnie” zuweist, habe ich im Sommersemester 2020 in meinem Independent Coursework im Rahmen meines Masterstudiums untersucht. Der Bericht und der Code sind auf GitHub verfügbar.