---
title: "Matematika 1 - random forest"
output: 
  flexdashboard::flex_dashboard:
    social: menu
    orientation: columns
    vertical_layout: fill
    source_code: embed
---

```{css, echo=FALSE}
.sidebar { overflow: auto; }
.dataTables_scrollBody {
    height:95% !important;
    max-height:95% !important;
}
.chart-stage-flex {
    overflow:auto !important;
}
#viz-log
.chart-shim {
    overflow-y: hidden;
}
```

```{r setup, include=FALSE}
library(tidyverse)
library(readxl)
library(tidymodels)
library(vip)
library(knitr)
library(kableExtra)
library(Boruta)
library(ggbump)
library(ggsankey)
library(bsselectR)
library(ggridges)

ocjene1_deskriptiva <- read_excel("../podaci/ocjene_MAT1_2021_2022.xlsx") %>%
  mutate_at(vars(KOL1:UKUPNO), as.numeric) %>%
  mutate(KVIZ1 = rowSums(across(KP0:KP4)), KVIZ2 = rowSums(across(KP5:KP8)),  
         KVIZ3 = rowSums(across(KP9:KP12)), DZ1 = ZAD1 + ZAD2,
         DZ2 = ZAD3 + ZAD4, DZ3 = ZAD5 + ZAD6) %>%
  select(KOL1, KOL2, KOL3, KVIZ1, KVIZ2, KVIZ3, DZ1, DZ2, DZ3)

ocjene2_deskriptiva <- read_excel("../podaci/ocjene_MAT1_2022_2023.xlsx") %>%
  mutate_at(vars(KOL1:UKUPNO), as.numeric) %>%
  mutate(KVIZ1 = rowSums(across(KP0:KP4)), KVIZ2 = rowSums(across(KP5:KP8)),  
         KVIZ3 = rowSums(across(KP9:KP12)), DZ1 = ZAD1 + ZAD2,
         DZ2 = ZAD3 + ZAD4, DZ3 = ZAD5 + ZAD6) %>%
  select(KOL1, KOL2, KOL3, KVIZ1, KVIZ2, KVIZ3, DZ1, DZ2, DZ3)

zajedno_ocjene <- bind_rows(list(GOD_2021_2022 = ocjene1_deskriptiva, 
                                 GOD_2022_2023 = ocjene2_deskriptiva), .id = "id") %>%
  pivot_longer(KOL1:DZ3, names_to = "Aktivnost", values_to = "Bodovi") %>%
  mutate_at(vars(id), ~if_else(. == "GOD_2021_2022", "2021", "2022")) %>%
  filter(Aktivnost %in% c("KOL1", "KOL2", "KOL3")) %>%
  mutate(klasa2 = ifelse(Bodovi >= 10, "1", "0"),
         klasa4 = case_when(Bodovi <= 5 ~ "1", 
                            Bodovi <= 10 ~ "2",
                            Bodovi <= 15 ~ "3",
                            .default = "4"))
zajedno_ocjene_all <- zajedno_ocjene %>% mutate(id = "ALL")
zajedno_ocjene <- zajedno_ocjene %>% bind_rows(zajedno_ocjene_all)

video1_deskriptiva <- read_csv("../podaci/all_logs_MAT1_2021_2022.csv") %>%
  mutate(VID_1 = rowSums(across(P1:V3)),
         VID_2 = rowSums(across(P8:V6)),
         VID_3 = rowSums(across(P12:V13))) %>%
  select(VID_1:VID_3)

video2_deskriptiva <- read_csv("../podaci/all_logs_MAT1_2022_2023.csv") %>%
  mutate(VID_1 = rowSums(across(P1:V3)),
         VID_2 = rowSums(across(P8:V6)),
         VID_3 = rowSums(across(P12:V13))) %>%
  select(VID_1:VID_3)

video_deskriptiva <- bind_rows(list(GOD_2021_2022 = video1_deskriptiva, 
                                    GOD_2022_2023 = video2_deskriptiva), .id = "id") %>%
  pivot_longer(VID_1:VID_3, names_to = "Aktivnost", values_to = "Logovi") %>%
  mutate_at(vars(id), ~if_else(. == "GOD_2021_2022", "2021", "2022"))

dolasci1_deskriptiva <- read_csv("../podaci/dolasci1.csv") %>% select(D1:D3)
dolasci2_deskriptiva <- read_csv("../podaci/dolasci2.csv") %>% select(D1:D3)

dolasci_deskriptiva <- bind_rows(list(GOD_2021_2022 = dolasci1_deskriptiva, 
                                      GOD_2022_2023 = dolasci2_deskriptiva), .id = "id") %>%
  pivot_longer(D1:D3, names_to = "Aktivnost", values_to = "Dolasci") %>%
  mutate_at(vars(id), ~if_else(. == "GOD_2021_2022", "2021", "2022"))

materijali1_deskriptiva <- read_csv("../podaci/materijali1.csv") %>% select(M1:M3)
materijali2_deskriptiva <- read_csv("../podaci/materijali2.csv") %>% select(M1:M3)

materijali_deskriptiva <- bind_rows(list(GOD_2021_2022 = materijali1_deskriptiva, 
                             GOD_2022_2023 = materijali2_deskriptiva), .id = "id") %>%
  pivot_longer(M1:M3, names_to = "Aktivnost", values_to = "Logovi") %>%
  mutate_at(vars(id), ~if_else(. == "GOD_2021_2022", "2021", "2022"))

rf_metrike <- metric_set(roc_auc, sens, precision, spec, accuracy, f_meas, mcc, kap, mn_log_loss)

KOL1_2klase_fit <- readRDS("../RF_modeli/RF_fit_KOL1_2klase.rds")
KOL1_2klase_tuning <- readRDS("../RF_modeli/RF_tuning_KOL1_2klase.rds")
KOL1_2klase_work <- readRDS("../RF_modeli/RF_work_KOL1_2klase.rds")
KOL1_4klase_fit <- readRDS("../RF_modeli/RF_fit_KOL1_4klase.rds")
KOL1_4klase_tuning <- readRDS("../RF_modeli/RF_tuning_KOL1_4klase.rds")
KOL1_4klase_work <- readRDS("../RF_modeli/RF_work_KOL1_4klase.rds")

permKOL1_2klase_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL1_2klase.rds")
permKOL1_4klase_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL1_4klase.rds")

KOL2_2klase_fit <- readRDS("../RF_modeli/RF_fit_KOL2_2klase.rds")
KOL2_2klase_tuning <- readRDS("../RF_modeli/RF_tuning_KOL2_2klase.rds")
KOL2_2klase_work <- readRDS("../RF_modeli/RF_work_KOL2_2klase.rds")
KOL2_4klase_fit <- readRDS("../RF_modeli/RF_fit_KOL2_4klase.rds")
KOL2_4klase_tuning <- readRDS("../RF_modeli/RF_tuning_KOL2_4klase.rds")
KOL2_4klase_work <- readRDS("../RF_modeli/RF_work_KOL2_4klase.rds")
KOL2_2klase_KOL1_fit <- readRDS("../RF_modeli/RF_fit_KOL2_2klase_KOL1.rds")
KOL2_2klase_KOL1_tuning <- readRDS("../RF_modeli/RF_tuning_KOL2_2klase_KOL1.rds")
KOL2_2klase_KOL1_work <- readRDS("../RF_modeli/RF_work_KOL2_2klase_KOL1.rds")
KOL2_4klase_KOL1_fit <- readRDS("../RF_modeli/RF_fit_KOL2_4klase_KOL1.rds")
KOL2_4klase_KOL1_tuning <- readRDS("../RF_modeli/RF_tuning_KOL2_4klase_KOL1.rds")
KOL2_4klase_KOL1_work <- readRDS("../RF_modeli/RF_work_KOL2_4klase_KOL1.rds")

permKOL2_2klase_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL2_2klase.rds")
permKOL2_4klase_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL2_4klase.rds")
permKOL2_2klase_KOL1_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL2_2klase_KOL1.rds")
permKOL2_4klase_KOL1_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL2_4klase_KOL1.rds")

KOL3_2klase_fit <- readRDS("../RF_modeli/RF_fit_KOL3_2klase.rds")
KOL3_2klase_tuning <- readRDS("../RF_modeli/RF_tuning_KOL3_2klase.rds")
KOL3_2klase_work <- readRDS("../RF_modeli/RF_work_KOL3_2klase.rds")
KOL3_4klase_fit <- readRDS("../RF_modeli/RF_fit_KOL3_4klase.rds")
KOL3_4klase_tuning <- readRDS("../RF_modeli/RF_tuning_KOL3_4klase.rds")
KOL3_4klase_work <- readRDS("../RF_modeli/RF_work_KOL3_4klase.rds")
KOL3_2klase_KOL12_fit <- readRDS("../RF_modeli/RF_fit_KOL3_2klase_KOL12.rds")
KOL3_2klase_KOL12_tuning <- readRDS("../RF_modeli/RF_tuning_KOL3_2klase_KOL12.rds")
KOL3_2klase_KOL12_work <- readRDS("../RF_modeli/RF_work_KOL3_2klase_KOL12.rds")
KOL3_4klase_KOL12_fit <- readRDS("../RF_modeli/RF_fit_KOL3_4klase_KOL12.rds")
KOL3_4klase_KOL12_tuning <- readRDS("../RF_modeli/RF_tuning_KOL3_4klase_KOL12.rds")
KOL3_4klase_KOL12_work <- readRDS("../RF_modeli/RF_work_KOL3_4klase_KOL12.rds")

permKOL3_2klase_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL3_2klase.rds")
permKOL3_4klase_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL3_4klase.rds")
permKOL3_2klase_KOL12_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL3_2klase_KOL12.rds")
permKOL3_4klase_KOL12_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL3_4klase_KOL12.rds")

KOL3_2klase_tezine1_fit <- readRDS("../RF_modeli/RF_fit_KOL3_2klase_tezine1.rds")
KOL3_2klase_tezine1_tuning <- readRDS("../RF_modeli/RF_tuning_KOL3_2klase_tezine1.rds")
KOL3_2klase_tezine1_work <- readRDS("../RF_modeli/RF_work_KOL3_2klase_tezine1.rds")
KOL3_2klase_tezine2_fit <- readRDS("../RF_modeli/RF_fit_KOL3_2klase_tezine2.rds")
KOL3_2klase_tezine2_tuning <- readRDS("../RF_modeli/RF_tuning_KOL3_2klase_tezine2.rds")
KOL3_2klase_tezine2_work <- readRDS("../RF_modeli/RF_work_KOL3_2klase_tezine2.rds")
KOL3_2klase_smote_fit <- readRDS("../RF_modeli/RF_fit_KOL3_2klase_smote.rds")
KOL3_2klase_smote_tuning <- readRDS("../RF_modeli/RF_tuning_KOL3_2klase_smote.rds")
KOL3_2klase_smote_work <- readRDS("../RF_modeli/RF_work_KOL3_2klase_smote.rds")
KOL3_2klase_rose_fit <- readRDS("../RF_modeli/RF_fit_KOL3_2klase_rose.rds")
KOL3_2klase_rose_tuning <- readRDS("../RF_modeli/RF_tuning_KOL3_2klase_rose.rds")
KOL3_2klase_rose_work <- readRDS("../RF_modeli/RF_work_KOL3_2klase_rose.rds")

permKOL3_2klase_tezine1_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL3_2klase_tezine1.rds")
permKOL3_2klase_tezine2_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL3_2klase_tezine2.rds")
permKOL3_2klase_smote_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL3_2klase_smote.rds")
permKOL3_2klase_rose_fit <- readRDS("../RF_modeli_permutacije/RF_fit_permKOL3_2klase_rose.rds")

update_geom_defaults(geom = "tile", new = list(color = "black"))

permKOL1_2klase_obj <- permKOL1_2klase_fit %>% extract_fit_engine()
lokal_imp_KOL1_2klase <- as_tibble(permKOL1_2klase_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL1_4klase_obj <- permKOL1_4klase_fit %>% extract_fit_engine()
lokal_imp_KOL1_4klase <- as_tibble(permKOL1_4klase_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL2_2klase_obj <- permKOL2_2klase_fit %>% extract_fit_engine()
lokal_imp_KOL2_2klase <- as_tibble(permKOL2_2klase_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL2_4klase_obj <- permKOL2_4klase_fit %>% extract_fit_engine()
lokal_imp_KOL2_4klase <- as_tibble(permKOL2_4klase_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL2_2klase_KOL1_obj <- permKOL2_2klase_KOL1_fit %>% extract_fit_engine()
lokal_imp_KOL2_2klase_KOL1 <- as_tibble(permKOL2_2klase_KOL1_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL2_4klase_KOL1_obj <- permKOL2_4klase_KOL1_fit %>% extract_fit_engine()
lokal_imp_KOL2_4klase_KOL1 <- as_tibble(permKOL2_4klase_KOL1_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL3_2klase_obj <- permKOL3_2klase_fit %>% extract_fit_engine()
lokal_imp_KOL3_2klase <- as_tibble(permKOL3_2klase_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL3_4klase_obj <- permKOL3_4klase_fit %>% extract_fit_engine()
lokal_imp_KOL3_4klase <- as_tibble(permKOL3_4klase_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL3_2klase_KOL12_obj <- permKOL3_2klase_KOL12_fit %>% extract_fit_engine()
lokal_imp_KOL3_2klase_KOL12 <- as_tibble(permKOL3_2klase_KOL12_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL3_4klase_KOL12_obj <- permKOL3_4klase_KOL12_fit %>% extract_fit_engine()
lokal_imp_KOL3_4klase_KOL12 <- as_tibble(permKOL3_4klase_KOL12_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL3_2klase_tezine1_obj <- permKOL3_2klase_tezine1_fit %>% extract_fit_engine()
lokal_imp_KOL3_2klase_tezine1 <- as_tibble(permKOL3_2klase_tezine1_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL3_2klase_tezine2_obj <- permKOL3_2klase_tezine2_fit %>% extract_fit_engine()
lokal_imp_KOL3_2klase_tezine2 <- as_tibble(permKOL3_2klase_tezine2_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL3_2klase_smote_obj <- permKOL3_2klase_smote_fit %>% extract_fit_engine()
lokal_imp_KOL3_2klase_smote <- as_tibble(permKOL3_2klase_smote_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

permKOL3_2klase_rose_obj <- permKOL3_2klase_rose_fit %>% extract_fit_engine()
lokal_imp_KOL3_2klase_rose <- as_tibble(permKOL3_2klase_rose_obj$variable.importance.local) %>% 
  mutate(students = row_number()) %>%
  pivot_longer(-students, names_to = "aktivnost", values_to = "local importance")

boruta_KOL1_2klase <- readRDS("../Boruta/Boruta_KOL1_2klase.rds")
boruta_KOL1_4klase <- readRDS("../Boruta/Boruta_KOL1_4klase.rds")
boruta_KOL2_2klase <- readRDS("../Boruta/Boruta_KOL2_2klase.rds")
boruta_KOL2_4klase <- readRDS("../Boruta/Boruta_KOL2_4klase.rds")
boruta_KOL2_2klase_KOL1 <- readRDS("../Boruta/Boruta_KOL2_2klase_KOL1.rds")
boruta_KOL2_4klase_KOL1 <- readRDS("../Boruta/Boruta_KOL2_4klase_KOL1.rds")
boruta_KOL3_2klase <- readRDS("../Boruta/Boruta_KOL3_2klase.rds")
boruta_KOL3_4klase <- readRDS("../Boruta/Boruta_KOL3_4klase.rds")
boruta_KOL3_2klase_KOL12 <- readRDS("../Boruta/Boruta_KOL3_2klase_KOL12.rds")
boruta_KOL3_4klase_KOL12 <- readRDS("../Boruta/Boruta_KOL3_4klase_KOL12.rds")

studenti1_sankey <- read_excel("../podaci/ocjene_MAT1_2021_2022.xlsx") %>%
  mutate_at(vars(KOL1:UKUPNO), as.numeric) %>%
  select(KOL1, KOL2, KOL3) %>%
  mutate(KOL1 = case_when(KOL1 <= 5 ~ "1", 
                          KOL1 <= 10 ~ "2",
                          KOL1 <= 15 ~ "3",
                          .default = "4"),
         KOL2 = case_when(KOL2 <= 5 ~ "1", 
                          KOL2 <= 10 ~ "2",
                          KOL2 <= 15 ~ "3",
                          .default = "4"),
         KOL3 = case_when(KOL3 <= 5 ~ "1", 
                          KOL3 <= 10 ~ "2",
                          KOL3 <= 15 ~ "3",
                          .default = "4")) %>%
  mutate_at(vars(KOL1, KOL2, KOL3), ~fct_relevel(., c("1","2","3","4")))

studenti2_sankey <- read_excel("../podaci/ocjene_MAT1_2022_2023.xlsx") %>%
  mutate_at(vars(KOL1:UKUPNO), as.numeric) %>%
  select(KOL1, KOL2, KOL3) %>%
  mutate(KOL1 = case_when(KOL1 <= 5 ~ "1", 
                          KOL1 <= 10 ~ "2",
                          KOL1 <= 15 ~ "3",
                          .default = "4"),
         KOL2 = case_when(KOL2 <= 5 ~ "1", 
                          KOL2 <= 10 ~ "2",
                          KOL2 <= 15 ~ "3",
                          .default = "4"),
         KOL3 = case_when(KOL3 <= 5 ~ "1", 
                          KOL3 <= 10 ~ "2",
                          KOL3 <= 15 ~ "3",
                          .default = "4")) %>%
  mutate_at(vars(KOL1, KOL2, KOL3), ~fct_relevel(., c("1","2","3","4")))

studenti_sankey <- studenti1_sankey %>% bind_rows(studenti2_sankey)
st_long <- studenti_sankey %>% make_long(KOL1, KOL2, KOL3)
postoci <- st_long %>% group_by(x, node) %>% summarize(n = n()) %>% 
  ungroup(node) %>% mutate(pct = n / sum(n)) %>% ungroup()
st2_long <- st_long %>% left_join(postoci, by = c("x","node"))

slike_logovi <- list.files("slike_logovi", full.names = TRUE)
names(slike_logovi) <- str_replace_all(slike_logovi, c("slike_logovi/" = "", "\\.png" = ""))

podaci_log_akt <- readRDS("../podaci/podaci_logovi_aktivnosti.rds")
podaci_log_spline <- readRDS("../podaci/podaci_logovi_spline.rds")
podaci_log_klase <- readRDS("../podaci/podaci_logovi_klase.rds")
freq_log_akt <- readRDS("../podaci/freq_logovi_aktivnosti.rds")
```

# Kolokviji, kvizovi, zadaće {data-navmenu="Deskriptiva"}

### Distribucije pojedinih aktivnosti po akademskim godinama

```{r, fig.width=10}
ggplot(zajedno_ocjene, aes(x = id, y = Bodovi)) +
  geom_boxplot() + facet_wrap(vars(Aktivnost), scales = "free_y", ncol = 3)
```

# Video, materijali, dolasci {data-navmenu="Deskriptiva"}

## Column 1

### Oznake

- VID_1 - ukupni broj logova na video materijale vezane za prvi kolokvij
- VID_2 - ukupni broj logova na video materijale vezane za drugi kolokvij
- VID_3 - ukupni broj logova na video materijale vezane za treći kolokvij

---

- D1 - ukupni broj dolazaka na predavanja do prvog kolokvija
- D2 - ukupni broj dolazaka na predavanja između prvog i drugog kolokvija
- D3 - ukupni broj dolazaka na predavanja između drugog i trećeg kolokvija

---

- M1 - ukupni broj logova na pdf materijale vezane za prvi kolokvij
- M2 - ukupni broj logova na pdf materijale vezane za drugi kolokvij
- M3 - ukupni broj logova na pdf materijale vezane za treći kolokvij

### Distribucije logova na video materijale po akademskim godinama

```{r}
ggplot(video_deskriptiva, aes(x = id, y = Logovi)) +
  geom_boxplot() + facet_wrap(vars(Aktivnost), scales = "free_y")
```

## Column 2

### Distribucije dolazaka na predavanja po akademskim godinama

```{r}
ggplot(dolasci_deskriptiva, aes(x = id, y = Dolasci)) +
  geom_boxplot() + facet_wrap(vars(Aktivnost), scales = "free_y")
```

### Distribucije logova na PDF materijale po akademskim godinama

```{r}
ggplot(materijali_deskriptiva, aes(x = id, y = Logovi)) +
  geom_boxplot() + facet_wrap(vars(Aktivnost), scales = "free_y")
```

# Distribucije kolokvijskih klasa {data-navmenu="Deskriptiva"}

## Column 1 {.tabset .tabset-fade data-width=300}

### dvije klase

```{r}
ggplot(zajedno_ocjene, aes(x=klasa2, fill = klasa2)) + geom_bar() + 
  facet_grid(rows = vars(id), cols = vars(Aktivnost), scales = "free_y") +
  labs(x = "klase") + theme(legend.position = "none")
```

### četiri klase

```{r}
ggplot(zajedno_ocjene, aes(x=klasa4, fill = klasa4)) + geom_bar() + 
  facet_grid(rows = vars(id), cols = vars(Aktivnost), scales = "free_y") +
  labs(x = "klase") + theme(legend.position = "none")
```

## Column 2 {.tabset .tabset-fade data-width=200}

### KOL1 tablice

#### Dvije klase (sve zajedno)

```{r}
zajedno_ocjene %>% filter(id == "ALL") %>% count(klasa2, Aktivnost) %>% 
  filter(Aktivnost == "KOL1") %>% select(-c("Aktivnost")) %>% 
  kbl() %>% kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Dvije klase (po godinama)

```{r}
zajedno_ocjene %>% filter(id %in% c("2021", "2022")) %>% 
  count(id, klasa2, Aktivnost) %>% filter(Aktivnost == "KOL1") %>% 
  select(-c("Aktivnost")) %>% kbl() %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Četiri klase (sve zajedno)

```{r}
zajedno_ocjene %>% filter(id == "ALL") %>% count(klasa4, Aktivnost) %>% 
  filter(Aktivnost == "KOL1") %>% select(-c("Aktivnost")) %>% 
  kbl() %>% kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Četiri klase (po godinama)

```{r}
zajedno_ocjene %>% filter(id %in% c("2021", "2022")) %>% 
  count(id, klasa4, Aktivnost) %>% filter(Aktivnost == "KOL1") %>% 
  select(-c("Aktivnost")) %>% kbl() %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL2 tablice

#### Dvije klase (sve zajedno)

```{r}
zajedno_ocjene %>% filter(id == "ALL") %>% count(klasa2, Aktivnost) %>%
  filter(Aktivnost == "KOL2") %>% select(-c("Aktivnost")) %>% 
  kbl() %>% kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Dvije klase (po godinama)

```{r}
zajedno_ocjene %>% filter(id %in% c("2021", "2022")) %>% 
  count(id, klasa2, Aktivnost) %>% filter(Aktivnost == "KOL2") %>% 
  select(-c("Aktivnost")) %>% kbl() %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Četiri klase (sve zajedno)

```{r}
zajedno_ocjene %>% filter(id == "ALL") %>% count(klasa4, Aktivnost) %>% 
  filter(Aktivnost == "KOL2") %>% select(-c("Aktivnost")) %>% 
  kbl() %>% kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Četiri klase (po godinama)

```{r}
zajedno_ocjene %>% filter(id %in% c("2021", "2022")) %>% 
  count(id, klasa4, Aktivnost) %>% filter(Aktivnost == "KOL2") %>% 
  select(-c("Aktivnost")) %>% kbl() %>% 
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL3 tablice

#### Dvije klase (sve zajedno)

```{r}
zajedno_ocjene %>% filter(id == "ALL") %>% count(klasa2, Aktivnost) %>%
  filter(Aktivnost == "KOL3") %>% select(-c("Aktivnost")) %>% 
  kbl() %>% kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Dvije klase (po godinama)

```{r}
zajedno_ocjene %>% filter(id %in% c("2021", "2022")) %>% 
  count(id, klasa2, Aktivnost) %>% filter(Aktivnost == "KOL3") %>% 
  select(-c("Aktivnost")) %>% kbl() %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Četiri klase (sve zajedno)

```{r}
zajedno_ocjene %>% filter(id == "ALL") %>% count(klasa4, Aktivnost) %>% 
  filter(Aktivnost == "KOL3") %>% select(-c("Aktivnost")) %>% 
  kbl() %>% kable_classic("hover",full_width = F, html_font = "Cambria")
```

#### Četiri klase (po godinama)

```{r}
zajedno_ocjene %>% filter(id %in% c("2021", "2022")) %>% 
  count(id, klasa4, Aktivnost) %>% filter(Aktivnost == "KOL3") %>% 
  select(-c("Aktivnost")) %>% kbl() %>% 
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

# Vizualizacija logova {data-navmenu="Deskriptiva" #viz-log}

## Column 1

### Slike logovi

```{r}
bsselect(slike_logovi, type = "img", selected = "KOL1_line",
         live_search = FALSE, show_tick = TRUE, frame_height = "80%")
```

## Column 2

### Slike logovi

```{r}
bsselect(slike_logovi, type = "img", selected = "KOL2_line",
         live_search = FALSE, show_tick = TRUE, frame_height = "80%")
```

# Logovi po aktivnostima {data-navmenu="Deskriptiva"}

## Column 1 {.tabset .tabset-fade}

### Line

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, color = id)) +
  geom_line() + geom_point() + facet_wrap(vars(klasa)) +
  labs(caption = "Vizualizacija KOL2 klasa po vrsti logova")
```

### Spline

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, color = id)) + geom_point() + 
  geom_line(data = podaci_log_spline, aes(x = krivulja_x, y = krivulja_y)) +
  facet_wrap(vars(klasa)) + 
  labs(caption = "Vizualizacija KOL2 klasa po vrsti logova")
```

### Bump

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = rank_logs, color = id)) +
  geom_bump(alpha = 0.7) + geom_point() +
  scale_y_reverse() + facet_wrap(vars(klasa)) +
  labs(caption = "Vizualizacija KOL2 klasa po vrsti logova")
```

### Point

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = id, color = id)) +
  geom_point(aes(size = mean_logs)) + guides(color="none") + 
  facet_wrap(vars(klasa)) +
  labs(caption = "Vizualizacija KOL2 klasa po vrsti logova")
```

### Bar

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, fill = id)) +
  geom_col(position = "fill") + facet_wrap(vars(klasa)) +
  labs(caption = "Vizualizacija KOL2 klasa po vrsti logova")
```

### Density PDF

```{r}
ggplot(freq_log_akt %>% filter(id == "PDF"), aes(x = logovi, y = factor(Tjedan), fill = klasa)) +
  geom_density_ridges(scale = 0.9, alpha = 0.9, rel_min_height = 0.001) +
  facet_wrap(vars(klasa), ncol = 4) + guides(fill = "none") + 
  labs(x = "logovi PDF", y = "Tjedan")
```

### Density VIDEO

```{r}
ggplot(freq_log_akt %>% filter(id == "VIDEO"), aes(x = logovi, y = factor(Tjedan), fill = klasa)) +
  geom_density_ridges(scale = 0.9, alpha = 0.9, rel_min_height = 0.001) +
  facet_wrap(vars(klasa), ncol = 4) + guides(fill = "none") + 
  labs(x = "logovi VIDEO", y = "Tjedan")
```

### Density TEST

```{r}
ggplot(freq_log_akt %>% filter(id == "TEST"), aes(x = logovi, y = factor(Tjedan), fill = klasa)) +
  geom_density_ridges(scale = 0.9, alpha = 0.9, rel_min_height = 0.001) +
  facet_wrap(vars(klasa), ncol = 4) + guides(fill = "none") + 
  labs(x = "logovi TEST", y = "Tjedan")
```

## Column 2 {.tabset .tabset-fade}

### Line

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, color = klasa)) +
  geom_line() + geom_point() + facet_wrap(vars(id), scales = "free_y", nrow = 3) +
  labs(caption = "Vizualizacija pojedine vrste logova po KOL2 klasama")
```

### Spline

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, color = klasa)) + geom_point() + 
  geom_line(data = podaci_log_spline, aes(x = krivulja_x, y = krivulja_y)) +
  facet_wrap(vars(id), scales = "free_y", nrow = 3) + 
  labs(caption = "Vizualizacija pojedine vrste logova po KOL2 klasama")
```

### Bump

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = rank_logs, color = klasa)) +
  geom_bump(alpha = 0.7) + geom_point() + 
  scale_y_reverse() + facet_wrap(vars(id), scales = "free_y", nrow = 3) +
  labs(caption = "Vizualizacija pojedine vrste logova po KOL2 klasama")
```

### Point

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = klasa, color = klasa)) +
  geom_point(aes(size = mean_logs)) + guides(color="none") + 
  facet_wrap(vars(id), scales = "free_y", nrow = 3) +
  labs(caption = "Vizualizacija pojedine vrste logova po KOL2 klasama")
```

### Bar

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, fill = klasa)) +
  geom_col(position = "fill") + 
  facet_wrap(vars(id), scales = "free_y", nrow = 3) +
  labs(caption = "Vizualizacija pojedine vrste logova po KOL2 klasama")
```

### Density PDF

```{r}
ggplot(freq_log_akt %>% filter(id == "PDF"), aes(x = logovi, y = factor(Tjedan), fill = klasa)) +
  geom_density_ridges(scale = 0.9, alpha = 0.9, rel_min_height = 0.001) +
  facet_wrap(vars(klasa), ncol = 4) + guides(fill = "none") + 
  labs(x = "logovi PDF", y = "Tjedan")
```

### Density VIDEO

```{r}
ggplot(freq_log_akt %>% filter(id == "VIDEO"), aes(x = logovi, y = factor(Tjedan), fill = klasa)) +
  geom_density_ridges(scale = 0.9, alpha = 0.9, rel_min_height = 0.001) +
  facet_wrap(vars(klasa), ncol = 4) + guides(fill = "none") + 
  labs(x = "logovi VIDEO", y = "Tjedan")
```

### Density TEST

```{r}
ggplot(freq_log_akt %>% filter(id == "TEST"), aes(x = logovi, y = factor(Tjedan), fill = klasa)) +
  geom_density_ridges(scale = 0.9, alpha = 0.9, rel_min_height = 0.001) +
  facet_wrap(vars(klasa), ncol = 4) + guides(fill = "none") + 
  labs(x = "logovi TEST", y = "Tjedan")
```

# Logovi po aktivnostima - GRID {data-navmenu="Deskriptiva"}

## Column {.tabset .tabset-fade}

### Line

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, color = klasa)) +
  geom_line() + geom_point() + 
  facet_grid(rows = vars(id), cols = vars(klasa)) + guides(color = FALSE)
```

### Line (free y)

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, color = klasa)) +
  geom_line() + geom_point() + 
  facet_grid(rows = vars(id), cols = vars(klasa), scales = "free_y") + 
  guides(color = FALSE)
```

### Spline

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, color = klasa)) + geom_point() + 
  geom_line(data = podaci_log_spline, aes(x = krivulja_x, y = krivulja_y)) +
  facet_grid(rows = vars(id), cols = vars(klasa)) + guides(color = FALSE)
```

### Spline (free y)

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = mean_logs, color = klasa)) + geom_point() + 
  geom_line(data = podaci_log_spline, aes(x = krivulja_x, y = krivulja_y)) +
  facet_grid(rows = vars(id), cols = vars(klasa), scales = "free_y") + 
  guides(color = FALSE)
```

### Bump

```{r}
ggplot(podaci_log_akt, aes(x = Tjedan, y = rank_logs, color = klasa)) +
  geom_bump(alpha = 0.7) + geom_point() + scale_y_reverse() +
  facet_grid(rows = vars(id), cols = vars(klasa)) + guides(color = FALSE)
```

# Logovi klase online/offline {data-navmenu="Deskriptiva"}

## Column {.tabset .tabset-fade}

### online/offline (postotak)

```{r}
ggplot(podaci_log_klase, aes(x = Tjedan, y = vrijednost, fill = status)) +
  geom_col(position = "fill") +
  facet_grid(rows = vars(id), cols = vars(klasa)) + ylab("Postotak studenata")
```

### online/offline (brojčano)

```{r}
ggplot(podaci_log_klase, aes(x = Tjedan, y = vrijednost, fill = status)) +
  geom_col() +
  facet_grid(rows = vars(id), cols = vars(klasa)) + ylab("Broj studenata")
```

# Kolokvijske klase {data-navmenu="Deskriptiva"}

### Prijelazi između kolokvijskih klasa

```{r}
ggplot(st2_long, aes(x = x, next_x = next_x, node = node, next_node = next_node,
                    fill = factor(node),
                    label = paste0(node, ' (', round(pct * 100, 2), '%)'))) +
  geom_sankey(flow.alpha = 0.5, node.color = "black", show.legend = FALSE) +
  geom_sankey_label(size = 3, color = "black", fill= "white", hjust = -0.3) +
  theme_bw() + theme_sankey(base_size = 16) +
  theme(axis.title = element_blank(), axis.text.y = element_blank(), 
        axis.ticks = element_blank(), panel.grid = element_blank())
```

# Opisi modela {data-navmenu="KOLOKVIJ 1"}

## Column 1

### 1. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima do prvog kolokvija
- DZ - suma bodova na domaćim zadaćama do prvog kolokvija
- VIDEO - ukupni broj klikova na video materijale do prvog kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale do prvog kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja do prvog kolokvija

**Response** - binarna klasifikacija studenata na temelju broja bodova na prvom kolokviju.

- **1** (pozitivna klasa): ako je na prvom kolokviju ukupni broj bodova veći ili jednak od 10
- **0** (negativna klasa): ako je na prvom kolokviju ukupni broj bodova strogo manji od 10

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

## Column 2

### 2. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima do prvog kolokvija
- DZ - suma bodova na domaćim zadaćama do prvog kolokvija
- VIDEO - ukupni broj klikova na video materijale do prvog kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale do prvog kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja do prvog kolokvija

**Response** - Klasifikacija studenata na temelju broja bodova na prvom kolokviju.

- **1** - ako je na prvom kolokviju ukupni broj bodova unutar intervala [0,5]
- **2** - ako je na prvom kolokviju ukupni broj bodova unutar intervala (5,10]
- **3** - ako je na prvom kolokviju ukupni broj bodova unutar intervala (10,15]
- **4** - ako je na prvom kolokviju ukupni broj bodova unutar intervala (15,20]

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

# 1. model - hiperparametri {data-navmenu="KOLOKVIJ 1"}

## Column 1

### Testirani hiperparametri

```{r}
KOL1_2klase_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL1_2klase_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL1_2klase_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 1. model - efikasnost {data-navmenu="KOLOKVIJ 1"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL1_2klase_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL1_2klase_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL1_2klase_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL1_2klase_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL1_2klase_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# 1. model - važnost prediktora {data-navmenu="KOLOKVIJ 1"}

## Columnn 1

### Gini

```{r}
KOL1_2klase_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL1_2klase_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL1_2klase, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL1_2klase, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 1. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 1"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL1_2klase, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL1_2klase, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL1_2klase, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL1_2klase, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# 2. model - hiperparametri {data-navmenu="KOLOKVIJ 1"}

## Column 1

### Testirani hiperparametri

```{r}
KOL1_4klase_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3,) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL1_4klase_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL1_4klase_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 2. model - efikasnost {data-navmenu="KOLOKVIJ 1"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL1_4klase_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab2 <- KOL1_4klase_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL1_4klase_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL1_4klase_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

### Gain curve

```{r}
KOL1_4klase_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

# 2. model - važnost prediktora {data-navmenu="KOLOKVIJ 1"}

## Columnn 1

### Gini

```{r}
KOL1_4klase_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL1_4klase_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL1_4klase, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL1_4klase, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 2. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 1"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL1_4klase, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL1_4klase, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL1_4klase, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL1_4klase, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# Boruta history {data-navmenu="KOLOKVIJ 1"}

## Column 1

### KOL1 - 1. model

```{r}
boruta_KOL1_2klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL1 - 1. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

## Column 2

### KOL1 - 2. model

```{r}
boruta_KOL1_4klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL1 - 2. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

# Opisi modela {data-navmenu="KOLOKVIJ 2"}

## Column 1

### 1. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između prvog i drugog kolokvija
- DZ - suma bodova na domaćim zadaćama između prvog i drugog kolokvija
- VIDEO - ukupni broj klikova na video materijale između prvog i drugog kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između prvog i drugog kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između prvog i drugog kolokvija

**Response** - binarna klasifikacija studenata na temelju broja bodova na drugom kolokviju.

- **1** (pozitivna klasa): ako je na drugom kolokviju ukupni broj bodova veći ili jednak od 10
- **0** (negativna klasa): ako je na drugom kolokviju ukupni broj bodova strogo manji od 10

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

### 2. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između prvog i drugog kolokvija
- DZ - suma bodova na domaćim zadaćama između prvog i drugog kolokvija
- VIDEO - ukupni broj klikova na video materijale između prvog i drugog kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između prvog i drugog kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između prvog i drugog kolokvija

**Response** - Klasifikacija studenata na temelju broja bodova na drugom kolokviju.

- **1** - ako je na drugom kolokviju ukupni broj bodova unutar intervala [0,5]
- **2** - ako je na drugom kolokviju ukupni broj bodova unutar intervala (5,10]
- **3** - ako je na drugom kolokviju ukupni broj bodova unutar intervala (10,15]
- **4** - ako je na drugom kolokviju ukupni broj bodova unutar intervala (15,20]

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

## Column 2

### 3. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između prvog i drugog kolokvija
- DZ - suma bodova na domaćim zadaćama između prvog i drugog kolokvija
- VIDEO - ukupni broj klikova na video materijale između prvog i drugog kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između prvog i drugog kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između prvog i drugog kolokvija
- KOL1 - ukupni broj bodova na prvom kolokviju

**Response** - binarna klasifikacija studenata na temelju broja bodova na drugom kolokviju.

- **1** (pozitivna klasa): ako je na drugom kolokviju ukupni broj bodova veći ili jednak od 10
- **0** (negativna klasa): ako je na drugom kolokviju ukupni broj bodova strogo manji od 10

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

### 4. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između prvog i drugog kolokvija
- DZ - suma bodova na domaćim zadaćama između prvog i drugog kolokvija
- VIDEO - ukupni broj klikova na video materijale između prvog i drugog kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između prvog i drugog kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između prvog i drugog kolokvija
- KOL1 - ukupni broj bodova na prvom kolokviju

**Response** - Klasifikacija studenata na temelju broja bodova na drugom kolokviju.

- **1** - ako je na drugom kolokviju ukupni broj bodova unutar intervala [0,5]
- **2** - ako je na drugom kolokviju ukupni broj bodova unutar intervala (5,10]
- **3** - ako je na drugom kolokviju ukupni broj bodova unutar intervala (10,15]
- **4** - ako je na drugom kolokviju ukupni broj bodova unutar intervala (15,20]

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

# 1. model - hiperparametri {data-navmenu="KOLOKVIJ 2"}

## Column 1

### Testirani hiperparametri

```{r}
KOL2_2klase_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL2_2klase_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL2_2klase_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 1. model - efikasnost {data-navmenu="KOLOKVIJ 2"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL2_2klase_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL2_2klase_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL2_2klase_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL2_2klase_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL2_2klase_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# 1. model - važnost prediktora {data-navmenu="KOLOKVIJ 2"}

## Columnn 1

### Gini

```{r}
KOL2_2klase_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL2_2klase_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL2_2klase, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL2_2klase, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 1. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 2"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL2_2klase, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL2_2klase, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL2_2klase, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL2_2klase, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# 2. model - hiperparametri {data-navmenu="KOLOKVIJ 2"}

## Column 1

### Testirani hiperparametri

```{r}
KOL2_4klase_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3,) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL2_4klase_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL2_4klase_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 2. model - efikasnost {data-navmenu="KOLOKVIJ 2"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL2_4klase_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab2 <- KOL2_4klase_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL2_4klase_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL2_4klase_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

### Gain curve

```{r}
KOL2_4klase_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

# 2. model - važnost prediktora {data-navmenu="KOLOKVIJ 2"}

## Columnn 1

### Gini

```{r}
KOL2_4klase_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL2_4klase_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL2_4klase, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL2_4klase, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 2. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 2"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL2_4klase, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL2_4klase, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL2_4klase, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL2_4klase, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# 3. model - hiperparametri {data-navmenu="KOLOKVIJ 2"}

## Column 1

### Testirani hiperparametri

```{r}
KOL2_2klase_KOL1_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL2_2klase_KOL1_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL2_2klase_KOL1_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 3. model - efikasnost {data-navmenu="KOLOKVIJ 2"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL2_2klase_KOL1_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL2_2klase_KOL1_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL2_2klase_KOL1_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL2_2klase_KOL1_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL2_2klase_KOL1_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# 3. model - važnost prediktora {data-navmenu="KOLOKVIJ 2"}

## Columnn 1

### Gini

```{r}
KOL2_2klase_KOL1_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL2_2klase_KOL1_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL2_2klase_KOL1, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL2_2klase_KOL1, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 3. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 2"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL2_2klase_KOL1, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL2_2klase_KOL1, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL2_2klase_KOL1, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL2_2klase_KOL1, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# 4. model - hiperparametri {data-navmenu="KOLOKVIJ 2"}

## Column 1

### Testirani hiperparametri

```{r}
KOL2_4klase_KOL1_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3,) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL2_4klase_KOL1_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL2_4klase_KOL1_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 4. model - efikasnost {data-navmenu="KOLOKVIJ 2"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL2_4klase_KOL1_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab2 <- KOL2_4klase_KOL1_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL2_4klase_KOL1_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL2_4klase_KOL1_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

### Gain curve

```{r}
KOL2_4klase_KOL1_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

# 4. model - važnost prediktora {data-navmenu="KOLOKVIJ 2"}

## Columnn 1

### Gini

```{r}
KOL2_4klase_KOL1_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL2_4klase_KOL1_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL2_4klase_KOL1, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL2_4klase_KOL1, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 4. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 2"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL2_4klase_KOL1, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL2_4klase_KOL1, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL2_4klase_KOL1, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL2_4klase_KOL1, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# Boruta history {data-navmenu="KOLOKVIJ 2"}

## Column 1 {.tabset .tabset-fade}

### KOL2 - 1. model

```{r}
boruta_KOL2_2klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL2 - 1. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL2 - 2. model

```{r}
boruta_KOL2_4klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL2 - 2. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL2 - 3. model

```{r}
boruta_KOL2_2klase_KOL1$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL2 - 3. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL2 - 4. model

```{r}
boruta_KOL2_4klase_KOL1$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL2 - 4. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

## Column 2 {.tabset .tabset-fade}

### KOL2 - 1. model

```{r}
boruta_KOL2_2klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL2 - 1. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL2 - 2. model

```{r}
boruta_KOL2_4klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL2 - 2. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL2 - 3. model

```{r}
boruta_KOL2_2klase_KOL1$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL2 - 3. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL2 - 4. model

```{r}
boruta_KOL2_4klase_KOL1$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL2 - 4. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

# Opisi modela {data-navmenu="KOLOKVIJ 3"}

## Column 1

### 1. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između drugog i trećeg kolokvija
- DZ - suma bodova na domaćim zadaćama između drugog i trećeg kolokvija
- VIDEO - ukupni broj klikova na video materijale između drugog i trećeg kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između drugog i trećeg kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između drugog i trećeg kolokvija

**Response** - binarna klasifikacija studenata na temelju broja bodova na trećem kolokviju.

- **1** (pozitivna klasa): ako je na trećem kolokviju ukupni broj bodova veći ili jednak od 10
- **0** (negativna klasa): ako je na trećem kolokviju ukupni broj bodova strogo manji od 10

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

### 2. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između drugog i trećeg kolokvija
- DZ - suma bodova na domaćim zadaćama između drugog i trećeg kolokvija
- VIDEO - ukupni broj klikova na video materijale između drugog i trećeg kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između drugog i trećeg kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između drugog i trećeg kolokvija

**Response** - Klasifikacija studenata na temelju broja bodova na trećem kolokviju.

- **1** - ako je na trećem kolokviju ukupni broj bodova unutar intervala [0,5]
- **2** - ako je na trećem kolokviju ukupni broj bodova unutar intervala (5,10]
- **3** - ako je na trećem kolokviju ukupni broj bodova unutar intervala (10,15]
- **4** - ako je na trećem kolokviju ukupni broj bodova unutar intervala (15,20]

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

## Column 2

### 3. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između drugog i trećeg kolokvija
- DZ - suma bodova na domaćim zadaćama između drugog i trećeg kolokvija
- VIDEO - ukupni broj klikova na video materijale između drugog i trećeg kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između drugog i trećeg kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između drugog i trećeg kolokvija
- KOL1 - ukupni broj bodova na prvom kolokviju
- KOL2 - ukupni broj bodova na drugom kolokviju

**Response** - binarna klasifikacija studenata na temelju broja bodova na trećem kolokviju.

- **1** (pozitivna klasa): ako je na trećem kolokviju ukupni broj bodova veći ili jednak od 10
- **0** (negativna klasa): ako je na trećem kolokviju ukupni broj bodova strogo manji od 10

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3,4}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

### 4. model

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između drugog i trećeg kolokvija
- DZ - suma bodova na domaćim zadaćama između drugog i trećeg kolokvija
- VIDEO - ukupni broj klikova na video materijale između drugog i trećeg kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između drugog i trećeg kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između drugog i trećeg kolokvija
- KOL1 - ukupni broj bodova na prvom kolokviju
- KOL2 - ukupni broj bodova na drugom kolokviju

**Response** - Klasifikacija studenata na temelju broja bodova na trećem kolokviju.

- **1** - ako je na trećem kolokviju ukupni broj bodova unutar intervala [0,5]
- **2** - ako je na trećem kolokviju ukupni broj bodova unutar intervala (5,10]
- **3** - ako je na trećem kolokviju ukupni broj bodova unutar intervala (10,15]
- **4** - ako je na trećem kolokviju ukupni broj bodova unutar intervala (15,20]

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3,4}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

# 1. model - hiperparametri {data-navmenu="KOLOKVIJ 3"}

## Column 1

### Testirani hiperparametri

```{r}
KOL3_2klase_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL3_2klase_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL3_2klase_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 1. model - efikasnost {data-navmenu="KOLOKVIJ 3"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL3_2klase_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL3_2klase_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL3_2klase_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL3_2klase_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL3_2klase_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# 1. model - važnost prediktora {data-navmenu="KOLOKVIJ 3"}

## Columnn 1

### Gini

```{r}
KOL3_2klase_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL3_2klase_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL3_2klase, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL3_2klase, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 1. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 3"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL3_2klase, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL3_2klase, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL3_2klase, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL3_2klase, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# 2. model - hiperparametri {data-navmenu="KOLOKVIJ 3"}

## Column 1

### Testirani hiperparametri

```{r}
KOL3_4klase_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3,) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL3_4klase_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL3_4klase_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 2. model - efikasnost {data-navmenu="KOLOKVIJ 3"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL3_4klase_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab2 <- KOL3_4klase_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL3_4klase_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL3_4klase_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

### Gain curve

```{r}
KOL3_4klase_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

# 2. model - važnost prediktora {data-navmenu="KOLOKVIJ 3"}

## Columnn 1

### Gini

```{r}
KOL3_4klase_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL3_4klase_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL3_4klase, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL3_4klase, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 2. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 3"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL3_4klase, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL3_4klase, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL3_4klase, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL3_4klase, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# 3. model - hiperparametri {data-navmenu="KOLOKVIJ 3"}

## Column 1

### Testirani hiperparametri

```{r}
KOL3_2klase_KOL12_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL3_2klase_KOL12_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL3_2klase_KOL12_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 3. model - efikasnost {data-navmenu="KOLOKVIJ 3"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL3_2klase_KOL12_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL3_2klase_KOL12_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL3_2klase_KOL12_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL3_2klase_KOL12_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL3_2klase_KOL12_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# 3. model - važnost prediktora {data-navmenu="KOLOKVIJ 3"}

## Columnn 1

### Gini

```{r}
KOL3_2klase_KOL12_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL3_2klase_KOL12_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL3_2klase_KOL12, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL3_2klase_KOL12, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 3. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 3"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL3_2klase_KOL12, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL3_2klase_KOL12, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL3_2klase_KOL12, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL3_2klase_KOL12, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# 4. model - hiperparametri {data-navmenu="KOLOKVIJ 3"}

## Column 1

### Testirani hiperparametri

```{r}
KOL3_4klase_KOL12_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3,) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL3_4klase_KOL12_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL3_4klase_KOL12_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# 4. model - efikasnost {data-navmenu="KOLOKVIJ 3"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL3_4klase_KOL12_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab2 <- KOL3_4klase_KOL12_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1:.pred_4)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL3_4klase_KOL12_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL3_4klase_KOL12_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

### Gain curve

```{r}
KOL3_4klase_KOL12_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1:.pred_4) %>% autoplot()
```

# 4. model - važnost prediktora {data-navmenu="KOLOKVIJ 3"}

## Columnn 1

### Gini

```{r}
KOL3_4klase_KOL12_fit %>% extract_fit_parsnip() %>% vip()
```

### permutacija

```{r}
permKOL3_4klase_KOL12_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### Boruta

```{r}
plot(boruta_KOL3_4klase_KOL12, cex.axis=.7, las=2, xlab="",
     colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

### Boruta (history)

```{r}
plotImpHistory(boruta_KOL3_4klase_KOL12, colCode = c("green", "orange", "#f6546a", "#2acaea"))
```

# 4. model - lokalna važnost varijabli {data-navmenu="KOLOKVIJ 3"}

## Column 1

### geom_point

```{r}
ggplot(lokal_imp_KOL3_4klase_KOL12, aes(x=students, y=`local importance`)) + geom_point(alpha=0.3) +
  facet_wrap(vars(aktivnost))
```

### geom_line

```{r}
ggplot(lokal_imp_KOL3_4klase_KOL12, aes(x=students, y=`local importance`)) + geom_line(linewidth=0.2) +
  facet_wrap(vars(aktivnost))
```

## Column 2

### geom_boxplot

```{r}
ggplot(lokal_imp_KOL3_4klase_KOL12, aes(x=aktivnost, y=`local importance`)) + geom_boxplot()
```

### geom_histogram

```{r}
ggplot(lokal_imp_KOL3_4klase_KOL12, aes(x=`local importance`)) + geom_histogram() +
  facet_wrap(vars(aktivnost), scales = "free_y")
```

# Boruta history {data-navmenu="KOLOKVIJ 3"}

## Column 1 {.tabset .tabset-fade}

### KOL3 - 1. model

```{r}
boruta_KOL3_2klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL3 - 1. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL3 - 2. model

```{r}
boruta_KOL3_4klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL3 - 2. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL3 - 3. model

```{r}
boruta_KOL3_2klase_KOL12$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL3 - 3. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL3 - 4. model

```{r}
boruta_KOL3_4klase_KOL12$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL3 - 4. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

## Column 2 {.tabset .tabset-fade}

### KOL3 - 1. model

```{r}
boruta_KOL3_2klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL3 - 1. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL3 - 2. model

```{r}
boruta_KOL3_4klase$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL3 - 2. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL3 - 3. model

```{r}
boruta_KOL3_2klase_KOL12$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL3 - 3. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

### KOL3 - 4. model

```{r}
boruta_KOL3_4klase_KOL12$ImpHistory %>% 
  kbl(caption = "Boruta: Važnost prediktora kroz iteracije (KOL3 - 4. model)") %>%
  kable_classic("hover",full_width = F, html_font = "Cambria")
```

# Opis modifikacije {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

### Modifikacija prvog modela za treći kolokvij

**Prediktori**

- KVIZ - suma svih bodova na kvizovima između drugog i trećeg kolokvija
- DZ - suma bodova na domaćim zadaćama između drugog i trećeg kolokvija
- VIDEO - ukupni broj klikova na video materijale između drugog i trećeg kolokvija
- MATERIJALI - ukupni broj klikova na PDF materijale između drugog i trećeg kolokvija
- DOLASCI - ukupni broj dolazaka na predavanja između drugog i trećeg kolokvija

**Response** - binarna klasifikacija studenata na temelju broja bodova na trećem kolokviju.

- **1** (pozitivna klasa): ako je na trećem kolokviju ukupni broj bodova veći ili jednak od 10
- **0** (negativna klasa): ako je na trećem kolokviju ukupni broj bodova strogo manji od 10

**Modifikacija** - pokušala se povećati efikasnost modela na pozitivnoj klasi koristeći nekoliko
algoritama

- preko dodjeljivanja težina klasama
  - *težine 1:* klasa **1** ima 7 puta veću težinu od klase **0** jer otprilike ima toliko puta manje elemenata
  - *težine 2:* klasa **1** ima 14 puta veću težinu od klase **0**
- SMOTE algoritam
- ROSE algoritam

**Literatura**
<ul>
<li><a href="imbalanced_classes.pdf" target="_blank">Opčeniti opisi</a></li>
<li><a href="step_rose.pdf" target="_blank">ROSE</a></li>
<li><a href="step_smote.pdf" target="_blank">SMOTE</a></li>
<li><a href="forest_unbalanced_class.pdf" target="_blank">Weighted random forest</a></li>
</ul>

**Hiperparametri** - za odabir optimalne kombinacije hiperparametara napravljen je 
cross-validation s 10 *kutija* pri čemu je na slučajni način isprobano 1000 kombinacija 
hiperparametara *mtry*, *min_n* i *trees*. Najbolji model je odabran s obzirom na *roc_auc*
metriku.

- *mtry* - uzimane su vrijednosti iz skupa {2,3}
- *trees* - uzimani su prirodni brojevi između 400 i 1500.
- *min_n* - uzimani su prirodni brojevi između 2 i 40.

# Težine 1 - hiperparametri {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

### Testirani hiperparametri

```{r}
KOL3_2klase_tezine1_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL3_2klase_tezine1_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL3_2klase_tezine1_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# Težine 2 - hiperparametri {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

### Testirani hiperparametri

```{r}
KOL3_2klase_tezine2_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL3_2klase_tezine2_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL3_2klase_tezine2_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# SMOTE - hiperparametri {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

### Testirani hiperparametri

```{r}
KOL3_2klase_smote_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL3_2klase_smote_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL3_2klase_smote_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# ROSE - hiperparametri {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

### Testirani hiperparametri

```{r}
KOL3_2klase_rose_tuning %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc", trees > 0) %>%
  pivot_longer(cols = mtry:min_n) %>%
  mutate(best_mod = mean == max(mean)) %>% 
  ggplot(aes(x = value, y = mean)) +
  #geom_line(alpha = 0.5, size = 1.5) +
  geom_point(aes(color = best_mod), size = 0.3) +
  facet_wrap(~name, scales = "free_x") +
  scale_x_continuous() +
  labs(y = "roc auc", x = "", color = "Best Model")
```

## Column 2

### 200 najboljih modela za roc_auc metriku

```{r}
print(KOL3_2klase_rose_tuning %>% show_best(metric = 'roc_auc', n = 200), n = 200)
```

### 200 najboljih modela za mcc metriku

```{r}
print(KOL3_2klase_rose_tuning %>% show_best(metric = 'mcc', n = 200), n = 200)
```

# Težine 1 - efikasnost {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

### Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL3_2klase_tezine1_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL3_2klase_tezine1_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL3_2klase_tezine1_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL3_2klase_tezine1_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL3_2klase_tezine1_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# Težine 2 - efikasnost {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL3_2klase_tezine2_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL3_2klase_tezine2_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL3_2klase_tezine2_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL3_2klase_tezine2_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL3_2klase_tezine2_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# SMOTE - efikasnost {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL3_2klase_smote_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL3_2klase_smote_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL3_2klase_smote_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL3_2klase_smote_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL3_2klase_smote_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# ROSE - efikasnost {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

###  Metrike na testnom i trening skupu {data-height=200}

```{r}
tab1 <- KOL3_2klase_rose_fit %>% collect_predictions() %>% 
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab2 <- KOL3_2klase_rose_work %>%
  rf_metrike(truth = klasa, estimate = .pred_class, .pred_1)
tab1 %>% inner_join(tab2, by = ".metric") %>%
  select(.metric, .estimator = .estimator.x, trening = .estimate.y, test = .estimate.x)
```

### Confusion matrix

```{r}
KOL3_2klase_rose_fit %>% collect_predictions() %>%
  conf_mat(truth = klasa, estimate = .pred_class) %>% autoplot("heatmap") +
  scale_fill_gradient(low = "#87DEE7",
                       high = "#FFFFCC")
```

## Column 2

### ROC curve

```{r}
KOL3_2klase_rose_fit %>% collect_predictions() %>% roc_curve(klasa, .pred_1) %>% autoplot()
```

### Gain curve

```{r}
KOL3_2klase_rose_fit %>% collect_predictions() %>% gain_curve(klasa, .pred_1) %>% autoplot()
```

# Važnost varijabli {data-navmenu="KOL3 modifikacije modela 1"}

## Column 1

### težine 1 (Gini)

```{r}
KOL3_2klase_tezine1_fit %>% extract_fit_parsnip() %>% vip()
```

### težine 1 (permutacija)

```{r}
permKOL3_2klase_tezine1_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 2

### težine 2 (Gini)

```{r}
KOL3_2klase_tezine2_fit %>% extract_fit_parsnip() %>% vip()
```

### težine 2 (permutacija)

```{r}
permKOL3_2klase_tezine2_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 3

### ROSE (Gini)

```{r}
KOL3_2klase_rose_fit %>% extract_fit_parsnip() %>% vip()
```

### ROSE (permutacija)

```{r}
permKOL3_2klase_rose_fit %>% extract_fit_parsnip() %>% vip()
```

## Column 4

### SMOTE (Gini)

```{r}
KOL3_2klase_smote_fit %>% extract_fit_parsnip() %>% vip()
```

### SMOTE (permutacija)

```{r}
permKOL3_2klase_smote_fit %>% extract_fit_parsnip() %>% vip()
```
