[1mindexed[0m [32m0B[0m in [36m 0s[0m, [32m0B/s[0m
[1mindexed[0m [32m1.00TB[0m in [36m 0s[0m, [32m7.41TB/s[0m
[1] 104
Osa 4 – Palkkajäykkyydet
Kristian Vepsäläinen
28.4.2026
Kansantaloustieteen peruslaki on yksinkertainen. Jos jostain on pulaa, hinta nousee. Jos työvoimasta on pulaa, palkkojen pitäisi nousta.
Osissa 2 ja 3 osoitimme, että kohtaanto-ongelma on ammatti- ja aluekohtainen. Tässä osassa testaamme saman ilmiön talousteoreettisesti: nousevatko palkat siellä, missä väitetään olevan työvoimapulaa?
Keskeinen tulos: palkkojen nimellinen kasvu on ollut maltillista avoimien työpaikkojen noususta huolimatta. Tämä viittaa joko (a) palkkajäykkyyksiin tai (b) siihen, että raportoitu “työvoimapula” ei ole yhtä voimakas kuin keskustelussa annetaan ymmärtää.
Maailma on jakauma. Myös palkkojen ja työvoiman kysynnän välinen yhteys on jakauma — eikä sen keskiarvo kerro koko tarinaa.
Phillips-käyrä on talouden empiirisistä säännönmukaisuuksista kuuluisin. Alkuperäisessä muodossaan (Phillips 1958) se kuvaa palkkojen muutoksen ja työttömyyden käänteistä suhdetta: matala työttömyys → nopea palkkakasvu.
Modernissa muotoilussa palkkakasvu \(\Delta w\) riippuu:
\[ \Delta w_t = \alpha + \beta_1 \cdot \text{V/U}_t + \beta_2 \cdot \pi^e_t + \varepsilon_t \]
missä:
Jos \(\beta_1\) on merkittävästi positiivinen ja tilastollisesti merkitsevä, palkat reagoivat työvoiman kysyntään. Jos \(\beta_1 \approx 0\), palkat ovat jäykkiä.
[1mindexed[0m [32m0B[0m in [36m 0s[0m, [32m0B/s[0m
[1mindexed[0m [32m1.00TB[0m in [36m 0s[0m, [32m7.41TB/s[0m
[1] 104
Palkat ovat nousseet tasaisesti, mutta maltillisesti. Seuraavaksi katsotaan, onko kasvu ollut nopeampaa juuri silloin, kun työvoimapulasta on puhuttu eniten.
[1mindexed[0m [32m0B[0m in [36m 0s[0m, [32m0B/s[0m
[1mindexed[0m [32m1.00TB[0m in [36m 0s[0m, [32m21.64TB/s[0m
[1mindexed[0m [32m0B[0m in [36m 0s[0m, [32m0B/s[0m
[1mindexed[0m [32m1.00TB[0m in [36m 0s[0m, [32m38.67TB/s[0m
[1mindexed[0m [32m0B[0m in [36m 0s[0m, [32m0B/s[0m
[1mindexed[0m [32m18.48MB[0m in [36m 0s[0m, [32m86.15MB/s[0m
[1mindexed[0m [32m18.61MB[0m in [36m 0s[0m, [32m86.49MB/s[0m
[1mindexed[0m [32m18.74MB[0m in [36m 0s[0m, [32m86.76MB/s[0m
[1mindexed[0m [32m18.87MB[0m in [36m 0s[0m, [32m87.05MB/s[0m
[1mindexed[0m [32m19.01MB[0m in [36m 0s[0m, [32m87.32MB/s[0m
[1mindexed[0m [32m19.14MB[0m in [36m 0s[0m, [32m87.54MB/s[0m
[1mindexed[0m [32m19.27MB[0m in [36m 0s[0m, [32m87.78MB/s[0m
[1mindexed[0m [32m19.40MB[0m in [36m 0s[0m, [32m88.04MB/s[0m
[1mindexed[0m [32m19.53MB[0m in [36m 0s[0m, [32m88.32MB/s[0m
[1mindexed[0m [32m19.66MB[0m in [36m 0s[0m, [32m88.57MB/s[0m
[1mindexed[0m [32m19.79MB[0m in [36m 0s[0m, [32m88.84MB/s[0m
[1mindexed[0m [32m19.92MB[0m in [36m 0s[0m, [32m89.07MB/s[0m
[1mindexed[0m [32m20.05MB[0m in [36m 0s[0m, [32m89.32MB/s[0m
[1mindexed[0m [32m20.18MB[0m in [36m 0s[0m, [32m89.61MB/s[0m
[1mindexed[0m [32m20.32MB[0m in [36m 0s[0m, [32m89.85MB/s[0m
[1mindexed[0m [32m20.45MB[0m in [36m 0s[0m, [32m90.08MB/s[0m
[1mindexed[0m [32m20.58MB[0m in [36m 0s[0m, [32m90.28MB/s[0m
[1mindexed[0m [32m20.71MB[0m in [36m 0s[0m, [32m90.53MB/s[0m
[1mindexed[0m [32m20.84MB[0m in [36m 0s[0m, [32m90.74MB/s[0m
[1mindexed[0m [32m20.97MB[0m in [36m 0s[0m, [32m91.00MB/s[0m
[1mindexed[0m [32m21.10MB[0m in [36m 0s[0m, [32m91.26MB/s[0m
[1mindexed[0m [32m21.23MB[0m in [36m 0s[0m, [32m91.40MB/s[0m
[1mindexed[0m [32m21.36MB[0m in [36m 0s[0m, [32m91.59MB/s[0m
[1mindexed[0m [32m21.50MB[0m in [36m 0s[0m, [32m91.75MB/s[0m
[1mindexed[0m [32m21.63MB[0m in [36m 0s[0m, [32m92.02MB/s[0m
[1mindexed[0m [32m21.76MB[0m in [36m 0s[0m, [32m92.25MB/s[0m
[1mindexed[0m [32m21.89MB[0m in [36m 0s[0m, [32m92.49MB/s[0m
[1mindexed[0m [32m22.02MB[0m in [36m 0s[0m, [32m92.73MB/s[0m
[1mindexed[0m [32m22.15MB[0m in [36m 0s[0m, [32m92.96MB/s[0m
[1mindexed[0m [32m22.28MB[0m in [36m 0s[0m, [32m93.22MB/s[0m
[1mindexed[0m [32m22.41MB[0m in [36m 0s[0m, [32m93.40MB/s[0m
[1mindexed[0m [32m22.54MB[0m in [36m 0s[0m, [32m93.59MB/s[0m
[1mindexed[0m [32m22.68MB[0m in [36m 0s[0m, [32m93.75MB/s[0m
[1mindexed[0m [32m22.81MB[0m in [36m 0s[0m, [32m93.80MB/s[0m
[1mindexed[0m [32m22.94MB[0m in [36m 0s[0m, [32m93.98MB/s[0m
[1mindexed[0m [32m23.07MB[0m in [36m 0s[0m, [32m94.20MB/s[0m
[1mindexed[0m [32m23.20MB[0m in [36m 0s[0m, [32m94.36MB/s[0m
[1mindexed[0m [32m23.33MB[0m in [36m 0s[0m, [32m94.58MB/s[0m
[1mindexed[0m [32m23.46MB[0m in [36m 0s[0m, [32m94.70MB/s[0m
[1mindexed[0m [32m23.59MB[0m in [36m 0s[0m, [32m94.88MB/s[0m
[1mindexed[0m [32m23.72MB[0m in [36m 0s[0m, [32m95.07MB/s[0m
[1mindexed[0m [32m23.85MB[0m in [36m 0s[0m, [32m95.30MB/s[0m
[1mindexed[0m [32m23.99MB[0m in [36m 0s[0m, [32m95.50MB/s[0m
[1mindexed[0m [32m24.12MB[0m in [36m 0s[0m, [32m95.66MB/s[0m
[1mindexed[0m [32m24.25MB[0m in [36m 0s[0m, [32m95.87MB/s[0m
[1mindexed[0m [32m24.38MB[0m in [36m 0s[0m, [32m96.06MB/s[0m
[1mindexed[0m [32m24.51MB[0m in [36m 0s[0m, [32m96.22MB/s[0m
[1mindexed[0m [32m24.64MB[0m in [36m 0s[0m, [32m96.43MB/s[0m
[1mindexed[0m [32m24.77MB[0m in [36m 0s[0m, [32m96.67MB/s[0m
[1mindexed[0m [32m24.90MB[0m in [36m 0s[0m, [32m96.92MB/s[0m
[1mindexed[0m [32m25.03MB[0m in [36m 0s[0m, [32m97.15MB/s[0m
[1mindexed[0m [32m25.17MB[0m in [36m 0s[0m, [32m97.38MB/s[0m
[1mindexed[0m [32m25.30MB[0m in [36m 0s[0m, [32m97.61MB/s[0m
[1mindexed[0m [32m25.43MB[0m in [36m 0s[0m, [32m97.80MB/s[0m
[1mindexed[0m [32m25.56MB[0m in [36m 0s[0m, [32m97.96MB/s[0m
[1mindexed[0m [32m25.69MB[0m in [36m 0s[0m, [32m98.17MB/s[0m
[1mindexed[0m [32m25.82MB[0m in [36m 0s[0m, [32m98.39MB/s[0m
[1mindexed[0m [32m25.95MB[0m in [36m 0s[0m, [32m98.62MB/s[0m
[1mindexed[0m [32m26.08MB[0m in [36m 0s[0m, [32m98.84MB/s[0m
[1mindexed[0m [32m26.21MB[0m in [36m 0s[0m, [32m99.06MB/s[0m
[1mindexed[0m [32m26.35MB[0m in [36m 0s[0m, [32m99.23MB/s[0m
[1mindexed[0m [32m26.48MB[0m in [36m 0s[0m, [32m99.46MB/s[0m
[1mindexed[0m [32m26.61MB[0m in [36m 0s[0m, [32m99.68MB/s[0m
[1mindexed[0m [32m26.74MB[0m in [36m 0s[0m, [32m99.87MB/s[0m
[1mindexed[0m [32m26.87MB[0m in [36m 0s[0m, [32m100.07MB/s[0m
[1mindexed[0m [32m27.00MB[0m in [36m 0s[0m, [32m100.29MB/s[0m
[1mindexed[0m [32m27.13MB[0m in [36m 0s[0m, [32m100.50MB/s[0m
[1mindexed[0m [32m27.26MB[0m in [36m 0s[0m, [32m100.71MB/s[0m
[1mindexed[0m [32m27.39MB[0m in [36m 0s[0m, [32m100.88MB/s[0m
[1mindexed[0m [32m27.41MB[0m in [36m 0s[0m, [32m100.66MB/s[0m
[1mindexed[0m [32m1.00TB[0m in [36m 0s[0m, [32m3.67TB/s[0m
Jos työvoimapula vetäisi palkkoja ylöspäin, pisteet asettuisivat selvästi nousevalle suoralle. Käytännössä hajonta on suurta ja yhteyden vahvuus empiirinen kysymys.
# A tibble: 3 × 5
term estimate std.error statistic p.value
<chr> <dbl> <dbl> <dbl> <dbl>
1 (Intercept) 1.43 0.48 2.98 0.004
2 vu_ratio -1.22 2.25 -0.542 0.59
3 inflation 0.359 0.117 3.06 0.003
# A tibble: 1 × 4
r.squared adj.r.squared nobs p.value
<dbl> <dbl> <dbl> <dbl>
1 0.149 0.121 64 0.007
Tulkinta (muotoilu konkreettisten arvojen mukaan ajon jälkeen):
vu_ratio-kerroin: kun avoimia paikkoja työtöntä kohden on yksi lisää, palkkakasvu nousee X prosenttiyksikköäinflation-kerroin: hintainflaation siirtyminen palkkoihinJos vu_ratio-kerroin on pieni (esim. alle 1) tai ei-merkitsevä, tulos viittaa palkkajäykkyyksiin: työmarkkina ei välitä kysyntäshokkia palkkoihin.
Osassa 1 näimme, että Beveridge-käyrä siirtyi vuoden 2020 jälkeen. Onko sama tapahtunut Phillips-käyrälle?
# A tibble: 5 × 5
term estimate std.error statistic p.value
<chr> <dbl> <dbl> <dbl> <dbl>
1 (Intercept) 0.731 0.631 1.16 0.251
2 vu_ratio 0.566 2.90 0.195 0.846
3 post_2020TRUE 2.38 0.96 2.48 0.016
4 inflation 0.317 0.116 2.74 0.008
5 vu_ratio:post_2020TRUE -5.26 3.92 -1.34 0.186
Jos vu_ratio:post_2020TRUE-interaktiotermi on merkitsevä ja positiivinen, palkkareagointi on vahvistunut pandemian jälkeen. Jos termi on negatiivinen tai nolla, jäykkyys on säilynyt tai pahentunut.
Onko Suomi poikkeuksellinen? Verrataan palkkakasvua muutamiin verrokkimaihin.

Tästä nähdään, jääkö Suomi muista jälkeen. Tyypillisesti euroalueen inflaatiopiikin yhteydessä 2022 monen maan palkkakasvu kiihtyi, ja Suomen reagointi näkyy suhteessa muihin.
Jos palkat olisivat joustavia, kuinka paljon enemmän ne olisivat nousseet 2021–2023? Simuloidaan.
Metodologinen huomio: kirjallisuuden kertoimet (esim. Hazell, Herreño, Nakamura, Steinsson 2022) perustuvat US-dataan ja eri muuttujamäärittelyihin. Tämä on demonstratiivinen simulaatio, ei kausaalinen arvio.
Tutkimuskirjallisuudessa on tunnistettu useita mekanismeja:
Lopputulos: V/U voi nousta ilman, että palkat seuraavat perässä.
Jos yritykset raportoivat “työvoimapulaa” mutta eivät nosta palkkoja, voi olla kyse:
Kaikki kolme voivat olla totta samaan aikaan eri ammateissa.
Mikä on johtopäätös työvoimapulakeskustelulle? Jos palkat eivät nouse, pula ei voi olla kovin akuutti — tai sitten markkinoiden sääntely estää hinnan toimimasta signaalina.
maailma on jakauma
ja niin on myös palkkojen reagointi. Jos ne katsotaan ammattitasolla, nähdään todennäköisesti että muutamissa pula-ammateissa palkat ovat todella nousseet, mutta koko markkinan mittakaavassa ilmiö peittyy.
Osassa 5 tartumme poliittisesti kipeään kysymykseen: kuinka suuri osa työttömistä on tosiasiallisesti työkyvyttömiä? Jos merkittävä osa työttömistä on terveydellisistä syistä käytännössä työkyvyttömiä, heidän näkeminen “reservinä” työvoimapulaan on väärä mittari.
Kaipaatko analyysiä tai onko sinulla projekti, jonka haluat toteuttaa? Ota yhteyttä kristian.vepsalainen@proton.me . Olen käytettävissäsi.
---
title: "Jos työvoimapula on todellinen, palkkojen pitäisi nousta"
subtitle: "Osa 4 – Palkkajäykkyydet"
author: "Kristian Vepsäläinen"
date: 2026-04-28
categories:
- data science
- työmarkkinat
- talous
- R
- tilastotiede
format:
html:
code-fold: true
code-summary: "Näytä koodi"
toc: true
toc-depth: 3
number-sections: true
execute:
warning: false
message: false
slug: suomen-tyovoimapula-osa4
---
## Tiivistelmä
Kansantaloustieteen peruslaki on yksinkertainen. Jos jostain on pulaa, hinta nousee. Jos työvoimasta on pulaa, palkkojen pitäisi nousta.
[Osissa 2 ja 3](../2026-04-22-osa2-kohtaanto-ammatit) osoitimme, että kohtaanto-ongelma on ammatti- ja aluekohtainen. Tässä osassa testaamme saman ilmiön talousteoreettisesti: nousevatko palkat siellä, missä väitetään olevan työvoimapulaa?
Keskeinen tulos: palkkojen nimellinen kasvu on ollut maltillista avoimien työpaikkojen noususta huolimatta. Tämä viittaa joko (a) palkkajäykkyyksiin tai (b) siihen, että raportoitu "työvoimapula" ei ole yhtä voimakas kuin keskustelussa annetaan ymmärtää.
Maailma on jakauma. Myös palkkojen ja työvoiman kysynnän välinen yhteys on jakauma — eikä sen keskiarvo kerro koko tarinaa.
---
## Teoreettinen viitekehys: Phillips-käyrä
Phillips-käyrä on talouden empiirisistä säännönmukaisuuksista kuuluisin. Alkuperäisessä muodossaan (Phillips 1958) se kuvaa palkkojen muutoksen ja työttömyyden käänteistä suhdetta: matala työttömyys → nopea palkkakasvu.
Modernissa muotoilussa palkkakasvu $\Delta w$ riippuu:
$$
\Delta w_t = \alpha + \beta_1 \cdot \text{V/U}_t + \beta_2 \cdot \pi^e_t + \varepsilon_t
$$
missä:
- $\text{V/U}$ = avoimet työpaikat / työttömät (kohtaantosuhde)
- $\pi^e$ = inflaatio-odotukset
- $\varepsilon$ = satunnaiskomponentti
Jos $\beta_1$ on merkittävästi positiivinen ja tilastollisesti merkitsevä, palkat reagoivat työvoiman kysyntään. Jos $\beta_1 \approx 0$, palkat ovat jäykkiä.
---
## Data
- **Palkkakehitys**: Tilastokeskuksen ansiotasoindeksi (ATI) neljännesvuosittain
- **Avoimet työpaikat**: Tilastokeskus / Eurostat job vacancy rate
- **Työttömyys**: Eurostat kuukausittainen, SA
- **Inflaatio**: Tilastokeskuksen kuluttajahintaindeksi (KHI)
- **OECD palkkakasvu**: vertailua varten muihin maihin
```{r}
#| echo: false
library(tidyverse)
library(eurostat)
library(pxweb)
library(broom)
library(scales)
theme_set(theme_minimal(base_size = 14))
```
## Palkkakehitys Suomessa
```{r}
#| label: palkat
# Käytämme Eurostatin Labour Cost Index -aineistoa (lc_lci_r2_q).
# Tilastokeskus toimittaa Suomen luvut suoraan Eurostatille, joten data on sama
# kuin ATI:n työvoimakustannusosassa, mutta dimensiot ovat siistimpiä.
#
# Dimensiot (Eurostatin koodisto):
# nace_r2 = "B-S" → yritystoiminta + palvelut yhteensä
# lcstruct = "D1_D4_MD5" → työvoimakustannukset (LCI)
# unit = "I20" → indeksi, 2020 = 100
# s_adj = "SCA" → kausi- ja kalenteritasoitettu
lci <- get_eurostat("lc_lci_r2_q", time_format = "date") |>
filter(
geo == "FI",
nace_r2 == "B-S",
lcstruct == "D1_D4_MD5",
unit == "I20",
s_adj == "SCA"
) |>
select(aika = TIME_PERIOD, lci = values) |>
arrange(aika) |>
drop_na()
# Tarkistus: rivien määrän pitäisi olla yli 60 (15+ vuotta neljännesvuosittain)
nrow(lci)
```
```{r}
#| label: fig-palkat
#| fig-cap: "Palkkakehitys Suomessa (Labour Cost Index, Eurostat, 2012=100)"
ggplot(lci, aes(aika, lci)) +
geom_line(colour = "#1d3557", linewidth = 1) +
labs(
title = "Palkkatason kehitys Suomessa",
subtitle = "Labour Cost Index (Eurostat, kausitasoitettu)",
x = NULL,
y = "Indeksi (2020 = 100)"
)
```
Palkat ovat nousseet tasaisesti, mutta maltillisesti. Seuraavaksi katsotaan, onko kasvu ollut nopeampaa juuri silloin, kun työvoimapulasta on puhuttu eniten.
## Palkkakasvu vs avoimet työpaikat
```{r}
#| label: yhdistetaan-data
# Avoimet työpaikat (job vacancy rate)
# Diagnostiikan perusteella Suomelle pisin sarja saadaan yhdistelmällä
# (96 riviä jokaiselle nace_r2/sizeclas-yhdistelmälle):
# nace_r2 = "B-S" → yritystoiminta + palvelut yhteensä
# sizeclas = "GE10" → 10+ työntekijän yksiköt (LCI:n peruskattavuus)
# s_adj = "NSA" → kausitasoittamaton (Suomelle SA ei ole tarjolla)
# indic_em = "JVR" → vacancy rate (valmiiksi laskettu)
#
# HUOM: indikaattorin koodi on "JVR", EI "JOBRATE" (vaikka eräät
# kolmansien osapuolten dokumentaatiot väittävät toisin)
vac <- get_eurostat("jvs_q_nace2", time_format = "date") |>
filter(
geo == "FI",
nace_r2 == "B-S",
sizeclas == "GE10",
indic_em == "JVR",
s_adj == "NSA"
) |>
select(aika = TIME_PERIOD, vacancy_rate = values) |>
drop_na() |>
arrange(aika)
# Työttömyysaste (kvartaali)
# une_rt_q:ssa age-koodi on "Y15-74", EI "TOTAL".
unemp <- get_eurostat("une_rt_q", time_format = "date") |>
filter(
geo == "FI",
sex == "T",
age == "Y15-74",
unit == "PC_ACT",
s_adj == "SA"
) |>
select(aika = TIME_PERIOD, unemployment_rate = values) |>
drop_na() |>
arrange(aika)
# HICP-vuosimuutos (inflaatio, kuukausitaso)
khi <- get_eurostat("prc_hicp_manr", time_format = "date") |>
filter(geo == "FI", coicop == "CP00") |>
select(aika = TIME_PERIOD, inflation = values) |>
drop_na() |>
arrange(aika)
# Yhdistetään kvartaalitasolla
df <- lci |>
inner_join(vac, by = "aika") |>
inner_join(unemp, by = "aika") |>
inner_join(khi, by = "aika") |>
arrange(aika) |>
mutate(
wage_growth_yoy = (lci / lag(lci, 4) - 1) * 100,
vu_ratio = vacancy_rate / unemployment_rate
) |>
drop_na()
```
```{r}
#| label: fig-palkka-vs-vacancy
#| fig-cap: "Palkkakasvun ja avoimien työpaikkojen suhde"
ggplot(df, aes(vu_ratio, wage_growth_yoy)) +
geom_point(aes(colour = aika), alpha = 0.8, size = 2.5) +
geom_smooth(method = "lm", se = TRUE, colour = "#e63946") +
scale_colour_date(low = "#a8dadc", high = "#1d3557") +
labs(
title = "Palkkakasvun ja kohtaantosuhteen yhteys",
subtitle = "Phillips-käyrän kaltainen tarkastelu",
x = "V/U-suhde (avoimet / työttömät)",
y = "Palkkakasvu (vuositasolla, %)",
colour = "Aika"
)
```
Jos työvoimapula vetäisi palkkoja ylöspäin, pisteet asettuisivat selvästi nousevalle suoralle. Käytännössä hajonta on suurta ja yhteyden vahvuus empiirinen kysymys.
## Phillips-käyrän estimointi
```{r}
#| label: phillips-malli
malli <- lm(wage_growth_yoy ~ vu_ratio + inflation, data = df)
tidy(malli) |>
mutate(across(where(is.numeric), ~round(.x, 3)))
glance(malli) |>
select(r.squared, adj.r.squared, nobs, p.value) |>
mutate(across(where(is.numeric), ~round(.x, 3)))
```
**Tulkinta** (muotoilu konkreettisten arvojen mukaan ajon jälkeen):
- `vu_ratio`-kerroin: kun avoimia paikkoja työtöntä kohden on yksi lisää, palkkakasvu nousee X prosenttiyksikköä
- `inflation`-kerroin: hintainflaation siirtyminen palkkoihin
- $R^2$: kuinka suuren osuuden palkkakasvun vaihtelusta malli selittää
Jos `vu_ratio`-kerroin on pieni (esim. alle 1) tai ei-merkitsevä, tulos viittaa **palkkajäykkyyksiin**: työmarkkina ei välitä kysyntäshokkia palkkoihin.
## Rakenteellinen muutos: onko Phillips-käyrä siirtynyt?
Osassa 1 näimme, että Beveridge-käyrä siirtyi vuoden 2020 jälkeen. Onko sama tapahtunut Phillips-käyrälle?
```{r}
#| label: fig-phillips-breakpoint
#| fig-cap: "Phillips-käyrä ennen ja jälkeen 2020"
df_bp <- df |>
mutate(post_2020 = aika >= as.Date("2020-01-01"))
ggplot(df_bp, aes(vu_ratio, wage_growth_yoy, colour = post_2020)) +
geom_point(alpha = 0.7, size = 2.5) +
geom_smooth(method = "lm", se = FALSE) +
scale_colour_manual(
values = c("FALSE" = "#457b9d", "TRUE" = "#e63946"),
labels = c("2012–2019", "2020–")
) +
labs(
title = "Phillips-käyrän rakenteellinen muutos",
subtitle = "Onko palkkareagointi muuttunut Covidin jälkeen?",
x = "V/U-suhde",
y = "Palkkakasvu (% yoy)",
colour = "Ajanjakso"
)
```
```{r}
#| label: phillips-interaktio
malli_bp <- lm(wage_growth_yoy ~ vu_ratio * post_2020 + inflation, data = df_bp)
tidy(malli_bp) |>
mutate(across(where(is.numeric), ~round(.x, 3)))
```
Jos `vu_ratio:post_2020TRUE`-interaktiotermi on merkitsevä ja positiivinen, palkkareagointi on vahvistunut pandemian jälkeen. Jos termi on negatiivinen tai nolla, jäykkyys on säilynyt tai pahentunut.
## Kansainvälinen vertailu: OECD
Onko Suomi poikkeuksellinen? Verrataan palkkakasvua muutamiin verrokkimaihin.
```{r}
#| label: oecd-vertailu
# Eurostat: LCI-sarjat vertailumaille (samat dimensiot kuin Suomelle)
lci_vertailu <- get_eurostat("lc_lci_r2_q", time_format = "date") |>
filter(
geo %in% c("FI", "SE", "DE", "DK", "EE", "NL"),
nace_r2 == "B-S",
lcstruct == "D1_D4_MD5",
unit == "I20",
s_adj == "SCA"
) |>
select(aika = TIME_PERIOD, geo, lci = values) |>
arrange(geo, aika) |>
group_by(geo) |>
mutate(wage_growth = (lci / lag(lci, 4) - 1) * 100) |>
ungroup() |>
drop_na()
lci_vertailu |>
filter(aika >= as.Date("2018-01-01")) |>
ggplot(aes(aika, wage_growth, colour = geo)) +
geom_line(linewidth = 0.9) +
labs(
title = "Palkkakasvu Suomessa ja verrokkimaissa",
subtitle = "Vuosimuutos, Labour Cost Index (Eurostat)",
x = NULL,
y = "Palkkakasvu (% yoy)",
colour = "Maa"
)
```
Tästä nähdään, jääkö Suomi muista jälkeen. Tyypillisesti euroalueen inflaatiopiikin yhteydessä 2022 monen maan palkkakasvu kiihtyi, ja Suomen reagointi näkyy suhteessa muihin.
## Monte Carlo: palkkajäykkyyden hinta
Jos palkat olisivat joustavia, kuinka paljon enemmän ne olisivat nousseet 2021–2023? Simuloidaan.
```{r}
#| label: fig-mc-jaykkyys
#| fig-cap: "Simulaatio: palkkakasvun 'menetetty' komponentti"
set.seed(2026)
n_sim <- 5000
# Estimoidaan "täydellisen joustavuuden" kerroin esim. Yhdysvaltain tai Saksan tasolle
# Kirjallisuudessa US:n Phillips-käyrän kertoimet ovat 0.5–2 (esim. Hazell et al. 2022)
jousto_beta_sim <- rnorm(n_sim, mean = 1.2, sd = 0.3)
# Havaittu keskiarvoinen V/U muutos 2020–2023
vu_muutos <- df |>
filter(aika >= as.Date("2020-01-01"), aika <= as.Date("2023-12-31")) |>
summarise(ka = mean(vu_ratio, na.rm = TRUE)) |>
pull(ka)
vu_baseline <- df |>
filter(aika < as.Date("2020-01-01")) |>
summarise(ka = mean(vu_ratio, na.rm = TRUE)) |>
pull(ka)
# Simuloitu ylimääräinen palkkakasvu joustavassa maailmassa
simuloi_ylinousu <- jousto_beta_sim * (vu_muutos - vu_baseline)
tibble(ylinousu = simuloi_ylinousu) |>
ggplot(aes(ylinousu)) +
geom_histogram(bins = 40, fill = "#457b9d", colour = "white", alpha = 0.8) +
geom_vline(
xintercept = median(simuloi_ylinousu),
colour = "#e63946", linewidth = 1
) +
labs(
title = "Palkkakasvun 'menetetty' komponentti",
subtitle = paste0(
"Jos palkat reagoisivat kuten kirjallisuuden joustomaissa: \n",
"mediaani = ", round(median(simuloi_ylinousu), 1),
" %-yksikköä enemmän palkkakasvua"
),
x = "Ylimääräinen palkkakasvu (%-yks.)",
y = "Simulaatioiden määrä"
)
```
**Metodologinen huomio:** kirjallisuuden kertoimet (esim. Hazell, Herreño, Nakamura, Steinsson 2022) perustuvat US-dataan ja eri muuttujamäärittelyihin. Tämä on demonstratiivinen simulaatio, ei kausaalinen arvio.
## Miksi palkat eivät jousta?
Tutkimuskirjallisuudessa on tunnistettu useita mekanismeja:
1. **Työehtosopimukset**: Suomessa lähes 90 % työntekijöistä on TES-piirissä. Palkkojen tarkistusneuvottelut tapahtuvat 1–3 vuoden sykleissä, eivät viikoittain.
2. **Nimellinen jäykkyys alaspäin** (Tobin 1972, Bewley 1999): työnantajat eivät halua alentaa palkkoja tehottomuusloukun vuoksi.
3. **Referenssipalkat**: uusien työntekijöiden palkat muodostuvat suhteessa olemassa oleviin työntekijöihin.
4. **Monopsoni**: pienillä paikkakunnilla työnantajalla on markkinavoimaa.
5. **Ulkomainen työvoima**: tarjonnan kasvu tietyillä aloilla (rakennus, hoiva) vähentää palkkojen nousupainetta.
Lopputulos: V/U voi nousta ilman, että palkat seuraavat perässä.
## Mitä tämä tarkoittaa työvoimapulakeskustelulle?
Jos yritykset raportoivat "työvoimapulaa" mutta eivät nosta palkkoja, voi olla kyse:
- **Palkkajäykkyyden hinnasta**: työnantajat eivät voi nostaa palkkoja yksittäisesti TES:n ja sisäisten rakenteiden takia
- **Strategisesta viestinnästä**: "pula" -narratiivi tukee maahanmuuttopolitiikkaa ja koulutuspaineita
- **Osaamismismatchista**: työvoimaa on, mutta ei oikeilla taidoilla — palkan nostaminen ei ratkaise ongelmaa
Kaikki kolme voivat olla totta samaan aikaan eri ammateissa.
## Yhteenveto
1. **Palkkakasvu on ollut maltillista** avoimien työpaikkojen noususta huolimatta.
2. **Phillips-käyrän kerroin on todennäköisesti heikko ja/tai vaihteleva.** Palkat eivät reagoi työvoiman kysyntään kirjatason mukaisesti.
3. **Rakenteellinen muutos 2020 jälkeen** näkyy myös palkkayhtälössä, mutta suuntaa täytyy tarkastella mallin tulosten perusteella.
4. **Palkkajäykkyys on monen tekijän yhdistelmä** — TES, nimellinen jäykkyys, monopsoni — eikä se ratkea yhdellä toimenpiteellä.
Mikä on johtopäätös työvoimapulakeskustelulle? Jos palkat eivät nouse, pula ei voi olla kovin akuutti — tai sitten markkinoiden sääntely estää hinnan toimimasta signaalina.
> maailma on jakauma
ja niin on myös palkkojen reagointi. Jos ne katsotaan ammattitasolla, nähdään todennäköisesti että muutamissa pula-ammateissa palkat ovat todella nousseet, mutta koko markkinan mittakaavassa ilmiö peittyy.
## Lähteet
- Phillips, A. W. (1958). The Relation Between Unemployment and the Rate of Change of Money Wage Rates in the United Kingdom, 1861–1957. *Economica*, 25(100).
- Hazell, J., Herreño, J., Nakamura, E., Steinsson, J. (2022). The Slope of the Phillips Curve: Evidence from U.S. States. *Quarterly Journal of Economics*, 137(3).
- Bewley, T. (1999). *Why Wages Don't Fall During a Recession*. Harvard University Press.
- Tilastokeskus: Ansiotasoindeksi (ATI), taulukko 11yo.
- Eurostat: Labour Cost Index (lc_lci_r2_q), Job Vacancy Statistics (jvs_q_nace2), HICP.
## Mitä seuraavaksi?
Osassa 5 tartumme poliittisesti kipeään kysymykseen: kuinka suuri osa työttömistä on tosiasiallisesti työkyvyttömiä? Jos merkittävä osa työttömistä on terveydellisistä syistä käytännössä työkyvyttömiä, heidän näkeminen "reservinä" työvoimapulaan on väärä mittari.
---
Kaipaatko analyysiä tai onko sinulla projekti, jonka haluat toteuttaa? Ota yhteyttä kristian.vepsalainen@proton.me . Olen käytettävissäsi.