Logistisk regresjon (Gjøres i timen)#

Tutorial Vi skal jobbe med denne tutorial-oppgaven i undervisningen, så denne trenger dere ikke gjøre på forhånd.

Vi kommer til å bruke mesteparten av timen på en tutorial-oppgave som skal ta dere igjennom temaene som dere skal lære i dag. Jeg kommer til å samle opp og forklare litt underveis, men målet er at dere i hovedsak skal jobbe sammen, og at jeg skal komme rundt og veilede dere. Grunnen til det er at dette er den beste måten å lære på.

I leseleksa så dere på logistisk regresjon og på hvordan man kan validere en modell. Dette skal vi nå jobbe med. Vi skal bruke logistisk regresjon til å klassifisere individer som gode eller dårlige betalere av kredittkortregningen sin.

Logistisk regresjon er en klassifiseringsmetode. Det vil si at vi ønsker å predikere kategoriske utfall. Altså utfall slik som kjønn (mann/kvinne), blodtype (A/B/AB/0) osv. Det som kjennetegner slike utfall er at de ikke enkelt kan tilordnes en numerisk verdi på en skala. Det gir ikke mening å si at blodtype B ligger midt mellom A og AB. De er bare forskjellige blodtyper. Noen ganger kan det være uklart om et utfall må være kategorisk eller om det kunne vært numerisk. Det gjelder i tilfeller der vi vet hvordan vi skal sortere kategoriene. I slike tilfeller kan det gi mening å modellere kategoriske utfall som numeriske utfall.


  1. Hvilke av følgende utfall er kategoriske og hvilke er numeriske?

  • Temperatur

  • Navn på by

  • Vindstyrke

  • Vindretning

  • Politisk parti

  • Øltype

  • Karakterer

  • Farge

  • Kjønn


  1. Plott den logistiske funksjonen (s. 134 i ITSL). Hvorfor er denne funksjonen egnet til å predikere et binært kategorisk utfall?


  1. Uforsk hvordan parametrene \(\beta_0\) og \(\beta_1\) flytter på funksjonen.


  1. Last inn default-datasettet (zenodo.org/record/6199560/files/default.csv). Plott default mot hvor mye kredittkortlån en person her (balance). Ser du noen sammenheng i dataene? Lag også histogram over balansen til dem som misligholder og dem som ikke misligholder.


  1. Bruk funksjonen np.histogram til å lage et histogram over hvem som misligholder og ikke, og bruk deretter histogramverdiene til å regne ut relativ frekvens av mislighold som funksjon av balance. Kodesnutten under hjelper deg på vei:

x = np.linspace(0, 3000, 100)
df_yes = data[data["default"] == 1]
hist_yes = np.histogram(df_yes["balance"], bins=x)[0]

  1. Prøv å finne gode verdier for parametrene \(\beta_0\) og \(\beta_1\) slik at du får tegnet en logistisk funksjon som følger dataene godt.


  1. For å slippe å implementere metoden for å gjøre logistisk regresjon på egenhånd, skal vi bruke biblioteket scikit-learn. Næremere bestemt skal vi bruke LogisticRegression fra sklearn.linear_model. Søk opp denne metoden i scikit-learn-dokumentasjonen og kjør logistisk regresjon på default-datasettet med bare balancesom prediktor.


  1. Lag en confusion matrix for å evaluere hvor mange ekte positive, ekte negative, falske positive og falske negative modellen produserer. Synes du modellen oppfører seg fornuftig?


  1. Kjør nå multippel logistisk regresjon på datasettet. Hva er viktig for om noen misligholder kredittkortlånet sitt, og ved hvilke verdier av prediktorene skjer overgangen mellom mislighold og ikke mislighold? Estimer presisjonen til modellen (hvor ofte predikerer den rett og galt?)


  1. Kjør cross-validation på den logistiske regresjonsanalysen deres. Bruk LogisticRegressionCV fra scikit-learn med 5 folds. Hvordan er presisjonen til modellen når dere analyserer på denne måten? Var forskjellen fra presisjonsmålingen på treningsdata stor

Løsningsforslag/forelesningsvideo#