NBFC collection efficiency: three ratios that disagree, and why
In this article (7 sections)
Related programme: the Data Analytics with Generative AI course (3–4 months; ₹90,000 (inclusive of GST) · EMI from ₹4,000/month).
NBFC collection efficiency is collections divided by what was due, but "what was due" has at least three honest versions: this month's EMI demand only, current demand plus opening arrears, or current demand with prepayments counted in the cash. On the synthetic ten-loan book below the same month reads 101.5%, 43.8% and 281.1%. Report the overall ratio and the bucket movement to the collections head, and keep the EMI ratio for trend comparison with earlier reports.
Draft memo first, workings after
Collections reviews go better when the analyst writes the conclusion before the tables. This is the memo the numbers below support:
**August 2026 collections, two-wheeler portfolio (synthetic).** EMI collection efficiency was 101.5%, but ₹16,900 of the ₹33,900 received went to clearing arrears; only ₹17,000 met this month's EMIs. Against everything that was due — this month's ₹33,400 plus ₹44,000 of opening overdue — we collected 43.8%. One of two 1-30 accounts normalised; the 61-90 account paid nothing and has moved to NPA. A ₹60,000 foreclosure is excluded from efficiency and reported separately.
Every number in that memo comes from the code in this article. The rest of the page is about why each sentence is phrased the way it is.
The three ratios, written out
| Ratio | Numerator | Denominator | What it answers |
|---|---|---|---|
| EMI collection efficiency | EMI cash received in the month | EMI demand for the month | Did we collect roughly a month's worth of instalments? |
| Overall efficiency | Receipts appropriated to overdue + to current demand | Current demand + opening overdue | How much of the total amount due did we clear? |
| Cash including prepayment | All cash, including foreclosures and part-prepayments | EMI demand for the month | How much money came in? (a treasury number, not a collections number) |
The first ratio is popular because it is simple and stable, but it rewards collecting arrears without saying so. The second is harder to game. The third should never be labelled "efficiency".
The collections file an NBFC analyst gets
A month-end extract from the loan management system typically has, per loan: loan_id, product, branch, opening_bucket, opening_overdue, demand (EMI due this month), cash_received (EMI receipts, net of bounces), prepayment, plus mode (NACH, cash, UPI, field collection) and agency_id for outsourced collections. The data below is synthetic.
import pandas as pd
# Synthetic August 2026 collections file for ten two-wheeler loans (amounts in ₹)
loans = pd.DataFrame({
"loan_id": ["T01","T02","T03","T04","T05","T06","T07","T08","T09","T10"],
"opening_bucket": ["0","0","0","0","1-30","1-30","31-60","61-90","NPA","0"],
"opening_overdue": [0, 0, 0, 0, 3200, 3500, 6400, 9900, 21000, 0],
"demand": [3200, 3500, 2900, 4100, 3200, 3500, 3200, 3300, 3500, 3000],
"cash_received": [3200, 3500, 0, 4100, 6400, 3500, 3200, 0, 7000, 3000],
"prepayment": [0, 0, 0, 0, 0, 0, 0, 0, 0, 60000],
})
# Appropriate regular receipts to the oldest dues first: overdue, then this month's EMI
regular = loans["cash_received"]
loans["to_overdue"] = regular.clip(upper=loans["opening_overdue"])
loans["to_current"] = (regular - loans["to_overdue"]).clip(upper=loans["demand"])
loans["closing_overdue"] = (loans["opening_overdue"] + loans["demand"]
- loans["to_overdue"] - loans["to_current"])
demand = loans["demand"].sum()
opening = loans["opening_overdue"].sum()
emi_ce = loans["cash_received"].sum() / demand # ratio 1
overall_ce = (loans["to_overdue"].sum() + loans["to_current"].sum()) / (demand + opening) # ratio 2
headline_ce = (loans["cash_received"].sum() + loans["prepayment"].sum()) / demand # ratio 3
print(f"Demand Rs {demand:,} opening overdue Rs {opening:,}")
print(f"1. EMI collection efficiency : {emi_ce:.1%}")
print(f"2. Overall efficiency : {overall_ce:.1%}")
print(f"3. Cash incl. prepayment : {headline_ce:.1%}")
print(loans[["loan_id","opening_bucket","to_overdue","to_current","closing_overdue"]])Printed result:
| Measure | Value |
|---|---|
| Demand | ₹33,400 |
| Opening overdue | ₹44,000 |
| EMI collection efficiency | 101.5% |
| Overall efficiency | 43.8% |
| Cash incl. prepayment | 281.1% |
Receipts are appropriated to the oldest dues first. That is why T06, which paid exactly one EMI, clears its old overdue and leaves this month's EMI unpaid: the account is still one instalment behind.
Bucket movement tells the collections head where effort worked
Efficiency ratios hide which customers moved. A roll-back table does not. The helper below approximates the bucket from the number of EMIs overdue — a shortcut for this illustration; production reports should use dated days-past-due as described in NPA ageing and SMA buckets.
def bucket(overdue, emi):
if overdue == 0:
return "0"
months = round(overdue / emi)
return {1: "1-30", 2: "31-60", 3: "61-90"}.get(months, "NPA")
loans["closing_bucket"] = [bucket(o, e) for o, e in zip(loans["closing_overdue"], loans["demand"])]
moves = pd.crosstab(loans["opening_bucket"], loans["closing_bucket"])
print(moves)| Opening (rows) vs closing (columns) | 0 | 1-30 | 31-60 | NPA |
|---|---|---|---|---|
| 0 | 4 | 1 | 0 | 0 |
| 1-30 | 1 | 1 | 0 | 0 |
| 31-60 | 0 | 0 | 1 | 0 |
| 61-90 | 0 | 0 | 0 | 1 |
| NPA | 0 | 0 | 0 | 1 |
One current account (T03) slipped, one 1-30 account normalised, the 31-60 account held its bucket by paying one EMI, and the 61-90 account rolled into NPA. That last line is the sentence the business head needs.
Regulation that changes the denominator of your NPA line
RBI's Scale Based Regulation framework for NBFCs (22 October 2021) moved all NBFC categories to a 90-day overdue NPA norm, with a glide path for Base Layer NBFCs: more than 150 days by 31 March 2024, 120 days by 31 March 2025 and 90 days by 31 March 2026. If you compare NPA-bucket collections across years for a Base Layer NBFC, the definition of that bucket changed under you. Restate old months on the current norm or footnote the break.
Where NBFC efficiency numbers get bent
- Bounce and re-presentation. A NACH debit that bounces and is re-presented later in the month can appear twice in raw receipts and once as a reversal. Use net receipts.
- Value date versus posting date. Field collections deposited on the 2nd of the next month may carry the collection date or the deposit date. A three-day shift at month-end moves efficiency by several points.
- Advance EMIs. Customers paying next month's EMI early inflate this month's EMI ratio and deflate next month's. Hold advances in a separate column.
- Settlements and write-offs. A one-time settlement collects less than the overdue. Treat the waived part as a write-off, not as collected, or overall efficiency looks better than the recovery really was.
- Averages of branch ratios. Compute portfolio efficiency from summed numerators and denominators. Averaging branch percentages gives a small branch the same weight as a large one.
Handing the numbers to a collections head
Lead with overall efficiency and the roll-back table, by branch or agency, for the last three months. Put the EMI ratio beside it with its definition so people can compare with older reports. Report foreclosures and prepayments in their own line. And when efficiency is above 100%, say in the same sentence what was collected that was not due this month.
Allocation logic, pandas clip, and a memo that leads with the conclusion are all part of what our 3–4 month DA course practises. If you want to see how much of your current skill set this already covers, try the free skill check.
Frequently asked questions
How is collection efficiency calculated for an NBFC?
The most common version divides the EMI cash collected in a month by that month's EMI demand. A stricter version divides everything applied to dues, both arrears and current EMIs, by the current demand plus the opening overdue. State which one you use, because the two can differ by more than fifty points on the same book.
Why is my NBFC collection efficiency above 100%?
Because arrears or prepayments collected this month are being divided by this month's demand only. Collecting last month's missed EMIs, or a foreclosure, adds cash without adding demand, so the ratio can exceed 100% even while overdue customers stay overdue.
Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.
This article is part of our Data Analytics with Generative AI programme — 3–4 months. The full analyst stack — Excel, SQL, Power BI and Python pipelines — then a generative-AI layer you can prove is right.
Explore Data Analytics with Generative AI