Kobler man datalogi med matematik og domænespecifik viden har man det, vi på moderne sprog kalder Machine Learning. Machine Learning er et underområde til kunstig intelligens, som grundlæggende handler om at udnytte den enorme regnekraft, vi har til rådighed på moderne computere til at genkende mønstre i data. Der findes et hav af definitioner på, hvad Machine Learning præcis er, og hvordan det adskiller sig fra kunstig intelligens. Den korteste og mest præcise definition jeg kunne finde var dog:

“Machine learning is the science (and art) of programming computers so they can learn from data,” af Aurélien Géron

Machine Learning er et uhyre stærkt værktøj til at løse problemer i din virksomhed. Sammen med statistiske modeller kan man f.eks. svare på spørgsmål som:

  • Hvad er sandsynligheden for, at kunde X opsiger sit abonnement? (churn)
  • Hvad er sandsynligheden for, at besøgende X på min webshop køber en vare ?
  • Genkende tekst fra et håndskrevent dokument
  • Genkende ansigter på billeder
  • Klassificere objekter på billeder eller videoer

Du kan sikkert selv komme på eksempler, hvor matematiske modeller kan gavne netop din forretning! Hvis ikke, så læs videre – måske vil det stå mere klart for dig til sidst i artiklen.

I dette indlæg vil jeg vise dig, hvordan du kan træne en klassifikationsmodel til at forudsige om en bankkunde vil købe et nyt produkt eller ej. Responsevariablen er binær (0 eller 1), hvor 1 betyder at kunden har købt produktet. Denne type model falder ind under kategorien supervised learning, da vi baserer modellen på data, hvor vi allerede kender udfaldet. Modellen kan derefter bruges til at forudsige om en ny kunde (ikke allerede kunde i banken) vil købe produktet eller ej. Datasættet stammer fra UCI Machine Learning Repository og kan hentes gratis.

Hvis du ikke allerede har erfaring med Machine Learning eller andre statistiske modeller anbefaler jeg, du læser op på terminologien – Wikipedia er et helt fint sted at starte.

Hvorfor er Machine Learning svært?

En god statistikker, der er mester i at bygger Machine Learning modeller, besidder 3 overordnede færdigheder …

  1. Han kan finde ud af at programmere og er grundlæggende god til at benytte en computer. Han programmerer gerne i R eller Python og har tidligere brugt en af disse sprog til at bygge simple regressionsmodeller.
  2. Han er god til at junglere med tal og ved, hvordan man udregner en forventet værdi af en stokastisk variabel. Han har typisk læst en uddannelse på Danmarks Tekniske Universitet, Københavns Universitet eller IT universitetet.
  3. Han har domænespecifik viden. Dvs. han ved noget om det emne, han er i gang med at modellere. I dette tilfælde vil det kræve, at han ved noget om bankforretning og marketing.

Hvis du skulle være i tvivl, er ovenstående 3 egenskaber svære at stoppe ind i hovedet på bare én person. Ofte finder man folk med kompetencer indenfor 1 eller måske 2 af ovenstående punkter. Alternativt skal man som virksomhed ansætte 3 personer, der hver dækker sit kompetenceområde eller søsætte projekter på tværs af afdelinger.

Nye muligheder

Da potentialet for Machine Learning modeller er kæmpe men kravene til virksomhedens kompentencer ligeledes er store, har AWS sat sig for at lette processen. AWS Machine Learning er et produkt henvendt til dem, der ikke besidder de tekniske kompetencer (1) og muligvis heller ikke er super dygtige med tal.

AWS Machine Learning hjælper dig med at bygge klassifikations- og regressionsmodeller ved at klikke dig gennem et interface og dermed undgå at skrive koder eller andet besværligt.

Alt hvad AWS udvikler er henvendt til virksomheder og designet til at kunne klare ufattelige datamængder. AWS har flere produkter i Machine Learning feltet, men det vi skal kigge på i dag, er klart det nemmeste at gå til. Du kan læse om alle produkterne her.

Eksplorativ Analyse

For at øge den domænespecifikke forståelse kigger vi på datasættet i AWS QuickSight. AWS Quicksight er et dashboard værktøj, der bruges til at lave simple grafer og tabeller. I Machine Learning feltet arbejder man som oftes med store datamængder, som ikke lige umiddelbart kan hentes ind i et regneark. Væn dig derfor til at bruge et visualiseringsværktøj, der kan håndtere store datamængder og bliv fortrolig med det. Jeg kan anbefale AWS Quicksight eller Tableau, kan du programmere er matplotlib til Python også godt.

Response variablen

Response variablen hedder “y” og angiver, om en kunde har købt det pågældende produkt (1) eller ikke købt produktet (0). Mange Machine Learning modeller foretrækker, at der er lige mange af hver kategori. Dette er ikke tilfældet i dette datasæt, som du kan se på søjlediagrammet, er der 4640 (11.3%), som har købt produktet, og 36.548 (88,7%) som ikke har købt produktet.

Samme figur kan findes i AWS Machine Learning under fanen Target Distribution.

At data ikke er i balance gør, at modellen har nemmere ved at genkende de kunder, der ikke køber produktet. Lad os se, om det bliver et problem i denne model.

Den nemme tabel

Nogle gange skal man ikke gøre det mere besværligt, end det er. Tabellen ovenfor viser gennemsnitsværdier for dem, der ikke køber, og dem der køber. Der er tydeligvis ikke stor forskel på alderen, så umiddelbart er det svært at adskille købere og ikke-købere på baggrund af alder.

Gennemsnittet for campaign er dog 28% højere for dem, der ikke køber. Det tyder altså på, at de kunder, der ønsker at købe produktet, køber inden, de er blevet kontaktet alle de gange, som egentlig var tiltænkt.

Duration er en meget indflydelsesrig variabel og angiver længden (sekunder) på det marketingsopkald, bankens medarbejdere har lavet til kunden for at sælge produktet. Kunder, der vil købe produktet, snakker væsentligt længere med bankens medarbejdere, end dem der ikke er interesserede.

nr_employed angiver antal medarbejdere i banken, og previous antal gange kunden har været kontaktet inden kampagnen startede.

Beskrivelse af alle variable kan findes her.

Fordelingen af Civilstand

Egentlig er et BoxPlot bedre til at illustrere fordelingen af sådanne kategoriske variable. Så vidt vides, er det desværre ikke muligt at lave boxplots i Quicksight – giv gerne lyd, hvis du ved hvordan!

Figuren afslører en anelse flere singler blandt dem, der køber produktet og færrere, som er gift. Måske er produktet særlig attraktivt, hvis man er alene…

Efter at have studeret data yderligere og tegnet lidt ekstra grafer føler jeg nu at have forstået data godt nok til at kunne importere det i AWS Machine Learning.

Var dette et virkeligt scenarie og var modellen forretningskritisk ville det være nødvendigt at bruge meget mere tid på eksplorativ data analyse. Undersøgelser viser desuden at op i mod 70% af statistikkeres tid går med data forberedelse. Heldigvis klarer AWS Machine Learning meget for en og måske bør man ikke være lige så nøjregnene som hvis man byggede modellen fra bunden.

Lad os hoppe videre og begynde og arbejde med AWS Machine Learning. Det var trods alt det du kom herind for …

Importer Data

Der er to muligheder for at hente data ind i AWS Machine Learning; du kan importere CSV filer fra S3 eller hente data direkte fra AWS Redshift. I langt de fleste tilfælde skal du vælge S3, hvor du på forhånd har uploadet en csv fil. Aner du ikke, hvad S3 er eller hvordan man uploader filer dertil, skal nok hive fat i din IT-medarbejder.

Bankdatasættet er allerede gjort tilgængligt i en S3 bucket af AWS, og du skal blot kopiere stien til filen ind i feltet: “S3 Location”. Giv også datasættet et opfindsomt navn og tryk derefter “Verify”. AWS tjekker nu filens gyldighed, og vi ser, at den fylder 4.7 mb! Tryk “Continue”.

Det er tid til at vælge hvilke kolonner/variable, der skal indgå i din model. AWS gætter automatisk på datatype, men opfordrer dig til at rette hver enkelt kolonne, hvis datatyperne er forkerte.

Øverst ser vi “y” variablen, som er den, der angiver om en kunde har købt et produkt eller ej. Den er binær og kan tage værdierne 0 eller 1. Når alt er i sin skønneste orden, trykker du videre.

Næste trin er trivielt og handler bare om at fortælle hvilken variabel der skal predikteres. Det er selvfølgelig “y”. Tryk videre…

Øv endnu et kedeligt trin. AWS spørger blot om hver række har et unikt id. Det er ikke tilfældet i dette datasæt, så bare kom videre i en fart.

Det er nu tid til at vælge de indstillinger, der skal kendetegne modellen. For udfordringens skyld har jeg valgt en custom model. Er du helt nybegynder i dette virvar, anbefaler jeg blot, du vælger Default. AWS plejer at være rigtig gode til at vælge fornuftige standardværdier, som passer i langt de fleste tilfælde.

I næste trin er det muligt at modificere datasættet ved hjælp af en opskrift. Jeg lader blot tingene stå, som de er og trykker videre.

Efter at have trykket os igennem en masse sider med spørgsmål, kommer vi endelig til fanen: “Advanced Settings”. Tingene er egentligt fine, som de er, men lad os ændre “shuffle type” fra none til auto.

Det er god praksis at plukke tilfældigt fra træningsdatasættet i stedet fra at tage fra toppen og ned. Hvis man f.eks. har sorteret sit datasæt, kan det ske, at kun y = 1 ligger i toppen og modellen uheldigvis aldrig får andet at se.

Bemærk også, at det er muligt at regualisere under træning. Regualisering er i udgangspunktet en god ting, da det tillader modellen at generalisere i højere grad, og dermed modvirker det overfitting. Som standard ser vi også, at den står til L2 regualisering i en mild grad.

Vi er nu ved vejs ende og klar til at træne modellen. Efter at være blevet præsenteret for en oversigt over alle de indstillinger, vi har sat, er det tid til at trykke go!

Når modellen er godkendt, gør AWS følgende ting, som alle tager lidt tid… Et godt sted at holde øje med fremgangen er ved at gå til dashboardet og holde øje med status “pending”, som skifter til “completed”.

  • Splitter datasæt i 70% træningsdatasæt
  • Træner model
  • Evaluerer model

Når alt er skiftet til “completed”, trykker vi på det element på listen, der hedder Evaluation.

Evaluering af modellen

At evaluere ens model handler om at finde ud af, hvor god den er til at identificere potentielle købere af produktet. Ved at køre noget ukendt data igennem modellen, udregner vi, hvor mange gange modellen gætter rigtigt, altså at 0 faktisk er 0, og at 1 faktisk er 1. Nogle gange vil modellen gætte på 0, hvor det rigtige svar var 1 og omvendt gætte på 0, hvor det rigtige svar var 1. I dette tilfælde er det lige slemt at gætte forkert i begge tilfælde, men man kan nemt forstille sig en situation, hvor at gætte på det ene fremfor det andet kan have væsentlig højere omkostninger.

Ved binær klassifikation er det normalt at bruge confusion matricer til at evaluere performance. Udfra confusion matricen kan man regne misklassifikationsfejl og accuracy. AWS Sagemaker udprinter ikke confusion matricen men skriver i stedet værdierne op som på billedet til højre.

Misklassifikationsfejlen er (262+822)/12330 = 8.79%.
Med andre ord tager modellen fejl i 8.8% af tilfældene, men gætter tilgengæld rigtigt i 91.3% af tilfældende. Det er svært at sige, om dette er godt eller ej. Vi husker fra den eksplorative analyse, at ca. 88.7% af data er 0’er. Hvis modellen altså gættede 0 hver gang, ville den få 88.7% rigtige – derfor forventer vi, at modellen som minimum er bedre end det.

Afrunding

Jeg håber, du har fået blod på tanden til at undersøge nærmere, hvordan Machine Learning kan hjælpe dig med at tage bedre forretningsbeslutninger. Denne artikel belyser kun 1 af de 3 typer af modeller, som er muligt at lave med AWS Machine Learning. Den bedste måde at lære på, er ved selv at kaste sig ud i det. Jeg vil bestræbe mig på i fremtiden at skrive flere indlæg om AWS Machine Learning værktøjet og Machine Learning generelt. I mellemtiden er du meget velkommen til at skrive en kommentar nedenfor om forslag til næste emne, jeg skal tage op!

Nu når du har læst hele min artikel, vil jeg gerne afsløre, at AWS også har skrevet en guide om modellen, som kan findes her.

Tak fordi du læste med!