Files
2025-11-29 17:56:53 +08:00

228 lines
5.3 KiB
Markdown

---
name: model-explainer
description: |
Model interpretability and explainability using SHAP, LIME, feature importance, and partial dependence plots. Activates for "explain model", "model interpretability", "SHAP", "LIME", "feature importance", "why prediction", "model explanation". Generates human-readable explanations for model predictions, critical for trust, debugging, and regulatory compliance.
---
# Model Explainer
## Overview
Makes black-box models interpretable. Explains why models make specific predictions, which features matter most, and how features interact. Critical for trust, debugging, and regulatory compliance.
## Why Explainability Matters
- **Trust**: Stakeholders trust models they understand
- **Debugging**: Find model weaknesses and biases
- **Compliance**: GDPR, fair lending laws require explanations
- **Improvement**: Understand what to improve
- **Safety**: Detect when model might fail
## Explanation Types
### 1. Global Explanations (Model-Level)
**Feature Importance**:
```python
from specweave import explain_model
explainer = explain_model(
model=trained_model,
X_train=X_train,
increment="0042"
)
# Global feature importance
importance = explainer.feature_importance()
```
Output:
```
Top Features (Global):
1. transaction_amount (importance: 0.35)
2. user_history_days (importance: 0.22)
3. merchant_reputation (importance: 0.18)
4. time_since_last_transaction (importance: 0.15)
5. device_type (importance: 0.10)
```
**Partial Dependence Plots**:
```python
# How does feature affect prediction?
explainer.partial_dependence(feature="transaction_amount")
```
### 2. Local Explanations (Prediction-Level)
**SHAP Values**:
```python
# Explain single prediction
explanation = explainer.explain_prediction(X_sample)
```
Output:
```
Prediction: FRAUD (probability: 0.92)
Why?
+ transaction_amount=5000 → +0.45 (high amount increases fraud risk)
+ user_history_days=2 → +0.30 (new user increases risk)
+ merchant_reputation=low → +0.25 (suspicious merchant)
- time_since_last_transaction=1hr → -0.08 (recent activity normal)
Base prediction: 0.10
Final prediction: 0.92
```
**LIME Explanations**:
```python
# Local interpretable model
lime_exp = explainer.lime_explanation(X_sample)
```
## Usage in SpecWeave
```python
from specweave import ModelExplainer
# Create explainer
explainer = ModelExplainer(
model=model,
X_train=X_train,
feature_names=feature_names,
increment="0042"
)
# Generate all explanations
explainer.generate_all_reports()
# Creates:
# - feature-importance.png
# - shap-summary.png
# - pdp-plots/
# - local-explanations/
# - explainability-report.md
```
## Real-World Examples
### Example 1: Fraud Detection
```python
# Explain why transaction flagged as fraud
transaction = {
"amount": 5000,
"user_age_days": 2,
"merchant": "new_merchant_xyz"
}
explanation = explainer.explain(transaction)
print(explanation.to_text())
```
Output:
```
FRAUD ALERT (92% confidence)
Main factors:
1. Large transaction amount ($5000) - Very unusual for new users
2. Account only 2 days old - Fraud pattern
3. Merchant has low reputation score - Red flag
If this is legitimate:
- User should verify identity
- Merchant should be manually reviewed
```
### Example 2: Loan Approval
```python
# Explain loan rejection
applicant = {
"income": 45000,
"credit_score": 620,
"debt_ratio": 0.45
}
explanation = explainer.explain(applicant)
print(explanation.to_text())
```
Output:
```
LOAN DENIED
Main reasons:
1. Credit score (620) below threshold (650) - Primary factor
2. High debt-to-income ratio (45%) - Risk indicator
3. Income ($45k) adequate but not strong
To improve approval chances:
- Increase credit score by 30+ points
- Reduce debt-to-income ratio below 40%
```
## Regulatory Compliance
### GDPR "Right to Explanation"
```python
# Generate GDPR-compliant explanation
gdpr_explanation = explainer.gdpr_explanation(prediction)
# Includes:
# - Decision rationale
# - Data used
# - How to contest decision
# - Impact of features
```
### Fair Lending Act
```python
# Check for bias in protected attributes
bias_report = explainer.fairness_report(
sensitive_features=["gender", "race", "age"]
)
# Detects:
# - Disparate impact
# - Feature bias
# - Recommendations for fairness
```
## Visualization Types
1. **Feature Importance Bar Chart**
2. **SHAP Summary Plot** (beeswarm)
3. **SHAP Waterfall** (single prediction)
4. **Partial Dependence Plots**
5. **Individual Conditional Expectation** (ICE)
6. **Force Plots** (interactive)
7. **Decision Trees** (surrogate models)
## Integration with SpecWeave
```bash
# Generate all explainability artifacts
/ml:explain-model 0042
# Explain specific prediction
/ml:explain-prediction --increment 0042 --sample sample.json
# Check for bias
/ml:fairness-check 0042
```
Explainability artifacts automatically included in increment documentation and COMPLETION-SUMMARY.
## Best Practices
1. **Generate explanations for all production models** - No "black boxes" in production
2. **Check for bias** - Test sensitive attributes
3. **Document limitations** - What model can't explain
4. **Validate explanations** - Do they make domain sense?
5. **Make explanations accessible** - Non-technical stakeholders should understand
Model explainability is non-negotiable for responsible AI deployment.