# Наборы данных и разбиение

> Как Skynet читает ваши примеры и делит их на обучающую, валидационную и тестовую выборки.

Набор данных — это таблица примеров. Каждая строка — один пример. Skynet выполняет ваш артефакт на примерах, оценивает каждый выход и по оценкам сравнивает версии. На этой странице объясняется, как Skynet читает примеры, что делают роли столбцов и как примеры делятся на обучающую, валидационную и тестовую выборки.

## Загрузка данных

На шаге мастера **Входные данные** есть два варианта:

- **Загрузите файл CSV, JSON или Excel**. Skynet принимает файлы `.csv`, `.json`, `.xlsx` и `.xls`.
- **Выбрать из библиотеки**. Используйте набор данных, который вы сохранили ранее.

В запуске может быть не больше 200 000 примеров.

Как управлять сохранёнными наборами данных, описано в разделе [Подготовка набора данных](/docs/ru/guides/datasets).

## Роли столбцов

В разделе **Как читать данные** назначьте каждому столбцу одну роль:

| Роль       | Что Skynet делает со столбцом                                     |
| ---------- | ----------------------------------------------------------------- |
| Вход       | Помещает значение в `input`, который получает ваш код запуска     |
| Выход      | Помещает значение в `expected`, который получает ваша метрика     |
| Пропустить | Не использует столбец                                             |

У каждого столбца также есть тип: **Текст** или **Изображение**.

Роль «Выход» может быть только у одного столбца. Если назначить роль «Выход» второму столбцу, первый переключится на «Пропустить».

### Что получает ваш код

Для каждой строки Skynet формирует один пример:

- `input` — словарь. В нём по одному ключу на каждый столбец с ролью «Вход».
- `expected` — словарь с одним ключом: именем столбца с ролью «Выход».

Для такой таблицы:

| message             | label   | id  |
| ------------------- | ------- | --- |
| I was charged twice | billing | 17  |

с ролями `message` = Вход, `label` = Выход и `id` = Пропустить ваш код получит:

```python tab="input"
{"message": "I was charged twice"}
```

```python tab="expected"
{"label": "billing"}
```

> [!TIP]
> В метрике читайте ожидаемое значение по имени столбца, например `expected["label"]`.

## Режимы данных

Роли задают режим данных запуска:

| Режим     | Когда                       | Что происходит                                                                                          |
| --------- | --------------------------- | ------------------------------------------------------------------------------------------------------- |
| Пары      | Один столбец имеет роль «Выход» | Каждая строка — пример с входом и ожидаемым значением. Нужно не меньше 2 строк.                     |
| Одиночный | Нет столбца с ролью «Выход» | Запуск использует только столбцы «Вход» первой строки. Это один пример без ожидаемого значения.        |

В одиночном режиме Skynet использует единственный пример для обучения, отбора и отчёта. Ничего не откладывается.

## Разбиение

В режиме пар Skynet делит примеры на три выборки:

| Выборка                   | Для чего она                                                  |
| ------------------------- | ------------------------------------------------------------- |
| Обучающая                 | Движок предлагает и проверяет версии на этих примерах.        |
| Валидационная             | Skynet выбирает лучшую версию на этих примерах.               |
| Тестовая                  | Skynet сообщает итоговую оценку на этих примерах.             |

> [!NOTE]
> Тестовые примеры никогда не попадают к движку, генератору предложений или в проверку контракта. Итоговая оценка считается на примерах, которые оптимизатор не видел.

### Разбиение по умолчанию

| Число пар     | Обучающая | Валидационная | Тестовая |
| ------------- | --------- | ------------- | -------- |
| 5 или больше  | 70%       | 15%           | 15%      |
| Меньше 5      | 85%       | 15%           | 0%       |

Если пар меньше 5, Skynet не выделяет тестовую выборку.

### Как Skynet считает примеры

Skynet переводит доли в целое число примеров методом наибольших остатков. Сумма всегда равна числу примеров. Выборка с долей больше нуля получает хотя бы один пример. Выборка с нулевой долей не получает примеров.

Перед разбиением Skynet перемешивает примеры. Перемешивание использует сид запуска. Если сид не задан, Skynet вычисляет его по примерам, цели и артефакту. Поэтому при повторной отправке того же запуска вы получите то же разбиение.

### Запасные варианты

- Если пар меньше 5, Skynet убирает тестовую выборку и масштабирует обучающую и валидационную так, чтобы в сумме они давали 1.
- Если обучающая выборка пуста, Skynet использует валидационные примеры как обучающие.
- Если валидационной выборки нет, Skynet выбирает версию на обучающих примерах.
- Если тестовой выборки нет, Skynet сообщает оценку на валидационной. Если нет и валидационной, оценка сообщается на обучающей.

> [!WARNING]
> Оценка, которую Skynet сообщает на обучающей или валидационной выборке, не является оценкой на отложенных данных. Используйте не меньше 5 пар, чтобы получить тестовую выборку.

## Изменение разбиения

В разделе разбиения показано **Рекомендованное разбиение**. У него два режима:

1. **Использовать рекомендацию**: Skynet использует разбиение по умолчанию, описанное выше.
2. **Ручной выбор**: вы сами задаёте **Обучающая**, **Валидационная** и **Тестовая**.

В ручном режиме каждое поле принимает долю от 0 до 1 с шагом 0.05. Рядом с каждым полем показано, сколько примеров оно получает. Сумма трёх долей должна быть равна 1. Иначе мастер показывает сообщение «Сумма долей разбиения должна быть равна 1.»

## Примеры для проверки контракта

Проверка контракта на шаге **Метрика и запуск** запускает ваш код на 3 примерах. Skynet берёт их только из обучающей и валидационной выборок, никогда из тестовой.

## Связанные страницы

- [Подготовка набора данных](/docs/ru/guides/datasets)
- [Метрики и оценщики](/docs/ru/concepts/scorers)
- [Запуск через мастер](/docs/ru/guides/submit)
- [Лимиты](/docs/ru/limits)

---

Source: https://staging.skynetml.com/docs/ru/concepts/datasets
