# データセットと分割

> Skynet がケースを読み取り、学習・検証・テストに分割する方法。

データセットはケースの表です。各行が 1 つのケースです。Skynet はケースに対してアーティファクトを実行し、各出力を採点し、そのスコアを使ってバージョンを比較します。このページでは、Skynet がケースをどのように読み取るか、列の役割が何をするか、ケースをどのように学習・検証・テストのセットに分割するかを説明します。

## データを読み込む

ウィザードの **入力** ステップには、2 つの選択肢があります。

- **CSV、JSON、Excel ファイルをアップロード**。Skynet は `.csv`、`.json`、`.xlsx`、`.xls` ファイルを受け付けます。
- **ライブラリから選択**。以前に保存したデータセットを使います。

1 つの実行で使えるケースは最大 200,000 件です。

保存済みのデータセットを管理するには、[データセット](/docs/ja/guides/datasets) をお読みください。

## 列の役割

**データの読み取り方** で、各列に役割を 1 つ割り当てます。

| 役割 | Skynet がその列で行うこと                                     |
| ---- | ------------------------------------------------------------- |
| 入力 | 値を `input` に入れます。実行コードがこれを受け取ります       |
| 出力 | 値を `expected` に入れます。メトリクスがこれを受け取ります    |
| スキップ | その列を使いません                                        |

各列には種類もあります: **テキスト** または **画像**。

出力列にできるのは 1 つの列だけです。2 つ目の列を出力に設定すると、1 つ目の列はスキップに変わります。

### コードが受け取るもの

Skynet は各行から 1 つのケースを作ります。

- `input` は dict です。入力列ごとに 1 つのキーを持ちます。
- `expected` は、キーを 1 つ（出力列の名前）持つ dict です。

次の表で、

| 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"]`。

## データモード

役割によって、実行のデータモードが決まります。

| モード | 条件                   | 動作                                                                                         |
| ------ | ---------------------- | -------------------------------------------------------------------------------------------- |
| ペア   | 1 つの列が出力         | すべての行が、入力と期待値を持つケースになります。少なくとも 2 行が必要です。               |
| 単一   | 出力の列がない         | 実行は最初の行の入力列だけを使います。期待値のない 1 つのケースになります。                 |

単一モードでは、Skynet はその 1 つのケースを学習、選択、報告に使います。評価用に取り分けるデータはありません。

## 分割

ペアモードでは、Skynet はケースを 3 つのセットに分割します。

| セット         | 用途                                                       |
| -------------- | ---------------------------------------------------------- |
| 学習           | エンジンはこれらのケースでバージョンを提案し、テストします。 |
| 検証 (Val)     | Skynet はこれらのケースで最良のバージョンを選びます。      |
| テスト         | Skynet はこれらのケースで最終スコアを報告します。          |

> [!NOTE]
> テストケースが、エンジン、提案器、コントラクトチェックに渡ることはありません。最終スコアは、オプティマイザーが見ていないケースで算出されます。

### 既定の分割

| ペアの数   | 学習 | 検証 | テスト |
| ---------- | ---- | ---- | ------ |
| 5 以上     | 70%  | 15%  | 15%    |
| 5 未満     | 85%  | 15%  | 0%     |

ペアが 5 つ未満の場合、Skynet はテストセットを残しません。

### Skynet がケースを数える方法

Skynet は、最大剰余法で割合をケースの整数件数に変換します。件数の合計は常にケースの数と一致します。割合が 0 より大きいセットには、少なくとも 1 件のケースが割り当てられます。割合が 0 のセットには、ケースは割り当てられません。

分割の前に、Skynet はケースをシャッフルします。シャッフルには実行のシードを使います。シードを指定しない場合、Skynet はケース、目的、アーティファクトからシードを作ります。そのため、同じ実行を再度送信すると、同じ分割になります。

### フォールバック

- ペアが 5 つ未満の場合、Skynet はテストセットを削除し、学習と検証の合計が 1 になるように調整します。
- 学習が空の場合、Skynet は検証ケースを学習として使います。
- 検証セットがない場合、Skynet は学習ケースで選択します。
- テストセットがない場合、Skynet は検証で報告します。検証セットもない場合は、学習で報告します。

> [!WARNING]
> Skynet が学習または検証で報告したスコアは、取り分けたデータでのスコアではありません。テストセットを得るには、少なくとも 5 つのペアを使ってください。

## 分割を変更する

分割のセクションには **推奨される分割** が表示されます。2 つのモードがあります。

1. **推奨を使用**: Skynet は上記の既定の分割を使います。
2. **手動選択**: **学習**、**検証**、**テスト** を自分で設定します。

手動選択では、各フィールドに 0〜1 の割合を 0.05 刻みで入力します。各フィールドには、割り当てられるケースの数が表示されます。3 つの割合の合計は 1 である必要があります。そうでない場合、ウィザードに「分割の合計は 1 にする必要があります。」と表示されます。

## コントラクトのサンプル

**メトリクスと実行** ステップのコントラクトチェックは、3 つのサンプルケースでコードを実行します。Skynet はこれらのサンプルを学習ケースと検証ケースからのみ取り出し、テストからは決して取り出しません。

## 関連ページ

- [データセット](/docs/ja/guides/datasets)
- [メトリクスとスコアラー](/docs/ja/concepts/scorers)
- [実行を開始する](/docs/ja/guides/submit)
- [制限](/docs/ja/limits)

---

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