基于规则的校正:用业务规则修正模型的错误输出
FreeGuideOnline
最新
2026-06-29
python def rule_age_range(prediction): """年龄必须在0~120之间""" return max(0, min(prediction, 120))
def rule_income_debt_ratio(income, debt, model_result): """负债收入比不能超过50%,否则强制拒绝""" if debt / income > 0.5: return "REJECT" return model_result
def rule_marital_status(row, prediction): """已婚但配偶信息为空时,标记为需人工核查""" if row['marital_status'] == 'married' and not row['spouse_name']: return "MANUAL_REVIEW" return prediction
### 2. 构建规则链
按照优先级顺序执行规则,前一条规则的输出作为后一条的输入。
```python
def apply_rules(raw_prediction, context):
result = raw_prediction
# 按顺序应用规则
result = rule_age_range(result)
result = rule_marital_status(context, result)
result = rule_income_debt_ratio(
context['income'], context['debt'], result
)
return result
3. 记录与监控
每次规则触发时都应该记录日志,统计规则命中率,避免规则“静默作用”无法被评估。
def audit_rule(rule_name, original, corrected):
print(f"[RULE] {rule_name}: {original} -> {corrected}")
# 接入监控系统,统计规则作用频率
实例:贷款审批模型的规则校正
假设有一个贷款审批模型输出“通过”或“拒绝”,现加入以下业务规则:
- 黑名单用户直接拒绝,无论模型结果。
- 贷款金额超过年收入5倍时拒绝。
- 模型分置信度低于0.7时,转人工审核。
def final_decision(user_info, model_pred, model_proba):
# 规则1:黑名单硬拒绝
if user_info['in_blacklist']:
audit_rule('blacklist', model_pred, 'REJECT')
return 'REJECT'
# 规则2:负债比过高
if user_info['loan_amount'] > user_info['annual_income'] * 5:
audit_rule('high_loan_to_income', model_pred, 'REJECT')
return 'REJECT'
# 规则3:低置信度
if model_proba < 0.7:
audit_rule('low_confidence', model_pred, 'MANUAL_REVIEW')
return 'MANUAL_REVIEW'
# 未触发规则,返回模型原始结果
return model_pred