ブループリントワークショップの概要¶
備考
JupyterLabを使用している場合、「コンテキストヘルプ」がサポートされ、ブループリントワークショップの一般的な用途に役立ちます。 タブをノートブックと並べてドラッグすると、テキストカーソルがフォーカスしているドキュメントをすぐに作成できます。
初期化¶
続行する前に、ワークショップを初期化し、 必要なセットアップを完了してください。
備考
正確にconfiguration
の指示に従わないと、コマンドは失敗します。
次のコードを使用してワークショップを初期化します。 これは、Pythonコードの例が正しく機能するために必要です。
from datarobot_bp_workshop import Workshop
w = Workshop()
次の例はすべて、上記のようにワークショップが初期化されていることを前提にしてます。
ブループリントを理解する¶
DataRobot内の「ブループリント」の内容を理解することが重要です。 ブループリントは、前処理のステップ、アルゴリズム、後処理など、モデルを学習させる際のエンドツーエンドの手順の概要を表します。
ブループリントワークショップでは、ブループリントはBlueprintGraph
で表されます。これは以下を使ってDAGを構築することで作成できます
タスク。
pni = w.Tasks.PNI2(w.TaskInputs.NUM)
rdt = w.Tasks.RDT5(pni)
binning = w.Tasks.BINNING(pni)
keras = w.Tasks.KERASC(rdt, binning)
keras_blueprint = w.BlueprintGraph(keras, name='A blueprint I made with the Python API')
作成したブループリントは、ブループリントワークショップまたはDataRobot UIのいずれかに保存することで後で使用できます。
keras_blueprint.save()
ブループリントを視覚化することもできます
keras_blueprint.show()
UIでは、ブループリントはノードとエッジでグラフィカルに表現されます。 両方を選択して、ノードとエッジに対して削除、変更、追加などのアクションを実行するためのコンテキストボタンを使用できます。
各ブループリントには、いくつかの主要なコンポーネントがあります:
- 受信データ。各タイプ(カテゴリー、数値、テキスト、画像、地理空間など)に分けられます。
- データでの変換を実行するタスク(
Missing values imputed
など)。 - 予測を作成、または場合によってはスタックされた予測を後続のモデルに提供するモデル。
- 後処理の手順(
Calibration
など)。 - 最終予測として送信されるデータ(「予測」)。
各ブループリントにはノードとエッジ(接続)があります。 ノードはデータを取り込み、操作を実行し、データを新しい形式で出力します。 エッジは、データの流れを表したものです。
次の図は、1つのノードが受信する2つのエッジを表したものです。この2つのセットは水平方向にスタックされます。 受信データの列数は2セットの列数の合計となり、行数は同じままです。
1つのノードから2つのエッジが出力される場合、2セットの出力データが他のノードに送信されることになります。
タスクを理解する¶
次のセクションでは、タスクとは何であり、またそれらタスクがDataRobotでどのように使用されるのかを簡単に説明します。
タスクのタイプ¶
DataRobotで使用できるタスクには2つのタイプがあります:
-
エスティメータークラスは、入力データ(x)を使用して新しい値(y)を予測します。 ブループリントの最終タスクは、推定タスクである必要があります。 推定タスクの例には
LogisticRegression
、LightGBM regressor
、Calibrate
があります。 -
トランスフォームクラスは、入力データ(x)を何らかの方法で変換します。 変換タスクの例には、
One-hot encoding
、Matrix n-gram
などがあります。
これらのクラスタイプには、いくつかの類似点があります:
-
両方のクラスタイプには、データのいくつかの特性を学習するトレーニングに使用される
fit()
メソッドがあります。 たとえば、ビニングタスクでは、トレーニングデータに基づいてビンを定義し、それらのビンを将来に受け取るすべてのデータに適用するためにfit()
が必要となります。 -
トランスフォームとエスティメーターの両方をブループリント内のデータの前処理に使用できます。 たとえば、Auto-Tuned N-Gramはエスティメーターであり、次のタスクは入力として予測を取得します。
ブループリントでのタスクの連携方法¶
データは、ブループリントを連続して、タスクごとに、左から右に順次に渡されます。
トレーニング中:
-
データがエスティメーターに渡されると、DataRobotは最初にそのデータを受信したデータに埋め込み、トレーニングされたエスティメーターを使用して同じデータで予測し、予測を次工程に渡します。 過剰適合を減らすために、推定タスクがブループリントの最終手順でない場合、DataRobotはスタックされた予測を渡します。
-
データがトランスフォームに渡されると、DataRobotは最初にそのデータを受信したデータに埋め込み、そのデータを使用してトレーニングデータを変換し、結果を次のタスクに渡します。
トレーニングされたブループリントが予測に使用される場合、データは同じステップのセットを通過します。 ただし、fit()
のデータはスキップされます。
ブループリントの構築¶
タスクは、ブループリント構築プロセスの中核をなすものです。 ブループリントでタスクを追加、削除、変更する方法を理解することは、ブループリントを正常に構築するために不可欠です。
Pythonのブループリントで使用するタスクを定義するには、タスクを構築するためのタスクコードを知っておく必要があります。 幸いなことに、名前、説明、カテゴリーで タスクを検索し、オートコンプリート(タイプ(タイプw.Tasks.<tab>
:ここでは<tab>
でタブキーを押す)を利用して構築を開始できます。
タスクコードがわかると、そのコードをインスタンス化できます。
binning = w.Tasks.BINNING()
UIを使用する場合は、リーダーボードのブループリントから開始する必要があるため、最初に 既存のブループリントを変更する方法を読んでから作業に戻ることをお勧めします。
ブループリントエディターを使用すると、タスク、タスクのハイパーパラメーター、タスクの接続を追加、削除、変更できます。
タスクを変更するには、ノードをクリックしてから、対応する鉛筆アイコンをクリックし、必要に応じてタスクまたはパラメーターを編集します。 問題がなければ「更新」をクリックします。 (More details <modifying-a-task>
)
タスクを追加するには、入力または出力するノードを選択し、対応するプラス記号ボタンをクリックします。 空のノードとタスクダイアログが表示されたら、タスクを選択して必要に応じて設定します。 (More details <modifying-a-task>
)
ノードを削除するには、ノードを選択してごみ箱アイコンをクリックします。
タスク間でデータを渡す¶
ブループリントを理解するで説明したように、データはブループリントの構造に従ってタスクからタスクに渡されます。
次のコードでは、タスクに数値入力を入力して、ブループリントの数値入力でビニングを実行します(プロジェクトと特徴量セットによって決定されます)。
binning = w.Tasks.BINNING(w.TaskInputs.NUM)
binning
タスクを定義したら、その出力を渡します。
kerasc = w.Tasks.KERASC(binning)
ノートブックの例に示すように、BlueprintGraph
に変えることで、今作成したばかりのものを保存、視覚化、トレーニングできるようになりました。
keras_bp = w.BlueprintGraph(kerasc)
構築時に複数の入力をタスクに渡すことも、後で追加することもできます。 次のコードがの既存の入力kerasc
に追加されます。
impute_missing = w.Tasks.NDC(w.TaskInputs.NUM)
kerasc(impute_missing)
replace_inputs=True
を渡すと、代わりに入力を置き換えることができます。
kerasc(impute_missing, replace_inputs=True)
.show()
を呼び出すと示されるように、BlueprintGraph
にはその変更が反映されますが、変更を保存するには、.save()
を呼び出す必要があります。
keras_bp.save().show()
接続を追加するには、開始ノードを選択して、青いノブを出力ポイントまでドラッグします。
接続を削除するには、削除するエッジを選択して、ごみ箱アイコンをクリックします。 ごみ箱アイコンが表示されていない場合、接続を削除することはできません。 接続を削除してもブループリントが有効であることを確認する必要があります。
タスクの変更¶
ブループリントワークショップでのタスクの変更は、タスクのパラメーターのみの変更を意味します。ただしUIでは、パラメーターまたは(フォーカスノードで使用するタスク)の変更を意味することがあります。 これは、タスクを別のタスクに置き換えるためにタスクを編集する必要があるためです。
置き換えが必要となる別のタスクを使用し、ブループリントを保存します。
既存のタスクを変更するには、ノードをクリックし、次に鉛筆アイコンをクリックしてタスクダイアログを開きます。
タスクの名前をクリックすると、新しいタスクを選択するプロンプトが表示されます。
これで使用するタスクを検索して見つけることができます。 タスクを選択した後、ドキュメントを開くをクリックして、タスクがどのように機能するかの詳細を確認します。
タスクパラメーターの設定¶
タスクには、動作を変更するために設定できるパラメーターがあります。 これらには、例えば、確率的勾配降下アルゴリズムの学習率、線形リグレッサーの損失関数、XGBoostのツリーの数、およびone-hot encodingの最大カーディナリティが含まれます。
タスクのパラメーターを変更するには、次の方法が最も適しています。 DataRobotでは、タスクを操作するときにタスクの ドキュメントを表示することも推奨されます。 JupyterLabを使用している場合は、「コンテキストヘルプ」がサポートされます。 呼び出しには、help(w.Tasks.BINNING)
を使用できます。
binning
タスクを変更することで、前のステップのブループリントの操作を続行できます。 具体的には、ビンの最大数を上げ、ビンの定義に必要なサンプル数を減らすことで可能です。
binning.set_task_parameters_by_name(max_bins=100, minimum_support=10)
現在の値の取得と変更の両方の観点から、タスクパラメーターを操作する方法は他にもあります。 各パラメーターには「名前」と「キー」の両方があることを把握しておく必要があります。 「キー」は信頼できる情報源ですが、凝縮度の高い表現で、多くの場合、1文字または2文字です。 このため、可能であれば名前を扱う方がはるかに簡単です。
タスクパラメーターも変更できます。 パラメーターはヘッダーの下に表示され、タスクタイプに応じて異なります。
許容される値は、カンマ区切りリスト内の単一値または複数値として各パラメーターに表示されます。
選択した値が有効でない場合、DataRobotはエラーを返します:
データ型の追加または削除¶
プロジェクトのデータは、さまざまな入力データ型に整理されています。 ブループリントを構築する場合、これらのタイプを特定して参照できます。 特定のタイプの入力データがブループリントに渡されると、ブループリントで参照される入力タイプのみが使用されます。 同様に、プロジェクトに存在しないブループリントで参照される入力タイプは、単純に実行されません。
ブループリントワークショップのタスクに入力データ型を追加できます( タスクに他の入力を追加する場合と同様です)。 デモ用に、このコード例では数値入力が追加され、その後に日付入力が追加されます。 両方を一度に追加することもできます。
ndc = w.Tasks.NDC(w.TaskInputs.NUM)
ndc(w.TaskInputs.DATE)
現在のブループリントに、使用するすべての入力特徴量の型が何もない場合は、さらに追加できます。 データノードを選択し、鉛筆アイコンをクリックして、現在のブループリントで使用できる入力データ型を変更します。
このモーダルでは、ブループリントに現在表示されていないデータであっても、有効な入力データを選択できます。 次に、接続ハンドルをドラッグして、ターゲットタスクに渡されるデータを示します。
既存のブループリントの変更¶
オートパイロットを実行し、それぞれパフォーマンスが測定されたモデルのリーダーボードがあることを考えてみます。 ブループリントワークショップでさらなる調査の基準として使用するモデルを指定すると、以下の指示を使用できます。
最初に、使用するモデルを含むプロジェクトに対するWorkshop
のproject_id
を設定します。
w.set_project(project_id=project_id)
使用するモデルに関連付けられているblueprint_id
を取得します。 これを行うには、複数の方法があります:
DataRobotのPythonクライアントを使用している場合は、 プロジェクトのメニューを検索して目的のブループリントを取得できます:
menu = w.project.get_blueprints()
blueprint_id = menu[0].id
ブループリントを視覚化し、クローンを作成するブループリントを見つける例として、 DataRobotにはワークフローの例が用意されています。 プロジェクトの リーダーボードを検索することもできます。
models = w.project.get_models()
blueprint_id = models[0].blueprint_id
UIでリーダーボードに移動することで、URLバーから特定のモデルIDを取得できます。URLバーを使用して、blueprint_id
フィールドのある モデルを直接取得できます。
blueprint_id
が取得されると、ブループリントのクローン作成に使用できます。
bp = w.clone(blueprint_id=blueprint_id)
最初からブループリントを作成するソースコードは、シンプルなコマンドで取得できます:
bp.to_source_code()
コマンドから以下の出力があったとします:
keras = w.Tasks.KERASC(...)
keras_blueprint = w.BlueprintGraph(keras)
これは、まったく同じブループリントのゼロからの作成を実行するために必要なコードです。 この機能は便利です。クローンを変更することで、ブループリントのクローンに似た、目的のブループリントを作成できます。
ブループリントを変更して所定の場所に保存する(別のコピーを作成するのではなく)には、新しいBlueprintGraph
((w.BlueprintGraph
)への呼び出し)を作成する最終行を省略し、代わりに新しい最終タスクで上書きしたいブループリントを呼び出します:
keras = w.Tasks.KERASC(...)
# keras_blueprint = w.BlueprintGraph(...)
bp(keras).save()
説明 > ブループリントに移動し、コピーして編集を選択します。
DataRobotでブループリントエディターが開きます。ここでは、ブループリントを直接変更して、たとえば新しい前処理を組み込んだり、他のモデルとスタックしたりです。 または、保存して他のプロジェクトで使用することもできます。
検証¶
ブループリントには、DataRobot UIとブループリントワークショップの両方に検証とガードレールが組み込まれているため、要件や各タスクが仕様の観点からデータに及ぼす影響を覚えておく必要もなく、目標にフォーカスできます。 つまり、各タスクのプロパティが考慮されているため、タスクが特定のデータ型のみを許可するケースや、特定のタイプのスパース性を必要とするケース、補完によって欠損値を処理するケーする、列数に要件を課すケースを覚えておく必要はありません。 ブループリントは、これらのプロパティと要件を自動的に検証し、編集によって問題が発生した場合に警告またはエラーを表示します。
また、その他の構造チェックも実行されて、ブループリントが適切に接続されていること、サイクルがながないこと、実行できることが確認されます。
ブループリントワークショップでは、呼び出し.save()
とブループリントは自動的に検証されます。
pni = w.Tasks.PNI2(w.TaskInputs.CAT)
binning = w.Tasks.BINNING(pni)
keras = w.Tasks.KERASC(binning)
invalid_keras_blueprint = w.BlueprintGraph(keras).save()
invalid_keras_blueprint.show(vertical=True)
制約¶
各ブループリントにサイクルがない必要があります。データの流れは1方向でなければならず、同じノードを複数回通過してはなりません。 サイクルが導入されると、DataRobotは検証と同じ方法でエラーを投げ、問題の原因となったノードを示します。
ブループリントをトレーニング¶
前の例のkeras_bp
を使用します。 UIでプロジェクトに移動してURLバー.../project/<project_id>/...
からコピーするか、DR Pythonクライアントを使用している場合は、DataRobot Project
で.id
を呼び出すことで、project_id
を取得できます。
keras_bp.train(project_id=project_id)
Workshop
でproject_id
が設定されている場合は、train
メソッドの引数を省略できます。
w.set_project(project_id=project_id)
keras_bp.train()
モデルが最新であることを確認し、警告やエラーがないか確認して、トレーニングをクリックします。 必要な設定を選択します。
ブループリントの検索¶
オプションとしてブループリントのタイトルまたは説明の一部を指定してブループリントを検索し、ブループリントを作成してタグ付けしたタグを1つまたは複数指定できます。
デフォルトでは、検索結果はPythonジェネレーターになり、実際のブループリントデータはジェネレーターで生成されるまで要求されません。
すべてのブループリントをリスト形式ですぐに取得するためのためのフラグas_list=True
を指定できます(この処理を使うと遅くなりますが、すべてのデータが一度に配信されます)。
フラグshow=True
を指定して、返される各ブループリントを視覚化し、すべてのデータを自動的に取得できます(as_list=True
)。
shown_bps = w.search_blueprints("Linear Regression", show=True)
# bp_generator = w.search_blueprints("Linear Regression")
# bps = w.search_blueprints(tag=["deployed"], as_list=True)
ブループリントの検索はAIカタログを使って行われ、データセットの検索のように機能します。 特定のタグでフィルターするか、タイトルまたは説明に基づいて検索できます。
ブループリントを共有する¶
多くの個人または組織全体で使用するブループリントのコレクションを構築することは、組織にとって最大の利益とインパクトを確保する素晴らしい方法です。
ブループリントを他の人と共有するには、ブループリントでshare
を呼び出し、割り当てる役割を指定する必要があります(省略した場合はデフォルトでコンシューマー)。
割り当てられた役割は次のようになります:
- コンシューマー:ユーザーはブループリントを表示してトレーニングできます。
- エディター:ユーザーはブループリントを表示、トレーニング、編集できます。
- オーナー:ユーザーは権限を表示、トレーニング、編集、削除、管理できます。これには、他の所有者(利用しているユーザーを含む)からのアクセスの取り消しが含まれます。
from datarobot_bp_workshop.utils import Roles
keras_bp.share(["<alice@your-org.com>", "<bob@your-org.com>"],role=Roles.CONSUMER)
# keras_bp.share(\[\"<alice@your-org.com>\","<bob@your-org.com>\"\], role=Roles.EDITOR)
# keras_bp.share(\[\"<alice@your-org.com>\", \"<bob@your-org.com>\"\], role=Roles.OWNER)
グループまたは組織との共有を許可する類似の方法もあります。これには、それぞれgroup_id
またはorganization_id
が必要です。
from datarobot_bp_workshop.utils import Roles
keras_bp.share_with_group(["<group_id>"], role=Roles.CONSUMER)
keras_bp.share_with_org(["<organization_id>"], role=Roles.CONSUMER)
UIでは、ブループリントの共有はデータセットの共有と同じです。 AIカタログに移動し、共有するブループリントを検索して選択します。
次に、「共有」をクリックし、個人(複数可)、グループ(複数可)、または組織(複数可)を指定して、割り当てる役割を選択します。