# How to choose a moderation threshold

> A score of 0.7 is not a decision. How thresholds work, why the default is only a starting point and a simple method to tune them on your own messages.

Source: https://www.vigimod.com/en/learn/choosing-a-threshold · VigiMod (https://www.vigimod.com) · updated 2026-11-11 · 6 min

## In short

- The threshold is the score above which a message is flagged.
- Lower threshold: more harmful messages caught, more false alarms. Higher: the opposite.
- Defaults are tuned on general data; your community is not general.
- Tune on a few hundred real messages, one category at a time, and use different actions for different scores.

## What a threshold is

A classifier gives a score from 0 to 1 (see [what is a text classifier](https://www.vigimod.com/en/learn/what-is-a-text-classifier)). The **threshold** is the line you draw: score ≥ threshold → flagged. With a threshold of 0.8, a message scored 0.83 for “insult” is flagged, one scored 0.79 is not.

## The trade-off

Moving the threshold moves you along a curve:

| Threshold | What happens |
|---|---|
| Low (e.g. 0.3) | catches almost everything (high **recall**), but many false alarms (low **precision**) |
| Middle (e.g. 0.6) | a balance |
| High (e.g. 0.9) | flags only clear cases (high precision), lets subtle ones through (low recall) |

There is no threshold that is right for everybody. [Precision and recall](https://www.vigimod.com/en/learn/precision-recall-f1) explain the two sides.

## Why the default is only a start

API providers tune default thresholds on validation data, usually at the point with the best F1. That data mixes many communities. Yours has its own slang, its own jokes and its own tolerance: a competitive gaming server and a support forum for teenagers should not use the same numbers.

## A simple method to tune them

1. **Collect** 300–500 real messages from your community (with the consent your rules require), including some you would remove.
2. **Label** them yourself, by category: is it an insult? A threat?
3. **Score** them with the API and save the scores.
4. For each category, **try a few thresholds** (0.5, 0.6, 0.7, 0.8, 0.9) and count false alarms and misses.
5. **Pick** the threshold whose mistakes you can live with, and write down why.

With VigiMod you can then send your thresholds in every request (`"thresholds": {"toxic": 0.8, "insult": 0.7}`) without changing anything else. See the [documentation](https://www.vigimod.com/en/docs).

## Use more than one line

You do not have to choose between “block” and “allow”. A common pattern:

| Score | Action |
|---|---|
| ≥ 0.95 | remove automatically |
| 0.75 – 0.95 | hide and send to a moderator |
| 0.5 – 0.75 | allow, but log it |
| < 0.5 | allow |

This keeps automatic actions for clear cases and puts human judgement where the model is unsure.

## Re-check from time to time

Language changes, new slang appears, a model gets updated. Repeat the check every few months, and whenever you switch model version.

## Quiz

1. You lower the threshold from 0.8 to 0.5. What usually happens?
   Answer: More harmful messages are caught, but also more false alarms. A lower threshold raises recall and lowers precision.
2. Why is the default threshold only a starting point?
   Answer: It is tuned on general data, not on your community. Every community has its own slang and tolerance.
3. What is a good way to tune a threshold?
   Answer: Label a few hundred of your own messages and compare. Your own labelled messages show which mistakes each threshold makes.
4. A score of 0.8 for “threat” with thresholds 0.75 (review) and 0.95 (remove). What happens?
   Answer: Sent to a moderator. 0.8 is between 0.75 and 0.95: a person decides.
