## corrplot 0.95 loaded
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
Cvičenie 12.1 Jednoduchá logistická regresia
Zadanie: Vytvorte logistický regresný model modelujúci prejdenie skúškou (premenná pass) v závislosti od počtu hodín venovaných príprave (premenná study_hours). Vypočítajte koreláciu medzi premennými. Tiež vyrátajte confusion maticu a metriky modelu. Prešiel by, na základe modelu, student, ktorý venoval príprave 6 hodín?
data1 <- data.frame(
study_hours = c(2, 3, 5, 7, 8, 10, 11, 13, 15, 16),
pass = c(0, 0, 0, 1, 1, 1, 1, 1, 1, 1) # 0: fail, 1: pass
)Pozrime si rozdelenie prediktora.
Korelácia medzi premennými:
## study_hours pass
## study_hours 1.0000000 0.8056963
## pass 0.8056963 1.0000000
Vidíme, že korelácia je vysoká (0,806) premenné závisia jedna od druhej.
Samotný model logistickej regresie.
##
## Call:
## glm(formula = pass ~ study_hours, family = binomial, data = data1)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -134.44 193058.17 -0.001 0.999
## study_hours 22.39 31296.13 0.001 0.999
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1.2217e+01 on 9 degrees of freedom
## Residual deviance: 7.5703e-10 on 8 degrees of freedom
## AIC: 4
##
## Number of Fisher Scoring iterations: 25
Koeficienty modelu v interepretovateľnej forme.
## (Intercept) study_hours
## 4.111488e-59 5.304319e+09
Predikcie modelu.
## 1 2 3 4 5 6
## 2.220446e-16 2.220446e-16 1.726423e-10 1.000000e+00 1.000000e+00 1.000000e+00
## 7 8 9 10
## 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00
Nastavíme tzv. treshold a podľa neho predikcie zaradíme do dvoch kategórií, aby boli porovnateľné s vysvetľovanou premennou.
Confusion matica modelu.
##
## glm.pred 0 1
## NEG 3 0
## POS 0 7
Metriky modelu binárnej klasifikácie.
accuracy <- sum(diag(cm)) / sum(cm)
precision <- cm[4] / (cm[4] + cm[2])
recall <- cm[4] / (cm[4] + cm[3])
cat("Accuracy: ", accuracy ,"\n")## Accuracy: 1
## Precision: 1
## Recall: 1
## 1
## 0.4780112
Vidíme, že naš predict (0.478) je menši ako treshold (0.5), preto podľa nášho modelu 6 hodín prípravy na zloženie skúšky nestačí.
Cvičenie 12.2 Násobná logistická regresia – generované dáta
Zadanie: Vytvorte logistický regresný model modelujúci pravdepodobnosť kúpenia produktu (premenná purchase) v závislosti od premenných age, gender, income a ad_click. Vypočítajte koreláciu medzi vysvetľujúcimi premennými. Tiež vyrátajte confusion maticu a metriky modelu a zhodnoťte ich.
data2 <- data.frame(
age = c(25, 30, 35, 40, 45, 50, 55, 60, 65, 70),
#gender = factor(c("male", "female", "female", "male", "male", "female", "female", "male", "male", "female")),
gender = c(0, 1, 1, 0, 0, 1, 1, 0, 0, 1), # 0: male, 1: female
income = c(50, 55, 60, 65, 70, 75, 80, 85, 90, 95),
ad_click = c(1, 1, 0, 0, 1, 0, 1, 1, 0, 1),
purchase = c(0, 0, 1, 1, 0, 1, 0, 1, 1, 0) # 0: no, 1: yes
)Pozrime si rozdelenie prediktorov.
Korelácia medzi vysvetľujúcimi premennými - stojí za zváženie tie silne korelované z dát odstrániť.
Teda odstránenim stĺpec “income”:
Rozdelenie premenných vzhľadom na dve kategórie targetu.
Samotný model logistickej regresie.
##
## Call:
## glm(formula = purchase ~ ., family = binomial, data = data2)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.312 197706.169 0.000 1
## age 3.084 6025.081 0.001 1
## gender -78.168 157973.344 0.000 1
## ad_click -156.524 266443.736 -0.001 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1.3863e+01 on 9 degrees of freedom
## Residual deviance: 4.7545e-10 on 6 degrees of freedom
## AIC: 8
##
## Number of Fisher Scoring iterations: 25
Koeficienty modelu v interepretovateľnej forme.
## (Intercept) age gender ad_click
## 4.933786e-03 2.184083e+01 1.127377e-34 1.052980e-68
Predikcie modelu.
Nastavíme tzv. treshold a podľa neho predikcie zaradíme do dvoch kategórií, aby boli porovnateľné s vysvetľovanou premennou.
Confusion matica modelu.
##
## glm.pred 0 1
## NEG 5 0
## POS 0 5
Metriky modelu binárnej klasifikácie.
accuracy <- sum(diag(cm)) / sum(cm)
precision <- cm[4] / (cm[4] + cm[2])
recall <- cm[4] / (cm[4] + cm[3])
cat("Accuracy: ", accuracy ,"\n")## Accuracy: 1
## Precision: 1
## Recall: 1
Cvičenie 12.3 Násobná logistická regresia - dataset
Zadanie: Vytvorte logistický regresný model predikujúci, či má auto automatickú (premenná am, hodnota 0) alebo manuálnu (premenná am, hodnota 1) prevodovku v závislosti od premenných hp a wt, všetky sa nachádzajú v datasete mtcars. Vypočítajte confusion maticu a metriky modelu a zhodnoťte ich. Sú v danom datasete premenné, ktoré dávajú lepší model a ak áno, ktoré to sú?
Pozrime si rozdelenie prediktorov.
Korelácia medzi vysvetľujúcimi premennými - stojí za zváženie tie silne korelované z dát odstrániť.
Rozdelenie premenných vzhľadom na dve kategórie targetu.
Samotný model logistickej regresie.
##
## Call:
## glm(formula = am ~ ., family = binomial, data = data3)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 18.86630 7.44356 2.535 0.01126 *
## hp 0.03626 0.01773 2.044 0.04091 *
## wt -8.08348 3.06868 -2.634 0.00843 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 43.230 on 31 degrees of freedom
## Residual deviance: 10.059 on 29 degrees of freedom
## AIC: 16.059
##
## Number of Fisher Scoring iterations: 8
Koeficienty modelu v interepretovateľnej forme.
## (Intercept) hp wt
## 1.561455e+08 1.036921e+00 3.085967e-04
Predikcie modelu.
Nastavíme tzv. treshold a podľa neho predikcie zaradíme do dvoch kategórií, aby boli porovnateľné s vysvetľovanou premennou.
Confusion matica modelu.
##
## glm.pred 0 1
## NEG 18 1
## POS 1 12
Metriky modelu binárnej klasifikácie.
accuracy <- sum(diag(cm)) / sum(cm)
precision <- cm[4] / (cm[4] + cm[2])
recall <- cm[4] / (cm[4] + cm[3])
cat("Accuracy: ", accuracy ,"\n")## Accuracy: 0.9375
## Precision: 0.9230769
## Recall: 0.9230769
ROC krivka a AUC
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Area under the curve: 0.9838
Skúsme vytvoriť model s inými premennými a uvidíme, či bude lepší ako prvý model.
Samotný model logistickej regresie.
##
## Call:
## glm(formula = am ~ ., family = binomial, data = data31)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -88.2992 13878.8098 -0.006 0.995
## mpg 0.3366 0.2457 1.370 0.171
## gear 20.3062 3469.7018 0.006 0.995
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 43.230 on 31 degrees of freedom
## Residual deviance: 11.659 on 29 degrees of freedom
## AIC: 17.659
##
## Number of Fisher Scoring iterations: 19
Koeficienty modelu v interepretovateľnej forme.
## (Intercept) mpg gear
## 4.488777e-39 1.400182e+00 6.589663e+08
Predikcie modelu.
Nastavíme tzv. treshold a podľa neho predikcie zaradíme do dvoch kategórií, aby boli porovnateľné s vysvetľovanou premennou.
Confusion matica modelu.
##
## glm.pred 0 1
## NEG 17 2
## POS 2 11
Metriky modelu binárnej klasifikácie.
accuracy <- sum(diag(cm)) / sum(cm)
precision <- cm[4] / (cm[4] + cm[2])
recall <- cm[4] / (cm[4] + cm[3])
cat("Accuracy: ", accuracy ,"\n")## Accuracy: 0.875
## Precision: 0.8461538
## Recall: 0.8461538
ROC krivka a AUC
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Area under the curve: 0.9696
Vidíme, že prvý model má najlepšie metriky, takže tento model je najlepší z týchto dvoch.