---
title: "Register a Model Definition"
description: "Register a Model Definition to bring a trained model onto the platform."
---
import { Tabs, TabItem } from '@astrojs/starlight/components';
Bring a trained model into Corridor as a governed object, whether you built it in a Notebook or trained it outside with your own tooling (scikit-learn, H2O, ONNX, and more). Once registered, it can be simulated, explained, approved, and reused across Policies and other Models. This page walks through the registration form.
## What is it?
The Model page is where you bring a trained model into Corridor as a governed object. Models built inside the platform in a [Notebook](/user-guide/how-tos/use-the-notebook/) or trained outside with your own tooling can both be registered. Once registered, they can be simulated, explained, approved, and used downstream.
A registered Model sits one layer above Features and Data Elements in the registry hierarchy:
→
Model
→
Policies
Other Features
Other Models(e.g. ONNX reader)
## Benefits of a registered Model
**1. Reproducible scoring**
The platform validates the model's expected inputs against the registered objects you select. Every simulation runs through the same scoring code path that production will use (no drift between "the notebook version" and "the deployed version").
**2. Built-in governance**
- **Change management** and **version control**: every edit to the Model is captured as a new version.
- **Lineage**: see exactly which Data Elements and Features feed the Model, and every Policy or downstream Model that consumes it.
- **Permissible purpose**: tag the Model so it can only be used in approved contexts (for example, restrict an `underwriting`-tagged Model from a prospecting Policy).
- **Approval workflow**: submit the Model for review, attach a simulation as evidence, and route it to the right reviewers before it can go live.
**3. Explainability and monitoring out of the box**
Enable a [Model Explainer](/user-guide/how-tos/register-a-model-explainer/) at registration time and every simulation produces per-prediction contributions or reason codes. Standard **Model Quality** reports (ROC/AUC, KS, lift, confusion matrix for classification; error distribution for regression) are generated automatically from each simulation.
## How to Register
Follow these steps to register a Model.
#### Open the Create Form
On the **Model Studio → Model** page, click **+ New Model**.
A name prompt opens first. Enter a descriptive name for the Model (for example, `Default Within 18 Months`) and confirm to land on the full Model form.
#### Fill in Attributes
Set the **Model Type** \* - the type of prediction, such as `Binary Classification`, `Regression`, `Time Series`, or `Multi-class Classification`.
Set the **Output Type** \* - the data type of the output (for example, `Numerical` for a probability, `String` for a class label).
Fill in the **Alias** \* (the identifier used to reference the model's output downstream) and the **Entity** \*. See [Common Registration Info](/user-guide/how-tos/common-registration-info/).
Set the **Dependent**, the target variable the Model is trained to predict. Optional but recommended, since approval reviewers and downstream reports use it.
#### Add Inputs
In the **Input** section, search and select the registered objects the Model consumes.
- Inputs can include **Data Elements** and **Features**. Models can also consume other **Models** as inputs (useful for stacked models or ONNX reader models).
- Each input is referenced inside the model definition by its alias.
:::tip[Tip: paste a list of inputs at once]
If you already have the input list elsewhere (a notebook, a spec, an old model definition), paste it straight into the Input field. The platform resolves each name against the registry and adds the matching Data Elements and Features for you, so you don't have to search and click them in one by one.
:::
A **Transform** is a calculation applied to a model input (a Data Element or Feature) during model execution. It is **specific to this Model**, unlike a [Feature](/user-guide/how-tos/register-a-feature/), which is generic and reusable across Models and Policies.
Use one when your model was estimated on a derived value but only the raw input is registered. For example, a model trained on `requested_loan_amount_low` (1 if `requested_loan_amount < 5000`, else 0) needs that flag defined as a Transform, since only `requested_loan_amount` exists in the registry.
Transforms are created on the **Transforms** page and, once defined for a Model, appear on its details page automatically and are computed as part of model execution.
#### Fill in the Formula
The **Formula** section is where you provide the model definition.
**Define the model.** Pick the **Model Input Type** that matches your model and provide the file or logic:
| Model Input Type |
Use when |
| Python Function |
The scoring logic is a self-contained Python function. |
| Pickle |
The model is a serialized scikit-learn (or compatible) Python object. |
| PMML |
The model is exported to PMML by tools like KNIME, R, or SAS. |
| H2O MOJO |
The model was built in H2O or H2O Driverless AI. |
| ONNX |
The model was exported from Keras, PyTorch, scikit-learn, or another framework supporting ONNX. Requires a two-step setup. |
| Custom |
Any other framework (e.g. TensorFlow). You provide the model file, initialization logic, and scoring logic directly. |
Then follow the matching tab below.
1. Provide the Python scoring function directly in the editor or upload the file containing it.
2. Each input alias from the Input section is passed as a Python value to your function.
1. Upload the pickle file.
2. If the model's expected inputs don't match the inputs you selected in the Input section, resolve the mismatch by adjusting the Input section.
1. Upload the `.pmml` file.
2. Specify the **Output Field**:
- For classifiers, the probability column for one of the dependent classes.
- For regression, the predicted value column.
3. If a declared input doesn't match the file's expected inputs, add or remove inputs in the Input section to resolve the mismatch.
1. Upload the MOJO file (H2O or H2O Driverless AI).
2. If the inputs don't match, resolve the mismatch by adjusting the Input section.
ONNX models are registered in **two stages**, because the raw ONNX output is an array.
**Stage 1: Register the raw ONNX model (M1)**
1. Set **Model Type** to `Time Series` so the array output is allowed.
2. Upload the ONNX file.
3. The **Output Field** is populated by the final layer name from the model build.
**Stage 2: Register the output reader (M2)**
Register a second Model (typically `Binary Classification`) whose **Input** includes M1. The reader reads the array from M1 and returns the element you want (for example, the first element as the probability).
:::note[Scikit-learn exported to ONNX]
Scikit-learn models exported to ONNX return a class label, not a probability. The Output Field is the class column.
:::
For frameworks not covered above (for example, TensorFlow), provide the following:
1. **Model File**: upload the serialized model file.
2. **Initialization Logic**: code that loads the model object once. Its return value becomes the `model` available in the scoring step.
3. **Scoring Logic**: code that takes the input aliases plus the initialized `model` and returns the prediction.
#### Enable the Model Explainer (optional)
Once the definition is written, toggle **Model Explainer** on (below the definition editor) to produce per-prediction contributions or reason codes from each simulation. See [Register a Model Explainer](/user-guide/how-tos/register-a-model-explainer/) for the full walkthrough.
#### Link Training & Validation Data (optional)
Optionally attach the data used to develop the Model, for approvers and reports. For each entry, pick a **Type** (a registered **Dataset** or a file **Location**) and a **Label** (Train, Validation, and so on). Click **Add** for more entries.
#### Fill in Properties and Create
Fill in the [Properties](/user-guide/how-tos/common-registration-info/#properties) (Description, Permissible Purpose, Group, and Keywords), then click **Create** at the bottom right. The Model is saved as a draft and you land on its details page.
## What's Next
- [Run a Simulation](/user-guide/how-tos/run-a-simulation/) on the Model to validate it on a representative sample.
- Add a [Model Explainer](/user-guide/how-tos/register-a-model-explainer/) to surface per-prediction contributions or reason codes.
- Send the Model for [approval](/user-guide/how-tos/approve-an-object/) so it can be used outside your draft workspace.
- Use the approved Model in a [Policy](/user-guide/how-tos/register-policy-decision-workflow/).