Causality APIs 40: Shrink Controls And The Cost Of Friction

A synthetic shrink-control model separates loss prevention benefit from customer friction, wait time, false positives, associate safety, and conversion loss.

A store locks more merchandise after repeated theft events. The intervention is visible immediately: products are harder to access, associates are called more often, and customers wait. The loss-prevention question is whether the controls reduce shrink enough to justify the operational friction they create.

Share: Shrink controls can reduce loss and still create friction. Locked cases, staffing, false positives, wait time, safety, and conversion all belong in the same decision model. #Causality #RetailAnalytics #LossPrevention

Synthetic teaching model

This article uses a synthetic retail model. It is not pricing, legal, financial, operational, compliance, or merchandising advice. The sources below justify why some variables belong in the model. The probabilities are invented so the reasoning path is easy to inspect.

The Operating Problem Is Usually Wider Than The Metric

Retail security decisions are made under real pressure. Theft, fraud, and violence matter. So do false positives, associate safety, wait time, conversion abandonment, and customer experience. A control can be necessary and still poorly targeted.

Why The Dashboard Can Mislead

The dashboard can mislead if it reports shrink reduction without friction. A locked case may reduce loss and still lower sales if staffing is weak. A receipt check may deter theft and still raise false-positive or safety risk. The net question needs both sides.

Plain-language modeling note

A Bayesian belief network, or BBN, is a graph for asking conditional questions. Each node is a condition, each arrow says one condition informs another, and each probability is explicit. You do not need to know the SDK to read the graph: the SDK code is only there when we need a repeatable action query.

The Question For This Example

This example asks how net-loss-prevention-miss risk changes after observing high ORC signal, low associate coverage, broad locked cases, and poor camera analytics, and what changes if controls become targeted, staffing improves, and analytics quality improves.

The target outcome is NetLossPreventionMiss, which means net loss-prevention miss in this teaching model.

A Small Model Of The Situation

The model treats shrink control as a tradeoff between risk reduction and friction. It leaves out law enforcement, prosecution, exact shrink accounting, store layout detail, labor law, product category economics, and real incident records.

The graph has 15 nodes:

  • HighTheftCategory: High-theft category (no / yes)
  • ORCSignal: ORC signal (low / high)
  • AssociateCoverage: Associate coverage (adequate / low)
  • LockedCasePolicy: Locked case policy (targeted / broad)
  • ReceiptCheckIntensity: Receipt check intensity (targeted / high)
  • SelfCheckoutControls: Self-checkout controls (strong / weak)
  • CameraAnalyticsQuality: Camera analytics quality (good / poor)
  • FalsePositiveRisk: False positive risk (low / high)
  • ShopperAccessFriction: Shopper access friction (low / high)
  • WaitTimeAtCase: Wait time at case (low / high)
  • ConversionAbandonment: Conversion abandonment (low / high)
  • EmployeeSafetyRisk: Employee safety risk (low / high)
  • ShrinkReduction: Shrink reduction (adequate / low)
  • CustomerExperienceDamage: Customer experience damage (low / high)
  • NetLossPreventionMiss: Net loss-prevention miss (no / yes)

Retail Shrink Control Friction BBN graph with source-informed retail variables and synthetic probabilities.

What Is Sourced And What Is Synthetic

NRF’s 2025 theft and violence study supports including theft, fraud, violence, ORC, technology, locked cases, and store-layout changes. NRF AI materials support cybersecurity, fraud prevention, accuracy, and regulatory complexity as retail AI considerations. Deloitte’s outlook supports physical-store experience and profitable transactions as practical constraints.

Theft, fraud, and violence
NRF reports continued retailer concern about theft, fraud, violence, and increasingly sophisticated organized retail crime.
Security measures
NRF notes measures such as cameras, lighting, license plate readers, locking cases, and layout changes.
Experience tradeoff
Deloitte’s retail outlook supports including in-store experience and profitability alongside operational controls.

Boundary of the evidence

The sources support the general mechanisms in the graph. They do not estimate this article’s node states, thresholds, or conditional probability values. Those are synthetic teaching values.

The Query The Graph Cannot Show By Itself

The visual graph is the best way to inspect the structure. The code-backed query is there for a narrower reason: we want to separate what is learned by observing a messy retail case from what changes if one condition is set differently.

Using the Darkstar Python SDK, a subscribed SDK user can load the same BBN JSON, ask for the target probability after evidence is entered, then run the action query by setting a node before querying again. The download includes this as illustrative SDK code, while the standalone query_example.py reproduces the article numbers without shipping the SDK.

import json

from darkstar import DiscreteModel

TARGET = "NetLossPreventionMiss"
OBSERVED_EVIDENCE = {
    "ORCSignal": "high",
    "AssociateCoverage": "low",
    "LockedCasePolicy": "broad",
    "CameraAnalyticsQuality": "poor"
}
INTERVENTION_CONTEXT = {
    "ORCSignal": "high"
}
INTERVENTION = {
    "LockedCasePolicy": "targeted",
    "AssociateCoverage": "adequate",
    "CameraAnalyticsQuality": "good"
}


def probability_after_observing(model, evidence):
    query = {"nodes": [TARGET], "evidence": evidence}
    result = json.loads(model.pquery(json.dumps(query)))
    return result[TARGET]["yes"]


def probability_after_setting(model, setting, evidence):
    changed_model = model.intervene(json.dumps(setting))
    return probability_after_observing(changed_model, evidence)


with DiscreteModel(model_json) as model:
    observed = probability_after_observing(model, OBSERVED_EVIDENCE)
    acted = probability_after_setting(model, INTERVENTION, INTERVENTION_CONTEXT)

That is the article’s main modeling distinction. Observing a pattern is not the same as setting one part of the system differently.

The standalone query code gives this synthetic result:

Baseline net loss-prevention miss: 21.0%
Observed scenario (broad locks with low staffing and weak analytics): 27.7%
Action scenario (targeted controls with staffing and analytics): 21.3%
Same context with the action left unfavorable: 27.7%
Synthetic reduction versus the observed scenario: 6.5 percentage points

What We Learn By Observing The Situation

The observed scenario sets:

  • ORC signal = high
  • Associate coverage = low
  • Locked case policy = broad
  • Camera analytics quality = poor

The observed scenario raises net-loss-prevention-miss risk because broad locks are paired with low associate coverage and poor analytics. The model treats that as a high-friction, weakly targeted control posture.

Reasoning comparison for Retail Shrink Control Friction BBN.

What Changes If We Set One Condition Differently

The action scenario sets:

  • Locked case policy = targeted
  • Associate coverage = adequate
  • Camera analytics quality = good

The action query makes controls targeted, improves associate coverage, and improves camera analytics. It does not assume theft risk disappears. It asks whether better targeting reduces the chance that controls miss the net business objective.

What This Example Cannot Prove

This model cannot recommend a security policy, estimate shrink, or assess legal risk. It is a teaching model for why loss prevention and customer friction should be reasoned about together.

Try this in the shared model

Open the companion model, change one upstream condition at a time, and watch the target probability move. Start with the observed scenario above, then reset one condition that looks actionable. The point is to compare stories, not to treat the toy probabilities as a forecast.

Try The Model

Open the companion Darkstar model: Open Retail Shrink Control Friction BBN

In the shared model, keep LockedCasePolicy broad but set AssociateCoverage adequate. Then make locks targeted while keeping staffing low. The comparison shows why policy and execution both matter.

Download the teaching package: Retail Shrink Control Friction BBN ZIP

The ZIP contains synthetic model and code only. It excludes incident records, store security data, video analytics, employee data, SDK binaries, and chart-generation code.

Sources

  1. NRF: Retailers Continue to Contend with Theft and Violence
  2. NRF: Retail Trends in AI
  3. Deloitte: 2025 US Retail Industry Outlook

Leave a Reply

Discover more from Rocket Vector Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading