Skip to main content
The Country Instability Index (CII) maintains a high-frequency instability score for the 31 Tier-1 countries tracked by the Strategic Risk API. Rather than relying on static ratings, CII blends an editorial baseline with live event pressure and publishes the result through the server-side GetRiskScores RPC. For the full v8 formula, coefficient table, and change history, see CII Risk Scoring Methodology. This page is the operator-facing overview.

Monitored Countries

The current Tier-1 set is:
RegionCountries
AmericasUnited States, Venezuela, Brazil, Mexico, Cuba
EuropeGermany, France, United Kingdom, Poland
Eastern EuropeRussia, Ukraine
Middle EastIran, Israel, Saudi Arabia, United Arab Emirates, Turkey, Syria, Yemen, Iraq, Lebanon, Egypt, Qatar
Asia-PacificChina, Taiwan, North Korea, India, Pakistan, Myanmar, South Korea, Japan
Central/South AsiaAfghanistan
Tier-1 membership is curated rather than algorithmic. A country is included when it has sustained global-risk relevance, active/recent armed conflict or severe domestic instability, high regional escalation potential, major economic/security-system importance, or a dashboard-specific monitoring need. Changes to this set are methodology-significant because the Strategic Risk roll-up is computed from the top-scoring countries inside this universe.

Score Model

Each country’s score combines a static baseline with a dynamic event score:
eventScore = Unrest * 0.25
           + Conflict * 0.30
           + Security * 0.20
           + Information * 0.25

combinedScore = baselineRisk * 0.40
              + eventScore * 0.60
              + supplemental boosts
The result is clamped by active conflict and travel-advisory floors, then bounded to 0-100.
ComponentWhat It MeasuresMain Inputs
UnrestCivil disorder pressure before or below open conflictACLED protests and riots, protest fatalities, high-severity unrest, internet/power outages
ConflictKinetic violence and strike activityACLED battles, explosions, violence against civilians, fatalities, Iran-region strike intensity, OREF alerts for Israel
SecurityHard-security tempo near the countryMilitary flights, military vessels, aviation closures/delays, GPS/GNSS jamming
InformationInformation-environment pressureClassified news headlines and country-attributed threat summaries

Boosts And Floors

Supplemental boosts can raise the blended score when corroborating signals arrive outside the base event components:
BoostMaxTrigger
Climate anomalies15Country-attributed climate severity
Cyber threats12Severity-weighted cyber threat counts
Wildfires8High-brightness and total fire counts
Travel advisories15Do-not-travel, reconsider, or caution advisories
OREF blend25Active and 24-hour Israel alert pressure
Displacement20Log-scaled humanitarian displacement
News urgency5High Information component pressure
Earthquakes25Significant, major, or severe earthquakes
Sanctions14Sanctions entry volume and new-entry activity
AIS disruptions10Maritime disruption buckets
The score floor is the larger of UCDP conflict floors and State Department advisory floors. When live advisory data is absent, the scorer applies the curated fallback levels published in the methodology before calculating the advisory boost and floor.
FloorThreshold
UCDP active war70
UCDP minor conflict50
Do-not-travel advisory60
Reconsider-travel advisory50
UCDP conflict floors are derived from the latest available UCDP GED release (the seeder selects the newest version that returns events, not merely the first to respond) and only count events inside a 2-year recency window — older events no longer pin the floor. Within that window, CII classifies a Tier-1 country as UCDP active war when total deaths are greater than 1000 or event count is greater than 100, and as UCDP minor conflict when event count is greater than 10 but the war thresholds are not met. Because UCDP GED ships as annual releases that lag real time, recent kinetic conflict is carried by ACLED (real-time) and the cross-source signal feed; UCDP supplies the historical baseline floor. For /api/health.riskScores, the conflict realtime family is covered when either ACLED or an in-window UCDP feed is present. ACLED auth being unconfigured degrades the conflict signal to UCDP-only; it becomes COVERAGE_PARTIAL only when ACLED is dark and UCDP is also absent, stale, or outside the 2-year scoring window (see Data Sources).

Instability Levels

LevelScore RangeMeaning
Critical81-100Active crisis or major escalation
High66-80Significant instability requiring close monitoring
Elevated51-65Above-normal activity patterns
Normal31-50Baseline geopolitical activity
Low0-30Unusually quiet period

Bias Prevention

CII is intentionally not a raw media-volume index. The v8 model separates news pressure from conflict scoring, applies lower event multipliers and log dampening in high-observability countries, and uses conflict/advisory floors so active crises do not appear quiet during data gaps. The editorial rationale, Tier-1 inclusion criteria, advisory fallback table, Gaza text-attribution caveat, and per-country baselineRisk / eventMultiplier values are published in CII Risk Scoring Methodology.

Server-Side Pre-Computation

CII scores are computed server-side by GET /api/intelligence/v1/get-risk-scores and cached in Redis. The live cache is versioned by the current methodology_version (v8), with a stale-cache key used as a fallback during upstream outages. The Railway relay process also runs an active CII warm-ping loop every 8 minutes against the same RPC. That keeps the server-side risk-score cache warm for bootstrap and health monitoring while preserving the RPC handler as the scoring source of truth.

Trend Detection

The server publishes dynamicScore as a signed movement delta in the range -100..100 against a valid CII snapshot from approximately 24 hours earlier:
  • Rising: score movement is greater than 1 point.
  • Stable: score movement is between -1 and +1 points, or no valid prior snapshot is available.
  • Falling: score movement is less than -1 point.
Because CII combinedScore is rounded to whole points, +2 and -2 are the first integer movements that produce rising/falling trend labels. dynamicScore is 0 during cold start or when the server cannot find a valid approximate 24-hour prior snapshot. During initial dashboard startup, Learning Mode suppresses noisy early CII alerts while data and trend baselines settle. Server-side pre-computation means users still receive immediate scores; Learning Mode primarily affects local alert generation.