# Governing fairness and compliance in pricing models
A state regulator returns your auto insurance rate filing with a single question: "Explain why your model charges applicants in ZIP code 60636 more than applicants in 60614, and prove it is not a proxy for race."
Your model never saw race. It saw ZIP code, credit-based insurance score, and vehicle type. But the regulator knows that these variables can quietly carry protected characteristics. If you cannot answer, your filing stalls, and you cannot sell the product at the rate you need.
This lesson shows you how to audit a machine-learning rating model, spot proxy discrimination, measure disparate impact, and document it well enough to survive review.
Proxy discrimination happens when a variable that looks neutral stands in for a protected class. Example: a model excludes race but uses ZIP code. Because U.S. neighborhoods remain racially segregated, ZIP code can predict race. The model discriminates without ever naming the protected trait.
Disparate impact is the outcome: a facially neutral practice that produces worse results for a protected group, even without intent to discriminate. A model can be perfectly "blind" and still charge one group systematically more.
Insurance adds a wrinkle. Actuarial fairness means price should reflect expected loss. A twenty-year-old driver really does crash more than a fifty-year-old, so charging them more is legal and expected. The regulator is not banning differences. They are banning differences that track protected classes without a legitimate risk justification.
Protected classes in insurance vary by state but commonly include race, religion, national origin, and sometimes gender and credit. Some states (California, for one) restrict or ban certain rating factors entirely.
Here is the catch. You cannot measure disparate impact by race if you never collected race. Most insurers do not, and often cannot, ask.
The standard workaround is proxy estimation. The most cited method is Bayesian Improved Surname Geocoding (BISG), which estimates the probability that a policyholder belongs to a racial group using their surname and geographic location. The CFPB published its BISG methodology as a public reference.
BISG is imperfect. It gives you a probability, not a fact. But it lets you estimate group-level impact, which is what fairness testing needs.
Start with the inputs. For every rating variable, ask: how strongly does it predict a protected class?
A simple, defensible first pass is to regress your estimated race probabilities against each feature and check the strength of the relationship.
import pandas as pd
import statsmodels.api as sm
# df has: feature columns + 'race_prob_black' from BISG
features = ['credit_score', 'zip_risk_tier', 'vehicle_age', 'annual_mileage']
for f in features:
X = sm.add_constant(df[f])
model = sm.OLS(df['race_prob_black'], X).fit()
print(f, "R-squared:", round(model.rsquared, 3))A high R-squared means the variable carries a lot of protected-class signal. That does not automatically make it illegal, but it flags the variable for justification. Credit-based insurance scores and geographic tiers are the usual suspects.
Now test the price the model produces, not just the inputs.
Two common metrics:
Disparate impact ratio. Compare the rate at which each group receives an unfavorable outcome (for example, being placed in the top pricing tier). A ratio far from 1.0 signals imbalance. Regulators and courts sometimes reference a "four-fifths rule" (a ratio below 0.80) borrowed from employment law, though it is a rough guide, not a legal standard in insurance.
Group premium comparison. Weight premiums by BISG probabilities and compare average predicted premium across estimated groups. If group A pays materially more, you need to show that group A also has materially higher expected losses.
The key test is conditional: does the price gap remain after you control for legitimate risk factors? If two drivers have identical loss expectations but different estimated-race groups pay different prices, that is the smoking gun.
You have three honest options for a variable that shows proxy behavior:
1. Justify and keep it. Show that the variable predicts loss for a real, causal reason, and that its predictive power does not collapse once you account for race. Document the actuarial rationale.
2. Modify it. Replace a coarse proxy with a more direct measure. Example: instead of raw ZIP code, use garaging-based catastrophe risk (hail, flood) that has a physical cause and less racial correlation.
3. Drop it. If a variable adds little accuracy but carries heavy proxy signal, removing it is often the cleanest path.
Beware proxy leakage through interactions. Removing race does nothing if five other variables jointly reconstruct it. Test combinations, not just single features.
You can also adjust the model itself. Techniques include reweighting training data, adding fairness constraints during training, or post-processing scores to equalize outcomes across groups.
Big caveat for insurance: deliberately altering prices by protected class can itself be illegal in some states, even if the goal is fairness. Adjusting a Black applicant's price because they are Black is disparate treatment, which is generally banned outright. This is a genuine legal tension. Involve counsel before applying any correction that uses protected-class estimates in pricing.
For most filings, the safer route is Step 3: fix the inputs, not the output.
A rate filing is the submission an insurer makes to a state insurance department seeking approval for its rates. Most states require rates to be "not unfairly discriminatory," among other standards. The NAIC (National Association of Insurance Commissioners) has issued model bulletins on AI use that many states have adopted, pushing insurers toward documented governance.
Your documentation package should include:
Write it so a non-technical examiner can follow it. Clarity is a compliance asset.
Vérification des acquis
1. What is the key distinction between proxy discrimination and disparate impact?
2. Why does the concept of actuarial fairness complicate fairness audits in insurance pricing?
3. A model excludes race entirely but uses ZIP code. Why can it still be problematic to a regulator?
4. Select ALL correct answers about what regulators expect when reviewing an ML rating model.
Sélectionnez toutes les réponses correctes.
5. Select ALL correct answers about challenges in auditing a model for disparate impact by race.
Sélectionnez toutes les réponses correctes.
Suppose your model puts 22 percent of estimated-white applicants and 41 percent of estimated-Black applicants into the top premium tier. Ratio: 0.22 / 0.41 = 0.54. That is well below 0.80 and will draw scrutiny.
You investigate. After controlling for prior claims, annual mileage, and vehicle safety rating, the gap shrinks to a ratio of 0.91. Most of the disparity was explained by legitimate loss factors.
But a residual gap remains, and you trace it to credit-based insurance score, which carries strong proxy signal in your data. You test dropping it. Accuracy falls only slightly, and the ratio rises to 0.97.
Decision: drop or replace the credit factor for this product, document the tradeoff (small accuracy loss, large fairness gain), and file with the full analysis attached. That story is defensible.