A queue that fires two thousand alerts a day is not a detection success; it is a fatigue machine that buries the one alert that mattered.
Tier: Core · Workflow area: AI-assisted SOC & detection
This playbook uses an LLM to cluster a mass of closed false positives, find the shared root cause behind each cluster, and propose a specific rule change — with the discipline that every proposed tuning is proven against real closed cases before it silences anything.
Skip AI when a single rule is obviously misfiring — just fix it. This is for when the noise is spread across many rules and the pattern is not obvious.
Export closed false positives with their fields and dispositions. Pull a few weeks of benign-closed alerts including rule_name, the triggering fields, and the analyst close reason. The close notes are gold — they often already name the root cause in prose.
Prompt for clustering and root-cause hypotheses.
Below is a JSON array of alerts we closed as false positive (sample data),
each with the rule that fired and the analyst's close note.
1. Cluster them by shared root cause (not just by rule name — a cause may
span rules, and one rule may have several causes).
2. For each cluster: name the likely root cause, list the alert_ids in it,
and quote the evidence (fields/close-notes) that supports the cause.
3. Propose ONE specific, narrow tuning per cluster (an exclusion, a threshold,
a field condition). State exactly what it would suppress.
Do not propose disabling a rule outright. Flag any cluster where the cause
is ambiguous rather than guessing.
Expected output: named clusters, each with member IDs, cited evidence, and a narrow tuning proposal — plus an "ambiguous" bucket you must investigate by hand.
Validate each proposed exclusion against the full closed set. For every tuning, query how many of the closed false positives it would have suppressed. This is the safety test: a good exclusion suppresses the noise cluster and nothing else.
Test the exclusion against known true positives. Run the same proposed condition against a set of confirmed real incidents. If it would have suppressed even one true positive, reject it — a quieter queue that hides real attacks is worse than a noisy one.
Stage, don't silence. Deploy the exclusion in an audit/log-only mode first, watch it for a cycle, and confirm the suppressed volume matches the cluster and nothing new goes dark.
Every suppression rule is a blind spot you are choosing to create. An exclusion that has not been tested against known true positives is a detection gap waiting to be exploited — prove it is safe before it goes live.
Closed-case data reveals a client's detection posture and their real incidents, so it stays inside the boundary. Run the clustering on a local Ollama model or the client's sanctioned endpoint. Redact hostnames, users, and internal IPs to placeholders before prompting — clustering works on the pattern of fields and close-notes, not the literal identifiers. Crucially, keep the true-positive regression set inside the client environment and never let a proposed exclusion leave log-only mode without the client's detection owner signing off; you are proposing to create blind spots in their coverage, and that decision is theirs to approve.