OptimaRARE · Client demo · Motor

RARE Motor Rating Engine: demo script

A 30-minute run-sheet for presenting the Risk & Rating Engine. It covers what it does, how the pieces connect, what to click, what to say, and how to handle the hard questions.

0–4 Why & what4–7 Architecture7–24 Live walkthrough24–27 Live quote27–30 Close & Q&A
Opening line

What RARE is, in one breath

"RARE is GGI's own pricing workbench. Actuaries take real policy and claims data, build a statistical rating model, review and approve every factor, and publish it as a live rating API that quoting systems call in milliseconds. No spreadsheets, no hand-copied tariffs."

The problem today

Motor tariffs live in spreadsheets and desktop tools. Getting a new rate into the quoting system is manual, slow and hard to audit.

What RARE does

One governed pipeline: data in → GLM analysis → reviewed rating factors → loadings → approved, versioned model → production API.

Why it matters

Faster rate changes, full audit trail of who approved what, and every channel (direct, broker, portal) quoting from the same approved model.

Show this first

How it works

Walk the diagram left to right, top to bottom. Every box is a screen in the app and an API behind it.

SOURCES 1 · BUILD & ANALYSE 2 · PRICE & GOVERN 3 · SERVE Policy dataUnderwriting DB (TPL) Claims dataCore claims system Existing tariffFrom other rating tools 01DatasetsImport by date + product 02VariablesTarget, exposure, factors 03CorrelationsOne-way + Cramér's V 04GLMFrequency × Severity Python StatEngine 05ConsolidatedPure premium per level 06Rating factorsActuary reviews, smooths 07LoadingsExpense, comm., margin 08Approve & registerLocked version → channel Production Rating APIPOST /api/rating/calculate · risk in → premium out Quote & policy systemsOptimaX, portals, broker channels Live from effective date
Source data Screen in RARE (one API each) Fast track: import an existing tariff from other tools straight into a version
RARE web appAngular workbench the actuary uses. Light and dark mode.
Rare API.NET 8. Owns every rule, every DB write, JWT security.
StatEnginePython statsmodels. Fits Poisson / Gamma / Tweedie GLMs.
SQL ServerModels, versions, factors, audit, registrations.
Run-sheet

Live walkthrough

Use the pre-built product 5525 (Private Comprehensive Leasing) or 5504 (Individual TPL) model for steps 5–10. Both have a solved severity GLM. Only create a new model live up to the data import, so the GLM fit can't fail on stage.

07:001 min

Log in and land on Models

Show
  • Login page with RARE branding
  • Models list: line of business, product, status, version
Say

"Role-based access. Every model lives here with its status, from draft through approved and live."

08:002 min

Create a model

Show
  • New model: Motor, product code, country, currency, owner
  • Open its Overview tab
Say

"A model is the container. Data, GLM runs, factors and versions all hang off it, so the full history stays in one place."

10:003 min

Import data from the database

Show
  • Datasets → Import from database
  • Pick Policy or Claims, date range, product code
  • Record count and preview. Mention CSV upload + template as alternatives
Say

"No exports or emailed files. RARE reads straight from GGI's policy and claims systems for the window you choose. Each import is a versioned snapshot, so a model can always be reproduced."

13:003 min

Configure variables

Show
  • Every column becomes a candidate variable automatically
  • Flag target (claim count / amount), exposure, rating factors
  • Set a reference level, e.g. NATURE_OF_LOSS = "Act of god"
Say

"The actuary decides which fields drive price. Fields with no spread, like a single branch or one vehicle make, are excluded so they don't add noise."

16:002 min

One-way analysis and correlations

Show
  • One-way view per factor
  • Run correlations: Cramér's V matrix, pairs above threshold highlighted
Say

"Before modelling, we catch factors that tell the same story twice. Highly correlated pairs distort a GLM, so one side gets dropped here."

18:003 min

GLM: frequency and severity

Show
  • GLM run: Frequency (Poisson, log) and Severity (Gamma, log)
  • Job runs in the background, then results: coefficients, multipliers, p-values, AIC, deviance
Say

"This is the industry-standard actuarial method. On 5525, over-turning claims come out at about 6% of the act-of-god severity, with p = 0.000016, and that matches the raw claims almost exactly."

Severity · Gamma / Log · target ESTIMATED_NET_AMOUNT
Act of god (reference)   ≈ SAR 4,881.67
Over turning             × 0.0618   p = 0.000016   AIC 171.59
21:002 min

Consolidated premium and rating factors

Show
  • Run consolidated premium: Frequency × Severity per level
  • Rating factors grid: Statistical → Approved → Final value
  • Edit one value to show the override
Say

"The statistics suggest, the actuary decides. Every factor can be smoothed, capped or overridden before it goes anywhere near a live quote, and each change is recorded."

23:001 min

Loadings, approval, registration

Show
  • Loadings: expense 20%, commission 10%, risk margin 5%, profit 5%
  • Approve version (locks it)
  • Model registrations: channel + product + cover + effective date
Say

"Once approved, a version can't be changed. A new rate means a new version. Registration decides which channel uses it and from when."

24:003 min

Live quote through the API

Show
  • Swagger → /api/rating/calculate with the API key
  • Send two risks that differ by one factor, compare premiums
Say

"This is how OptimaX or a broker portal gets a price. The caller sends the risk, and RARE picks the registered model for that channel and product by itself."

{ "RiskPayload": { "NATURE_OF_LOSS": "Act of god" } }
→ Technical 1.00 · Loadings 0.4553 · Final 1.4553

{ "RiskPayload": { "NATURE_OF_LOSS": "Over turning" } }
→ Technical 0.10 · Loadings 0.0455 · Final 0.1455

Present these as relative rates. The base rate isn't multiplied in yet, so don't call them SAR premiums.

27:001 min

Fast track: import an existing tariff from other tools

Show
  • Tariff import → upload the tariff file
  • Preview: base rate, factors, levels, multipliers
  • Commit to a new or existing model
Say

"You don't have to rebuild what already works. Your current tariff from other tools can go live through RARE's API on day one while new models are developed."

28:002 min

Close

Recap
  • Data in from source systems
  • Explainable GLM, human-approved factors
  • Versioned, audited, live by API
Ask

"Which Motor product should we take through first with full policy exposure? Then we can agree the rollout plan."

Actuary guide

Building a model, step by step

What the actuary does on each tab, from raw data to a live rating model, and when to move to the next tab. The tabs inside a model follow this order left to right.

0

Create the model Models → New

Enter the name, line of business (Motor), product code, country, currency and owner. This only creates the container that everything else attaches to.

1

Datasets prepare and check the data

  1. Bring in policy data: "Import from database" (policy issue date range) or upload a CSV. "Download template" gives the expected columns.
  2. Bring in claims data the same way, using the claim date range.
  3. Merge Policy + Claims: pick one version of each, the join key (for example the policy number) and the join type. Left keeps every policy, including those with no claims; use it for frequency modelling, because those policies are your exposure. Inner keeps only policies that had claims.
  4. Compute profile on the merged version and check it:
    • Missing %: columns with a lot of gaps are weak rating factors.
    • Distinct = 1: the column never varies, so it can't be a factor.
    • Min / Max on amounts: negative or zero claim amounts break the Severity GLM; an extreme maximum is a likely data error.
    • Row count: check it matches the source system.

There's no cleaning screen in the app. If the profile shows bad data, fix it at the source or in the CSV and import a new version.

Move on when you have one merged dataset version with sensible row counts, a positive claim amount column and an exposure column.

2

Variables tell the model what each column means

Select the dataset version. Every column appears as a row, and for each one you set:

SettingWhat the actuary decides
TypeContinuous (age, sum insured, vehicle value) or Categorical (make, region, nature of loss)
IncludedOn for candidate rating factors; off for IDs, dates, policy numbers and personal data
TargetWhat is predicted: claim count for Frequency, claim amount for Severity
ExposureEarned years or policy days (Frequency model only)
OffsetRarely used; for a known fixed adjustment

Then click Analyze on each candidate factor:

  • One-way analysis: exposure, claim count, frequency, average cost and risk premium for each level. A flat line means a weak factor.
  • Continuous factors: build zones, for example driver age 18–25, 26–35, 36–50, 51+, each with lower and upper bounds and a label.
  • Categorical factors: group thin levels. Tick the rare makes and apply one group label such as "Other European". Each group needs enough claims to be credible.

Move on when every included factor has zones or groups with reasonable volume in each level.

3

Correlations remove factors that say the same thing

Pick the dataset version, set the threshold (for example 30%) and click Run correlations. The Cramér's V matrix highlights pairs above the threshold, such as vehicle value and vehicle make.

Actuary decision: keep the factor that is more predictive (from the one-way analysis) or easier to collect at quote time, and switch the other off in Variables.

4

GLM run it twice

Frequency runSeverity run
ComponentFrequencyAmount
Distribution / linkPoisson / LogGamma / Log
TargetClaim countClaim amount
ExposureExposure columnNone

Add the factors, choose a modelling form for each (Zones, Categorical, Linear, Polynomial or Spline), save the configuration and click Run. The job runs in the background. Then review:

  • Results: coefficients, multipliers and p-values. Drop factors with p > 0.05 and re-run.
  • Graph: fitted against observed values for each factor.
  • Diagnostics: AIC and deviance. Lower AIC means a better fit.
  • History: reopen an earlier run to compare.

Move on when both models are stable. Write down both GLM Run IDs.

5

Versions create a Draft now

Go to Versions → New version. The version must exist first, because premium, rating factors and loadings are all saved against it.

6

Consolidated Premium Frequency × Severity

Add a version with the Frequency run ID, the Amount run ID and the correction term (1.0 by default), then click Run. The app writes one rating factor for each factor level.

7

Rating Factors where actuarial judgement comes in

For each level you see the Statistical value from the GLM. Set the Approved value and Final rating value: smooth uneven steps, round values, cap extreme ones, or override where business judgement disagrees. The app records who approved each change and when.

8

Loadings

Add expense, commission, risk margin and profit, each as a percentage or a flat amount, in the order they should apply.

9

Approve, then register

  • Versions → Approve locks the version. Any later change needs a new version.
  • Model Registrations links the version to a channel, product, cover type and effective date. From then on, /api/rating/calculate uses it.

Done: the model is live for that channel from its effective date.

For you only: current gaps. A factor's reference level can only be set through the API, not on screen. The GLM and Consolidated Premium screens ask for dataset, variable and run IDs as typed numbers, and the Variables table doesn't show variable IDs. Consolidated Premium and Approve don't warn when a GLM didn't fit properly.

Be ready for

Likely client questions

How is this different from other rating tools?

It's GGI's own platform, with no per-seat licence, and it connects directly to GGI's databases and quoting systems. Existing tariffs from other tools can be imported, so it's a bridge, not a forced migration.

Can we trust the statistics?

The GLMs run on statsmodels, a standard, peer-reviewed Python library used widely in actuarial and academic work. Every run stores its coefficients, p-values, AIC and deviance for review.

Who can change a live rate?

Nobody can change one in place. Approved versions are locked. A rate change is a new version that goes through approval and registration again, with users and roles controlled in Admin.

How fast is a quote?

One API call. Factors are precomputed at approval time, so calculation is a lookup and multiply with no model fitting at quote time.

Can we roll back?

Yes. Registrations have effective dates, so you point the channel back at the previous approved version.

Does it handle lines other than Motor?

The pipeline is line-agnostic: model, data, GLM, factors, API. Motor is the first line configured.

Before the call

For you only: don't overclaim

  • Policy and claims data come from two separate books today, so demo models are claims-only and frequency is flat. Say "full exposure modelling comes once policy and claims are linked."
  • /calculate returns relative rates. The base rate field is the next build item.
  • Avoid live GLM on 5501/5503/5513: negative claim amounts and one outlier break the fit.
  • Segments and Comparison tabs are placeholders. Don't open them.
  • Loading percentages are placeholders. Agree real ones with the client's actuary.