Structuring or Threshold Avoidance

Definition: values engineered to dodge a known limit, repeated.

Construction: Double threshold extensions (IsJustBelowThreshold, IsRoundAmount) combined with Velocity and Volume or Cardinality for the repetition. Use it when the risk is evasion of a specific numeric control, and not a generic anomaly, which is Behavioral Baseline and Ratio. See the Rule Taxonomy.

Question an analyst asks Rule Taxonomy type that answers it
Are deposits repeatedly just under the 10,000 reporting limit? Structuring: IsJustBelowThreshold with a TTL Counter for the repetition
Is an account always sending round amounts? Structuring: IsRoundAmount with a TTL Counter for the repetition
Are amounts unusually large for this customer? Not this type: Behavioral Baseline and Ratio
Is a single amount just under the limit, once? Structuring without repetition: a weak signal on its own, see below

Structuring: The Single Event Signal is Weak

A single amount just below a limit is weak evidence: most such amounts are legitimate. The signal is the repetition, so the rule has two parts. The first is a payload predicate that recognises an engineered value. The second is a counter of how often that has happened for the entity within a window. The two parts are separate Activation Rules, joined by a TTL Counter, following the shape of Velocity and Volume.

Structuring: Construction Steps

Step 1: Recognise the Engineered Value

IsJustBelowThreshold(threshold, marginPercent) is true when the amount is below the threshold and within the margin percentage of it (IsJustAboveThreshold is the mirror, for a limit that triggers on exceeding it). For a 10,000 limit with a 10 percent margin, amounts from 9,000 up to but excluding 10,000 are recognised:

Matched = Payload.CurrencyAmount.MatchIsJustBelowThreshold(10000, 10)

IsRoundAmount(nearest) is true when the amount is an exact multiple of the value given, for example 500. Round amounts are a separate signal, and are often combined with a threshold band, using Require as the guard. See the Rule Pipeline Reference:

Matched = Payload.CurrencyAmount.RequireIsRoundAmount(500).MatchInRange(5000, 9999)

Where several limits apply, for example 3,000, 10,000 and 15,000, IsJustBelowAnyThreshold(marginPercent, thresholds...) tests all of them in one step, and takes the margin first:

Matched = Payload.CurrencyAmount.MatchIsJustBelowAnyThreshold(10, 3000, 10000, 15000)

The threshold, margin and rounding unit must come from the data and the control in question, per the Rule Taxonomy, and not from a list of best practice values.

Step 2: Count the Repetition with a TTL Counter

Define a TTL Counter keyed on the entity, windowed to the period the control is measured over (for example Days / 7), and increment it from the Activation Rule of Step 1. The Activation Rule that recognises the engineered value is the incrementing rule. Priority follows the rules in Velocity and Volume: incrementing earlier in the Priority order means the current event is included in the count.

Step 3: Alert on the Repetition

Matched = TTLCounter.JustBelowLimit7d.MatchGreaterOrEqual(3)

Where the repetition has to be across different values or destinations, and not merely a count, use an Abstraction Rule with Distinct Count, per Cardinality, for example several just below limit amounts split across many beneficiaries. Where several payments sum past the limit inside a window, use a Sum TTL Counter, and threshold it against the limit directly:

Matched = TTLCounter.DepositValue24h.RequireGreater(10000).Against(TTLCounter.DepositCount24h).RequireGreaterOrEqual(3).Against(Payload.CurrencyAmount).MatchIsJustBelowThreshold(10000, 10)

Structuring: Common Faults

Symptoms of a misbuilt Structuring rule, with the likely cause.

Symptom in a Structuring rule Likely cause
Too many alerts on single events No repetition condition. A single amount below a limit is weak evidence on its own.
Structured amounts just over the margin missed The margin is too narrow for how the limit is being avoided. Derive the margin from the data.
The count includes the alerting event or not Priority of the incrementing rule relative to the alerting rule. See Velocity and Volume.
The limit is a sum across accounts The counter key is the account, not the beneficial owner. Key the counter on the entity the control applies to.

Jube™. © Jube Holdings Limited 2022 to present.

This site uses Just the Docs, a documentation theme for Jekyll.