What is real, what is synthetic, and every assumption
Why this matters to IIB. This page says what is real and what is made up. It lists every source, every assumption and the problems built into the test data on purpose.
Problems built into the test data
These problems and patterns were built into the synthetic data on purpose. The demo's screens show each one being found. With real data the same checks look for the same kinds of problem.
| Problem or pattern | What was built in | Found on |
|---|---|---|
| A broken insurer file | Insurer K's files for September 2026. About 42% fewer claim rows than its usual level, vehicle class blank in 409 of its 2,415 policy rows, and 1,200 premiums entered in paise, 100 times too high. | Insurer file checks |
| Duplicates and late files | Duplicate policy numbers in about 3% of Insurer W's policy rows for September 2026. Those files arrived 1 day late, and its files for August 2026 arrived 9 days late. | Insurer file checks |
| A Telangana claims rise | Telangana two-wheeler own-damage claims raised by about 35% over the last 6 weeks, all of it in the Hyderabad RTOs TS09, TS10, TS11, TS12 and TS13. RTO means Regional Transport Office, the local office that registers vehicles. Theft claims in the same RTOs run at 3 times their usual rate over the same weeks. The weekly briefing counts every claim type, theft included, so the rise it shows is larger. | Weekly briefing |
| Theft follows NCRB | Theft claim rates by state were set to follow NCRB thefts per vehicle on the register. So the two agree by design. | Ask the data |
| An uninsured hotspot | Rajasthan two-wheelers were given an insured share of 40%, and their policies were made more likely to lapse. To keep Rajasthan the largest two-wheeler gap, the two-wheeler shares of Tamil Nadu and Uttar Pradesh were raised. | Uninsured vehicles |
| Older file issues | 10 older file issues, October 2025 to August 2026, logged by Data Operations. The log is synthetic too. With Insurer W's late file for August 2026 and the 5 issues in September 2026, the issue log on Insurer file checks holds 16. | Insurer file checks |
| Lapse behaviour | The chance that a policy is not renewed within 30 days of expiry follows a fixed formula based on vehicle age, premium change, past lapses, whether the RTO is in a city, cover type, sales channel and vehicle class. The lapse forecast has to learn it back from the data. | Uninsured vehicles |
The 6 settings that move the headline numbers
Each one is an assumption made for the demo, not an industry figure.
| Setting | Value | What it does | What it moves |
|---|---|---|---|
| Register window | 15 years, 2011 to 2025 | Vehicles registered with VAHAN in the last 15 years count as on the register. Older ones are taken to be off the road. | The register count, and so the uninsured gap. |
| Vehicles per demo policy | about 743 | The test data is a sample. Each demo policy in force stands for this many insured vehicles. It follows from the register and the insured shares below. | The insured count for the whole market, and so the uninsured gap. |
| Insured share by state | 55% to 80% | Each state gets a share of its registered vehicles with a policy, drawn at random in this range and adjusted a little by vehicle class. | How many demo policies each state gets, and so each state's gap. |
| Rajasthan two-wheelers' insured share | 40% | Set low on purpose, to build an uninsured hotspot for the demo to find. | The Rajasthan hotspot on the Uninsured vehicles page. |
| File-check threshold | 3.5 times the usual spread | A file is flagged when a measure in it, such as its row count, sits more than 3.5 times the usual spread away from the same insurer's last 12 months, or when it fails a must-pass check. | How many insurer files are flagged. |
| Weekly-briefing alert threshold | 2.5 times the usual spread | Of the 5 biggest changes, one becomes an alert when it sits at least 2.5 times the usual spread away from the usual level for this time of year, and the change also shows against the 8 weeks before. | How many claims alerts the weekly briefing raises. |
Show all settings
All 71 settings the demo assumes, as they are written in its settings file. Insurers in the stories are shown the way your role sees them.
| Section | Setting | Value |
|---|---|---|
| open_data | registered_stock_years | 15 assumed |
| open_data | stock_end_year | 2025 assumed |
| demo | today | 2026-10-06 assumed |
| demo | seed | 42 assumed |
| demo | first_cycle | 2024-10 assumed |
| demo | current_cycle | 2026-09 assumed |
| demo | file_due_day | 5 assumed |
| demo | opening_book_months | 12 assumed |
| synthetic | policies_per_cycle | 23700 assumed |
| synthetic | claims_target | 40000 assumed |
| synthetic | policies_target | 600000 assumed |
| synthetic | base_lapse_rate | 0.24 assumed |
| synthetic | market_share_sigma | 0.7 assumed |
| synthetic | story_insurer_share_rank | {Insurer K: 1, Insurer W: 3} assumed |
| synthetic | insured_share_range | [0.55, 0.8] assumed |
| synthetic | insured_share_class_factor | {2W: 0.95, PCAR: 1.1, GCV: 1.0, PCV: 1.05, MISC: 0.9} assumed |
| synthetic | insured_share_cap | 0.95 assumed |
| synthetic | class_mix_default | {2W: 0.72, PCAR: 0.16, GCV: 0.05, PCV: 0.04, MISC: 0.03} assumed |
| synthetic | cover_mix | {2W: {TP: 0.5, COMP: 0.44, SAOD: 0.06}, PCAR: {TP: 0.2, COMP: 0.66, SAOD: 0.14}, GCV: {TP: 0.4, COMP: 0.57, SAOD: 0.03}, PCV: {TP: 0.38, COMP: 0.59, SAOD: 0.03}, MISC: {TP: 0.55, COMP: 0.42, SAOD: 0.03}} assumed |
| synthetic | channel_mix | {agent: 0.38, broker: 0.16, direct: 0.1, online: 0.21, PoSP: 0.15} assumed |
| synthetic | urban_rto_share | 0.4 assumed |
| synthetic | rtos_per_state | [3, 12] assumed |
| synthetic | vehicle_age_max | {2W: 15, PCAR: 15, GCV: 20, PCV: 15, MISC: 20} assumed |
| synthetic | new_vehicle_share_of_new_business | 0.45 assumed |
| synthetic | idv_new | {2W: [55000, 180000], PCAR: [450000, 1800000], GCV: [700000, 3500000], PCV: [400000, 2500000], MISC: [200000, 1200000]} assumed |
| synthetic | idv_depreciation | [0.95, 0.85, 0.8, 0.7, 0.6, 0.5] assumed |
| synthetic | od_rate_pct | {2W: 1.7, PCAR: 2.6, GCV: 1.9, PCV: 2.4, MISC: 1.5} assumed |
| synthetic | ncb_max | 0.5 assumed |
| synthetic | tp_premium | {2W: [538, 714, 1366, 2804], PCAR: [2094, 3416, 7897], GCV: [16049, 27186, 35313, 43950], PCV: [6040, 9044, 14343], MISC: [1500, 4000, 8000]} assumed |
| synthetic | premium_bounds | {2W: [150, 20000], PCAR: [800, 100000], GCV: [2500, 300000], PCV: [1500, 200000], MISC: [400, 60000]} assumed |
| synthetic | premium_change_pct | {mean: 4.0, sd: 11.0} assumed |
| synthetic | switch_insurer_at_renewal | 0.09 assumed |
| synthetic | prior_lapse_new_business_lambda | 0.35 assumed |
| synthetic | claim_freq | {OD: {2W: 0.12, PCAR: 0.12, GCV: 0.1, PCV: 0.11, MISC: 0.07}, TP: {2W: 0.0045, PCAR: 0.008, GCV: 0.022, PCV: 0.018, MISC: 0.006}, THEFT: {2W: 0.015, PCAR: 0.002, GCV: 0.0012, PCV: 0.001, MISC: 0.0015}} assumed |
| synthetic | od_severity_share_of_idv | [0.03, 0.3] assumed |
| synthetic | theft_severity_share_of_idv | [0.85, 1.0] assumed |
| synthetic | tp_claim_amount | [40000, 1500000] assumed |
| synthetic | paid_share | [0.7, 1.0] assumed |
| synthetic | report_lag_days | {mean: 4, max: 30} assumed |
| synthetic | monsoon_od_uplift_pcar | 0.3 assumed |
| synthetic | festive_new_business_uplift | 0.35 assumed |
| synthetic | month_wobble_sd | 0.02 assumed |
| synthetic | benign_late_prob | 0.05 assumed |
| synthetic | benign_null_rate | 0.002 assumed |
| synthetic | theft_rate_strength | 1.0 assumed |
| synthetic | tp_rate_strength | 0.8 assumed |
| synthetic | lapse_logit | {intercept: -1.95, vehicle_age: 0.11, premium_change_pct: 0.035, prior_lapse_count: 0.75, urban_flag: -0.35, cover: {COMP: 0.0, TP: 0.75, SAOD: 0.3}, channel: {agent: -0.3, broker: -0.1, direct: -0.15, online: 0.35, PoSP: 0.25}, class: {2W: 0.55, PCAR: -0.35, GCV: 0.0, PCV: 0.1, MISC: 0.3}} assumed |
| stories | S1 | {insurer: Insurer K, cycle: 2026-09, claims_drop: 0.42, class_blank_rate: 0.18, unit_error_rows: 1200, unit_error_multiplier: 100} assumed |
| stories | S2 | {insurer: Insurer W, cycle: 2026-09, duplicate_rate: 0.03, days_late: 1, earlier_cycle: 2026-08, earlier_days_late: 9} assumed |
| stories | S3 | {state: TS, vehicle_class: 2W, rtos: [TS09, TS10, TS11, TS12, TS13], rto_exposure_share: 0.8, weeks: 6, od_uplift: 0.35, theft_multiplier: 3.0} assumed |
| stories | S4 | {min_policies: 2000, target_spearman: 0.7} assumed |
| stories | S5 | {state: RJ, vehicle_class: 2W, insured_share: 0.4, lapse_uplift: 0.6} assumed |
| stories | S6 | {count: 10, first_cycle: 2025-10, last_cycle: 2026-08, types: [volume_drop, null_spike, out_of_range, duplicates, late_file]} assumed |
| stories | S7 | {label_days: 30} assumed |
| sentinel | baseline_cycles | 12 assumed |
| sentinel | min_baseline_cycles | 6 assumed |
| sentinel | z_threshold | 3.5 assumed |
| sentinel | mad_floor_pct | 0.03 assumed |
| sentinel | isolation_contamination | 0.05 assumed |
| sentinel | key_columns | {policies: [policy_no, reg_no, vehicle_class, cover_type, total_premium, state_code, rto_code], claims: [claim_no, policy_no, claim_type, loss_date, claim_amount, state_code]} assumed |
| pulse | window_weeks | 6 assumed |
| pulse | trailing_weeks | 8 assumed |
| pulse | min_expected_claims | 20 assumed |
| pulse | top_movements | 5 assumed |
| pulse | alert_z | 2.5 assumed |
| uninsured | train_expiry_end | 2026-06-30 assumed |
| uninsured | test_expiry_start | 2026-07-01 assumed |
| uninsured | test_expiry_end | 2026-09-30 assumed |
| uninsured | horizon_days | 60 assumed |
| uninsured | psi_threshold | 0.2 assumed |
| uninsured | features | [vehicle_age, vehicle_class, cover_type, channel, premium_change_pct, prior_lapse_count, urban_flag, state_code] assumed |
Where the real data comes from
| Source | File | Rows | Years | File fingerprint | Loaded | Status |
|---|---|---|---|---|---|---|
| IRDAI motor premium | irdai_motor_calibration.csv |
11 | FY 2014-15 to 2024-25 | d35a17341ee81153 | 7 Oct 2026, 06:54 | real |
| MoRTH registered vehicle stock | morth_registered_stock.csv |
1,680 | 2021 to 2022 | c025899cbdb8685d | 7 Oct 2026, 06:54 | real |
| MoRTH road accidents | morth_road_accidents.csv |
249 | 2018 to 2024 | 1828ba56c77c0a98 | 7 Oct 2026, 06:54 | real |
| NCRB motor vehicle theft | ncrb_mv_theft.csv |
250 | 2018 to 2024 | bd19706a495ffe30 | 7 Oct 2026, 06:54 | real |
| VAHAN vehicle registrations | vahan_registrations.csv |
14,076 | 2003 to 2025 | f478404e6bcb2288 | 7 Oct 2026, 06:54 | real |
| Synthetic IIB data | Made by the demo's script | October 2024 to September 2026 | 7 Oct 2026, 09:37 | synthetic |
The open files were taken from the original publications on 6 October 2026. A sources note kept with the open data records the exact tables, pages and checks behind each file and how each was reshaped. The original PDFs and spreadsheets are kept unchanged beside it. The file fingerprint identifies the exact file that was loaded.
Known gaps in the open data
- VAHAN holds only the registrations moved into it. Years before about 2010 are clearly incomplete, and some states jump when their RTOs joined. So the 15-year sum, 2011 to 2025, is an estimate, not a census. It is cross-checked against MoRTH's registered vehicle stock on the Uninsured vehicles page.
- NCRB does not publish recovered vehicles by state, so there is no recovery column.
- Ladakh is reported within Jammu and Kashmir in NCRB 2018 to 2019 and MoRTH 2018 to 2020.
- NCRB's West Bengal 2019 figure repeats 2018, as NCRB notes. NCRB 2024 combines IPC and BNS cases.
- MoRTH's Tamil Nadu 2018 injured figure predates MoRTH's later reconciliation.
- IRDAI motor premium is an all-India financial-year total, used for context only.
How the numbers are worked out
- Uninsured estimate. Vehicles on the register, minus demo policies in force scaled up by the vehicles per demo policy. It is worked out for each state and vehicle class, and never goes below zero.
- Claim rates. Theft claim rates by state follow NCRB thefts per vehicle on the register. Third-party claim rates follow MoRTH road accidents per vehicle on the register.
- Seasons. Private car own-damage claims rise 30% from July to September (monsoon). New business rises 35% in October and November (festive sales). Both are assumed.
- Insurer file checks compare each file with the same insurer's last 12 months.
- The weekly briefing compares the last 6 weeks with the usual level for this time of year, and checks the direction against the 8 weeks before.
- The lapse forecast learns which policies are not renewed within 30 days of expiry from vehicle and policy details. It never uses the insurer. So two alike policies get the same score, whoever insures them.