Premium · Regional insurer, 12 territories, accident years 2021 to 2025

Personal Auto Claims and Reserves

An insurer's book with its ultimate truth

357,438 rows in 6 linked tables: 240,000 policy terms, 24,106 claims and 93,298 claim transactions for a regional personal auto insurer, from the rating of each term through every reserve, payment and recovery on its claims, cut at the close of 31 December 2025. Beside it, the number no insurer has on that day: what each accident year will finally cost once the last injury claim settles.

Why it exists

Reserving actuaries estimate IBNR with the chain ladder and learn how good the estimate was years later. Here the answer is in the box, split into claims not yet reported and development on claims already open. The premium side is complete too: every term is rated by a filed plan (territory, driver, vehicle, limits, deductible, tenure and two rate changes), so loss ratios, on-level premium and the segments the plan prices wrong can all be worked out from the rows.

Uses

What it is built for

  • Loss reserving

    build paid and incurred triangles from the transaction log, estimate IBNR with the chain ladder or Bornhuetter-Ferguson, and score the estimate against ultimate_truth, accident year by accident year.

  • Ratemaking

    earned premium and car-years, frequency and severity by coverage, severity trend, on-level premium from the rate changes, and loss ratios by rating variable to find where the plan undercharges.

  • Catastrophe analysis

    a hail storm in May 2024, its claims by territory and what it does to the accident year.

  • Claims analytics

    report lag, settlement time, litigation, reserve adequacy over a claim's life, reopenings, salvage and subrogation.

  • Teaching and demos

    a CAS or actuarial science course, an insurance analytics portfolio, a reserving tool or a claims dashboard demo, with no policyholder data anywhere.

Project kit

A portfolio project you can check yourself

A brief from the Chief Actuary of a regional personal auto insurer, 18 questions from warm-up to stretch, and an answer key to grade against. Every answer was worked out twice on these files, in DuckDB SQL and separately in pandas, and the kit was written only when the two agreed.

The brief

Year-end 2025 reserve review and the 2026 rate filing

From the Chief Actuary of a regional personal auto insurer · policies from 2020, accident years 2021 to 2025, as at 31 December 2025

  • BRIEF.mdthe request, from the Chief Actuary of a regional personal auto insurer
  • QUESTIONS.md18 questions, each asking for one value in a stated form
  • load.sqlevery table into DuckDB with the right types
  • check.pygrades your answers, names the misreading a wrong one matches
  • solutions/the answer key and the SQL behind every answer
  • WRITEUP_TEMPLATE.mdthe two pages a hiring manager reads

What the checker says

$ python kit/check.py kit/my_answers.csv
  Q05  wrong  that is the answer when you take the premium written in 2025 instead of what was earned

A wrong answer is named for the mistake it matches, such as the wrong rows in a denominator or a mean where a median is asked, without giving the answer away. --reveal shows one answer and its SQL when you want it.

Warm-up
4
Core
8
Stretch
6
Read all 18 questions

Warm-up

  1. Q01. Terms written. How many policy terms were written (took effect) in 2025?
  2. Q02. Claims reported for 2025. How many claims with an accident in 2025 had been reported by the cut?
  3. Q03. Written premium. How much premium was written on terms that took effect in 2025, in dollars?
  4. Q04. Open claims. How many claims were open at the cut?

Core

  1. Q05. Earned premium. How much premium did the book earn in calendar 2025, in dollars? Earn each term's premium net of any return premium evenly by day from its start to its cancellation or expiry.
  2. Q06. Earned car-years. How many car-years did the book earn in calendar 2025 (days in force in 2025, over 365)?
  3. Q07. Collision frequency. For accident year 2023, how many collision claims were there per 100 car-years earned by policies with physical damage cover (full coverage)?
  4. Q08. Injury severity. What was the average paid on bodily injury claims from accident year 2022 that had closed with a payment by the cut?
  5. Q09. The storm. On which date did the most comprehensive claims happen? Give it as YYYY-MM-DD.
  6. Q10. Reported loss ratio, 2024. What was accident year 2024's reported loss ratio at the cut: incurred (paid, less recoveries, plus case reserves) on 2024 accidents over premium earned in 2024?
  7. Q11. Injury report lag. What is the median number of days from accident to report for bodily injury claims?
  8. Q12. Recoveries on collision. For accident year 2023 collision claims, what share of the amount paid came back as salvage and subrogation by the cut?

Stretch

  1. Q13. Paid development, first year. From the transaction log, build the paid triangle (net of recoveries) by accident year and calendar year of payment. What is the volume-weighted development factor from 12 to 24 months, over accident years 2021 to 2024?
  2. Q14. Chain-ladder IBNR. Build the incurred triangle (paid net of recoveries plus case reserves, at each year end) by accident year 2021 to 2025. Using volume-weighted factors and a tail factor of 1, what IBNR does the chain ladder estimate at the cut, in dollars?
  3. Q15. True IBNR. On the ultimate truth, how much more will bodily injury claims from 2021 to 2025 accidents cost than the incurred booked on them at the cut, in dollars?
  4. Q16. How far off the reserve is. By how much does the chain-ladder IBNR differ from the true IBNR, as a percentage of the truth (negative when too low)?
  5. Q17. On-level factor. Bring calendar 2023 earned premium to the current rate level: re-rate each term's earned premium from its own rate level (from rate_changes, by its effective date) to the level after every change. What is the ratio of on-level to actual 2023 earned premium?
  6. Q18. The undercharged drivers. On accident years 2021 to 2023, which driver age band has the highest reported loss ratio at the cut (incurred over premium earned in those years)?

In the data

What the full files show

Computed from every row of the full dataset when it was packaged, not drawn as a target. The free preview is a slice of the same data.

Paid by the cut as a share of the ultimate loss

0%50%100%20212022202320242025
  • Injury claims
  • Damage claims
By accident year, from ultimate_truth. Damage is paid within months of the accident; injuries take years, so most of the youngest years' injury cost is still to pay at the cut. That is what the reserve has to hold.

Ultimate loss ratio by accident year

  • 202166.3%
  • 202271%
  • 202370.8%
  • 202493.1%
  • 202577.8%
What each accident year finally costs over the premium it earned. 2024 carries the May hail storm; 2025 has the second rate change in its premium and severity still rising under it.

Animal strikes and weather claims by month of accident

0.020.040.0Jan 2021Oct 2021Jul 2022Apr 2023Jan 2024Oct 2024Jul 2025
  • Animal strikes
  • Weather
Two comprehensive causes with seasons of their own: animal strikes peak each November with the deer rut, weather claims each early summer. The May 2024 hail storm, 905 claims on one day, is coded hail and left out here; it shows in the loss ratio above.

Loss ratio by insurance score tier, accident years 2021 to 2023

  • A60.6%
  • B67.2%
  • C72.1%
  • D80.5%
Incurred at the cut over earned premium on the three mature years. The filed plan's tier factors do not keep up with how much more often the lower tiers claim.

Answer key

The truth, in its own columns

What a model, a control chart or an analyst is trying to find ships next to the data, so you can score an answer instead of guessing at it. Each line is measured from the full files.

  • ultimate_truth.ibnr_trueWhat each accident year and coverage will still cost beyond the incurred booked at the cut: the reserve's answer.-528,776 to 3.53M, mean 226,695
  • ultimate_truth.ultimate_on_claims_not_reportedThe part of it on claims not yet reported at the cut, IBNR proper.0 to 1.82M, mean 124,365
  • ultimate_truth.development_on_reportedThe rest: how claims already reported will develop, up for injuries, down for damage as recoveries arrive.-631,408 to 1.71M, mean 102,330
  • ultimate_truth.ultimate_lossWhat the accident year and coverage finally cost, net of salvage and subrogation.945,488 to 11.4M, mean 6.71M
  • policies.true_frequency_indexHow often the policy really claims against the book's average, beside the premium the plan charged it.0.034 to 17.17, mean 1
  • claims.catastrophe_codeThe hail storm's code on each claim it caused.1 values: CAT-2405, 96.3% empty

How it behaves

Measured on the files you download

Each of these is computed from the delivered rows when the dataset is packaged, not written as a target.

  • About 38,000 cars insured at any time; an annual term costs $929 on average. 79% of terms carry physical damage cover, and 8% are cancelled before they expire.
  • Rate changes filed: +4.0% from 1 January 2023, +7.5% from 1 July 2024. Severity rises faster than the rates.
  • The May 2024 hail storm brought 905 claims in the hail-belt territories, $5.4 million incurred and 17% of the accident year's.
  • About 1,100 claims were open at the cut, 59% of them injuries. Accident year 2025 was 89% reported in dollars at the cut.
  • Injury reserves develop up: the first reserve is set before treatment is known. Damage reserves develop down: salvage and subrogation, 12% of physical damage paid, arrive after a claim closes.

Audit

67 of 67 checks pass

Re-run on the delivered files by an independent script with plain pandas. The results ship in INTEGRITY.json.

  • every key resolves and every primary key is unique;
  • every premium recomputed from the filed rating plan: territory, driver, vehicle, injury limit, deductible, tenure and the rate level in force on the term's effective date; every term a year long, cancellations inside their term with the unearned premium returned pro rata;
  • every claim inside its policy's term and on a coverage the policy carries; hail claims only in the hail belt, on the storm's day; injury payments inside the limit and damage inside the vehicle's value;
  • the transaction log adds up: the case reserve after each transaction is the running sum, never negative, a payment takes exactly its amount off the reserve, a closed claim holds none, recoveries come only after close and only where they can (salvage on total losses, subrogation on collisions the other driver caused), and each claim's paid, recoveries, reserve and status at the cut equal its transactions;
  • nothing is dated after the cut; the ultimate truth's reported column equals the files, accident year by coverage, and its unreported claims are mostly 2025 accidents.
All 67 checks
  • ✓ territories.territory_id unique
  • ✓ policies.policy_id unique
  • ✓ claims.claim_id unique
  • ✓ claim_transactions.transaction_id unique
  • ✓ policies.territory_id -> territories: 0 orphans of 240,000
  • ✓ claims.policy_id -> policies: 0 orphans of 24,106
  • ✓ claims.territory_id -> territories: 0 orphans of 24,106
  • ✓ claim_transactions.claim_id -> claims: 0 orphans of 93,298
  • ✓ policies.policy_number unique
  • ✓ claims.claim_number unique
  • ✓ territories.territory_code unique
  • ✓ territories.territory_name unique
  • ✓ every claim has its transactions, opened first
  • ✓ twelve territories, three in the hail zone
  • ✓ rate changes: +4.0% from 1 January 2023, +7.5% from 1 July 2024
  • ✓ the book is spread over territories as their population weights say
  • ✓ written premium is the filed plan's rate at the level in force when the term was written: largest gap 0.0100
  • ✓ terms are a year long
  • ✓ terms written from 2020 to the cut
  • ✓ a deductible exactly when there is physical damage cover
  • ✓ older cars carry liability only more often
  • ✓ age within its band
  • ✓ new business is a tenure of zero
  • ✓ a cancellation date and reason exactly on cancelled terms, inside the term and by the cut
  • ✓ return premium is the unearned months of the written premium
  • ✓ the true frequency index averages one over the book
  • ✓ claim territory is its policy's
  • ✓ every accident inside its policy's term, in 2021 to the cut
  • ✓ collision and comprehensive claims only on policies with physical damage cover
  • ✓ reported on or after the accident, by the cut
  • ✓ report lag is the days from accident to report
  • ✓ liability claims are the insured's fault; comprehensive never is
  • ✓ only injury claims are litigated
  • ✓ total losses only on collision and comprehensive
  • ✓ deductible is the policy's on physical damage, none on liability
  • ✓ hail claims are comprehensive, on 14 May 2024, in the hail zone, coded CAT-2405
  • ✓ a cause of loss that fits the coverage
  • ✓ no injury claim pays past the policy's per-person limit
  • ✓ no physical damage claim pays more than the car was worth
  • ✓ nothing is dated after the cut
  • ✓ no transaction before the claim was reported
  • ✓ case reserve after each transaction is the running sum of reserve changes: largest gap 0.0000
  • ✓ a case reserve is never negative
  • ✓ payments are positive, recoveries negative, other entries carry no money
  • ✓ a payment draws the reserve down by exactly the payment
  • ✓ a closed claim holds no reserve
  • ✓ salvage only on total losses; subrogation only on collision claims the insured did not cause
  • ✓ recoveries come after the claim closed
  • ✓ a reopened claim had closed first
  • ✓ paid, recovered and case reserve on each claim are its transactions'
  • ✓ incurred is paid less recovered plus the case reserve
  • ✓ open or closed at the cut as the log says, with a closing date when closed
  • ✓ an open claim holds a reserve
  • ✓ ultimate truth covers accident years 2021 to 2025 for every coverage
  • ✓ claims reported at the cut are the claims in the files
  • ✓ paid at the cut, net of recoveries, is the files'
  • ✓ case reserves at the cut are the files'
  • ✓ reported incurred is paid plus case reserves, and IBNR is ultimate less it
  • ✓ claims still to be reported are almost all from the latest year: 2021 1, 2022 1, 2023 2, 2024 9, 2025 126
  • ✓ the latest accident year is the least developed: 2021 99.3%, 2022 99.9%, 2023 98.9%, 2024 97.4%, 2025 89.1%
  • ✓ injuries carry the reserve still to come; damage develops down as salvage and subrogation come in: injuries 107% of the true IBNR
  • ✓ loss ratios in the range personal auto reports (60 to 80%), the storm year above
  • ✓ claim frequency per 100 car-years near what US insurers report: collision 4.71, property damage 3.75, comprehensive 3.09, bodily injury 1.04
  • ✓ collision and property damage severity rise year on year: collision $4,569 in 2021 to $5,718 in 2025
  • ✓ injury claims are reported far later than damage: median 23 days against 2
  • ✓ young drivers claim more often than drivers 35 to 49
  • ✓ about one claim in eight closes with no payment

Tables

6 tables, 357,438 rows

Every table in the zip with what it holds, its rows and its columns. The bars are on a log scale, so the small reference tables still show.

  • policiesEvery annual term written from 2020: driver (age, insurance score tier, prior claims, mileage, use), vehicle (type, age, value), cover (package, injury limit, collision deductible), tenure, the premium the plan charged, cancellation with its date, reason and return premium240,000 rows · 26 cols
  • claim_transactionsThe claim system's log: reserve opened and revised, payments, closings and reopenings, salvage and subrogation received, each with the case reserve after it93,298 rows · 7 cols
  • claimsEvery claim reported by the cut: coverage, cause of loss, catastrophe code, accident and report dates, fault, litigation, total loss, deductible, status, paid, recoveries, case reserve and incurred at the cut24,106 rows · 20 cols
  • ultimate_truthThe hindsight table: each accident year and coverage as booked at the cut, and what it finally costs once every late claim is reported, every open claim settles and every recovery comes in20 rows · 11 cols
  • territoriesThe twelve rating territories: area type, whether a territory lies in the hail belt, its share of the book and the factor the filed plan rates it at12 rows · 7 cols
  • rate_changesThe rate changes the insurer filed, with their effective dates2 rows · 3 cols

Explore

Every table, profiled

Each column's type, spread, empties and most common values, measured from the full CSVs. Switch to the first rows to see the data as it sits in the file.

policies.csv

240,000 rows · 26 columns · 1 foreign keys

policy_idprimary key
unique on every row
240,000 distinctno empties
policy_numbertext
  • “PA00000001”
  • “PA00000002”
  • “PA00000003”
240,000 distinct10 chars on averageno empties
territory_idforeign key
points to territories.territory_id
12 distinctno empties
effective_datedate
Jan 2020Dec 2025
2020-01-01 to 2025-12-31no empties
expiration_datedate
Dec 2020Dec 2026
2020-12-31 to 2026-12-31no empties
driver_agenumber
1688
mean 47.99median 4716 to 88no empties
driver_age_bandcategory
  • 35-49
    28%
  • 50-64
    27%
  • 25-34
    18%
  • 65+
    18%
  • 16-24
    9.0%
5 valuesno empties
insurance_score_tiercategory
  • B
    35%
  • A
    30%
  • C
    23%
  • D
    12%
4 valuesno empties
prior_claimscategory
  • 0
    80%
  • 1
    15%
  • 2+
    4.9%
3 valuesno empties
annual_mileagecategory
  • 7,500 to 15,000
    50%
  • over 15,000
    25%
  • under 7,500
    25%
3 valuesno empties
vehicle_usecategory
  • commute
    55%
  • pleasure
    35%
  • business
    9.9%
3 valuesno empties
vehicle_typecategory
  • sedan
    38%
  • SUV
    33%
  • pickup
    16%
  • minivan
    7.0%
  • sports car
    6.0%
5 valuesno empties
vehicle_agenumber
020
mean 6.85median 60 to 20no empties
vehicle_age_bandcategory
  • 4-7
    32%
  • 0-3
    30%
  • 8-12
    25%
  • 13+
    13%
4 valuesno empties
vehicle_valuenumber
4,70048,700
mean 20,052median 19,0003,100 to 84,200no empties
coverage_packagecategory
  • full coverage
    79%
  • liability only
    21%
2 valuesno empties
bi_limitcategory
  • 100/300
    40%
  • 50/100
    30%
  • 25/50
    18%
  • 250/500
    12%
4 valuesno empties
collision_deductiblenumber
2501,000
mean 612median 500250 to 1,00021% empty
tenure_yearsnumber
021
mean 3.99median 30 to 30no empties
new_businessyes / no
true · 17%false · 83%
no empties
written_premiumnumber
2632,847.4
mean 929.5median 837.9162.5 to 7,004.9no empties
cancelledyes / no
true · 8.0%false · 92%
no empties
cancellation_datedate
Jan 2020Dec 2025
2020-01-31 to 2025-12-3192% empty
cancellation_reasoncategory
  • non-payment
    55%
  • insured request
    26%
  • vehicle sold
    18%
3 values92% empty
return_premiumnumber
36.322,130.4
mean 524.5median 439.617.32 to 4,452.192% empty
true_frequency_indexnumber
0.114.82
mean 1median 0.80.034 to 17.17no empties

Keys

Every join resolves

4 foreign keys, 381,510 references checked against the table each one points at. None points at a row that does not exist.

claim_transactions

  • claim_idclaims.claim_id0 orphans

claims

  • policy_idpolicies.policy_id0 orphans
  • territory_idterritories.territory_id0 orphans

policies

  • territory_idterritories.territory_id0 orphans

In the zip

What you get

  • CSVs: one file per table, with a header row and ISO dates.
  • README.md: what each table holds, how the data behaves (measured), what was checked and what to know.
  • ANSWER_KEY.md: what happened at the plant, when, where it shows and the query that finds it.
  • INTEGRITY.json: the 67 audit checks and their results.
  • RECIPE.json: the Misata blueprint that made these exact rows, seed 20210101.
  • kit/: the project kit: the brief, 18 questions, load.sql for DuckDB, check.py, the answer key with its SQL, and the write-up template.
All 20 files
  • territories.csv526 B
  • policies.csv37.1 MB
  • claims.csv3.3 MB
  • claim_transactions.csv4.9 MB
  • rate_changes.csv174 B
  • ultimate_truth.csv2 KB
  • README.md8 KB
  • INTEGRITY.json9 KB
  • RECIPE.json36 KB
  • kit/BRIEF.md2 KB
  • kit/QUESTIONS.md4 KB
  • kit/README.md1 KB
  • kit/WRITEUP_TEMPLATE.md2 KB
  • kit/check.py3 KB
  • kit/load.sql784 B
  • kit/my_answers.csv100 B
  • kit/questions.json5 KB
  • kit/solutions/ANSWER_KEY.md12 KB
  • kit/solutions/key.json11 KB
  • kit/solutions/solutions.sql7 KB

Before you use it

Things to know

  • The files are the insurer's as at the close of 31 December 2025: terms written by then, claims reported by then and their transactions to that day. Claims reported later and payments after the cut are in ultimate_truth only, as counts and dollars.
  • Policies are written from January 2020, so 2021 is the first fully earned year; claims are accident years 2021 to 2025.
  • Four coverages: bodily injury and property damage liability, collision and comprehensive. Uninsured motorist, personal injury protection, medical payments, rental and towing are not modelled. Losses are indemnity only, with no loss adjustment expense.
  • true_frequency_index on a policy is hindsight, like ultimate_truth: how often that policy really claims against the book's average, which the rating plan can only guess at.
  • Amounts are illustrative: premium comes from this dataset's own rating plan, not any real filing. The insurer, its territories and policyholders are invented; no real organization or person is represented, and no record is derived from real data.

Questions

Before you buy

Is this real data?
No. This is synthetic data generated by software. No row describes a real person, company, patient, store, machine or transaction. The patterns are modelled to be realistic and the statistics quoted are measured on these files, but they do not describe any real population or market. Use it for learning, testing, demos, benchmarks and prototyping, not as evidence about the real world. Provided as is, without warranty.
What do I get?
One zip of 9.2 MB: 6 linked tables and 357,438 rows as CSV, a README of what each table holds and how the data behaves, INTEGRITY.json with the 67 audit checks, and RECIPE.json, the Misata blueprint that made these exact rows (seed 20210101).
Can I try it before buying?
Yes. The free preview (153 KB) is a slice of the same data with the keys intact, plus the README, so you can load it and check it fits before you pay.
How was it checked?
67 of 67 checks pass, re-run on the delivered files by an independent script with plain pandas: every key resolves and every primary key is unique; every premium recomputed from the filed rating plan: territory, driver, vehicle, injury limit, deductible, tenure and the rate level in force on the term's effective date; every term a year long, cancellations inside their term with the unearned premium returned pro rata; every claim inside its policy's term and on a coverage the policy carries; hail claims only in the hail belt, on the storm's day; injury payments inside the limit and damage inside the vehicle's value; the transaction log adds up: the case reserve after each transaction is the running sum, never negative, a payment takes exactly its amount off the reserve, a closed claim holds none, recoveries come only after close and only where they can (salvage on total losses, subrogation on collisions the other driver caused), and each claim's paid, recoveries, reserve and status at the cut equal its transactions; nothing is dated after the cut; the ultimate truth's reported column equals the files, accident year by coverage, and its unreported claims are mostly 2025 accidents.
Is there a project to do with it?
Yes. The zip has a project kit: a brief from the Chief Actuary of a regional personal auto insurer (Year-end 2025 reserve review and the 2026 rate filing), 18 questions from warm-up to stretch, an answer key with the SQL behind every answer, a checker (kit/check.py) that grades your answers and names the common misreading a wrong one matches, and a write-up template. Every answer was worked out twice on these files, in DuckDB SQL and separately in pandas.
Can I use it commercially?
Yes: in any project, course, benchmark, demo or product, commercial or not. You may not resell or redistribute the dataset itself as a dataset.
What should I know before using it?
The files are the insurer's as at the close of 31 December 2025: terms written by then, claims reported by then and their transactions to that day. Claims reported later and payments after the cut are in ultimate_truth only, as counts and dollars. Policies are written from January 2020, so 2021 is the first fully earned year; claims are accident years 2021 to 2025. Four coverages: bodily injury and property damage liability, collision and comprehensive. Uninsured motorist, personal injury protection, medical payments, rental and towing are not modelled. Losses are indemnity only, with no loss adjustment expense. true_frequency_index on a policy is hindsight, like ultimate_truth: how often that policy really claims against the book's average, which the rating plan can only guess at. Amounts are illustrative: premium comes from this dataset's own rating plan, not any real filing. The insurer, its territories and policyholders are invented; no real organization or person is represented, and no record is derived from real data.
Can I get a bigger or different version?
Yes. RECIPE.json runs in Misata Studio or through Misata's MCP server to make a variant, or ask us to build one to your spec.

Want it bigger, in another setting, or with your own columns? Have us build it.

More premium datasets

All 7
  • How much of each month was paid by the cut

    12,000 members, four products, calendar 2025

    A payer's year with its incurred truth

    Answer key

    • unpaid_at_cut
    • not_received_at_cut
    • cause_no_prior_auth
    • +4 more
    Rows
    284,051
    Tables
    7
    Checks
    107 of 107
    Free preview18-question projectProfile and preview
  • Weekly sales, at regular price and on promotion

    Grocery chain, 10 stores, fiscal 2024 and 2025

    Two fiscal years of a grocery chain, from the shelf to the receipt

    Answer key

    • baseline_units
    • price_effect
    • promo_lift
    • +7 more
    Rows
    2,790,852
    Tables
    14
    Checks
    117 of 117
    Free preview18-question projectProfile and preview
  • An X-bar chart with the truth underneath: flatness, characteristic 139

    3 plants, 36 CNC machines, six months

    Six months of control charts with the ground truth underneath

    Answer key

    • active_cause_id
    • true_cause_shift_sigma
    • true_tool_wear_sigma
    • +6 more
    Rows
    515,442
    Tables
    15
    Checks
    101 of 101
    Free preview18-question projectProfile and preview