Regulatory Risk & Interpretability
In many high-stakes industries like FinTech and Healthcare, it is not enough to have a performant model; the model must also be explainable and compliant with regulations (e.g., GDPR, ECOA).
Perpetual provides built-in tools to support these requirements.
Adverse Action Codes (Reason Codes)
When a credit application is rejected, regulations often require providing the applicant with the main reasons for the rejection (Adverse Action Codes).
The risk.PerpetualRiskEngine automates this process by analyzing the feature contributions of rejected samples relative to a decision threshold.
from perpetual import PerpetualBooster, PerpetualRiskEngine
# model is a fitted PerpetualBooster
engine = PerpetualRiskEngine(model)
# threshold for approval (e.g., probability of default < 0.2)
reasons = engine.generate_reason_codes(X_applicants, threshold=0.2)
# reasons[i] contains top N negative contributors for rejected applicants
Monotonicity Constraints
To ensure fairness and common-sense behavior (e.g., increasing income should not decrease the probability of loan approval), Perpetual supports strictly enforced monotonicity constraints.
model = PerpetualBooster(
monotone_constraints={"income": 1} # 1 for increasing, -1 for decreasing
)
model.fit(X, y)
Tutorials
For a detailed walkthrough using the German Credit dataset, see the Risk, Compliance, and Interpretability.