Commercial auto fleet

A fleet model rating each vehicle, then applying state, claim-free experience and safety programme factors.

A default model in Ptally. Commercial Auto: Fleet via Modules is one of the default models you can select when you start a new project in Ptally. It comes with its rate tables, rules and 6 tests, ready to adapt to your own product.
The line of business

Commercial auto fleet

Commercial auto insurance covers vehicles used for business, from a single van to a fleet of hundreds. Each vehicle has its own risk, and the fleet as a whole is adjusted for the operator's record and risk management.

Methodology

How the model rates

A child model prices each vehicle. The parent model sums the vehicles, then applies a state factor, a credit for claim-free years and a credit for a formal safety programme, plus a policy fee.

Empty fleets and fleets over 200 vehicles are declined. Fleets of 50 or more vehicles and fleets with recent losses are referred.

Three further factors adjust the fleet premium: telematics, the radius of operation and the type of cargo carried.

7inputs
10steps
4lookup tables
6tests

Inputs

7 fields
FieldLabelTypeDefaultAllowed values
stateStatestringTXCA, TX, IL, FL, NY
fleet_years_claim_freeConsecutive claim-free years for the fleetinteger00, 2, 5, 8
safety_programFormal driver safety program in placebooleanfalsetrue, false
vehiclesVehiclesarraylistA list of items, each rated by the child model
telematicsTelematics fittedbooleanfalsefalse, true
radiusRadius of operationstringlocallocal, intermediate, long_haul
cargo_typeCargo typestringgeneralgeneral, refrigerated, hazardous
The model

Step by step

Steps run in order. Each one can use the inputs and the outputs of every step before it.

01Lookup table
State commercial auto factor

Overall state loading: high-cost states carry a substantial load.

{
  "id": "state_auto_rates",
  "key": "state_auto_rates",
  "step": "collection",
  "name": "State commercial auto factor",
  "retain": true,
  "collection": [
    ["state", "state_auto_factor"],
    ["CA", 1.15],
    ["TX", 1],
    ["IL", 1.05],
    ["FL", 1.2],
    ["NY", 1.25]
  ],
  "format": {
    "state_auto_factor": {
      "key": "state_auto_factor",
      "label": "State commercial auto factor",
      "exp": "collection.filter(state=={{state}}).map(state_auto_factor).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
02Calculation
Fleet experience credit

Bigger credit for longer claim-free records, floored at 0.75.

{
  "id": "fleet_experience_calc",
  "key": "fleet_experience_calc",
  "step": "calculation",
  "name": "Fleet experience credit",
  "def": 1,
  "formula": "max(1 - ({{fleet_years_claim_free}} * 0.03), 0.75)"
}
03Transform
Safety program credit

Formal safety program: 5% credit.

{
  "id": "safety_factor",
  "key": "safety_factor",
  "step": "transform",
  "name": "Safety program credit",
  "retain": true,
  "format": {
    "safety_factor": {
      "key": "safety_factor",
      "label": "Safety program factor",
      "exp": "{{safety_program}} == true ? 0.95 : 1.00",
      "type": "decimal",
      "def": 1
    }
  }
}
04Modules
Per-vehicle rating

Iterate vehicles[]. Child model returns each vehicle's base premium; parent sums into a fleet total and counts vehicles.

Child model: Per-Vehicle Rating (child)

Prices a single commercial vehicle by class, radius, and GVW.

Vehicle class base rate. Base premium per vehicle by commercial class.

Operating radius factor. Longer radius = higher factor. Long-haul is the largest load.

GVW factor. Very heavy vehicles (>45,000 lbs) attract an additional load.

Per-vehicle premium. Class base × radius × GVW.

{
  "id": "per_vehicle_rating",
  "key": "per_vehicle_rating",
  "step": "modules",
  "name": "Per-vehicle rating",
  "format": {
    "vehicle_base_total": {
      "key": "vehicle_base_total",
      "label": "Sum of per-vehicle base premiums",
      "exp": "collection.sum(result)",
      "type": "decimal",
      "def": 0
    },
    "vehicle_count": {
      "key": "vehicle_count",
      "label": "Number of vehicles",
      "exp": "collection.count()",
      "type": "integer",
      "def": 0
    }
  },
  "child_model_steps": [
    {
      "id": "class_rates",
      "key": "class_rates",
      "step": "collection",
      "name": "Vehicle class base rate",
      "retain": true,
      "collection": [
        ["class", "class_base_premium"],
        ["private_passenger", 900],
        ["light_truck", 1200],
        ["medium_truck", 2200],
        ["heavy_truck", 3800],
        ["extra_heavy_truck", 5400]
      ],
      "format": {
        "class_base_premium": {
          "key": "class_base_premium",
          "label": "Class base premium",
          "exp": "collection.filter(class=={{class}}).map(class_base_premium).first()",
          "type": "decimal",
          "def": 1200
        }
      }
    },
    {
      "id": "radius_rates",
      "key": "radius_rates",
      "step": "collection",
      "name": "Operating radius factor",
      "retain": true,
      "collection": [
        ["radius", "radius_factor"],
        ["local", 1],
        ["intermediate", 1.15],
        ["long_haul", 1.35]
      ],
      "format": {
        "radius_factor": {
          "key": "radius_factor",
          "label": "Radius factor",
          "exp": "collection.filter(radius=={{radius}}).map(radius_factor).first()",
          "type": "decimal",
          "def": 1
        }
      }
    },
    {
      "id": "gvw_rates",
      "key": "gvw_rates",
      "step": "collection",
      "name": "GVW factor",
      "retain": true,
      "collection": [
        ["gvw_max", "gvw_factor"],
        [10000, 1],
        [26000, 1.1],
        [45000, 1.25],
        [80000, 1.45]
      ],
      "format": {
        "gvw_factor": {
          "key": "gvw_factor",
          "label": "GVW factor",
          "exp": "collection.filter(gvw_max>={{gvw_lbs}}).map(gvw_factor).first()",
          "type": "decimal",
          "def": 1
        }
      }
    },
    {
      "id": "vehicle_premium",
      "key": "vehicle_premium",
      "step": "calculation",
      "name": "Per-vehicle premium",
      "def": 0,
      "formula": "round({{class_base_premium}} * {{radius_factor}} * {{gvw_factor}}, 2)"
    }
  ]
}
05Lookup table
Telematics factor

Fleets with telematics monitor driving behaviour and recover stolen vehicles more often.

{
  "id": "telematics_rates",
  "key": "telematics_rates",
  "step": "collection",
  "name": "Telematics factor",
  "retain": true,
  "collection": [
    ["telematics_value", "telematics_factor_rel"],
    [false, 1],
    [true, 0.92]
  ],
  "format": {
    "telematics_factor": {
      "key": "telematics_factor",
      "label": "Telematics factor",
      "exp": "collection.filter(telematics_value=={{telematics}}).map(telematics_factor_rel).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
06Lookup table
Radius of operation factor

Vehicles that travel further spend more time on the road and in unfamiliar areas.

{
  "id": "radius_rates",
  "key": "radius_rates",
  "step": "collection",
  "name": "Radius of operation factor",
  "retain": true,
  "collection": [
    ["radius_value", "radius_factor_rel"],
    ["local", 1],
    ["intermediate", 1.1],
    ["long_haul", 1.25]
  ],
  "format": {
    "radius_factor": {
      "key": "radius_factor",
      "label": "Radius of operation factor",
      "exp": "collection.filter(radius_value=={{radius}}).map(radius_factor_rel).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
07Lookup table
Cargo type factor

Hazardous goods increase the severity of an accident; refrigerated loads add breakdown exposure.

{
  "id": "cargo_rates",
  "key": "cargo_rates",
  "step": "collection",
  "name": "Cargo type factor",
  "retain": true,
  "collection": [
    ["cargo_type_value", "cargo_factor_rel"],
    ["general", 1],
    ["refrigerated", 1.08],
    ["hazardous", 1.35]
  ],
  "format": {
    "cargo_factor": {
      "key": "cargo_factor",
      "label": "Cargo type factor",
      "exp": "collection.filter(cargo_type_value=={{cargo_type}}).map(cargo_factor_rel).first()",
      "type": "decimal",
      "def": 1
    }
  }
}
08Calculation
Fleet policy premium

Sum of vehicle bases × state factor × fleet-experience × safety factor, plus $200 policy fee. Multiplied by the telematics factor, radius of operation factor, cargo type factor.

{
  "id": "policy_premium",
  "key": "policy_premium",
  "step": "calculation",
  "name": "Fleet policy premium",
  "def": 0,
  "formula": "round(({{vehicle_base_total}} * {{state_auto_factor}} * {{fleet_experience_calc}} * {{safety_factor}} * {{telematics_factor}} * {{radius_factor}} * {{cargo_factor}}) + 200, 2)"
}
09Decline rules
Commercial auto exclusions

Decline empty fleets or fleets larger than 200 vehicles (outside standard commercial appetite).

{
  "id": "auto_exclusions",
  "key": "auto_exclusions",
  "step": "exclusion",
  "name": "Commercial auto exclusions",
  "def": false,
  "items": [
    {
      "id": "no_vehicles",
      "name": "No vehicles supplied",
      "exp": "{{vehicle_count}} == 0",
      "def": false
    },
    {
      "id": "very_large_fleet",
      "name": "Fleet over 200 vehicles",
      "exp": "{{vehicle_count}} > 200",
      "def": false
    }
  ]
}
10Refer rules
Commercial auto refers

Refer larger fleets (50+ vehicles) and fleets with recent losses (claim-free years = 0) for underwriter review.

{
  "id": "auto_refers",
  "key": "auto_refers",
  "step": "refer",
  "name": "Commercial auto refers",
  "def": false,
  "items": [
    {
      "id": "large_fleet",
      "name": "50+ vehicles",
      "exp": "{{vehicle_count}} >= 50",
      "def": false
    },
    {
      "id": "recent_losses",
      "name": "No claim-free years",
      "exp": "{{fleet_years_claim_free}} == 0 && {{vehicle_count}} >= 5",
      "def": false
    }
  ]
}
Worked example

Worked example: long haul refrigerated fleet with telematics

This quote was priced by the Ptally rating engine. The trace below follows it through every step to the final result.

Quote input
{
  "state": "TX",
  "fleet_years_claim_free": 3,
  "safety_program": true,
  "vehicles": [
    {
      "class": "light_truck",
      "radius": "local",
      "gvw_lbs": 8500
    },
    {
      "class": "light_truck",
      "radius": "local",
      "gvw_lbs": 9000
    },
    {
      "class": "light_truck",
      "radius": "local",
      "gvw_lbs": 10000
    }
  ],
  "telematics": true,
  "radius": "long_haul",
  "cargo_type": "refrigerated"
}
Result4,065.35VALID
Calculation trace
  1. State commercial auto factorLookup table
    state_auto_factor = 1
  2. Fleet experience creditCalculation
    max(1 - (3 * 0.03), 0.75) = 0.91
  3. Safety program creditTransform
    true == true ? 0.95 : 1.00 → 0.95
  4. Per-vehicle ratingModules
    Item 1 {"class":"light_truck","radius":"local","gvw_lbs":8500} → 1,200Item 2 {"class":"light_truck","radius":"local","gvw_lbs":9000} → 1,200Item 3 {"class":"light_truck","radius":"local","gvw_lbs":10000} → 1,200vehicle_base_total = 3,600 · vehicle_count = 3
  5. Telematics factorLookup table
    telematics_factor = 0.92
  6. Radius of operation factorLookup table
    radius_factor = 1.25
  7. Cargo type factorLookup table
    cargo_factor = 1.08
  8. Fleet policy premiumCalculation
    round((3,600 * 1 * 0.91 * 0.95 * 0.92 * 1.25 * 1.08) + 200, 2) = 4,065.35
  9. Commercial auto exclusionsDecline rules
    No vehicles supplied: not firedFleet over 200 vehicles: not fired
  10. Commercial auto refersRefer rules
    50+ vehicles: not firedNo claim-free years: not fired
Start from this model

Select commercial auto fleet as the default model for a new project, then change the rates, rules and tests to match your product. Our consultants can do this for you, with no implementation fee.

Talk to our team