# Набори даних і розбиття

> Як Skynet читає ваші приклади й ділить їх на навчальну, валідаційну та тестову частини.

Набір даних — це таблиця кейсів. Кожен рядок — це один кейс. Skynet виконує ваш артефакт на кейсах, оцінює кожен результат і використовує оцінки, щоб порівнювати версії. Ця сторінка пояснює, як Skynet читає кейси, що роблять ролі стовпців і як він ділить кейси на навчальну, валідаційну й тестову вибірки.

## Завантаження даних

На кроці майстра **Вхідні дані** є два варіанти:

- **Завантажте файл CSV, JSON або Excel**. Skynet приймає файли `.csv`, `.json`, `.xlsx` і `.xls`.
- **Вибрати з бібліотеки**. Використайте набір даних, який ви зберегли раніше.

Запуск може містити щонайбільше 200 000 кейсів.

Як керувати збереженими наборами даних, описано в розділі [Підготовка набору даних](/docs/uk/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 ділить кейси на три вибірки:

| Вибірка                 | Для чого вона                                                    |
| ----------------------- | ---------------------------------------------------------------- |
| Навчальна (train)       | Рушій пропонує й перевіряє версії на цих кейсах.                 |
| Валідаційна (val)       | Skynet обирає найкращу версію на цих кейсах.                     |
| Тестова (test)          | Skynet повідомляє підсумкову оцінку на цих кейсах.               |

> [!NOTE]
> Тестові кейси ніколи не потрапляють до рушія, агента-пропонента чи перевірки контракту. Підсумкова оцінка обчислюється на кейсах, яких оптимізатор не бачив.

### Типове розбиття

| Кількість пар   | Навчальна | Валідаційна | Тестова |
| --------------- | --------- | ----------- | ------- |
| 5 або більше    | 70%       | 15%         | 15%     |
| Менше ніж 5     | 85%       | 15%         | 0%      |

Якщо пар менше ніж 5, Skynet не виділяє тестову вибірку.

### Як Skynet рахує кейси

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

Перед розбиттям Skynet перемішує кейси. Перемішування використовує seed запуску. Якщо ви не задали seed, Skynet створює його з кейсів, мети й артефакту. Тож якщо ви надішлете той самий запуск ще раз, ви отримаєте те саме розбиття.

### Запасні варіанти

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

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

## Зміна розбиття

У розділі розбиття відображається **Рекомендоване розбиття**. Воно має два режими:

1. **Використати рекомендацію**: Skynet використовує типове розбиття, описане вище.
2. **Ручний вибір**: ви самі задаєте **Навчання**, **Валідація** і **Тест**.

У ручному режимі кожне поле приймає частку від 0 до 1 з кроком 0.05. Кожне поле показує кількість кейсів, які воно отримує. Сума трьох часток має дорівнювати 1. Якщо це не так, майстер показує «Сума часток розподілу має дорівнювати 1.»

## Приклади для перевірки контракту

Перевірка контракту на кроці **Метрика й запуск** виконує ваш код на 3 прикладах кейсів. Skynet бере ці приклади лише з навчальних і валідаційних кейсів, ніколи з тестових.

## Пов’язані сторінки

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

---

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