As a knowledge scientist engaged on time-series forecasting, I’ve run into anomalies and outliers greater than I can rely. Throughout demand forecasting, finance, site visitors, and gross sales information, I hold working into spikes and dips which might be onerous to interpret.
Anomaly dealing with is often a grey space, hardly ever black or white, however indicators of deeper points. Some anomalies are actual indicators like holidays, climate occasions, promotions, or viral moments; others are simply information glitches, however each look the identical at first look. The sooner we detect anomalies in information, the sooner motion might be taken to forestall poor efficiency and injury.
We’re coping with important time-series information, and detecting anomalies is essential. Should you take away a real occasion, a invaluable sign information level is eliminated, and should you hold a false alarm sign, the coaching information incorporates noise.
Most ML-based detectors flag spikes based mostly on Z-scores, IQR thresholds, or different static strategies with none context. With current developments in AI, we now have a greater choice to design an anomaly-handling agent that causes about every case. An agent that detects uncommon conduct, checks context, and decides whether or not to repair the information, hold it as an actual sign, or flag it for evaluation.
On this article, we construct such an agent step-by-step that mixes easy statistical detection with an AI agent that acts as a primary line of protection for time-series information, lowering guide intervention whereas preserving the indicators that matter most. We are going to detect and deal with anomalies in COVID-19 information by autonomous decision-making based mostly on the severity of the anomaly, utilizing:
- Stay epidemiological information from the illness.sh API.
- Statistical anomaly detection.
- Severity classification.
- A GroqCloud-powered AI agent that takes autonomous selections whether or not to:
- Repair the anomaly
- Maintain the anomaly
- Flag anomaly for human evaluation
That is agentic resolution intelligence, not merely anomaly detection.

Picture by writer.
Why is conventional anomaly detection alone not sufficient?
There are conventional ML strategies like isolation forests designed for anomaly detection, however they lack end-to-end resolution orchestration. They’re unable to behave on them shortly sufficient in manufacturing environments. We’re implementing an AI agent to fill this hole by turning uncooked anomaly scores into autonomous, end-to-end selections dynamically on reside information.
Conventional Anomaly Detection
The standard anomaly detection follows the pipeline strategy as drawn under:

Limitations of Conventional Anomaly Detection
- Works on static guidelines and manually units thresholds.
- It’s single-dimensional and handles easy information.
- No contextual reasoning.
- Human-driven resolution making.
- Guide-driven motion.
Anomaly Detection and Dealing with with an AI Agent
The AI Agent anomaly detection follows the pipeline strategy as drawn under:

Why does this work higher in observe?
- Works on real-time information.
- It’s multidimensional and may deal with complicated information.
- Works on contextual reasoning.
- Adaptive & self-learning resolution making.
- Take autonomous motion.
Selecting a sensible dataset for our instance
We’re utilizing real-world COVID-19 information to detect anomalies, as it’s noisy, reveals spikes, and the outcomes assist in the development of public well being.
What do we would like the AI Agent to resolve?
The aim is to repeatedly monitor COVID-19 information, discover anomalies, outline their severity, and take autonomous selections and resolve motion to be taken:
- Flag anomaly for human evaluation
- Repair the anomaly
- Maintain the anomaly
Knowledge Supply
For the information, we’re utilizing free, reside illness.sh information through API. This API offers information on day by day confirmed instances, deaths and recoveries. For the AI Agent implementation, we’re specializing in day by day case counts, which are perfect for anomaly detection.
Knowledge license: This tutorial makes use of COVID-19 historic case counts retrieved through the illness.sh API. The underlying dataset (JHU CSSE COVID-19 Knowledge Repository) is licensed below CC BY 4.0, which allows business use with attribution. (Accessed on January 22, 2026)
How do the items match collectively?
Excessive-Degree system structure of the anomaly detection on COVID-19 information utilizing an AI Agent is as follows:

Picture by writer
Constructing the AI Agent Step-by-Step
Let’s go step-by-step to grasp learn how to load information utilizing illness.sh, detect anomalies, classify them, and implement an AI agent that causes and takes applicable motion as per the severity of the anomalies.
Step 1: Set up Required Libraries
Step one is to put in required libraries like phidata, groq, python-dotenv, tabulate, and streamlit.
pip set up phidata
pip set up groq
pip set up python-dotenv #library to load .env file
pip set up tabulate
pip set up streamlit
Step 2: Setting File Set-up
Open your IDE and create a undertaking folder, and below that folder, create an environmental file “.env” to retailer GROQ_API_KEY.
GROQ_API_KEY="your_groq_api_key_here"
Step 3: Knowledge Ingestion
Earlier than constructing any agent, we want a knowledge supply that’s noisy sufficient to floor actual anomalies, however structured sufficient to motive about. COVID-19 day by day case counts are an excellent match as they include reporting delays, sudden spikes, and regime modifications. For simplicity, we intentionally limit ourselves to a single univariate time sequence.
Load information from the illness.sh utilizing request URL and extract the date and day by day case rely based mostly on the chosen nation and the variety of days for which you need to extract information. The info is transformed right into a structured dataframe by parsing json, formatting date and sorting chronologically.
# ---------------------------------------
# DATA INGESTION (illness.sh)
# ---------------------------------------
def load_live_covid_data(nation: str , days:int):
url = f"https://illness.sh/v3/covid-19/historic/{nation}?lastdays={days}"
response = requests.get(url)
information = response.json()["timeline"]["cases"]
df = (
pd.DataFrame(listing(information.objects()), columns=["Date", "Cases"])
.assign(Date=lambda d: pd.to_datetime(d["Date"], format="%m/%d/%y"))
.sort_values("Date")
.reset_index(drop=True)
)
return df
Step 4: Anomalies Detection
We are going to now detect irregular conduct in COVID-19 time-series information by detecting sudden spikes and speedy progress traits. Case counts are usually steady, and enormous deviations or sharp will increase point out significant anomalies. We are going to now detect anomalies utilizing statistical strategies and binary labeling for deterministic and reproducible anomaly detection. Two parameters are calculated to detect anomalies.
- Spike Detection
- A sudden spike in information is detected utilizing the Z-score; if any information level falls exterior the Z-score vary, it have to be an anomaly.
- Progress Fee Detection
- The day-over-day progress charge is calculated; if it exceeds 40%, it’s flagged.
# ---------------------------------------
# ANOMALY DETECTION
# ---------------------------------------
def detect_anomalies(df):
values = df["Cases"].values
imply, std = values.imply(), values.std()
spike_idx = [
i for i, v in enumerate(values)
if abs(v - mean) > 3 * std
]
progress = np.diff(values) / np.most(values[:-1], 1)
growth_idx = [i + 1 for i, g in enumerate(growth) if g > 0.4]
anomalies = set(spike_idx + growth_idx)
df["Anomaly"] = ["YES" if i in anomalies else "NO" for i in range(len(df))]
return df
If there’s an anomaly based on both spike or progress or with each parameters, the “Anomaly” is ready to “YES”; in any other case set to “NO”.
Step 5: Severity Classification
All anomalies will not be equal; we are going to classify them as ‘CRITICAL’, ‘WARNING’, or ‘MINOR’ to information AI Agent selections. Fastened rolling home windows and rule-based thresholds are used to categorise severity. Severity is classed solely when an anomaly exists; in any other case, Severity, Agent Choice, and Motion parameters within the dataframe are set to ‘clean’.
# ---------------------------------------
# CONFIG
# ---------------------------------------
ROLLING_WINDOW = 7
MIN_ABS_INCREASE = 500
# ---------------------------------------
# SEVERITY CLASSIFICATION
# ---------------------------------------
def compute_severity(df):
df = df.sort_values("Date").reset_index(drop=True)
df["Severity"] = ""
df["Agent Decision"] = ""
df["Action"] = ""
for i in vary(len(df)):
if df.loc[i, "Anomaly"] == "YES":
if i < ROLLING_WINDOW:
df.loc[i, "Severity"] = ""
curr = df.loc[i, "Cases"]
baseline = df.loc[i - ROLLING_WINDOW:i- 1, "Cases"].imply()
abs_inc = curr - baseline
progress = abs_inc / max(baseline, 1)
if abs_inc < MIN_ABS_INCREASE:
df.loc[i, "Severity"] = ""
if progress >= 1.0:
df.loc[i, "Severity"] = "CRITICAL"
elif progress >= 0.4:
df.loc[i, "Severity"] = "WARNING"
else:
df.loc[i, "Severity"] = "MINOR"
return df
Within the above code, to categorise the anomaly severity, every anomaly is in contrast with 7-day historic information (ROLLING_WINDOW = 7), and absolute and relative progress are calculated.
- Absolute Progress
A MIN_ABS_INCREASE = 500 is outlined as a config parameter the place modifications under this worth are thought-about very small, a negligible change. If absolutely the progress is lower than MIN_ABS_INCREASE, then ignore it and hold the severity clean. Absolute progress detects significant real-world influence, doesn’t react to noise or minor fluctuations, and prevents false alarms when progress proportion is excessive.
- Relative Progress:
Relative progress helps in detecting explosive traits. If progress is bigger than or equal to 100% improve over baseline, it means a sudden outbreak, and it’s assigned as ‘CRITICAL’; if progress is bigger than 40%, it means sustained acceleration and desires monitoring, and it’s assigned as ‘WARNING’; in any other case assigned as ‘MINOR’.
After severity classification, it’s prepared for the AI Agent to make an autonomous resolution and motion.
Step 6: Construct Immediate for AI Agent
Beneath is the immediate that defines how the AI agent causes and makes selections based mostly on structured context and predefined severity when an anomaly is detected. The agent is restricted to 3 express actions and should return a single, deterministic response for secure automation.
def build_agent_prompt(obs):
return f"""
You might be an AI monitoring agent for COVID-19 information.
Noticed anomaly:
Date: {obs['date']}
Instances: {obs['cases']}
Severity: {obs['severity']}
Choice guidelines:
- FIX_ANOMALY: noise, reporting fluctuation
- KEEP_ANOMALY: actual outbreak sign
- FLAG_FOR_REVIEW: extreme or ambiguous anomaly
Reply with ONLY one among:
FIX_ANOMALY
KEEP_ANOMALY
FLAG_FOR_REVIEW
"""
Three information factors, i.e., date, variety of instances reported, and severity, are supplied to the immediate explicitly, which helps the AI Agent to decide autonomously.
Step 7: Create your Agent with GroqCloud
We are actually creating an autonomous AI agent utilizing GroqCloud that makes clever contextual selections on detected anomalies and their severities and takes applicable actions. Three predefined actions for the AI Agent implement validated outputs solely.
# ---------------------------------------
# BUILDING AI AGENT
# ---------------------------------------
agent = Agent(
identify="CovidAnomalyAgent",
mannequin=Groq(id="openai/gpt-oss-120b"),
directions="""
You might be an AI agent monitoring reside COVID-19 time-series information.
Detect anomalies, resolve based on the anomaly:
"FIX_ANOMALY", "KEEP_ANOMALY", "FLAG_FOR_REVIEW"."""
)
for i in vary(len(df)):
if df.loc[i, "Anomaly"] == "YES":
obs = build_observation(df, i)
immediate = build_agent_prompt(obs)
response = agent.run(immediate)
resolution = response.messages[-1].content material.strip()
resolution = resolution if resolution in VALID_ACTIONS else "FLAG_FOR_REVIEW"
df = agent_action(df, i, resolution)
An AI agent named “CovidAnomalyAgent” is created, which makes use of an LLM mannequin hosted by GroqCloud for quick and low-latency reasoning. AI Agent runs a well-defined immediate, observes information, contextual reasoning, makes an autonomous resolution, and takes actions inside secure constraints.
An AI Agent isn’t dealing with anomalies however making clever selections for every detected anomaly. The agent’s resolution precisely displays anomaly severity and required motion.
# ---------------------------------------
# Agent ACTION DECIDER
# ---------------------------------------
def agent_action(df, idx,motion):
df.loc[idx, "Agent Decision"] = motion
if motion == "FIX_ANOMALY":
fix_anomaly(df, idx)
elif motion == "KEEP_ANOMALY":
df.loc[idx, "Action"] = "Accepted as an actual outbreak sign"
elif motion == "FLAG_FOR_REVIEW":
df.loc[idx, "Action"] = "Flagged for human evaluation"
return df
AI Agent ignores regular information factors with no anomaly and considers solely information factors with “ANOMALY= YES”. The AI agent is constrained to return solely three legitimate selections: “FIX_ANOMALY“, “KEEP_ANOMALY“, and “FLAG_FOR_REVIEW“, and accordingly, motion is taken as outlined within the desk under:
| Agent Choice | Motion |
| FIX_ANOMALY | Auto-corrected by an AI agent |
| KEEP_ANOMALY | Accepted as an actual outbreak sign |
| FLAG_FOR_REVIEW | Flagged for human evaluation |
For minor anomalies, the AI agent routinely fixes the information, preserves legitimate anomalies as-is, and flags important instances for human evaluation.
Step 8: Repair Anomaly
Minor anomalies are brought on by reporting noise and are corrected utilizing native rolling imply smoothing over current historic values.
# ---------------------------------------
# FIX ANOMALY
# ---------------------------------------
def fix_anomaly(df, idx):
window = df.loc[max(0, idx - 3):idx - 1, "Cases"]
if len(window) > 0:
df.loc[idx, "Cases"] = int(window.imply())
df.loc[idx, "Severity"] = ""
df.loc[idx, "Action"] = "Auto-corrected by an AI agent"
It takes the quick 3 days of previous information, calculates its imply, and smooths the anomaly by changing its worth with this common. By the native rolling imply smoothing strategy, non permanent spikes and information glitches might be dealt with.
As soon as an anomaly is mounted, the information level is now not thought-about dangerous, and severity is deliberately eliminated to keep away from confusion. “Motion” is up to date to “Auto-corrected by an AI agent”.
Full Code
Kindly undergo the entire code for the statistical anomaly detection and AI Agent implementation for anomaly dealing with.
https://github.com/rautmadhura4/anomaly_detection_agent/tree/foremost
Outcomes
Let’s examine the outcomes for the nation, “India,” with various kinds of severity detected and the way the AI Agent handles them.
State of affairs 1: A Native Implementation
The primary try is a local implementation the place we detect minor anomalies and the AI Agent fixes them routinely. Beneath is the snapshot of the COVID information desk of India with severity.

We’ve additionally carried out a Streamlit dashboard to evaluation the AI Agent’s selections and actions. Within the under consequence snapshot, you’ll be able to see that varied minor anomalies are mounted by the AI Agent.

This works finest when anomalies are localized noise moderately than regime modifications.
State of affairs 2: A Boundary Situation
Right here, important anomalies are detected, and the AI Agent raises a flag for evaluation as proven within the snapshot of the COVID information desk of India with severity.

On the Streamlit dashboard AI Agent’s selections and actions are proven within the consequence snapshot. You’ll be able to see that every one the important anomalies have been flagged for human evaluation by the AI Agent.

Severity gating prevents damaging auto-corrections in high-impact anomalies.
State of affairs 3: A Limitation
For the limitation situation, warning and demanding anomalies are detected as proven within the snapshot of the COVID information desk of India with severity.

On the Streamlit dashboard AI Agent’s selections and actions are proven under within the consequence snapshot. You’ll be able to see that the important anomaly is flagged for human evaluation by AI Agent, however the WARNING anomaly is routinely mounted. In lots of actual settings, a WARNING-level anomaly must be preserved and monitored moderately than corrected.

This failure highlights why WARNING thresholds must be tuned and why human evaluation stays important.
Use the entire code and check out anomaly detection for the COVID-19 dataset, with completely different parameters.
Future Scope and Enhancements
We’ve used a really restricted dataset and carried out rule-based anomaly detection, however sooner or later, some enhancements might be completed within the AI Agent implementation:
- In our implementation, an anomaly is detected, and a choice is made based mostly on case rely solely. Sooner or later, information might be extra elaborate with options like hospitalization data, vaccination information, and others.
- Anomaly detection is finished right here utilizing statistical strategies, which can be ML-driven sooner or later to establish extra complicated patterns.
- Now, we now have carried out a single-agent structure; sooner or later multi-agent structure might be carried out to enhance scalability, readability, and resilience.
- Sooner or later human suggestions loop also needs to take care to make improved selections.
Last Takeaways
Smarter AI brokers allow operational AI that makes selections utilizing contextual reasoning, takes motion to repair anomalies, and escalates to people when wanted. There are some sensible takeaways to remember whereas constructing an AI Agent for anomaly detection:
- To detect anomalies, use statistical strategies and implement AI brokers for contextual decision-making.
- Minor anomalies are secure to be autocorrected as they’re usually reported as noise. Important ought to by no means be autocorrected and flagged for evaluation by area consultants in order that real-world indicators don’t get suppressed.
- This AI agent should not be utilized in conditions the place anomalies straight set off irreversible actions.
When statistical strategies and an AI agent strategy are mixed correctly, they rework anomaly detection from simply an alerting system right into a managed, decision-driven system with out compromising security.















