> ## Documentation Index
> Fetch the complete documentation index at: https://docs.narrative.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Classifier Studio interface

> Reference for the Classifier Studio UI for training classification models on your data

This reference documents the UI elements, configuration options, and actions available in the Classifier Studio interface.

## Overview

Classifier Studio enables training classification models that categorize and label data within Narrative's platform. It integrates data selection, label configuration, and compute resource allocation into a streamlined workflow.

**Path:** My Models → Classifier Studio

## Entry points

You can open Classifier Studio two ways:

* **Empty builder** — Navigate to **My Models → Classifier Studio** and configure every step from scratch.
* **Pre-seeded from Label Studio** — Clicking **Train Model** in a Label Studio project workspace opens Classifier Studio with the **Dataset**, **Label column**, and a single **Feature** already filled in: the project's label dataset, `label` as the target, and `input_string` as a text feature. The seed reuses Label Studio's existing source NQL expression, so no source-column materialization is needed before training. The handoff is gated on the project having at least 10 labeled rows across at least 2 distinct classes; below those thresholds Label Studio's Train Model action stays disabled.

After a pre-seeded handoff you still pick the algorithm, hyperparameters, test/train split, and finalize the model name and tags — only the first three steps come pre-filled.

<Note>
  Classifier Studio and Label Studio are only available on Snowflake data planes — their seed, write, and training workflows rely on Snowflake-only DML — and the side navigation hides both entries on non-Snowflake planes (for example AWS).
</Note>

## Builder interactions

The builder is a step-by-step flow. Each configured step exposes inline actions so you can revise selections without navigating back through earlier steps:

| Action     | Description                                                                     |
| ---------- | ------------------------------------------------------------------------------- |
| **Edit**   | Re-opens the step's configuration view with your existing selections pre-filled |
| **Remove** | Clears the step's configuration (and any dependent downstream steps)            |

When training is submitted, a compact **toast notification** confirms success and links directly to the **Jobs** page to track progress.

***

## Dataset Selection module

The Dataset Selection module lets you choose the dataset that contains your labeled training data.

| Element                   | Description                                      |
| ------------------------- | ------------------------------------------------ |
| **Select Dataset button** | Opens the dataset selection view                 |
| **Dataset name**          | Displays the currently selected training dataset |

### Dataset selection view

When you click **Select Dataset**, a full selection view appears with:

| Element          | Description                                                                  |
| ---------------- | ---------------------------------------------------------------------------- |
| **Dataset list** | Searchable, virtualized list of available datasets in the current data plane |
| **Next button**  | Proceeds to label column selection (enabled after selecting a dataset)       |
| **Cancel**       | Returns to the builder start view                                            |

<Note>
  Only datasets available in your currently selected data plane are shown.
</Note>

***

## Label Column module

The Label Column module lets you select the column that contains the classification target — the categories your model will learn to predict.

| Element                 | Description                                                                     |
| ----------------------- | ------------------------------------------------------------------------------- |
| **Select Label button** | Opens the label column selection view (requires a dataset to be selected first) |
| **Column name**         | Displays the currently selected label column                                    |

### Label column selection view

| Element             | Description                                                          |
| ------------------- | -------------------------------------------------------------------- |
| **Column dropdown** | Filterable list of primitive-type columns from the selected dataset  |
| **Column type**     | Displays the data type next to each column name                      |
| **Back button**     | Returns to dataset selection                                         |
| **Next button**     | Proceeds to feature configuration (enabled after selecting a column) |

### Supported column types

Only columns with primitive data types are available as label columns:

| Type          | Description            |
| ------------- | ---------------------- |
| `string`      | Text-based categories  |
| `boolean`     | Binary classification  |
| `double`      | Numeric labels         |
| `long`        | Integer labels         |
| `timestamptz` | Timestamp-based labels |

<Tip>
  For best results, choose a column with a balanced distribution of category values in your training data.
</Tip>

***

## Feature Configuration module

The Feature Configuration module lets you define which columns from your dataset serve as input features for the classifier and how they should be processed.

| Element              | Description                                  |
| -------------------- | -------------------------------------------- |
| **Configure button** | Opens the feature configuration view         |
| **Feature list**     | Displays configured features and their types |

### Feature types

| Type               | Description                                              |
| ------------------ | -------------------------------------------------------- |
| `text`             | Free-form text processed via natural language techniques |
| `categorical`      | Discrete categories encoded for model input              |
| `numeric`          | Continuous numeric values                                |
| `count_vectorizer` | Text converted to token frequency vectors                |
| `embedding`        | Pre-computed vector embeddings                           |

***

## Algorithm Configuration module

The Algorithm Configuration module lets you choose the classification algorithm for training.

| Element              | Description                           |
| -------------------- | ------------------------------------- |
| **Configure button** | Opens the algorithm selection view    |
| **Algorithm name**   | Displays the selected classifier type |

### Available algorithms

| Algorithm               | Description                                                                              |
| ----------------------- | ---------------------------------------------------------------------------------------- |
| **Logistic Regression** | Linear model suited for binary and multi-class classification with interpretable results |
| **Random Forest**       | Ensemble method that builds multiple decision trees for robust predictions               |

### Hyperparameters

Each algorithm exposes its own set of tunable hyperparameters with sensible defaults. The configuration view surfaces the parameters relevant to your selected algorithm — for example, regularization strength for Logistic Regression, or tree count and maximum depth for Random Forest — so you can adjust only what matters for your use case.

### Test/train split

Configure how the dataset is partitioned into training and evaluation sets:

| Setting            | Description                                                                                                      |
| ------------------ | ---------------------------------------------------------------------------------------------------------------- |
| **Test size**      | Fraction of rows reserved for evaluation                                                                         |
| **Random state**   | Integer seed that makes the split deterministic across retrains                                                  |
| **Stratification** | When enabled, preserves the label distribution in both the train and test splits — useful for imbalanced classes |

***

## Finalize module

The Finalize module is the last step before training. It lets you name and version the model, attach metadata, confirm the execution environment, and review everything you've configured in a single summary view.

| Element                   | Description                                                                                               |
| ------------------------- | --------------------------------------------------------------------------------------------------------- |
| **Model name**            | Human-readable name for the trained classifier                                                            |
| **Model version**         | Version identifier for this training run, enabling side-by-side comparison of retrains                    |
| **Tags**                  | Keywords for organizing and identifying trained classifiers                                               |
| **Data plane selector**   | Confirm the data plane where training executes                                                            |
| **Configuration summary** | Read-only review of your dataset, label column, features, algorithm, and split settings before submission |

<Info>
  Classifier training runs on Snowflake's built-in ML capabilities within your data plane. Data never leaves your infrastructure.
</Info>

***

## Actions reference

### Configuration actions

| Action                  | Location                       | Description                                                          | Result                                     |
| ----------------------- | ------------------------------ | -------------------------------------------------------------------- | ------------------------------------------ |
| **Select Dataset**      | Dataset Selection module       | Choose training dataset                                              | Dataset selected, columns become available |
| **Select Label**        | Label Column module            | Choose target column                                                 | Classification target defined              |
| **Configure Features**  | Feature Configuration module   | Define input features                                                | Feature columns and types configured       |
| **Configure Algorithm** | Algorithm Configuration module | Choose classifier type, hyperparameters, and split                   | Algorithm selected for training            |
| **Finalize**            | Finalize module                | Name/version the model, add tags, confirm data plane, review summary | Training request fully configured          |

### Training actions

| Action               | Location     | Description                                            | Result                                        |
| -------------------- | ------------ | ------------------------------------------------------ | --------------------------------------------- |
| **Train Classifier** | Page toolbar | Start training (enabled when all steps are configured) | Training job submitted and progress displayed |

***

## Training output

After you click **Train Classifier**:

* A training job is submitted to the selected data plane
* A success confirmation appears when the job is accepted
* Monitor training progress on the Jobs page or in the **Classifiers** tab under **My Models** (see below)
* The trained classifier becomes available for use in your data workflows

***

## My Models — Classifiers tab

The **Classifiers** tab on the **My Models** page (**My Models → Classifiers**) lists the trained classifiers in your currently selected data plane. It is populated from `models_train_classifier` jobs, so every classifier you have ever trained appears here as soon as its job is submitted.

Repeated training runs for the same **name** and **version** are collapsed into a single representative row, with the most recent run driving the row's status, metrics, and timestamps.

**Path:** My Models → Classifiers

### Columns

| Column                   | Description                                                                                                                                                                           |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Name**                 | Registered classifier name. For runs that have not yet succeeded, the requested name from the training config is shown as a fallback.                                                 |
| **Version**              | Registered classifier version, with the same fallback behavior as Name.                                                                                                               |
| **Status**               | **Succeeded**, **Failed**, **Running**, **Pending**, **Scheduled**, **Cancelled**, or **Completed**. A completed job whose result reports a training error is surfaced as **Failed**. |
| **Accuracy**             | Overall accuracy from the training job's minimal metrics, formatted as a percentage.                                                                                                  |
| **F1 (macro)**           | Macro-averaged F1 score from the training job's minimal metrics, formatted as a percentage.                                                                                           |
| **Classes**              | Number of target classes. Hover to see the class labels.                                                                                                                              |
| **Runs**                 | Number of training runs for this name and version rolled up into the row.                                                                                                             |
| **Trained (Local time)** | End time of the most recent run (falls back to creation time for runs that have not yet ended), rendered in your local timezone.                                                      |
| **Job ID**               | Hidden by default; searchable so you can look up a specific training run.                                                                                                             |

### Filters and actions

| Element           | Description                                                                                                                                        |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Status filter** | Multi-select filter with **Succeeded**, **In progress** (pending, scheduled, or running), and **Failed**.                                          |
| **Search**        | Substring search across the **Name** and **Job ID** columns.                                                                                       |
| **Sort**          | Click the **Name**, **Status**, **Runs**, or **Trained** column headers to sort.                                                                   |
| **Refresh**       | Re-fetches classifier jobs for the current data plane. Overlapping refreshes are guarded so a stale response cannot replace current-plane results. |

<Note>
  The listing is scoped to the **selected data plane**. Switching data planes from the top-level selector automatically re-scopes the results — classifiers trained in another plane will not appear until you switch back to it.
</Note>

***

## Workflow summary

1. **Select dataset** → Choose the training dataset in the Dataset Selection module
2. **Select label column** → Pick the column containing classification labels
3. **Configure features** → Define input features and their processing types
4. **Configure algorithm** → Choose between logistic regression and random forest, tune hyperparameters, and set the test/train split
5. **Finalize** → Name and version the model, add tags, confirm the data plane, and review the configuration summary
6. **Train classifier** → Click **Train Classifier** and monitor progress from the Jobs page

***

## Related content

<CardGroup cols={2}>
  <Card title="LLM Studio" icon="brain-circuit" href="/reference/ui/llm-studio">
    Train and fine-tune LLM models using prepared datasets
  </Card>

  <Card title="Label Studio" icon="tag" href="/reference/ui/classifier-studio#entry-points">
    Build labeling projects whose **Train Model** action seeds Classifier Studio
  </Card>

  <Card title="AI enrichment with NQL" icon="wand-magic-sparkles" href="/cookbooks/nql/ai-enrichment">
    Use AI functions in NQL queries for data classification and enrichment
  </Card>

  <Card title="Model Inference" icon="brain" href="/concepts/model-inference/overview">
    Run inference using AI models within your data plane
  </Card>

  <Card title="Datasets" icon="database" href="/concepts/primitives/datasets">
    Understanding datasets in Narrative
  </Card>
</CardGroup>
