COMPAS#

Etter å ha fullført dette prosjektet skal studenten kunne

  • Visualisere forskjeller i undergrupper av data ved hjelp av pandas

  • Gjøre en statistisk analyse av data ved hjelp av pandas

  • Bruke en statistisk modell til å analysere data

  • Kunne identifisere ulike aspekter ved rettferdige beslutninger og ha en rettferdiggjort oppfatning av deres relative betydning. Begrunne hva som skal til for at bruk av algoritmer i rettsvesenet er rettferdig.

Hvordan bestemmer vi om en siktet skal varetektsfengsles eller om domfelte skal løslates før tiden (prøveløslatelse) eller sitte i forvaring? I disse spørsmålene er det ikke bare hva personen er dømt for som er avgjørende, men også hvilken risiko det er for at vedkommende vil forspille bevis eller stikke av (varetektfengsling) eller begå nye straffbare handlinger (prøveløslatelse og forvaring). Hvordan kan vi avgjøre slike risikoer?

For å spare tid og eliminere dommeres mulige fordommer, bruker rettsvesenet idag algoritmer til å risikovurdere personer. Slike algoritmer brukes til å avgjøre spørsmål som dem vi stilte i forrige avsnitt. Dere skal i dette prosjektet gjennomføre en del av en algoritmerevisjon (algorithmic audit) på en slik algoritme. Algoritmerevisjon kan omfatte kontrollering av flere sider av en algoritme (på flere stadier av utviklingen). I dette prosjektet skal dere kun vurdere resultatene fra en eksisterende algoritme som dere ikke har tilgang til fordi innholdet i den er en forretningshemmelighet.

Dere skal analysere COMPAS-algoritmen som idag brukes i USA til å gjøre viktige beslutninger i rettssystemet. Nettavisen ProPublica har en artikkel om hvordan denne algoritmen brukes og om hvorvidt bruken er rettferdig. De har også en artikkel som går mer i detalj på hvordan de utførte analysen. Dere skal gjøre mye av den samme analysen som ProPublica gjorde, så les begge disse og noter hvilke resultater dere mener er viktige.

Dataene ProPublica brukte i analysen, og som dere skal bruke, kan dere finne på denne Github-siden.

Vi anbefaler at dere bruker følgende artikler for å hjelpe dere med å evaluere bruk av maskinlæring til å sette karakterer. Den første er en artikkel om å gjøre algoritmerevisjon, den andre er et eksempel på en studie som vurderer en spesifikk algoritme:

  1. Brown, S., J. Davidovic, and A. Hasan, The algorithm audit: Scoring the algorithms that score us. Big Data & Society, 2021. 8(1).

  2. Obermeyer, Z., et al., Dissecting racial bias in an algorithm used to manage the health of populations. Science, 2019. 366(6464): p. 447-453.

Dere skal levere en zip-fil som inneholder hele prosjektarbeidet med en fornuftig mappestruktur. Prosjektarbeidet skal ha følgende deler:

  • Endelig rapport som PDF med relevante numeriske analyse, figurer og forklaringer som svarer på deloppgavene under. Rapporten skal skrives med en fornuftig struktur, og skal ikke følge oppgaveinndelingen under. Rapporten skal også inneholde en humanvitenskapelig diskusjon av spørsmålene som er gitt nederst i oppgaveteksten. (I mappen reports).

  • Utforskende notebooks. (I mappen notebooks)

  • Datasettet dere har brukt. (I mappen data)

  • En fil requirements.txt som lister python-pakkene som må installeres for å kunne kjøre koden i prosjektet.

Skriv både rapporten slik at den kan leses med letthet, og uten å ha lest oppgaveteksten på forhånd. Be oss gjerne om å se på rapporten i veiledningstimene.

Framgangsmåte#

Vi minner om at rapporten ikke skal følge oppgaveinndelingen under, den er der bare for å hjelpe dere med å velge en fungerende framgangsmåte.

Oppgavene under er et forslag til hvordan dere kan gjøre prosjektet. Dersom dere finner ut at dere vil gjøre noe litt annerledes er det helt greit. Pass bare på at prosjektet blir omtrent like stort i omfang som det vi har skissert, samt at dere oppfyller læringsmålene.

Koding#

a) Les inn og forstå dataene. Se hvilke kolonner som finnes og fjern kolonnene dere ikke kommer til å trenge til plottingen eller analysen. Plot:

  • hvor ofte ulike grupperinger av mennesker(kvinner, menn, hvite og svarte) gjentar forbrytelser og blir predikert å begå straffbare handlinger i framtiden (som andel, ikke totalt antall).

  • hvor ofte ulike grupper fikk ulike risikoskårer.

  • hvor ofte de som begikk nye straffbare hadlinger (og de som ikke gjorde det) fikk ulike risikoskårer, og hvordan dette ser ut hvis du kun ser på hvite eller svarte.

Hvordan leste de inn dataen i ProPublica studien?

Ikke alle dataene ble ansett til å være brukbare i ProPublica studien, så de fjernet flere datapunkter. Datasettet dere lastet ned har allerede de fleste av disse radene fjernet, men det gjenstår å fjerne de som bryter følgende krav i studien:

“If the charge date of a defendants Compas scored crime was not within 30 days from when the person was arrested, we assume that because of data quality reasons, that we do not have the right offense.”

Radene dette angår kan fjernes slik:

data = data[data["days_b_screening_arrest"] <= 30]
data = data[data["days_b_screening_arrest"] >= -30]

b) Vi definerer nå at personer med risikokategori(score_text) “High” eller “Medium” ble predikert til å ha høy risiko, og resten ikke. De som utførte en forbrytelse innen to år(two_year_recid) og ble predikert å ha høy risiko sier vi ble predikert riktig. Disse kaller vi da sanne positive for COMPAS. Finn raten av falske positive, falske negative, sanne positive og sanne negative, samt positiv prediktiv verdi (\(P(recid|high)\)) for:

  • hele befolkningen

  • kvinner

  • menn

  • hvite

  • svarte

Her må man lage funksjoner og bruke for-løkker for å ikke bli gal.

c) Det er sammenheng mellom presisjonen til COMPAS og graden av diskriminering den påfører forskjellige grupper mennesker. Bruk Bayes’ setning til å forklare hvorfor dette er tilfelle:

\[P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}\]

d) Undersøk skjevheter i COMPAS på bakgrunn av etnisitet ved å kontrollere for kjønn, alder, kriminell historie og eventuell gjentatt forbrytelse. Dere skal her gjenskape følgende resultat fra ProPublica-studien:

“Could this disparity be explained by defendants’ prior crimes or the type of crimes they were arrested for? No. We ran a statistical test that isolated the effect of race from criminal history and recidivism, as well as from defendants’ age and gender. Black defendants were still […] 45 percent more likely to be predicted to commit a future crime of any kind.”

Lag en figur som viser partial dependance for modellen for å se hvilken innflytelse de andre parametrene har, som f.eks “priors_count”.

Hvordan gjorde de det i ProPublica studien?

De trente en logistisk modell for å forutsi COMPAS algoritmen sine predisksjoner gitt etnisitet, kriminell historie og eventuell gjentatt forbrytelse. Dere lærte å implementere en logistisk modell i obligen, men vi fraråder sterkt å bruke deres egen logistiske modell i denne oppgaven. Bruk scikit-learn sin LogisticRegression modell istedet (med minst 1000 iterasjoner). For å gjenskape ProPublica sine resultater anbefaler vi å sette opp input og output til modellen som gitt i koden under. Dette er nøyaktig de samme dataene de valgte ut i studien. Vi fjerner noen av de kategoriske kolonnene slik at disse blir “standard” input til modellen når vi skal undersøke hvordan modellen reagerer på en endring av etnisitet senere. Y vil her holde verdien True for mennesker med “Medium” eller “High” risiko kategori, og False for de med “Low”.

X = data[["age_cat", "race", "sex", "priors_count", "c_charge_degree", "two_year_recid"]]
categorical_cols = ["age_cat", "race", "sex", "c_charge_degree"]
X = pd.get_dummies(X, columns=categorical_cols, prefix=categorical_cols, prefix_sep='_')
X = X.drop(["age_cat_25 - 45", "race_Caucasian", "sex_Male", "c_charge_degree_F"], axis=1)
Y = data["score_text"] != "Low"

Når den logisktiske modellen er trent på dataene har den vekter og bias som skal forutsi hvordan COMPAS gjør prediksjoner basert på input variablene vi trente modellen på. For å undersøke om den behandler kvite og svarte mennesker ulikt gjør vi følgende utregning med bias og vektene til modellen: (Merk at å få ut vekten som tilsvarer “race_African-American” ikke nødvendigvis blir så lett som i kodesnutten under, så google hvordan du henter vektene til en slik modell)

control = sigmoid( b )
racialBias = np.exp( coefs["race_African-American"] ) / (1 - control + (control * np.exp(coefs["race_African-American"])))

control er prediksjonen til modellen gitt “standard” input, de kolonnene vi fjernet tidligere (Alle vektene blir ganget med null. Hvis alle kolonnene er 0 i X, hva slags person ser vi på da?). b er her bias leddet, det må alltid med i input til sigmoiden i en prediksjon. racialBias bør ha en verdi rundt 1.45, dette gav resultatet “45 percent more likely to be predicted to commit a future crime” i studien.

Diskusjonsoppgaver#

a) Hva er de beste grunnene for å bruke COMPAS? Spesifiser hvilke formål dere har i tankene.

b) Hvordan vil en rettferdig algoritme se ut? Hvilke hensyn må den ivareta, og hvilke virkninger må den ha (og ikke ha)?

c) Hvis det finnes eksisterende urettferdigheter i samfunnet, er det mulig for en algoritme å gi rettferdige utslag?

For å besvare spørsmålene over kan det være lurt å tenke på:

  • Hva er alternativet til å bruke en modell?

  • Er rettferdighet noe vi kan ha mer eller mindre av, eller er noe enten rettferdig eller ikke?

  • Finnes det et mål på hvor rettferdig noe er? Er rate av falske positive dette? Positiv prediktiv verdi?

d) Northpointe, leverandøren av COMPAS, kom med et tilsvar til ProPublica sin studie. Her hevder Northpointe at COMPAS ikke diskriminerer arfikansk-amerikanere. Hvordan belegger de denne påstanden. Forsøk å komme til kjernen av uenigheten mellom Northpointe og ProPublica.