# カスタムタスクの作成

> カスタムタスクの作成 - カスタムタスクを作成して適用し、結果として生成されるカスタムブループリントを操作する方法を説明します。

This Markdown file sits beside the HTML page at the same path (with a `.md` suffix). It summarizes the topic and lists links for tools and LLM context.

Companion generated at `2026-07-15T05:55:44.962932+00:00` (UTC).

## Primary page

- [カスタムタスクの作成](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md): Full documentation for this topic (Markdown sidecar).

## Sections on this page

- [カスタムタスクの理解](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#understand-custom-tasks): In-page section heading.
- [カスタムタスクのコンポーネント](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#components-of-a-custom-task): In-page section heading.
- [タスクのタイプ](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#task-types): In-page section heading.
- [カスタムタスクの使用](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#use-a-custom-task): In-page section heading.
- [タスクコンテンツの理解](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#understand-task-content): In-page section heading.
- [custom.py/custom.R](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#custompy-customr): In-page section heading.
- [model-metadata.yaml](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#model-metadatayaml): In-page section heading.
- [requirements.txt](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#requirementstxt): In-page section heading.
- [タスクコードの定義](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#define-task-code): In-page section heading.
- [init()](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#init): In-page section heading.
- [init()例](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#init-model): In-page section heading.
- [init()入力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#init-input): In-page section heading.
- [init()出力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#init-output): In-page section heading.
- [fit()](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#fit): In-page section heading.
- [fit()例](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#fit-examples): In-page section heading.
- [fit()の機能](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#how-fit-works): In-page section heading.
- [fit()の使用方法](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#how-to-use-fit): In-page section heading.
- [fit()入力パラメーター](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#fit-input-parameters): In-page section heading.
- [fit()出力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#fit-output): In-page section heading.
- [load_model()](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#load-model): In-page section heading.
- [load_model()例](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#load-model-example): In-page section heading.
- [load_model()入力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#load-model-input): In-page section heading.
- [load_model()出力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#load-model-output): In-page section heading.
- [predict()](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#predict): In-page section heading.
- [predict()例](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#predict-examples): In-page section heading.
- [predict()入力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#predict-input): In-page section heading.
- [predict()出力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#predict-output): In-page section heading.
- [predict_proba()](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#predict-proba): In-page section heading.
- [predict_proba()例](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#predict-proba-examples): In-page section heading.
- [predict_proba()入力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#predict-proba-input): In-page section heading.
- [predict_proba()出力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#predict-proba-output): In-page section heading.
- [transform()](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#transform): In-page section heading.
- [transform()例](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#transform-example): In-page section heading.
- [transform()入力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#transform-input): In-page section heading.
- [transform()出力](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#transform-output): In-page section heading.
- [タスクメタデータを定義](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#define-task-metadata): In-page section heading.
- [タスク環境を定義](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#define-the-task-environment): In-page section heading.
- [タスクをローカルでテスト](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#test-the-task-locally): In-page section heading.
- [前提条件](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#prerequisites): In-page section heading.
- [DataRobotとの互換性をテスト](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#test-compatibility-with-datarobot): In-page section heading.
- [タスクロジックをテスト](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#test-task-logic): In-page section heading.
- [タスクをアップロード](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#upload-the-task): In-page section heading.
- [コードの更新](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#updating-code): In-page section heading.
- [ブループリントを作成してトレーニング](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#compose-and-train-a-blueprint): In-page section heading.
- [シングルタスクのブループリント](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#single-task-blueprint): In-page section heading.
- [マルチタスクブループリント](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#multitask-blueprint): In-page section heading.
- [インサイトを取得](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#get-insights): In-page section heading.
- [ビルトインインサイト](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#built-in-insights): In-page section heading.
- [カスタムインサイト](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#custom-insights): In-page section heading.
- [デプロイ](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#deploy): In-page section heading.
- [トレーニングアーティファクトのダウンロード](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#download-training-artifacts): In-page section heading.
- [暗黙の共有](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#implicit-sharing): In-page section heading.

## Documentation content

DataRobotでは数百個の組み込みタスクが提供されますが、現在、初期状態でサポートされていない事前処理またはモデリング方法が必要です。 このギャップを埋めるには、欠損メソッドが含まれているカスタムタスクを持ち込み、DataRobot内のブループリントにプラグインして、DataRobot生成ブループリントと同じ方法でトレーニング、評価、デプロイできます。 （プロセスがどのように機能するかを [こちら](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-overview.html.md#how-it-works) から確認できます。）

以下のセクションでは、カスタムタスクの作成と適用、および結果として生成されるカスタムブループリントの操作について説明します。

## カスタムタスクの理解

以下の内容は、タスクとは何か、およびその使い方の概要を理解するのに役立ちます。 また、タスクコンテンツの概要を把握できます。

### カスタムタスクのコンポーネント

タスクを持ち込み使用するには、2つのコンポーネント（タスクコンテンツとタスクのコンテンツが実行するコンテナ環境）を定義する必要があります。

- （ここに記載する）タスクコンテンツは、PythonまたはRで書かれたコードです。 DataRobotで正しく解析するには、コードは特定の条件に従う必要があります。 （オプション）アップロードしてタスクのコードとともに使用するファイルを追加できます（たとえば、カスタムタスクにテキスト前処理が含まれている場合、別のファイルに辞書を追加したい場合があります）。
- コンテナ環境は、Dockerファイルと追加のファイルを使用して定義されます。この機能により、DataRobotはタスクが実行されるイメージを構築できます。 さまざまなビルトイン環境があります。ユーザーはLinuxパッケージをインストールする必要がある場合にのみ独自の環境を構築する必要があります。

高レベルで、カスタムタスクを定義するステップには以下が含まれます。

1. ローカル（コンピューター）でタスクコンテンツを定義してテストします。
2. （オプション）タスクを実行するコンテナ環境を作成します。
3. タスクコンテンツと環境（該当する場合）をDataRobotにアップロードします。

### タスクのタイプ

タスクを作成する際、プロジェクトに最も適切なものを選択する必要があります。 DataRobotは、sklearnと同様の2種類のタスク（推定器と変換）を活用します。 [これらのタスクの機能](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-blueprint-edit.html.md#blueprint-task-types) についてはブループリント変更ページを参照してください。

### カスタムタスクの使用

タスクがアップロードされたら、次のことができます。

- そのカスタムタスクを含むブループリントを作成してトレーニングします。 その後、プロジェクトのリーダーボードにブループリントが表示されます。数回クリックするだけで、他のモデルと比較し、モデルに依存しないインサイトにアクセスし、結果となるモデルをデプロイ、監視、管理できます。
- 環境の共有と同じように組織内で明示的にタスクを共有します。 将来のプロジェクトでタスクを再使用する場合、これは特に有用です。 さらに、受信者はタスクのコードを読み取り、理解する必要がないため、より少ない技術者で適用できます。 プロジェクトまたはブループリントが共有される場合、カスタムタスクも暗黙の共有となります。

### タスクコンテンツの理解

カスタムタスクを定義するには、以下のテーブルにリストされているファイルを含むローカルフォルダーを作成します（詳細については表を参照してください）。

> [!TIP] ヒント
> これらのファイルの例は、GitHubの [DataRobotタスクテンプレートリポジトリ](https://github.com/datarobot/datarobot-user-models/tree/master/task_templates) で入手できます。

| ファイル | 説明 | 必須 |
| --- | --- | --- |
| custom.py or custom.R | DataRobotがトレーニングと予測で実行するタスクコード。 | はい |
| model-metadata.yaml | 入力/出力データ要件を含むタスクのメタデータを説明するファイル。 | カスタムタスクが非数値データを出力する場合のカスタム変換タスクに必要です。 提供しない場合、デフォルトスキーマが使用されます。 |
| requirements.txt | 基本環境に追加するPythonまたはRパッケージのリスト。 | いいえ |
| 追加ファイル | タスクで使用するその他のファイル（たとえば、custom.py内で使用するヘルパー関数を定義するファイル）。 | いいえ |

#### custom.py/custom.R

`custom.py` / `custom.R` ファイルはカスタムタスクを定義します。 DataRobotがコードを正しく実行し、他の機能と統合できるようにするフック（関数）が含まれている必要があります。

#### model-metadata.yaml

カスタムタスクでは、ブループリントを構築してトレーニングする際にタスクを検証するために使用できるスキーマを供給できます。 スキーマを使用してカスタムタスクがサポートするか出力するかを指定できます。

- 特定のデータ型
- 欠損値
- スパースデータ
- 特定の列数

#### requirements.txt

`requirements.txt` ファイルを使用して、カスタムタスクが使用しているが基本環境には含まれていないPythonまたはRパッケージを事前にプレインストールします。

**Pythonの例:**
Pythonでは、バージョン（行に1つのパッケージ）でパッケージのリストを提供します。 例：

```
numpy>=1.16.0, <1.19.0
pandas==1.1.0
scikit-learn==0.23.1
lightgbm==3.0.0
gensim==3.8.3
sagemaker-scikit-learn-extension==1.1.0 
```

**Rの例:**
Rでは、バージョン（行に1つのパッケージ）でパッケージのリストを提供します。 例：

```
dplyr
stats 
```


## タスクコードの定義

DataRobotのフレームワークを使用してカスタムタスクを定義するには、コードが特定の条件を満たす必要があります。

- custom.pyまたはcustom.Rファイルがある必要があります。
- custom.py/custom.Rファイルに、fit()、score()、transform()などのメソッドが含まれている必要があります。フックは、タスクがどのようにトレーニングされているか、およびどのように新しいデータをスコアリングするかを定義します。 これらは、インターフェイスクラスまたはフックとして指定されます。 DataRobotは各フックを自動的に呼び出し、プロジェクトおよびブループリントの設定に基づいてパラメーターを渡します。 しかし、各メソッド内で実行するロジックを定義できる柔軟性があります。

中央値を使用して欠損値補完を実行するタスクの [GitHub上の例](https://github.com/datarobot/datarobot-user-models/blob/master/task_templates/1_transforms/1_python_missing_values/custom.py) を表示します。

> [!NOTE] 備考
> GitHubにログインしてからこれらのGitHubリソースにアクセスしてください。

次の表にフックがリストされます。 ほとんどのタスクでは `fit()` メソッドのみを必要とします。 分類タスク（二値または多クラス）には `predict_proba()` 、連続値タスクには `predict()` 、変換タスクには `transform()` が必要です。 その他の関数は省略できます。

| 方法 | 目的 |
| --- | --- |
| init() | Rライブラリとファイルをロードします（Rのみ。Pythonでは省略できます）。 |
| fit() | 推定器/変換タスクをトレーニングし、それをアーティファクトファイルに保存します。 |
| load_model() | アーティファクトファイルからトレーニングされた推定器/変換をロードします。 |
| predictまたはpredict_proba（フックの場合はscore()を使用） | 予測を生成するカスタム推定器で使用するロジックを定義します。 |
| transform() | 変換されたデータを生成するカスタム変換で使用するロジックを定義します。 |

以下のスキーマは、カスタムタスクでフックがどのように連携するかを示しています。 トレーニング中は必ず `fit()` が必要ですが、場合によって一部のフックは省略できます。

次のセクションでは、例とともに各フックについて説明します。

### init()

`init` フックを使用すると、タスクは他のフックで使用するためのライブラリと追加ファイルをロードできます。 これはRを使用する場合に必要ですが、Pythonの場合は通常スキップできます。

#### init() 例

以下に、 `init()` を使用した簡単なコードスニペットを紹介します。より完全な例については [こちら](https://github.com/datarobot/datarobot-user-models/blob/master/task_templates/2_estimators/5_r_binary_classification/custom.R) を参照してください。

**Rの例:**
```
init <- function(code_dir) {
   library(tidyverse)
   library(caret)
   library(recipes)
   library(gbm)
   source(file.path(code_dir, 'create_pipeline.R'))
} 
```


#### init() 入力

| 入力パラメーター | 説明 |
| --- | --- |
| code_dir | コードが保存されるフォルダーへのリンク。 |

#### init() 出力

`init()` フックは何も返しません。

### fit()

`fit()` はカスタムタスクに実装する必要があります。

#### fit() 例

以下に、 `fit()` を使用した簡単なコードスニペットを紹介します。より完全な例については [こちら](https://github.com/datarobot/datarobot-user-models/blob/master/task_templates/2_estimators/4_python_binary_classification/custom.py) を参照してください。

**Pythonの例:**
以下は、Pythonでロジスティック回帰を実装した `fit()` の例です。

```
def fit(X, y, output_dir, class_order, row_weights):
 estimator = LogisticRegression()
 estimator.fit(X, y)

 output_dir_path = Path(output_dir)
 if output_dir_path.exists() and output_dir_path.is_dir():
     with open("{}/artifact.pkl".format(output_dir), "wb") as fp:
         pickle.dump(estimator, fp) 
```

**Rの例:**
以下は、Rでの連続値モデルの作成例です。

```
fit <- function(X, y, output_dir, class_order=NULL, row_weights=NULL){
   model <- create_pipeline(X, y, 'regression')

  model_path <- file.path(output_dir, 'artifact.rds')
  saveRDS(model, file = model_path)
} 
```


#### fit()の機能

カスタム推定器/変換がトレーニングされている場合、DataRobotは `fit()` を実行します。 それは、トレーニングされたsklearnモデルなどのトレーニング済みのオブジェクトが保存されるアーティファクトファイル（ `.pkl` ファイルなど）を作成します。 トレーニングされたオブジェクトはアーティファクトからロードされ、データをスコアリングする際に、 `score()` と `transform()` にパラメーターとして渡されます。

#### fit()の使用方法

オブジェクトを使用して、トレーニングし、 `.pkl` 関数内のアーティファクトファイル（例： `fit()` ）にトレーニング済みオブジェクトを入力する方法。 トレーニング済みのオブジェクトに新しいデータをスコアリングする際に使用する情報またはロジックが含まれている必要があります。 トレーニング済みオブジェクトの例：

- 適合する sklearn推定器 。
- 中央値を使用して欠損値を補完するための、トレーニングデータの中央値。 新しいデータをスコアリングすると、それによってが欠損値が置き換えられます。

DataRobotはプロジェクト設定に基づいてトレーニング/検定/ホールドアウトのパーティションが自動的に使用します。

#### fit() 入力パラメーター

`fit()` タスクは以下のパラメーターを取ります。

| 入力パラメーター | 説明 |
| --- | --- |
| X | トレーニング中にタスクが受信するデータを含むPandasのDataFrame（Python）またはR data.frame（R）。 |
| y | プロジェクトのターゲットデータを含むPandasシリーズ（Python）またはRベクトル/ファクター（R）。 |
| output_dir | 出力フォルダーへのパス。 トレーニング済みオブジェクトを含むアーティファクトはこのフォルダーに保存する必要があります。 そこにその他のファイルも保存できます。ブループリントがトレーニングされると、アーティファクトのダウンロードを使用してUIを介してモデルfit内のフォルダーに追加されたすべてのファイルがダウンロード可能になります。 |
| class_order | 二値分類推定器にのみ渡されます。 クラス名を含むリスト。 最初のエントリはDataRobotのプロジェクト内で負のクラスとみなされます。2番目のクラスは正とみなされます。 |
| row_weights | 推定器タスクでのみ渡されます。 プロジェクトが加重またはスマートダウンサンプリングを使用する場合に渡される加重のリスト。 |
| **kwargs | 現在使用されていませんが、将来の互換性のために維持されます。 |

#### fit() 出力

`fit()` 出力に関する備考：

- fit()は何も返しませんが、トレーニング済みのオブジェクトを含むアーティファクトを作成します。
- トレーニング済みのオブジェクトが必要ない場合は（たとえば、ログ変換を実行する変換タスク）、アーティファクトファイルに数または文字列を保存することにより、「人工」アーティファクトを作成します。 それ以外の場合（fit()がアーティファクトを出力しない場合）、load_modelを使用する必要があり、タスクがより複雑になります。
- アーティファクトはoutput_dirフォルダーに保存する必要があります。
- アーティファクトはどの形式でも使用できます。
- 一部の形式はネイティブでサポートされています。output_dirにネイティブでサポートされている形式で1つのアーティファクトファイルが含まれている場合、DataRobotはデータをスコアリング/変換する際、そのアーティファクトを自動的に選択します。 この場合、カスタムload_modelフックを記述する必要はありません。
- ネイティブでサポートされている形式は以下のとおりです。

### load_model()

`load_model()` フックは、アーティファクトから1つまたは複数のトレーニング済みのオブジェクトをロードします。 トレーニング済みのオブジェクトがサポートされていない形式を使用するアーティファクトに保存されている場合、または複数のアーティファクトが使用される場合にのみ必要です。 サポートされている形式の1つに1つのアーティファクトが存在する場合、 `load_model()` は必要ありません。

- Python： .pkl 、 .pth 、 .h5 、 .joblib
- Java: .mojo
- R： .rds

#### load_model() 例

以下に、 `load_model()` を使用した簡単なコードスニペットを紹介します。より完全な例については [こちら](https://github.com/datarobot/datarobot-user-models/blob/master/task_templates/3_pipelines/14_python3_keras_joblib/custom.py) を参照してください。

**Pythonの例:**
以下の例では、 `deserialize_artifact` をアーティファクトの解析に使用する実際の関数に置き換えます。

```
def load_model(code_dir: str):
    return deserialize_artifact(code_dir) 
```

**Rの例:**
```
  load_model <- function(code_dir) {
     return(deserialize_artifact(code_dir))
  } 
```


#### load_model() 入力

| 入力パラメーター | 説明 |
| --- | --- |
| code_dir | アーティファクトが保存されるフォルダーへのリンク。 |

#### load_model() 出力

`load_model()` フックは、トレーニング済みのオブジェクト（あらゆる型）を返します。

### predict()

`predict()` メソッドは、DataRobotが `fit()` からのトレーニングされたオブジェクトを使用して、新しいデータをスコアリングする方法を定義します。 DataRobotでは、タスクがブループリント内のスコアリングに使用される場合に、この方法を実行します。 この方法は、連続値タスクと異常タスクにのみ使用できます。 Rの場合は、代わりに以下の例に概説されている `score()` フックを使用してください。

#### predict() 例

以下に、 `predict()` を使用した簡単なコードスニペットを紹介します。より完全な例については [こちら](https://github.com/datarobot/datarobot-user-models/blob/master/task_templates/2_estimators/1_python_regression/custom.py#L45) を参照してください。

**Pythonの例:**
連続値または異常推定器のPythonの例：

```
def predict(self, data: pd.DataFrame, **kwargs):
    return pd.DataFrame(data=self.estimator.predict(data), columns=["Predictions"]) 
```

**Rの例:**
連続値または異常推定器のRの例：

```
score <- function(data, model, ...) {
  return(data.frame(Predictions = predict(model, newdata=data, type = response")))
} 
```

二値推定器のRの例：

```
score <- function(data, model, ...) {
  scores <- predict(model, data, type = "response")
  scores_df <- data.frame('c1' = scores, 'c2' = 1- scores)
  names(scores_df) <- c("class1", "class2")
  return(scores_df)
} 
```


#### predict() 入力

| 入力パラメーター | 説明 |
| --- | --- |
| data | カスタムタスクがスコアリングするデータを含むPandasのDataFrame（Python）またはR data.frame（R）。 |
| **kwargs | 現在使用されていませんが、将来の互換性のために維持されます。 （Rの場合、score(data, model, …)を使用します） |

#### predict() 出力

`predict()` 出力に関する備考：

- PandasのDataFrame（またはR data.frame/tibble)）を返します。
- 連続値または異常検知プロジェクトの場合、出力に予測という単一の数値列が必要です。

### predict_proba()

`predict_proba()` メソッドは、DataRobotが `fit()` からのトレーニングされたオブジェクトを使用して、新しいデータをスコアリングする方法を定義します。 この方法は、二値タスクと多クラスタスクにのみ使用できます。 DataRobotでは、タスクがブループリント内のスコアリングに使用される場合に、この方法を実行します。 Rの場合は、代わりに以下の例で使用されている `score()` フックを使用してください。

#### predict_proba()例

以下に、 `predict_proba()` を使用した簡単なコードスニペットを紹介します。より完全な例については [こちら](https://github.com/datarobot/datarobot-user-models/blob/master/task_templates/2_estimators/4_python_binary_classification/custom.py#L40) を参照してください。

**Pythonの例:**
二値または多クラス推定器のPythonの例：

```
def predict_proba(self, data: pd.DataFrame, **kwargs) -> pd.DataFrame:
    return pd.DataFrame(
        data=self.estimator.predict_proba(data), columns=self.estimator.classes_
    ) 
```

**Rの例:**
連続値または異常推定器のRの例：

```
score <- function(data, model, ...) {
  return(data.frame(Predictions = predict(model, newdata=data, type = response")))
} 
```

二値推定器のRの例：

```
score <- function(data, model, ...) {
  scores <- predict(model, data, type = "response")
  scores_df <- data.frame('c1' = scores, 'c2' = 1- scores)
  names(scores_df) <- c("class1", "class2")
  return(scores_df)
} 
```


#### predict_proba()入力

| 入力パラメーター | 説明 |
| --- | --- |
| data | カスタムタスクがスコアリングするデータを含むPandasのDataFrame（Python）またはR data.frame（R）。 |
| **kwargs | 現在使用されていませんが、将来の互換性のために維持されます。 （Rの場合、score(data, model, …)を使用します） |

#### predict_proba()出力

`predict_proba()` 出力に関する備考：

- PandasのDataFrame（またはR data.frame/tibble）を返します。
- 二値または多クラスプロジェクトについては、出力にはクラスごとに1つの列があり、クラス名を列名として使用する必要があります。 各セルには各クラスの確率が含まれている必要があります。また、各行の合計が1.0になる必要があります。

### transform()

`transform()` フックはカスタム変換の出力を定義し、変換されたデータを返します。 推定器タスクにこの方法を使用しないでください。

#### transform() 例

以下に、 `transform()` を使用した簡単なコードスニペットを紹介します。より完全な例については [こちら](https://github.com/datarobot/datarobot-user-models/blob/master/task_templates/1_transforms/1_python_missing_values/custom.py) を参照してください。

**Pythonの例:**
変換を作成し、データフレームに出力するPythonの例：

```
def transform(X: pd.DataFrame, transformer) -> pd.DataFrame:
  return transformer.transform(X) 
```

**Rの例:**
```
transform <- function(X, transformer, ...){
   X_median <- transformer

   for (i in 1:ncol(X)) {
   X[is.na(X[,i]), i] <- X_median[i]
   }
     X
} 
```


#### transform() 入力

| 入力パラメーター | 説明 |
| --- | --- |
| X | カスタムタスクが変換する必要があるデータを含むPandasのDataFrame（Python）またはR data.frame（R）。 |
| transformer | アーティファクトからロードされたトレーニング済みのオブジェクト（通常、トレーニング済みの変換機能）。 |
| **kwargs | 現在使用されていませんが、将来の互換性のために維持されます。 |

#### transform() 出力

`transform()` フックは、データが変換されたPandasのDataFrameまたはR data.frameを返します。

## タスクメタデータを定義

メタデータを定義するには、 `model-metadata.yaml` ファイルを作成して、タスクまたはモデルのディレクトリのトップレベルに置きます。 ファイルはカスタムタスクに関する追加情報を指定し、 [こちら](https://docs.datarobot.com/ja/docs/reference/pred-ai-ref/cml-ref/cml-validation.html.md) に詳細が記述されます。

## タスク環境を定義

カスタムタスクが実行される環境を定義するための複数のオプションがあります。 以下を実行することが可能です。

- さまざまなビルトイン環境から選択します。
- ビルトイン環境でPythonまたはRパッケージが欠損している場合、タスクのrequirements.txtファイルで指定して、不足しているパッケージを追加します。 提供された場合、requirements.txtをタスクコンテンツ内のcustom.pyまたはcustom.Rと共にアップロードする必要があります。 タスクコンテンツにサブフォルダーが含まれている場合、上部フォルダーに置く必要があります。
- Linuxパッケージをインストールする必要がある場合、独自の環境を構築できます。

## タスクをローカルでテスト

DataRobotにアップロードする前にタスクをローカルでテストする要件はありませんが、強く推奨されます。 機能を事前に検証すると、将来、多くの時間とデバッグを節約できます。

カスタムタスクを正しく行うには、以下の基本要件を満たす必要があります。

- タスクはDataRobot要件と互換性があり、ブループリントの構築に使用できます。
- タスクは意図したとおりに機能します（たとえば、変換が必要な出力を生成します）。

コマンドラインで `drum fit` を使用して、タスクを迅速に実行してテストします。 タスクがDataRobot要件を満たしていることを自動的に検証します。 タスクが意図したとおりに機能するかをテストするには、ターミナルまたはファイルへの出力の印刷などその他の一般的なデバッグ方法と `drum fit` を組み合わせます。

### 前提条件

タスクをテストするには：

- タスクのコンテンツを単一のフォルダーに置きます。
- DRUMをインストールします。 DRUMがインストールされたPython環境がアクティブ化されていることを確認します。 できれば、Docker Desktopもインストールしてください。
- タスクをテストする際に使用できるテストデータでCSVファイルを作成します。
- コマンドラインを使用してテストを実行するため、ターミナルウィンドウを開きます。

### DataRobotとの互換性をテスト

以下は、DataRobotブループリントと互換性があるかどうかをテストするために `drum fit` を使用する例です。 `drum fit` の使用について詳細を確認するには、コマンドラインに `drum fit --help` を入力します。

カスタムタスク（推定器または変換）については、ターミナルで以下の基本コマンドを使用します。 `< >` ブラケット内のプレースホルダー名を実際のパスと名前に置き換えます。 以下のオプションがTARGET_TYPEで使用可能であることに注意してください。

- 推定器の場合：二値、多クラス、連続値、異常
- 変換の場合：変換

```
drum fit --code-dir <folder_with_task_content> --input <test_data.csv>  --target-type <TARGET_TYPE> --target <target_column_name> --docker <folder_with_dockerfile> --verbose 
```

トレーニング中に使用されない場合、 `target` パラメーターを省略してください（異常検知推定器または一部の変換タスクの場合など）。 その場合、コマンドが以下のように見える場合があります。

```
drum fit --code-dir <folder_with_task_content> --input <test_data.csv>  --target-type anomaly --docker <folder_with_dockerfile> --verbose 
```

### タスクロジックをテスト

タスクが意図したとおりに機能することを確認するには、タスクのコードへの"print"ステートメントの追加などのその他のデバッグ方法と `drum fit` を組み合わせます。

- いずれかのフックに print(msg) を追加します。 drum fit を使用してタスクを実行する際、DataRobotはターミナル内のメッセージを印刷します。
- 以降の調査のため中間または最後の結果をローカルファイルに書き込みます。それは、カスタムタスクが期待通りに機能することを確認するために役立つ可能性があります。

## タスクをアップロード

タスクのコンテンツが定義された後、DataRobotにアップロードして、ブループリントを構築してトレーニングするために使用します。 DataRobotにカスタムタスクをアップロードするには、3つのステップが必要です。

1. モデルレジストリ で新しいタスクを作成します。
2. タスクを実行するコンテナ環境を選択します。
3. タスクコンテンツをアップロード します。

アップロードされたら、ブループリントエディターで使用できるタスクのリストにカスタムタスクが表示されます。

### コードの更新

更新されたコードを常にアップロードできます。 競合を回避するために、DataRobotはコードがアップロードされるたびに新しいバージョンを作成します。 ブループリントを作成する際、ブループリントで使用する特定のタスクバージョンを選択できます。

## ブループリントを作成してトレーニング

カスタムタスクが作成されると、タスクを使用するブループリントを構成するための2つのオプションがあります。

- 作成したタスクのみ（推定器のみ）を使用して、シングルタスクのブループリントを構成します。
- ブループリントエディター を使用してマルチタスクブループリントを作成します。

### シングルタスクのブループリント

カスタム推定器タスクに必要なすべてのトレーニングコードが含まれている場合、シングルタスクのブループリントを構築してトレーニングできます。 その場合は、 モデルレジストリ > カスタムモデルワークショップ > タスク に移動します。 タスクを選択し、 新しいモデルのトレーニング をクリックします。

完了したら、プロジェクトのリーダーボードに選択されたタスクを含むブループリントが表示されます。

### マルチタスクブループリント

複数のタスクを含むブループリントを構成するには、ブループリントエディターを使用します。 以下は、ステップのサマリーです。完全な詳細については、 [ドキュメント](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-blueprint-edit.html.md) を参照してください。

1. AIカタログのプロジェクトリーダーボード、リポジトリ、またはブループリントタブから、ブループリントを選択して、新しいブループリントのテンプレートとして使用します。
2. ブループリントビューに移動し、選択したブループリントの編集を開始します。
3. 既存のタスクを選択するか、新しいタスクを追加し、ビルトインおよびカスタムタスクのドロップダウンからカスタムタスクを選択します。
4. トレーニングをクリックしてブループリントを保存してトレーニングします。 プロジェクトのリーダーボードに選択されたたタスクを含むモデルが表示されます。

## インサイトを取得

DataRobotインサイトを使用すると、カスタムブループリントから結果として得られるモデルを評価する上で役立ちます。

### ビルトインインサイト

ブループリントがトレーニングされたら、他のモデルと精度を簡単に比較できるプロジェクトリーダーボードに表示されます。 [指標とモデルに依存しないインサイト](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-quickstart.html.md#evaluate-and-deploy) は、DataRobotモデルの場合と同じように利用できます。

### カスタムインサイト

トレーニング中に [アーティファクトを作成](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-tasks.html.md#download-training-artifacts) することにより、カスタムインサイトを生成できます。 さらに、リーダーボードモデルの場合と同じように、予測APIを使用してインサイトを生成できます。

> [!TIP] ヒント
> カスタムインサイトは、モデルの機能を理解するために役立つ追加ビューです。 ビジュアライゼーションまたはCSVファイルの形式となる場合があります。 たとえば、 [LIMEのモデルに依存しないインサイト](https://cran.r-project.org/web/packages/lime/index.html) を活用したい場合、そのパッケージをインポートして、 `custom.py` またはその他のヘルパーファイル内のトレーニング済みのモデルで実行し、結果として得られるモデルのインサイトを書くことができます。

## デプロイ

カスタムタスクを含むモデルをトレーニングしたら、DataRobotモデルの場合と同様に [デプロイ、監視、管理](https://docs.datarobot.com/ja/docs/api/dev-learning/python/mlops/index.html.md) できます。

## トレーニングアーティファクトのダウンロード

カスタムタスクでブループリントをトレーニングする場合、DataRobotはダウンロードできるアーティファクトを作成します。 カスタムタスクの `fit()` 内の `output_dir` に置かれているファイルはアーティファクトの一部になります。 アーティファクトを使用して、以下の操作が可能です。

- トレーニング中にカスタムインサイトを生成します。 この場合、fit()関数の一部としてファイル（画像ファイルやテキストファイルなど）を生成し、output_dirに書き込みます。
- 追加インサイトを生成するか、DataRobotの外部にデプロイするためにローカルにロードできるトレーニング済みのモデル（たとえば、.pklファイルとして）をダウンロードします。

モデルのアーティファクトをダウンロードするには、 予測 > ダウンロード > アーティファクトのダウンロード に移動します。

アクセス可能な [任意の環境のコードをダウンロード](https://docs.datarobot.com/ja/docs/classic-ui/modeling/special-workflows/cml/cml-custom-env.html.md#share-and-download) することもできます。 ダウンロードするには、環境をクリックして、バージョンを選択し、 ダウンロード をクリックします。

## 暗黙の共有

タスクまたは環境は、明示的に共有されていない限り、モデル登録で他のユーザーが利用することはできません。 しかし、それは、ユーザーがそのタスクを含むブループリントを使用することを制限するものではありません。 これは 暗黙の共有 です。

たとえば、ユーザーAとユーザーBが共有しているプロジェクトを考えてみましょう。 ユーザーAが新しいタスクを作成し、そのタスクを使用したブループリントを作成した場合、ユーザーBはそのブループリント内のカスタムタスクへの 読み取り アクセスを有しているかどうかにかかわらず、そのブループリントを操作（クローン、修正、再実行など）することができます。 すべてのタスクは環境に関連付けられているため、暗黙の共有は環境にも適用されます。 また、ユーザーAは必要に応じて、タスクまたは環境のみを [明示的に共有](https://docs.datarobot.com/ja/docs/classic-ui/mlops/deployment/custom-models/custom-model-workshop/custom-model-actions.html.md) することもできます 。

暗黙の共有は、カスタムタスク作成者の組織内の全員に、 実行 へのアクセスを許可する独自の許可モデルです。 ユーザーがブループリントにアクセスできる場合（ただし、そのブループリントのカスタムタスクへの明示的なアクセス権を持っているとは限りません） 実行 へのアクセスで以下が許可されます：

- 結果として生じるモデルとの相互作用。 たとえば、再トレーニング、特徴量のインパクトおよび特徴量ごとの作用の実行、デプロイ、バッチ予測の作成などです。
- 共有プロジェクトからブループリントをクローンおよび編集してから、ブループリントを独自のものとして保存。
- リーダーボードログの表示とダウンロード。

実行へのアクセスで許可されない機能には、次のものがあります。

- カスタムタスクアーティファクトのダウンロード。
- モデルレジストリからカスタムタスクを表示、修正、または削除。
- 別のブループリントでタスクを使用。 （代わりに、タスクを含むブループリントのクローンを作成し、ブループリントやタスクを編集します。）
