{
  "tool_id": "art-451-model-outcome-analysis",
  "tool_version": "1.0.0",
  "display_name": "Model Outcome-Analysis Comparison",
  "mcp_name": "compare_model_outcome_analysis",
  "mandate_type": "compliance_control",
  "wave": 73,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-451-model-outcome-analysis.html",
  "description": "SR 26-2 ongoing-monitoring backtest: compares a list of period predicted-vs-actual model outcomes, computes per-period absolute percent error, mean/max absolute percent error, and flags periods breaching a caller-declared error tolerance. Returns a pass/fail outcome status against a caller-declared maximum breach rate. Second node in the model-passport lifecycle (after art-450 inventory entry, before art-453 validation status). Distinct from the shipped program-level gap analyzers (tools 339/451 SR 26-02 and SR 11-7 gap assessors), which score an institution's overall MRM program rather than backtest one model's outcomes. NaN-safe. Zero network, zero PII.",
  "input_schema_ref": "chaingraph/art-451-model-outcome-analysis.html#manifest",
  "consumes": ["art-450-model-inventory-entry"],
  "feeds": ["art-453-model-validation-status"],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:0109055fc8041ae9b972ed952fe72e0763d5a5ae8b30ff92ef63886e762d102f",
      "valid_from": "2026-07-23"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-07-23"
    }
  ],
  "export_capability": [
    "json"
  ],
  "compute_proof_ready": "ready",
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "GAV+h3YdzjUV+SutaowhbHWvfCPCvyMXeKpqj44PMTcItfmuQt3K2ZxustX6mpcAE69nwhSCKUvk9u4LevsVNgtGlxbHcZRXp91WLx2stbv5QAalBMdUGYyovWYuCtrKDRRlpoxMxnJ8nYvNT0Al1FCn/XjO30mZcB82jDHNI8cPqCnJ23WXHQ+2PScW/PYPwsYj466WF7qeozmnUH8PKiHX+bzz999uLIxmd4oWHl8sBmdY+1bPH3v3n3b4CN3jAFTe7mn7awvEMa7QAtcPDsr49ZCzHHR8AFk6kXvP9msO7LGi7lFaKOPNUnUfhcEdjO0dZy5lf9si6E8FGFz9Xw==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:0109055fc8041ae9b972ed952fe72e0763d5a5ae8b30ff92ef63886e762d102f",
      "output": {
        "breach_periods": [
          {
            "abs_pct_error": 15,
            "period_label": "Q2"
          }
        ],
        "breach_rate_pct": 25,
        "error_threshold_pct": 10,
        "max_absolute_percent_error": 15,
        "max_breach_rate_pct": 20,
        "mean_absolute_percent_error": 6,
        "outcome_status": "fail",
        "periods": [
          {
            "abs_pct_error": 2,
            "actual": 1020,
            "breach": false,
            "error": 20,
            "period_label": "Q1",
            "predicted": 1000
          },
          {
            "abs_pct_error": 15,
            "actual": 1150,
            "breach": true,
            "error": 150,
            "period_label": "Q2",
            "predicted": 1000
          },
          {
            "abs_pct_error": 2,
            "actual": 980,
            "breach": false,
            "error": -20,
            "period_label": "Q3",
            "predicted": 1000
          },
          {
            "abs_pct_error": 5,
            "actual": 1050,
            "breach": false,
            "error": 50,
            "period_label": "Q4",
            "predicted": 1000
          }
        ],
        "total_periods": 4,
        "worst_period": "Q2"
      }
    }
  }
}
