基于规则的校正:用业务规则修正模型的错误输出

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}")
    # 接入监控系统,统计规则作用频率

实例:贷款审批模型的规则校正

假设有一个贷款审批模型输出“通过”或“拒绝”,现加入以下业务规则:

  1. 黑名单用户直接拒绝,无论模型结果。
  2. 贷款金额超过年收入5倍时拒绝
  3. 模型分置信度低于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