Model Monitoring in Practice: Keeping AI Healthy
Master production monitoring for ML. Learn to design effective health checks, track performance metrics, and build alerts to catch silent model failures.
Previously in this course, we covered Understanding Data Drift: Why Models Fail in Production, which explained the "silent killer" of machine learning models. While drift explains why a model fails, this lesson focuses on the how—specifically, how to build a robust system for monitoring in production so you never have to guess if your model is still providing value.
In the real world, a model isn't a static artifact; it's a living software component. When you move beyond the notebook and into creating an inference script, you move from "did this work?" to "is this still working?"
Designing Your Monitoring Plan
A production monitoring plan isn't just about logs; it's about defining what "success" looks like at 3:00 AM. You need to monitor two distinct layers:
- Infrastructure Metrics: Is the service up? Is latency within limits? Are we seeing 500 errors?
- Model Performance Metrics: Is the model making sensible predictions? Is the distribution of input data shifting?
For our project, we will focus on the latter, as model degradation is often invisible to standard web server logs.
Identifying Metrics for Production
To build a sustainable monitoring strategy, you need to track three categories of data:
- Prediction Distribution: If your model typically predicts values between 0 and 1, a sudden spike in values > 100 suggests a broken feature pipeline.
- Feature Statistics: Track the mean and standard deviation of your input features. If your "average user age" suddenly jumps from 35 to 80, your model is likely receiving data from a new, unexpected segment.
- Ground Truth (where available): If you can capture the eventual outcome (e.g., did the user actually buy the item?), compare it against your prediction to calculate real-time error.
Worked Example: Basic Monitoring Logic
In a production environment, you should wrap your inference calls with a monitoring decorator or a simple logging utility. Here is how you might structure a basic health check:
PYTHONimport logging import numpy as np # Configure logging for production logging.basicConfig(level=logging.INFO, filename=CE9178">'model_monitor.log') def monitor_inference(features, prediction): CE9178">"""Simple health check for production predictions.""" # 1. Check for extreme outliers in predictions if prediction > 1000 or prediction < 0: logging.warning(f"Outlier prediction detected: {prediction}") # In a real system, send a notification(e.g., Slack/PagerDuty) # 2. Track feature drift(simplified) # Compare current feature mean to a baseline stored in your config if np.mean(features) > 5.0: # Arbitrary threshold logging.error("Feature drift detected in input stream!") # Usage in your inference script def predict(data): features = preprocess(data) prediction = model.predict(features) monitor_inference(features, prediction) return prediction
Setting Up Alerts
Monitoring is useless if you aren't notified when things break. Avoid "alert fatigue" by setting alerts on trends rather than single events.
- Threshold Alerts: Trigger a notification if the error rate exceeds X% over a 1-hour window.
- Drift Alerts: Trigger a notification if the distribution of input data (e.g., Kolmogorov-Smirnov test) significantly differs from the training set.
- Frequency: Set alerts for "heartbeats"—if the model hasn't received a request in 24 hours, you need to know why.
Hands-on Exercise
Take your project's inference script from creating an inference script. Add a log_metrics function that records the mean of the input features to a CSV file every time a prediction is made. After 10 simulated requests, calculate the mean of that CSV. If it deviates by more than 20% from the training set mean, print a warning to the console.
Common Pitfalls
- Monitoring Everything: You will drown in noise. Start by monitoring the most important features and the final prediction distribution.
- Ignoring Latency: A model that is accurate but takes 10 seconds to respond is broken for the end-user.
- No Feedback Loop: Many teams monitor inputs but forget to store the actual outcomes. Without ground truth, you are effectively flying blind.
- Static Thresholds: Data changes with the seasons. A hard-coded alert that works in July might trigger constantly in December. Use rolling averages for your alerts.
Recap
Effective monitoring in production requires observing both the infrastructure and the model's behavior. By logging key distributions, checking for feature drift, and setting trend-based alerts, you ensure your model remains reliable long after deployment. Always remember: in production, silent failure is the most expensive kind.
Up next: We will discuss how to safely roll out model updates without disrupting your existing users.
Work with me

Next.js Full-Stack Web App Development
A fast, SEO-ready full-stack web app built with Next.js 16 — from idea to deployed product, by an engineer who ships to production.

AI Automation & Agentic Workflow Development
Automate the repetitive work eating your time — content pipelines, data workflows, and agentic AI tasks that run themselves.