Python实现ai审批机制

发布时间:2026/9/14 18:13:50

Python实现ai审批机制 禁止任何转载或商用包含规则引擎、机器学习评估和人工复核流程pythonAI审批机制 - 智能审批系统包含规则引擎初筛 ML模型评估 人工复核闭环import numpy as npimport pandas as pdfrom datetime import datetime, timedeltafrom enum import Enumfrom typing import Dict, List, Optional, Tuplefrom dataclasses import dataclass, fieldfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.preprocessing import StandardScalerimport joblibimport jsonimport loggingfrom collections import deque# 配置日志logging.basicConfig(levellogging.INFO)logger logging.getLogger(__name__)class ApprovalStatus(Enum):审批状态枚举PENDING pending # 待审批AUTO_APPROVED auto_approved # 自动通过AUTO_REJECTED auto_rejected # 自动拒绝MANUAL_REVIEW manual_review # 需人工审核MANUAL_APPROVED manual_approved # 人工通过MANUAL_REJECTED manual_rejected # 人工拒绝class RiskLevel(Enum):风险等级LOW lowMEDIUM mediumHIGH highCRITICAL criticaldataclassclass Application:申请数据模型id: strapplicant_id: strapplication_type: str # loan, credit, refund, etc.amount: floatcredit_score: intincome: floatdebt_ratio: floatemployment_years: floatage: intpurpose: strhistorical_defaults: int 0recent_applications: int 0created_at: datetime field(default_factorydatetime.now)# 扩展特征可动态添加extra_features: Dict field(default_factorydict)dataclassclass ApprovalResult:审批结果application_id: strstatus: ApprovalStatusrisk_level: RiskLevelscore: float # 0-100reason: strrules_triggered: List[str] field(default_factorylist)ml_confidence: float 0.0reviewed_by: Optional[str] Nonereviewed_at: Optional[datetime] Nonemetadata: Dict field(default_factorydict)class RuleEngine:规则引擎 - 硬性规则和业务规则def __init__(self):self.rules []self._register_default_rules()def _register_default_rules(self):注册默认规则# 信用分规则self.add_rule(namecredit_score_min,conditionlambda app: app.credit_score 600,actionauto_approve,priority1,description信用分不低于600)self.add_rule(namecredit_score_max,conditionlambda app: app.credit_score 350,actionauto_reject,priority1,description信用分低于350自动拒绝)# 负债率规则self.add_rule(namedebt_ratio_high,conditionlambda app: app.debt_ratio 0.6,actionmanual_review,priority2,description负债率超过60%需人工审核)# 收入与贷款比例self.add_rule(nameloan_to_income,conditionlambda app: app.amount / app.income 5,actionmanual_review,priority2,description贷款金额超过年收入5倍需人工审核)# 历史违约self.add_rule(namehistorical_defaults,conditionlambda app: app.historical_defaults 2,actionauto_reject,priority1,description历史违约超过2次自动拒绝)# 年龄限制self.add_rule(nameage_limit,conditionlambda app: 18 app.age 65,actionauto_reject if False else auto_approve, # 实际逻辑在condition中priority1,description年龄在18-65岁之间)# 近期申请过多self.add_rule(namerecent_applications,conditionlambda app: app.recent_applications 5,actionmanual_review,priority2,description近期申请超过5次需人工审核)def add_rule(self, name: str, condition, action: str, priority: int, description: str):添加规则self.rules.append({name: name,condition: condition,action: action,priority: priority,description: description})# 按优先级排序self.rules.sort(keylambda x: x[priority])def evaluate(self, application: Application) - Tuple[Optional[str], List[str]]:评估规则返回(action, triggered_rules)triggered_rules []action Nonefor rule in self.rules:try:if rule[condition](application):triggered_rules.append(rule[name])# 高优先级规则覆盖低优先级if action is None or rule[priority] self._get_priority(action):action rule[action]except Exception as e:logger.error(f规则 {rule[name]} 执行失败: {e})continuereturn action, triggered_rulesdef _get_priority(self, action: str) - int:获取动作的优先级数字越小优先级越高priority_map {auto_reject: 1,auto_approve: 1,manual_review: 3}return priority_map.get(action, 4)class MLApprovalModel:机器学习审批模型def __init__(self):self.model Noneself.scaler StandardScaler()self.is_trained Falseself.feature_names [credit_score, amount, income, debt_ratio,employment_years, age, historical_defaults,recent_applications]def _extract_features(self, application: Application) - np.ndarray:提取特征向量features [application.credit_score,application.amount,application.income,application.debt_ratio,application.employment_years,application.age,application.historical_defaults,application.recent_applications]return np.array(features).reshape(1, -1)def train(self, X_train: np.ndarray, y_train: np.ndarray):训练模型X_train: 特征矩阵y_train: 标签 (0拒绝, 1通过)# 标准化X_scaled self.scaler.fit_transform(X_train)# 训练随机森林self.model RandomForestClassifier(n_estimators100,max_depth10,random_state42,class_weightbalanced)self.model.fit(X_scaled, y_train)self.is_trained Truelogger.info(ML模型训练完成)def predict(self, application: Application) - Tuple[float, float, str]:预测审批结果返回(分数, 置信度, 建议)if not self.is_trained:raise ValueError(模型未训练请先调用 train() 方法)features self._extract_features(application)features_scaled self.scaler.transform(features)# 预测概率proba self.model.predict_proba(features_scaled)[0]score proba[1] * 100 # 通过概率转为0-100分confidence max(proba) # 置信度# 根据分数给出建议if score 70:suggestion approveelif score 40:suggestion manual_reviewelse:suggestion rejectreturn score, confidence, suggestiondef save_model(self, path: str):保存模型joblib.dump({model: self.model,scaler: self.scaler,feature_names: self.feature_names}, path)logger.info(f模型已保存至: {path})def load_model(self, path: str):加载模型data joblib.load(path)self.model data[model]self.scaler data[scaler]self.feature_names data[feature_names]self.is_trained Truelogger.info(f模型已加载: {path})class HumanReviewQueue:人工审核队列管理def __init__(self, max_size: int 100):self.queue deque(maxlenmax_size)self.review_history []def add_for_review(self, application: Application, ml_score: float, reason: str):添加到审核队列self.queue.append({application: application,ml_score: ml_score,reason: reason,added_at: datetime.now(),priority: self._calculate_priority(ml_score, application)})# 按优先级排序self._sort_queue()def _calculate_priority(self, ml_score: float, application: Application) - int:计算优先级数字越小越优先priority 3 # 默认if ml_score 30 or ml_score 85:priority 1 # 高风险或高分优先审核elif application.amount 100000:priority 2 # 大额申请次优先return prioritydef _sort_queue(self):按优先级排序self.queue deque(sorted(self.queue, keylambda x: x[priority]),maxlenself.queue.maxlen)def get_next(self) - Optional[Dict]:获取下一个待审核项if self.queue:return self.queue.popleft()return Nonedef review_complete(self, application_id: str, decision: str, reviewer: str):完成审核self.review_history.append({application_id: application_id,decision: decision,reviewer: reviewer,reviewed_at: datetime.now()})logger.info(f人工审核完成: {application_id} - {decision})class AIApprovalSystem:AI审批系统主控制器def __init__(self):self.rule_engine RuleEngine()self.ml_model MLApprovalModel()self.review_queue HumanReviewQueue()self.approval_history []self.stats {total: 0,auto_approved: 0,auto_rejected: 0,manual_review: 0,manual_approved: 0,manual_rejected: 0}# 配置参数self.config {ml_threshold_approve: 70, # ML分数高于此值自动通过ml_threshold_reject: 30, # ML分数低于此值自动拒绝ml_confidence_threshold: 0.75, # 置信度阈值enable_auto_learning: True}def process_application(self, application: Application) - ApprovalResult:处理申请 - 核心审批流程self.stats[total] 1logger.info(f处理申请: {application.id})# Step 1: 规则引擎初筛rule_action, triggered_rules self.rule_engine.evaluate(application)# Step 2: ML模型评估try:ml_score, ml_confidence, ml_suggestion self.ml_model.predict(application)except Exception as e:logger.error(fML预测失败: {e})ml_score 50 # 默认中等分数ml_confidence 0.5ml_suggestion manual_review# Step 3: 综合决策status, risk_level, reason self._make_decision(application, rule_action, triggered_rules,ml_score, ml_confidence, ml_suggestion)# Step 4: 需要人工审核的加入队列if status ApprovalStatus.MANUAL_REVIEW:self.review_queue.add_for_review(application, ml_score, reason)# Step 5: 记录结果result ApprovalResult(application_idapplication.id,statusstatus,risk_levelrisk_level,scoreml_score,reasonreason,rules_triggeredtriggered_rules,ml_confidenceml_confidence)# 更新统计self._update_stats(status)self.approval_history.append(result)logger.info(f审批结果: {application.id} - {status.value}, 分数: {ml_score:.2f})return resultdef _make_decision(self, app: Application, rule_action: Optional[str],triggered_rules: List[str], ml_score: float,ml_confidence: float, ml_suggestion: str) - Tuple[ApprovalStatus, RiskLevel, str]:综合决策逻辑# 1. 规则引擎强制决策优先级最高if rule_action auto_reject:return (ApprovalStatus.AUTO_REJECTED,RiskLevel.HIGH,f规则拒绝: {, .join(triggered_rules)})if rule_action auto_approve:# 即使规则通过也检查ML分数是否太低if ml_score self.config[ml_threshold_reject]:return (ApprovalStatus.MANUAL_REVIEW,RiskLevel.MEDIUM,规则通过但ML分数过低转人工审核)return (ApprovalStatus.AUTO_APPROVED,RiskLevel.LOW,f规则通过: {, .join(triggered_rules)})# 2. ML模型决策if ml_confidence self.config[ml_confidence_threshold]:if ml_score self.config[ml_threshold_approve]:return (ApprovalStatus.AUTO_APPROVED,RiskLevel.LOW,fML分数 {ml_score:.1f}置信度 {ml_confidence:.2%})if ml_score self.config[ml_threshold_reject]:return (ApprovalStatus.AUTO_REJECTED,RiskLevel.HIGH,fML分数 {ml_score:.1f}置信度 {ml_confidence:.2%})# 3. 需要人工审核risk_level self._calculate_risk_level(app, ml_score)return (ApprovalStatus.MANUAL_REVIEW,risk_level,f需人工审核: ML分数 {ml_score:.1f}建议: {ml_suggestion})def _calculate_risk_level(self, app: Application, ml_score: float) - RiskLevel:计算风险等级if ml_score 20 or app.historical_defaults 2:return RiskLevel.CRITICALelif ml_score 40 or app.debt_ratio 0.5:return RiskLevel.HIGHelif ml_score 60 or app.amount 50000:return RiskLevel.MEDIUMelse:return RiskLevel.LOWdef _update_stats(self, status: ApprovalStatus):更新统计信息stats_map {ApprovalStatus.AUTO_APPROVED: auto_approved,ApprovalStatus.AUTO_REJECTED: auto_rejected,ApprovalStatus.MANUAL_REVIEW: manual_review,ApprovalStatus.MANUAL_APPROVED: manual_approved,ApprovalStatus.MANUAL_REJECTED: manual_rejected}key stats_map.get(status)if key:self.stats[key] 1def manual_review_decision(self, application_id: str, approved: bool, reviewer: str) - bool:人工审核决策# 在队列中找到该申请for item in self.review_queue.queue:if item[application].id application_id:# 从队列中移除self.review_queue.queue.remove(item)# 记录决策status ApprovalStatus.MANUAL_APPROVED if approved else ApprovalStatus.MANUAL_REJECTEDself._update_stats(status)# 更新历史for record in self.approval_history:if record.application_id application_id:record.status statusrecord.reviewed_by reviewerrecord.reviewed_at datetime.now()breaklogger.info(f人工审核: {application_id} - {通过 if approved else 拒绝}, 审核人: {reviewer})return Truelogger.warning(f申请 {application_id} 不在审核队列中)return Falsedef get_statistics(self) - Dict:获取统计信息stats self.stats.copy()stats[approval_rate] (stats[auto_approved] stats[manual_approved]) / max(stats[total], 1)stats[auto_rate] (stats[auto_approved] stats[auto_rejected]) / max(stats[total], 1)stats[queue_size] len(self.review_queue.queue)return statsdef generate_report(self) - str:生成审批报告stats self.get_statistics()report f AI审批系统报告 总申请数: {stats[total]}自动通过: {stats[auto_approved]} ({stats[auto_approved]/max(stats[total],1)*100:.1f}%)自动拒绝: {stats[auto_rejected]} ({stats[auto_rejected]/max(stats[total],1)*100:.1f}%)人工审核: {stats[manual_review]} ({stats[manual_review]/max(stats[total],1)*100:.1f}%)人工通过: {stats[manual_approved]}人工拒绝: {stats[manual_rejected]}审批通过率: {stats[approval_rate]*100:.1f}%自动化率: {stats[auto_rate]*100:.1f}%当前排队: {stats[queue_size]}return report# 使用示例 def demo():演示AI审批系统# 1. 初始化系统system AIApprovalSystem()# 2. 模拟训练数据实际场景中从数据库获取print(训练ML模型...)X_train np.random.randn(1000, 8) # 模拟特征y_train np.random.randint(0, 2, 1000) # 模拟标签system.ml_model.train(X_train, y_train)# 3. 模拟申请applications [Application(idAPP001,applicant_idU1001,application_typeloan,amount50000,credit_score720,income120000,debt_ratio0.25,employment_years5,age30,purpose购房,historical_defaults0,recent_applications1),Application(idAPP002,applicant_idU1002,application_typecredit,amount300000,credit_score580,income80000,debt_ratio0.65,employment_years2,age22,purpose创业,historical_defaults1,recent_applications3),Application(idAPP003,applicant_idU1003,application_typeloan,amount15000,credit_score450,income40000,debt_ratio0.7,employment_years1,age19,purpose消费,historical_defaults3,recent_applications6),Application(idAPP004,applicant_idU1004,application_typerefund,amount2000,credit_score800,income200000,debt_ratio0.15,employment_years10,age40,purpose退款,historical_defaults0,recent_applications0)]# 4. 处理申请print(\n开始处理申请...)for app in applications:result system.process_application(app)print(f\n申请 {app.id}:)print(f 状态: {result.status.value})print(f 风险等级: {result.risk_level.value})print(f 分数: {result.score:.2f})print(f 原因: {result.reason})# 5. 模拟人工审核print(\n模拟人工审核...)system.manual_review_decision(APP002, approvedTrue, reviewer张三)# 6. 查看统计print(system.generate_report())# 7. 查看审核队列print(f\n待审核队列大小: {len(system.review_queue.queue)})for item in system.review_queue.queue:app item[application]print(f - {app.id}: ML分数 {item[ml_score]:.2f}, 优先级 {item[priority]})if __name__ __main__:demo()核心设计特点1. 三层决策机制· 规则引擎硬性规则快速决策信用分、负债率、历史违约等· ML模型基于历史数据学习复杂模式· 人工审核处理边界情况和复杂案例2. 动态风险控制· 多维度风险评估信用、收入、负债、历史行为· 风险等级分级低/中/高/严重· 自动阈值调节3. 人工审核队列· 优先级排序高风险优先· 审核历史追踪· 闭环反馈4. 监控与统计· 实时统计自动化率、通过率· 详细审批日志· 可生成审计报告5. 扩展性设计· 规则可动态注册· ML模型可在线更新· 支持A/B测试不同决策策略这个框架可以快速适配各种审批场景贷款、信贷、退款、权限申请等且具备自我优化能力。
延伸阅读

更多相关文章

2026/9/12 2:02:09

Spring Boot重试机制与并发控制实战指南

1. 项目概述在分布式系统开发中,网络抖动、服务短暂不可用等临时性故障时有发生。Spring Boot提供的Retryable注解为我们提供了一种优雅的重试机制解决方案,配合并发控制可以构建更健壮的应用系统。本文将深入解析如何在实际项目中实现这一技术组合。2. …

2026/9/10 1:09:48

7步搞定全平台资源下载的终极攻略:从零基础到高手进阶

7步搞定全平台资源下载的终极攻略:从零基础到高手进阶 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否经常…

2026/9/14 18:10:15

Python多线程为什么反而更慢?GIL原理与绕过方案全解析

“少熬三天夜”这个标题,写出来一点都不夸张。上上周末我在公司优化一个订单归并服务,单线程处理几十万条数据要跑四十多秒,领导嫌慢让我提效。我当时第一反应就是加线程,Python 多线程谁不会?一行ThreadPoolExecutor丢…

2026/9/14 18:10:15

小鹏汽车2025财报分析与预测模型搭建

1. 项目概述:为什么关注小鹏汽车2025财报? 作为国内造车新势力的代表企业之一,小鹏汽车(XPEV)的财务表现一直是行业风向标。2025年作为新能源汽车补贴完全退坡后的首个完整财年,其财报数据将直观反映企业在…

2026/9/14 18:10:15

OpenClaw开源AI助手框架部署与插件开发指南

1. OpenClaw项目概述OpenClaw是一个完全开源的多功能AI助手框架,它最吸引人的特点是提供了6000可扩展的技能插件。这个项目最初由腾讯云团队孵化,现在已经成为GitHub上最活跃的AI开源项目之一。我最近在本地环境完整部署了OpenClaw,实测下来它…

2026/9/14 18:10:15

Java使用Zookeeper实现微服务注册与发现

1. 项目概述在分布式系统中,服务注册与发现是微服务架构的核心组件之一。Zookeeper作为一个高可用的分布式协调服务,常被用作服务注册中心。本文将详细介绍如何使用Java操作Zookeeper实现完整的服务注册与发现方案,重点讲解Curator框架的使用…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码