228 lines
5.3 KiB
Markdown
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.
|