ARGUS · Technical appendix

Methods & formulas

Every quantitative instrument in ARGUS, explained in order: what it measures, what goes in, what comes out, and why it exists.

These are not decorative scores. They gate risk language, drive alerts, rank hypotheses, and force briefs to admit thin evidence. Most run without any AI key.

01 · Trust

NATO Admiralty grading

ARGUS grades every event with the classic Admiralty System: reliability A–F (source) and credibility 1–6 (this report). You see a chip like A1 or C3, plus a confidence label.

Baselines

Source type sets the starting grade (examples):

SourcesTypical grade
USGS, GDACS, FIRMSA1
GDELT, RSSC3
Unknown / thinD4

Event confidence

Weights map letters and digits onto 0–1 (A/1 ≈ 1.0 … F/6 ≈ 0.1). Corroboration pulls confidence toward 1.

eventConfidence ≈ (w_reliability × w_credibility) + corroboration boost → [0, 1]

Staleness: full weight for ≤72 hours, then linear decay toward a floor (about 0.6–0.85) by 30 days.

agedConfidence = eventConfidence × stalenessFactor(timestamp, corroboration)

Labels: High ≥ 0.75 · Moderate ≥ 0.5 · Low ≥ 0.3 · else Unverified.

Implemented in source-weight scoring on every event card.

02 · Risk

Absolute country risk (not relative)

Older dashboards often normalize so the “worst” country is always 100. ARGUS refuses that. A country’s score depends only on its own activity.

Severity weights

critical = 10 · high = 4 · medium = 2 · low = 1

Sum weighted events → saturating severity score:

severityScore = 100 × (1 − e^(−weightedSum / 40))

Roughly: ~4 critical (or ~10 high) → severity ≈ 63. More never exceeds 100; quiet stays near 0.

Fatalities

fatalityScore = min(100, log1p(fatalities) / log1p(1000) × 100)

1,000 reported fatalities → 100 on a log scale.

Velocity

Today vs the country’s own recent baseline. 50 = neutral. Unknown baseline stays 50 (never invents “high”).

trendPct = (today − avgBaseline) / avgBaseline × 100 velocityScore = clamp(50 + 0.5 × trendPct, 0, 100) rising if trendPct > 15 · falling if < −15

Compose

state = 0.7 × severityScore + 0.3 × fatalityScore riskScore = state × (0.75 + 0.5 × velocityScore / 100)

Velocity modulates the state score by about ±25%. Bands: ≥60 CRITICAL · ≥35 HIGH · ≥15 MEDIUM · else LOW.

Project risk uses the same composition with aged event confidence on severity and skips info-ops tagged items. A separate threat band (CRITICAL / ELEVATED / WATCH) is count-based for home/brief consistency — not the 0–100 score.

Velocity significance (actors)

Actor dossier “significant” trends use a Poisson-style z-test:

z = (recent − expected) / √max(expected, 1) significant if recent ≥ 4 and |z| ≥ 2

03 · Anomalies

Surges vs a country’s own baseline

Per (country, category), ARGUS compares a short window (about 6 hours) to a 30-day baseline. Alerts are upward-only — quiet is not news.

  • Poisson upper tail — P(X ≥ observed | λ = expected)
  • Quasi-Poisson z — (obs − exp) / √(φ · exp), with dispersion φ = Var/Mean ≥ 1
  • Benjamini–Hochberg FDR — q = 0.10 across tests
  • CUSUM — tabular cumulative sum for sustained shift (limit h ≈ 4)

Severity of the toast/alert follows z and CUSUM strength. This is why a busy news day in one country does not automatically flag another that is merely “busy relative to the globe.”

04 · Correlations

Fourteen named patterns

Correlation alerts fire when structured conditions hold. Rate gates use each country’s own ~14-day baseline (Poisson z ≥ 2), not a global average. Geo clusters use DBSCAN on precise coordinates only.

PatternWhat it watches for
Maritime InterdictionElevated event density near a named chokepoint
Conflict EscalationElevated conflict rate plus ≥1 critical
Compound CrisisMany distinct categories in one country/window
Regional InstabilityHigh/critical cluster spanning ≥2 countries
Infrastructure ThreatCritical events near a chokepoint
Humanitarian ConvergenceElevated humanitarian rate
Political DestabilizationElevated political rate
Cascading FailureCompound crisis plus conflict in neighbors
Cross-Border SpilloverConflict in A with humanitarian/disaster in neighbor B
Sanctions ViolationSanctioned vessels at a chokepoint
Military Air OperationsMilitary aircraft near high/critical conflict
ISR OperationsRecon callsign patterns near conflict
Combined ArmsMilitary vessels + aircraft at the same chokepoint
Dark FleetNameless slow vessels loitering at a chokepoint

Thresholds are editable per project in Alerts settings. Chokepoint boxes (Hormuz, Bab-el-Mandeb, Suez, Malacca, Panama, Taiwan Strait, Dover, …) are shared between map layers and these signals.

05 · Patterns & contradictions

If/then structure in your own corpus

Pattern rules

Deterministic scanners (minimum two hits before surfacing):

  • Category A then category B in the same country within a window
  • Actor mention then a category
  • Location escalation (higher severity follows)
  • Source A then source B
  • Weekday cadence for a category
  • Advanced multi-dimension trigger → follow rules

Confidence: high if hits ≥ 4 and hit-rate ≥ 0.7; moderate if ≥ 2 and ≥ 0.5; else low.

Contradictions

Regex extracts numeric claims (killed, injured, arrested, death toll, …). Inside a related thread:

  • Conflicting — different figures within 24 hours
  • Walkback — later figure is lower
  • Later-higher outside 24h is treated as normal toll progression (not flagged)

06 · Threads & actors

Auditable storylines — no invented narrative

Thread join score

Greedy chronological join. A candidate needs score ≥ 5:

+3 per shared tracked actor (cap 2) +3 if related reporting (story similarity) +1 same country +2 nearby ≤ 150 km +1 same category Max gap 14 days · active if last event < 7 days

Each link stores reasons — you can audit why two events were joined.

Actor dossiers

Name/alias match → totals, recent 7-day vs prior week, trend %, Poisson significance, severity/category mix, co-actors, share of A/B-graded sources.

Situation monitor

Diffs the last snapshot. Signal kinds: new-thread (≥3 events, high/critical), thread-escalation, actor-spike, contradiction, forecast-due. First tick establishes baseline (no spam).

07 · Evidence balance

Honesty when the corpus is thin

Start at 100; subtract gaps:

−25 volume · −12 entity · −15 country skew · −8 language · −6 source diversity

Confidence cap for briefs: HIGH if score ≥ 75 and no entity/country gaps; MODERATE if ≥ 45; else LOW. That cap is injected into AI prompts so the model cannot claim high confidence on a skinny feed.

08 · Semantic relevance

Stay on-mission

Mission text = security/conflict framing + research question + countries + keywords/entities. With an embedding key, events are scored by cosine similarity (mapped into 0–100). Without a key, keyword situation-relevance is the fallback.

  • Rerank keeps items above threshold (~45) or force-keeps entity/place matches
  • Floor / min-keep / max-keep guards prevent empty or bloated feeds
  • Live gate is stricter (~40) so co-mention noise stays out

09 · Formula library

Weighted models with citations and assumptions

Each formula takes variables in [0, 1], applies weights, and outputs 0–100. Assumptions are explicit — confidence rises when you accept them knowingly.

score = round( (Σ valueᵢ × weightᵢ) / Σ weightᵢ × 100 ) confidence = 0.40·dataQuality + 0.35·formulaFit + 0.25·historicalAccuracy

dataQuality from filled variables + event volume; formulaFit from accepted assumptions; historicalAccuracy from the prediction ledger (default 0.5 if unknown).

Conflict Intensity Score

Armed conflict · UCDP / ACLED-inspired

Event frequency (0.30) · fatality rate (0.35) · armed actor proliferation (0.20) · displacement pressure (0.15).

Electoral Violence Risk

Elections · Straus & Taylor; Electoral Integrity Project

Historical violence (0.30) · political exclusion (0.25) · incumbent vulnerability (0.25) · security force militarization (0.20).

State Fragility Index

Political stability · Fragile States Index / Rotberg

Security apparatus · political legitimacy · economic decline · group grievance (0.25 each by default).

Civil Unrest Index

Civil unrest · GDELT / CAMEO 14x

Protest frequency (0.35) · security response (0.30) · economic grievance (0.20) · media escalation (0.15).

Debt Distress Index

Economic crisis · IMF DSA / Reinhart & Rogoff

External debt/GDP (0.30) · reserve coverage (0.25) · current account deficit (0.25) · creditor concentration (0.20).

Humanitarian Crisis Severity

Humanitarian · IPC v3.1 / OCHA / ACAPS

Food insecurity IPC Phase 3+ (0.35) · displacement (0.25) · aid access constraints (0.25) · health system stress (0.15).

10 · ACH

Analysis of Competing Hypotheses

Goal templates seed three rival hypotheses. On the canvas, each piece of evidence is scored against each hypothesis as supports, neutral, or contradicts — Richards Heuer’s method, emphasizing disconfirmation.

  • AI path — uses full article text when available; returns rationales per cell
  • Offline path — keyword heuristics (escalation / stalemate / diplomacy vs event language)
  • Lead hypothesis (share snapshots) — fewest contradicts first, then max (supports − contradicts)

Ledger entries record ACH scores so outcomes can be checked later — same discipline as forecasts.

11 · Forecasts

Probabilities you can score

Dated claims resolve to outcome 0 or 1. Calibration is public to the brief.

Brier = (p − outcome)² // 0 best, 1 worst skill = 1 − meanBrier / climatologyBrier verdict: ≤0.10 excellent · … · >0.25 poor

Accuracy stats include mean Brier, base rate, and calibration bins (predicted probability vs observed frequency). Track record blocks appear in briefs only after at least one resolved forecast.

12 · Historical analogs

Similarity to curated past situations

A 30-day feature vector (share conflict / political / humanitarian, mean severity, 7-day vs prior velocity) is compared to a curated analog library via weighted Euclidean distance. Weights emphasize conflict and political share (1.5), then humanitarian (1.0), severity (0.8), velocity (0.3). Output is a 0–100 similarity — a prompt for judgment, not an oracle.

Why this appendix exists. ARGUS is built so an analyst can open the hood. If a score feels wrong, you should be able to find the equation — not a black box marketing label.