(Acest articol a fost publicat pentru prima dată pe mlr-orgși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Scopul nostru pentru această foaie de exercițiu este de a învăța elementele de bază ale MLR3 pentru învățarea supravegheată, formând un prim model simplu pe datele de instruire și prin evaluarea performanței sale la datele de reținere/testare.
Setul de date de credit german a fost donat de prof. Dr. Hans Hoffman de la Universitatea din Hamburg în 1994 și conține 1000 de puncte de date care reflectă clienții băncilor. Scopul este de a clasifica oamenii ca un risc de credit bun sau necorespunzător bazat pe 20 de caracteristici personale, demografice și financiare. Setul de date este disponibil la depozitul UCI ca set de date STATLOG (date de credit germane).
Motivația predicției riscului
Clienții care nu rambursează împrumutul distribuit la timp reprezintă un risc enorm pentru o bancă: în primul rând, deoarece creează un decalaj neintenționat în planificarea băncii și în al doilea rând, deoarece colectarea sumei de rambursare provoacă în plus timp și cost suplimentar pentru bancă.
Pe de altă parte, (ratele dobânzii pentru) împrumuturi sunt un flux important de venituri pentru bănci. Dacă împrumutul unei persoane este respins, chiar dacă ar fi îndeplinit termenele limită de rambursare, veniturile se pierd, precum și potențialele oportunități de abordare.
Prin urmare, băncile sunt foarte interesate de un model de predicție a riscurilor care prezice cu exactitate riscul viitorilor clienți. Aici intră în joc modelele de învățare supravegheate.
Prezentare generală a datelor
n = 1.000 de observații ale clienților băncilor
credit_risk
: Clientul este un risc de credit bun sau prost?age
: vârsta în aniamount
: suma solicitată de solicitantcredit_history
: Istoricul de credit trecut al solicitantului la această bancăduration
: durata creditului în luniemployment_duration
: angajarea actuală de atunciforeign_worker
: Este muncitor străin solicitant?housing
: tip de apartament închiriat, deținut, gratuit / fără platăinstallment_rate
: rata de rate în procent din venitul disponibiljob
: Informații curente ale jobuluinumber_credits
: Numărul de credite existente la această bancăother_debtors
: Alți debitori/garanți prezenți?other_installment_plans
: Alte planuri de tranzacție pe care le plătește solicitantulpeople_liable
: Numărul de persoane care pot oferi întreținerepersonal_status_sex
: Combinația de sex și statutul personal al solicitantuluipresent_residence
: Reședința prezentă de atunciproperty
: proprietăți pe care le are solicitantulpurpose
: motivul pentru care clientul solicită un împrumutsavings
: Conturi/obligațiuni de economii la această bancăstatus
: starea/soldul contului de verificare la această bancătelephone
: Există vreun telefon înregistrat pentru acest client?
Preprocesare
Mai întâi încărcăm datele din rchallenge
Pachet (poate fi necesar să -l instalați mai întâi) și să obțineți o scurtă privire de ansamblu.
# install.packages("rchallenge") library("rchallenge") data("german") skimr::skim(german)
Nume | german |
Numărul de rânduri | 1000 |
Numărul de coloane | 21 |
_______________________ | |
Frecvența tipului de coloană: | |
factor | 18 |
numeric | 3 |
________________________ | |
Variabile de grup | Nici unul |
Tip variabil: factor
statut | 0 | 1 | FALS | 4 | …: 394, nr: 274, …: 269, 0 <=: 63 |
Credit_history | 0 | 1 | FALS | 5 | Nr: 530, toate: 293, Exi: 88, CRI: 49 |
scop | 0 | 1 | FALS | 10 | Blana: 280, oth: 234, mașină: 181, mașină: 103 |
economii | 0 | 1 | FALS | 5 | UNK: 603, …: 183, …: 103, 100: 63 |
Ocuparea forței de muncă | 0 | 1 | FALS | 5 | 1 <: 339,> =: 253, 4 <: 174, <1: 172 |
ramburs_rate | 0 | 1 | ADEVĂRAT | 4 | <2: 476, 25: 231, 20: 157,> =: 136 |
personal_status_sex | 0 | 1 | FALS | 4 | Mal: 548, Fem: 310, Fem: 92, Mal: 50 |
altele_debtors | 0 | 1 | FALS | 3 | non: 907, gua: 52, co-: 41 |
Prezent_Residență | 0 | 1 | ADEVĂRAT | 4 | > =: 413, 1 <: 308, 4 <: 149, <1: 130 |
proprietate | 0 | 1 | FALS | 4 | BUI: 332, Unk: 282, Car: 232, Rea: 154 |
Other_installment_Plans | 0 | 1 | FALS | 3 | non: 814, interdicție: 139, sto: 47 |
locuințe | 0 | 1 | FALS | 3 | REN: 714, pentru: 179, propriu: 107 |
Number_credits | 0 | 1 | ADEVĂRAT | 4 | 1: 633, 2-3: 333, 4-5: 28,> =: 6 |
post | 0 | 1 | FALS | 4 | Schi: 630, UNS: 200, Man: 148, Une: 22 |
People_Lable | 0 | 1 | FALS | 2 | 0 T: 845, 3 O: 155 |
telefon | 0 | 1 | FALS | 2 | Nu: 596, da: 404 |
străin_worker | 0 | 1 | FALS | 2 | Nu: 963, da: 37 |
Credit_risk | 0 | 1 | FALS | 2 | GOO: 700, rău: 300 |
Tip variabil: numeric
durată | 0 | 1 | 20.90 | 12.06 | 4 | 12.0 | 18.0 | 24.00 | 72 | ▇▇▂ |
cantitate | 0 | 1 | 3271.25 | 2822.75 | 250 | 1365.5 | 2319.5 | 3972.25 | 18424 | ▇▂. |
vârstă | 0 | 1 | 35.54 | 11.35 | 19 | 27.0 | 33.0 | 42.00 | 75 | ▇▆▃ |
Acum, putem începe să construim un model. Pentru a face acest lucru, trebuie să abordăm următoarele întrebări:
- Care este problema pe care încercăm să o rezolvăm?
- Care este un algoritm de învățare adecvat?
- Cum evaluăm performanța „bună”?
Mai sistematic în mlr3
Acestea pot fi exprimate prin cinci componente:
-
Task
definiţie. -
Learner
definiţie. - Instruirea prin
$train()
. - Predicția prin
$predict()
. - Evaluarea printr -una
$score()
.
Împărțiți datele în datele de instruire și testare
Sarcina dvs. este să împărțiți german
Set de date în date de formare de 70 % și date de testare 30 % prin eșantionarea aleatorie a rândurilor. Ulterior, vom folosi datele de instruire pentru a învăța un model ML și vom folosi datele de testare pentru a evalua performanța acestuia.
Recapitulare: De ce avem nevoie de date de tren și testare?
Folosim o parte din datele disponibile (datele de instruire) pentru a ne antrena modelul. Datele rămase/deținere (date de testare) sunt utilizate pentru a evalua modelul instruit. Acesta este exact modul în care anticipăm utilizarea modelului în practică: dorim să încadrăm modelul la datele existente și apoi să facem predicții asupra punctelor de date noi, nevăzute, pentru care nu cunoaștem valorile rezultatului/țintă.
NOTĂ: Împărțirea de reținere necesită un set de date care este suficient de mare, astfel încât atât setul de date de instruire, cât și testul de testare să fie reprezentări adecvate ale populației țintă. Ceea ce înseamnă „suficient de mare” depinde de setul de date la îndemână și de complexitatea problemei.
Raportul dintre instruire și datele de testare depinde și de context. În practică, un raport de 70% până la 30% (~ 2: 1) este un bun punct de plecare.
Sugestie 1:
Utilizare sample()
pentru a proba 70 % din ID -urile de date ca ID -uri de date de instruire din row.names(german)
. ID -urile de rând rămase sunt obținute prin intermediul setdiff()
. Pe baza ID -urilor, configurați două seturi de date, unul pentru instruire și unul pentru testare/evaluare.
Stabiliți o sămânță (de exemplu, set.seed(100L)
) pentru a face rezultatele dvs. reproductibile.
Sugestie 2:
# Sample ids for training and test split set.seed(100L) train_ids = sample(row.names(german), 0.7*nrow(...)) test_ids = setdiff(..., train_ids) # Create two datasets based on ids train_set = german(...,) test_set = german(...,)
Creați o sarcină de clasificare
Instalați și încărcați mlr3verse
Pachet care este o colecție de mai multe pachete suplimentare în mlr3
Univers (dacă nu reușești să te instalezi mlr3verse
încercați să instalați și să încărcați doar mlr3
şi mlr3learners
pachete). Apoi, creați o sarcină de clasificare folosind datele de instruire ca intrare și credit_risk
ca variabilă țintă (cu eticheta clasei good
ca clasă pozitivă). Prin definirea unui mlr3
Sarcina, conceptualizăm problema ML pe care vrem să o rezolvăm (aici ne confruntăm cu o sarcină de clasificare). Deoarece avem aici o sarcină de clasificare, asigurați -vă că specificați în mod corespunzător clasa care ar trebui utilizată ca clasă pozitivă (adică eticheta clasei pentru care am dori să prezicem probabilități – aici good
Dacă sunteți interesat să preziceți o probabilitate pentru bonitatea clienților).
Sugestie 1:
Utilizați de exemplu as_task_classif()
Pentru a crea o sarcină de clasificare.
Sugestie 2:
library(mlr3verse) task = as_task_classif(x = ..., target = ..., ... = "good")
Instruiți un model pe setul de date de instruire
Creatul Task
Conține datele cu care vrem să lucrăm. Acum că am conceptualizat sarcina ML (adică clasificarea) într -un Task
Obiect, este timpul să instruim prima noastră metodă de învățare supravegheată. Începem cu un clasificator simplu: un model de regresie logistică. În acest curs, veți câștiga, de asemenea, experiență cu modele mai complexe.
Potriviți un model de regresie logistică la german_credit
sarcină de instruire.
Sugestie 1:
Utilizare lrn()
pentru a inițializa a Learner
obiect. Scurtul și, prin urmare, introducerea la această metodă este "classif.log_reg"
.
Pentru a antrena un model, utilizați $train()
Metoda elevului dvs. instantaneu cu sarcina exercițiului anterior ca intrare.
Sugestie 2:
logreg = lrn("classif.log_reg") logreg$train(...)
Inspectați modelul
Aruncați o privire la coeficienți folosind summary()
. Numiți cel puțin două caracteristici care au un efect semnificativ asupra rezultatului.
Sugestie 1:
Folosiți summary()
metoda model
Câmpul modelului nostru instruit. Privind task$positive
am putut vedea care dintre cele două clase good
sau bad
este utilizat ca clasă pozitivă (adică clasa la care se va referi predicțiile modelului).
Sugestie 2:
Prezice pe setul de date de testare
Utilizați modelul instruit pentru a prezice în setul de date Hold-Out/Test.
Sugestie 1
Deoarece avem un nou set de date tabular ca intrare (și nu o sarcină), trebuie să folosim $predict_newdata()
(în loc de $predict()
) a deriva un PredictionClassif
obiect.
Sugestie 2
pred = yourmodel$predict_newdata(...)
Evaluare
Care este eroarea de clasificare a datelor de testare (200 de observații)?
Sugestie 1:
Eroarea de clasificare oferă rata observațiilor care au fost clasificate greșit. Folosiți $score()
Metoda pe corespunzător PredictionClassif
obiect al exercițiului anterior.
Sugestie 2:
Prezicerea probabilităților în loc de etichete
În mod similar, putem evalua performanța modelului nostru folosind ASC. Cu toate acestea, acest lucru necesită probabilități prezise în loc de etichete prevăzute. Evaluează modelul folosind ASC. Pentru a face acest lucru, reconstruiți modelul cu un elev care returnează probabilități.
Sugestie 1:
Puteți genera predicții cu probabilități specificând un predict_type
argument în interiorul lrn()
Apel funcțional la construirea unui elev.
Sugestie 2:
Puteți obține o imagine de ansamblu a măsurilor de performanță în MLR3 folosind as.data.table(msr())
.
În această foaie de exercițiu am învățat cum să încadrăm un model de regresie logistică pe o sarcină de antrenament și cum să evaluăm performanța acesteia pe datele de testare nevăzute cu ajutorul lui mlr3
. Am arătat cum să împărțim datele manual în datele de instruire și testare, dar în majoritatea scenariilor este un apel la reșuria sau referința. Vom afla mai multe despre acest lucru în secțiunile următoare.