How to Calculate Roll Rates

Roll Rate Calculator .rr-calc-container { max-width: 800px; margin: 0 auto; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; color: #333; line-height: 1.6; background: #fff; padding: 20px; border: 1px solid #e0e0e0; border-radius: 8px; } .rr-calc-header { text-align: center; margin-bottom: 30px; background-color: #f8f9fa; padding: 20px; border-radius: 8px; border-left: 5px solid #0056b3; } .rr-calc-header h2 { margin: 0; color: #0056b3; font-size: 24px; } .rr-calc-row { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 20px; } .rr-calc-col { flex: 1; min-width: 280px; } .rr-input-group { margin-bottom: 15px; } .rr-input-group label { display: block; font-weight: 600; margin-bottom: 5px; font-size: 14px; color: #444; } .rr-input-group input { width: 100%; padding: 12px; border: 1px solid #ccc; border-radius: 4px; font-size: 16px; box-sizing: border-box; } .rr-input-group .help-text { font-size: 12px; color: #666; margin-top: 4px; } .rr-btn { display: block; width: 100%; padding: 15px; background-color: #0056b3; color: white; border: none; border-radius: 4px; font-size: 18px; font-weight: bold; cursor: pointer; transition: background-color 0.2s; margin-top: 10px; } .rr-btn:hover { background-color: #004494; } .rr-result-box { margin-top: 30px; padding: 20px; background-color: #eef7ff; border: 1px solid #b8daff; border-radius: 6px; text-align: center; display: none; } .rr-result-value { font-size: 36px; font-weight: 800; color: #0056b3; margin: 10px 0; } .rr-result-label { font-size: 16px; color: #555; font-weight: 600; } .rr-explanation { margin-top: 20px; padding-top: 20px; border-top: 1px solid #eee; font-size: 14px; color: #555; } .rr-content-section { margin-top: 40px; } .rr-content-section h3 { color: #333; border-bottom: 2px solid #0056b3; padding-bottom: 10px; margin-top: 30px; } .rr-content-section p { margin-bottom: 15px; } .rr-content-section ul { margin-bottom: 15px; padding-left: 20px; } .rr-content-section li { margin-bottom: 8px; } @media (max-width: 600px) { .rr-calc-row { flex-direction: column; } }

Roll Rate Calculator

Calculate delinquency transition percentages for credit risk analysis.

Total balance or account count in the earlier delinquency stage (e.g., 30 Days Past Due).
Volume that moved to the next delinquency stage (e.g., 60 Days Past Due) in the following period.
Roll Rate (Transition Probability)
0.00%

How to Calculate Roll Rates

Roll Rate analysis (also known as flow rate analysis or transition matrices) is a fundamental tool in credit risk management and loss forecasting. It measures the velocity at which delinquent accounts "roll" from one stage of delinquency to the next worse stage over a specific timeframe, typically month-over-month.

Understanding roll rates allows financial institutions to project future charge-offs and bad debt provisions based on the current composition of their portfolio.

The Roll Rate Formula

The calculation is a simple ratio of the volume flowing into a worse status divided by the volume available to flow from the previous status:

Roll Rate % = (Volume in Bucket B at Time T / Volume in Bucket A at Time T-1) × 100

Variables Defined:

  • Bucket A (Source): The initial delinquency stage (e.g., 30-59 Days Past Due).
  • Bucket B (Target): The subsequent delinquency stage (e.g., 60-89 Days Past Due).
  • Time Lag: The period between measurements must match the bucket definition. For 30-day buckets, the lag is typically one month.

Real-World Calculation Example

Let's assume you manage a credit card portfolio and want to calculate the 30-to-60 day roll rate for February.

  • January 31st (Period 1): You have $1,000,000 in outstanding balances that are 30-59 days past due.
  • February 28th (Period 2): Of that specific group, $200,000 failed to pay and became 60-89 days past due.
  • Calculation: ($200,000 / $1,000,000) = 0.20
  • Result: The roll rate is 20%. This means 20% of your 30-day delinquencies are deteriorating into 60-day delinquencies.

Why Roll Rates Matter

1. Loss Forecasting: By chaining roll rates together (e.g., Current to 30, 30 to 60, 60 to 90, 90 to Charge-off), analysts can predict exactly how much money will be lost to bad debt months in advance.

2. Early Warning System: A sudden increase in the "Current to 30" roll rate is often the first indicator of economic stress or underwriting issues, appearing long before actual losses materialize.

3. Collection Strategy: High roll rates in specific buckets indicate where collection efforts should be focused. If the 30-to-60 roll rate spikes, resources should be shifted to early-stage collections.

function calculateRollRate() { // Get input values var initialVol = document.getElementById('initialVolume').value; var rolledVol = document.getElementById('rolledVolume').value; var resultBox = document.getElementById('rrResult'); var valueDisplay = document.getElementById('rrValue'); var explanationDisplay = document.getElementById('rrExplanation'); // Validation: Check if empty if (initialVol === "" || rolledVol === "") { alert("Please enter both the Period 1 Volume and Period 2 Volume."); return; } // Parse to floats var t1 = parseFloat(initialVol); var t2 = parseFloat(rolledVol); // Validation: Check for non-numeric or negative values if (isNaN(t1) || isNaN(t2) || t1 < 0 || t2 < 0) { alert("Please enter valid positive numbers for volumes."); return; } // Validation: Division by zero if (t1 === 0) { alert("The Source Bucket Volume cannot be zero. A roll rate cannot be calculated if there were no accounts in the initial stage."); return; } // Logic: Calculate Roll Rate var rollRateDecimal = t2 / t1; var rollRatePercent = rollRateDecimal * 100; // Logic: Calculate Cure Rate (Inverse) var cureRatePercent = 100 – rollRatePercent; if (cureRatePercent t1 (which implies growth not just roll) // Show result resultBox.style.display = "block"; valueDisplay.innerHTML = rollRatePercent.toFixed(2) + "%"; // Dynamic explanation based on the result var summary = "From a starting volume of " + t1.toLocaleString() + ", "; summary += "a total of " + t2.toLocaleString() + " rolled to the next stage."; if (rollRatePercent > 100) { summary += "Note: The rate exceeds 100%. This implies new volume entered the bucket from sources other than the previous bucket, or there is a data mismatch between periods."; } else { summary += "This indicates that " + rollRatePercent.toFixed(1) + "% of the balance deteriorated, while approximately " + cureRatePercent.toFixed(1) + "% either cured (paid) or remained in the same bucket."; } explanationDisplay.innerHTML = summary; }

Leave a Comment