ACPR - Banking and Insurance in France
Data - Banque de France
Info
Last observation: Annuel: 31 déc 2024 (N = 19,040)
First observation: Annuel: 31 déc 2006 (N = 19,040)
Last data update: 11 aoû 2026, 19:22. Last compile: 14 aoû 2026, 21:23
Structure
LAST_DOWNLOAD
| LAST_DOWNLOAD |
|---|
| 2026-08-11 |
LAST_COMPILE
| LAST_COMPILE |
|---|
| 2026-08-14 |
Last
| date | Nobs |
|---|---|
| 2024-12-31 | 1313 |
Bank Prudential Ratios (Top 6 French Banking Groups)
Solvency (CET1) and Leverage
Code
ACPR |>
filter(variable %in% c("ACPR.A.BQ.PRUDENTIEL.RATIO_CET1.361._Z._Z.PHNC._Z.TOP6_AUT_GROUPES",
"ACPR.A.BQ.PRUDENTIEL.GB_COR_LEVIER_DISTRIB001_26.144._Z._Z.PHNC._Z.TOP6_AUT_GROUPES")) |>
mutate(Series = ifelse(MNE == "RATIO_CET1", "CET1 solvency ratio", "Leverage ratio (median)"),
value = value/100) |>
ggplot() + geom_line(aes(x = date, y = value, color = Series)) +
geom_point(aes(x = date, y = value, color = Series)) +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = seq(1960, 2100, 1) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme(legend.position = c(0.3, 0.85),
legend.title = element_blank())
Liquidity (LCR and NSFR)
Code
ACPR |>
filter(variable %in% c("ACPR.A.BQ.PRUDENTIEL.GB_COR_LCR9719_50.140._Z._Z.PHNC._Z.TOP6_AUT_GROUPES",
"ACPR.A.BQ.PRUDENTIEL.NSFR1239300.633._Z._Z.PHNC._Z.TOP6_AUT_GROUPES")) |>
mutate(Series = ifelse(MNE == "GB_COR_LCR9719_50", "LCR (median)", "NSFR"),
value = value/100) |>
ggplot() + geom_line(aes(x = date, y = value, color = Series)) +
geom_point(aes(x = date, y = value, color = Series)) +
geom_hline(yintercept = 1, linetype = "dashed", color = "black") +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = seq(1960, 2100, 1) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme(legend.position = c(0.3, 0.85),
legend.title = element_blank())
Prudential Ratios: Latest Available Year
Code
ACPR |>
filter(variable %in% c("ACPR.A.BQ.PRUDENTIEL.RATIO_CET1.361._Z._Z.PHNC._Z.TOP6_AUT_GROUPES",
"ACPR.A.BQ.PRUDENTIEL.GB_COR_LEVIER_DISTRIB001_26.144._Z._Z.PHNC._Z.TOP6_AUT_GROUPES",
"ACPR.A.BQ.PRUDENTIEL.GB_COR_LCR9719_50.140._Z._Z.PHNC._Z.TOP6_AUT_GROUPES",
"ACPR.A.BQ.PRUDENTIEL.NSFR1239300.633._Z._Z.PHNC._Z.TOP6_AUT_GROUPES")) |>
mutate(Series = case_when(MNE == "RATIO_CET1" ~ "CET1 solvency ratio",
MNE == "GB_COR_LEVIER_DISTRIB001_26" ~ "Leverage ratio (median)",
MNE == "GB_COR_LCR9719_50" ~ "LCR (median)",
MNE == "NSFR1239300" ~ "NSFR")) |>
filter(date == max(date)) |>
select(Series, date, value) |>
arrange(Series) |>
print_table_conditional()| Series | date | value |
|---|---|---|
| CET1 solvency ratio | 2024-12-31 | 16.13 |
| LCR (median) | 2024-12-31 | 239.14 |
| Leverage ratio (median) | 2024-12-31 | 7.21 |
| NSFR | 2024-12-31 | 115.63 |
Solvency II: SCR Coverage Ratio (Insurance)
By Business Segment
Code
ACPR |>
filter(MNE == "SCR",
CONSOLIDATION == "SOLO",
POPULATION %in% c("_Z", "VM", "NV", "BA", "RE")) |>
mutate(Segment = case_when(POPULATION == "_Z" ~ "Whole sector",
POPULATION == "VM" ~ "Life insurance",
POPULATION == "NV" ~ "Non-life insurance",
POPULATION == "BA" ~ "Bancassurers",
POPULATION == "RE" ~ "Reinsurance and holding companies"),
value = value/100) |>
ggplot() + geom_line(aes(x = date, y = value, color = Segment)) +
geom_point(aes(x = date, y = value, color = Segment)) +
geom_hline(yintercept = 1, linetype = "dashed", color = "black") +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = seq(1960, 2100, 1) |> paste0("-01-01") |> as.Date(),
labels = date_format("%Y")) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme(legend.position = c(0.25, 0.25),
legend.title = element_blank())
Latest Available Year
Code
ACPR |>
filter(MNE == "SCR",
CONSOLIDATION == "SOLO",
POPULATION %in% c("_Z", "VM", "NV", "BA", "RE")) |>
mutate(Segment = case_when(POPULATION == "_Z" ~ "Whole sector",
POPULATION == "VM" ~ "Life insurance",
POPULATION == "NV" ~ "Non-life insurance",
POPULATION == "BA" ~ "Bancassurers",
POPULATION == "RE" ~ "Reinsurance and holding companies")) |>
filter(date == max(date)) |>
select(Segment, date, value) |>
arrange(desc(value)) |>
print_table_conditional()| Segment | date | value |
|---|---|---|
| Non-life insurance | 2024-12-31 | 273.3 |
| Whole sector | 2024-12-31 | 239.4 |
| Life insurance | 2024-12-31 | 232.6 |
| Reinsurance and holding companies | 2024-12-31 | 230.6 |
| Bancassurers | 2024-12-31 | 223.7 |