Methodology
How we score the risk of every fiat currency on earth.
Model Changelog
A transparent record of every change to our scoring model. We believe in showing our work — if we correct a data input, recalibrate a factor, or fix a bug, it's documented here.
Completed full audit. 159 of 171 countries (93%) now have explicit currency structure entries. Only 12 stable managed-float economies remain on defaults, which is appropriate.
▶Technical details
Added explicit entries for remaining underscored countries: Iraq (45 — CBI dollar auctions, informal market), Libya (40 — divided central bank, civil conflict), Algeria (45 — strict controls, non-convertible dinar, 30% parallel premium), Sri Lanka (25 — post-default, IMF restructuring), Zambia (25 — post-default, G20 Common Framework), Suriname (30 — post-crisis).
Classified pegged economies: Kuwait (hard peg to USD basket), Brunei (SGD peg), Eswatini/Bhutan (ZAR/INR pegs), Nepal (INR peg with controls), Maldives (USD peg), N. Macedonia (EUR peg), Timor-Leste/Montenegro/Kosovo (dollarized — score 0).
Added managed floats: Tanzania (20), Uganda (15), Rwanda (20), Tunisia (20), Moldova (15), Azerbaijan (15), Gambia (15), Paraguay (15). Free floats: Georgia (5), Uruguay (5).
Remaining 12 countries on defaults (AL, BW, CR, DO, FJ, GT, KI, KZ, MA, NR, RS, TT, TV) are all stable economies where capitalControlScore: 10 is appropriate.
Fixed Turkey scoring nearly identical to USD despite 60% inflation and compromised central bank. Also corrected reserve adequacy scoring for major reserve currencies.
▶Technical details
Turkey capital controls: 10 → 25. While nominally a free float, Turkey has export FX surrender requirements, unorthodox rate policy (rate cuts during inflation), and de facto interventions via state banks. Score of 10 (same as Switzerland) was inaccurate.
Reserve adequacy fix: major reserve currencies (USD, EUR, JPY, GBP — reserve share >3%) now treated as having at least 12 months equivalent reserve cover. Rationale: the US doesn't need reserves to defend the dollar because other countries hold USD as THEIR reserves. Previously, the US scored 56/100 on reserve adequacy (3 months) — same penalty as a fragile emerging market with 3 months. Now scores 0/100, which correctly reflects that reserve currency status eliminates reserve crisis risk.
Net effect: USD score drops ~3-5 points (debt remains the dominant risk factor). Turkey score increases ~5-8 points from the capital controls correction. Gap should widen to 8-15 points.
Full audit of all 180+ currencies identified 54 countries using default scores despite having significant capital controls, conflict, or managed regimes. Added explicit data for 45+ countries.
▶Technical details
Audit found 86 countries (47%) were using the default capitalControlScore of 10, which is appropriate for open economies but severely underscores countries with FX restrictions. Turkmenistan was the most extreme case: crisis score 97 (forex illegal since 2016, 1800% black market premium) but capital controls at default 10.
Added explicit currency-structure entries for 45+ countries across five categories: (1) Critical/conflict zones — TM: 90, CD: 55, HT: 50, BI: 50, AF: 55, SO: 45; (2) Central Asia — TJ: 45, KG: 30, AM: 20, UZ: 25, MN: 25; (3) CFA franc zone — 15 countries differentiated by stability (Benin 10, Niger 30, CAR 45); (4) Latin America — BO: 35, HN: 20, NI: 25, LA: 35; (5) Peg corrections — DJ hard peg, LS/NA ZAR peg, BA EUR board.
Added static fallback economic data (IMF/ADB sources) for 7 chronically data-sparse countries: Turkmenistan, DRC, Haiti, Burundi, Laos, Tajikistan, Somalia. These ensure the scoring model has macro indicators even when World Bank data is incomplete.
M2/GDP (broad money supply) promoted to default visible column in rankings table. Added methodology documentation explaining it is tracked but not scored due to directional ambiguity.
M2 broad money supply is now a default visible column in the rankings table. Added methodology documentation explaining why it is tracked but not included in the composite score.
▶Technical details
M2/GDP (broad money supply as a percentage of GDP) was previously hidden behind the "More data" toggle. It is now a core column visible by default alongside Score, Inflation, Debt, GDP Growth, and Governance.
Added a "Tracked but not scored" section to the Scoring Factors methodology page explaining the rationale: M2/GDP is ambiguous — high ratios can signal either excessive money printing (risk) or deep financial development (stability). Japan has M2/GDP above 250% yet is structurally stable. Rather than scoring an ambiguous indicator, we display it as context.
Countries with missing data can no longer score as "Low Risk." Added fallback data for Papua New Guinea, Kiribati, Nauru, and Tuvalu.
▶Technical details
Root cause: Papua New Guinea was scoring lower risk than Australia despite being structurally riskier. PNG had 8 of 12 factors missing from World Bank data — the missing indicators (weak governance, low reserves, high deficit) were absent from the calculation rather than being penalized. The 10% opacity penalty was too weak to compensate.
Confidence floor: if more than 60% of factors are missing, the score cannot go below 35 (Moderate). This prevents countries with no data from appearing safer than well-documented economies. The confidence nudge was also strengthened from (opacity - 0.5) × 30 to (opacity - 0.5) × 50.
Added static fallback data for PNG (IMF WEO, ADB: inflation 4.5%, debt 48%, reserves 3.1mo, governance -0.8) and three Pacific AUD-using nations (Kiribati, Nauru, Tuvalu). Added PNG to currency-structure with capitalControlScore: 40 (FX rationing by BPNG).
AUD is now a shared currency with 4 member countries (Australia, Kiribati, Nauru, Tuvalu) — matching the treatment of EUR and USD.
Aligned ISR revalidation times so all score-displaying pages render from the same data snapshot.
▶Technical details
Australia showed 48 on the rankings page but 39 on the currency page. Root cause: the rankings page revalidated every 1 hour while currency pages revalidated every 12 hours. When World Bank data changed between renders, different pages showed different scores for the same currency.
All score-displaying pages now use revalidate = 43200 (12 hours): homepage, rankings/dashboard, currency pages, country pages, tools, and landing pages. News pages retain 1-hour revalidation since they don't display risk scores.
Corrected underscored capital controls for managed-rate economies and enhanced FX volatility computation to capture step-devaluations.
▶Technical details
Capital control scores updated using IMF AREAER classifications and practical convertibility assessments. Bangladesh (BDT) was scoring 25/100 despite citizens being unable to freely convert taka — corrected to 60. Similar corrections applied to Egypt, Pakistan, Nigeria, Ethiopia, and Myanmar.
FX volatility now uses the maximum of 90-day and 365-day exchange rate changes. The previous 90-day-only window missed step-devaluations common in managed-rate economies (e.g., Bangladesh's ~25% managed devaluation in 2022–2023).
These changes address the BDT/USD scoring anomaly where structurally very different currencies scored nearly identically (BDT 34, USD 35). No changes to model weights or factor definitions.
Fixed missing governance scores for countries late in the alphabet (including the United States) due to API pagination limits.
▶Technical details
The World Bank governance indicator (RL.EST — Rule of Law) returns data for ~477 entities including aggregate regions. The previous per_page limit of 300 was insufficient, causing countries alphabetically after "S" to lose their governance data.
Increased per_page to 1000 and added automatic page-2 fetching when the API reports more pages available. All countries now receive governance scores regardless of alphabet position.
Added model validation through false positive analysis — documenting countries the model would have flagged but that did not experience crises.
▶Technical details
Identified and documented 5 false positive cases: Japan (debt), Brazil 2015 (recession), South Africa 2017 (governance), India 2013 (taper tantrum), and Zambia 2020 (debt default). Each case includes estimated factor scores, what actually happened, and why no crisis materialized.
2 true false positives, 2 near-misses (model correctly flagged risk), 1 justified flag. Track record page updated with factor breakdown bars showing exactly what the model would have displayed.
Year-over-year currency movers now use computed historical scores from World Bank data instead of the trend field.
▶Technical details
Previously, YoY movers used the country-level trend field (inflation/debt direction) which could conflict with actual composite score changes. A currency could show as "Getting Riskier" when its score actually decreased.
Now uses computeScoresForYear() to calculate last year's actual scores from World Bank historical data, aggregated to currency level. The delta between last year's score and today's score is always accurate.
All trend charts and comparisons now operate at the currency level, not the country level.
▶Technical details
Scores are averaged across all countries sharing a currency (e.g., EUR averages 20 eurozone members). This aligns with the platform's currency-first philosophy — users think in USD, EUR, TRY, not in country codes.
Daily blob snapshots now store currency-level scores alongside country-level data for historical tracking.