Rating Step¶
You have a set of rating factors - area, age band, NCD level - and a table of relativities for each. The Rating Step looks up the right factor for each row and combines them into a single multiplier (or sum). This is how you build a traditional multiplicative or additive rating structure.
Spreadsheet equivalent
Like VLOOKUP or INDEX/MATCH in Excel, but it handles multi-dimensional lookups and combines the results automatically.
When to use
- Building a traditional multiplicative or additive rating structure.
- Recreating factor tables from a spreadsheet or another rating tool.
- Looking up relativities based on one, two, or three dimensions.
- Use Banding first if your tables expect banded inputs rather than raw values.
This node accepts a single input.
| Config | Description |
|---|---|
tables |
Required. List of rating tables |
operation |
Required. How to combine factors across tables: "multiply", "add", "min", or "max" |
combinedColumn |
Name of the column containing the combined result. If omitted, individual factor columns are still created but no combined column is produced. |
Each table has:
| Field | Description |
|---|---|
name |
Required. Table name |
factors |
Required. Input columns to match on (up to 3 for multi-way lookups) |
outputColumn |
Required. Column name for this table's looked-up value |
defaultValue |
Value used when the input doesn't match any entry in the table (e.g. an area code you haven't mapped) |
entries |
Required. The factor table. In JSON sidecars, factor values are nested keys and the leaf is the looked-up value. |
A one-way table maps a single column. A two-way table maps two columns. In the sidecar JSON, a one-way area factor and a one-way age factor look like this:
{
"tables": [
{
"name": "Area Factor",
"factors": ["area"],
"outputColumn": "area_factor",
"defaultValue": "1.0",
"entries": {
"London": 1.25,
"Manchester": 1.10,
"Rural": 0.85
}
},
{
"name": "Age Factor",
"factors": ["age_band"],
"outputColumn": "age_factor",
"defaultValue": "1.0",
"entries": {
"18-25": 1.40,
"26-65": 1.00,
"65+": 1.15
}
}
],
"operation": "multiply",
"combinedColumn": "location_age_factor"
}
For two-way tables, each factor adds one nesting level in the order listed in factors. For three-way tables, the sidecar matches the editor: the third factor is the outer dropdown, the second factor is the column group, and the first factor is the row key. With factors set to ["vehicle_age_band", "cover_type", "channel"], entries nest as channel -> cover_type -> vehicle_age_band -> value. When Haute loads the sidecar, it expands these maps back into row entries with one key per factor plus value for the editor, execution, and trace.
Before and after:
BEFORE AFTER
| area | age_band | | area | age_band | area_factor | age_factor | location_age_factor |
|------------|----------| |--------|----------|-------------|------------|---------------------|
| London | 18-25 | → | London | 18-25 | 1.25 | 1.40 | 1.75 |
| Rural | 26-65 | | Rural | 26-65 | 0.85 | 1.00 | 0.85 |
| Manchester | 65+ | | Man... | 65+ | 1.10 | 1.15 | 1.265 |
String matching
Factor values are matched as strings. If your data has "London" but your table has "london", it won't match. Use a Polars node upstream to normalise casing if needed.