MRF Model Risk Framework
What can go wrong with your models and how to prepare for it
Learning Objectives
- •Understand model risk and its sources in trading systems
- •Learn how to build a model risk management framework
- •Implement monitoring and escalation procedures
Explain Like I'm 5
Model risk is the risk that your model is wrong and you lose money because of it. Every model has assumptions. When those assumptions break, the model breaks. A model risk framework asks "what could go wrong?" and prepares responses for each scenario. This is where amateurs get destroyed.
Think of It This Way
Think of a model risk framework like an emergency response plan. You can't prevent all emergencies, but you can prepare: "If the model stops working, do X. If accuracy drops below Y%, do Z." Having the plan BEFORE the emergency is what separates professionals from amateurs.
1Sources of Model Risk
2Monitoring & Escalation
3The Model Risk Inventory
4Model Governance — Who Decides What
Key Formulas
Model Confidence Score
Measures how much better than random the model is performing, relative to target. MCS = 1 means hitting target WR. MCS = 0 means performing at random. MCS < 0 means worse than random.
Hands-On Code
Model Risk Monitor
import numpy as np
class ModelRiskMonitor:
"""Continuous model risk monitoring."""
def __init__(self, target_wr=0.59, random_wr=0.50, halt_wr=0.50):
self.target_wr = target_wr
self.random_wr = random_wr
self.halt_wr = halt_wr
self.trade_results = []
def record_trade(self, won: bool):
self.trade_results.append(1 if won else 0)
def status(self, window=50):
if len(self.trade_results) < window:
return "INSUFFICIENT_DATA"
recent = self.trade_results[-window:]
wr = np.mean(recent)
mcs = (wr - self.random_wr) / (self.target_wr - self.random_wr)
if wr < self.halt_wr:
status = "HALT — below random"
elif wr < 0.52:
status = "INVESTIGATE — degraded"
elif wr < self.target_wr:
status = "OK — below target but acceptable"
else:
status = "EXCELLENT — at or above target"
print(f"Rolling WR ({window} trades): {wr:.1%}")
print(f"Model Confidence Score: {mcs:.2f}")
print(f"Status: {status}")
return statusContinuous monitoring catches model degradation before it becomes a serious loss. The Model Confidence Score gives a single, interpretable metric for model health.
Knowledge Check
Q1.Your model's rolling win rate has dropped from 59% to 52% over the last 100 trades. What do you do?
Assignment
Build a model risk monitoring system that tracks rolling win rate, model confidence score, and regime indicators. Set up alert thresholds and test them with simulated degradation scenarios.