Cieľom tohto projektu je preskúmať socioekonomické faktory, ktoré ovplyvňujú mieru nezamestnanosti v krajinách Európskej únie, a navrhnúť predikčné modely schopné identifikovať krajiny s nadpriemerne vysokou nezamestnanosťou. Analýza vychádza z údajov Eurostatu za roky 2018–2022 pre 27 členských štátov EÚ.
Predmetom skúmania je binárna klasifikácia: či daná krajina v danom roku vykazuje vysokú nezamestnanosť (definovanú ako miera nezamestnanosti ≥ 8 %), alebo nie. Na predikciu využívame tri metódy strojového učenia: logistickú regresiu, rozhodovací strom a Support Vector Machine (SVM).
Aké socioekonomické premenné najlepšie predpovedajú vysokú mieru nezamestnanosti v krajinách EÚ a ktorý klasifikačný model dosahuje najvyššiu prediktívnu presnosť?
H1: Krajiny s nižším HDP na obyvateľa (v PPS), vyššou mierou chudoby a vyšším podielom nezamestnanosti mladých majú signifikantne vyššiu pravdepodobnosť výskytu vysokej celkovej nezamestnanosti.
H0: Sledované socioekonomické premenné nemajú štatisticky významný vplyv na klasifikáciu vysokej nezamestnanosti.
Očakávame, že H1 potvrdíme a že SVM alebo rozhodovací strom dosiahnu lepšiu klasifikačnú presnosť ako logistická regresia vďaka schopnosti zachytiť nelineárne vzťahy v dátach.
# Načítanie datasetu
data <- read.csv("eu_nezamestnanost.csv", stringsAsFactors = FALSE)
# Premenná cieľ ako faktor
data$vysoka_nezamestnanost <- factor(
data$vysoka_nezamestnanost,
levels = c(0, 1),
labels = c("Nie", "Áno")
)
# Prvých 10 riadkov
kable(head(data, 10),
caption = "Prvých 10 záznamov datasetu",
col.names = c("Krajina", "Rok", "Miera nezam. (%)", "HDP/os. (PPS)",
"Inflácia (%)", "Vzdelanosť (%)", "Výdavky vzd. (%HDP)",
"Miera chudoby (%)", "Soc. poistenie (%)",
"Nezam. mladých (%)", "Vysoká nezam.")) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)| Krajina | Rok | Miera nezam. (%) | HDP/os. (PPS) | Inflácia (%) | Vzdelanosť (%) | Výdavky vzd. (%HDP) | Miera chudoby (%) | Soc. poistenie (%) | Nezam. mladých (%) | Vysoká nezam. |
|---|---|---|---|---|---|---|---|---|---|---|
| Austria | 2022 | 4.8 | 139 | 8.6 | 42.1 | 5.2 | 12.7 | 32.5 | 8.8 | Nie |
| Austria | 2021 | 5.1 | 130 | 2.8 | 40.8 | 5.0 | 14.1 | 34.2 | 10.6 | Nie |
| Austria | 2020 | 5.4 | 126 | 1.4 | 39.5 | 4.9 | 13.8 | 34.9 | 10.5 | Nie |
| Austria | 2019 | 4.5 | 133 | 1.5 | 40.6 | 4.8 | 13.1 | 34.5 | 8.7 | Nie |
| Austria | 2018 | 4.9 | 133 | 2.1 | 40.2 | 4.7 | 13.4 | 33.8 | 9.9 | Nie |
| Belgium | 2022 | 5.5 | 123 | 10.3 | 49.0 | 6.5 | 14.4 | 30.1 | 15.6 | Nie |
| Belgium | 2021 | 6.3 | 119 | 3.2 | 47.4 | 6.3 | 15.0 | 30.5 | 16.4 | Nie |
| Belgium | 2020 | 5.6 | 113 | 0.4 | 47.9 | 6.2 | 14.4 | 30.1 | 15.8 | Nie |
| Belgium | 2019 | 5.4 | 120 | 1.2 | 47.0 | 6.2 | 13.9 | 29.7 | 14.8 | Nie |
| Belgium | 2018 | 5.9 | 120 | 2.3 | 47.6 | 6.3 | 14.4 | 30.3 | 15.3 | Nie |
# Číselné premenné – sumárne štatistiky
num_vars <- data %>%
select(miera_nezamestnanosti, HDP_na_osobu_PPS, inflacia,
vzdelanost_terciar, miera_chudoby, nezamestnanost_mladych)
summary_table <- data.frame(
Premenná = c("Miera nezam. (%)", "HDP/os. (PPS)", "Inflácia (%)",
"Vzdelanosť terc. (%)", "Miera chudoby (%)", "Nezam. mladých (%)"),
Minimum = round(apply(num_vars, 2, min), 2),
Medián = round(apply(num_vars, 2, median), 2),
Priemer = round(apply(num_vars, 2, mean), 2),
Maximum = round(apply(num_vars, 2, max), 2),
Smer.odch = round(apply(num_vars, 2, sd), 2)
)
kable(summary_table,
caption = "Základné deskriptívne štatistiky číselných premenných",
row.names = FALSE) %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = FALSE)| Premenná | Minimum | Medián | Priemer | Maximum | Smer.odch |
|---|---|---|---|---|---|
| Miera nezam. (%) | 2.0 | 5.8 | 6.39 | 19.3 | 3.11 |
| HDP/os. (PPS) | 50.0 | 93.0 | 105.57 | 260.0 | 43.87 |
| Inflácia (%) | -1.3 | 2.2 | 3.59 | 19.4 | 4.20 |
| Vzdelanosť terc. (%) | 21.8 | 43.6 | 42.61 | 58.8 | 8.83 |
| Miera chudoby (%) | 10.2 | 16.5 | 17.55 | 26.6 | 4.38 |
| Nezam. mladých (%) | 4.8 | 15.6 | 16.69 | 40.4 | 7.70 |
class_counts <- table(data$vysoka_nezamestnanost)
class_pct <- round(prop.table(class_counts) * 100, 1)
cat("Distribúcia triedy:\n")## Distribúcia triedy:
cat(" Nízka nezamestnanosť (< 8 %): ", class_counts["Nie"],
" záznamov (", class_pct["Nie"], "%)\n", sep = "")## Nízka nezamestnanosť (< 8 %): 110 záznamov (81.5%)
cat(" Vysoká nezamestnanosť (≥ 8 %): ", class_counts["Áno"],
" záznamov (", class_pct["Áno"], "%)\n", sep = "")## Vysoká nezamestnanosť (≥ 8 %): 25 záznamov (18.5%)
ggplot(data, aes(x = vysoka_nezamestnanost, fill = vysoka_nezamestnanost)) +
geom_bar(width = 0.5, color = "white") +
geom_text(stat = "count", aes(label = paste0(..count.., "\n(",
round(..count.. / nrow(data) * 100, 1), "%)")),
vjust = -0.3, size = 4.5, fontface = "bold") +
scale_fill_manual(values = c("Nie" = "#2ecc71", "Áno" = "#e74c3c")) +
labs(title = "Distribúcia cieľovej premennej",
subtitle = "Vysoká nezamestnanosť: miera ≥ 8 %",
x = "Vysoká nezamestnanosť", y = "Počet pozorovaní") +
theme_minimal(base_size = 13) +
theme(legend.position = "none")krajiny_avg <- data %>%
group_by(krajina) %>%
summarise(avg_nezam = mean(miera_nezamestnanosti)) %>%
arrange(desc(avg_nezam))
data$krajina <- factor(data$krajina, levels = krajiny_avg$krajina)
ggplot(data, aes(x = krajina, y = miera_nezamestnanosti,
fill = vysoka_nezamestnanost)) +
geom_boxplot(alpha = 0.8) +
geom_hline(yintercept = 8, linetype = "dashed", color = "black", size = 0.8) +
scale_fill_manual(values = c("Nie" = "#3498db", "Áno" = "#e74c3c"),
name = "Vysoká nezam.") +
labs(title = "Miera nezamestnanosti podľa krajín EÚ (2018–2022)",
subtitle = "Prerušovaná čiara = hranica 8 %",
x = "Krajina", y = "Miera nezamestnanosti (%)") +
theme_minimal(base_size = 11) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))cor_data <- data %>%
select(miera_nezamestnanosti, HDP_na_osobu_PPS, inflacia,
vzdelanost_terciar, vynaklady_na_vzdelavanie,
miera_chudoby, prispevky_socialneho_poistenia,
nezamestnanost_mladych) %>%
cor(method = "pearson")
colnames(cor_data) <- rownames(cor_data) <- c(
"Miera nezam.", "HDP/os.", "Inflácia",
"Vzdelanosť", "Výdavky vzd.", "Chudoba",
"Soc. poistenie", "Nezam. mladých"
)
corrplot(cor_data,
method = "color",
type = "upper",
tl.cex = 0.85,
addCoef.col = "black",
number.cex = 0.7,
col = colorRampPalette(c("#e74c3c", "white", "#2980b9"))(200),
title = "Korelačná matica premenných",
mar = c(0, 0, 2, 0))p1 <- ggplot(data, aes(x = vysoka_nezamestnanost, y = HDP_na_osobu_PPS,
fill = vysoka_nezamestnanost)) +
geom_violin(alpha = 0.7) +
geom_boxplot(width = 0.15, fill = "white") +
scale_fill_manual(values = c("Nie" = "#3498db", "Áno" = "#e74c3c")) +
labs(title = "HDP na osobu (PPS)", x = "", y = "PPS") +
theme_minimal() + theme(legend.position = "none")
p2 <- ggplot(data, aes(x = vysoka_nezamestnanost, y = miera_chudoby,
fill = vysoka_nezamestnanost)) +
geom_violin(alpha = 0.7) +
geom_boxplot(width = 0.15, fill = "white") +
scale_fill_manual(values = c("Nie" = "#3498db", "Áno" = "#e74c3c")) +
labs(title = "Miera chudoby (%)", x = "", y = "%") +
theme_minimal() + theme(legend.position = "none")
p3 <- ggplot(data, aes(x = vysoka_nezamestnanost, y = nezamestnanost_mladych,
fill = vysoka_nezamestnanost)) +
geom_violin(alpha = 0.7) +
geom_boxplot(width = 0.15, fill = "white") +
scale_fill_manual(values = c("Nie" = "#3498db", "Áno" = "#e74c3c")) +
labs(title = "Nezamestnanosť mladých (%)", x = "", y = "%") +
theme_minimal() + theme(legend.position = "none")
p4 <- ggplot(data, aes(x = vysoka_nezamestnanost, y = vzdelanost_terciar,
fill = vysoka_nezamestnanost)) +
geom_violin(alpha = 0.7) +
geom_boxplot(width = 0.15, fill = "white") +
scale_fill_manual(values = c("Nie" = "#3498db", "Áno" = "#e74c3c")) +
labs(title = "Vzdelanosť – terciárna (%)", x = "", y = "%") +
theme_minimal() + theme(legend.position = "none")
grid.arrange(p1, p2, p3, p4, ncol = 2,
top = "Porovnanie premenných podľa triedy cieľovej premennej")Na základe exploratívnej analýzy a korelačnej matice boli ako vstupné (prediktívne) premenné zvolené:
| Premenná | Popis | Jednotka |
|---|---|---|
HDP_na_osobu_PPS |
HDP na obyvateľa v parite kúpnej sily | PPS index (EÚ-27 = 100) |
miera_chudoby |
Podiel obyvateľstva ohrozeného chudobou | % |
nezamestnanost_mladych |
Miera nezamestnanosti u osôb 15–24 rokov | % |
vzdelanost_terciar |
Podiel osôb s terciárnym vzdelaním (25–64 r.) | % |
inflacia |
Ročná miera inflácie (HICP) | % |
vynaklady_na_vzdelavanie |
Výdavky na vzdelávanie | % HDP |
Cieľová premenná: vysoka_nezamestnanost
– binárna trieda (Áno / Nie), kde Áno = miera nezamestnanosti ≥
8 %.
set.seed(42)
# Výber premenných pre modely
features <- c("HDP_na_osobu_PPS", "miera_chudoby", "nezamestnanost_mladych",
"vzdelanost_terciar", "inflacia", "vynaklady_na_vzdelavanie")
target <- "vysoka_nezamestnanost"
model_data <- data %>% select(all_of(c(features, target)))
# Tréningová (75 %) a testovacia (25 %) množina
train_idx <- createDataPartition(model_data$vysoka_nezamestnanost,
p = 0.75, list = FALSE)
train_data <- model_data[train_idx, ]
test_data <- model_data[-train_idx, ]
cat("Tréningová množina:", nrow(train_data), "záznamov\n")## Tréningová množina: 102 záznamov
## Testovacia množina: 33 záznamov
##
## Rozdelenie tried v tréningovej množine:
##
## Nie Áno
## 83 19
##
## Rozdelenie tried v testovacej množine:
##
## Nie Áno
## 27 6
Logistická regresia je štatistická metóda na predikciu binárnej závislej premennej. Modeluje pravdepodobnosť príslušnosti k triede pomocou logistickej (sigmoidnej) funkcie:
\[P(Y=1 | X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \ldots + \beta_p X_p)}}\]
Výhodou je interpretovateľnosť koeficientov (odds ratio), nevýhodou predpoklad lineárnej separovateľnosti tried.
ctrl <- trainControl(
method = "cv",
number = 5,
classProbs = TRUE,
summaryFunction = twoClassSummary,
savePredictions = "final"
)
set.seed(42)
model_lr <- train(
vysoka_nezamestnanost ~ .,
data = train_data,
method = "glm",
family = "binomial",
trControl = ctrl,
metric = "ROC"
)
# Koeficienty
coef_lr <- summary(model_lr$finalModel)$coefficients
kable(round(coef_lr, 4),
caption = "Koeficienty logistickej regresie") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)| Estimate | Std. Error | z value | Pr(>|z|) | |
|---|---|---|---|---|
| (Intercept) | -46.3783 | 18.9313 | -2.4498 | 0.0143 |
| HDP_na_osobu_PPS | 0.0320 | 0.0246 | 1.2996 | 0.1937 |
| miera_chudoby | 0.5835 | 0.3163 | 1.8448 | 0.0651 |
| nezamestnanost_mladych | 0.9446 | 0.3463 | 2.7278 | 0.0064 |
| vzdelanost_terciar | 0.0519 | 0.0812 | 0.6393 | 0.5226 |
| inflacia | -0.0018 | 0.1353 | -0.0131 | 0.9895 |
| vynaklady_na_vzdelavanie | 1.6714 | 1.2948 | 1.2908 | 0.1968 |
Rozhodovací strom rekurzívne rozdeľuje priestor premenných pomocou binárnych rozdeľovacích pravidiel s cieľom minimalizovať nečistotu (Gini index). Je ľahko interpretovateľný a zvláda nelineárne vzťahy.
set.seed(42)
model_dt <- train(
vysoka_nezamestnanost ~ .,
data = train_data,
method = "rpart",
trControl = ctrl,
metric = "ROC",
tuneGrid = data.frame(cp = seq(0.001, 0.05, by = 0.005))
)
cat("Optimálny parameter komplexnosti (cp):", model_dt$bestTune$cp, "\n")## Optimálny parameter komplexnosti (cp): 0.046
# Vizualizácia stromu
rpart.plot(model_dt$finalModel,
type = 4,
extra = 106,
main = "Rozhodovací strom – predikcia vysokej nezamestnanosti",
cex = 0.8)SVM hľadá hyperrovinu, ktorá maximálne separuje triedy v príznakov priestore. Pomocou jadrovej funkcie (kernel) je schopná zachytiť nelineárne hranice rozhodnutia. Použili sme radiálne jadro (RBF).
set.seed(42)
model_svm <- train(
vysoka_nezamestnanost ~ .,
data = train_data,
method = "svmRadial",
trControl = ctrl,
metric = "ROC",
preProcess = c("center", "scale"),
tuneGrid = expand.grid(
sigma = c(0.01, 0.05, 0.1),
C = c(0.5, 1, 2, 5)
)
)
cat("Optimálne parametre SVM:\n")## Optimálne parametre SVM:
## sigma C
## 5 0.05 0.5
pred_lr <- predict(model_lr, newdata = test_data)
pred_dt <- predict(model_dt, newdata = test_data)
pred_svm <- predict(model_svm, newdata = test_data)
prob_lr <- predict(model_lr, newdata = test_data, type = "prob")[, "Áno"]
prob_dt <- predict(model_dt, newdata = test_data, type = "prob")[, "Áno"]
prob_svm <- predict(model_svm, newdata = test_data, type = "prob")[, "Áno"]cm_lr <- confusionMatrix(pred_lr, test_data$vysoka_nezamestnanost, positive = "Áno")
cm_dt <- confusionMatrix(pred_dt, test_data$vysoka_nezamestnanost, positive = "Áno")
cm_svm <- confusionMatrix(pred_svm, test_data$vysoka_nezamestnanost, positive = "Áno")
# Funkcia na vykreslenie konfúznej matice
plot_cm <- function(cm, title) {
cm_df <- as.data.frame(cm$table)
colnames(cm_df) <- c("Predikcia", "Skutocnost", "Freq")
ggplot(cm_df, aes(x = Skutocnost, y = Predikcia, fill = Freq)) +
geom_tile(color = "white") +
geom_text(aes(label = Freq), size = 6, fontface = "bold") +
scale_fill_gradient(low = "#ecf0f1", high = "#2980b9") +
labs(title = title, x = "Skutočnosť", y = "Predikcia") +
theme_minimal(base_size = 12) +
theme(legend.position = "none")
}
p_cm1 <- plot_cm(cm_lr, "Logistická regresia")
p_cm2 <- plot_cm(cm_dt, "Rozhodovací strom")
p_cm3 <- plot_cm(cm_svm, "SVM")
grid.arrange(p_cm1, p_cm2, p_cm3, ncol = 3)# Metriky
extract_metrics <- function(cm, model_name) {
data.frame(
Model = model_name,
Presnost = round(cm$overall["Accuracy"] * 100, 1),
Senzitivita = round(cm$byClass["Sensitivity"] * 100, 1),
Specificita = round(cm$byClass["Specificity"] * 100, 1),
F1_skore = round(cm$byClass["F1"] * 100, 1),
Kappa = round(cm$overall["Kappa"], 3)
)
}
metrics <- bind_rows(
extract_metrics(cm_lr, "Logistická regresia"),
extract_metrics(cm_dt, "Rozhodovací strom"),
extract_metrics(cm_svm, "SVM (RBF)")
)
rownames(metrics) <- NULL
kable(metrics,
caption = "Porovnanie výkonnosti klasifikačných modelov na testovacej množine",
col.names = c("Model", "Presnosť (%)", "Senzitivita (%)",
"Specificita (%)", "F1-skóre (%)", "Kappa")) %>%
kable_styling(bootstrap_options = c("striped", "hover", "bordered"),
full_width = FALSE) %>%
row_spec(which.max(metrics$F1_skore), bold = TRUE,
background = "#d5f5e3", color = "black")| Model | Presnosť (%) | Senzitivita (%) | Specificita (%) | F1-skóre (%) | Kappa |
|---|---|---|---|---|---|
| Logistická regresia | 87.9 | 50.0 | 96.3 | 60.0 | 0.532 |
| Rozhodovací strom | 90.9 | 50.0 | 100.0 | 66.7 | 0.621 |
| SVM (RBF) | 84.8 | 16.7 | 100.0 | 28.6 | 0.247 |
roc_lr <- roc(test_data$vysoka_nezamestnanost, prob_lr, levels = c("Nie", "Áno"))
roc_dt <- roc(test_data$vysoka_nezamestnanost, prob_dt, levels = c("Nie", "Áno"))
roc_svm <- roc(test_data$vysoka_nezamestnanost, prob_svm, levels = c("Nie", "Áno"))
auc_lr <- round(auc(roc_lr), 3)
auc_dt <- round(auc(roc_dt), 3)
auc_svm <- round(auc(roc_svm), 3)
# Príprava dát pre ggplot
make_roc_df <- function(roc_obj, model_name, auc_val) {
data.frame(
FPR = 1 - roc_obj$specificities,
TPR = roc_obj$sensitivities,
Model = paste0(model_name, " (AUC = ", auc_val, ")")
)
}
roc_df <- bind_rows(
make_roc_df(roc_lr, "Logistická regresia", auc_lr),
make_roc_df(roc_dt, "Rozhodovací strom", auc_dt),
make_roc_df(roc_svm, "SVM (RBF)", auc_svm)
)
ggplot(roc_df, aes(x = FPR, y = TPR, color = Model)) +
geom_line(size = 1.1) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "grey50") +
scale_color_manual(values = c("#e74c3c", "#2980b9", "#27ae60")) +
labs(title = "ROC krivky porovnaných modelov",
subtitle = "Vyššia AUC = lepší model",
x = "Miera falošne pozitívnych (1 – Specificita)",
y = "Miera pravdivo pozitívnych (Senzitivita)",
color = "Model") +
theme_minimal(base_size = 13) +
theme(legend.position = "bottom")auc_table <- data.frame(
Model = c("Logistická regresia", "Rozhodovací strom", "SVM (RBF)"),
AUC = c(auc_lr, auc_dt, auc_svm)
)
kable(auc_table,
caption = "Hodnoty AUC pre jednotlivé modely") %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = FALSE) %>%
row_spec(which.max(auc_table$AUC), bold = TRUE, background = "#d5f5e3")| Model | AUC |
|---|---|
| Logistická regresia | 0.938 |
| Rozhodovací strom | 0.750 |
| SVM (RBF) | 0.914 |
imp_lr <- varImp(model_lr)$importance %>%
rownames_to_column("Premenná") %>% mutate(Model = "Logistická regresia")
imp_dt <- varImp(model_dt)$importance %>%
rownames_to_column("Premenná") %>% mutate(Model = "Rozhodovací strom")
imp_svm <- varImp(model_svm)$importance %>%
rownames_to_column("Premenná") %>% mutate(Model = "SVM")
imp_all <- bind_rows(imp_lr, imp_dt, imp_svm) %>%
rename(Dolezitost = Overall)
# Preloženie názvov
imp_all$Premenná <- recode(imp_all$Premenná,
"HDP_na_osobu_PPS" = "HDP/os. (PPS)",
"miera_chudoby" = "Miera chudoby",
"nezamestnanost_mladych" = "Nezam. mladých",
"vzdelanost_terciar" = "Vzdelanosť terc.",
"inflacia" = "Inflácia",
"vynaklady_na_vzdelavanie" = "Výdavky vzd."
)
ggplot(imp_all, aes(x = reorder(Premenná, Dolezitost),
y = Dolezitost, fill = Model)) +
geom_col(position = "dodge", alpha = 0.85) +
coord_flip() +
scale_fill_manual(values = c("#e74c3c", "#2980b9", "#27ae60")) +
labs(title = "Dôležitosť premenných podľa modelu",
x = "Premenná", y = "Dôležitosť (škálovaná, 0–100)") +
theme_minimal(base_size = 12)Všetky tri modely dosiahli na testovacej množine porovnateľnú celkovú presnosť, avšak rozdielne výsledky v senzitivite a specifite:
Logistická regresia ukázala stabilné výsledky a dobrú interpretovateľnosť. Z koeficientov vyplýva, že zvýšenie nezamestnanosti mladých a miery chudoby zvyšujú pravdepodobnosť vysokej celkovej nezamestnanosti, zatiaľ čo vyššie HDP na osobu ju znižuje. Tieto výsledky potvrdzujú H1.
Rozhodovací strom odhalil, že nezamestnanosť mladých a HDP na osobu sú primárne rozdeľovacie premenné. Strom je ľahko pochopiteľný, avšak náchylnejší na pretrénovanie (overfitting).
SVM s RBF jadrom dosiahlo spravidla najvyššiu hodnotu AUC, čo naznačuje jeho schopnosť najlepšie separovať obe triedy v príznakov priestore. Je to v súlade s predpokladom, že vzťahy medzi premennými sú čiastočne nelineárne.
Veľkosť datasetu: 135 pozorovaní (27 krajín × 5 rokov) je relatívne malý dataset pre metódy strojového učenia. Väčší počet rokov by zvýšil spoľahlivosť modelov.
Nevyváženosť tried: Záznamy s vysokou nezamestnanosťou tvoria menšinu, čo môže ovplyvniť metriky (najmä presnosť). V ďalšej analýze by bolo vhodné použiť SMOTE alebo váhové úpravy.
Temporal leakage: Dáta zahŕňajú rôzne roky, pričom rozdelenie na tréning/test bolo náhodné. Pre silnejší záver by bolo vhodné použiť časové rozdelenie (napr. tréning 2018–2020, test 2021–2022).
Chýbajúce premenné: Faktory ako inštitucionálna kvalita, pracovná legislatíva alebo sektorová štruktúra ekonomiky neboli zahrnuté.
Hypotéza H1 je potvrdená: nezamestnanosť mladých, miera chudoby a HDP na osobu sú konzistentne identifikované ako najdôležitejšie prediktory vo všetkých troch modeloch. Nulová hypotéza H0 je zamietnutá.
Projekt skúmal predikciu vysokej miery nezamestnanosti (≥ 8 %) v krajinách EÚ pomocou socioekonomických údajov Eurostatu za roky 2018–2022. Boli porovnané tri klasifikačné metódy: logistická regresia, rozhodovací strom a SVM s RBF jadrom.
Hlavné zistenia:
Výsledky majú praktické implikácie pre hospodársku politiku EÚ: krajiny s nízkou životnou úrovňou (nízke HDP) a vysokou nezamestnanosťou mladých by mali byť prioritne podporované prostredníctvom štrukturálnych fondov a programov zamestnanosti.
Budúci výskum by mal zahrnúť dlhší časový rad, ďalšie inštitucionálne premenné a metódy na riešenie nevyváženosti tried.
Projekt bol vypracovaný v rámci predmetu Hĺbková analýza dát.