← Back to tutorials

Model Explainability Reports

Generating SHAP and LIME model explanation reports

Model Explainability Reports

Overview

Generating SHAP and LIME model explanation reports. This guide covers practical implementation for production ML systems.

Why This Matters in MLOps

Setup

bash

Install required tools

pip install shap mlflow pandas numpy scikit-learn

Or with Docker

docker pull python:3.11-slim

Core Implementation

python
import os
import json
import logging
from datetime import datetime
from pathlib import Path

logger = logging.getLogger(__name__)

class ModelExplainabilityReports: """ Model Explainability Reports implementation. Handles: explainability Tool: shap """ def __init__(self, config: dict = None): self.config = config or self._default_config() self._setup() def _default_config(self) -> dict: return { "tool": "shap", "environment": os.getenv("ENVIRONMENT", "development"), "log_level": "INFO", } def _setup(self): """Initialize shap connection and resources.""" logging.basicConfig(level=self.config.get("log_level", "INFO")) logger.info(f"Initialized Model Explainability Reports with config: {self.config}") def run(self, **kwargs) -> dict: """Execute explainability.""" start = datetime.utcnow() try: result = self._execute(**kwargs) elapsed = (datetime.utcnow() - start).total_seconds() logger.info(f"Model Explainability Reports completed in {elapsed:.2f}s") return { "status": "success", "result": result, "elapsed_seconds": elapsed } except Exception as e: logger.error(f"Model Explainability Reports failed: {e}") return { "status": "failed", "error": str(e) } def _execute(self, **kwargs) -> dict: """Core explainability logic. Override to customize.""" return {"completed": True, "tool": "shap"}

Configuration

config = { "tool": "shap", "tracking_uri": os.getenv("MLFLOW_TRACKING_URI", "http://localhost:5000"), "artifact_root": "./artifacts", }

Initialize

processor = ModelExplainabilityReports(config) result = processor.run() print(json.dumps(result, indent=2))

SHAP Integration

python

Specific shap integration for explainability

import subprocess

def setup_shap(): """Configure shap for explainability.""" # Initialize project print(f"Setting up shap for explainability...") # Example configuration config = { "project": "my-ml-project", "tool": "shap", "specialty": "explainability", "version": "1.0.0" } # Save configuration Path(".shap").mkdir(exist_ok=True) with open(f".shap/config.json", "w") as f: json.dump(config, f, indent=2) print(f"shap configured for explainability") return config

config = setup_shap()

Monitoring and Alerting

python
from dataclasses import dataclass
import time

class MLOpsMonitor: """Monitor explainability metrics.""" def __init__(self): self.metrics: list[MetricSnapshot] = [] self.thresholds = { "error_rate": 0.05, "latency_p99_ms": 1000, "data_drift_score": 0.3 } def record(self, metric: str, value: float, labels: dict = None): snapshot = MetricSnapshot( timestamp=time.time(), metric_name=metric, value=value, labels=labels or {} ) self.metrics.append(snapshot) self._check_threshold(metric, value) def _check_threshold(self, metric: str, value: float): threshold = self.thresholds.get(metric) if threshold and value > threshold: logger.warning(f"ALERT: {metric}={value:.3f} exceeds threshold {threshold}")

monitor = MLOpsMonitor()

CI/CD Integration

yaml

.github/workflows/ml-pipeline.yml

name: ML Pipeline

on: push: paths: ['src/', 'data/']

jobs: train-and-evaluate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: pip install -r requirements.txt - name: Run explainability run: python -m src.model_explainability_reports env: MLFLOW_TRACKING_URI: ${{ secrets.MLFLOW_URI }} - name: Check model quality run: python -m src.validate_model

Best Practices

Resources

Also available in 中文.