Prezicerea trenului Evaluează elementele de bază | R-BLOGGERS

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(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 ani
  • amount: suma solicitată de solicitant
  • credit_history: Istoricul de credit trecut al solicitantului la această bancă
  • duration: durata creditului în luni
  • employment_duration: angajarea actuală de atunci
  • foreign_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 disponibil
  • job: Informații curente ale jobului
  • number_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 solicitantul
  • people_liable: Numărul de persoane care pot oferi întreținere
  • personal_status_sex: Combinația de sex și statutul personal al solicitantului
  • present_residence: Reședința prezentă de atunci
  • property: proprietăți pe care le are solicitantul
  • purpose: motivul pentru care clientul solicită un împrumut
  • savings: 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)
Rezumatul datelor
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$positiveam 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.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.