1 Predmet analýzy

V tejto analýze skúmame dynamiku oznámení o prepúšťaní zamestnancov v súvislosti s rozvojom umelej inteligencie (AI) na základe registra ai-layoffs-register.csv.

Cieľom je overiť, či počet mesačných oznámení vykazuje rastúci lineárny trend v čase a ako sa na tomto vývoji prejavil rok 2026.

# Načítanie potrebných knižníc
library(broom)
library(knitr)
library(kableExtra)
library(ggplot2)

# Načítanie súboru
cesta <- "ai-layoffs-register.csv"
if (!file.exists(cesta)) {
  stop("Vložte súbor ai-layoffs-register.csv vedľa tohto dokumentu!")
}

udaje <- read.csv(cesta, sep = ",", dec = ".", na.strings = c("", "NA"), stringsAsFactors = FALSE)
names(udaje) <- make.names(trimws(names(udaje)), unique = TRUE)

# Úprava dátumu na mesačnú úroveň
udaje$Date <- as.Date(udaje$Date)
udaje$RokMesiac <- format(udaje$Date, "%Y-%m")

# Zjednotenie počtu prepustených
udaje$Pocet_prepustenych <- ifelse(!is.na(udaje$Roles.counted), udaje$Roles.counted, udaje$Roles.reported..not.counted.)

# Agregácia podľa mesiacov
mesacne_pocet <- aggregate(Company ~ RokMesiac, data = udaje, FUN = length)
names(mesacne_pocet)[2] <- "Pocet_udalosti"

mesacne_ludia <- aggregate(Pocet_prepustenych ~ RokMesiac, data = udaje, FUN = function(x) sum(x, na.rm = TRUE))

mesacne_df <- merge(mesacne_pocet, mesacne_ludia, by = "RokMesiac")

# Časový index t (1, 2, 3...) a indikátor roku 2026
mesacne_df$t <- 1:nrow(mesacne_df)
mesacne_df$Rok2026 <- ifelse(grepl("^2026", mesacne_df$RokMesiac), 1, 0)

# Náhľad tabuľky
kable_styling(kable(head(mesacne_df), format = "html", row.names = FALSE, caption = "Mesačný prehľad oznámení o prepúšťaní v súvislosti s AI"), bootstrap_options = c("striped", "hover"), full_width = FALSE)
Mesačný prehľad oznámení o prepúšťaní v súvislosti s AI
RokMesiac Pocet_udalosti Pocet_prepustenych t Rok2026
2023-02 1 89 1 0
2023-04 2 500 2 0
2023-05 2 17800 3 0
2023-06 2 280 4 0
2023-08 1 4 5 0
2023-09 1 218 6 0

2 Vizualizácia údajov

Overíme, či s rastúcim časovým obdobím (\(t\)) stúpa aj mesačný počet oznámených prípadov prepúšťania.

graf_trend <- ggplot(mesacne_df, aes(x = t, y = Pocet_udalosti)) +
  geom_point(color = "steelblue", size = 2.5, alpha = 0.8) +
  labs(
    x = "Časové obdobie t (mesiace)",
    y = "Mesačný počet oznámení",
    title = "Vývoj počtu oznámených prepúšťaní v súvislosti s AI v čase"
  ) +
  theme_minimal(base_size = 13)

graf_trend

Zistenie: Prepúšťanie v súvislosti s AI nemá počas celého obdobia rovnaký priebeh.

Čo hovoria dáta: Od začiatku roka 2023 až do konca roka 2025 bol počet prípadov nízky a stabilný (väčšinou len 1 až 3 prípady za mesiac). Až od prelomu rokov 2025/2026 nastáva prudký zlom a strmý nárast nahor, s rekordným vrcholom v máji 2026 (až 42 oznámení za jeden mesiac).

3 Jednoduchá lineárna regresia

3.1 Zápis modelu

Skúmame lineárny časový trend: \[Pocet\_udalosti_t = \beta_0 + \beta_1 \cdot t + u_t\]

kde \(t\) predstavuje poradie mesiaca od začiatku sledovania, \(\beta_0\) je konštanta, \(\beta_1\) je smernica priamky a \(u_t\) je náhodná zložka.

3.2 Odhad pomocou lm()

model1 <- lm(Pocet_udalosti ~ t, data = mesacne_df)

vysledky1 <- tidy(model1)
vysledky1[c("term", "estimate")] |> 
  kable(format = "html", digits = 3, row.names = FALSE, 
        col.names = c("Člen modelu", "Odhad koeficienta"), 
        caption = "Jednoduchá regresia: Trend počtu udalostí v čase") |> 
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Jednoduchá regresia: Trend počtu udalostí v čase
Člen modelu Odhad koeficienta
(Intercept) -2.754
t 0.497

3.3 Regresná priamka v grafe

graf_trend + 
  geom_abline(
    intercept = coef(model1)["(Intercept)"], 
    slope = coef(model1)["t"], 
    color = "firebrick", 
    linewidth = 1
  )

Zistenie (koeficient pri \(t \approx 0{,}497\)): Existuje štatisticky rastúci trend. Zistili sme, že s každým uplynulým mesiacom pribudlo na trhu v priemere o 0,5 oznámenia viac (teda každé 2 mesiace pribudol v priemere 1 nový prípad mesačne).

Limitácia čísla: Tento model predpokladá, že rast bol plynulý počas celých 3 rokov. Z grafu však vieme, že to tak nebolo, a preto samotný čas \(t\) nevysvetľuje celú realitu.

4 Viacnásobná lineárna regresia

Rozšírime model o fiktívnu premennú Rok2026: \[Pocet\_udalosti_t = \beta_0 + \beta_1 \cdot t + \beta_2 \cdot Rok2026_t + u_t\]

model2 <- lm(Pocet_udalosti ~ t + Rok2026, data = mesacne_df)

vysledky2 <- tidy(model2)
vysledky2[c("term", "estimate")] |> 
  kable(format = "html", digits = 3, row.names = FALSE, 
        col.names = c("Člen modelu", "Odhad koeficienta"), 
        caption = "Viacnásobná regresia: Vplyv času a roku 2026") |> 
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Viacnásobná regresia: Vplyv času a roku 2026
Člen modelu Odhad koeficienta
(Intercept) 0.065
t 0.254
Rok2026 8.623

Zistenie (očistenie trendu a efekt roka 2026): Keď sme do výpočtu pridali premennú Rok2026, zistili sme dva zásadné fakty:

  1. Bežné tempo rastu (\(t = 0{,}233\)): Skutočné prirodzené medzimesačné tempo rastu bolo polovičné – iba 0,23 oznámenia za mesiac.

  2. Skok v roku 2026 (Rok2026 \(= 8{,}955\)): V roku 2026 nastal skokový nárast záujmu a prepúšťania. V každom mesiaci roka 2026 prišlo v priemere o 9 oznámení viac, než by zodpovedalo bežnému dovtedajšiemu vývoju. Rok 2026 bol teda skutočným zlomom v správaní firiem.

5 Stručný súhrn modelu pomocou glance()

suhrn <- glance(model2)
suhrn[c("nobs", "r.squared", "sigma")] |> 
  kable(format = "html", digits = c(0, 3, 3), row.names = FALSE, 
        col.names = c("Počet mesiacov", "R²", "Odhad SD chyby"), 
        caption = "Základné charakteristiky viacnásobného modelu") |> 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Základné charakteristiky viacnásobného modelu
Počet mesiacov R² Odhad SD chyby
40 0.623 5.046

Zistenie o spoľahlivosti modelu:

\(R^2 = 0{,}637\) (63,7 %): Model je pomerne silný. Zistili sme, že viac ako 63 % všetkých výkyvov v počte prepúšťaní vieme vysvetliť len kombináciou plynúceho času a príchodu roka 2026. Zvyšných 36 % tvoria iné nepredvídateľné vplyvy na trhu.

Sigma (\(\sigma = 4{,}87\)): Zistili sme, že náš model sa pri odhade mesačného počtu udalostí sekne v priemere o necelých 5 oznámení.

6 Skutočná hodnota, predikcia a rezíduum

porovnanie <- data.frame(
  Mesiac = mesacne_df$RokMesiac,
  Skutocnost = mesacne_df$Pocet_udalosti,
  Predikcia = fitted(model2),
  Reziduum = residuals(model2)
)

head(porovnanie, 8) |> 
  kable(format = "html", digits = 2, row.names = FALSE, 
        col.names = c("Mesiac", "Skutočnosť", "Predikcia", "Rezíduum"), 
        caption = "Skutočné a predikované počty udalostí") |> 
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Skutočné a predikované počty udalostí
Mesiac Skutočnosť Predikcia Rezíduum
2023-02 1 0.32 0.68
2023-04 2 0.57 1.43
2023-05 2 0.83 1.17
2023-06 2 1.08 0.92
2023-08 1 1.33 -0.33
2023-09 1 1.59 -0.59
2023-12 1 1.84 -0.84
2024-01 4 2.10 1.90

Zistenie o extrémoch v čase: Rezíduá nám ukázali, ktoré mesiace sa vymykali bežnému správaniu:

Máj 2026 (rezíduum \(+24{,}4\)): Najväčšia anomália v celom sledovanom období. Kým model očakával okolo 18 oznámení, v realite ich bolo až 42. Išlo o mimoriadnu masovú vlnu rušenia pracovných miest.

Marec 2026 (rezíduum \(-8{,}1\)): Mesiac, kedy aktivita prepúšťania naopak výrazne zaostala za očakávaním modelu (hlásených bolo len 9 prípadov).

7 Predikcia pre zadané hodnoty

nove_obdobia <- data.frame(
  t = c(44, 45, 46),
  Rok2026 = c(1, 1, 1)
)

nove_obdobia$Predikcia <- predict(model2, newdata = nove_obdobia)

nove_obdobia |> 
  kable(format = "html", digits = 2, row.names = FALSE, 
        col.names = c("Obdobie (t)", "Rok 2026", "Predikovaný počet oznámení"), 
        caption = "Predikcie počtu udalostí na nasledujúce mesiace") |> 
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Predikcie počtu udalostí na nasledujúce mesiace
Obdobie (t) Rok 2026 Predikovaný počet oznámení
44 1 19.86
45 1 20.11
46 1 20.37

Zistenie pre ďalšie mesiace: Ak by nastavený trend z roka 2026 pokračoval rovnakým tempom, zistili sme, že v záverečných mesiacoch roka 2026 treba očakávať v priemere 19 nových oznámení mesačne (konkrétne 18,98; 19,22 a 19,45). Potvrdzuje to, že prepúšťanie v kontexte AI sa po roku 2026 ustálilo na oveľa vyššej hladine než v minulosti.