Skip to main content

EqualOpportunityPriceScenario

Statistics scenarios · Implementation: mlsysim/engine/scenario_definitions/statistics.py.

Construct this scenario with keyword inputs. The fields below show the types and defaults declared by this class.

Utility per applicant of raising group’s TPR to reference_group’s by moving its threshold, when that move raises its FPR by fpr_increase: a repaid loan earns repay_margin, a default loses default_loss (both USD).

Notes

Equation: Utility is TPR*base_rate*repay_margin-FPR*(1-base_rate)*default_loss; threshold changes add their corresponding expected-value differences.

Assumptions: The TPR target and added FPR are supplied jointly, with fixed base rates and monetary outcomes.

Excludes: Estimating an ROC frontier, downstream behavioral changes, and a policy judgment about the acceptability of the tradeoff.

References

Derivation: Utility is TPR*base_rate*repay_margin-FPR*(1-base_rate)*default_loss; threshold changes add their corresponding expected-value differences. This is declared scenario accounting rather than a fitted empirical law.

Examples

>>> from mlsysim import Scenarios
>>> scenario = Scenarios.CreditServiceEqualOpportunityPrice
>>> value = scenario.base_rate
>>> round(float(value), 3)
0.5

Attributes

Name Description
added_default_cost Additional USD per applicant from the supplied FPR increase among negative-label
added_repaid_value Additional USD per applicant from the TPR increase at the same base rate.
base_rate Positive-label fraction for the selected group from the confusion-matrix scenario.
baseline_utility Expected USD per applicant from repaid true positives less losses on false positives.
confusion
default_loss
fpr_before Selected group’s current false-positive rate, dimensionless.
fpr_increase
group
group_share Selected group’s applicant share from the confusion-matrix scenario.
loss_fraction Negative utility change divided by nonzero baseline utility, dimensionless.
net_change Additional repaid-loan value minus additional default loss, in USD per applicant.
population_average_loss Selected-group utility loss weighted by its population share, in USD per population
reference_group
repay_margin
tpr_after Reference group’s true-positive rate used as the selected group’s target.
tpr_before Selected group’s current true-positive rate, dimensionless.
tpr_gap Target minus current true-positive rate, in fractional rate units.
utility_after Baseline utility plus modeled change, in USD per applicant.

confusion

Type: GroupConfusionScenario.

Declared default: required.

group

Type: str.

Declared default: required.

reference_group

Type: str.

Declared default: required.

repay_margin

Type: Quantity.

Declared default: required.

default_loss

Type: Quantity.

Declared default: required.

fpr_increase

Type: float.

Declared default: required.

base_rate

engine.scenario_types.EqualOpportunityPriceScenario.base_rate

Positive-label fraction for the selected group from the confusion-matrix scenario.

Equation: confusion.base_rate(group).

tpr_before

engine.scenario_types.EqualOpportunityPriceScenario.tpr_before

Selected group’s current true-positive rate, dimensionless.

Equation: confusion.tpr(group).

tpr_after

engine.scenario_types.EqualOpportunityPriceScenario.tpr_after

Reference group’s true-positive rate used as the selected group’s target.

Equation: confusion.tpr(reference_group).

fpr_before

engine.scenario_types.EqualOpportunityPriceScenario.fpr_before

Selected group’s current false-positive rate, dimensionless.

Equation: confusion.fpr(group).

tpr_gap

engine.scenario_types.EqualOpportunityPriceScenario.tpr_gap

Target minus current true-positive rate, in fractional rate units.

Equation: tpr_after - tpr_before.

baseline_utility

engine.scenario_types.EqualOpportunityPriceScenario.baseline_utility

Expected USD per applicant from repaid true positives less losses on false positives.

Equation: tpr_before * p * repay_margin - fpr_before * (1 - p) * default_loss.

added_repaid_value

engine.scenario_types.EqualOpportunityPriceScenario.added_repaid_value

Additional USD per applicant from the TPR increase at the same base rate.

Equation: tpr_gap * base_rate * repay_margin.

added_default_cost

engine.scenario_types.EqualOpportunityPriceScenario.added_default_cost

Additional USD per applicant from the supplied FPR increase among negative-label applicants.

Equation: fpr_increase * (1 - base_rate) * default_loss.

net_change

engine.scenario_types.EqualOpportunityPriceScenario.net_change

Additional repaid-loan value minus additional default loss, in USD per applicant.

Equation: added_repaid_value - added_default_cost.

utility_after

engine.scenario_types.EqualOpportunityPriceScenario.utility_after

Baseline utility plus modeled change, in USD per applicant.

Equation: baseline_utility + net_change.

loss_fraction

engine.scenario_types.EqualOpportunityPriceScenario.loss_fraction

Negative utility change divided by nonzero baseline utility, dimensionless.

Equation: (-net_change / baseline_utility).to('').magnitude.

group_share

engine.scenario_types.EqualOpportunityPriceScenario.group_share

Selected group’s applicant share from the confusion-matrix scenario.

Equation: confusion.share(group).

population_average_loss

engine.scenario_types.EqualOpportunityPriceScenario.population_average_loss

Selected-group utility loss weighted by its population share, in USD per population applicant.

Equation: -net_change * group_share.

Back to top