Kategori: Machine Learning

Machine learning tilhører gruppen af statistikker modeller beskrevet som kunstig intelligens. Machine learning teknikker udnytter sindrige matematiske fænomener og computer kraft til at finde mønste og udlede konklusioner fra data.

Machine learning er opblomstret over de seneste par år grundet billigere computerkraft som desuden er blevet nemt tilgængligt gennem cloud løsninger som Amazon Web Services, Google Cloud og Microsoft Azure.

Sådan bruger du RStudio på en AWS EC2 Computer

Hvis du læser med her på siden er du formentlig allerede klar over hvad R-studio er. Hvis du kender R-studio ved du også hvad R kan bruges til. Alternativt kan du læse om R-projektet her eller på den danske Wikipedia.

Der kan være mange grunde til at køre R-studio på en ekstern computer. Som oftes er årsagen, at det er nødvendigt at køre kode på en computer med højere ydevne end alminde konsumer computere. F.eks. mere processorkraft eller mere hukommelse. Sådanne computere kan man få fat på hos Amazon Web Services (AWS) og disse kaldes EC2 instanser. EC2 står for Amazon Elastic Compute Cloud. EC2 instanser kan enten være virtuelle computere eller “hele” fysiske computere. Disse computere kan du leje helt ned til en periode på 1 minut. Skal du køre noget tung R kode som kræver meget hukommelse med kun tager 30 minutter at køre, betaler du altså kun for 30 minutters brugstid.

Nye brugere af AWS får 750 timers brug af en lille EC2 instans gratis. Du kan bruge den til at afprøve R-studio på!

Læs mere om EC2 her.

Hvordan får jeg R-studio ind på en EC2?

På en EC2 instans kan man enten vælge at installere linux eller windows styresystemer. Da Windows kræver licens benytter langt de fleste en linux distribution til deres aktiviteter. Bliv ikke skræmt hvis du ikke har arbejdet med linux før. Denne gennemgang kræver ikke du kender til linux, bash kommandoer osv.

Hils på Tux. Han er en pingvin og er linux maskotten.
Hils på Tux. Han er en pingvin og er linux maskotten.

R-studio Server

Ligesom udviklerne bag R-studio har lavet en version der kan køre på Mac og Windows har de også lavet en version der kan køre på linux. R-studio server udgaven fungerer ved at man installerer den på en linux computer og så er hele R-studio programmet i din webbrowser !

Heldigvis har Louis Aslett fra Durham University i England, lavet en nem installationsfil af R-studio server til EC2 instanser. På hans hjemmeside ligger der også links til diverse video’er som gennemgår installationen.

Først skridt i installationsprocessen er faktisk at gå ind på Louis Aslett’s hjemmeside og finde id’et på installationsfilen. Kig her.

Vælg det AMI id som passer med den region du ønsker serveren skal være placeret i. Er du i tvivl vælg EU North, Stockholm. Stockholm bør være den tætteste region og dermed får vi den laveste ping tid.

AWS Management Console

Jeg antager du er logget ind AWS konsollen. Gå da til EC2 som findes under Compute overskriften.

Vælg da Launch Instance som vist på billedet nedenfor:

Start en AWS Instans.

Vælg AMI (Image)

På næste skærmbillede skal du vælge hvilket image du ønsker på din server. Et image er blot et styresystem + evt. programmer mm.

Ude til venstre skal du klikke på “Community AMIs”. Louis har været så flink at publicere alle sine images her. Fra Louis’ hjemmeside skal vi da finde det korrekte id der stemmer overens med den valgte region. Du kan se hvilken region du har valgt øverst i højre hjørne af konsollen.

Indsæt id’et i søgefeltet f.eks. “ami-059a2456bd2027e31” hvis du bruger Frankfurt regionen.

Når du indtaster et eksakt id bør der kun komme 1 valgmulighed frem. Image’et hedder noget med RStudio-VERSION…

Vælg AWS AMI til instans.

EC2 Instans Type

Når du har valgt Image/AMI bliver du videresendt til step 2. Her skal du foretage opsætningens sværeste valg – du skal vælge hvilken computer du ønsker at benytte til R-studio.

Jeg vælger t2.micro instansen da den falder ind under free tier programmet for nye AWS brugere.

Inden du vælger bør du tjekke priser på hver instans. Det kan du gøre her. Bemærk at prisstrukturen på EC2 instanser er yderst kompleks, så brug noget tid på at sætte dig ind i hvad du betaler for. Skal din EC2 køre i længere tid (mere end 1 år) anbefaler jeg reservere en instans med forudbetaling.

Hvis du skal køre meget tunge machine learning modeller, som f.eks. træning af neurale netværk vil jeg anbefale dig at kigge på EC2 p instanser. Disse er optimeret til tunge beregninger.

Når du har besluttet dig trykker du “Next: Configure Instance Details”.

Netværksopsætning

Step 3 omhandler netværksopsætning. Jeg vil ikke bruge meget tid på at gennemgå valgene her. Hvis du ikke er sikker på hvad tingene betyder, mener og har af effekt anbefaler jeg blot du lader tingene være uændret.

Har du valg en T instans type anbefaler jeg dog du aktiverer unlimited.

T2/T3 unlimited er forbundet med ekstra omkostninger, men sikrer dig at du ikke løber tør for CPU kraft mens du laver beregninger.

Du kan læse mere om t-instanser i AWS dokumentationen. En simpel Google søgning vil lede dig til den nyeste dokumentation.

Lagringsplads

Vælg lagringstype og størrelse. På trin 4 er der allerede valgt en standard harddisk med 20 GB lagringsplads. Det er nok for de fleste og bør ikke ændres.

Skal du dog analysere meget store filer kan det være nødvendigt at øge størrelsen på harddisken. Jeg anbefaler ikke du ændrer harddisktype medmindre du ved hvad du laver eller laver rigtig mange filændringer i din R kode.

Start RStudio Server!

Du er nu ved vejs ende. Vi skal til at tænde EC2 serveren. Det bliver spændende !

På sidste ting kan du se en oversigt over de valgt du har gjort dig gennem processen. Hvis du ikke ønsker at ændre noget skal du blot klikke Launch.

Kun til avancerede brugere er det nødvendigt at vælge et KeyPair. Blot godkend at du ikke har en nøgle.

Log ind og leg !

Louis har lavet sin installationsfil så smart at den automatisk sætter et kodeord på din RStudio server.

For at logge ind i R-studio skal du derfor klikke på instans id’et i den grønne boks ovenfor.

Dette fører dig til oversigten over alle dine EC2 instanser.

I description nederst på siden skal du finde to informationer.

Instance ID’et. I mit tilfælde: i-0a26b758b96540ada

og Public DNS (Ipv4) i mit tilfælde: ec2-3-121-220-56.eu-central-1.compute.amazonaws.com.

Kopier Public DNS adressen ind I din webbrowser.

Log dernæst ind med brugernavnet: rstudio og instans id’et som password.

Klassifikation af marketing udfald med AWS Machine Learning

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!