Loan Cost Index Methodology & Data Dictionary
Reproduce 420 loan scenarios and 140 term comparisons from published inputs and a fixed-payment formula. This page documents the exact zero-fee assumptions, rounding, field definitions and versioned generator.
Version 1.0.0 · Published and checked October 22, 2026 · Produced by Borrow Your Loan
How are payments and costs calculated?
For principal P, annual rate a expressed as a percent, and n monthly payments, the monthly rate is r = a / 1200. The fixed payment is M = P × r / [1 − (1 + r)−n]. At a zero rate, M = P / n. Total repayment is M × n; total interest is total repayment minus P.
The generator evaluates these expressions using Python’s standard-library Decimal arithmetic at 60-digit precision. This is an ordinary fully amortizing, equal-period model. No observed market data or customer information enters the calculation.
Which assumptions apply?
- Synthetic mathematical scenarios; not observed rates, market averages, lender quotes or available loan offers.
- Fixed annual interest rate equals APR only because modeled mandatory fees are zero.
- Equal monthly periods, first payment one month after disbursement, fully amortizing scheduled payments, no missed/extra payments.
- No origination fees, taxes, insurance, penalties, optional products, daily-interest or irregular-period adjustments.
- Scenario coverage does not establish product or term availability, state eligibility or underwriting criteria.
- 60-digit Decimal calculations; ROUND_HALF_UP to cents only for output; totals and deltas use unrounded values.
The CFPB APR explanation supports separating rate and fees. This dataset is zero-fee mathematics; it is not a Truth in Lending APR disclosure or an estimate of an offer’s fee-inclusive APR.
How are differences and rounding handled?
Rate differences subtract the 10% scenario at identical principal and term. Term differences subtract the 36-month scenario at identical principal and rate. In paired term files, monthly reduction is short-term payment minus long-term payment; additional interest and repayment are long-term cost minus short-term cost.
Every difference and total is computed from unrounded values. Output uses ROUND_HALF_UP to two decimal places, not Python’s default display rounding. Rounded components may therefore differ by one cent from their displayed sum or difference. A negative value represents a cost below the named baseline.
What does each data field mean?
| Field or field group | Definition |
|---|---|
| scenario_id | Unique principal/rate/term identifier. |
| principal_usd | Gross modeled principal in US dollars. |
| annual_interest_rate_pct | Fixed nominal annual interest rate; divide by 1200 to obtain monthly rate. |
| illustrative_fee_free_apr_pct | Equals modeled interest rate only under zero-fee assumptions. Not a regulatory APR disclosure. |
| term_months | Number of monthly payments. |
| monthly_payment_usd | Unrounded amortization payment rounded to cents for display. |
| total_interest_usd | Unrounded total repayment less principal, rounded to cents. |
| total_repayment_usd | Unrounded monthly payment multiplied by term, rounded to cents. |
| versus_10pct_* | Scenario minus 10% scenario at identical principal and term, computed before rounding. Positive means higher. |
| versus_36months_* | Scenario minus 36-month scenario at identical principal and rate, computed before rounding. Positive means higher. |
| short_* / long_* | Payment, interest and repayment for the named terms at identical principal/rate. |
| monthly_payment_reduction_usd | Short-term payment minus long-term payment, rounded only after subtraction. |
| additional_interest_usd / additional_repayment_usd | Long-term outcome minus short-term outcome; no fees in this model. |
How do you reproduce version 1.0.0?
- Download reproduce-v1.py. It uses only Python 3’s standard library and contains no network calls.
- Run
python reproduce-v1.py outputin a new output directory. - Expect 420 scenarios, 140 paired comparisons, a 42-row $10,000 subset, and metadata files. Compare the generated bytes with the corresponding downloads.
The inputs, dataset version and creation date are constants in the generator. Re-running does not silently change the version date. A future numerical or assumption change requires a new version; these v1 URLs identify this release.
- Download all 420 payment scenarios (CSV)
- Download the $10,000 subset: 42 scenarios (CSV)
- Download 24 vs 36 and 36 vs 60 months: 140 comparisons (CSV)
- Download all data, comparisons and metadata (JSON)
- Download assumptions and field definitions (JSON)
- Download the reproducible Python generator (standard library only)
What is a worked verification example?
For $10,000 at 15% over 36 months, r = 0.0125. The unrounded payment is approximately $346.653285…; displayed payment is $346.65. The full-precision total rounds to $12,479.52, with $2,479.52 interest. Multiplying $346.65 by 36 yields $12,479.40; that 12-cent difference is why the dataset does not derive totals from displayed cents.
An independent validation can accumulate each month’s balance: interest = opening balance × r, principal paid = M − interest, closing balance = opening balance − principal paid. The balance should reach zero within calculation precision at n payments.
Who produced it, and what are its limits?
Responsible organization: Borrow Your Loan. First published and checked October 22, 2026; version 1.0.0. The index contains synthetic scenarios, not research about actual applicants, product eligibility, average rates or borrower outcomes. It cannot establish whether a loan is suitable or affordable.
Report a reproducible discrepancy through contact, including version, scenario ID and expected result. See editorial policy and commercial disclosure. We do not attribute review to a fictional expert.
Return to the Loan Cost Index and HTML tables, or use the personal loan calculator for different inputs.