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.5Attributes
| 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.
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.