diff --git a/docs/getting_started/online_sandbox/sandbox_workbook_blank.ipynb b/docs/getting_started/online_sandbox/sandbox_workbook_blank.ipynb index ca16ca2e..f95a6f46 100644 --- a/docs/getting_started/online_sandbox/sandbox_workbook_blank.ipynb +++ b/docs/getting_started/online_sandbox/sandbox_workbook_blank.ipynb @@ -1,845 +1,845 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "0f0e5e3b-ac37-4865-8c51-ded927ea9b46", - "metadata": {}, - "source": [ - "# Online Sandbox Tutorial\n", - "\n", - "Welcome! If you've come here to explore the capabilities of the `chainladder-python` package, you've landed in the perfect spot. This online sandbox tutorial is designed to provide you with a glimpse of the package's functionalities. \n", - "\n", - "We recommend setting aside about **one hour** to complete it.\n", - "\n", - "Got Stuck? Click [here](https://nbviewer.org/github/casact/chainladder-python/blob/master/docs/getting_started/online_sandbox/sandbox_workbook_filled.ipynb) for the filled in workbook. Have questions? Join the [discussion](https://github.com/casact/chainladder-python/discussions) on GitHub." - ] - }, - { - "cell_type": "markdown", - "id": "d8f38e79-5010-4190-b38c-cbc1d85bde47", - "metadata": { - "tags": [] - }, - "source": [ - "# Setting Up\n", - "We will first need to install the package, as Google Colab's default environment doesn't have the chainladder package pre-installed. \n", - "\n", - "Simply execute `pip install chainladder`, Colab is smart enough to know that this is not a piece of python code, but to execute it in shell. FYI, `pip` stands for \"Package Installer for Python\". You will need to run this step using your terminal instead of using a python notebook when you are ready to install the package on your machine." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "be51a379-5efe-420e-b689-3bf93b96ebc8", - "metadata": {}, - "outputs": [], - "source": [ - "pip install __fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "3d2bde34-d9e8-436d-8819-675e2ece7bc9", - "metadata": {}, - "source": [ - "`%load_ext lab_black` is a linter, it makes code prettier, you may ignore this line." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "882cc191-5849-471e-8e13-65fdf3e01419", - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext lab_black" - ] - }, - { - "cell_type": "markdown", - "id": "011ee825-ca6d-4efc-b782-5e6f2a14bead", - "metadata": {}, - "source": [ - "Other commonly used packages, such as `numpy`, `pandas`, and `matplotlib` are already pre-installed, we just need to load them into our environment." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "03fdf8fd-ecd1-4df4-b9cf-a4bf01d978f0", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import chainladder as cl\n", - "\n", - "print(\"chainladder\", cl.__version__)" - ] - }, - { - "cell_type": "markdown", - "id": "42e0f37f-6d82-46ed-9f80-647cc7233046", - "metadata": {}, - "source": [ - "# Your Journey Begins" - ] - }, - { - "cell_type": "markdown", - "id": "c9a3a636-979a-4205-9762-469e8afb7e46", - "metadata": {}, - "source": [ - "Let's begin by looking at a sample dataset, called `xyz`, which is hosted on https://raw.githubusercontent.com/casact/chainladder-python/master/chainladder/utils/data/xyz.csv.\n", - "\n", - "Let's load the dataset into the memory with `pandas`, then inspect its \"`head`\"." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aa2c95b8-86b4-4846-b950-12c402477ec1", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "xyz_df = pd.read_csv(\n", - " __fill_in_code__\n", - ")\n", - "xyz_df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "996795b6-9361-4b5c-a00d-d9b6391b115f", - "metadata": {}, - "source": [ - "Can you list all of the unique accident years?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4c11052c-291e-439f-ac0f-6736bb2b0b68", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_df[__fill_in_code__].unique()" - ] - }, - { - "cell_type": "markdown", - "id": "3d5be56c-1432-4ba2-85bc-16412fee1d66", - "metadata": {}, - "source": [ - "How many are there?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cfeca5a6-366f-4abb-b3e9-51c91e7b9336", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_df[__fill_in_code__].nunique()" - ] - }, - { - "cell_type": "markdown", - "id": "8f870f4f-117c-467d-b3d7-d2941f964f23", - "metadata": {}, - "source": [ - "# Triangle Basics" - ] - }, - { - "cell_type": "markdown", - "id": "4d4ebbf6-bcdc-4c4f-be8c-168c4e7883ea", - "metadata": {}, - "source": [ - "Let's load the data into the chainladder triangle format. And let's call it `xyz_tri`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2b51e0b6-c1d3-4976-8866-4800b15d27ec", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri = cl.Triangle(\n", - " data=__fill_in_code__,\n", - " origin=\"AccidentYear\",\n", - " development=\"DevelopmentYear\",\n", - " columns=[\"Incurred\", \"Paid\", \"Reported\", \"Closed\", \"Premium\"],\n", - " cumulative=True,\n", - ")\n", - "xyz_tri" - ] - }, - { - "cell_type": "markdown", - "id": "2c404d26-4418-43b8-8687-58be1b6423f1", - "metadata": {}, - "source": [ - "What does the incurred triangle look like?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fe9309fe-2744-4e4d-beff-0a36c1182386", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri[__fill_in_code__]" - ] - }, - { - "cell_type": "markdown", - "id": "ed9811e6-5761-4258-9942-19a620540361", - "metadata": {}, - "source": [ - "How about paid?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "278856cf-6d84-4fa6-ac57-4f57755580b8", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri[__fill_in_code__]" - ] - }, - { - "cell_type": "markdown", - "id": "04114ff8-107a-4c56-ab9a-8c36f53553df", - "metadata": {}, - "source": [ - "# Pandas-like Operations" - ] - }, - { - "cell_type": "markdown", - "id": "433b8ae8-1968-4dfc-a176-c8a8c93c5f97", - "metadata": {}, - "source": [ - "Let's see how `.iloc[...]` and `.loc[...]` similarly to pandas. They take 4 parameters: [index, column, origin, valuation]." - ] - }, - { - "cell_type": "markdown", - "id": "f0452527-796d-4185-929a-97241329b377", - "metadata": {}, - "source": [ - "What if we want the row from AY 1998 Incurred data?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a13a157b-3fe9-4254-bc72-11d4e1705f29", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri.iloc[__fill_in_code__, __fill_in_code__, __fill_in_code__, __fill_in_code__]" - ] - }, - { - "cell_type": "markdown", - "id": "08b8557c-66fe-4a25-a8bf-5413ca1c1fbb", - "metadata": {}, - "source": [ - "What if you only want the valuation at age 60 of AY 1998?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fb20eda1-4e4a-431d-8c8a-21cc87b8c472", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri.iloc[__fill_in_code__, __fill_in_code__, __fill_in_code__, __fill_in_code__]" - ] - }, - { - "cell_type": "markdown", - "id": "56683ffb-01ef-4e18-ba27-1b8ab31b9ae7", - "metadata": {}, - "source": [ - "Let's use `.loc[...]` to get the incurred triangle." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b8116ded-c788-483c-b2af-fde45b72ee4a", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri.loc[__fill_in_code__, __fill_in_code__, __fill_in_code__, __fill_in_code__]" - ] - }, - { - "cell_type": "markdown", - "id": "c9d515b7-c9a3-4045-ad79-78af1574be8a", - "metadata": {}, - "source": [ - "How do we get the latest Incurred diagonal only?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5bce08b8-bf34-418e-ac3b-db253db44898", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri[\"Incurred\"].__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "31b56210-cbcd-4bbb-af9f-063a3788867a", - "metadata": {}, - "source": [ - "Very often, we want incremental triangles instead. Let's convert the Incurred triangle to the incremental form." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b2766e7b-b1e6-4574-bfa7-fd70ccd556d7", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri[\"Incurred\"].__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "6235668f-9025-4108-b987-f867f93c8ce6", - "metadata": {}, - "source": [ - "We can also convert the triangle to the valuation format, what we often see on Schedule Ps." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "72487c9a-4438-4ab7-8a24-245485d4c637", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri[\"Incurred\"].__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "6e404747-8e22-42c0-a1b5-45c95d702730", - "metadata": {}, - "source": [ - "Another function that is often useful is the `.heatmap()` method. Let's inspect the incurred amount and see if there are trends." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f20ed887-e5b1-40f7-81b5-14bd840cca23", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri[\"Incurred\"].__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "27d110d2-ee73-4bb5-a411-3d27c0dd7673", - "metadata": {}, - "source": [ - "# Development" - ] - }, - { - "cell_type": "markdown", - "id": "a0d0950f-bec7-406d-b253-4cf1bfd925dd", - "metadata": {}, - "source": [ - "How can we get the incurred link ratios?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ec16d0fd-ac17-4280-aabf-ad5795114d5f", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri[\"Incurred\"].__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "c74c5352-a95b-4403-8322-962ded312e39", - "metadata": {}, - "source": [ - "We can also apply a `.heatmap()` to make it too, to help us visulize the highs and lows." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "172c70be-2324-472f-b89c-29963695179a", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri[\"Incurred\"].__fill_in_code__.__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "f5f212b0-3769-49cd-b7cc-b484f2877aa2", - "metadata": {}, - "source": [ - "Let's get a volume-weighted average LDFs for our Incurred triangle." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ba0b96cb-77eb-472c-84fd-c5c8c5c11e10", - "metadata": {}, - "outputs": [], - "source": [ - "cl.Development(average=\"volume\").fit(__fill_in_code__).ldf_" - ] - }, - { - "cell_type": "markdown", - "id": "0c4baafd-e141-4566-a4ae-2f0a44ef828e", - "metadata": {}, - "source": [ - "How about the CDFs?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b156f84b-dd0d-49d6-8eec-070d0143f40c", - "metadata": {}, - "outputs": [], - "source": [ - "cl.Development(average=\"volume\").fit(__fill_in_code__).__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "d51e5664-3106-41d1-b77f-8afa9ee94ff7", - "metadata": {}, - "source": [ - "We can also use only the latest 3 periods in the calculation of CDFs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "de88fdad-5d89-4cc2-adb0-bbeb7c77bbcb", - "metadata": {}, - "outputs": [], - "source": [ - "cl.Development(average=\"volume\", n_periods=__fill_in_code__).fit(xyz_tri[\"Incurred\"]).cdf_" - ] - }, - { - "cell_type": "markdown", - "id": "b018bae9-6070-4795-8af6-b5e196aa1af1", - "metadata": {}, - "source": [ - "# Deterministic Models" - ] - }, - { - "cell_type": "markdown", - "id": "e7c7b88e-205d-45c8-b9e6-4586f29041a4", - "metadata": {}, - "source": [ - "Before we can build any models, we need to use `fit_transform()`, so that the object is actually modified with our selected development pattern(s).\n", - "\n", - "Set the development of the triangle to use only 3 periods." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9e5136d2-0c3c-44da-8440-57ca3cfbbb9d", - "metadata": {}, - "outputs": [], - "source": [ - "cl.Development(__fill_in_code__).fit_transform(__fill_in_code__)" - ] - }, - { - "cell_type": "markdown", - "id": "1bd89481-e5c7-4a84-b2cc-a2e386ccdb15", - "metadata": {}, - "source": [ - "Let's fit a chainladder model to our Incurred triangle." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "022e22e9-92a8-427c-bf5c-cf352df1437c", - "metadata": {}, - "outputs": [], - "source": [ - "cl_mod = cl.Chainladder().fit(__fill_in_code__)\n", - "cl_mod" - ] - }, - { - "cell_type": "markdown", - "id": "7b710342-5f86-408e-bf7e-76382b37f2d1", - "metadata": {}, - "source": [ - "How can we get the model's ultimate estimate?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "69f18923-73b1-4b80-9148-60a7bab5b118", - "metadata": {}, - "outputs": [], - "source": [ - "cl_mod.__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "b416a404-8d0f-46fc-a3e7-f5b5b884b4b4", - "metadata": {}, - "source": [ - "How about just the IBNR?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5fad3aa0-03bc-4f84-a8b7-1a00dbdebe8d", - "metadata": {}, - "outputs": [], - "source": [ - "cl_mod.__fill_in_code__" - ] - }, - { - "cell_type": "markdown", - "id": "70d8c018-21ca-4f2c-a764-433e310bb44a", - "metadata": {}, - "source": [ - "Let's fit an Expected Loss model, with an aprior of 90% on Premium, and get its ultimates." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "22eba9fa-1890-4f6f-8a10-281142d2d58d", - "metadata": {}, - "outputs": [], - "source": [ - "cl.ExpectedLoss(apriori=0.90).fit(\n", - " __fill_in_code__, sample_weight=xyz_tri[\"Premium\"].latest_diagonal\n", - ").ultimate_" - ] - }, - { - "cell_type": "markdown", - "id": "eb20b72a-4e49-4eaa-b8e8-d3801833e2d3", - "metadata": {}, - "source": [ - "Try it on the Paid triangle, do you get the same ultimate?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "411f48b0-8b86-4175-80f2-f5f4a19e6c46", - "metadata": {}, - "outputs": [], - "source": [ - "cl.ExpectedLoss(apriori=0.90).fit(\n", - " __fill_in_code__, sample_weight=__fill_in_code__\n", - ").ultimate_" - ] - }, - { - "cell_type": "markdown", - "id": "fb1d7eda-f4c6-4990-9488-47235492001a", - "metadata": {}, - "source": [ - "How about a Bornhuetter-Ferguson model?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d66c7c9a-71eb-4d56-beea-f275da062fc0", - "metadata": {}, - "outputs": [], - "source": [ - "cl.BornhuetterFerguson(apriori=0.90).fit(\n", - " __fill_in_code__, sample_weight=__fill_in_code__\n", - ").ultimate_" - ] - }, - { - "cell_type": "markdown", - "id": "5564ead9-d059-4d2c-839a-f988238e50ee", - "metadata": {}, - "source": [ - "How about Benktander, with 1 iteration, which is the same as BF?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d504e48d-1f5d-4fd6-975b-155235ffb577", - "metadata": {}, - "outputs": [], - "source": [ - "cl.Benktander(apriori=0.90, n_iters=__fill_in_code__).fit(\n", - " __fill_in_code__, sample_weight=__fill_in_code__\n", - ").ultimate_" - ] - }, - { - "cell_type": "markdown", - "id": "002a76c2-7989-46ba-954b-d84c09b4675a", - "metadata": {}, - "source": [ - "How about Cape Cod?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7089ea42-ad28-4edc-9e83-723a7bc25443", - "metadata": {}, - "outputs": [], - "source": [ - "cl.CapeCod().fit(\n", - " __fill_in_code__, sample_weight=__fill_in_code__\n", - ").ultimate_" - ] - }, - { - "cell_type": "markdown", - "id": "5a0d73a2-0e05-4be2-91f0-9ef1ef56a7be", - "metadata": {}, - "source": [ - "Let's store the Cape Cod model as `cc_result`. We can also use `.to_frame()` to leave `chainladder` and go to a `DataFrame`. Let's make a bar chart over origin years to see what they look like." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f2cd9f8c-454d-4b9f-b936-a2f39e8fefde", - "metadata": {}, - "outputs": [], - "source": [ - "cc_result = (\n", - " cl.CapeCod()\n", - " .fit(xyz_tri[\"Incurred\"], sample_weight=xyz_tri[\"Premium\"].latest_diagonal)\n", - " .ultimate_\n", - ")\n", - "plt.plot(\n", - " __fill_in_code__, \n", - " __fill_in_code__,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "3f9e62f8-225b-4046-8847-a6e8d971e14d", - "metadata": {}, - "source": [ - "# Stochastic Models" - ] - }, - { - "cell_type": "markdown", - "id": "36105614-e317-4a87-a42d-282f59b1d339", - "metadata": {}, - "source": [ - "The Mack's Chainladder model is available. Let's use it on the Incurred triangle." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e008ebdb-243d-4ed0-9256-86331df1070a", - "metadata": {}, - "outputs": [], - "source": [ - "mcl_mod = cl.MackChainladder().fit(__fill_in_code__)\n", - "mcl_mod" - ] - }, - { - "cell_type": "markdown", - "id": "3298c63c-5356-4d69-afa3-058b68daf777", - "metadata": {}, - "source": [ - "There are many attributes that are available, such as `full_std_err_`, `total_process_risk_`, `total_parameter_risk_`, `mack_std_err_` and `total_mack_std_err_`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "67f5d99b-7a5e-4640-a6e0-f8b654e6ce27", - "metadata": {}, - "outputs": [], - "source": [ - "__fill_in_code__.full_std_err_" - ] - }, - { - "cell_type": "markdown", - "id": "bdb08c81-5921-4c41-ad63-96168ffd48b7", - "metadata": {}, - "source": [ - "MackChainladder also has a `summary_` attribute." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "81fc38c1-d5b7-4262-94ae-bce5c7ac17e1", - "metadata": {}, - "outputs": [], - "source": [ - "__fill_in_code__.summary_" - ] - }, - { - "cell_type": "markdown", - "id": "0e285585-62b6-48e4-8b1d-c5824ae5df46", - "metadata": {}, - "source": [ - "Let's make a graph, that shows the Reported and IBNR as stacked bars, and error bars showing Mack Standard Errors." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e615b86e-a907-4445-9e95-645090719f76", - "metadata": {}, - "outputs": [], - "source": [ - "plt.bar(\n", - " mcl_mod.summary_.to_frame(origin_as_datetime=True).index.year,\n", - " mcl_mod.summary_.to_frame(origin_as_datetime=True)[__fill_in_code__],\n", - " label=\"Reported\",\n", - ")\n", - "plt.bar(\n", - " mcl_mod.summary_.to_frame(origin_as_datetime=True).index.year,\n", - " mcl_mod.summary_.to_frame(origin_as_datetime=True)[__fill_in_code__],\n", - " bottom=mcl_mod.summary_.to_frame(origin_as_datetime=True)[__fill_in_code__],\n", - " yerr=mcl_mod.summary_.to_frame(origin_as_datetime=True)[__fill_in_code__],\n", - " label=\"IBNR\",\n", - ")\n", - "plt.legend(loc=\"upper left\")" - ] - }, - { - "cell_type": "markdown", - "id": "785120ad-03cf-48a7-90d8-d1d56a75ef88", - "metadata": {}, - "source": [ - "ODP Bootstrap is also available. Let's build sample 10,000 Incurred triangles." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "859e19f3-d526-435c-a845-4845a7a3956d", - "metadata": {}, - "outputs": [], - "source": [ - "xyz_tri_sampled = (\n", - " cl.BootstrapODPSample(n_sims=__fill_in_code__).fit(__fill_in_code__).resampled_triangles_\n", - ")\n", - "xyz_tri_sampled" - ] - }, - { - "cell_type": "markdown", - "id": "4391f730-5309-49b2-9c19-0801e3e66c7c", - "metadata": {}, - "source": [ - "We can fit a basic chainladder to all sampled triangles. We now have 10,000 simulated chainladder models, all (most) with unique LDFs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fe6dbe70-1b2a-4fb0-aa6b-56380534704f", - "metadata": {}, - "outputs": [], - "source": [ - "cl_mod_bootstrapped = cl.Chainladder().fit(xyz_tri_sampled)\n", - "cl_mod_bootstrapped" - ] - }, - { - "cell_type": "markdown", - "id": "bb3d7c32-9e75-4ae4-ab23-0ca3f2a436b5", - "metadata": {}, - "source": [ - "Let's make another graph." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "edeba1db-97e6-43df-b1c0-590c2d7cd098", - "metadata": {}, - "outputs": [], - "source": [ - "plt.bar(\n", - " cl_mod_bootstrapped.ultimate_.mean().to_frame(origin_as_datetime=True).index.year,\n", - " cl_mod_bootstrapped.ultimate_.mean().to_frame(origin_as_datetime=True)[\"2261\"],\n", - " yerr=cl_mod_bootstrapped.ultimate_.std().to_frame(origin_as_datetime=True)[\"2261\"],\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.9.17" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "cells": [ + { + "cell_type": "markdown", + "id": "0f0e5e3b-ac37-4865-8c51-ded927ea9b46", + "metadata": {}, + "source": [ + "# Online Sandbox Tutorial\n", + "\n", + "Welcome! If you've come here to explore the capabilities of the `chainladder-python` package, you've landed in the perfect spot. This online sandbox tutorial is designed to provide you with a glimpse of the package's functionalities. \n", + "\n", + "We recommend setting aside about **one hour** to complete it.\n", + "\n", + "Got Stuck? Click [here](https://nbviewer.org/github/casact/chainladder-python/blob/master/docs/getting_started/online_sandbox/sandbox_workbook_filled.ipynb) for the filled in workbook. Have questions? Join the [discussion](https://github.com/casact/chainladder-python/discussions) on GitHub." + ] + }, + { + "cell_type": "markdown", + "id": "d8f38e79-5010-4190-b38c-cbc1d85bde47", + "metadata": { + "tags": [] + }, + "source": [ + "# Setting Up\n", + "We will first need to install the package, as Google Colab's default environment doesn't have the chainladder package pre-installed. \n", + "\n", + "Simply execute `pip install chainladder`, Colab is smart enough to know that this is not a piece of python code, but to execute it in shell. FYI, `pip` stands for \"Package Installer for Python\". You will need to run this step using your terminal instead of using a python notebook when you are ready to install the package on your machine." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "be51a379-5efe-420e-b689-3bf93b96ebc8", + "metadata": {}, + "outputs": [], + "source": [ + "pip install __fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "3d2bde34-d9e8-436d-8819-675e2ece7bc9", + "metadata": {}, + "source": [ + "`%load_ext lab_black` is a linter, it makes code prettier, you may ignore this line." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "882cc191-5849-471e-8e13-65fdf3e01419", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext lab_black" + ] + }, + { + "cell_type": "markdown", + "id": "011ee825-ca6d-4efc-b782-5e6f2a14bead", + "metadata": {}, + "source": [ + "Other commonly used packages, such as `numpy`, `pandas`, and `matplotlib` are already pre-installed, we just need to load them into our environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03fdf8fd-ecd1-4df4-b9cf-a4bf01d978f0", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import chainladder as cl\n", + "\n", + "print(\"chainladder\", cl.__version__)" + ] + }, + { + "cell_type": "markdown", + "id": "42e0f37f-6d82-46ed-9f80-647cc7233046", + "metadata": {}, + "source": [ + "# Your Journey Begins" + ] + }, + { + "cell_type": "markdown", + "id": "c9a3a636-979a-4205-9762-469e8afb7e46", + "metadata": {}, + "source": [ + "Let's begin by looking at a sample dataset, called `xyz`, which is hosted on https://raw.githubusercontent.com/casact/chainladder-python/master/chainladder/utils/data/xyz.csv.\n", + "\n", + "Let's load the dataset into the memory with `pandas`, then inspect its \"`head`\"." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aa2c95b8-86b4-4846-b950-12c402477ec1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "xyz_df = pd.read_csv(\n", + " __fill_in_code__\n", + ")\n", + "xyz_df.head()" + ] + }, + { + "cell_type": "markdown", + "id": "996795b6-9361-4b5c-a00d-d9b6391b115f", + "metadata": {}, + "source": [ + "Can you list all of the unique accident years?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4c11052c-291e-439f-ac0f-6736bb2b0b68", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_df[__fill_in_code__].unique()" + ] + }, + { + "cell_type": "markdown", + "id": "3d5be56c-1432-4ba2-85bc-16412fee1d66", + "metadata": {}, + "source": [ + "How many are there?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cfeca5a6-366f-4abb-b3e9-51c91e7b9336", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_df[__fill_in_code__].nunique()" + ] + }, + { + "cell_type": "markdown", + "id": "8f870f4f-117c-467d-b3d7-d2941f964f23", + "metadata": {}, + "source": [ + "# Triangle Basics" + ] + }, + { + "cell_type": "markdown", + "id": "4d4ebbf6-bcdc-4c4f-be8c-168c4e7883ea", + "metadata": {}, + "source": [ + "Let's load the data into the chainladder triangle format. And let's call it `xyz_tri`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b51e0b6-c1d3-4976-8866-4800b15d27ec", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri = cl.Triangle(\n", + " data=__fill_in_code__,\n", + " origin=\"AccidentYear\",\n", + " development=\"DevelopmentYear\",\n", + " columns=[\"Incurred\", \"Paid\", \"Reported\", \"Closed\", \"Premium\"],\n", + " cumulative=True,\n", + ")\n", + "xyz_tri" + ] + }, + { + "cell_type": "markdown", + "id": "2c404d26-4418-43b8-8687-58be1b6423f1", + "metadata": {}, + "source": [ + "What does the incurred triangle look like?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fe9309fe-2744-4e4d-beff-0a36c1182386", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri[__fill_in_code__]" + ] + }, + { + "cell_type": "markdown", + "id": "ed9811e6-5761-4258-9942-19a620540361", + "metadata": {}, + "source": [ + "How about paid?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "278856cf-6d84-4fa6-ac57-4f57755580b8", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri[__fill_in_code__]" + ] + }, + { + "cell_type": "markdown", + "id": "04114ff8-107a-4c56-ab9a-8c36f53553df", + "metadata": {}, + "source": [ + "# Pandas-like Operations" + ] + }, + { + "cell_type": "markdown", + "id": "433b8ae8-1968-4dfc-a176-c8a8c93c5f97", + "metadata": {}, + "source": [ + "Let's see how `.iloc[...]` and `.loc[...]` similarly to pandas. They take 4 parameters: [index, column, origin, valuation]." + ] + }, + { + "cell_type": "markdown", + "id": "f0452527-796d-4185-929a-97241329b377", + "metadata": {}, + "source": [ + "What if we want the row from AY 1998 Incurred data?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a13a157b-3fe9-4254-bc72-11d4e1705f29", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri.iloc[__fill_in_code__, __fill_in_code__, __fill_in_code__, __fill_in_code__]" + ] + }, + { + "cell_type": "markdown", + "id": "08b8557c-66fe-4a25-a8bf-5413ca1c1fbb", + "metadata": {}, + "source": [ + "What if you only want the valuation at age 60 of AY 1998?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb20eda1-4e4a-431d-8c8a-21cc87b8c472", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri.iloc[__fill_in_code__, __fill_in_code__, __fill_in_code__, __fill_in_code__]" + ] + }, + { + "cell_type": "markdown", + "id": "56683ffb-01ef-4e18-ba27-1b8ab31b9ae7", + "metadata": {}, + "source": [ + "Let's use `.loc[...]` to get the incurred triangle." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8116ded-c788-483c-b2af-fde45b72ee4a", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri.loc[__fill_in_code__, __fill_in_code__, __fill_in_code__, __fill_in_code__]" + ] + }, + { + "cell_type": "markdown", + "id": "c9d515b7-c9a3-4045-ad79-78af1574be8a", + "metadata": {}, + "source": [ + "How do we get the latest Incurred diagonal only?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5bce08b8-bf34-418e-ac3b-db253db44898", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri[\"Incurred\"].__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "31b56210-cbcd-4bbb-af9f-063a3788867a", + "metadata": {}, + "source": [ + "Very often, we want incremental triangles instead. Let's convert the Incurred triangle to the incremental form." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b2766e7b-b1e6-4574-bfa7-fd70ccd556d7", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri[\"Incurred\"].__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "6235668f-9025-4108-b987-f867f93c8ce6", + "metadata": {}, + "source": [ + "We can also convert the triangle to the valuation format, what we often see on Schedule Ps." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "72487c9a-4438-4ab7-8a24-245485d4c637", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri[\"Incurred\"].__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "6e404747-8e22-42c0-a1b5-45c95d702730", + "metadata": {}, + "source": [ + "Another function that is often useful is the `.heatmap()` method. Let's inspect the incurred amount and see if there are trends." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f20ed887-e5b1-40f7-81b5-14bd840cca23", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri[\"Incurred\"].__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "27d110d2-ee73-4bb5-a411-3d27c0dd7673", + "metadata": {}, + "source": [ + "# Development" + ] + }, + { + "cell_type": "markdown", + "id": "a0d0950f-bec7-406d-b253-4cf1bfd925dd", + "metadata": {}, + "source": [ + "How can we get the incurred link ratios?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec16d0fd-ac17-4280-aabf-ad5795114d5f", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri[\"Incurred\"].__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "c74c5352-a95b-4403-8322-962ded312e39", + "metadata": {}, + "source": [ + "We can also apply a `.heatmap()` to make it too, to help us visulize the highs and lows." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "172c70be-2324-472f-b89c-29963695179a", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri[\"Incurred\"].__fill_in_code__.__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "f5f212b0-3769-49cd-b7cc-b484f2877aa2", + "metadata": {}, + "source": [ + "Let's get a volume-weighted average LDFs for our Incurred triangle." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba0b96cb-77eb-472c-84fd-c5c8c5c11e10", + "metadata": {}, + "outputs": [], + "source": [ + "cl.Development(average=\"volume\").fit(__fill_in_code__).ldf_" + ] + }, + { + "cell_type": "markdown", + "id": "0c4baafd-e141-4566-a4ae-2f0a44ef828e", + "metadata": {}, + "source": [ + "How about the CDFs?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b156f84b-dd0d-49d6-8eec-070d0143f40c", + "metadata": {}, + "outputs": [], + "source": [ + "cl.Development(average=\"volume\").fit(__fill_in_code__).__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "d51e5664-3106-41d1-b77f-8afa9ee94ff7", + "metadata": {}, + "source": [ + "We can also use only the latest 3 periods in the calculation of CDFs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "de88fdad-5d89-4cc2-adb0-bbeb7c77bbcb", + "metadata": {}, + "outputs": [], + "source": [ + "cl.Development(average=\"volume\", n_periods=__fill_in_code__).fit(xyz_tri[\"Incurred\"]).cdf_" + ] + }, + { + "cell_type": "markdown", + "id": "b018bae9-6070-4795-8af6-b5e196aa1af1", + "metadata": {}, + "source": [ + "# Deterministic Models" + ] + }, + { + "cell_type": "markdown", + "id": "e7c7b88e-205d-45c8-b9e6-4586f29041a4", + "metadata": {}, + "source": [ + "Before we can build any models, we need to use `fit_transform()`, so that the object is actually modified with our selected development pattern(s).\n", + "\n", + "Set the development of the triangle to use only 3 periods." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9e5136d2-0c3c-44da-8440-57ca3cfbbb9d", + "metadata": {}, + "outputs": [], + "source": [ + "cl.Development(__fill_in_code__).fit_transform(__fill_in_code__)" + ] + }, + { + "cell_type": "markdown", + "id": "1bd89481-e5c7-4a84-b2cc-a2e386ccdb15", + "metadata": {}, + "source": [ + "Let's fit a chainladder model to our Incurred triangle." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "022e22e9-92a8-427c-bf5c-cf352df1437c", + "metadata": {}, + "outputs": [], + "source": [ + "cl_mod = cl.Chainladder().fit(__fill_in_code__)\n", + "cl_mod" + ] + }, + { + "cell_type": "markdown", + "id": "7b710342-5f86-408e-bf7e-76382b37f2d1", + "metadata": {}, + "source": [ + "How can we get the model's ultimate estimate?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69f18923-73b1-4b80-9148-60a7bab5b118", + "metadata": {}, + "outputs": [], + "source": [ + "cl_mod.__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "b416a404-8d0f-46fc-a3e7-f5b5b884b4b4", + "metadata": {}, + "source": [ + "How about just the IBNR?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fad3aa0-03bc-4f84-a8b7-1a00dbdebe8d", + "metadata": {}, + "outputs": [], + "source": [ + "cl_mod.__fill_in_code__" + ] + }, + { + "cell_type": "markdown", + "id": "70d8c018-21ca-4f2c-a764-433e310bb44a", + "metadata": {}, + "source": [ + "Let's fit an Expected Loss model, with an aprior of 90% on Premium, and get its ultimates." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "22eba9fa-1890-4f6f-8a10-281142d2d58d", + "metadata": {}, + "outputs": [], + "source": [ + "cl.ExpectedLoss(apriori=0.90).fit(\n", + " __fill_in_code__, sample_weight=xyz_tri[\"Premium\"].latest_diagonal\n", + ").ultimate_" + ] + }, + { + "cell_type": "markdown", + "id": "eb20b72a-4e49-4eaa-b8e8-d3801833e2d3", + "metadata": {}, + "source": [ + "Try it on the Paid triangle, do you get the same ultimate?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "411f48b0-8b86-4175-80f2-f5f4a19e6c46", + "metadata": {}, + "outputs": [], + "source": [ + "cl.ExpectedLoss(apriori=0.90).fit(\n", + " __fill_in_code__, sample_weight=__fill_in_code__\n", + ").ultimate_" + ] + }, + { + "cell_type": "markdown", + "id": "fb1d7eda-f4c6-4990-9488-47235492001a", + "metadata": {}, + "source": [ + "How about a Bornhuetter-Ferguson model?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d66c7c9a-71eb-4d56-beea-f275da062fc0", + "metadata": {}, + "outputs": [], + "source": [ + "cl.BornhuetterFerguson(apriori=0.90).fit(\n", + " __fill_in_code__, sample_weight=__fill_in_code__\n", + ").ultimate_" + ] + }, + { + "cell_type": "markdown", + "id": "5564ead9-d059-4d2c-839a-f988238e50ee", + "metadata": {}, + "source": [ + "How about Benktander, with 1 iteration, which is the same as BF?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d504e48d-1f5d-4fd6-975b-155235ffb577", + "metadata": {}, + "outputs": [], + "source": [ + "cl.Benktander(apriori=0.90, n_iters=__fill_in_code__).fit(\n", + " __fill_in_code__, sample_weight=__fill_in_code__\n", + ").ultimate_" + ] + }, + { + "cell_type": "markdown", + "id": "002a76c2-7989-46ba-954b-d84c09b4675a", + "metadata": {}, + "source": [ + "How about Cape Cod?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7089ea42-ad28-4edc-9e83-723a7bc25443", + "metadata": {}, + "outputs": [], + "source": [ + "cl.CapeCod().fit(\n", + " __fill_in_code__, sample_weight=__fill_in_code__\n", + ").ultimate_" + ] + }, + { + "cell_type": "markdown", + "id": "5a0d73a2-0e05-4be2-91f0-9ef1ef56a7be", + "metadata": {}, + "source": [ + "Let's store the Cape Cod model as `cc_result`. We can also use `.to_frame()` to leave `chainladder` and go to a `DataFrame`. Let's make a bar chart over origin years to see what they look like." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2cd9f8c-454d-4b9f-b936-a2f39e8fefde", + "metadata": {}, + "outputs": [], + "source": [ + "cc_result = (\n", + " cl.CapeCod()\n", + " .fit(xyz_tri[\"Incurred\"], sample_weight=xyz_tri[\"Premium\"].latest_diagonal)\n", + " .ultimate_\n", + ")\n", + "plt.plot(\n", + " __fill_in_code__, \n", + " __fill_in_code__,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "3f9e62f8-225b-4046-8847-a6e8d971e14d", + "metadata": {}, + "source": [ + "# Stochastic Models" + ] + }, + { + "cell_type": "markdown", + "id": "36105614-e317-4a87-a42d-282f59b1d339", + "metadata": {}, + "source": [ + "The Mack's Chainladder model is available. Let's use it on the Incurred triangle." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e008ebdb-243d-4ed0-9256-86331df1070a", + "metadata": {}, + "outputs": [], + "source": [ + "mcl_mod = cl.MackChainladder().fit(__fill_in_code__)\n", + "mcl_mod" + ] + }, + { + "cell_type": "markdown", + "id": "3298c63c-5356-4d69-afa3-058b68daf777", + "metadata": {}, + "source": [ + "There are many attributes that are available, such as `full_std_err_`, `total_process_risk_`, `total_parameter_risk_`, `mack_std_err_` and `total_mack_std_err_`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67f5d99b-7a5e-4640-a6e0-f8b654e6ce27", + "metadata": {}, + "outputs": [], + "source": [ + "__fill_in_code__.full_std_err_" + ] + }, + { + "cell_type": "markdown", + "id": "bdb08c81-5921-4c41-ad63-96168ffd48b7", + "metadata": {}, + "source": [ + "MackChainladder also has a `summary_` attribute." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "81fc38c1-d5b7-4262-94ae-bce5c7ac17e1", + "metadata": {}, + "outputs": [], + "source": [ + "__fill_in_code__.summary_" + ] + }, + { + "cell_type": "markdown", + "id": "0e285585-62b6-48e4-8b1d-c5824ae5df46", + "metadata": {}, + "source": [ + "Let's make a graph, that shows the Reported and IBNR as stacked bars, and error bars showing Mack Standard Errors." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e615b86e-a907-4445-9e95-645090719f76", + "metadata": {}, + "outputs": [], + "source": [ + "plt.bar(\n", + " mcl_mod.summary_.to_frame(origin_as_datetime=True).index.year,\n", + " mcl_mod.summary_.to_frame(origin_as_datetime=True)[__fill_in_code__],\n", + " label=\"Reported\",\n", + ")\n", + "plt.bar(\n", + " mcl_mod.summary_.to_frame(origin_as_datetime=True).index.year,\n", + " mcl_mod.summary_.to_frame(origin_as_datetime=True)[__fill_in_code__],\n", + " bottom=mcl_mod.summary_.to_frame(origin_as_datetime=True)[__fill_in_code__],\n", + " yerr=mcl_mod.summary_.to_frame(origin_as_datetime=True)[__fill_in_code__],\n", + " label=\"IBNR\",\n", + ")\n", + "plt.legend(loc=\"upper left\")" + ] + }, + { + "cell_type": "markdown", + "id": "785120ad-03cf-48a7-90d8-d1d56a75ef88", + "metadata": {}, + "source": [ + "ODP Bootstrap is also available. Let's build sample 10,000 Incurred triangles." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "859e19f3-d526-435c-a845-4845a7a3956d", + "metadata": {}, + "outputs": [], + "source": [ + "xyz_tri_sampled = (\n", + " cl.BootstrapODPSample(n_sims=__fill_in_code__).fit(__fill_in_code__).resampled_triangles_\n", + ")\n", + "xyz_tri_sampled" + ] + }, + { + "cell_type": "markdown", + "id": "4391f730-5309-49b2-9c19-0801e3e66c7c", + "metadata": {}, + "source": [ + "We can fit a basic chainladder to all sampled triangles. We now have 10,000 simulated chainladder models, all (most) with unique LDFs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fe6dbe70-1b2a-4fb0-aa6b-56380534704f", + "metadata": {}, + "outputs": [], + "source": [ + "cl_mod_bootstrapped = cl.Chainladder().fit(xyz_tri_sampled)\n", + "cl_mod_bootstrapped" + ] + }, + { + "cell_type": "markdown", + "id": "bb3d7c32-9e75-4ae4-ab23-0ca3f2a436b5", + "metadata": {}, + "source": [ + "Let's make another graph." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "edeba1db-97e6-43df-b1c0-590c2d7cd098", + "metadata": {}, + "outputs": [], + "source": [ + "plt.bar(\n", + " cl_mod_bootstrapped.ultimate_.mean().to_frame(origin_as_datetime=True).index.year,\n", + " cl_mod_bootstrapped.ultimate_.mean().to_frame(origin_as_datetime=True)[\"2261\"],\n", + " yerr=cl_mod_bootstrapped.ultimate_.std().to_frame(origin_as_datetime=True)[\"2261\"],\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.17" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/docs/getting_started/online_sandbox/sandbox_workbook_filled.ipynb b/docs/getting_started/online_sandbox/sandbox_workbook_filled.ipynb index 60bae6e2..13f7f16f 100644 --- a/docs/getting_started/online_sandbox/sandbox_workbook_filled.ipynb +++ b/docs/getting_started/online_sandbox/sandbox_workbook_filled.ipynb @@ -53,7 +53,13 @@ "Requirement already satisfied: packaging>=20.0 in /Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->chainladder) (23.1)\n", "Requirement already satisfied: pillow>=6.2.0 in /Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->chainladder) (9.3.0)\n", "Requirement already satisfied: pyparsing>=2.2.1 in /Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->chainladder) (3.0.9)\n", +<<<<<<< HEAD "Requirement already satisfied: six in /Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages (from patsy->chainladder) (1.16.0)\n" +======= + "Requirement already satisfied: six in /Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages (from patsy->chainladder) (1.16.0)\n", + "\u001b[33mDEPRECATION: nb-black 1.0.7 has a non-standard dependency specifier black>='19.3'; python_version >= \"3.6\". pip 23.3 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of nb-black or contact the author to suggest that they release a version with a conforming dependency specifiers. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", + "\u001b[0mNote: you may need to restart the kernel to use updated packages.\n" +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 ] } ], @@ -92,7 +98,21 @@ "execution_count": null, "id": "03fdf8fd-ecd1-4df4-b9cf-a4bf01d978f0", "metadata": {}, +<<<<<<< HEAD "outputs": [], +======= + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Intel MKL WARNING: Support of Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled only processors has been deprecated. Intel oneAPI Math Kernel Library 2025.0 will require Intel(R) Advanced Vector Extensions (Intel(R) AVX) instructions.\n", + "Intel MKL WARNING: Support of Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled only processors has been deprecated. Intel oneAPI Math Kernel Library 2025.0 will require Intel(R) Advanced Vector Extensions (Intel(R) AVX) instructions.\n", + "chainladder 0.8.17\n" + ] + } + ], +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 "source": [ "import numpy as np\n", "import pandas as pd\n", @@ -307,7 +327,209 @@ "metadata": { "tags": [] }, +<<<<<<< HEAD "outputs": [], +======= + "outputs": [ + { + "data": { + "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", + "
1224364860728496108120132
199811,17112,38013,21614,06714,68816,36616,16315,83515,822
199913,25516,40519,63922,47323,76425,09424,79525,07125,107
200015,67618,74921,90027,14429,48834,45836,94937,50537,246
200111,82716,00421,02226,57834,20537,13638,54138,798
200212,81120,37026,65637,66744,41448,70148,169
20039,65116,99530,35440,59444,23144,373
200416,99540,18058,86671,70770,288
200528,67447,43270,34070,655
200627,06646,78348,804
200719,47731,732
200818,632
" + ], + "text/plain": [ + " 12 24 36 48 60 72 84 96 108 120 132\n", + "1998 NaN NaN 11171.0 12380.0 13216.0 14067.0 14688.0 16366.0 16163.0 15835.0 15822.0\n", + "1999 NaN 13255.0 16405.0 19639.0 22473.0 23764.0 25094.0 24795.0 25071.0 25107.0 NaN\n", + "2000 15676.0 18749.0 21900.0 27144.0 29488.0 34458.0 36949.0 37505.0 37246.0 NaN NaN\n", + "2001 11827.0 16004.0 21022.0 26578.0 34205.0 37136.0 38541.0 38798.0 NaN NaN NaN\n", + "2002 12811.0 20370.0 26656.0 37667.0 44414.0 48701.0 48169.0 NaN NaN NaN NaN\n", + "2003 9651.0 16995.0 30354.0 40594.0 44231.0 44373.0 NaN NaN NaN NaN NaN\n", + "2004 16995.0 40180.0 58866.0 71707.0 70288.0 NaN NaN NaN NaN NaN NaN\n", + "2005 28674.0 47432.0 70340.0 70655.0 NaN NaN NaN NaN NaN NaN NaN\n", + "2006 27066.0 46783.0 48804.0 NaN NaN NaN NaN NaN NaN NaN NaN\n", + "2007 19477.0 31732.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN\n", + "2008 18632.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 "source": [ "xyz_tri.loc[:, \"Incurred\", :, :]" ] @@ -379,7 +601,292 @@ "execution_count": null, "id": "f20ed887-e5b1-40f7-81b5-14bd840cca23", "metadata": {}, +<<<<<<< HEAD "outputs": [], +======= + "outputs": [ + { + "data": { + "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", + "
 1224364860728496108120132
199811,17112,38013,21614,06714,68816,36616,16315,83515,822
199913,25516,40519,63922,47323,76425,09424,79525,07125,107
200015,67618,74921,90027,14429,48834,45836,94937,50537,246
200111,82716,00421,02226,57834,20537,13638,54138,798
200212,81120,37026,65637,66744,41448,70148,169
20039,65116,99530,35440,59444,23144,373
200416,99540,18058,86671,70770,288
200528,67447,43270,34070,655
200627,06646,78348,804
200719,47731,732
200818,632
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 "source": [ "xyz_tri[\"Incurred\"].heatmap()" ] @@ -423,7 +930,251 @@ "execution_count": null, "id": "172c70be-2324-472f-b89c-29963695179a", "metadata": {}, +<<<<<<< HEAD "outputs": [], +======= + "outputs": [ + { + "data": { + "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", + "
 12-2424-3636-4848-6060-7272-8484-9696-108108-120120-132
19981.10821.06751.06441.04411.11420.98760.97970.9992
19991.23761.19711.14431.05741.05600.98811.01111.0014
20001.19601.16811.23951.08641.16851.07231.01500.9931
20011.35321.31351.26431.28701.08571.03781.0067
20021.59001.30861.41311.17911.09650.9891
20031.76101.78611.33741.08961.0032
20042.36421.46511.21810.9802
20051.65421.48301.0045
20061.72851.0432
20071.6292
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 "source": [ "xyz_tri[\"Incurred\"].link_ratio.heatmap()" ] @@ -678,7 +1429,32 @@ "execution_count": null, "id": "f2cd9f8c-454d-4b9f-b936-a2f39e8fefde", "metadata": {}, +<<<<<<< HEAD "outputs": [], +======= + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 "source": [ "cc_result = (\n", " cl.CapeCod()\n", @@ -767,7 +1543,32 @@ "execution_count": null, "id": "e615b86e-a907-4445-9e95-645090719f76", "metadata": {}, +<<<<<<< HEAD "outputs": [], +======= + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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MJPQcPG7AwB741MAAADYFkEIP9hHH30kh8Oh06dPX7Vm6dKlat68ea21CQCAquAaoRrQ/sm1tXq8w7OG/OBtRo0apWXLlkmSmjRpotjYWA0fPlzPPPOMwsLCrrlt7969lZ+fL5fLVaX2AgBQXxCEbGzw4MFasmSJysvL9cknn+hXv/qVSktL9corr1xzu+DgYOu5cgAANGScGrMxp9Mpt9ut2NhYpaSkaOTIkXr33Xe1YsUKde/eXeHh4XK73UpJSbEeVitd+dTY0qVL1bZtWzVt2lQ/+9nP9PXXX9dBjwAA+GEIQrCEhoaqvLxcPp9Pzz33nD777DO9++67OnTokEaNGnXV7bZt26aHH35Y48aNU25urvr376/f//73tddwAACqiFNjkCRt375dK1eu1IABA/Twww9byzt06KCXXnpJP/nJT1RSUqJmzZpV2vYPf/iDBg0apCeffFKSdNNNN2nLli3KzMystfYDqDulpaXWvw0lJSXfeZ0hUJ8wI2Rja9asUbNmzRQSEqLExETdeeedWrBggXbt2qV7771X7dq1U3h4uPr16ydJOnr06BX388UXXygxMdFv2eXvAQCojwhCNta/f3/l5uZq//79On/+vN555x2FhYUpKSlJzZo104oVK7Rjxw6tXr1a0jffpH0lPLcXANBQcWrMxsLCwnTjjTf6Lfvyyy/1n//8R7NmzVJsbKwk6dNPP73mfrp06aKtW7f6Lbv8PQAA9REzQvDTtm1bBQcHa8GCBfrqq6/03nvv6bnnnrvmNmlpacrMzNTs2bN14MABLVy4kOuDAAANAkEIfm644QYtXbpUb731lrp06aJZs2Zpzpw519ymV69eeu2117RgwQLdeuutysrK0tNPP11LLQYAoOochgs8rqm4uFgul0ter1cRERF+686fP69Dhw4pLi6OJ5c3UPwOgevHXWOoj671+f1tzAgBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADb4unzNSHdVcvH8/7gTUaNGqVly5ZJkgIDA+XxeDRkyBDNmDFDLVq0qO4WAgBQLzEjZGODBw9Wfn6+Dh8+rNdee03vv/++xo0bVydtKS8vr5PjAgDsjSBkY06nU263W23atFFSUpIeeOABZWVlWeuXLFmizp07KyQkRDfffLNefvlla53P59P48ePVqlUrhYSEqH379po5c6a13uv1auzYsYqOjlZERITuuusuffbZZ9b69PR03XrrrfrTn/6kDh06yOl0atGiRWrdurUqKir82jls2DA99NBD1vv3339fCQkJCgkJUYcOHfTMM8/owoULfvtu27atnE6nPB6P0tLSqnXcAACNB6fGIEn66quvlJmZqaCgIEnS4sWLNW3aNC1cuFC33Xabdu3apTFjxigsLEwPPfSQXnrpJb333nv661//qrZt2yovL095eXmSJGOMhgwZosjISK1bt04ul0uLFi3SgAEDdODAAUVGRkqS/vWvf+mvf/2rVq1apcDAQLVu3VppaWnauHGjBgwYIEkqKirSBx98oPfff1+S9MEHH+iXv/ylXnrpJd1xxx06ePCgxo4dK0maNm2a3n77bc2fP18ZGRn60Y9+pIKCAr8ABgDAtxGEbGzNmjVq1qyZLl68qPPnz0uS5s2bJ0l67rnnNHfuXA0fPlySFBcXp3379mnRokV66KGHdPToUXXs2FG33367HA6H2rVrZ+1348aN2r17twoLC+V0OiVJc+bM0bvvvqu3337bCi4+n0/Lly/XDTfcYG07ePBgrVy50gpCb731liIjI63306dP15NPPmnNEHXo0EHPPfecHn/8cU2bNk1Hjx6V2+3WwIEDFRQUpLZt2+onP/lJTQ4jAKAB49SYjfXv31+5ubnatm2bJkyYoEGDBmnChAk6efKk8vLyNHr0aDVr1sx6/f73v9fBgwclfXOxdW5urjp16qS0tDS/U2o5OTkqKSlRy5Yt/bY/dOiQtb0ktWvXzi8ESdLIkSO1atUqlZWVSZLeeOMN/eIXv1BgYKC172effdZvv2PGjFF+fr7Onj2r+++/X+fOnVOHDh00ZswYrV692u+0GQAA38aMkI2FhYXpxhtvlCS99NJL6t+/v5555hmNHz9e0jenx3r27Om3zaVA0q1bNx06dEh///vftWHDBo0YMUIDBw7U22+/rYqKCrVq1UofffRRpWM2b97c7/iXGzp0qCoqKrR27Vr16NFDn3zyiTVLJUkVFRV65plnrJmqbwsJCVFsbKz279+v9evXa8OGDRo3bpxeeOEFbdq0yTrtBwDAJQQhWKZNm6Z77rlHv/71r9W6dWt99dVXGjly5FXrIyIi9MADD+iBBx7Qz3/+cw0ePFinTp1St27dVFBQoCZNmqh9+/Y/qA2hoaEaPny43njjDf3rX//STTfdpISEBGt9t27dtH//fivAXW0fw4YN07Bhw/TYY4/p5ptv1u7du9WtW7cf1BYAQONHEIKlX79++tGPfqQZM2YoPT1daWlpioiI0D333KOysjJ9+umnKioq0qRJkzR//ny1atVKt956qwICAvTWW2/J7XarefPmGjhwoBITE3Xffffp+eefV6dOnfTvf/9b69at03333afu3btfsx0jR47U0KFDtXfvXv3yl7/0W/e///u/Sk5OVmxsrO6//34FBATo888/1+7du/X73/9eS5cu1cWLF9WzZ081bdpUy5cvV2hoqN81TAAAXMI1QvAzadIkLV68WIMGDdJrr72mpUuXqmvXrurbt6+WLl2quLg4SVKzZs30/PPPq3v37urRo4cOHz6sdevWKSAgQA6HQ+vWrdOdd96phx9+WDfddJN+8Ytf6PDhw4qJifnONtx1112KjIzU/v37lZKS4rdu0KBBWrNmjdavX68ePXqoV69emjdvnhV0mjdvrsWLF6tPnz665ZZb9I9//EPvv/++WrZsWf2DBQBo8BzGGFPXjajPiouL5XK55PV6FRER4bfu/PnzOnTokOLi4hQSElJHLcT14HcIXL/S0lI1a9ZMklRSUnLF6/+A2natz+9vY0YIAADYFkEIAADYFkEIAADYFkEIAADYFrfPAwC+ke6q2na+b91zM72VFOy4jjZ4q74tUAXMCFUDbrxruPjdAYC9EYSuw6VHNpw9e7aOW4KquvS74/EbAGBPnBq7DoGBgWrevLkKCwslSU2bNpXDcR1Twqg1xhidPXtWhYWFat68ufUMNQCAvRCErpPb7ZYkKwyhYWnevLn1OwQA2A9B6Do5HA61atVK0dHRKi8vr+vm4AcICgpiJggAbI4gVE0CAwP5UAUAoIHhYmkAAGBbBCEAAGBbBCEAAGBbBCEAAGBbBCEAqMdKS0vlcDjkcDhUWlpa180BGh2CEAAAsC2CEAAAsC2CEAAAsC2CEAAAsC2CEADAFrjwHFdCEAIAALZFEAIAALZFEAIAALZFEAIAALZV7UHowoULevrppxUXF6fQ0FB16NBBzz77rCoqKqwaY4zS09Pl8XgUGhqqfv36ae/evX77KSsr04QJExQVFaWwsDANGzZMx44d86spKipSamqqXC6XXC6XUlNTdfr0ab+ao0ePaujQoQoLC1NUVJTS0tLk8/mqu9sAAKABqvYg9Pzzz+uPf/yjFi5cqC+++EKzZ8/WCy+8oAULFlg1s2fP1rx587Rw4ULt2LFDbrdbd999t86cOWPVTJw4UatXr1ZGRoY2b96skpISJScn6+LFi1ZNSkqKcnNzlZmZqczMTOXm5io1NdVaf/HiRQ0ZMkSlpaXavHmzMjIytGrVKk2ePLm6uw0AABqgJtW9w+zsbN17770aMmSIJKl9+/Z688039emnn0r6ZjboxRdf1FNPPaXhw4dLkpYtW6aYmBitXLlSjzzyiLxer15//XUtX75cAwcOlCStWLFCsbGx2rBhgwYNGqQvvvhCmZmZ2rp1q3r27ClJWrx4sRITE7V//3516tRJWVlZ2rdvn/Ly8uTxeCRJc+fO1ahRozR9+nRFRERUd/cBAEADUu0zQrfffrv+8Y9/6MCBA5Kkzz77TJs3b9ZPf/pTSdKhQ4dUUFCgpKQkaxun06m+fftqy5YtkqScnByVl5f71Xg8HsXHx1s12dnZcrlcVgiSpF69esnlcvnVxMfHWyFIkgYNGqSysjLl5ORcsf1lZWUqLi72ewEAgMap2meEnnjiCXm9Xt18880KDAzUxYsXNX36dD344IOSpIKCAklSTEyM33YxMTE6cuSIVRMcHKwWLVpUqrm0fUFBgaKjoysdPzo62q/m8uO0aNFCwcHBVs3lZs6cqWeeeeaHdhsAADRA1T4j9Je//EUrVqzQypUrtXPnTi1btkxz5szRsmXL/OocDoffe2NMpWWXu7zmSvVVqfm2qVOnyuv1Wq+8vLxrtgkAADRc1R6Efve73+nJJ5/UL37xC3Xt2lWpqan67W9/q5kzZ0qS3G63JFWakSksLLRmb9xut3w+n4qKiq5Zc+LEiUrHP3nypF/N5ccpKipSeXl5pZmiS5xOpyIiIvxeAADAX2N5ZEm1B6GzZ88qIMB/t4GBgdbt83FxcXK73Vq/fr213ufzadOmTerdu7ckKSEhQUFBQX41+fn52rNnj1WTmJgor9er7du3WzXbtm2T1+v1q9mzZ4/y8/OtmqysLDmdTiUkJFRzzwEAQENT7dcIDR06VNOnT1fbtm31ox/9SLt27dK8efP08MMPS/rmVNXEiRM1Y8YMdezYUR07dtSMGTPUtGlTpaSkSJJcLpdGjx6tyZMnq2XLloqMjNSUKVPUtWtX6y6yzp07a/DgwRozZowWLVokSRo7dqySk5PVqVMnSVJSUpK6dOmi1NRUvfDCCzp16pSmTJmiMWPGMNMDoPaku6q+rc/838/TW0nB176E4Opt8Fa9DUAjVu1BaMGCBfqf//kfjRs3ToWFhfJ4PHrkkUf0v//7v1bN448/rnPnzmncuHEqKipSz549lZWVpfDwcKtm/vz5atKkiUaMGKFz585pwIABWrp0qQIDA62aN954Q2lpadbdZcOGDdPChQut9YGBgVq7dq3GjRunPn36KDQ0VCkpKZozZ051dxsAADRADmOM+e4y+youLpbL5ZLX62UWCUDVXMeMUKnPqNnMb75stmRquMJqckboemauqksNzlyVlpaqWbNmkqSSkhKFhYXV2LHsoL6P5/f9/OZZYwAAwLYIQgAAwLYIQgAAwLYIQgAAwLYIQgAAwLYIQgAAwLYIQgAAwLYIQgAA1CON5RleDQVBCAAA2BZBCAAA2BZBCAAA2BZBCAAA2BZBCAAA2BZBCAAA2BZBCAAA2BZBCAAA2FaTum4AAODqwoIdMtMi6roZQKPFjBAAALAtghAAALAtghAAALAtghAAALAtghAAALAtghAAALAtghAAALAtvkcIANCwpLuqtp3P/N/P01tJwY7raIO36tuiXmFGCAAA2BZBCAAA2BZBCAAA2BbXCAEAJEntz6+s6ybocF03ALZDEAKAGkbAAOovTo0BAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbIggBAADbalLXDQAAoNFJd1V9W5/5v5+nt5KCHdfRDm/Vt7UJZoQAAIBtEYQAAIBtEYQAAIBtcY0QAAB2VR+uZarj65hqZEbo+PHj+uUvf6mWLVuqadOmuvXWW5WTk2OtN8YoPT1dHo9HoaGh6tevn/bu3eu3j7KyMk2YMEFRUVEKCwvTsGHDdOzYMb+aoqIipaamyuVyyeVyKTU1VadPn/arOXr0qIYOHaqw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KCjIZGRkWDXHjx83AQEBJjMz0xhjzL59+4wks3XrVqsmOzvbSDJffvllbXSt1tXUWF7J7NmzTVxcXA31pH6o6fFct26dufnmm83evXsbXRC6XE2NZXl5uWndurV57bXXarE3da+mxrM+fw5xaqweKysrkySFhIRYywIDAxUcHKzNmzdbNQ6Hw+/LrEJCQhQQEGDVtGzZUp07d9af//xnlZaW6sKFC1q0aJFiYmKUkJBQiz2qXV6vV5IUGRkpSTp06JAKCgqUlJRk1TidTvXt21dbtmyRJOXk5Ki8vNyvxuPxKD4+3qrJzs6Wy+VSz549rZpevXrJ5XJZNY1NTY3l1Y516TiNVU2O54kTJzRmzBgtX75cTZs2rY3u1KmaGsudO3fq+PHjCggI0G233aZWrVrpnnvuqXRKqLGpqfGsz59DBKF67Oabb1a7du00depUFRUVyefzadasWSooKFB+fr6kbz6Aw8LC9MQTT+js2bMqLS3V7373O1VUVFg1DodD69ev165duxQeHq6QkBDNnz9fmZmZ9f6BslVljNGkSZN0++23Kz4+XpKsh+9e/sDdmJgYa11BQYGCg4PVokWLa9ZER0dXOmZ0dHSlB/w2BjU5lpc7ePCgFixY0KgfgVOT42mM0ahRo/Too4+qe/fuNd2VOleTY/nVV19JktLT0/X0009rzZo1atGihfr27atTp07VaL/qSk2OZ33+HCII1WNBQUFatWqVDhw4oMjISDVt2lQfffSR7rnnHgUGBkqSbrjhBr311lt6//331axZM7lcLnm9XnXr1s2qMcZo3Lhxio6O1ieffKLt27fr3nvvVXJyshWWGpvx48fr888/15tvvllpncPh8HtvjKm07HKX11yp/vvspyGq6bG85N///rcGDx6s+++/X7/61a+ur9H1WE2O54IFC1RcXKypU6dWX4PrsZocy4qKCknSU089pf/+7/9WQkKClixZIofDobfeequaelC/1OR41ufPIYJQPZeQkKDc3FydPn1a+fn5yszM1Ndff624uDirJikpSQcPHlRhYaH+85//aPny5Tp+/LhV8+GHH2rNmjXKyMhQnz591K1bN7388ssKDQ3VsmXL6qprNWbChAl67733tHHjRrVp08Za7na7JanSbERhYaH1vx232y2fz6eioqJr1lx+V54knTx5stL/mhq6mh7LS/7973+rf//+1oORG6uaHs8PP/xQW7duldPpVJMmTXTjjTdKkrp3766HHnqoxvpVF2p6LFu1aiVJ6tKli7Xe6XSqQ4cOOnr0aPV3qI7Vxt9mff0cIgg1EC6XSzfccIP++c9/6tNPP9W9995bqSYqKkrNmzfXhx9+qMLCQg0bNkySdPbsWUlSQID/rzsgIMD6X09jYIzR+PHj9c477+jDDz/0C4uSFBcXJ7fbrfXr11vLfD6fNm3apN69e0v6JngGBQX51eTn52vPnj1WTWJiorxer7Zv327VbNu2TV6v16pp6GprLCXp+PHj6tevn7p166YlS5ZU+jttDGprPF966SV99tlnys3NVW5urtatWydJ+stf/qLp06fXdDdrRW2NZUJCgpxOp9+t5OXl5Tp8+HCjeGj3JbU1nvX6c6j2rsvGlZw5c8bs2rXL7Nq1y0gy8+bNM7t27TJHjhwxxhjz17/+1WzcuNEcPHjQvPvuu6Zdu3Zm+PDhfvv405/+ZLKzs82//vUvs3z5chMZGWkmTZpkrT958qRp2bKlGT58uMnNzTX79+83U6ZMMUFBQSY3N7dW+1uTfv3rXxuXy2U++ugjk5+fb73Onj1r1cyaNcu4XC7zzjvvmN27d5sHH3zwireBtmnTxmzYsMHs3LnT3HXXXVe8ff6WW24x2dnZJjs723Tt2rVR3T5fW2N5/Phxc+ONN5q77rrLHDt2zO9YjUlt/m1+26FDhxrdXWO1OZa/+c1vTOvWrc0HH3xgvvzySzN69GgTHR1tTp06Vat9rkm1NZ71+XOIIFTHNm7caCRVej300EPGGGP+8Ic/mDZt2pigoCDTtm1b8/TTT5uysjK/fTzxxBMmJibGBAUFmY4dO5q5c+eaiooKv5odO3aYpKQkExkZacLDw02vXr3MunXraqubteJK4yjJLFmyxKqpqKgw06ZNM2632zidTnPnnXea3bt3++3n3LlzZvz48SYyMtKEhoaa5ORkc/ToUb+ar7/+2owcOdKEh4eb8PBwM3LkSFNUVFQLvawdtTWWS5YsueqxGpPa/Nv8tsYYhGpzLH0+n5k8ebKJjo424eHhZuDAgX5fZ9IY1OZ41tfPIYcxxtTMXBMAAED91vhOxgMAAHxPBCEAAGBbBCEAAGBbBCEAAGBbBCEAAGBbBCEAAGBbBCEAAGBbBCEAAGBbBCEAAGBbBCEAAGBbBCEAAGBbBCEAAGBb/x/sGAzX8CJcawAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 "source": [ "plt.bar(\n", " mcl_mod.summary_.to_frame(origin_as_datetime=True).index.year,\n", @@ -818,7 +1619,45 @@ "execution_count": null, "id": "fe6dbe70-1b2a-4fb0-aa6b-56380534704f", "metadata": {}, +<<<<<<< HEAD "outputs": [], +======= + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages/chainladder/utils/weighted_regression.py:76: RuntimeWarning: invalid value encountered in sqrt\n", + " residual = (y - fitted_value) * xp.sqrt(w)\n", + "/Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages/chainladder/development/development.py:159: RuntimeWarning: invalid value encountered in sqrt\n", + " / xp.swapaxes(xp.sqrt(x ** (2 - exponent))[..., 0:1, :], -1, -2)\n", + "/Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages/chainladder/development/development.py:167: RuntimeWarning: invalid value encountered in sqrt\n", + " std = xp.sqrt((1 / num_to_nan(w)) * (self.sigma_ ** 2).values)\n", + "/Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages/chainladder/tails/base.py:120: RuntimeWarning: overflow encountered in exp\n", + " sigma_ = xp.exp(time_pd * reg.slope_ + reg.intercept_)\n", + "/Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages/chainladder/tails/base.py:124: RuntimeWarning: overflow encountered in exp\n", + " std_err_ = xp.exp(time_pd * reg.slope_ + reg.intercept_)\n", + "/Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages/chainladder/tails/base.py:127: RuntimeWarning: invalid value encountered in multiply\n", + " sigma_ = sigma_ * 0\n", + "/Users/kennethhsu/opt/anaconda3/lib/python3.9/site-packages/chainladder/tails/base.py:128: RuntimeWarning: invalid value encountered in multiply\n", + " std_err_ = std_err_* 0\n" + ] + }, + { + "data": { + "text/html": [ + "
Chainladder()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "Chainladder()" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 "source": [ "cl_mod_bootstrapped = cl.Chainladder().fit(xyz_tri_sampled)\n", "cl_mod_bootstrapped" @@ -839,7 +1678,32 @@ "metadata": { "tags": [] }, +<<<<<<< HEAD "outputs": [], +======= + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], +>>>>>>> c23481473ff4beacbcca9e4b5243e2f78b4b5b08 "source": [ "plt.bar(\n", " cl_mod_bootstrapped.ultimate_.mean().to_frame(origin_as_datetime=True).index.year,\n",