Skip to content
RateStack
API cookbook

Run a fair-lending sample against your engine

Synthetic-applicant generation, paired-comparison testing, and the analysis pattern for catching disparate-impact issues in pricing rules.

RTBy RateStack TeamPublishedReviewed
advancedPython

Fair-lending sampling generates pairs of synthetic applicants with identical credit profiles but varying protected characteristics, then prices each pair through your engine and tests for unexplained disparities. The pattern:

import itertools
import statistics

profiles = generate_synthetic_pool(n=500)  # identical credit, varying demographics
results = []
for p in profiles:
    quote = ratestack.price(p)
    results.append({
        "profile": p,
        "final_price": quote.best_ex.final_price,
        "trace": quote.best_ex.trace,
    })

# Group by demographic dimension; compare distributions
for dimension in ["protected_class_proxy_zip", ...]:
    groups = group_by(results, dimension)
    means = {k: statistics.mean(r["final_price"] for r in v) for k, v in groups.items()}
    if max(means.values()) - min(means.values()) > tolerance:
        flag_for_review(dimension, means)

Important: this is a screening tool, not a binding fair-lending analysis. Significant disparities should route to a qualified compliance attorney for evaluation.

Run a fair-lending sample against your engine — API cookbook | RateStack