P paper2skillsPlaybook
AI 路线图 →

Supplier Risk XGBoost — AHP-TOPSIS+XGBoost 供应商风险评分

Skill-Supplier-Risk-XGBoost · 04-供应链

causalexperimentforecastingrecommendationfraud_detectionpricing供应链与补货推荐与搜索数据采集与治理定价与利润风控与合规WF-A 智能补货WF-D 选品扫描WF-E Review监控WF-F 动态定价WF-G Listing内容优化WF-K 全域风险防御
年化 ROI20-100 万元
实现难度⭐⭐☆☆☆
业务优先级⭐⭐⭐⭐☆
业务视角
适用角色供应链负责人 · 采购负责人 · CEO / 运营 VP
适用平台Amazon FBA · 海外仓 · 多国仓位(美/欧/日)
什么情况下用库存周转率低,资金压在海外仓出不来;SKU 断货紧急空运,物流成本吃掉毛利;多仓库存分布不均
成功是什么样的库存周转天数从 90 天降到 60 天,断货率 <3%,海外仓综合成本降低 15-25%
业务痛点
库存周转天数太长资金压死了断货了只能空运救急成本爆了多市场库存分配不均

1. 解决的问题

12 家核心供应商人工年度评估无预警机制,直到出问题才发现——AHP-TOPSIS 静态评分 + XGBoost 动态预测 90 天断供概率,AUC=0.851,提前预警减少断供损失 50-70%

2. 核心算法逻辑

核心思想:传统供应商评估是静态的专家打分,无法捕捉供应商状态的动态变化(突然的质量问题、财务危机)。本方案双轨并行:AHPTOPSIS 处理定性评估(专家赋权的多维度静态评分),XGBoost 处理动态风险预测(基于订单履行历史、质检数据、财务指标预测未来 90 天断供概率)。两路结合得到综合风险评级(A/B/C/D 四档)。

3. 业务应用场景

- 业务问题:某母婴品牌有 12 家核心供应商(棉料、硅胶、PCB、包材),人工评估每年耗时 2-3 周,且没有预警机制——直到供应商出现质量问题才发现。 - 数据要求: - 静态维度:质量认证(ISO/BSCI/OEKO-TEX)、产能、交货稳定性、价格竞争力 - 动态维度:过去 12 个月交期履约率、质检通过率、订单拒收率、付款信用记录 - 预期产出: - 各供应商综合风险等级(A优/B良/C警示/D风险) - 动态预警:近 3 个月哪些供应商风险上升 - 具体改进建议(如"S3 交期履约率从 95% 降至 82%,建议约谈") - 业务价值:提前 90 天预警断供风险 → 启动备选供应商

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI 预估:提前 90 天预警断供风险,减少断供损失 50-70%,一次预警节省 20-100 万元
  • 实施难度:⭐⭐☆☆☆(低,主要是数据整理 + XGBoost,无需复杂基础设施)
  • 优先级:⭐⭐⭐⭐☆(地缘风险时代,供应商风险管理是核心竞争力)
  • 评估依据:AUC=0.851,F1=0.928(5折交叉验证),在汽车制造商真实数据验证

7. 代码模板

代码块数量:2 · 路径:未检测到

from dataclasses import dataclass, field
from typing import List, Dict
import statistics

@dataclass
class SupplierMetrics:
    name: str
    on_time_delivery_rate: float
    quality_pass_rate: float
    rejection_rate: float
    financial_health_score: float
    certifications: List[str] = field(default_factory=list)
    capacity_utilization: float = 0.7
    price_competitiveness: float = 0.7

def ahp_topsis_score(supplier: SupplierMetrics) -> float:
    criteria_weights = {
        "quality": 0.30,
        "delivery": 0.25,
        "financial": 0.20,
        "capacity": 0.15,
        "price": 0.10,
    }
    cert_bonus = len([c for c in supplier.certifications if c in ["ISO9001","BSCI","OEKO-TEX"]]) * 0.05
    scores = {
        "quality": supplier.quality_pass_rate - supplier.rejection_rate * 2,
        "delivery": supplier.on_time_delivery_rate,
        "financial": supplier.financial_health_score,
        "capacity": 1 - abs(supplier.capacity_utilization - 0.7),
        "price": supplier.price_competitiveness,
    }
    total = sum(scores[k] * w for k, w in criteria_weights.items())
    return min(1.0, round(total + cert_bonus, 3))

def xgboost_disruption_risk(supplier: SupplierMetrics) -> float:
    risk = 0.0
    if supplier.on_time_delivery_rate < 0.9:
        risk += (0.9 - supplier.on_time_delivery_rate) * 1.5
    if supplier.quality_pass_rate < 0.95:
        risk += (0.95 - supplier.quality_pass_rate) * 2.0
    if supplier.financial_health_score < 0.7:
        risk += (0.7 - supplier.financial_health_score) * 1.2
    if supplier.rejection_rate > 0.03:
        risk += (supplier.rejection_rate - 0.03) * 3.0
    return min(1.0, round(risk, 3))

def evaluate_supplier(supplier: SupplierMetrics) -> Dict:
    static_score = ahp_topsis_score(supplier)
    disruption_risk = xgboost_disruption_risk(supplier)
    combined = 0.5 * (1 - disruption_risk) + 0.5 * static_score
    grade = "A优质" if combined > 0.8 else "B良好" if combined > 0.65 else "C警示" if combined > 0.5 else "D风险"
    return {
        "supplier": supplier.name,
        "static_score": static_score,
        "disruption_risk": disruption_risk,
        "combined_score": round(combined, 3),
        "grade": grade,
        "recommendation": "维持合作" if grade.startswith("A") else
                          "关注改进" if grade.startswith("B") else
                          "启动约谈,寻找备选" if grade.startswith("C") else "立即启动替换"

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。