---
title: "Run a Simulation"
description: "Run a simulation to execute an object's logic across a sample as a queued job."
---

<div style="padding: 14px 16px; border: 0.5px solid #AFA9EC; border-radius: 12px; background: #EEEDFE; margin-bottom: 1.5rem;">
  <div style="display: flex; align-items: center; gap: 7px; margin-bottom: 8px;">
    <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
      <path d="M9 2L4 9h4l-1 5 5-7H8l1-5z" stroke="#7f77dd" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>
    </svg>
    <span style="font-size: 11px; font-weight: 500; letter-spacing: 0.05em; text-transform: uppercase; color: #534AB7;">TL;DR</span>
  </div>
  <div style="font-size: 13px; color: #3C3489; line-height: 1.65;">
    A simulation runs a registered object's logic over your data. Open any object, click <strong>Run → Simulation</strong>, and fill in <strong>Sampling</strong> to pick which records to run on. Click <strong>Run Job</strong>. Everything else has a default, so add <strong>Reports</strong> or other settings only if you need them.
  </div>
</div>

## What is it?

A simulation executes the logic of a registered object - a data element, feature, model, or policy you have built and saved on the platform - on data. It is the primary way to test your work, validate performance, and produce the results you'll attach when you request approval.

For example, say you've built a new credit risk model and want to see how it scores last quarter's applications before you request approval. The simulation runs the model over those records and gives you the job output plus any reports you pick.

Simulations can be run at any point. You do not need to wait for approval to test your work.

## Launching a Simulation

1. Navigate to the object you want to simulate in **Data Vault**, **Feature Engineering**, **Model Studio**, or a **Policy** module, and open its registry page.
2. Click **Run** in the top right corner.
3. Select **Simulation** from the dropdown.

    <figure>
      <img src="/images/how-tos/run-a-simulation/run-a-simulation-01-run-dropdown.png" alt="Run dropdown on a registry page with Simulation selected." class="screenshot" loading="lazy" />
      <figcaption>Open any registered object and choose <strong>Run → Simulation</strong> to launch the job form.</figcaption>
    </figure>

This opens the simulation job form. Fill only the sections your run needs, starting with the one most runs use.

<figure>
  <img src="/images/how-tos/run-a-simulation/run-a-simulation-02-job-form.png" alt="Full simulation job form with collapsible sections." class="screenshot" loading="lazy" />
  <figcaption>The job form is a single scrollable page; each section can be filled independently.</figcaption>
</figure>

## Running a Simulation

You can click **Run Job** as soon as the form opens. With nothing changed, the object runs over its entire registered population.

Usually you don't want everything, though. You want last quarter's applications, or one product's accounts, or a specific list of IDs. That's what **Sampling** is for, and it's the one section most people set before running.

1. In the job form, open **Sampling**. Use the toggle on the right of the section header to turn sampling on or off; with it off, the object runs over the full population. With it on, pick one of the two modes below to choose which records to run on.

   <div class="collapse-section" data-summary="Run on a sample (Custom)">

   The platform selects records for you by size, date range, and rules.

   * **Sample** - select **Sample Size** (fixed row count), **Sample Ratio** (percentage of the table), or **Full** (entire population), then enter the value.
   * **Date** (optional) - expand **Show optional filter properties** and choose a date column to filter the population by a time window. When a date column is selected, enter the **From** and **To** values for the window.
   * **Additional rules** (optional) - click **Add additional rules** to add expression filters (for example, `FICO >= 680`).

   <figure>
     <img src="/images/how-tos/run-a-simulation/run-a-simulation-07-sampling-custom.png" alt="Sampling section in Custom mode with sample size, optional date filter, and additional rules." class="screenshot" loading="lazy" />
     <figcaption>In Custom mode, set the sample size or ratio and optionally add date or expression filters.</figcaption>
   </figure>

   </div>

   <div class="collapse-section" data-summary="Run on a specific list of IDs (Prespecified Ids)">

   You already have the account IDs or application IDs you want to score; provide them and the simulation runs on exactly those. Point to a table or upload a CSV/Excel file containing your list of IDs.

   * **Table Location** - a path on any supported source (Hive, S3, GCP, HDFS), or upload a CSV/Excel file from your local drive.
   * **ID Column Name** - the column containing the IDs. Defaults to the entity column of the object; override if your file uses a different name.

   <figure>
     <img src="/images/how-tos/run-a-simulation/run-a-simulation-08-sampling-prespecified-ids.png" alt="Sampling section in Prespecified Ids mode with Table Location and ID Column Name fields." class="screenshot" loading="lazy" />
     <figcaption>In Prespecified Ids mode, point to a table or upload a file containing the exact record IDs to score.</figcaption>
   </figure>

   </div>

2. Click **Run Job** at the bottom of the form.
3. You are redirected to the **Jobs** tab, where you can monitor progress.

To add reports or read from a different source, see the sections below before clicking **Run Job**.

## Add Reports

If you only need the scored records, skip this section. Add reports when you also want performance metrics and charts, KS, lift, ROC curves, or approval rates on top of job output.

* Choose one or more **Reports** to run. Each selected report renders as its own tab in the results.
* Under **Parameters**, expand each report group and supply the value for each input the report needs (for example, *weight* for a weighted-average report, or *threshold* for a flagging report).
* For scheduled jobs, if the selected report tracks a metric over time, set **upper and lower thresholds** to flag values that breach those limits in the Tracking Report.

<figure>
  <img src="/images/how-tos/run-a-simulation/run-a-simulation-05-reports.png" alt="Reports section with a report selector and expandable Parameters groups." class="screenshot" loading="lazy" />
  <figcaption>Select the reports to run and expand each report group to supply its parameters.</figcaption>
</figure>

<figure>
  <img src="/images/how-tos/run-a-simulation/run-a-simulation-06-metric-thresholds.png" alt="Metric thresholds in the Reports section for scheduled tracking reports." class="screenshot" loading="lazy" />
  <figcaption>On scheduled jobs, set upper and lower thresholds to flag metrics that breach those limits in the Tracking Report.</figcaption>
</figure>

## Optional Configuration

These sections customize the run. Each has a default, so skip any you do not need.

<div class="collapse-section" data-summary="Description and Job Configs - note what you are testing, or override Spark settings">

**Default:** standard execution environment.

Add a note describing what you are testing, or use **Job Configs** to override Spark settings for this run (for example, `executor memory`, `yarn queue`, or a specific library version such as `scikit-learn=0.24.2`).

<figure>
  <img src="/images/how-tos/run-a-simulation/run-a-simulation-03-description.png" alt="Description section with the notes field and Job Configs editor." class="screenshot" loading="lazy" />
  <figcaption>Use the Description section to record what you are testing and override Spark settings if needed.</figcaption>
</figure>

</div>

<div class="collapse-section" data-summary="Scheduling - run later or on a repeating schedule instead of immediately">

**Default:** runs immediately.

Set a **Start Date** and enable **Recurrence** to schedule repeating runs (daily, weekly, monthly, and so on). Each run is preserved on the **Jobs** tab, so you can compare results across periods or track a metric over time.

<figure>
  <img src="/images/how-tos/run-a-simulation/run-a-simulation-04-scheduling.png" alt="Scheduling section with Start Date, Time, and Recurrence controls." class="screenshot" loading="lazy" />
  <figcaption>Leave the schedule empty to run immediately, or set a Start Date and Recurrence for repeating runs.</figcaption>
</figure>

</div>

<div class="collapse-section" data-summary="Dependencies - supply values for the inputs the object references but your data does not carry">

Dependencies are inputs the object's logic references that don't come from your data columns: **Global Variables**, **Product Type Configs**, and **Runtime Parameters**. The job can't run until each required one has a value, and those values are **not** prefilled, so you set them here.

For example, a model that reads a `min_fico` **Runtime Parameter** shows a field where you type the cutoff to use for this run (say `680`). A **Global Variable** or **Product Type Config** shows a dropdown where you pick the registered feature that supplies its value.

The section groups them two ways:

* **Current Object** - the dependencies of the object you are simulating.
* **Dependents** - the dependencies of the other objects it relies on, if any.

Fill every required field in both groups before running.

</div>

<div class="collapse-section" data-summary="Data Sources - read from a different path or reuse a previous job's output">

**Default:** reads the input tables from the locations registered in Data Vault.

You only need this section if you want to do one of two things:

* **From data file** - read a table from a different location than the registered one.
* **From existing job** - use a previous job's output as this run's input.

Use the radio button at the top of the section to switch between them.

**From data file**

Override the registered location for one or more input tables (for example, *Applicant Table*, *Application Table*).

* For each table, select the source type (Hive, S3, GCP, HDFS) and enter the location, or upload a CSV/Excel file. Column names and types must match the registered schema.
* Click **Add Subsetting Criteria** next to a table to filter rows before they are read (for example, `application_date >= '2024-01-01'` or `region = 'US'`).

:::tip
Subsetting criteria reduce how much data is read from the data lake and can significantly cut runtime on large tables.
:::

<figure>
  <img src="/images/how-tos/run-a-simulation/run-a-simulation-09-datasources-file.png" alt="From data file source with per-table location overrides and Add Subsetting Criteria." class="screenshot" loading="lazy" />
  <figcaption>Add subsetting criteria to filter rows before they are read. Table locations default to the registered paths; override them if needed.</figcaption>
</figure>

**From existing job**

Reuse the output of a previous job as the input for this one.

:::note
**From existing job** requires sampling to be disabled. The output of a previous job is already a fixed population, so layering sampling on top would be ambiguous.
:::

* Select **Object Type**, **Object**, and then the specific **Job** to reuse.
* The reused job is not limited to the same object type, as long as its output contains the inputs this object needs (for example, a Feature job can feed a Data Element simulation).

<figure>
  <img src="/images/how-tos/run-a-simulation/run-a-simulation-10-datasources-existing-job.png" alt="From existing job source with Object Type, Object, and Job selectors." class="screenshot" loading="lazy" />
  <figcaption>Pick a previous job whose output supplies the inputs this simulation needs.</figcaption>
</figure>

</div>

## Submitting and Monitoring the Job

After you click **Run Job**, you land on the **Jobs** tab, which shows the job's current status. Any given job only reaches a subset of these; it will be one of the following.

<table class="attr-table">
  <thead>
    <tr>
      <th style="width: 28%;">Status</th>
      <th>What it means</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><span style="display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #ECEEF1; color: #55606E;">Scheduled</span></td>
      <td>Set to run at a later time or on a recurrence; it has not started yet.</td>
    </tr>
    <tr>
      <td><span style="display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #EEEDFE; color: #534AB7;">Queued</span></td>
      <td>Waiting for resources.</td>
    </tr>
    <tr>
      <td><span style="display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #E1EEFB; color: #1B62A8;">Compiling</span></td>
      <td>Job is being compiled.</td>
    </tr>
    <tr>
      <td><span style="display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #FBF3D6; color: #8A6D0B;">Running</span></td>
      <td>Execution is in progress.</td>
    </tr>
    <tr>
      <td><span style="display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #DCF3E4; color: #1B7F45;">Completed</span></td>
      <td>Job finished successfully.</td>
    </tr>
    <tr>
      <td><span style="display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #FCE9D6; color: #B25E09;">Partially Completed</span></td>
      <td>The job ran, but some records failed to be scored while the rest succeeded. Open the job to see which.</td>
    </tr>
    <tr>
      <td><span style="display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #FBE0E0; color: #C0322B;">Failed</span></td>
      <td>Execution failed. Download the log from the job details page to see why.</td>
    </tr>
    <tr>
      <td><span style="display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; background: #ECEEF1; color: #55606E;">Cancelled</span></td>
      <td>Stopped manually before it finished.</td>
    </tr>
  </tbody>
</table>

Execution time depends on data size and system load. To watch progress, use the **Job Board** icon (<svg width="14" height="14" viewBox="0 0 24 24" fill="none" style="display: inline-block; vertical-align: middle; position: relative; top: -1px;"><circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="1.6"/><path d="M12 12V7" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><path d="M12 12H16" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>) in the top bar to track queue position and progress.

## Reading the Results

Once the simulation completes, open it from the **Jobs** tab. Use the outputs to confirm the object scored the records as expected, review any reports, and catch problems before approval.

<table class="attr-table">
  <thead>
    <tr>
      <th style="width: 22%;">Tab</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="field-cell">Job Details</td>
      <td>Summary of how the job was configured (sample, filters, data source, scheduling, object version). Useful for reproducing the run later.</td>
    </tr>
    <tr>
      <td class="field-cell">Job Result</td>
      <td>Row-level job output, downloadable as CSV or Parquet, plus runtime breakdown and execution logs.</td>
    </tr>
    <tr>
      <td class="field-cell">Report Tabs</td>
      <td>One tab per report selected in the Reports step. Whatever reports you chose render here. For a Model, this is where reports like ROC/AUC, KS, lift, confusion matrix, or any custom report you selected appear. For a Policy, it is where segment-level approval rates, risk distributions, or other custom reports you added appear.</td>
    </tr>
  </tbody>
</table>

## What's next

* [Compare Two Simulations](/user-guide/how-tos/compare-simulations/) side by side to analyze differences in results, metrics, and reports (for example, a candidate model against the production champion, or the same model across two date ranges).
* Read [Understand Job Output](/user-guide/how-tos/understand-job-output/) to make sense of the columns in the Job Result.
* For an in-production model or policy, [Monitor your Model or Policy](/user-guide/how-tos/monitor-model-policy/) using scheduled simulations and metric thresholds.
