Initial commit for claims-gpt-risk-framework
Browse files
bias_checks/demographic_parity.md
CHANGED
|
@@ -1,16 +1,23 @@
|
|
| 1 |
-
# Demographic Parity
|
| 2 |
|
| 3 |
## Definition
|
| 4 |
-
Same decision rate across
|
| 5 |
-
|
| 6 |
-
## For Insurance Claims
|
| 7 |
-
- Same approve rate regardless of customer region
|
| 8 |
-
- Same processing time for all claim types
|
| 9 |
-
- No bias toward/against customer types
|
| 10 |
|
| 11 |
## Acceptance Criteria
|
| 12 |
-
- Parity difference
|
| 13 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
|
| 16 |
-
|
|
|
|
|
|
|
|
|
| 1 |
+
# Demographic Parity Checks
|
| 2 |
|
| 3 |
## Definition
|
| 4 |
+
Same decision approval rate across demographic groups (gender, age, nationality)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
## Acceptance Criteria
|
| 7 |
+
- Parity difference < 5%
|
| 8 |
+
- Minimum sample: 100 decisions per group
|
| 9 |
+
- Test frequency: Weekly
|
| 10 |
+
|
| 11 |
+
## Implementation
|
| 12 |
+
```python
|
| 13 |
+
def check_demographic_parity(decisions_df):
|
| 14 |
+
groups = decisions_df.groupby('demographic')
|
| 15 |
+
approval_rates = groups['approved'].apply(lambda x: x.sum() / len(x))
|
| 16 |
+
max_diff = approval_rates.max() - approval_rates.min()
|
| 17 |
+
return max_diff < 0.05
|
| 18 |
+
```
|
| 19 |
|
| 20 |
+
## Compliance
|
| 21 |
+
- ✅ CBK Insurance Governance
|
| 22 |
+
- ✅ DFSA Regulatory Requirements
|
| 23 |
+
- ✅ Sharia Compliance
|
risk_scores/model_risk_scoring_formula.md
CHANGED
|
@@ -1,31 +1,25 @@
|
|
| 1 |
# Model Risk Scoring Formula
|
| 2 |
|
| 3 |
-
##
|
| 4 |
```
|
| 5 |
-
overall_risk = (bias_score
|
| 6 |
```
|
| 7 |
|
| 8 |
## Risk Levels
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
-
|
| 20 |
-
-
|
| 21 |
-
|
| 22 |
-
##
|
| 23 |
-
-
|
| 24 |
-
-
|
| 25 |
-
|
| 26 |
-
### Explainability Gap (40% weight)
|
| 27 |
-
- Reasoning transparency
|
| 28 |
-
- Decision justification quality
|
| 29 |
-
|
| 30 |
-
---
|
| 31 |
-
**Last Updated**: 2026-02-22
|
|
|
|
| 1 |
# Model Risk Scoring Formula
|
| 2 |
|
| 3 |
+
## Formula
|
| 4 |
```
|
| 5 |
+
overall_risk = (bias_score × 0.3) + (hallucination_score × 0.3) + (explainability × 0.4)
|
| 6 |
```
|
| 7 |
|
| 8 |
## Risk Levels
|
| 9 |
+
- **Low** (0.0 - 0.3): Auto-approve
|
| 10 |
+
- Bias: < 0.15
|
| 11 |
+
- Hallucination: < 10%
|
| 12 |
+
- Explainability: > 0.8
|
| 13 |
+
|
| 14 |
+
- **Medium** (0.3 - 0.7): AI Reviewer required
|
| 15 |
+
- Requires human review before approval
|
| 16 |
+
- SLA: 24 hours
|
| 17 |
+
|
| 18 |
+
- **High** (0.7 - 1.0): Executive approval required
|
| 19 |
+
- Requires VP+ sign-off
|
| 20 |
+
- SLA: 4 hours
|
| 21 |
+
|
| 22 |
+
## Examples
|
| 23 |
+
- Kimi (0.08 bias, 0.08 hallucination, 0.9 explain) = 0.26 (Low) ✅
|
| 24 |
+
- Mixtral (0.12 bias, 0.12 hallucination, 0.8 explain) = 0.37 (Medium) ⚠️
|
| 25 |
+
- Mistral (0.18 bias, 0.18 hallucination, 0.7 explain) = 0.54 (Medium) ⚠️
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
schemas/risk_assessment.schema.json
CHANGED
|
@@ -1,36 +1,11 @@
|
|
| 1 |
{
|
| 2 |
"$schema": "http://json-schema.org/draft-07/schema#",
|
| 3 |
-
"title": "Risk Assessment Schema",
|
| 4 |
"type": "object",
|
| 5 |
-
"required": ["bias_score", "hallucination_score", "overall_risk"],
|
| 6 |
"properties": {
|
| 7 |
-
"bias_score": {
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
"type": "number",
|
| 15 |
-
"minimum": 0,
|
| 16 |
-
"maximum": 1,
|
| 17 |
-
"description": "Hallucination rate"
|
| 18 |
-
},
|
| 19 |
-
"explainability_gap": {
|
| 20 |
-
"type": "number",
|
| 21 |
-
"minimum": 0,
|
| 22 |
-
"maximum": 1,
|
| 23 |
-
"description": "How much reasoning is missing"
|
| 24 |
-
},
|
| 25 |
-
"overall_risk": {
|
| 26 |
-
"type": "number",
|
| 27 |
-
"minimum": 0,
|
| 28 |
-
"maximum": 1,
|
| 29 |
-
"description": "Weighted combination"
|
| 30 |
-
},
|
| 31 |
-
"risk_level": {
|
| 32 |
-
"type": "string",
|
| 33 |
-
"enum": ["low", "medium", "high"]
|
| 34 |
-
}
|
| 35 |
-
}
|
| 36 |
-
}
|
|
|
|
| 1 |
{
|
| 2 |
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
|
|
| 3 |
"type": "object",
|
|
|
|
| 4 |
"properties": {
|
| 5 |
+
"bias_score": {"type": "number", "minimum": 0, "maximum": 1},
|
| 6 |
+
"hallucination_score": {"type": "number", "minimum": 0, "maximum": 1},
|
| 7 |
+
"overall_risk": {"type": "number", "minimum": 0, "maximum": 1},
|
| 8 |
+
"risk_level": {"enum": ["low", "medium", "high"]}
|
| 9 |
+
},
|
| 10 |
+
"required": ["bias_score", "hallucination_score", "overall_risk", "risk_level"]
|
| 11 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|