File size: 4,495 Bytes
0afdb9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# Default Cascade Simulation of Banks 2026

## Overview

Interactive Dash application that simulates the impact of commercial real estate (CRE) defaults on U.S. bank capitalization. The app classifies banks into regulatory categories under two frameworks — Prompt Corrective Action (PCA) based on Tangible Equity Ratio, and Basel III based on Estimated CET1 Ratio — and displays the results as stacked bar charts with summary metric cards.

## How It Works

### CRE Loss Calculation

Each bank's CRE losses are computed as:

- `CRE Losses = CRE Total x Default Rate x LGD`

When the Unrealized Losses toggle is ON, total losses also incorporate unrealized securities losses (positive values in the data, representing the magnitude of losses).

### Tangible Equity Ratio (PCA Framework)

Banks are classified by Adjusted Equity-to-Assets:

- `Adjusted Equity-to-Assets = (Total Equity - CRE Losses - Unrealized Losses) / Total Assets`

PCA categories:

| Category | Threshold |
|----------|-----------|
| Well Capitalized | >= 8% |
| Adequately Capitalized | >= 4% |
| Undercapitalized | >= 2% |
| Critically Undercapitalized | >= 0% |
| Insolvent | < 0% |

### Estimated CET1 Ratio (Basel III Framework)

Banks are also classified by Adjusted CET1 Ratio using an estimated Risk-Weighted Assets figure:

- `Estimated RWA = Total Assets x RWA Ratio`
- `Adjusted CET1 = (CET1 Capital - CRE Losses - Unrealized Losses) / Estimated RWA`

Basel III categories:

| Category | Threshold |
|----------|-----------|
| Well Capitalized | >= 6.5% |
| Undercapitalized | >= 4.5% |
| Below Basel III Minimum | >= 0% |
| Insolvent | < 0% |

## Controls

| Control | Range | Default | Description |
|---------|-------|---------|-------------|
| CRE Default Rate | 0-50% | 10% | Percentage of CRE portfolio that defaults |
| Loss Given Default | 0-100% | 50% | Loss severity on defaulted loans |
| Average RWA Ratio | 50-75% | 65% | Assumed ratio of risk-weighted assets to total assets |
| Total Assets | $10-100B | $10B | Minimum bank size filter |
| Unrealized Losses | ON/OFF | OFF | Include unrealized securities losses in stress calculation |
| Has CRE Losses | ON/OFF | OFF | Exclude banks with zero CRE exposure |
| Publicly Traded Only | ON/OFF | OFF | Exclude non-publicly traded banks |

## Display

### Stacked Bar Charts

Two horizontal stacked bar charts show the count of banks in each capitalization category:

- **Tangible Equity Ratio** — Five-shade red bar (PCA categories)
- **Estimated CET1 Ratio** — Four-shade purple bar (Basel III categories)

### Metric Cards

Each framework displays three summary cards:

| Metric | Description |
|--------|-------------|
| Total Losses | Aggregate CRE losses (plus unrealized if toggled) across all filtered banks, in $B |
| Banks Undercapitalized / Below Minimum | Count of banks falling below the adequately capitalized threshold, with their combined total assets |
| Banks Insolvent | Count of banks with negative adjusted ratios, with their combined total assets |

## Data Source

[The Banking Initiative at Florida Atlantic University](https://business.fau.edu/departments/finance/banking-initiative/) — Q3 2025 FFIEC Call Reports.

## Run Locally

```bash
pip install -r requirements.txt
python app.py
# Open http://localhost:8050
```

## Customization

You can use this app with your own data by replacing the `data.csv` file. Your CSV must include the following columns in the same format:

| Column | Description | Example |
|--------|-------------|---------|
| `Ticker` | Stock ticker symbol (blank for non-public banks) | `JPM` |
| `Name` | Bank name | `JPMORGAN CHASE BANK` |
| `ST` | State abbreviation | `NY` |
| `Total Assets ($M)` | Total assets in millions | `3459261` |
| `Total Equity ($M)` | Total equity in millions | `312794` |
| `CRE Total ($M)` | Commercial real estate exposure in millions | `174381` |
| `CET1 Capital ($M)` | Common Equity Tier 1 capital in millions | `291288` |
| `Total Unrealized Loss ($M)` | Unrealized loss on investment securities in millions (positive values) | `1842` |
| `Price` | Latest stock closing price in dollars | `293.70` |
| `Volume` | Average 30-day trading volume | `44276127` |
| `Volatility` | 30-day annualized volatility as percentage | `26.0` |

Only banks with a non-blank `Ticker` and valid `Price` and `Volatility` values will be included in the simulation. All other columns in the CSV are ignored by this app but may be used by companion apps in the Signalpha suite.