← All posts

India's Credit Growth Story: What the Data Actually Shows

Beyond the headlines - a segment-by-segment look at where Indian credit is expanding and what it means for risk models.

Every quarter, the headlines write themselves: “India’s retail credit growing at X%!” followed by either euphoria or hand-wringing, depending on who’s writing. But the aggregate number is almost useless. The segment-level story is where things get interesting, and it’s far more consequential if you’re building risk models or credit products.

I’ve been on both sides of this - originating credit products at Axis Bank’s priority banking desk, and now building AI systems that need to understand credit behavior at scale. Here’s what the data actually shows when you break it apart.

The Segment-by-Segment Picture

Home loans are growing at roughly 14-16% YoY as of mid-2024, and they’re still the backbone of retail credit. But the interesting thing isn’t the growth rate - it’s where the growth is coming from. Tier-2 and Tier-3 cities now account for nearly 45% of new home loan originations, up from about 30% five years ago. That shift matters a lot for risk models. Default correlations in Jaipur and Lucknow don’t behave like Mumbai and Bangalore. Property price discovery is messier, resale markets are thinner, and your LTV stress tests need to look quite different.

Personal loans have been growing at 25-30% YoY, and this is where I find the most interesting dynamics. The average ticket size has been declining - from roughly Rs 3.5 lakhs to Rs 1.8 lakhs. That tells you something important: the growth is coming from new-to-credit and thin-file borrowers, not existing customers taking bigger loans. Fintech lenders drove most of this expansion, with digital disbursement making sub-Rs-50,000 loans viable in ways traditional banks never managed.

Credit cards in force crossed 100 million in early 2024 - roughly doubling in four years. The portfolio quality picture, though, depends entirely on which issuer and which segment you’re looking at. Cards issued against fixed deposits (a common Indian bank strategy for thin-file customers) have completely different risk profiles from lifestyle cards issued to salaried professionals. Aggregate delinquency numbers hide this.

Gold loans are growing at 20%+ but it’s heavily concentrated in Southern states - Kerala, Tamil Nadu, Karnataka. They serve a genuinely unique function: liquidity without the information asymmetry problems of unsecured lending. The collateral is standardized, liquid, and transparently priced. What I find interesting for modeling is that the default drivers are counterintuitive - borrowers don’t default because they can’t pay. They default because gold prices drop below the loan-to-value threshold and walking away becomes the rational move.

MSME credit is the big one. The formal credit gap for Indian MSMEs sits at an estimated Rs 20-25 lakh crores. GST registration data, UDYAM registration, and now Account Aggregator flows are making previously invisible businesses look creditworthy on paper. This will be where the next wave of credit growth comes from, and it needs fundamentally different models.

The Credit Cycle Feedback Loop

Understanding where we are in the cycle requires understanding the feedback mechanism:

flowchart TD
    A[Credit Growth<br/>Acceleration] --> B[Competitive Pressure<br/>on Underwriting]
    B --> C[Gradual Standards<br/>Calibration]
    C --> D[Portfolio Quality<br/>Indicators]
    D --> E[Regulatory<br/>Attention]
    E --> F[Prudential<br/>Measures]
    F --> G[Market<br/>Recalibration]
    G --> A

    H[Economic Growth<br/>+ Digital Infrastructure] --> A
    I[Alternative Data<br/>+ Better Models] --> B

    style A fill:#1a1a2e,stroke:#e94560,color:#fff
    style B fill:#1a1a2e,stroke:#e94560,color:#fff
    style C fill:#1a1a2e,stroke:#e94560,color:#fff
    style D fill:#1a1a2e,stroke:#e94560,color:#fff
    style E fill:#1a1a2e,stroke:#e94560,color:#fff
    style F fill:#1a1a2e,stroke:#e94560,color:#fff
    style G fill:#1a1a2e,stroke:#e94560,color:#fff
    style H fill:#16213e,stroke:#0f3460,color:#fff
    style I fill:#16213e,stroke:#0f3460,color:#fff

The RBI raising risk weights on consumer credit and bank lending to NBFCs in November 2023 fits right into this cycle. It wasn’t restrictive - more like a calibration. The signal was basically: “We see the growth, we want it to continue, but the risk pricing needs to reflect reality.” That’s what a good regulator does - tweak the feedback loop before it starts oscillating badly.

What Traditional Credit Models Miss

This is where it gets interesting if you’re building scoring models for the Indian market. The standard approach - bureau score, income verification, employment stability - works fine for the formal salaried segment. That’s roughly 80-90 million people. India has 600+ million adults in the workforce. So the gap isn’t really a data problem anymore. It’s a modeling problem.

Gig economy income patterns. Take a Swiggy delivery partner earning Rs 25,000-40,000 monthly. Their daily income is all over the place, but their monthly income is surprisingly stable. Traditional models see the daily volatility and panic. Better models look at a different frequency and see stability. The coefficient of variation of monthly income for gig workers is often comparable to salaried employees - it’s the daily variance that’s high, and daily variance just doesn’t predict loan default on a monthly EMI.

UPI transaction history as a credit feature. UPI processes over 10 billion transactions monthly. The behavioral signal in that data is incredibly rich, and it’s accessible through the Account Aggregator framework with customer consent.

Here’s a simplified example of how UPI transaction features could feed into a credit model:

import pandas as pd
import numpy as np

def extract_upi_credit_features(transactions: pd.DataFrame) -> dict:
    """
    Extract credit-relevant features from UPI transaction history.

    Expects columns: timestamp, amount, direction (credit/debit),
    counterparty_category, is_recurring
    """
    # Basic activity features
    months_active = (
        transactions['timestamp'].max() - transactions['timestamp'].min()
    ).days / 30

    monthly_txns = transactions.set_index('timestamp').resample('M').size()

    # Income stability: coefficient of variation of monthly credits
    monthly_credits = (
        transactions[transactions['direction'] == 'credit']
        .set_index('timestamp')
        .resample('M')['amount'].sum()
    )
    income_cv = monthly_credits.std() / monthly_credits.mean()

    # Recurring payment discipline
    recurring = transactions[transactions['is_recurring'] == True]
    recurring_consistency = (
        recurring.groupby('counterparty_category')
        .apply(lambda g: g.set_index('timestamp').resample('M').size().std())
        .mean()
    )

    # Spending pattern features
    debit_txns = transactions[transactions['direction'] == 'debit']

    # Discretionary vs. essential spending ratio
    essential_categories = {
        'utilities', 'rent', 'groceries', 'education', 'healthcare'
    }
    essential_spend = debit_txns[
        debit_txns['counterparty_category'].isin(essential_categories)
    ]['amount'].sum()
    total_spend = debit_txns['amount'].sum()
    essential_ratio = essential_spend / total_spend if total_spend > 0 else 0

    # Balance trend (are monthly net flows improving?)
    monthly_net = (
        transactions.set_index('timestamp')
        .assign(signed_amount=lambda df: np.where(
            df['direction'] == 'credit', df['amount'], -df['amount']
        ))
        .resample('M')['signed_amount'].sum()
    )
    balance_trend = np.polyfit(range(len(monthly_net)), monthly_net.values, 1)[0]

    return {
        'months_active': months_active,
        'monthly_txn_count_mean': monthly_txns.mean(),
        'monthly_txn_count_cv': monthly_txns.std() / monthly_txns.mean(),
        'income_cv': income_cv,
        'recurring_payment_consistency': recurring_consistency,
        'essential_spend_ratio': essential_ratio,
        'balance_trend_slope': balance_trend,
        'avg_monthly_credit': monthly_credits.mean(),
    }

From what I’ve seen in experimentation, the features that matter most are income_cv (stability of inflows), recurring_payment_consistency (do they pay bills on time?), and balance_trend_slope (is their financial situation getting better or worse?). Just these three features from UPI data can meaningfully improve credit decisions for thin-file customers where bureau data is sparse.

Account Aggregator as an inflection point. I don’t use the word lightly, but the Account Aggregator (AA) framework is a genuine inflection point for Indian credit. It gives consent-based access to a customer’s complete financial data - bank statements, insurance policies, mutual fund holdings, tax returns - through a standardized API. For credit modeling, this means you can go from a single bureau score to something much richer. A customer with a thin credit file but Rs 5 lakhs in mutual funds, a term insurance policy, and consistent salary credits? That’s a completely different risk from someone with the same thin file but no savings and erratic income.

And AA solves the cold-start problem. Instead of requiring 12-18 months of credit history to build a score, you can use 6-12 months of banking and investment data to infer creditworthiness. Not perfectly - but well enough to make pricing decisions that beat “decline” or “price at the risk ceiling.”

Where the Opportunity Sits

A few things are lining up in an unusual way right now.

Data availability has outrun modeling capability. Between UPI, AA, GST, and digital KYC, we have data on hundreds of millions of Indians who were previously invisible to formal credit systems. But the models haven’t caught up. Most lenders are still running logistic regression on bureau variables - not because they don’t know better, but because the regulatory and validation frameworks for alternative data models are still maturing. There’s a gap there.

Then there’s the headroom question. India’s household credit-to-GDP ratio sits at roughly 36-38%, compared to 65-70% in China and 75%+ in developed markets. Even accounting for structural differences, that’s a lot of room. Indian credit will grow. The question is whether it’ll be well-modeled and well-priced.

And here’s what I find most striking: for once, financial inclusion and commercial viability are actually pulling in the same direction. Usually there’s a tension between serving underbanked populations and making money. But in India right now, the infrastructure (UPI, AA, Aadhaar-based KYC) has brought the cost of serving small-ticket credit down to where the unit economics genuinely work. The lender who builds the best models for the Rs 50,000-5,00,000 credit segment will expand financial access and generate attractive risk-adjusted returns at the same time.

So the bottom line: India’s credit growth story isn’t one story. It’s five or six different stories happening at once, each with different risk drivers and different modeling challenges. The aggregate numbers get the headlines, but the segment-level dynamics are where the real intelligence sits. And the winners in this cycle will be the institutions that move from bureau-score monoculture to multi-signal credit intelligence - using the data infrastructure that India has, somewhat uniquely, already built.

← Previous I Built an LLM-Powered Campaign Engine for Financial Services Next → Why I Chose Graph Neural Networks Over Transformers for Financial Context