Risk Assessment Indicators

Data - ECB

Info

Last observation: Monthly: 2026-06 (N = 373) · Quarterly: 2026-Q2 (N = 6)

First observation: Monthly: 1997-09 (N = 62) · Quarterly: 1997-Q3 (N = 34)

Last data update: 13 aoû 2026, 06:21. Last compile: 13 aoû 2026, 08:35

Structure

Info

source dataset Title .html .rData
ecb RAI Risk Assessment Indicators 2026-08-12 2026-08-11
  • Data Structure Definition. (DSD) html

Data on monetary policy

source dataset Title .html .rData
bdf FM Marché financier, taux 2026-08-11 2026-08-10
bdf MIR Taux d'intérêt - Zone euro 2026-08-11 2026-08-10
bdf MIR1 Taux d'intérêt - France 2026-08-11 2026-08-10
bis CBPOL Policy Rates, Daily 2026-08-11 2026-07-25
ecb BSI Balance Sheet Items 2026-08-12 2026-08-11
ecb BSI_PUB Balance Sheet Items - Published series 2026-08-12 2026-08-11
ecb FM Financial market data 2026-08-12 2026-08-11
ecb ILM Internal Liquidity Management 2026-08-12 2026-08-11
ecb ILM_PUB Internal Liquidity Management - Published series 2026-08-12 2026-08-11
ecb MIR MFI Interest Rate Statistics 2026-08-12 2026-08-11
ecb RAI Risk Assessment Indicators 2026-08-12 2026-08-11
ecb SUP Supervisory Banking Statistics 2026-08-12 2026-08-12
ecb YC Financial market data - yield curve 2026-08-12 2026-08-12
ecb YC_PUB Financial market data - yield curve - Published series 2026-08-12 2026-08-12
ecb liq_daily Daily Liquidity 2026-08-12 2026-08-12
eurostat ei_mfir_m Interest rates - monthly data 2026-08-11 2026-08-11
eurostat irt_st_m Money market interest rates - monthly data 2026-08-11 2026-08-11
fred r Interest Rates 2026-08-11 2026-08-11
oecd MEI Main Economic Indicators 2026-08-11 2026-08-02
oecd MEI_FIN Monthly Monetary and Financial Statistics (MEI) 2026-08-11 2026-08-02

Data on interest rates

source dataset Title .html .rData
bdf FM Marché financier, taux 2026-08-11 2026-08-10
bdf MIR Taux d'intérêt - Zone euro 2026-08-11 2026-08-10
bdf MIR1 Taux d'intérêt - France 2026-08-11 2026-08-10
bis CBPOL_D Policy Rates, Daily 2026-08-11 2026-08-01
bis CBPOL_M Policy Rates, Monthly 2026-08-11 2026-07-25
ecb FM Financial market data 2026-08-12 2026-08-11
ecb MIR MFI Interest Rate Statistics 2026-08-12 2026-08-11
eurostat ei_mfir_m Interest rates - monthly data 2026-08-11 2026-08-11
eurostat irt_lt_mcby_d EMU convergence criterion series - daily data 2026-08-11 2026-08-02
eurostat irt_st_m Money market interest rates - monthly data 2026-08-11 2026-08-11
fred r Interest Rates 2026-08-11 2026-08-11
oecd MEI Main Economic Indicators 2026-08-11 2026-08-02
oecd MEI_FIN Monthly Monetary and Financial Statistics (MEI) 2026-08-11 2026-08-02
wdi FR.INR.DPST Deposit interest rate (%) 2026-08-11 2026-08-11
wdi FR.INR.LEND Lending interest rate (%) 2026-08-11 2026-08-11
wdi FR.INR.RINR Real interest rate (%) 2026-08-11 2026-08-11

LAST_COMPILE

LAST_COMPILE
2026-08-13

Last

TIME_PERIOD FREQ Nobs
2026-Q2 Q 6
2026-06 M 373

REF_AREA

Code
RAI |>
  group_by(REF_AREA, Ref_area) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) |>
  mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Ref_area))),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) |>
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Table: Average 2016-2022

Code
RAI |>
  filter(FREQ == "M") |>
  month_to_date() |>
  filter(date >= as.Date("2016-01-01")) |>
  group_by(DD_ECON_CONCEPT, Dd_econ_concept, REF_AREA, Ref_area) |>
  summarise(OBS_VALUE = mean(OBS_VALUE),
            Nobs = n()) |>
  print_table_conditional()

France

Table

Code
RAI |>
  filter(FREQ == "M",
         REF_AREA %in% c("FR", "U2")) %>%
  select_if(~ n_distinct(.) > 1) |>
  group_by(DD_ECON_CONCEPT, Ref_area) |>
  filter(TIME_PERIOD == max(TIME_PERIOD)) |>
  select(Ref_area, DD_ECON_CONCEPT, OBS_VALUE) |>
  spread(Ref_area, OBS_VALUE) |>
  arrange(-`France`) |>
  print_table_conditional()
DD_ECON_CONCEPT Euro area (changing composition) France
MMTCH 77.45288 78.5620491
ST1TMF 69.12145 77.2836957
SVLHHNFC 65.33391 39.6302409
IBL1TL 24.57754 36.8220865
LC1DHHS NA 36.1612922
NDEPFUN 14.70936 15.6072303
LEVR 8.29728 7.1648895
GRNLHHNFC NA 6.5304169
SVLHPHH 15.54764 4.5252390
CT1DGGV NA 4.3746499
LMGLNFC NA 1.2041777
LMGBLNFCH NA 1.0524114
LMGLHH NA 0.7090474
LMGOLNFCH NA 0.2576619

SVLHHNFC, LC1DHHS

Code
RAI |>
  filter(DD_ECON_CONCEPT %in% c("SVLHHNFC", "LC1DHHS"),
         REF_AREA %in% c("FR", "U2")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color, linetype = Dd_econ_concept)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

CT1DGGV, SVLHPHH

Code
RAI |>
  filter(DD_ECON_CONCEPT %in% c("CT1DGGV", "SVLHPHH"),
         REF_AREA %in% c("FR", "U2")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color, linetype = Dd_econ_concept)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

SVLHPHH - Share of floating rates, Households

Table: Last Time

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHPHH") |>
  filter(TIME_PERIOD == max(TIME_PERIOD)) |>
  select_if(~n_distinct(.) > 1) |>
  select(REF_AREA, Ref_area, OBS_VALUE, OBS_VALUE) |>
  mutate(OBS_VALUE = round(OBS_VALUE, 1)) |>
  mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Ref_area))),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) |>
  select(Flag, everything()) |>
  arrange(OBS_VALUE) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

Table: Many dates

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHPHH",
         TIME_PERIOD %in% c(last_time, "2020-01", "2015-01", "2010-01", "2005-01")) |>
  select_if(~n_distinct(.) > 1) |>
  select(REF_AREA, Ref_area, TIME_PERIOD, OBS_VALUE) |>
  mutate(OBS_VALUE = round(OBS_VALUE, 1)) |>
  spread(TIME_PERIOD, OBS_VALUE) |>
  print_table_conditional()
REF_AREA Ref_area 2005-01 2010-01 2015-01 2020-01 2026-06
AT Austria 65.7 76.2 87.3 40.6 17.7
BE Belgium 58.2 58.4 2.4 4.5 6.2
BG Bulgaria NA 96.2 84.0 97.3 99.6
CY Cyprus NA 61.7 95.1 90.7 10.9
CZ Czech Republic NA NA 7.2 2.1 3.5
DE Germany 19.1 21.6 13.2 11.6 12.4
DK Denmark 70.1 49.2 NA NA 46.8
EE Estonia 99.3 56.7 85.4 NA 98.1
ES Spain 93.1 90.1 66.6 32.1 8.1
FI Finland 97.8 97.5 96.8 97.6 95.0
FR France 36.5 12.8 3.8 1.9 4.5
GR Greece 84.4 72.2 93.1 70.2 20.5
HR Croatia NA NA 84.9 20.5 2.2
HU Hungary 58.1 84.4 44.1 2.1 8.1
IE Ireland 93.6 84.1 66.0 25.8 6.2
IT Italy 87.3 81.3 71.7 18.0 19.9
LT Lithuania 97.9 84.7 89.8 97.8 94.3
LU Luxembourg 88.5 NA 63.9 30.1 52.0
LV Latvia 72.3 84.4 NA 94.3 94.2
MT Malta NA 88.0 77.9 47.4 NA
NL Netherlands 43.2 24.9 19.9 17.4 19.3
PL Poland 90.9 100.0 99.9 100.0 29.9
PT Portugal 97.8 99.5 93.0 86.7 15.3
RO Romania NA NA 89.9 73.6 23.7
SE Sweden NA 85.6 85.5 64.2 90.6
SI Slovenia 99.1 98.1 93.4 55.5 2.2
SK Slovakia 62.4 36.0 6.4 1.1 2.3
U2 Euro area (changing composition) 54.7 42.6 21.6 15.8 15.5

Netherlands, Germany, Belgium, France, Europe

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHPHH",
         REF_AREA %in% c("NL", "DE", "BE", "FR",  "U2")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate, households (%)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(5) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

France, Spain, Portugal, latvia, Lithuania, Estonia

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHPHH",
         REF_AREA %in% c("FR", "ES", "PT", "EE", "LT", "U2")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate, households (%)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(6) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

France, Spain, Portugal

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHPHH",
         REF_AREA %in% c("FR", "ES", "PT")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate, households (%)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

Italy, Sweden, Poland

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHPHH",
         REF_AREA %in% c("PL", "IT", "SE")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate, households (%)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

Netherlands, Germany, Belgium

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHPHH",
         REF_AREA %in% c("NL", "DE", "BE")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate, households (%)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

SVLHHNFC - Share of floating rates, Households, and Corporations

Table

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHHNFC",
         TIME_PERIOD %in% c(last_time, "2020-01", "2015-01", "2010-01", "2005-01")) |>
  select_if(~n_distinct(.) > 1) |>
  select(REF_AREA, Ref_area, TIME_PERIOD, OBS_VALUE) |>
  mutate(OBS_VALUE = round(OBS_VALUE, 1)) |>
  spread(TIME_PERIOD, OBS_VALUE) |>
  print_table_conditional()
REF_AREA Ref_area 2005-01 2010-01 2015-01 2020-01 2026-06
AT Austria 91.7 92.3 89.7 70.1 64.6
BE Belgium 90.7 90.4 76.4 73.3 76.4
BG Bulgaria NA 98.7 95.8 95.8 96.9
CY Cyprus NA 85.4 96.1 94.2 69.1
CZ Czech Republic 80.8 76.5 51.7 48.7 46.1
DE Germany 61.5 72.6 59.4 61.3 66.2
DK Denmark 76.4 64.5 43.6 50.2 68.1
EE Estonia 92.0 71.1 80.4 83.6 95.7
ES Spain 91.5 91.4 88.1 70.8 70.4
FI Finland 94.3 NA NA 94.8 91.6
FR France 64.8 45.3 39.8 32.3 39.6
GR Greece 82.9 86.1 97.7 91.6 83.8
HR Croatia NA NA 88.8 57.8 50.0
HU Hungary 95.3 94.5 75.0 52.4 37.6
IE Ireland 83.0 87.3 82.3 67.3 48.8
IT Italy 90.4 93.9 92.4 73.4 77.0
LT Lithuania 93.6 88.3 93.9 89.1 83.8
LU Luxembourg 98.4 99.1 95.0 91.3 89.1
LV Latvia 72.6 82.3 80.1 95.3 NA
MT Malta NA 98.7 89.4 59.6 79.5
NL Netherlands 71.1 73.5 57.2 45.0 58.4
PL Poland 94.5 93.6 86.6 90.2 60.5
PT Portugal 95.7 95.9 90.9 74.8 50.0
RO Romania NA 96.6 85.9 67.3 59.3
SE Sweden NA 89.2 90.6 78.7 89.8
SI Slovenia 89.5 93.5 91.5 78.9 55.5
SK Slovakia 83.2 78.9 66.7 23.4 38.2
U2 Euro area (changing composition) 79.2 81.5 69.9 60.5 65.3

France, Spain, Portugal

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHHNFC",
         REF_AREA %in% c("FR", "ES", "PT")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate, households and firms (%)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

Italy, Sweden, Poland

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHHNFC",
         REF_AREA %in% c("PL", "IT", "SE")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate, households and firms (%)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))

Netherlands, Germany, Belgium

Code
RAI |>
  filter(DD_ECON_CONCEPT == "SVLHHNFC",
         REF_AREA %in% c("NL", "DE", "BE")) |>
  month_to_date() %>%
  select_if(~n_distinct(.) > 1) |>
  left_join(colors, by = c("Ref_area" = "country")) |>
  mutate(OBS_VALUE = OBS_VALUE/100) |>
  ggplot() + theme_minimal() + xlab("") + ylab("Share of variable rate, households and firms (%)") +
  geom_line(aes(x = date, y = OBS_VALUE, color = color)) + 
  add_flags(3) + scale_color_identity() +
  scale_x_date(breaks = seq(1960, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 5),
                     labels = percent_format(accuracy = 1))