# Preparing your data

You do not need to reshape your data for Vintage Modeling. Export what your core system already produces, keep the column names it uses, and upload it. What follows helps you choose **which** exports to pull, so that your first upload can support the results you want: a credit-loss curve, prepayment speeds, and a price for a new loan.

## The three kinds of file

Every file you upload belongs to one **file group**. You declare the group when you add the file, and every file in one group within an upload must have the same columns.

- **Loan Snapshots.** A picture of your loan book at one point in time: one row per loan, each column a fact about that loan at that moment (its balance, its status, what it paid). A run of monthly snapshots is how Vintage sees your loans age, so snapshots are the richest input and the one that modeling depends on.
- **Origination Files.** The facts about each loan on the day it was made: its origination date, original loan amount, and term. These may already be columns in your snapshots, in which case you do not need a separate file.
- **Transaction Files.** Individual dated loan events: charge-offs, recoveries, payoffs, and partial prepayments. Some cores report these on the snapshot instead; either works. When both report the same figure for the same loan and month, Vintage uses the snapshot's figure and never adds the two together.

Origination, snapshot, and transaction rows combine when they share the same Loan ID.

**Loan ID is the one thing every file needs:** Vintage ties every row to a loan by its Loan ID, so each file needs a column holding the loan number. It is the only required field. Your browser scrambles it into a one-way protected ID before upload, and the same loan number scrambles to the same protected ID every month, which is how next month's file lines up with this month's. A Tax ID column, when you designate one, is scrambled the same way and serves as a fallback join key; Loan ID stays the primary key.

## Which fields unlock which results

Vintage reads your columns by meaning, not by name. A column headed `UPB` is recognized as Current Balance, and `SSN`, `TIN`, or `EIN` as Tax ID. You confirm each match at Column Mapping. The table below lists, by goal, the **Standard fields** (the fields Vintage understands) that make each result possible. Where a row lists alternatives, any one of them is enough.

| To get this | Your data needs |
|---|---|
| **Any loan in the curves at all** | Loan ID, Snapshot Month, and Current Balance (from a snapshot), plus the loan's term as Term (Months) or a Maturity Date |
| **Loans already on the book in your earliest snapshot month** | Origination Date. Without it these loans cannot be aged and are left out of the curves. A two-column Origination file (Loan ID and Origination Date) is enough |
| **A loss curve per original dollar for seasoned loans** | Original Loan Amount |
| **Credit loss** | A charge-off **amount**: Net Charge-Off Amount; or Charge-Off Amount, ideally with Recovery Amount; or a transaction ledger with a Transaction Type you classify and a Transaction Amount |
| **Payoffs detected** | Payoff Flag or Prepayment Flag; or a Loan Status or Closure Reason column whose values you classify. Payoff Amount refines either |
| **Prepayment speeds** | A reported schedule figure: Scheduled Principal Due or Scheduled Principal Paid; or Scheduled Payment Amount together with Actual Payment Amount |
| **Partial prepayments inside those speeds** | Partial Prepayment Amount or Unscheduled Principal Amount; or Actual Principal Paid; or Actual Payment Amount against Scheduled Payment Amount |
| **Pricing** | A funding curve (funds-transfer pricing, or FTP: your cost of funds by term), which you enter on the Modeling screen, not in an upload. Pricing draws on the credit-loss and prepayment measurements above; without them it leaves credit loss out or projects zero prepayment, and says so |
| **Slicing by anything else** | Any column at all: product code, branch, collateral type, and so on. Unrecognized columns are kept as custom attributes you can filter on |

A few points the table compresses:

- **A charge-off flag alone is not enough to measure loss.** A Charge-Off Flag, or a status value you mark as charged off, names the event but carries no amount. Those loans are held out of the loss curve rather than counted as a $0 loss.
- **Gross charge-offs without recoveries overstate loss.** If you report Charge-Off Amount and your data has no Recovery Amount column anywhere, the whole gross amount books as the loss. Adding Recovery Amount, or reporting Net Charge-Off Amount instead, fixes that.
- **Prepayment speeds need a schedule figure you reported.** Vintage never reconstructs an amortization schedule from balances, a rate, or a payment amount. A loan with no reported schedule figure gets no prepayment speed, even if it reports a prepayment amount. A loan with a schedule figure but no partial-prepayment source is still measured, and its speeds reflect full payoffs only.
- **An event field only needs to exist somewhere in your data.** A performing loan with no charge-off on record is not missing data: it is a loan that has not charged off, and it counts toward the loss curve's exposure (the dollars at risk at each age).
- **Term (Months), Maturity Date, and Interest Rate** also feed the projections: the pricing build-up and the projected part of the loss curve.

The [Standard fields](/reference/standard-fields/) reference lists every field and the names Vintage recognizes for each. [Modeling methods](/reference/modeling-methods/) lists every method for each result, in the order Vintage prefers them.

## Backfill first, then one file a month

Start with as much history as you have. Your first upload, the **backfill**, can be one file holding many months of snapshots or many monthly files added under the same card; every file in a group must share one set of columns. A deep history gives you curves that reach further into a loan's life.

After that, upload each new month as it closes. Two habits make this routine:

- **Keep the export format the same.** When a file's columns match a previous upload of the same group, Vintage pre-applies your earlier mapping, value meanings, and Remove PII choices, so a monthly upload is mostly confirmation. A renamed column reads as one column removed and another added. See [Uploading month after month](/uploading/uploading-month-after-month/).
- **Send monthly snapshots if you can.** A prepayment speed is measured from one monthly snapshot to the next, so it needs consecutive months. Quarterly or yearly snapshots are accepted and still support the loss curve, but a book with no two consecutive months has no prepayment speed.

You can add older history later. Vintage places it by snapshot month, not by upload date, so loading an older month never replaces a newer one, and the whole portfolio is re-read to account for the longer history.

## CSV or Excel

Vintage accepts two file types: CSV (`.csv`) and Excel workbooks (`.xlsx`). The older Excel format (`.xls`) is refused; save it as `.xlsx` or export it as CSV.

CSV is the better choice for a large portfolio and for any backfill. It is faster and lighter on your browser, and it has no size limit of its own: a single file is bounded only at about 2 GB, well beyond a typical monthly file.

    In a CSV, quote any value that contains a comma (for example, `"Smith, John"`). An unquoted comma splits one value into two and shifts every later value one column to the right, so a row whose cell count does not match the header row is skipped rather than imported out of alignment. Vintage counts skipped rows and tells you how many there were.
  Excel works well for smaller files. Your browser reads the whole workbook at once, so Excel is limited to 50 MB per file, and to 5 Excel files and 100 MB of Excel in total per upload. Past those limits, export to CSV or split the files across separate uploads.

    Vintage reads only the **first sheet** of a workbook and tells you which sheet that was. If your data is on another sheet, export that sheet on its own. Vintage reads each cell's stored value, not the text Excel displays, so cell formatting never changes what is read.
  The full rules for numbers, dates, and blanks are in [File requirements and parsing rules](/reference/file-requirements-and-parsing-rules/).

## What to leave in, and what to take out

**Leave in** every column you might want to slice by later. Vintage keeps any column it does not recognize as a custom attribute, and you can filter the portfolio on it. Leave blanks as blanks. A blank, `N/A`, or `NULL` means "no value," never zero, and it never erases a value Vintage already has.

**Take out**, or plan to remove at the Remove PII stage, the columns that identify a person: borrower names, addresses, phone numbers, email addresses. You can drop them from the export, or leave them in and tick them at Remove PII, where your browser removes them before anything is uploaded. Keep the loan number and any Tax ID column in; they are scrambled, not removed. See [Removing personal information](/uploading/removing-personal-information/).

**Check the headers.** Every column needs a header, and no two headers can be the same. A file with a blank or duplicated header cannot be uploaded, and Vintage says what is wrong and how to fix it.

## Facts only you can tell Vintage

Some things about your data cannot be read from the file, so Vintage asks rather than guesses. You answer each once and the answer is remembered. Value meanings, rate formats, how amounts are reported, and the charge-off question below can be changed later on the Fields screen; a date order is applied as the file is read, so correcting it after you finalize means uploading the file again.

- **What your codes mean.** Which Loan Status values mean paid off, charged off, exited for another reason (sold, participated, transferred), or still open; which flag values mark the event. See [Classifying values](/uploading/classifying-values/).
- **How your dates, rates, and amounts are written.** The date order (ambiguous dates default to US month/day), whether a rate of `8.25` means 8.25% or `0.0825` does (Interest Rate defaults to percent points), and whether an amount column reports each month's activity, a life-to-date total, or a year-to-date total. See [Declaring formats](/uploading/declaring-formats/).
- **Whether a charged-off loan leaves your exports.** If your file shows loans still reporting a balance after a charge-off, Review asks whether a charged-off loan leaves your exports or can survive a partial write-down. The default is that it leaves. See [Charge-offs and recoveries](/concepts/charge-offs-and-recoveries/).

## Related

- [Quickstart](/getting-started/quickstart/)
- [Choosing files](/uploading/choosing-files/)
- [Standard fields](/reference/standard-fields/)
- [Modeling methods](/reference/modeling-methods/)
- [File requirements and parsing rules](/reference/file-requirements-and-parsing-rules/)
- [Missing and unreported data](/concepts/missing-data/)