Fredagsfordypning uke 4

Frist for innlevering i Devilry: mandag 18. september kl 23:59

L?ringsm?l

Introduksjon

I denne oppgaven skal vi fors?ke ? avgj?re hvorvidt en person kommer til ? klare ? nedbetale et l?n eller ikke. Dette skal vi gj?re basert p? enkel informasjon om personen, slik som alder, kj?nn, utdanningsniv?, hvor mye gjeld personen har og historikk over tidligere gjeld. Vi skal se at vi enklere kan holde orden p? informasjon om disse personene ved hjelp av lister, og at ordb?ker kan gj?re oppslag av informasjon enklere.

Basert p? informasjon om en person er det selvsagt ikke mulig ? vite helt sikkert om en person kommer til ? betale gjelden sin eller ikke, men vi kan forutsi det med en viss n?yaktighet. Dersom du ?nsker kan du senere bygge videre p? dette til ? delta i en valgfri konkurranse der programmet du leverer blir kj?rt p? 30 000 tilfeller, hvor du f?r feedback p? hvor h?y treffsikkerhet det hadde p? dette datasettet. Blant de som deltar k?rer vi en vinner blant dem som hadde h?yest treffsikkerhet. Dette kommer f?rst i uke 5.

Innleveringen er delt inn i flere deloppgaver, og for hver oppgave vil du gradvis forbedre prediksjonen.

Oppgave 1: Hente inn alder, kj?nn, sivilstatus og gjeld.

Filnavn: enkel_prediksjon.py

Lag en prosedyre enkel_prediksjon som henter inn alder, kj?nn, sivilstatus og mengde gjeld (i kroner) til en person (ved hjelp av input). Lagre denne informasjonen i passende variabler.

Print en setning som beskriver personen basert p? denne informasjonen. Eksempel: "Du er en singel mann p? 30 ?r med 100 000 kr i gjeld".

Kall prosedyren en gang og test at den fungerer, dvs. at den skriver ut informasjonen som brukeren gir p? rett m?te.

Oppgave 2: Enkel prediksjon basert p? alder, kj?nn sivilstatus og gjeld

Filnavn: enkel_prediksjon.py

Vi ?nsker n? ? skrive et lite program som pr?ver ? predikere om personen vil betale gjelde sin eller ikke.

Vi antar f?lgende:

Fortsett i prodsedyren enkel_prediksjon som du skrev i forrige oppgave. Skriv if-setninger som basert p? antakelsene over vurderer om personen vil betale gjelden sin eller ikke. Basert p? dette skal det printes enten “vil betale” eller “vil ikke betale”.

Test programmet ditt med ulike verdier. Sjekk for eksempel at det printes “vil ikke betale” hvis du kj?rer programmet med singel mann p? 21 ?r med 120 000 kroner i gjeld.

Oppgave 3: Prediksjon basert p? tidligere betalingshistorikk

Filnavn: prediksjon_med_historikk.py

Lag en ny prosedyre prediksjon_med_betalingshistorikk. Hent inn alder, kj?nn, sivilstatus og mengde gjeld p? samme m?te som i oppgave 1 (du kan kopiere de linjene med kode).

Vi ?nsker n? ogs? ? hente inn betalingshistorikken fra de tre forrige m?nedene og legge denne informasjonen i en liste.

Implementer den samme prediksjonen som du skrev i oppgave 2 (du kan kopiere koden fra den prosedyren), men gj?r én endring: Prediker alltid at personen ikke vil betale hvis personen ikke har betalt minst 2 av de 3 forrige m?nedene.

Oppgave 4: Prediksjon basert p? utdanningsniv?

Filnavn: prediksjon_med_historikk.py (fortsett p? samme kode som i forrige oppgave)

Utvid prosedyren du skrev i oppgave 3 til ? ogs? hente inn utdanningsniv?. Utdanningsniv? skal v?re en streng som enten er “ukjent”, “grunnskole”, “h?yskole” eller “universitet”.

Vi ?nsker ? anta et inntektsniv? basert utdanningsniv?et til personen. Vi antar at gjennomsnittlig ?rsinntekt for de ulike utdanningsniv?ene er:

Denne informasjonen kan vi representere i en ordbok der n?kkel er utdanningsniv? og verdiene er inntekten. Opprett en slik ordbok ?verst i prosedyren prediksjon_med_betalingshistorikk. La n?klene v?re sm? bokstaver.

Skriv kode for ? lese inn utdanningsniv?et ved hjelp av input, og hent ut forventet inntekt ved ? gj?re et oppslag i ordboken.

Utvid deretter reglene dine slik at du alltid sp?r “vil betale” hvis personen er mann og har forventet inntekt som er h?yere enn 3 ganger gjelden.

Oppgave 5: Svartelistede personer

Filnavn: svartelisting.py

I noen tilfeller er ikke prediksjon n?dvendig, fordi vi allerede er ganske sikre p? hvem vi f. eks ?nsker ? tilby et l?n eller ikke.

For eksempel har banker typisk tilgang til lister over personer som ikke skal f? l?n, basert p? tidligere historikk (en slags svarteliste).

Lag en ny prosedyre bestem_l?n hvor du kun leser inn kunde-ID til en person ved hjelp av input (kunde-ID vil v?re et tall og m? konverteres til int).

Anta at du vet at f?lgende personer personer (identifsert med kunde-ID) mest sannsynlig aldri vil betale gjelden sin, og at disse ikke b?r f? l?n:

23894, 29741, 10961, 22768, 22803, 11993, 24409, 9312, 29405, 6638, 738, 29964, 11967, 13443, 11534, 26228, 6867, 23027, 29137, 14084, 452, 15594, 22765, 25487

Basert p? denne informasjon kunne du ved hjelp av if-setninger sjekket om kunde-ID-en som tastes inn er lik en av de svartelistede ID-ene, men dette vil kreve veldig mange if-else-setninger.

I stedet ?nsker vi ? lage en en mengde (set) som representerer kundene som er svartelistet. Dette kan du gj?re ved ? kopiere linjen over og legge til { og } p? hver side (se p? forelesningsslidene dersom du har glemt hvordan du lager en mengde).

Sjekk deretter i prosedyren bestem_l?n om kunde-ID-en som sendes inn matcher en av de svartelistede ID-ene (ved ? sjekke om den finnes i mengden), og print i s? fall "kan ikke f? l?n". Hvis den matcher, print "kan f? l?n".

Skriv en kommentar nederst i denne filen hvor du svarer p? f?lgende sp?rsm?l: Hvorfor passer det fint ? bruke en mengde for ? representere svartelistede kunder? Kunne man evt brukt en liste eller en ordbok?

Om innleveringen