diff --git a/chainladder/utils/data/_manifest.py b/chainladder/utils/data/_manifest.py index b3fb1307a..ac9d25284 100644 --- a/chainladder/utils/data/_manifest.py +++ b/chainladder/utils/data/_manifest.py @@ -181,25 +181,11 @@ "columns": ["Gross Reported Claims", "Net Reported Claims", "Net to Gross"], "cumulative": True, }, - "friedland_us_auto_chg_prod_mix": { + "friedland_us_auto": { "origin": "Accident Year", "development": "Calendar Year", - "index": None, - "columns": ["Paid Claims", "Reported Claims"], - "cumulative": True, - }, - "friedland_us_auto_incr_claim": { - "origin": "Accident Year", - "development": "Calendar Year", - "index": None, - "columns": ["Paid Claims", "Reported Claims"], - "cumulative": True, - }, - "friedland_us_auto_steady_state": { - "origin": "Accident Year", - "development": "Calendar Year", - "index": None, - "columns": ["Paid Claims", "Reported Claims"], + "index": ["Scenario"], + "columns": ["Paid Claims", "Reported Claims", "Earned Premium"], "cumulative": True, }, "friedland_us_industry_auto": { diff --git a/chainladder/utils/data/friedland_us_auto.csv b/chainladder/utils/data/friedland_us_auto.csv new file mode 100644 index 000000000..c225d75d4 --- /dev/null +++ b/chainladder/utils/data/friedland_us_auto.csv @@ -0,0 +1,111 @@ +Accident Year,Calendar Year,Paid Claims,Reported Claims,Earned Premium,Scenario +1999,1999,470000,1011000,2000000,Steady State +1999,2000,865000,1254000,2000000,Steady State +1999,2001,1124000,1377000,2000000,Steady State +1999,2002,1300000,1454000,2000000,Steady State +1999,2003,1400000,1477000,2000000,Steady State +1999,2004,1446000,1493000,2000000,Steady State +1999,2005,1469000,1500000,2000000,Steady State +1999,2006,1477000,1500000,2000000,Steady State +1999,2007,1492000,1500000,2000000,Steady State +1999,2008,1500000,1500000,2000000,Steady State +2000,2000,493500,1061550,2100000,Steady State +2000,2001,908250,1316700,2100000,Steady State +2000,2002,1180200,1445850,2100000,Steady State +2000,2003,1365000,1526700,2100000,Steady State +2000,2004,1470000,1550850,2100000,Steady State +2000,2005,1518300,1567650,2100000,Steady State +2000,2006,1542450,1575000,2100000,Steady State +2000,2007,1550850,1575000,2100000,Steady State +2000,2008,1566600,1575000,2100000,Steady State +2001,2001,518175,1114628,2205000,Steady State +2001,2002,953663,1382535,2205000,Steady State +2001,2003,1239210,1518143,2205000,Steady State +2001,2004,1433250,1603035,2205000,Steady State +2001,2005,1543500,1628393,2205000,Steady State +2001,2006,1594215,1646033,2205000,Steady State +2001,2007,1619573,1653750,2205000,Steady State +2001,2008,1628393,1653750,2205000,Steady State +2002,2002,544084,1170359,2315250,Steady State +2002,2003,1001346,1451662,2315250,Steady State +2002,2004,1301171,1594050,2315250,Steady State +2002,2005,1504913,1683187,2315250,Steady State +2002,2006,1620675,1709812,2315250,Steady State +2002,2007,1673926,1728334,2315250,Steady State +2002,2008,1700551,1736438,2315250,Steady State +2003,2003,571288,1228877,2431013,Steady State +2003,2004,1051413,1524245,2431013,Steady State +2003,2005,1366229,1673752,2431013,Steady State +2003,2006,1580158,1767346,2431013,Steady State +2003,2007,1701709,1795303,2431013,Steady State +2003,2008,1757622,1814751,2431013,Steady State +2004,2004,599852,1290321,2552563,Steady State +2004,2005,1103984,1600457,2552563,Steady State +2004,2006,1434540,1757440,2552563,Steady State +2004,2007,1659166,1855713,2552563,Steady State +2004,2008,1786794,1885068,2552563,Steady State +2005,2005,629845,1354837,2680191,Steady State +2005,2006,1159183,1680480,2680191,Steady State +2005,2007,1506268,1845312,2680191,Steady State +2005,2008,1742124,1948499,2680191,Steady State +2006,2006,661337,1422579,2814201,Steady State +2006,2007,1217142,1764504,2814201,Steady State +2006,2008,1581581,1937577,2814201,Steady State +2007,2007,694404,1493707,2954911,Steady State +2007,2008,1277999,1852729,2954911,Steady State +2008,2008,729124,1568393,3102656,Steady State +1999,1999,470000,1011000,2000000,Changing Product Mix +1999,2000,865000,1254000,2000000,Changing Product Mix +1999,2001,1124000,1377000,2000000,Changing Product Mix +1999,2002,1300000,1454000,2000000,Changing Product Mix +1999,2003,1400000,1477000,2000000,Changing Product Mix +1999,2004,1446000,1493000,2000000,Changing Product Mix +1999,2005,1469000,1500000,2000000,Changing Product Mix +1999,2006,1477000,1500000,2000000,Changing Product Mix +1999,2007,1492000,1500000,2000000,Changing Product Mix +1999,2008,1500000,1500000,2000000,Changing Product Mix +2000,2000,493500,1061550,2100000,Changing Product Mix +2000,2001,908250,1316700,2100000,Changing Product Mix +2000,2002,1180200,1445850,2100000,Changing Product Mix +2000,2003,1365000,1526700,2100000,Changing Product Mix +2000,2004,1470000,1550850,2100000,Changing Product Mix +2000,2005,1518300,1567650,2100000,Changing Product Mix +2000,2006,1542450,1575000,2100000,Changing Product Mix +2000,2007,1550850,1575000,2100000,Changing Product Mix +2000,2008,1566600,1575000,2100000,Changing Product Mix +2001,2001,518175,1114628,2205000,Changing Product Mix +2001,2002,953663,1382535,2205000,Changing Product Mix +2001,2003,1239210,1518143,2205000,Changing Product Mix +2001,2004,1433250,1603035,2205000,Changing Product Mix +2001,2005,1543500,1628393,2205000,Changing Product Mix +2001,2006,1594215,1646033,2205000,Changing Product Mix +2001,2007,1619573,1653750,2205000,Changing Product Mix +2001,2008,1628393,1653750,2205000,Changing Product Mix +2002,2002,544084,1170359,2315250,Changing Product Mix +2002,2003,1001346,1451662,2315250,Changing Product Mix +2002,2004,1301171,1594050,2315250,Changing Product Mix +2002,2005,1504913,1683187,2315250,Changing Product Mix +2002,2006,1620675,1709812,2315250,Changing Product Mix +2002,2007,1673926,1728334,2315250,Changing Product Mix +2002,2008,1700551,1736438,2315250,Changing Product Mix +2003,2003,571288,1228877,2431013,Changing Product Mix +2003,2004,1051413,1524245,2431013,Changing Product Mix +2003,2005,1366229,1673752,2431013,Changing Product Mix +2003,2006,1580158,1767346,2431013,Changing Product Mix +2003,2007,1701709,1795303,2431013,Changing Product Mix +2003,2008,1757622,1814751,2431013,Changing Product Mix +2004,2004,599852,1290321,2552563,Changing Product Mix +2004,2005,1103984,1600457,2552563,Changing Product Mix +2004,2006,1434540,1757440,2552563,Changing Product Mix +2004,2007,1659166,1855713,2552563,Changing Product Mix +2004,2008,1786794,1885068,2552563,Changing Product Mix +2005,2005,686001,1505438,2999262,Changing Product Mix +2005,2006,1276601,1879580,2999262,Changing Product Mix +2005,2007,1677289,2072490,2999262,Changing Product Mix +2005,2008,1951435,2193545,2999262,Changing Product Mix +2006,2006,793305,1776491,3564016,Changing Product Mix +2006,2007,1493074,2232389,3564016,Changing Product Mix +2006,2008,1983482,2471446,3564016,Changing Product Mix +2007,2007,927874,2119832,4281446,Changing Product Mix +2007,2008,1766164,2680487,4281446,Changing Product Mix +2008,2008,1097644,2556695,5196516,Changing Product Mix diff --git a/chainladder/utils/data/friedland_us_auto_chg_prod_mix.csv b/chainladder/utils/data/friedland_us_auto_chg_prod_mix.csv deleted file mode 100644 index 828a88e39..000000000 --- a/chainladder/utils/data/friedland_us_auto_chg_prod_mix.csv +++ /dev/null @@ -1,56 +0,0 @@ -Accident Year,Calendar Year,Paid Claims,Reported Claims -1999,1999,470000,1011000 -1999,2000,865000,1254000 -1999,2001,1124000,1377000 -1999,2002,1300000,1454000 -1999,2003,1400000,1477000 -1999,2004,1446000,1493000 -1999,2005,1469000,1500000 -1999,2006,1477000,1500000 -1999,2007,1492000,1500000 -1999,2008,1500000,1500000 -2000,2000,493500,1061550 -2000,2001,908250,1316700 -2000,2002,1180200,1445850 -2000,2003,1365000,1526700 -2000,2004,1470000,1550850 -2000,2005,1518300,1567650 -2000,2006,1542450,1575000 -2000,2007,1550850,1575000 -2000,2008,1566600,1575000 -2001,2001,518175,1114628 -2001,2002,953663,1382535 -2001,2003,1239210,1518143 -2001,2004,1433250,1603035 -2001,2005,1543500,1628393 -2001,2006,1594215,1646033 -2001,2007,1619573,1653750 -2001,2008,1628393,1653750 -2002,2002,544084,1170359 -2002,2003,1001346,1451662 -2002,2004,1301171,1594050 -2002,2005,1504913,1683187 -2002,2006,1620675,1709812 -2002,2007,1673926,1728334 -2002,2008,1700551,1736438 -2003,2003,571288,1228877 -2003,2004,1051413,1524245 -2003,2005,1366229,1673752 -2003,2006,1580158,1767346 -2003,2007,1701709,1795303 -2003,2008,1757622,1814751 -2004,2004,599852,1290321 -2004,2005,1103984,1600457 -2004,2006,1434540,1757440 -2004,2007,1659166,1855713 -2004,2008,1786794,1885068 -2005,2005,686001,1505438 -2005,2006,1276601,1879580 -2005,2007,1677289,2072490 -2005,2008,1951435,2193545 -2006,2006,793305,1776491 -2006,2007,1493074,2232389 -2006,2008,1983482,2471446 -2007,2007,927874,2119832 -2007,2008,1766164,2680487 -2008,2008,1097644,2556695 diff --git a/chainladder/utils/data/friedland_us_auto_incr_claim.csv b/chainladder/utils/data/friedland_us_auto_incr_claim.csv deleted file mode 100644 index ae39709cb..000000000 --- a/chainladder/utils/data/friedland_us_auto_incr_claim.csv +++ /dev/null @@ -1,56 +0,0 @@ -Accident Year,Calendar Year,Paid Claims,Reported Claims -1999,1999,294000,539000 -1999,2000,497000,630000 -1999,2001,588000,665000 -1999,2002,644000,686000 -1999,2003,672000,693000 -1999,2004,686000,693000 -1999,2005,693000,700000 -1999,2006,693000,700000 -1999,2007,700000,700000 -1999,2008,700000,700000 -2000,2000,308700,565950 -2000,2001,521850,611500 -2000,2002,617400,698250 -2000,2003,676200,720300 -2000,2004,705600,727650 -2000,2005,720300,727650 -2000,2006,727650,735000 -2000,2007,727650,735000 -2000,2008,735000,735000 -2001,2001,324135,594248 -2001,2002,547943,694575 -2001,2003,648270,733163 -2001,2004,710010,756315 -2001,2005,740880,764033 -2001,2006,756315,764033 -2001,2007,764033,771750 -2001,2008,764033,771750 -2002,2002,340342,623960 -2002,2003,575340,729304 -2002,2004,680684,769821 -2002,2005,745511,794131 -2002,2006,777924,802234 -2002,2007,794131,802234 -2002,2008,802234,810338 -2003,2003,357359,655158 -2003,2004,604107,765769 -2003,2005,714718,808312 -2003,2006,782786,833837 -2003,2007,816820,842346 -2003,2008,833837,842346 -2004,2004,428831,786189 -2004,2005,724928,918923 -2004,2006,857661,969974 -2004,2007,939343,1000605 -2004,2008,980184,1010815 -2005,2005,478414,877093 -2005,2006,808748,1025173 -2005,2007,956828,1082127 -2005,2008,1047955,1116300 -2006,2006,531884,975121 -2006,2007,899137,1139751 -2006,2008,1063768,1203071 -2007,2007,589505,1080759 -2007,2008,996544,1263224 -2008,2008,651558,1194523 diff --git a/chainladder/utils/data/friedland_us_auto_steady_state.csv b/chainladder/utils/data/friedland_us_auto_steady_state.csv deleted file mode 100644 index f66c84c1c..000000000 --- a/chainladder/utils/data/friedland_us_auto_steady_state.csv +++ /dev/null @@ -1,56 +0,0 @@ -Accident Year,Calendar Year,Paid Claims,Reported Claims -1999,1999,470000,1011000 -1999,2000,865000,1254000 -1999,2001,1124000,1377000 -1999,2002,1300000,1454000 -1999,2003,1400000,1477000 -1999,2004,1446000,1493000 -1999,2005,1469000,1500000 -1999,2006,1477000,1500000 -1999,2007,1492000,1500000 -1999,2008,1500000,1500000 -2000,2000,493500,1061550 -2000,2001,908250,1316700 -2000,2002,1180200,1445850 -2000,2003,1365000,1526700 -2000,2004,1470000,1550850 -2000,2005,1518300,1567650 -2000,2006,1542450,1575000 -2000,2007,1550850,1575000 -2000,2008,1566600,1575000 -2001,2001,518175,1114628 -2001,2002,953663,1382535 -2001,2003,1239210,1518143 -2001,2004,1433250,1603035 -2001,2005,1543500,1628393 -2001,2006,1594215,1646033 -2001,2007,1619573,1653750 -2001,2008,1628393,1653750 -2002,2002,544084,1170359 -2002,2003,1001346,1451662 -2002,2004,1301171,1594050 -2002,2005,1504913,1683187 -2002,2006,1620675,1709812 -2002,2007,1673926,1728334 -2002,2008,1700551,1736438 -2003,2003,571288,1228877 -2003,2004,1051413,1524245 -2003,2005,1366229,1673752 -2003,2006,1580158,1767346 -2003,2007,1701709,1795303 -2003,2008,1757622,1814751 -2004,2004,599852,1290321 -2004,2005,1103984,1600457 -2004,2006,1434540,1757440 -2004,2007,1659166,1855713 -2004,2008,1786794,1885068 -2005,2005,629845,1354837 -2005,2006,1159183,1680480 -2005,2007,1506268,1845312 -2005,2008,1742124,1948499 -2006,2006,661337,1422579 -2006,2007,1217142,1764504 -2006,2008,1581581,1937577 -2007,2007,694404,1493707 -2008,2008,1277999,1852729 -2008,2008,729124,1568393 diff --git a/docs/_toc.yml b/docs/_toc.yml index b7e069eb6..3cf0a5b9a 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -36,6 +36,7 @@ parts: - file: friedland/chapter_6.rst - file: friedland/chapter_7.rst - file: friedland/chapter_9.ipynb + - file: friedland/chapter_10.ipynb - chapters: - file: gallery/index.md - chapters: diff --git a/docs/friedland/chapter_10.ipynb b/docs/friedland/chapter_10.ipynb new file mode 100644 index 000000000..33f849973 --- /dev/null +++ b/docs/friedland/chapter_10.ipynb @@ -0,0 +1,5635 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d54320ed", + "metadata": {}, + "source": [ + "# Chapter 10 - Cape Cod Technique\n", + "\n", + "> The key innovation of the Stanard-Buhlmann (Cape Cod) method is that the\n", + "> ultimate expected loss ratio for all years combined is estimated from the\n", + "> overall reported claims experience, instead of being selected judgmentally, as\n", + "> in the Bornhuetter-Ferguson method.\n", + ">\n", + "> -- Friedland, Chapter 10\n", + "\n", + "The Cape Cod (Stanard-Buhlmann) method is a close cousin of the\n", + "Bornhuetter-Ferguson technique. It splits ultimate claims into the claims already\n", + "reported (or paid) plus the *expected* unreported (or unpaid) claims:\n", + "\n", + "$$\\text{Ultimate} = \\text{Actual} + \\text{Expected Claims} \\times \\left(1 - \\frac{1}{\\text{CDF}}\\right)$$\n", + "\n", + "The only difference from Bornhuetter-Ferguson is the source of the expected\n", + "claims. Rather than selecting an a priori claim ratio judgmentally, Cape Cod\n", + "*derives* it from the reported experience. The all-years-combined expected claim\n", + "ratio is the reported claims divided by the **used-up premium** - the earned\n", + "premium scaled by the percentage of claims expected to be reported to date:\n", + "\n", + "$$\\text{Expected Claim Ratio} = \\frac{\\sum \\text{Reported Claims}}{\\sum \\text{Earned Premium} \\times \\left(\\tfrac{1}{\\text{CDF}}\\right)}$$\n", + "\n", + "In the chainladder package the method is implemented by `CapeCod`, which takes\n", + "the exposure (earned premium) through `sample_weight` and returns the derived\n", + "claim ratio in `apriori_`. This chapter recreates the Friedland Chapter 10\n", + "exhibits, reusing the development patterns selected in Chapter 7:\n", + "\n", + "- **Exhibit I** - U.S. Industry Auto\n", + "- **Exhibit II** - XYZ Insurer (Auto BI), with on-level premium and adjusted claims\n", + "- **Exhibit III** - U.S. PP Auto (impact of changing conditions)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "00f94f0d", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import chainladder as cl\n", + "import os\n", + "from IPython.display import display\n", + "\n", + "pd.set_option(\"display.max_columns\", None)\n", + "pd.set_option(\"display.width\", 1000)\n", + "\n", + "# Pull the single-column latest diagonal (or any 1x1xNx1 triangle) as a vector.\n", + "col = lambda t: t.to_frame(origin_as_datetime=False).iloc[:, 0].values" + ] + }, + { + "cell_type": "markdown", + "id": "35687145", + "metadata": {}, + "source": [ + "## Exhibit I - U.S. Industry Auto\n", + "\n", + "The text works the Cape Cod method first for **U.S. Industry Auto** (Exhibit I),\n", + "valued at 12/31/2007 over accident years 1998-2007. The reporting pattern is the\n", + "Chapter 7 selection (three-year simple average with a 1.000 reported tail)." + ] + }, + { + "cell_type": "markdown", + "id": "6602d8d3", + "metadata": {}, + "source": [ + "### Development of expected claim ratio\n", + "\n", + "This recreates *Exhibit I, Sheet 1*. The **used-up premium** is the earned\n", + "premium multiplied by the percentage reported (the inverse of the cumulative\n", + "development factor). Dividing reported claims by used-up premium gives each\n", + "year's estimated claim ratio; the all-years-combined ratio is the `CapeCod`\n", + "apriori that drives the projection." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b4e993a5", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Age", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Used-Up Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Estimated Claim Ratio", + "rawType": "float64", + "type": "float" + } + ], + "ref": "4ac13023-73ec-4f62-a5ad-0fe3cc8121ca", + "rows": [ + [ + "1998", + "68574209.0", + "120", + "47742304.0", + "1.0", + "1.0", + "68574209.0", + "0.696" + ], + [ + "1999", + "68544981.0", + "108", + "51185767.0", + "1.0", + "1.0", + "68544981.0", + "0.747" + ], + [ + "2000", + "68907977.0", + "96", + "54837929.0", + "1.001", + "0.999", + "68839138.0", + "0.797" + ], + [ + "2001", + "72544955.0", + "84", + "56299562.0", + "1.003", + "0.997", + "72327827.0", + "0.778" + ], + [ + "2002", + "79228887.0", + "72", + "58592712.0", + "1.006", + "0.994", + "78755487.0", + "0.744" + ], + [ + "2003", + "86643542.0", + "60", + "57565344.0", + "1.011", + "0.989", + "85697352.0", + "0.672" + ], + [ + "2004", + "91763523.0", + "48", + "56976657.0", + "1.023", + "0.977", + "89685198.0", + "0.635" + ], + [ + "2005", + "94115312.0", + "36", + "56786410.0", + "1.051", + "0.952", + "89565455.0", + "0.634" + ], + [ + "2006", + "95272279.0", + "24", + "54641339.0", + "1.11", + "0.901", + "85858419.0", + "0.636" + ], + [ + "2007", + "95176240.0", + "12", + "48853563.0", + "1.292", + "0.774", + "73687173.0", + "0.663" + ] + ], + "shape": { + "columns": 7, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumAgeReported ClaimsCDF to Ultimate% ReportedUsed-Up PremiumEstimated Claim Ratio
199868574209.012047742304.01.0001.00068574209.00.696
199968544981.010851185767.01.0001.00068544981.00.747
200068907977.09654837929.01.0010.99968839138.00.797
200172544955.08456299562.01.0030.99772327827.00.778
200279228887.07258592712.01.0060.99478755487.00.744
200386643542.06057565344.01.0110.98985697352.00.672
200491763523.04856976657.01.0230.97789685198.00.635
200594115312.03656786410.01.0510.95289565455.00.634
200695272279.02454641339.01.1100.90185858419.00.636
200795176240.01248853563.01.2920.77473687173.00.663
\n", + "
" + ], + "text/plain": [ + " Earned Premium Age Reported Claims CDF to Ultimate % Reported Used-Up Premium Estimated Claim Ratio\n", + "1998 68574209.0 120 47742304.0 1.000 1.000 68574209.0 0.696\n", + "1999 68544981.0 108 51185767.0 1.000 1.000 68544981.0 0.747\n", + "2000 68907977.0 96 54837929.0 1.001 0.999 68839138.0 0.797\n", + "2001 72544955.0 84 56299562.0 1.003 0.997 72327827.0 0.778\n", + "2002 79228887.0 72 58592712.0 1.006 0.994 78755487.0 0.744\n", + "2003 86643542.0 60 57565344.0 1.011 0.989 85697352.0 0.672\n", + "2004 91763523.0 48 56976657.0 1.023 0.977 89685198.0 0.635\n", + "2005 94115312.0 36 56786410.0 1.051 0.952 89565455.0 0.634\n", + "2006 95272279.0 24 54641339.0 1.110 0.901 85858419.0 0.636\n", + "2007 95176240.0 12 48853563.0 1.292 0.774 73687173.0 0.663" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All-years estimated claim ratio (apriori): 0.695\n" + ] + } + ], + "source": [ + "ia = cl.load_sample(\"friedland_us_industry_auto\")\n", + "ia_reported = ia[\"Reported Claims\"]\n", + "ia_paid = ia[\"Paid Claims\"]\n", + "ia_premium = ia[\"Earned Premium\"].latest_diagonal\n", + "ia_years = list(ia_reported.origin.year)\n", + "\n", + "# Chapter 7 selection: three-year simple average reported development, 1.000 tail.\n", + "# Friedland cumulates the age-to-age factors rounded to three decimals.\n", + "ia_reported_dev = cl.TailConstant(tail=1.000, projection_period=0).fit_transform(\n", + " cl.Development(n_periods=3, average=\"simple\").fit_transform(ia_reported))\n", + "ia_reported_dev.ldf_ = ia_reported_dev.ldf_.round(3)\n", + "\n", + "# CapeCod derives the expected claim ratio (apriori) from the reported claims and\n", + "# the earned-premium exposure. With the default decay=1 and trend=0, every origin\n", + "# receives the same used-up-premium-weighted claim ratio.\n", + "ia_cc = cl.CapeCod().fit(ia_reported_dev, sample_weight=ia_premium)\n", + "ia_apriori = float(ia_cc.apriori_.to_frame().iloc[0, 0])\n", + "\n", + "# model_diagnostics packages Latest, CDF, Ultimate, and IBNR by accident year.\n", + "ia_diag = cl.model_diagnostics(ia_cc)\n", + "ia_cdf = col(ia_diag[\"CDF\"])\n", + "ia_pct_reported = 1 / ia_cdf\n", + "ia_reported_latest = col(ia_diag[\"Latest\"])\n", + "ia_used_up = col(ia_premium) * ia_pct_reported\n", + "\n", + "sheet1 = pd.DataFrame(index=ia_years)\n", + "sheet1[\"Earned Premium\"] = col(ia_premium)\n", + "sheet1[\"Age\"] = [(2007 - y) * 12 + 12 for y in ia_years]\n", + "sheet1[\"Reported Claims\"] = ia_reported_latest\n", + "sheet1[\"CDF to Ultimate\"] = ia_cdf.round(3)\n", + "sheet1[\"% Reported\"] = ia_pct_reported.round(3)\n", + "sheet1[\"Used-Up Premium\"] = ia_used_up.round(0)\n", + "sheet1[\"Estimated Claim Ratio\"] = (ia_reported_latest / ia_used_up).round(3)\n", + "display(sheet1)\n", + "print(f\"All-years estimated claim ratio (apriori): {ia_apriori:.3f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "7d58d37c", + "metadata": {}, + "source": [ + "### Projection of ultimate claims\n", + "\n", + "This recreates *Exhibit I, Sheet 2*. Expected claims are the earned premium times\n", + "the derived claim ratio. The expected unreported claims (`CapeCod.ibnr_`) are the\n", + "expected claims scaled by the percentage still to emerge, and the projected\n", + "ultimate is reported claims plus expected unreported." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f8e7b835", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claim Ratio", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Unreported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Unreported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + } + ], + "ref": "0ac2458f-16fa-4f59-94e1-26f4695200e0", + "rows": [ + [ + "1998", + "68574209.0", + "0.695", + "47686679.0", + "1.0", + "0.0", + "0.0", + "47742304.0", + "47742304.0" + ], + [ + "1999", + "68544981.0", + "0.695", + "47666354.0", + "1.0", + "0.0", + "0.0", + "51185767.0", + "51185767.0" + ], + [ + "2000", + "68907977.0", + "0.695", + "47918782.0", + "1.001", + "0.001", + "47871.0", + "54837929.0", + "54885800.0" + ], + [ + "2001", + "72544955.0", + "0.695", + "50447946.0", + "1.003", + "0.003", + "150991.0", + "56299562.0", + "56450553.0" + ], + [ + "2002", + "79228887.0", + "0.695", + "55095969.0", + "1.006", + "0.006", + "329203.0", + "58592712.0", + "58921915.0" + ], + [ + "2003", + "86643542.0", + "0.695", + "60252139.0", + "1.011", + "0.011", + "657983.0", + "57565344.0", + "58223327.0" + ], + [ + "2004", + "91763523.0", + "0.695", + "63812587.0", + "1.023", + "0.023", + "1445272.0", + "56976657.0", + "58421929.0" + ], + [ + "2005", + "94115312.0", + "0.695", + "65448027.0", + "1.051", + "0.048", + "3163982.0", + "56786410.0", + "59950392.0" + ], + [ + "2006", + "95272279.0", + "0.695", + "66252584.0", + "1.11", + "0.099", + "6546422.0", + "54641339.0", + "61187761.0" + ], + [ + "2007", + "95176240.0", + "0.695", + "66185799.0", + "1.292", + "0.226", + "14943552.0", + "48853563.0", + "63797115.0" + ] + ], + "shape": { + "columns": 8, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumExpected Claim RatioExpected ClaimsCDF to Ultimate% UnreportedExpected UnreportedReported ClaimsProjected Ultimate
199868574209.00.69547686679.01.0000.0000.047742304.047742304.0
199968544981.00.69547666354.01.0000.0000.051185767.051185767.0
200068907977.00.69547918782.01.0010.00147871.054837929.054885800.0
200172544955.00.69550447946.01.0030.003150991.056299562.056450553.0
200279228887.00.69555095969.01.0060.006329203.058592712.058921915.0
200386643542.00.69560252139.01.0110.011657983.057565344.058223327.0
200491763523.00.69563812587.01.0230.0231445272.056976657.058421929.0
200594115312.00.69565448027.01.0510.0483163982.056786410.059950392.0
200695272279.00.69566252584.01.1100.0996546422.054641339.061187761.0
200795176240.00.69566185799.01.2920.22614943552.048853563.063797115.0
\n", + "
" + ], + "text/plain": [ + " Earned Premium Expected Claim Ratio Expected Claims CDF to Ultimate % Unreported Expected Unreported Reported Claims Projected Ultimate\n", + "1998 68574209.0 0.695 47686679.0 1.000 0.000 0.0 47742304.0 47742304.0\n", + "1999 68544981.0 0.695 47666354.0 1.000 0.000 0.0 51185767.0 51185767.0\n", + "2000 68907977.0 0.695 47918782.0 1.001 0.001 47871.0 54837929.0 54885800.0\n", + "2001 72544955.0 0.695 50447946.0 1.003 0.003 150991.0 56299562.0 56450553.0\n", + "2002 79228887.0 0.695 55095969.0 1.006 0.006 329203.0 58592712.0 58921915.0\n", + "2003 86643542.0 0.695 60252139.0 1.011 0.011 657983.0 57565344.0 58223327.0\n", + "2004 91763523.0 0.695 63812587.0 1.023 0.023 1445272.0 56976657.0 58421929.0\n", + "2005 94115312.0 0.695 65448027.0 1.051 0.048 3163982.0 56786410.0 59950392.0\n", + "2006 95272279.0 0.695 66252584.0 1.110 0.099 6546422.0 54641339.0 61187761.0\n", + "2007 95176240.0 0.695 66185799.0 1.292 0.226 14943552.0 48853563.0 63797115.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ia_expected_claims = col(ia_premium) * ia_apriori\n", + "ia_pct_unreported = 1 - ia_pct_reported\n", + "# CapeCod returns NaN IBNR for fully developed years (CDF = 1.000); the text\n", + "# shows these as zero, so coerce NaN to 0.\n", + "ia_ibnr = np.nan_to_num(col(ia_diag[\"IBNR\"]))\n", + "ia_expected_unreported = ia_ibnr\n", + "ia_ult = col(ia_diag[\"Ultimate\"])\n", + "\n", + "sheet2 = pd.DataFrame(index=ia_years)\n", + "sheet2[\"Earned Premium\"] = col(ia_premium)\n", + "sheet2[\"Expected Claim Ratio\"] = round(ia_apriori, 3)\n", + "sheet2[\"Expected Claims\"] = ia_expected_claims.round(0)\n", + "sheet2[\"CDF to Ultimate\"] = ia_cdf.round(3)\n", + "sheet2[\"% Unreported\"] = ia_pct_unreported.round(3)\n", + "sheet2[\"Expected Unreported\"] = ia_expected_unreported.round(0)\n", + "sheet2[\"Reported Claims\"] = ia_reported_latest\n", + "sheet2[\"Projected Ultimate\"] = ia_ult.round(0)\n", + "display(sheet2)" + ] + }, + { + "cell_type": "markdown", + "id": "b04d1b03", + "metadata": {}, + "source": [ + "### Development of unpaid claim estimate\n", + "\n", + "This recreates *Exhibit I, Sheet 3*. Case outstanding is reported minus paid,\n", + "estimated IBNR is ultimate minus reported, and the total unpaid estimate is\n", + "ultimate minus paid." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9225675c", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Paid Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "Case Outstanding", + "rawType": "float64", + "type": "float" + }, + { + "name": "IBNR", + "rawType": "float64", + "type": "float" + }, + { + "name": "Total Unpaid", + "rawType": "float64", + "type": "float" + } + ], + "ref": "e7c7c0b5-2aa2-49e0-9a53-008e24a513e4", + "rows": [ + [ + "1998", + "47742304.0", + "47644187.0", + "47742304.0", + "98117.0", + "0.0", + "98117.0" + ], + [ + "1999", + "51185767.0", + "51000534.0", + "51185767.0", + "185233.0", + "0.0", + "185233.0" + ], + [ + "2000", + "54837929.0", + "54533225.0", + "54885800.0", + "304704.0", + "47871.0", + "352575.0" + ], + [ + "2001", + "56299562.0", + "55878421.0", + "56450553.0", + "421141.0", + "150991.0", + "572132.0" + ], + [ + "2002", + "58592712.0", + "57807215.0", + "58921915.0", + "785497.0", + "329203.0", + "1114700.0" + ], + [ + "2003", + "57565344.0", + "55930654.0", + "58223327.0", + "1634690.0", + "657983.0", + "2292673.0" + ], + [ + "2004", + "56976657.0", + "53774672.0", + "58421929.0", + "3201985.0", + "1445272.0", + "4647257.0" + ], + [ + "2005", + "56786410.0", + "50644994.0", + "59950392.0", + "6141416.0", + "3163982.0", + "9305398.0" + ], + [ + "2006", + "54641339.0", + "43606497.0", + "61187761.0", + "11034842.0", + "6546422.0", + "17581264.0" + ], + [ + "2007", + "48853563.0", + "27229969.0", + "63797115.0", + "21623594.0", + "14943552.0", + "36567146.0" + ] + ], + "shape": { + "columns": 6, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Reported ClaimsPaid ClaimsProjected UltimateCase OutstandingIBNRTotal Unpaid
199847742304.047644187.047742304.098117.00.098117.0
199951185767.051000534.051185767.0185233.00.0185233.0
200054837929.054533225.054885800.0304704.047871.0352575.0
200156299562.055878421.056450553.0421141.0150991.0572132.0
200258592712.057807215.058921915.0785497.0329203.01114700.0
200357565344.055930654.058223327.01634690.0657983.02292673.0
200456976657.053774672.058421929.03201985.01445272.04647257.0
200556786410.050644994.059950392.06141416.03163982.09305398.0
200654641339.043606497.061187761.011034842.06546422.017581264.0
200748853563.027229969.063797115.021623594.014943552.036567146.0
\n", + "
" + ], + "text/plain": [ + " Reported Claims Paid Claims Projected Ultimate Case Outstanding IBNR Total Unpaid\n", + "1998 47742304.0 47644187.0 47742304.0 98117.0 0.0 98117.0\n", + "1999 51185767.0 51000534.0 51185767.0 185233.0 0.0 185233.0\n", + "2000 54837929.0 54533225.0 54885800.0 304704.0 47871.0 352575.0\n", + "2001 56299562.0 55878421.0 56450553.0 421141.0 150991.0 572132.0\n", + "2002 58592712.0 57807215.0 58921915.0 785497.0 329203.0 1114700.0\n", + "2003 57565344.0 55930654.0 58223327.0 1634690.0 657983.0 2292673.0\n", + "2004 56976657.0 53774672.0 58421929.0 3201985.0 1445272.0 4647257.0\n", + "2005 56786410.0 50644994.0 59950392.0 6141416.0 3163982.0 9305398.0\n", + "2006 54641339.0 43606497.0 61187761.0 11034842.0 6546422.0 17581264.0\n", + "2007 48853563.0 27229969.0 63797115.0 21623594.0 14943552.0 36567146.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ia_paid_latest = col(ia_paid.latest_diagonal)\n", + "sheet3 = pd.DataFrame(index=ia_years)\n", + "sheet3[\"Reported Claims\"] = ia_reported_latest\n", + "sheet3[\"Paid Claims\"] = ia_paid_latest\n", + "sheet3[\"Projected Ultimate\"] = ia_ult.round(0)\n", + "sheet3[\"Case Outstanding\"] = (ia_reported_latest - ia_paid_latest).round(0)\n", + "sheet3[\"IBNR\"] = ia_ibnr.round(0)\n", + "sheet3[\"Total Unpaid\"] = (ia_ult - ia_paid_latest).round(0)\n", + "display(sheet3)" + ] + }, + { + "cell_type": "markdown", + "id": "4a5f9dac", + "metadata": {}, + "source": [ + "### Reconciliation to Friedland\n", + "\n", + "The derived claim ratio, the projected ultimate claims, and the estimated IBNR\n", + "are reconciled to the printed Exhibit I below. Because the text derives used-up\n", + "premium from CDFs rounded to three decimals, the totals reconcile within a small\n", + "relative tolerance." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c535ea88", + "metadata": {}, + "outputs": [], + "source": [ + "# Exhibit I, Sheet 1 - all-years estimated claim ratio\n", + "assert np.isclose(ia_apriori, 0.695, atol=1e-3)\n", + "# Exhibit I, Sheet 1 - selected CDFs to ultimate\n", + "assert np.allclose(ia_cdf.round(3),\n", + " [1.000, 1.000, 1.001, 1.003, 1.006, 1.011, 1.023, 1.051, 1.110, 1.292], atol=1e-3)\n", + "# Exhibit I, Sheet 2 - projected ultimate claims\n", + "assert np.isclose(ia_ult.sum(), 570800677, rtol=5e-3)\n", + "# Exhibit I, Sheet 3 - estimated IBNR\n", + "assert np.isclose(ia_ibnr.sum(), 27319090, rtol=5e-3)" + ] + }, + { + "cell_type": "markdown", + "id": "8c992d89", + "metadata": {}, + "source": [ + "## Exhibit II - XYZ Insurer (Auto BI)\n", + "\n", + "Exhibit II applies the Cape Cod method to the **XYZ Insurer - Auto BI** data,\n", + "valued at 12/31/2008 over accident years 1998-2008. Unlike U.S. Industry Auto,\n", + "the text has detailed rate-change and legal-reform information, so it adjusts\n", + "both premium and claims before deriving the claim ratio:\n", + "\n", + "- **On-level premium**: earned premium restated to the 2008 rate level.\n", + "- **Adjusted claims**: reported claims trended for pure-premium inflation and\n", + " adjusted for tort reform.\n", + "\n", + "The all-years adjusted claim ratio is then *detrended* back to each accident\n", + "year's rate, inflation, and tort environment to give the expected claim ratios\n", + "used in the projection." + ] + }, + { + "cell_type": "markdown", + "id": "01304b5d", + "metadata": {}, + "source": [ + "### Development of expected claim ratio\n", + "\n", + "This recreates *Exhibit II, Sheet 1*. The on-level and tort-reform factors are\n", + "produced by `ParallelogramOLF` from the text's rate-change and reform histories.\n", + "The all-years apriori is then derived through a `Pipeline` that applies the\n", + "tort-reform on-level factors, develops the reported claims on the floored\n", + "Chapter 7 pattern (`DevelopmentConstant`), and fits `CapeCod` with the\n", + "pure-premium trend, using on-level premium as the exposure. The resulting 70.8%\n", + "adjusted claim ratio is detrended back per year in Column (15)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fb858604", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "On-Level Factor", + "rawType": "float64", + "type": "float" + }, + { + "name": "On-Level Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Trend", + "rawType": "float64", + "type": "float" + }, + { + "name": "Tort Reform", + "rawType": "float64", + "type": "float" + }, + { + "name": "Adjusted Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Used-Up On-Level Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Estimated Adjusted Claim Ratio", + "rawType": "float64", + "type": "float" + } + ], + "ref": "fab06e41-5aa1-4da4-ac4e-c8a1928382a4", + "rows": [ + [ + "1998", + "20000.0", + "0.989", + "19780.0", + "15822.0", + "1.4", + "0.67", + "14841.0", + "1.0", + "1.0", + "19780.0", + "0.75" + ], + [ + "1999", + "31500.0", + "0.97", + "30555.0", + "25107.0", + "1.354", + "0.67", + "22777.0", + "1.0", + "1.0", + "30555.0", + "0.745" + ], + [ + "2000", + "45000.0", + "0.951", + "42795.0", + "37246.0", + "1.309", + "0.67", + "32666.0", + "1.0", + "1.0", + "42795.0", + "0.763" + ], + [ + "2001", + "50000.0", + "0.932", + "46600.0", + "38798.0", + "1.266", + "0.67", + "32909.0", + "1.0", + "1.0", + "46600.0", + "0.706" + ], + [ + "2002", + "61183.0", + "0.914", + "55921.0", + "48169.0", + "1.224", + "0.67", + "39502.0", + "1.003", + "0.997", + "55754.0", + "0.709" + ], + [ + "2003", + "69175.0", + "0.87", + "60182.0", + "44373.0", + "1.183", + "0.67", + "35170.0", + "1.013", + "0.987", + "59410.0", + "0.592" + ], + [ + "2004", + "99322.0", + "0.81", + "80451.0", + "70288.0", + "1.144", + "0.67", + "53874.0", + "1.064", + "0.94", + "75612.0", + "0.713" + ], + [ + "2005", + "138151.0", + "0.704", + "97258.0", + "70655.0", + "1.106", + "0.67", + "52357.0", + "1.085", + "0.922", + "89639.0", + "0.584" + ], + [ + "2006", + "107578.0", + "0.64", + "68850.0", + "48804.0", + "1.07", + "0.75", + "39165.0", + "1.196", + "0.836", + "57567.0", + "0.68" + ], + [ + "2007", + "62438.0", + "0.8", + "49950.0", + "31732.0", + "1.034", + "1.0", + "32811.0", + "1.512", + "0.661", + "33036.0", + "0.993" + ], + [ + "2008", + "47797.0", + "1.0", + "47797.0", + "18632.0", + "1.0", + "1.0", + "18632.0", + "2.551", + "0.392", + "18737.0", + "0.994" + ] + ], + "shape": { + "columns": 11, + "rows": 11 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumOn-Level FactorOn-Level PremiumReported ClaimsTrendTort ReformAdjusted ClaimsCDF to Ultimate% ReportedUsed-Up On-Level PremiumEstimated Adjusted Claim Ratio
199820000.00.98919780.015822.01.4000.6714841.01.0001.00019780.00.750
199931500.00.97030555.025107.01.3540.6722777.01.0001.00030555.00.745
200045000.00.95142795.037246.01.3090.6732666.01.0001.00042795.00.763
200150000.00.93246600.038798.01.2660.6732909.01.0001.00046600.00.706
200261183.00.91455921.048169.01.2240.6739502.01.0030.99755754.00.709
200369175.00.87060182.044373.01.1830.6735170.01.0130.98759410.00.592
200499322.00.81080451.070288.01.1440.6753874.01.0640.94075612.00.713
2005138151.00.70497258.070655.01.1060.6752357.01.0850.92289639.00.584
2006107578.00.64068850.048804.01.0700.7539165.01.1960.83657567.00.680
200762438.00.80049950.031732.01.0341.0032811.01.5120.66133036.00.993
200847797.01.00047797.018632.01.0001.0018632.02.5510.39218737.00.994
\n", + "
" + ], + "text/plain": [ + " Earned Premium On-Level Factor On-Level Premium Reported Claims Trend Tort Reform Adjusted Claims CDF to Ultimate % Reported Used-Up On-Level Premium Estimated Adjusted Claim Ratio\n", + "1998 20000.0 0.989 19780.0 15822.0 1.400 0.67 14841.0 1.000 1.000 19780.0 0.750\n", + "1999 31500.0 0.970 30555.0 25107.0 1.354 0.67 22777.0 1.000 1.000 30555.0 0.745\n", + "2000 45000.0 0.951 42795.0 37246.0 1.309 0.67 32666.0 1.000 1.000 42795.0 0.763\n", + "2001 50000.0 0.932 46600.0 38798.0 1.266 0.67 32909.0 1.000 1.000 46600.0 0.706\n", + "2002 61183.0 0.914 55921.0 48169.0 1.224 0.67 39502.0 1.003 0.997 55754.0 0.709\n", + "2003 69175.0 0.870 60182.0 44373.0 1.183 0.67 35170.0 1.013 0.987 59410.0 0.592\n", + "2004 99322.0 0.810 80451.0 70288.0 1.144 0.67 53874.0 1.064 0.940 75612.0 0.713\n", + "2005 138151.0 0.704 97258.0 70655.0 1.106 0.67 52357.0 1.085 0.922 89639.0 0.584\n", + "2006 107578.0 0.640 68850.0 48804.0 1.070 0.75 39165.0 1.196 0.836 57567.0 0.680\n", + "2007 62438.0 0.800 49950.0 31732.0 1.034 1.00 32811.0 1.512 0.661 33036.0 0.993\n", + "2008 47797.0 1.000 47797.0 18632.0 1.000 1.00 18632.0 2.551 0.392 18737.0 0.994" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All-years adjusted claim ratio (apriori): 0.707\n" + ] + } + ], + "source": [ + "xyz = cl.load_sample(\"friedland_xyz_auto_bi\")\n", + "xyz_reported = xyz[\"Reported Claims\"]\n", + "xyz_paid = xyz[\"Paid Claims\"]\n", + "xyz_premium = xyz[\"Earned Premium\"].latest_diagonal\n", + "xyz_years = list(xyz_reported.origin.year)\n", + "\n", + "# Reuse the Chapter 7 XYZ reported development, persisted there with to_json.\n", + "_data_dir = os.path.join(os.path.dirname(cl.__file__), \"utils\", \"data\")\n", + "with open(os.path.join(_data_dir, \"friedland_ch7_xyz_reported.json\")) as f:\n", + " xyz_reported_dev = cl.read_json(f.read())\n", + "xyz_reported_dev.ldf_ = xyz_reported_dev.ldf_.round(3)\n", + "\n", + "# Adjustment methods (Exhibit II, Sheet 1). The text restates premium to the 2008\n", + "# rate level and adjusts reported claims for pure-premium trend and tort reform.\n", + "# The rate-change and tort-reform histories are from the text; the parallelogram\n", + "# method (vertical_line=True) reproduces its on-level and tort factors, and the\n", + "# 3.42% pure-premium trend is applied through CapeCod's trend parameter.\n", + "rate_history = pd.DataFrame({\n", + " \"date\": [\"1/1/1999\", \"1/1/2000\", \"1/1/2001\", \"1/1/2002\", \"1/1/2003\",\n", + " \"1/1/2004\", \"1/1/2005\", \"1/1/2006\", \"1/1/2007\", \"1/1/2008\"],\n", + " \"rate_change\": [0.02, 0.02, 0.02, 0.02, 0.05, 0.075, 0.15, 0.10, -0.20, -0.20],\n", + "})\n", + "tort_history = pd.DataFrame({\n", + " \"date\": [\"1/1/2006\", \"1/1/2007\"],\n", + " \"rate_change\": [-0.1067, -0.25],\n", + "})\n", + "pp_trend_rate = 0.0342\n", + "\n", + "onlevel = cl.ParallelogramOLF(\n", + " rate_history, change_col=\"rate_change\", date_col=\"date\", vertical_line=True)\n", + "tort = cl.ParallelogramOLF(\n", + " tort_history, change_col=\"rate_change\", date_col=\"date\", vertical_line=True)\n", + "onlevel_adj = col(onlevel.fit(xyz_premium).olf_)\n", + "tort_reform = col(tort.fit(xyz_reported.latest_diagonal).olf_)\n", + "pp_trend = (1 + pp_trend_rate) ** (max(xyz_years) - np.array(xyz_years))\n", + "\n", + "# Reported cumulative development factors are floored at 1.0 (caps %reported at 100%).\n", + "xyz_cdf = np.maximum(\n", + " xyz_reported_dev.cdf_.to_frame(origin_as_datetime=False).values.flatten()[::-1], 1.0).round(3)\n", + "xyz_pct_reported = 1 / xyz_cdf\n", + "xyz_reported_latest = col(xyz_reported.latest_diagonal)\n", + "xyz_prem = col(xyz_premium)\n", + "\n", + "on_level_premium = xyz_prem * onlevel_adj\n", + "adjusted_claims = xyz_reported_latest * pp_trend * tort_reform\n", + "used_up_on_level = on_level_premium * xyz_pct_reported\n", + "\n", + "# Chain the adjustments into a pipeline to derive the all-years apriori: the\n", + "# tort-reform OLF and the floored Chapter 7 pattern develop the reported claims,\n", + "# CapeCod applies the pure-premium trend, and on-level premium is the exposure.\n", + "floored_patterns = dict(zip(\n", + " [int(age) for age in xyz_reported_dev.cdf_.ddims],\n", + " np.maximum(xyz_reported_dev.cdf_.values.flatten(), 1.0)))\n", + "onlevel_premium = xyz_premium * onlevel.olf_\n", + "xyz_cc = cl.Pipeline([\n", + " (\"tort\", tort),\n", + " (\"dev\", cl.DevelopmentConstant(patterns=floored_patterns, style=\"cdf\")),\n", + " (\"capecod\", cl.CapeCod(trend=pp_trend_rate)),\n", + "]).fit(xyz_reported, sample_weight=onlevel_premium).named_steps[\"capecod\"]\n", + "xyz_apriori = float(xyz_cc.apriori_.to_frame().iloc[0, 0])\n", + "\n", + "sheet1 = pd.DataFrame(index=xyz_years)\n", + "sheet1[\"Earned Premium\"] = xyz_prem\n", + "sheet1[\"On-Level Factor\"] = onlevel_adj\n", + "sheet1[\"On-Level Premium\"] = on_level_premium.round(0)\n", + "sheet1[\"Reported Claims\"] = xyz_reported_latest\n", + "sheet1[\"Trend\"] = pp_trend\n", + "sheet1[\"Tort Reform\"] = tort_reform\n", + "sheet1[\"Adjusted Claims\"] = adjusted_claims.round(0)\n", + "sheet1[\"CDF to Ultimate\"] = xyz_cdf.round(3)\n", + "sheet1[\"% Reported\"] = xyz_pct_reported.round(3)\n", + "sheet1[\"Used-Up On-Level Premium\"] = used_up_on_level.round(0)\n", + "sheet1[\"Estimated Adjusted Claim Ratio\"] = (adjusted_claims / used_up_on_level).round(3)\n", + "display(sheet1)\n", + "print(f\"All-years adjusted claim ratio (apriori): {xyz_apriori:.3f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "58d85350", + "metadata": {}, + "source": [ + "### Projection of ultimate claims\n", + "\n", + "This recreates *Exhibit II, Sheet 2*. The all-years adjusted claim ratio is\n", + "detrended back to each accident year's environment (Column 15 of Sheet 1) to give\n", + "the per-year expected claim ratios. Expected claims are earned premium times that\n", + "ratio; the projected ultimate is reported claims plus expected unreported." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "db65e010", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claim Ratio", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Unreported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Unreported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + } + ], + "ref": "c10e730b-41cd-4f1b-a938-2929bd524767", + "rows": [ + [ + "1998", + "20000.0", + "0.745", + "14900.0", + "1.0", + "0.0", + "0.0", + "15822.0", + "15822.0" + ], + [ + "1999", + "31500.0", + "0.756", + "23799.0", + "1.0", + "0.0", + "0.0", + "25107.0", + "25107.0" + ], + [ + "2000", + "45000.0", + "0.766", + "34479.0", + "1.0", + "0.0", + "0.0", + "37246.0", + "37246.0" + ], + [ + "2001", + "50000.0", + "0.776", + "38819.0", + "1.0", + "0.0", + "0.0", + "38798.0", + "38798.0" + ], + [ + "2002", + "61183.0", + "0.788", + "48183.0", + "1.003", + "0.003", + "144.0", + "48169.0", + "48313.0" + ], + [ + "2003", + "69175.0", + "0.776", + "53651.0", + "1.013", + "0.013", + "689.0", + "44373.0", + "45062.0" + ], + [ + "2004", + "99322.0", + "0.747", + "74165.0", + "1.064", + "0.06", + "4461.0", + "70288.0", + "74749.0" + ], + [ + "2005", + "138151.0", + "0.671", + "92740.0", + "1.085", + "0.078", + "7265.0", + "70655.0", + "77920.0" + ], + [ + "2006", + "107578.0", + "0.564", + "60622.0", + "1.196", + "0.164", + "9935.0", + "48804.0", + "58739.0" + ], + [ + "2007", + "62438.0", + "0.547", + "34134.0", + "1.512", + "0.339", + "11559.0", + "31732.0", + "43291.0" + ], + [ + "2008", + "47797.0", + "0.707", + "33773.0", + "2.551", + "0.608", + "20534.0", + "18632.0", + "39166.0" + ] + ], + "shape": { + "columns": 8, + "rows": 11 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumExpected Claim RatioExpected ClaimsCDF to Ultimate% UnreportedExpected UnreportedReported ClaimsProjected Ultimate
199820000.00.74514900.01.0000.0000.015822.015822.0
199931500.00.75623799.01.0000.0000.025107.025107.0
200045000.00.76634479.01.0000.0000.037246.037246.0
200150000.00.77638819.01.0000.0000.038798.038798.0
200261183.00.78848183.01.0030.003144.048169.048313.0
200369175.00.77653651.01.0130.013689.044373.045062.0
200499322.00.74774165.01.0640.0604461.070288.074749.0
2005138151.00.67192740.01.0850.0787265.070655.077920.0
2006107578.00.56460622.01.1960.1649935.048804.058739.0
200762438.00.54734134.01.5120.33911559.031732.043291.0
200847797.00.70733773.02.5510.60820534.018632.039166.0
\n", + "
" + ], + "text/plain": [ + " Earned Premium Expected Claim Ratio Expected Claims CDF to Ultimate % Unreported Expected Unreported Reported Claims Projected Ultimate\n", + "1998 20000.0 0.745 14900.0 1.000 0.000 0.0 15822.0 15822.0\n", + "1999 31500.0 0.756 23799.0 1.000 0.000 0.0 25107.0 25107.0\n", + "2000 45000.0 0.766 34479.0 1.000 0.000 0.0 37246.0 37246.0\n", + "2001 50000.0 0.776 38819.0 1.000 0.000 0.0 38798.0 38798.0\n", + "2002 61183.0 0.788 48183.0 1.003 0.003 144.0 48169.0 48313.0\n", + "2003 69175.0 0.776 53651.0 1.013 0.013 689.0 44373.0 45062.0\n", + "2004 99322.0 0.747 74165.0 1.064 0.060 4461.0 70288.0 74749.0\n", + "2005 138151.0 0.671 92740.0 1.085 0.078 7265.0 70655.0 77920.0\n", + "2006 107578.0 0.564 60622.0 1.196 0.164 9935.0 48804.0 58739.0\n", + "2007 62438.0 0.547 34134.0 1.512 0.339 11559.0 31732.0 43291.0\n", + "2008 47797.0 0.707 33773.0 2.551 0.608 20534.0 18632.0 39166.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Detrend the all-years apriori back to each year's rate, inflation, and tort\n", + "# environment (Exhibit II, Sheet 1, Column 15).\n", + "xyz_unadjusted_ratio = xyz_apriori * onlevel_adj / pp_trend / tort_reform\n", + "xyz_expected_claims = xyz_prem * xyz_unadjusted_ratio\n", + "xyz_pct_unreported = 1 - xyz_pct_reported\n", + "xyz_expected_unreported = xyz_expected_claims * xyz_pct_unreported\n", + "xyz_ult = xyz_reported_latest + xyz_expected_unreported\n", + "\n", + "sheet2 = pd.DataFrame(index=xyz_years)\n", + "sheet2[\"Earned Premium\"] = xyz_prem\n", + "sheet2[\"Expected Claim Ratio\"] = xyz_unadjusted_ratio.round(3)\n", + "sheet2[\"Expected Claims\"] = xyz_expected_claims.round(0)\n", + "sheet2[\"CDF to Ultimate\"] = xyz_cdf.round(3)\n", + "sheet2[\"% Unreported\"] = xyz_pct_unreported.round(3)\n", + "sheet2[\"Expected Unreported\"] = xyz_expected_unreported.round(0)\n", + "sheet2[\"Reported Claims\"] = xyz_reported_latest\n", + "sheet2[\"Projected Ultimate\"] = xyz_ult.round(0)\n", + "display(sheet2)" + ] + }, + { + "cell_type": "markdown", + "id": "eeb67fb7", + "metadata": {}, + "source": [ + "### Development of unpaid claim estimate\n", + "\n", + "This recreates *Exhibit II, Sheet 3*: case outstanding, estimated IBNR, and total\n", + "unpaid follow from the projected ultimates." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2fdd601f", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Paid Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "Case Outstanding", + "rawType": "float64", + "type": "float" + }, + { + "name": "IBNR", + "rawType": "float64", + "type": "float" + }, + { + "name": "Total Unpaid", + "rawType": "float64", + "type": "float" + } + ], + "ref": "a944af79-41d6-4379-9972-d877c267cf58", + "rows": [ + [ + "1998", + "15822.0", + "15822.0", + "15822.0", + "0.0", + "0.0", + "0.0" + ], + [ + "1999", + "25107.0", + "24817.0", + "25107.0", + "290.0", + "0.0", + "290.0" + ], + [ + "2000", + "37246.0", + "36782.0", + "37246.0", + "464.0", + "0.0", + "464.0" + ], + [ + "2001", + "38798.0", + "38519.0", + "38798.0", + "279.0", + "0.0", + "279.0" + ], + [ + "2002", + "48169.0", + "44437.0", + "48313.0", + "3732.0", + "144.0", + "3876.0" + ], + [ + "2003", + "44373.0", + "39320.0", + "45062.0", + "5053.0", + "689.0", + "5742.0" + ], + [ + "2004", + "70288.0", + "52811.0", + "74749.0", + "17477.0", + "4461.0", + "21938.0" + ], + [ + "2005", + "70655.0", + "40026.0", + "77920.0", + "30629.0", + "7265.0", + "37894.0" + ], + [ + "2006", + "48804.0", + "22819.0", + "58739.0", + "25985.0", + "9935.0", + "35920.0" + ], + [ + "2007", + "31732.0", + "11865.0", + "43291.0", + "19867.0", + "11559.0", + "31426.0" + ], + [ + "2008", + "18632.0", + "3409.0", + "39166.0", + "15223.0", + "20534.0", + "35757.0" + ] + ], + "shape": { + "columns": 6, + "rows": 11 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Reported ClaimsPaid ClaimsProjected UltimateCase OutstandingIBNRTotal Unpaid
199815822.015822.015822.00.00.00.0
199925107.024817.025107.0290.00.0290.0
200037246.036782.037246.0464.00.0464.0
200138798.038519.038798.0279.00.0279.0
200248169.044437.048313.03732.0144.03876.0
200344373.039320.045062.05053.0689.05742.0
200470288.052811.074749.017477.04461.021938.0
200570655.040026.077920.030629.07265.037894.0
200648804.022819.058739.025985.09935.035920.0
200731732.011865.043291.019867.011559.031426.0
200818632.03409.039166.015223.020534.035757.0
\n", + "
" + ], + "text/plain": [ + " Reported Claims Paid Claims Projected Ultimate Case Outstanding IBNR Total Unpaid\n", + "1998 15822.0 15822.0 15822.0 0.0 0.0 0.0\n", + "1999 25107.0 24817.0 25107.0 290.0 0.0 290.0\n", + "2000 37246.0 36782.0 37246.0 464.0 0.0 464.0\n", + "2001 38798.0 38519.0 38798.0 279.0 0.0 279.0\n", + "2002 48169.0 44437.0 48313.0 3732.0 144.0 3876.0\n", + "2003 44373.0 39320.0 45062.0 5053.0 689.0 5742.0\n", + "2004 70288.0 52811.0 74749.0 17477.0 4461.0 21938.0\n", + "2005 70655.0 40026.0 77920.0 30629.0 7265.0 37894.0\n", + "2006 48804.0 22819.0 58739.0 25985.0 9935.0 35920.0\n", + "2007 31732.0 11865.0 43291.0 19867.0 11559.0 31426.0\n", + "2008 18632.0 3409.0 39166.0 15223.0 20534.0 35757.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xyz_paid_latest = col(xyz_paid.latest_diagonal)\n", + "sheet3 = pd.DataFrame(index=xyz_years)\n", + "sheet3[\"Reported Claims\"] = xyz_reported_latest\n", + "sheet3[\"Paid Claims\"] = xyz_paid_latest\n", + "sheet3[\"Projected Ultimate\"] = xyz_ult.round(0)\n", + "sheet3[\"Case Outstanding\"] = (xyz_reported_latest - xyz_paid_latest).round(0)\n", + "sheet3[\"IBNR\"] = (xyz_ult - xyz_reported_latest).round(0)\n", + "sheet3[\"Total Unpaid\"] = (xyz_ult - xyz_paid_latest).round(0)\n", + "display(sheet3)" + ] + }, + { + "cell_type": "markdown", + "id": "0f5d38e1", + "metadata": {}, + "source": [ + "### Reconciliation to Friedland\n", + "\n", + "The derived adjusted claim ratio, the per-year detrended claim ratios, and the\n", + "projected ultimate and IBNR totals are reconciled to the printed Exhibit II\n", + "below (values in $000)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e16ace4f", + "metadata": {}, + "outputs": [], + "source": [ + "# Exhibit II, Sheet 1 - all-years adjusted claim ratio\n", + "assert np.isclose(xyz_apriori, 0.708, atol=2e-3)\n", + "# Exhibit II, Sheet 1 - selected CDFs to ultimate (limited to a minimum of 1.00)\n", + "assert np.allclose(xyz_cdf.round(3),\n", + " [1.000, 1.000, 1.000, 1.000, 1.003, 1.013, 1.064, 1.085, 1.196, 1.512, 2.551], atol=1e-3)\n", + "# Exhibit II, Sheet 1 - detrended (unadjusted) claim ratios, Column 15\n", + "assert np.allclose(xyz_unadjusted_ratio,\n", + " [0.746, 0.757, 0.767, 0.778, 0.789, 0.777, 0.747, 0.672, 0.565, 0.547, 0.708], atol=2e-3)\n", + "# Exhibit II, Sheet 2 - projected ultimate claims\n", + "assert np.isclose(xyz_ult.sum(), 504300, rtol=5e-3)\n", + "# Exhibit II, Sheet 3 - estimated IBNR\n", + "assert np.isclose((xyz_ult - xyz_reported_latest).sum(), 54674, rtol=5e-3)" + ] + }, + { + "cell_type": "markdown", + "id": "1f94d563", + "metadata": {}, + "source": [ + "### Comparison of methods\n", + "\n", + "This recreates *Exhibit II, Sheets 4 and 5*, which compare the Cape Cod\n", + "projection against the development, expected claims, and Bornhuetter-Ferguson\n", + "methods from Chapters 7-9. The non-Cape-Cod columns are the published results of\n", + "those chapters (cited in the text's column notes); the Cape Cod column is the one\n", + "computed in this chapter. Values in $000." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "8c2d4747", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Paid", + "rawType": "float64", + "type": "float" + }, + { + "name": "Development (Reported)", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Development (Paid)", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Expected Claims", + "rawType": "int64", + "type": "integer" + }, + { + "name": "BF (Reported)", + "rawType": "int64", + "type": "integer" + }, + { + "name": "BF (Paid)", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Cape Cod", + "rawType": "float64", + "type": "float" + } + ], + "ref": "2fef2c48-dda0-4285-a377-3c913f4942d2", + "rows": [ + [ + "1998", + "15822.0", + "15822.0", + "15822", + "15980", + "15660", + "15822", + "15977", + "15822.0" + ], + [ + "1999", + "25107.0", + "24817.0", + "25082", + "25164", + "24665", + "25107", + "25158", + "25107.0" + ], + [ + "2000", + "37246.0", + "36782.0", + "36948", + "37922", + "35235", + "37246", + "37841", + "37246.0" + ], + [ + "2001", + "38798.0", + "38519.0", + "38487", + "40600", + "39150", + "38798", + "40525", + "38798.0" + ], + [ + "2002", + "48169.0", + "44437.0", + "48313", + "49592", + "47906", + "48312", + "49417", + "48313.0" + ], + [ + "2003", + "44373.0", + "39320.0", + "44950", + "49858", + "54164", + "45068", + "50768", + "45062.0" + ], + [ + "2004", + "70288.0", + "52811.0", + "74787", + "80537", + "86509", + "75492", + "82593", + "74749.0" + ], + [ + "2005", + "70655.0", + "40026.0", + "76661", + "80333", + "108172", + "79129", + "94301", + "77920.0" + ], + [ + "2006", + "48804.0", + "22819.0", + "58370", + "72108", + "70786", + "60404", + "71205", + "58739.0" + ], + [ + "2007", + "31732.0", + "11865.0", + "47979", + "77941", + "39835", + "45221", + "45636", + "43291.0" + ], + [ + "2008", + "18632.0", + "3409.0", + "47530", + "74995", + "39433", + "42607", + "41049", + "39166.0" + ] + ], + "shape": { + "columns": 8, + "rows": 11 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ReportedPaidDevelopment (Reported)Development (Paid)Expected ClaimsBF (Reported)BF (Paid)Cape Cod
199815822.015822.0158221598015660158221597715822.0
199925107.024817.0250822516424665251072515825107.0
200037246.036782.0369483792235235372463784137246.0
200138798.038519.0384874060039150387984052538798.0
200248169.044437.0483134959247906483124941748313.0
200344373.039320.0449504985854164450685076845062.0
200470288.052811.0747878053786509754928259374749.0
200570655.040026.07666180333108172791299430177920.0
200648804.022819.0583707210870786604047120558739.0
200731732.011865.0479797794139835452214563643291.0
200818632.03409.0475307499539433426074104939166.0
\n", + "
" + ], + "text/plain": [ + " Reported Paid Development (Reported) Development (Paid) Expected Claims BF (Reported) BF (Paid) Cape Cod\n", + "1998 15822.0 15822.0 15822 15980 15660 15822 15977 15822.0\n", + "1999 25107.0 24817.0 25082 25164 24665 25107 25158 25107.0\n", + "2000 37246.0 36782.0 36948 37922 35235 37246 37841 37246.0\n", + "2001 38798.0 38519.0 38487 40600 39150 38798 40525 38798.0\n", + "2002 48169.0 44437.0 48313 49592 47906 48312 49417 48313.0\n", + "2003 44373.0 39320.0 44950 49858 54164 45068 50768 45062.0\n", + "2004 70288.0 52811.0 74787 80537 86509 75492 82593 74749.0\n", + "2005 70655.0 40026.0 76661 80333 108172 79129 94301 77920.0\n", + "2006 48804.0 22819.0 58370 72108 70786 60404 71205 58739.0\n", + "2007 31732.0 11865.0 47979 77941 39835 45221 45636 43291.0\n", + "2008 18632.0 3409.0 47530 74995 39433 42607 41049 39166.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Case Outstanding", + "rawType": "float64", + "type": "float" + }, + { + "name": "Development (Reported)", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Development (Paid)", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Expected Claims", + "rawType": "int64", + "type": "integer" + }, + { + "name": "BF (Reported)", + "rawType": "int64", + "type": "integer" + }, + { + "name": "BF (Paid)", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Cape Cod", + "rawType": "float64", + "type": "float" + } + ], + "ref": "27b85f58-ce3d-4f3c-b1c0-6dd3340deab7", + "rows": [ + [ + "1998", + "0.0", + "0", + "158", + "-162", + "0", + "155", + "0.0" + ], + [ + "1999", + "290.0", + "-25", + "58", + "-442", + "0", + "51", + "0.0" + ], + [ + "2000", + "464.0", + "-298", + "676", + "-2011", + "0", + "595", + "0.0" + ], + [ + "2001", + "279.0", + "-310", + "1802", + "352", + "0", + "1728", + "0.0" + ], + [ + "2002", + "3732.0", + "145", + "1423", + "-262", + "143", + "1248", + "144.0" + ], + [ + "2003", + "5053.0", + "577", + "5485", + "9791", + "695", + "6396", + "689.0" + ], + [ + "2004", + "17477.0", + "4498", + "10249", + "16221", + "5204", + "12305", + "4461.0" + ], + [ + "2005", + "30629.0", + "6006", + "9678", + "37517", + "8474", + "23646", + "7265.0" + ], + [ + "2006", + "25985.0", + "9566", + "23304", + "21982", + "11600", + "22401", + "9935.0" + ], + [ + "2007", + "19867.0", + "16247", + "46209", + "8103", + "13489", + "13904", + "11559.0" + ], + [ + "2008", + "15223.0", + "28898", + "56363", + "20801", + "23975", + "22417", + "20534.0" + ] + ], + "shape": { + "columns": 7, + "rows": 11 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Case OutstandingDevelopment (Reported)Development (Paid)Expected ClaimsBF (Reported)BF (Paid)Cape Cod
19980.00158-16201550.0
1999290.0-2558-4420510.0
2000464.0-298676-201105950.0
2001279.0-3101802352017280.0
20023732.01451423-2621431248144.0
20035053.0577548597916956396689.0
200417477.0449810249162215204123054461.0
200530629.060069678375178474236467265.0
200625985.09566233042198211600224019935.0
200719867.016247462098103134891390411559.0
200815223.0288985636320801239752241720534.0
\n", + "
" + ], + "text/plain": [ + " Case Outstanding Development (Reported) Development (Paid) Expected Claims BF (Reported) BF (Paid) Cape Cod\n", + "1998 0.0 0 158 -162 0 155 0.0\n", + "1999 290.0 -25 58 -442 0 51 0.0\n", + "2000 464.0 -298 676 -2011 0 595 0.0\n", + "2001 279.0 -310 1802 352 0 1728 0.0\n", + "2002 3732.0 145 1423 -262 143 1248 144.0\n", + "2003 5053.0 577 5485 9791 695 6396 689.0\n", + "2004 17477.0 4498 10249 16221 5204 12305 4461.0\n", + "2005 30629.0 6006 9678 37517 8474 23646 7265.0\n", + "2006 25985.0 9566 23304 21982 11600 22401 9935.0\n", + "2007 19867.0 16247 46209 8103 13489 13904 11559.0\n", + "2008 15223.0 28898 56363 20801 23975 22417 20534.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Ultimate claims by method (Sheet 4). Every column other than Cape Cod is the\n", + "# published result of a prior chapter - development (Chapter 7), expected claims\n", + "# (Chapter 8), and Bornhuetter-Ferguson (Chapter 9) - reproduced from the text's\n", + "# column notes for comparison. The Cape Cod column is computed above.\n", + "summary_ult = pd.DataFrame(index=xyz_years)\n", + "summary_ult[\"Reported\"] = xyz_reported_latest\n", + "summary_ult[\"Paid\"] = xyz_paid_latest\n", + "summary_ult[\"Development (Reported)\"] = [15822, 25082, 36948, 38487, 48313, 44950, 74787, 76661, 58370, 47979, 47530]\n", + "summary_ult[\"Development (Paid)\"] = [15980, 25164, 37922, 40600, 49592, 49858, 80537, 80333, 72108, 77941, 74995]\n", + "summary_ult[\"Expected Claims\"] = [15660, 24665, 35235, 39150, 47906, 54164, 86509, 108172, 70786, 39835, 39433]\n", + "summary_ult[\"BF (Reported)\"] = [15822, 25107, 37246, 38798, 48312, 45068, 75492, 79129, 60404, 45221, 42607]\n", + "summary_ult[\"BF (Paid)\"] = [15977, 25158, 37841, 40525, 49417, 50768, 82593, 94301, 71205, 45636, 41049]\n", + "summary_ult[\"Cape Cod\"] = xyz_ult.round(0)\n", + "display(summary_ult)\n", + "\n", + "# Estimated IBNR by method (Sheet 5): projected ultimate minus reported claims.\n", + "summary_ibnr = pd.DataFrame(index=xyz_years)\n", + "summary_ibnr[\"Case Outstanding\"] = (xyz_reported_latest - xyz_paid_latest).round(0)\n", + "summary_ibnr[\"Development (Reported)\"] = [0, -25, -298, -310, 145, 577, 4498, 6006, 9566, 16247, 28898]\n", + "summary_ibnr[\"Development (Paid)\"] = [158, 58, 676, 1802, 1423, 5485, 10249, 9678, 23304, 46209, 56363]\n", + "summary_ibnr[\"Expected Claims\"] = [-162, -442, -2011, 352, -262, 9791, 16221, 37517, 21982, 8103, 20801]\n", + "summary_ibnr[\"BF (Reported)\"] = [0, 0, 0, 0, 143, 695, 5204, 8474, 11600, 13489, 23975]\n", + "summary_ibnr[\"BF (Paid)\"] = [155, 51, 595, 1728, 1248, 6396, 12305, 23646, 22401, 13904, 22417]\n", + "summary_ibnr[\"Cape Cod\"] = (xyz_ult - xyz_reported_latest).round(0)\n", + "display(summary_ibnr)\n", + "\n", + "# Reconcile the Cape Cod column of Sheets 4 and 5 to the printed exhibit.\n", + "assert np.isclose(summary_ult[\"Cape Cod\"].sum(), 504300, rtol=5e-3)\n", + "assert np.isclose(summary_ibnr[\"Cape Cod\"].sum(), 54674, rtol=5e-3)" + ] + }, + { + "cell_type": "markdown", + "id": "549ee58f", + "metadata": {}, + "source": [ + "## Exhibit III - U.S. PP Auto (Impact of Changing Conditions)\n", + "\n", + "Exhibit III applies the Cape Cod method to the four **U.S. PP Auto** scenarios\n", + "Friedland uses to study a changing environment (valued at 12/31/2008, accident\n", + "years 1999-2008):\n", + "\n", + "1. Steady-State\n", + "2. Increasing Claim Ratios\n", + "3. Increasing Case Outstanding Strength\n", + "4. Increasing Claim Ratios and Case Outstanding Strength\n", + "\n", + "Unlike Bornhuetter-Ferguson (whose a priori is fixed at a 70% claim ratio for all\n", + "four scenarios), Cape Cod *derives* the expected claim ratio from each scenario's\n", + "reported experience. This is what makes it more responsive when claim ratios rise\n", + "(Scenario 2) but prone to overstatement when case-outstanding strength increases\n", + "(Scenarios 3 and 4).\n", + "\n", + "The development selection is the Chapter 7 five-year simple average with a 1.000\n", + "tail, and reported CDFs are limited to a minimum of 1.000.\n", + "\n", + "> **Note on sample data.** The reported figures for the two *case outstanding\n", + "> strength* scenarios do not yet reconcile exactly. The reported development in\n", + "> the `friedland_uspp_auto_increasing_case` and\n", + "> `friedland_uspp_increasing_claim_case` samples differs slightly from the text\n", + "> (a known data correction to these CSVs is still outstanding), so the\n", + "> reconciliation below asserts the IBNR total only for the two scenarios with\n", + "> clean data. The derived claim ratio reconciles for all four." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "bc5deb56", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Steady-State - all-years estimated claim ratio 0.700\n" + ] + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Used-Up Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Estimated Claim Ratio", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "IBNR", + "rawType": "float64", + "type": "float" + } + ], + "ref": "72881216-848a-48fc-bdd8-923ca1088b36", + "rows": [ + [ + "1999", + "1000000.0", + "700000.0", + "1.0", + "1.0", + "1000000.0", + "0.7", + "700059.0", + "700000.0", + "0.0" + ], + [ + "2000", + "1050000.0", + "735000.0", + "1.0", + "1.0", + "1050000.0", + "0.7", + "735062.0", + "735000.0", + "0.0" + ], + [ + "2001", + "1102500.0", + "771750.0", + "1.0", + "1.0", + "1102500.0", + "0.7", + "771815.0", + "771750.0", + "0.0" + ], + [ + "2002", + "1157625.0", + "810338.0", + "1.0", + "1.0", + "1157625.0", + "0.7", + "810405.0", + "810338.0", + "0.0" + ], + [ + "2003", + "1215506.25", + "842346.0", + "1.01", + "0.99", + "1203472.0", + "0.7", + "850926.0", + "850771.0", + "8425.0" + ], + [ + "2004", + "1276281.563", + "884463.0", + "1.01", + "0.99", + "1263645.0", + "0.7", + "893472.0", + "893309.0", + "8846.0" + ], + [ + "2005", + "1340095.641", + "919306.0", + "1.02", + "0.98", + "1313819.0", + "0.7", + "938146.0", + "937791.0", + "18485.0" + ], + [ + "2006", + "1407100.423", + "935722.0", + "1.053", + "0.95", + "1336278.0", + "0.7", + "985053.0", + "985074.0", + "49352.0" + ], + [ + "2007", + "1477455.444", + "930797.0", + "1.112", + "0.899", + "1328647.0", + "0.701", + "1034306.0", + "1034718.0", + "103921.0" + ], + [ + "2008", + "1551328.216", + "836166.0", + "1.3", + "0.769", + "1193329.0", + "0.701", + "1086021.0", + "1086512.0", + "250346.0" + ] + ], + "shape": { + "columns": 9, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumReported ClaimsCDF to Ultimate% ReportedUsed-Up PremiumEstimated Claim RatioExpected ClaimsProjected UltimateIBNR
19991000000.000700000.01.0001.0001000000.00.700700059.0700000.00.0
20001050000.000735000.01.0001.0001050000.00.700735062.0735000.00.0
20011102500.000771750.01.0001.0001102500.00.700771815.0771750.00.0
20021157625.000810338.01.0001.0001157625.00.700810405.0810338.00.0
20031215506.250842346.01.0100.9901203472.00.700850926.0850771.08425.0
20041276281.563884463.01.0100.9901263645.00.700893472.0893309.08846.0
20051340095.641919306.01.0200.9801313819.00.700938146.0937791.018485.0
20061407100.423935722.01.0530.9501336278.00.700985053.0985074.049352.0
20071477455.444930797.01.1120.8991328647.00.7011034306.01034718.0103921.0
20081551328.216836166.01.3000.7691193329.00.7011086021.01086512.0250346.0
\n", + "
" + ], + "text/plain": [ + " Earned Premium Reported Claims CDF to Ultimate % Reported Used-Up Premium Estimated Claim Ratio Expected Claims Projected Ultimate IBNR\n", + "1999 1000000.000 700000.0 1.000 1.000 1000000.0 0.700 700059.0 700000.0 0.0\n", + "2000 1050000.000 735000.0 1.000 1.000 1050000.0 0.700 735062.0 735000.0 0.0\n", + "2001 1102500.000 771750.0 1.000 1.000 1102500.0 0.700 771815.0 771750.0 0.0\n", + "2002 1157625.000 810338.0 1.000 1.000 1157625.0 0.700 810405.0 810338.0 0.0\n", + "2003 1215506.250 842346.0 1.010 0.990 1203472.0 0.700 850926.0 850771.0 8425.0\n", + "2004 1276281.563 884463.0 1.010 0.990 1263645.0 0.700 893472.0 893309.0 8846.0\n", + "2005 1340095.641 919306.0 1.020 0.980 1313819.0 0.700 938146.0 937791.0 18485.0\n", + "2006 1407100.423 935722.0 1.053 0.950 1336278.0 0.700 985053.0 985074.0 49352.0\n", + "2007 1477455.444 930797.0 1.112 0.899 1328647.0 0.701 1034306.0 1034718.0 103921.0\n", + "2008 1551328.216 836166.0 1.300 0.769 1193329.0 0.701 1086021.0 1086512.0 250346.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Increasing Claim Ratios - all-years estimated claim ratio 0.807\n" + ] + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Used-Up Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Estimated Claim Ratio", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "IBNR", + "rawType": "float64", + "type": "float" + } + ], + "ref": "76395ea6-8059-44e5-a20d-943bd86adbb5", + "rows": [ + [ + "1999", + "1000000.0", + "700000.0", + "1.0", + "1.0", + "1000000.0", + "0.7", + "807293.0", + "700000.0", + "0.0" + ], + [ + "2000", + "1050000.0", + "735000.0", + "1.0", + "1.0", + "1050000.0", + "0.7", + "847658.0", + "735000.0", + "0.0" + ], + [ + "2001", + "1102500.0", + "771750.0", + "1.0", + "1.0", + "1102500.0", + "0.7", + "890041.0", + "771750.0", + "0.0" + ], + [ + "2002", + "1157625.0", + "810338.0", + "1.0", + "1.0", + "1157625.0", + "0.7", + "934543.0", + "810338.0", + "0.0" + ], + [ + "2003", + "1215506.25", + "842346.0", + "1.01", + "0.99", + "1203472.0", + "0.7", + "981270.0", + "852062.0", + "9716.0" + ], + [ + "2004", + "1276281.563", + "1010815.0", + "1.01", + "0.99", + "1263645.0", + "0.8", + "1030333.0", + "1021016.0", + "10201.0" + ], + [ + "2005", + "1340095.641", + "1116300.0", + "1.02", + "0.98", + "1313819.0", + "0.85", + "1081850.0", + "1137617.0", + "21317.0" + ], + [ + "2006", + "1407100.423", + "1203071.0", + "1.053", + "0.95", + "1336278.0", + "0.9", + "1135942.0", + "1259983.0", + "56912.0" + ], + [ + "2007", + "1477455.444", + "1263224.0", + "1.112", + "0.899", + "1328647.0", + "0.951", + "1192740.0", + "1383064.0", + "119840.0" + ], + [ + "2008", + "1551328.216", + "1194523.0", + "1.3", + "0.769", + "1193329.0", + "1.001", + "1252377.0", + "1483217.0", + "288694.0" + ] + ], + "shape": { + "columns": 9, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumReported ClaimsCDF to Ultimate% ReportedUsed-Up PremiumEstimated Claim RatioExpected ClaimsProjected UltimateIBNR
19991000000.000700000.01.0001.0001000000.00.700807293.0700000.00.0
20001050000.000735000.01.0001.0001050000.00.700847658.0735000.00.0
20011102500.000771750.01.0001.0001102500.00.700890041.0771750.00.0
20021157625.000810338.01.0001.0001157625.00.700934543.0810338.00.0
20031215506.250842346.01.0100.9901203472.00.700981270.0852062.09716.0
20041276281.5631010815.01.0100.9901263645.00.8001030333.01021016.010201.0
20051340095.6411116300.01.0200.9801313819.00.8501081850.01137617.021317.0
20061407100.4231203071.01.0530.9501336278.00.9001135942.01259983.056912.0
20071477455.4441263224.01.1120.8991328647.00.9511192740.01383064.0119840.0
20081551328.2161194523.01.3000.7691193329.01.0011252377.01483217.0288694.0
\n", + "
" + ], + "text/plain": [ + " Earned Premium Reported Claims CDF to Ultimate % Reported Used-Up Premium Estimated Claim Ratio Expected Claims Projected Ultimate IBNR\n", + "1999 1000000.000 700000.0 1.000 1.000 1000000.0 0.700 807293.0 700000.0 0.0\n", + "2000 1050000.000 735000.0 1.000 1.000 1050000.0 0.700 847658.0 735000.0 0.0\n", + "2001 1102500.000 771750.0 1.000 1.000 1102500.0 0.700 890041.0 771750.0 0.0\n", + "2002 1157625.000 810338.0 1.000 1.000 1157625.0 0.700 934543.0 810338.0 0.0\n", + "2003 1215506.250 842346.0 1.010 0.990 1203472.0 0.700 981270.0 852062.0 9716.0\n", + "2004 1276281.563 1010815.0 1.010 0.990 1263645.0 0.800 1030333.0 1021016.0 10201.0\n", + "2005 1340095.641 1116300.0 1.020 0.980 1313819.0 0.850 1081850.0 1137617.0 21317.0\n", + "2006 1407100.423 1203071.0 1.053 0.950 1336278.0 0.900 1135942.0 1259983.0 56912.0\n", + "2007 1477455.444 1263224.0 1.112 0.899 1328647.0 0.951 1192740.0 1383064.0 119840.0\n", + "2008 1551328.216 1194523.0 1.300 0.769 1193329.0 1.001 1252377.0 1483217.0 288694.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Increasing Case Outstanding Strength - all-years estimated claim ratio 0.717\n" + ] + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Used-Up Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Estimated Claim Ratio", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "IBNR", + "rawType": "float64", + "type": "float" + } + ], + "ref": "104a91dd-f092-4fe6-8212-c50c38f568d3", + "rows": [ + [ + "1999", + "1000000.0", + "700000.0", + "1.0", + "1.0", + "1000000.0", + "0.7", + "716820.0", + "700000.0", + "0.0" + ], + [ + "2000", + "1050000.0", + "735000.0", + "1.0", + "1.0", + "1050000.0", + "0.7", + "752661.0", + "735000.0", + "0.0" + ], + [ + "2001", + "1102500.0", + "771750.0", + "1.0", + "1.0", + "1102500.0", + "0.7", + "790294.0", + "771750.0", + "0.0" + ], + [ + "2002", + "1157625.0", + "810338.0", + "1.0", + "1.0", + "1157625.0", + "0.7", + "829809.0", + "810338.0", + "0.0" + ], + [ + "2003", + "1215506.25", + "842346.0", + "1.01", + "0.99", + "1203472.0", + "0.7", + "871300.0", + "850973.0", + "8627.0" + ], + [ + "2004", + "1276281.563", + "884463.0", + "1.01", + "0.99", + "1263645.0", + "0.7", + "914865.0", + "893521.0", + "9058.0" + ], + [ + "2005", + "1340095.641", + "933377.0", + "1.019", + "0.981", + "1315109.0", + "0.71", + "960608.0", + "951371.0", + "17994.0" + ], + [ + "2006", + "1407100.423", + "962808.0", + "1.054", + "0.949", + "1335010.0", + "0.721", + "1008638.0", + "1014247.0", + "51439.0" + ], + [ + "2007", + "1477455.444", + "979922.0", + "1.117", + "0.895", + "1322700.0", + "0.741", + "1059070.0", + "1090823.0", + "110901.0" + ], + [ + "2008", + "1551328.216", + "931185.0", + "1.316", + "0.76", + "1178821.0", + "0.79", + "1112024.0", + "1198066.0", + "266881.0" + ] + ], + "shape": { + "columns": 9, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumReported ClaimsCDF to Ultimate% ReportedUsed-Up PremiumEstimated Claim RatioExpected ClaimsProjected UltimateIBNR
19991000000.000700000.01.0001.0001000000.00.700716820.0700000.00.0
20001050000.000735000.01.0001.0001050000.00.700752661.0735000.00.0
20011102500.000771750.01.0001.0001102500.00.700790294.0771750.00.0
20021157625.000810338.01.0001.0001157625.00.700829809.0810338.00.0
20031215506.250842346.01.0100.9901203472.00.700871300.0850973.08627.0
20041276281.563884463.01.0100.9901263645.00.700914865.0893521.09058.0
20051340095.641933377.01.0190.9811315109.00.710960608.0951371.017994.0
20061407100.423962808.01.0540.9491335010.00.7211008638.01014247.051439.0
20071477455.444979922.01.1170.8951322700.00.7411059070.01090823.0110901.0
20081551328.216931185.01.3160.7601178821.00.7901112024.01198066.0266881.0
\n", + "
" + ], + "text/plain": [ + " Earned Premium Reported Claims CDF to Ultimate % Reported Used-Up Premium Estimated Claim Ratio Expected Claims Projected Ultimate IBNR\n", + "1999 1000000.000 700000.0 1.000 1.000 1000000.0 0.700 716820.0 700000.0 0.0\n", + "2000 1050000.000 735000.0 1.000 1.000 1050000.0 0.700 752661.0 735000.0 0.0\n", + "2001 1102500.000 771750.0 1.000 1.000 1102500.0 0.700 790294.0 771750.0 0.0\n", + "2002 1157625.000 810338.0 1.000 1.000 1157625.0 0.700 829809.0 810338.0 0.0\n", + "2003 1215506.250 842346.0 1.010 0.990 1203472.0 0.700 871300.0 850973.0 8627.0\n", + "2004 1276281.563 884463.0 1.010 0.990 1263645.0 0.700 914865.0 893521.0 9058.0\n", + "2005 1340095.641 933377.0 1.019 0.981 1315109.0 0.710 960608.0 951371.0 17994.0\n", + "2006 1407100.423 962808.0 1.054 0.949 1335010.0 0.721 1008638.0 1014247.0 51439.0\n", + "2007 1477455.444 979922.0 1.117 0.895 1322700.0 0.741 1059070.0 1090823.0 110901.0\n", + "2008 1551328.216 931185.0 1.316 0.760 1178821.0 0.790 1112024.0 1198066.0 266881.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Increasing Claim Ratios and Case Outstanding Strength - all-years estimated claim ratio 0.830\n" + ] + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Used-Up Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Estimated Claim Ratio", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "IBNR", + "rawType": "float64", + "type": "float" + } + ], + "ref": "527050b9-f7f9-4e7d-a9ac-5407dc340005", + "rows": [ + [ + "1999", + "1000000.0", + "700000.0", + "1.0", + "1.0", + "1000000.0", + "0.7", + "830029.0", + "700000.0", + "0.0" + ], + [ + "2000", + "1050000.0", + "735000.0", + "1.0", + "1.0", + "1050000.0", + "0.7", + "871530.0", + "735000.0", + "0.0" + ], + [ + "2001", + "1102500.0", + "771750.0", + "1.0", + "1.0", + "1102500.0", + "0.7", + "915107.0", + "771750.0", + "0.0" + ], + [ + "2002", + "1157625.0", + "810338.0", + "1.0", + "1.0", + "1157625.0", + "0.7", + "960862.0", + "810338.0", + "0.0" + ], + [ + "2003", + "1215506.25", + "842346.0", + "1.01", + "0.99", + "1203472.0", + "0.7", + "1008905.0", + "852335.0", + "9989.0" + ], + [ + "2004", + "1276281.563", + "1010815.0", + "1.01", + "0.99", + "1263645.0", + "0.8", + "1059351.0", + "1021304.0", + "10489.0" + ], + [ + "2005", + "1340095.641", + "1133386.0", + "1.019", + "0.981", + "1315109.0", + "0.862", + "1112318.0", + "1154222.0", + "20836.0" + ], + [ + "2006", + "1407100.423", + "1237897.0", + "1.054", + "0.949", + "1335010.0", + "0.927", + "1167934.0", + "1297460.0", + "59563.0" + ], + [ + "2007", + "1477455.444", + "1329895.0", + "1.117", + "0.895", + "1322700.0", + "1.005", + "1226331.0", + "1458311.0", + "128416.0" + ], + [ + "2008", + "1551328.216", + "1330264.0", + "1.316", + "0.76", + "1178821.0", + "1.128", + "1287647.0", + "1639294.0", + "309030.0" + ] + ], + "shape": { + "columns": 9, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumReported ClaimsCDF to Ultimate% ReportedUsed-Up PremiumEstimated Claim RatioExpected ClaimsProjected UltimateIBNR
19991000000.000700000.01.0001.0001000000.00.700830029.0700000.00.0
20001050000.000735000.01.0001.0001050000.00.700871530.0735000.00.0
20011102500.000771750.01.0001.0001102500.00.700915107.0771750.00.0
20021157625.000810338.01.0001.0001157625.00.700960862.0810338.00.0
20031215506.250842346.01.0100.9901203472.00.7001008905.0852335.09989.0
20041276281.5631010815.01.0100.9901263645.00.8001059351.01021304.010489.0
20051340095.6411133386.01.0190.9811315109.00.8621112318.01154222.020836.0
20061407100.4231237897.01.0540.9491335010.00.9271167934.01297460.059563.0
20071477455.4441329895.01.1170.8951322700.01.0051226331.01458311.0128416.0
20081551328.2161330264.01.3160.7601178821.01.1281287647.01639294.0309030.0
\n", + "
" + ], + "text/plain": [ + " Earned Premium Reported Claims CDF to Ultimate % Reported Used-Up Premium Estimated Claim Ratio Expected Claims Projected Ultimate IBNR\n", + "1999 1000000.000 700000.0 1.000 1.000 1000000.0 0.700 830029.0 700000.0 0.0\n", + "2000 1050000.000 735000.0 1.000 1.000 1050000.0 0.700 871530.0 735000.0 0.0\n", + "2001 1102500.000 771750.0 1.000 1.000 1102500.0 0.700 915107.0 771750.0 0.0\n", + "2002 1157625.000 810338.0 1.000 1.000 1157625.0 0.700 960862.0 810338.0 0.0\n", + "2003 1215506.250 842346.0 1.010 0.990 1203472.0 0.700 1008905.0 852335.0 9989.0\n", + "2004 1276281.563 1010815.0 1.010 0.990 1263645.0 0.800 1059351.0 1021304.0 10489.0\n", + "2005 1340095.641 1133386.0 1.019 0.981 1315109.0 0.862 1112318.0 1154222.0 20836.0\n", + "2006 1407100.423 1237897.0 1.054 0.949 1335010.0 0.927 1167934.0 1297460.0 59563.0\n", + "2007 1477455.444 1329895.0 1.117 0.895 1322700.0 1.005 1226331.0 1458311.0 128416.0\n", + "2008 1551328.216 1330264.0 1.316 0.760 1178821.0 1.128 1287647.0 1639294.0 309030.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def pp_cc_scenario(sample):\n", + " \"\"\"Recreate a U.S. PP Auto Cape Cod scenario (Exhibit III).\"\"\"\n", + " tri = cl.load_sample(sample)\n", + " reported = tri[\"Reported Claims\"]\n", + " paid = tri[\"Paid Claims\"]\n", + " premium = tri[\"Earned Premium\"].latest_diagonal\n", + " years = list(reported.origin.year)\n", + "\n", + " # Chapter 7 selection: five-year simple average reported development, 1.000\n", + " # tail; CDFs cumulated from age-to-age factors rounded to three decimals.\n", + " reported_dev = cl.TailConstant(tail=1.0, projection_period=0).fit_transform(\n", + " cl.Development(n_periods=5, average=\"simple\").fit_transform(reported))\n", + " reported_dev.ldf_ = reported_dev.ldf_.round(3)\n", + "\n", + " cc = cl.CapeCod().fit(reported_dev, sample_weight=premium)\n", + " apriori = float(cc.apriori_.to_frame().iloc[0, 0])\n", + "\n", + " # model_diagnostics packages Latest, CDF, Ultimate, and IBNR by accident year.\n", + " diag = cl.model_diagnostics(cc)\n", + " cdf = np.maximum(col(diag[\"CDF\"]), 1.0).round(3)\n", + " prem = col(premium)\n", + " reported_latest = col(diag[\"Latest\"])\n", + " used_up = prem / cdf\n", + " # CapeCod returns NaN IBNR for fully developed years (CDF = 1.000); coerce to 0.\n", + " ibnr = np.nan_to_num(col(diag[\"IBNR\"]))\n", + "\n", + " out = pd.DataFrame(index=years)\n", + " out[\"Earned Premium\"] = prem\n", + " out[\"Reported Claims\"] = reported_latest\n", + " out[\"CDF to Ultimate\"] = cdf.round(3)\n", + " out[\"% Reported\"] = (1 / cdf).round(3)\n", + " out[\"Used-Up Premium\"] = used_up.round(0)\n", + " out[\"Estimated Claim Ratio\"] = (reported_latest / used_up).round(3)\n", + " out[\"Expected Claims\"] = (prem * apriori).round(0)\n", + " out[\"Projected Ultimate\"] = col(diag[\"Ultimate\"]).round(0)\n", + " out[\"IBNR\"] = ibnr.round(0)\n", + " return apriori, out\n", + "\n", + "\n", + "pp_scenarios = {\n", + " \"Steady-State\": \"friedland_uspp_auto_steady_state\",\n", + " \"Increasing Claim Ratios\": \"friedland_uspp_auto_increasing_claim\",\n", + " \"Increasing Case Outstanding Strength\": \"friedland_uspp_auto_increasing_case\",\n", + " \"Increasing Claim Ratios and Case Outstanding Strength\": \"friedland_uspp_increasing_claim_case\",\n", + "}\n", + "pp_results = {name: pp_cc_scenario(sample) for name, sample in pp_scenarios.items()}\n", + "for name, (apriori, table) in pp_results.items():\n", + " print(f\"{name} - all-years estimated claim ratio {apriori:.3f}\")\n", + " display(table)" + ] + }, + { + "cell_type": "markdown", + "id": "ae3834b5", + "metadata": {}, + "source": [ + "### Reconciliation to Friedland\n", + "\n", + "We reconcile the derived all-years claim ratio for all four scenarios, and the\n", + "estimated IBNR total for the two scenarios with clean sample data." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "d9d8e326", + "metadata": {}, + "outputs": [], + "source": [ + "pp_apriori = {name: apriori for name, (apriori, table) in pp_results.items()}\n", + "pp_ibnr = {name: table[\"IBNR\"].sum() for name, (apriori, table) in pp_results.items()}\n", + "\n", + "# All four scenarios reproduce the text's all-years estimated claim ratio.\n", + "assert np.isclose(pp_apriori[\"Steady-State\"], 0.700, atol=2e-3)\n", + "assert np.isclose(pp_apriori[\"Increasing Claim Ratios\"], 0.807, atol=2e-3)\n", + "assert np.isclose(pp_apriori[\"Increasing Case Outstanding Strength\"], 0.717, atol=2e-3)\n", + "assert np.isclose(pp_apriori[\"Increasing Claim Ratios and Case Outstanding Strength\"], 0.831, atol=2e-3)\n", + "\n", + "# Estimated IBNR reconciles for the two scenarios with clean sample data.\n", + "assert np.isclose(pp_ibnr[\"Steady-State\"], 438638, rtol=5e-3)\n", + "assert np.isclose(pp_ibnr[\"Increasing Claim Ratios\"], 505828, rtol=5e-3)" + ] + }, + { + "cell_type": "markdown", + "id": "7a255f88", + "metadata": {}, + "source": [ + "## Exhibit IV - U.S. Auto (Impact of Change in Product Mix)\n", + "\n", + "Exhibit IV applies the Cape Cod method to a combined private-passenger and\n", + "commercial automobile portfolio under two scenarios (valued at 12/31/2008,\n", + "accident years 1999-2008):\n", + "\n", + "1. Steady-State (No Change in Product Mix)\n", + "2. Changing Product Mix (commercial auto growing faster than private passenger)\n", + "\n", + "The earned premium follows the text's Exhibit IV, Sheet 1 assumption: $2,000,000\n", + "for the first year (1999) with 5% annual growth, and in the change scenario\n", + "commercial auto grows 30% per year from 2005. The development selection is the\n", + "Chapter 7 five-year simple average with a 1.000 tail.\n", + "\n", + "Cape Cod generates the correct IBNR when the product mix is stable, but\n", + "understates it when the mix shifts, because the reporting pattern changes and the\n", + "method does not respond appropriately." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "1bd48eed", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Steady-State (No Change in Product Mix) - all-years estimated claim ratio 0.750\n" + ] + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Used-Up Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Estimated Claim Ratio", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "IBNR", + "rawType": "float64", + "type": "float" + } + ], + "ref": "3eb3309c-c0cf-4dc0-b440-f972d898f12a", + "rows": [ + [ + "1999", + "2000000.0", + "1500000.0", + "1.0", + "1.0", + "2000000.0", + "0.75", + "1500509.0", + "1500000.0", + "0.0" + ], + [ + "2000", + "2100000.0", + "1575000.0", + "1.0", + "1.0", + "2100000.0", + "0.75", + "1575535.0", + "1575000.0", + "0.0" + ], + [ + "2001", + "2205000.0", + "1653750.0", + "1.0", + "1.0", + "2205000.0", + "0.75", + "1654312.0", + "1653750.0", + "0.0" + ], + [ + "2002", + "2315250.0", + "1736438.0", + "1.0", + "1.0", + "2315250.0", + "0.75", + "1737027.0", + "1736438.0", + "0.0" + ], + [ + "2003", + "2431013.0", + "1814751.0", + "1.005", + "0.995", + "2418918.0", + "0.75", + "1823879.0", + "1823825.0", + "9074.0" + ], + [ + "2004", + "2552563.0", + "1885068.0", + "1.016", + "0.984", + "2512365.0", + "0.75", + "1915072.0", + "1915329.0", + "30261.0" + ], + [ + "2005", + "2680191.0", + "1948499.0", + "1.032", + "0.969", + "2597084.0", + "0.75", + "2010826.0", + "2011439.0", + "62940.0" + ], + [ + "2006", + "2814201.0", + "1937577.0", + "1.09", + "0.917", + "2581836.0", + "0.75", + "2111367.0", + "2112126.0", + "174549.0" + ], + [ + "2007", + "2954911.0", + "1852729.0", + "1.197", + "0.835", + "2468597.0", + "0.751", + "2216936.0", + "2217516.0", + "364787.0" + ], + [ + "2008", + "3102656.0", + "1568393.0", + "1.484", + "0.674", + "2090739.0", + "0.75", + "2327782.0", + "2327823.0", + "759430.0" + ] + ], + "shape": { + "columns": 9, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumReported ClaimsCDF to Ultimate% ReportedUsed-Up PremiumEstimated Claim RatioExpected ClaimsProjected UltimateIBNR
19992000000.01500000.01.0001.0002000000.00.7501500509.01500000.00.0
20002100000.01575000.01.0001.0002100000.00.7501575535.01575000.00.0
20012205000.01653750.01.0001.0002205000.00.7501654312.01653750.00.0
20022315250.01736438.01.0001.0002315250.00.7501737027.01736438.00.0
20032431013.01814751.01.0050.9952418918.00.7501823879.01823825.09074.0
20042552563.01885068.01.0160.9842512365.00.7501915072.01915329.030261.0
20052680191.01948499.01.0320.9692597084.00.7502010826.02011439.062940.0
20062814201.01937577.01.0900.9172581836.00.7502111367.02112126.0174549.0
20072954911.01852729.01.1970.8352468597.00.7512216936.02217516.0364787.0
20083102656.01568393.01.4840.6742090739.00.7502327782.02327823.0759430.0
\n", + "
" + ], + "text/plain": [ + " Earned Premium Reported Claims CDF to Ultimate % Reported Used-Up Premium Estimated Claim Ratio Expected Claims Projected Ultimate IBNR\n", + "1999 2000000.0 1500000.0 1.000 1.000 2000000.0 0.750 1500509.0 1500000.0 0.0\n", + "2000 2100000.0 1575000.0 1.000 1.000 2100000.0 0.750 1575535.0 1575000.0 0.0\n", + "2001 2205000.0 1653750.0 1.000 1.000 2205000.0 0.750 1654312.0 1653750.0 0.0\n", + "2002 2315250.0 1736438.0 1.000 1.000 2315250.0 0.750 1737027.0 1736438.0 0.0\n", + "2003 2431013.0 1814751.0 1.005 0.995 2418918.0 0.750 1823879.0 1823825.0 9074.0\n", + "2004 2552563.0 1885068.0 1.016 0.984 2512365.0 0.750 1915072.0 1915329.0 30261.0\n", + "2005 2680191.0 1948499.0 1.032 0.969 2597084.0 0.750 2010826.0 2011439.0 62940.0\n", + "2006 2814201.0 1937577.0 1.090 0.917 2581836.0 0.750 2111367.0 2112126.0 174549.0\n", + "2007 2954911.0 1852729.0 1.197 0.835 2468597.0 0.751 2216936.0 2217516.0 364787.0\n", + "2008 3102656.0 1568393.0 1.484 0.674 2090739.0 0.750 2327782.0 2327823.0 759430.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Changing Product Mix - all-years estimated claim ratio 0.750\n" + ] + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "Earned Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Reported Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "CDF to Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "% Reported", + "rawType": "float64", + "type": "float" + }, + { + "name": "Used-Up Premium", + "rawType": "float64", + "type": "float" + }, + { + "name": "Estimated Claim Ratio", + "rawType": "float64", + "type": "float" + }, + { + "name": "Expected Claims", + "rawType": "float64", + "type": "float" + }, + { + "name": "Projected Ultimate", + "rawType": "float64", + "type": "float" + }, + { + "name": "IBNR", + "rawType": "float64", + "type": "float" + } + ], + "ref": "70456411-695a-476e-becd-900844635cb2", + "rows": [ + [ + "1999", + "2000000.0", + "1500000.0", + "1.0", + "1.0", + "2000000.0", + "0.75", + "1499954.0", + "1500000.0", + "0.0" + ], + [ + "2000", + "2100000.0", + "1575000.0", + "1.0", + "1.0", + "2100000.0", + "0.75", + "1574952.0", + "1575000.0", + "0.0" + ], + [ + "2001", + "2205000.0", + "1653750.0", + "1.0", + "1.0", + "2205000.0", + "0.75", + "1653699.0", + "1653750.0", + "0.0" + ], + [ + "2002", + "2315250.0", + "1736438.0", + "1.0", + "1.0", + "2315250.0", + "0.75", + "1736384.0", + "1736438.0", + "0.0" + ], + [ + "2003", + "2431013.0", + "1814751.0", + "1.005", + "0.995", + "2418918.0", + "0.75", + "1823204.0", + "1823822.0", + "9071.0" + ], + [ + "2004", + "2552563.0", + "1885068.0", + "1.016", + "0.984", + "2512365.0", + "0.75", + "1914363.0", + "1915317.0", + "30249.0" + ], + [ + "2005", + "2999262.0", + "2193545.0", + "1.032", + "0.969", + "2906262.0", + "0.755", + "2249377.0", + "2263952.0", + "70407.0" + ], + [ + "2006", + "3564016.0", + "2471446.0", + "1.09", + "0.917", + "3269739.0", + "0.756", + "2672930.0", + "2692420.0", + "220974.0" + ], + [ + "2007", + "4281446.0", + "2680487.0", + "1.2", + "0.833", + "3567872.0", + "0.751", + "3210986.0", + "3216150.0", + "535663.0" + ], + [ + "2008", + "5196516.0", + "2556695.0", + "1.5", + "0.667", + "3464344.0", + "0.738", + "3897267.0", + "3856268.0", + "1299573.0" + ] + ], + "shape": { + "columns": 9, + "rows": 10 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Earned PremiumReported ClaimsCDF to Ultimate% ReportedUsed-Up PremiumEstimated Claim RatioExpected ClaimsProjected UltimateIBNR
19992000000.01500000.01.0001.0002000000.00.7501499954.01500000.00.0
20002100000.01575000.01.0001.0002100000.00.7501574952.01575000.00.0
20012205000.01653750.01.0001.0002205000.00.7501653699.01653750.00.0
20022315250.01736438.01.0001.0002315250.00.7501736384.01736438.00.0
20032431013.01814751.01.0050.9952418918.00.7501823204.01823822.09071.0
20042552563.01885068.01.0160.9842512365.00.7501914363.01915317.030249.0
20052999262.02193545.01.0320.9692906262.00.7552249377.02263952.070407.0
20063564016.02471446.01.0900.9173269739.00.7562672930.02692420.0220974.0
20074281446.02680487.01.2000.8333567872.00.7513210986.03216150.0535663.0
20085196516.02556695.01.5000.6673464344.00.7383897267.03856268.01299573.0
\n", + "
" + ], + "text/plain": [ + " Earned Premium Reported Claims CDF to Ultimate % Reported Used-Up Premium Estimated Claim Ratio Expected Claims Projected Ultimate IBNR\n", + "1999 2000000.0 1500000.0 1.000 1.000 2000000.0 0.750 1499954.0 1500000.0 0.0\n", + "2000 2100000.0 1575000.0 1.000 1.000 2100000.0 0.750 1574952.0 1575000.0 0.0\n", + "2001 2205000.0 1653750.0 1.000 1.000 2205000.0 0.750 1653699.0 1653750.0 0.0\n", + "2002 2315250.0 1736438.0 1.000 1.000 2315250.0 0.750 1736384.0 1736438.0 0.0\n", + "2003 2431013.0 1814751.0 1.005 0.995 2418918.0 0.750 1823204.0 1823822.0 9071.0\n", + "2004 2552563.0 1885068.0 1.016 0.984 2512365.0 0.750 1914363.0 1915317.0 30249.0\n", + "2005 2999262.0 2193545.0 1.032 0.969 2906262.0 0.755 2249377.0 2263952.0 70407.0\n", + "2006 3564016.0 2471446.0 1.090 0.917 3269739.0 0.756 2672930.0 2692420.0 220974.0\n", + "2007 4281446.0 2680487.0 1.200 0.833 3567872.0 0.751 3210986.0 3216150.0 535663.0\n", + "2008 5196516.0 2556695.0 1.500 0.667 3464344.0 0.738 3897267.0 3856268.0 1299573.0" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The friedland_us_auto sample carries all scenarios under a Scenario index, with\n", + "# earned premium per the text's Exhibit IV, Sheet 1 assumptions. Select the two\n", + "# product-mix scenarios by label.\n", + "us_auto = cl.load_sample(\"friedland_us_auto\")\n", + "us_auto_scenarios = {\n", + " \"Steady-State (No Change in Product Mix)\": \"Steady State\",\n", + " \"Changing Product Mix\": \"Changing Product Mix\",\n", + "}\n", + "\n", + "\n", + "def us_auto_cc_scenario(scenario):\n", + " \"\"\"Recreate a U.S. Auto product-mix Cape Cod scenario (Exhibit IV).\"\"\"\n", + " tri = us_auto.loc[scenario]\n", + " reported = tri[\"Reported Claims\"]\n", + " premium = tri[\"Earned Premium\"].latest_diagonal\n", + " years = list(reported.origin.year)\n", + "\n", + " # Chapter 7 selection: five-year simple average reported development, 1.000 tail.\n", + " reported_dev = cl.TailConstant(tail=1.0, projection_period=0).fit_transform(\n", + " cl.Development(n_periods=5, average=\"simple\").fit_transform(reported))\n", + " reported_dev.ldf_ = reported_dev.ldf_.round(3)\n", + "\n", + " cc = cl.CapeCod().fit(reported_dev, sample_weight=premium)\n", + " apriori = float(cc.apriori_.to_frame().iloc[0, 0])\n", + "\n", + " # model_diagnostics packages Latest, CDF, Ultimate, and IBNR by accident year.\n", + " diag = cl.model_diagnostics(cc)\n", + " cdf = np.maximum(col(diag[\"CDF\"]), 1.0).round(3)\n", + " prem = col(premium)\n", + " reported_latest = col(diag[\"Latest\"])\n", + " used_up = prem / cdf\n", + " # CapeCod returns NaN IBNR for fully developed years (CDF = 1.000); coerce to 0.\n", + " ibnr = np.nan_to_num(col(diag[\"IBNR\"]))\n", + "\n", + " out = pd.DataFrame(index=years)\n", + " out[\"Earned Premium\"] = prem\n", + " out[\"Reported Claims\"] = reported_latest\n", + " out[\"CDF to Ultimate\"] = cdf.round(3)\n", + " out[\"% Reported\"] = (1 / cdf).round(3)\n", + " out[\"Used-Up Premium\"] = used_up.round(0)\n", + " out[\"Estimated Claim Ratio\"] = (reported_latest / used_up).round(3)\n", + " out[\"Expected Claims\"] = (prem * apriori).round(0)\n", + " out[\"Projected Ultimate\"] = col(diag[\"Ultimate\"]).round(0)\n", + " out[\"IBNR\"] = ibnr.round(0)\n", + " return apriori, out\n", + "\n", + "\n", + "us_auto_results = {\n", + " label: us_auto_cc_scenario(scenario) for label, scenario in us_auto_scenarios.items()\n", + "}\n", + "for name, (apriori, table) in us_auto_results.items():\n", + " print(f\"{name} - all-years estimated claim ratio {apriori:.3f}\")\n", + " display(table)" + ] + }, + { + "cell_type": "markdown", + "id": "099431d3", + "metadata": {}, + "source": [ + "### Reconciliation to Friedland\n", + "\n", + "Both scenarios derive a 75.0% all-years claim ratio. The steady-state IBNR\n", + "reconciles to the actual requirement, while the changing-product-mix IBNR is\n", + "understated relative to the actual, as the text describes." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "b1e5e298", + "metadata": {}, + "outputs": [], + "source": [ + "us_apriori = {name: apriori for name, (apriori, table) in us_auto_results.items()}\n", + "us_ibnr = {name: table[\"IBNR\"].sum() for name, (apriori, table) in us_auto_results.items()}\n", + "\n", + "# Both scenarios derive the text's 75.0% all-years estimated claim ratio.\n", + "assert np.isclose(us_apriori[\"Steady-State (No Change in Product Mix)\"], 0.750, atol=2e-3)\n", + "assert np.isclose(us_apriori[\"Changing Product Mix\"], 0.750, atol=2e-3)\n", + "\n", + "# Steady-state reconciles to the actual IBNR requirement; the changing product mix\n", + "# understates it (the text's actual is 2,391,084).\n", + "assert np.isclose(us_ibnr[\"Steady-State (No Change in Product Mix)\"], 1394634, rtol=6e-3)\n", + "assert np.isclose(us_ibnr[\"Changing Product Mix\"], 2168000, rtol=6e-3)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "chainladder (3.13.5)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}