• contact@verticalserve.com
Home / Engineering / Post 86
Engineering Blog · Post #86

The Loss-Load-to-Price Ratio, Explained: How InsightUW Surfaces the One Metric Every Property UW Actually Cares About

Loss load ratio is the single most important lens a property UW has. It answers: "what fraction of the premium we're quoting is expected loss?" InsightUW computes it automatically on every quote, colors it RAG, weights it into a per-LOB risk scorecard, picks a tier (Platinum / Gold / Silver / Bronze), and — if the tier says Bronze — auto-routes the submission to a senior UW for review.


The Problem

Ask any seasoned property UW what matters most on a quote and they'll say some version of: is the premium big enough to cover the expected loss, cover my expenses, pay the broker, and leave a margin?

The math, at its most compressed:

If this number is 0.55, the UW has 45¢ on the dollar left for expenses, profit, CAT capital, and uncertainty — which is enough for most property books. If it's 0.72, they have 28¢, which is thin. If it's 0.85, they're pricing the account at a structural loss and someone needs to stop the quote.

Most workstations don't compute this at all. Some compute it only inside an actuarial spreadsheet three days after binding. A few surface "loss ratio" without distinguishing attritional from CAT — which is useless for CAT-exposed risks because the AAL hasn't been added in.

InsightUW treats loss load ratio as a first-class metric. It sits in a catalog of seven rating metrics, each with a Jinja formula, each with RAG zones, each consumable by a risk scorecard that weights factors into a composite score and tier band. This blog walks through what the metric is, how it's defined, how the scorecard consumes it, and why this specific quote landed at Gold tier with a composite score of 78.3.

The Account

  • Insured: Vanguard Manufacturing Complex, Ohio
  • LOB: Commercial property
  • TIV: $50M
  • Rating model: us property loss aware v1 2026
  • Current quote: $478,000 final premium (post-override, from the previous blog's scenario)
  • CAT modeling: RMS run completed, AAL net = $62,000 (wind + flood + tornado)
  • Loss history: loss_ratio_5y = 0.32, loss_count_5y = 5, max_single_loss_5y = $285k
  • Technical premium config: us property technical v1 — expense 25%, profit 5%, CAT capital 8%, uncertainty 5%

Part 1 — The Metric Catalog

The UW opens the Quote Summary page and scrolls to the Risk Scorecard section. Seven metric cards render at the top of the scorecard, each RAG-colored:

graph LR subgraph Metrics["7 seeded metrics"] M1[loss load ratio<br/>● Green 0.47<br/>target 0.55] M2[attritional loss ratio<br/>● Green 0.32] M3[cat loss ratio<br/>● Green 0.13] M4[rate adequacy pct<br/>● Green 0.10] M5[combined ratio<br/>● Green 0.92] M6[profitability index<br/>● Green 1.08] M7[technical deviation pct<br/>● Amber +0.29] end

Each one is a Risk Metric Definition row with a Jinja formula over a rich context. The context has six blocks:

loss load ratio — the UW-requested metric

For this account:

Zone: 0.451 is inside the green zone (0.0 - 0.55) → GREEN.

The direction flag is lower is better — so unlike a "score" where higher is better, the engine interprets "green" as the LOW end of the range and "red" as the HIGH end. A loss load ratio of 0.85 would be red; 0.45 is comfortably green.

attritional loss ratio

Simpler: just the prior-year loss ratio pulled from the feature store.

Value: 0.32 → green. Accounts with loss_ratio_5y > 0.55 show red and that's typically an immediate scorecard penalty.

cat loss ratio

Value: 62,000 / 478,000 = 0.130. Between green max (0.10) and red min (0.25) → AMBER. For this submission, CAT is taking 13% of the premium — a normal but not excellent position.

rate adequacy pct

The UW-friendly version: what's left after loss load and standard loads?

For this account: 1.0 - 0.451 - (0.25 + 0.05 + 0.08 + 0.05) = 1.0 - 0.451 - 0.43 = 0.119GREEN (inside 0.08-0.50).

combined ratio and profitability index

Values: combined = 0.451 + 0.25 = 0.701 (green); profitability = 1/0.701 = 1.43 (green).

technical deviation pct

How much above/below technical are we quoting?

technical_indicated_premium = 215,600 / (1 - 0.43) = $378,245. Deviation = 478,000 / 378,245 - 1 = +0.264 → green (quoting 26% above technical). If the UW applied the market-hardening override from the previous blog, this would be even higher.

Part 2 — The Scorecard

Individual metrics are half the picture. The scorecard combines them (and other feature/override-sourced factors) into a weighted composite score, maps the score to a tier, and surfaces the tier as a badge UWs respond to.

Seeded scorecard for US property:

Part 3 — Normalizing the Factors

Each factor gets normalized to a 0-100 score using one of four modes.

min max

Building age: raw year_built = 1988. Min = 1950, max = 2025. Normalized = (1988 - 1950) / (2025 - 1950) × 100 = 38/75 × 100 = 50.7.

inverse (min_max with flip)

Used when lower is better. Loss load ratio: raw = 0.451, min = 0.30, max = 0.90. Normalized = (1 - (0.451 - 0.30) / 0.60) × 100 = (1 - 0.2517) × 100 = 74.8.

Attritional loss ratio: raw = 0.32, min = 0.0, max = 1.0. Normalized = (1 - 0.32) × 100 = 68.0.

threshold

Maps raw to discrete scores. Construction class = 4 (masonry-non-combustible) → excellent_min = 4100. FEMA flood zone = "X" → excellent_min = "X"100. If it had been "AE" (flood zone), it would map to fair min → 50.

passthrough

Raw value is already 0-100 or 0-1. Sprinklered = true → 1.0 → normalized = 100. Sprinklered = false → 0.0 → 0.

Part 4 — Weight, Composite, Tier

Per-factor weighted score = normalized × weight. Sum the weighted scores, divide by sum of weights (which is 1.0 if the scorecard is well-defined):

Factor Raw Normalized Weight Weighted
Loss load 0.451 74.8 0.35 26.18
Construction 4 (MNC) 100 0.20 20.00
Building age 1988 50.7 0.15 7.60
FEMA flood X 100 0.15 15.00
Sprinklered True 100 0.10 10.00
Loss experience 0.32 68.0 0.05 3.40
Total 1.00 82.18

Wait — 82.18 puts this in the Platinum tier (≥ 85)? Let me recheck. Loss load's normalized should reflect the full range:

  • 0.30 → 100
  • 0.451 → (1 - (0.151/0.60)) × 100 = 74.8

Construction class 4 scores 100, FEMA X scores 100, but building age (1988) is middling and loss experience is moderate. Composite at 82.18 is actually Platinum-bordering-Gold. After applying proper rounding and the tier bands' max_score: 84.99 ceiling for Gold, the quote lands at 82.2 → Gold tier.

The scorecard panel renders:

Part 5 — The Tier Drives Workflow

Because the tier is Gold, no mandatory referral. The submission flows through normal approval.

Had it been Bronze (composite < 55, often driven by a loss load ratio > 0.75), a workflow rule would auto-route:

The risk scorecard tier Jinja helper returns just the tier code, making workflow gating trivial.

Similar rule for cat_loss_ratio > 0.20:

Part 6 — Where Each Source Lives

The scorecard reads factor values from six different sources, each declared by source-kind:

Source kind Example Where the value comes from
metric loss_load_ratio Risk Metric Service.compute_metric run at scorecard time — recomputed each time
feature loss_ratio_5y, sprinklered, year_built Rating Feature Value current row for insured — populated by exposure sources / internal aggregators
override Rating Override latest applied for (submission, target_field) — used when an override supplies the value
quote inputs.construction_class Dotted path into the quote inputs_json
cat aal_net_total CATResult sum aggregated at ctx build time
technical loads.expense_pct Cap Renewals #1 technical bundle

This composition is important. It means a UW's override of loss ratio 5y (via cap Rating Decisions #1) flows through to the scorecard — the tier can shift because of the override, and the workflow engine can react accordingly.

Part 7 — The Metric Formula Sandbox

Every metric formula runs inside a Jinja2 SandboxedEnvironment with ChainableUndefined. That means:

  • Missing data (e.g. no CAT results yet, no loss history) produces None, not a crash. The formula's | default(0) filter coerces to 0 so the metric returns a legitimate number.
  • No loops, no recursion, no imports. Pure expressions. Formulas are safe to let ops write without review — worst case a formula renders an empty string and the metric goes to the neutral zone.
  • Rich context. Every value the formula might need is pre-loaded: current quote, current features, current CAT, the technical-premium bundle, the buildup. Ops builds complex formulas (e.g. experience-modifier formulas that consult five features) without touching Python.

Ops preview formulas before saving. The metrics-admin page at /uw/admin/risk-metrics lets the UW manager paste a Jinja formula, pick a submission, hit Preview — the service builds context and renders the formula, returning both value and zone. Typos and divide-by-zeros surface before publish.

Part 8 — Configuring a New Metric

Ops wants a new metric — premium per 1m tiv — to complement the existing ones:

For this account: 478,000 / (50,000,000 / 1,000,000) = 478,000 / 50 = $9.56 per $1M TIV → GREEN. Metric catalog now has 8 entries; scorecards can reference the new metric as a factor if ops wants.

Part 9 — Why the Scorecard Matters Beyond the UI

The scorecard isn't just visual. It:

  1. Shapes routing. risk scorecard tier in workflow rules is the single cleanest way to trigger referral, rush handling, or senior UW review. No hard-coded thresholds scattered across 40 effect rules.

  2. Drives portfolio views. The Risk Scorecard Result table is a flat cache of composite scores across all active submissions. Aggregations like "show me all Silver-tier property submissions in the Northeast this week" are one query.

  3. Feeds renewal benchmarking. On a renewal, the prior-year scorecard result is visible next to the current year's — a UW instantly sees tier movement (Silver → Gold means improvement; Gold → Bronze is a red flag).

  4. Carries authority hints. Each tier band can declare requires_referral: true and max authority. A workflow rule consumes this: "Bronze requires referral regardless of UW authority."

Part 10 — A Real-World Scenario

UW opens the quote for Vanguard Manufacturing. Scorecard panel shows Gold, 82.2, driven by construction. UW reads:

  • loss_load_ratio: 0.451 (green) — margin is healthy
  • cat_loss_ratio: 0.130 (amber) — CAT takes 13% of premium; not alarming but worth noting
  • rate_adequacy_pct: 0.119 (green) — 12 points of margin after all loads

She binds the quote with confidence. Six months later a Q3 market shift requires a re-quote — fresh exposure fetches update cyber security rating (wait, wrong LOB, skip), fema flood zone stays X, loss ratio 5y ticks up to 0.38 after a new claim. Re-computed scorecard:

  • loss_load_ratio rises to 0.49 (still green)
  • composite drops to 78.9 → still Gold

On the next renewal, the prior-year scorecard shows Gold with 82.2, the current year renders Gold with 78.9 — UW sees a 3.3-point drop and investigates the cause (the new claim). Tier didn't change but the narrative did.

What This Replaces

Before the risk-scorecard framework, carriers solve UW tier assignment one of three ways:

  • UW gut feel. Zero consistency. New UWs get different tiers from senior UWs on identical risks. No portfolio aggregation possible.
  • Spreadsheet scorecards. Ops maintains an Excel file per LOB with weights and thresholds. UWs download, fill, save a copy. Zero audit, zero portfolio roll-up, zero integration with rating.
  • Rigid policy-admin-system flags. "Priority 1 / Priority 2" with no math behind them. Manager decides manually.

InsightUW's approach is declarative, auditable, portfolio-consumable, and integrated with rating + workflow. A new LOB gets a new scorecard and new metrics — zero code changes. A bad factor weight shows up in post-bind loss development reports and ops tweaks it, re-publishes, next quote run picks it up.

Quick Reference

Compute scorecard for a submission:
Get bundle (scorecard + metrics together):
Applicable scorecards for a submission (by LOB):
Preview a metric formula:
Workflow effect: compute risk scorecard with scorecard code in effect config json.

Jinja helpers:


Loss load ratio is the one number every property UW's eye should track. The framework makes sure it's always on-screen, always correct, always traceable to the inputs it depends on, and always connected to the workflow decisions it drives.

See InsightUW run on your data

A 45-minute working session with a real broker email and your LOBs.

Request a demo