Skip to content

Banking, insurance and financeBI, AI and ML for the business

Motor claims and the black box

The claim describes a crash, the black box records speed, braking and acceleration. Muvia puts them side by side: every claim second by second, a Python score recomputed every morning, and the claims office knows which claims to send to an adjuster and which to pay right away.

Illustrative scenario: it describes a typical case, not a customer project.

The claim says “violent impact”. The black box can say whether it is true.

For every claim on a vehicle with a black box, the insurer has speed, braking and impact force recorded second by second. Yet those traces often stay on the telematics provider's portal, and the claims handler compares claim and data by hand, one file at a time.

With claims and telematics in one place you can compare all of them, every day: pay the claims the data confirms sooner, and send the ones that do not add up for inspection.

Who it's for
Claims office and claims handlers, fraud teams, actuaries and the insurer's analysts.
Claims from the claims system on SQL Server, black-box traces from the telematics provider over SFTP, policies from Oracle and partner repair shops in Excel flow into Muvia, where the team's function compares claim and telematics; out come a score for every claim, second-by-second analyses, a dashboard for the claims office and a report every Monday.

In Muvia, step by step

Real product screens, recorded on a project with sample data.

1 of 5

The video · The claim describes a crash, the black box records speed, braking and acceleration. Muvia puts them side by side: every claim second by second, a Python score recomputed every morning, and the claims office knows which claims to send to an adjuster and which to pay right away.

What you get

Genuine claims paid sooner
When the black box confirms the impact, the claim does not wait: the data backs it.
Inspection where it is needed
Claims that do not match the telematics surface every morning, with the reason alongside.
A claim you can read in a chart
Speed, braking and impact second by second, and similar claims overlaid: the handler sees what happened, not just a number.
The insurer's own rules
Thresholds and signals are the insurer's call; changing them is a new version of the function, tried first in a run that writes nothing.

For the technical team

How it is built in Muvia

  1. 1

    Connect claims and telematics

    The claims system and policies are copied on a schedule, incrementally; black-box traces arrive as files over SFTP. Every source becomes a table.

  2. 2

    Read a claim in Analysis

    Speed, acceleration and g-force on the same time axis, second by second: the impact, the braking before it and what happens after.

  3. 3

    Align claims on the impact

    The Layers view overlays a day's claims on the moment of impact: a real crash has a recognisable shape, a claim with no impact stands out at once.

  4. 4

    Compare in Python, every morning

    A function compares each claim with its trace (recorded impact, time and amount) and works out a score with the reasons. A flow runs it every morning at 7 on all open claims.

  5. 5

    Show the claims office where to look

    A dashboard shows the claims to send for inspection, the amount at stake and recorded force against amount claimed; the Monday report arrives by email.

Python function

import numpy as np

def transform(inputs, params, ctx):
    df = inputs["rows"]
    impact = df["max_g"] >= params["impact_threshold_g"]
    gap_min = (df["stated_time"] - df["impact_time"]).abs().dt.total_seconds() / 60
    signals = {
        "no impact recorded": ~impact,
        "time differs from trace": impact & (gap_min > params["tolerance_min"]),
        "amount high for the impact": df["amount_claimed"] > df["max_g"] * params["euro_per_g"],
    }
    out = df[["claim_number", "policy", "amount_claimed", "max_g"]].copy()
    out["score"] = sum(s.astype(int) for s in signals.values())
    names = np.array(list(signals))
    fired = np.column_stack([s.to_numpy(dtype=bool) for s in signals.values()])
    out["reasons"] = ["; ".join(names[row]) for row in fired]
    out["outcome"] = np.where(out["score"] > 0, "inspection", "impact confirmed")
    ctx.logger.info("claims compared: %d", len(out))
    return {"rows": out}
Every claim compared with its telematics trace: the score says how much does not add up, the reasons say what.
The data it needs
  • Claims with date, time, stated circumstances and amount claimed, from the claims system on SQL Server
  • Black-box traces with speed, acceleration and g-force second by second, files received over SFTP
  • Policies and insured vehicles, from an Oracle database
  • Partner repair shops, from an Excel file
Parts of Muvia used

Bring us a question you can't answer today.

We start from a real question your business has and walk the path from source to dashboard with your systems, not a demo dataset.