APIクイックスタート¶
DataRobot APIでは、DataRobotのプロジェクトを作成・管理するために、ウェブインターフェイスに代わるプログラム的な方法を提供します。 APIは、 RESTを介して、またはDataRobotの Pythonや Rクライアントを使用して、Windows、UNIX、およびOS Xの環境で使用できます。 このガイドでは、環境を設定する手順について説明します。次に サンプル問題に従って、APIのエンドツーエンドのワークフローの概要を理解します。
備考
APIクイックスタートガイドでは、DataRobotのPythonクライアントバージョン3.x用のメソッドを使用しています。 セルフマネージドAIプラットフォームを使用している場合は、APIリソーステーブルを参照して、DataRobotのクライアントのどのバージョンが、お使いのDataRobotアプリケーションのバージョンでサポートされているかを確認してください。
前提条件¶
先に進む前に、PythonまたはR用のDataRobotクライアントパッケージにアクセスし、インストールしてください。 また、DataRobotでは、 APIリファレンスドキュメントを参照して、使用可能なコードファーストのリソースについての理解を深めることをお勧めします。
クライアントのインストール¶
備考
セルフマネージドAIプラットフォーム環境をお使いの場合、インストールされているDataRobotアプリケーションのバージョンに合わせて、以前のバージョンのクライアントをインストールすることをお勧めします。 利用可能なバージョンを参照し、インストール環境において適切なAPIクライアントのバージョンを確認してください。
pip install datarobot
(オプション)カスタムブループリントをプログラム的に構築したい場合は、graphvizとblueprint-workshopの2つのパッケージを追加でインストールします。
Windows
Ubuntu
sudo apt-get install graphviz
Mac
brew install graphviz
graphvizをインストールしたら、ワークショップをインストールします。
pip install datarobot-bp-workshop
install.packages(“datarobot”)
環境設定¶
DataRobotのAPIを使用して、データセットのアップロードから、本番環境にデプロイされたモデルの予測まで、完全なモデリングワークフローを実行することができます。
DataRobot APIキーの作成¶
-
DataRobotのUIで、右上隅にあるユーザーアイコンをクリックし、開発者ツールを選択します。
-
新しいキーを作成をクリックします。
-
新しいキーに名前を付けて、保存をクリックします。 これで新しいキーが有効になり、使用できるようになります。
作成された個々のキーは、3つの情報を持っています。
ラベル | 要素 | 説明 |
---|---|---|
1 | キー | 編集可能なキーの名前。 |
2 | 日付 | キーが最後に使用された日付。 新規に作成され、まだ使用されていないキーは「未使用」と表示されます。 |
3 | キー値 | キーそのものです。 |
APIエンドポイントの取得¶
DataRobotでは、お客様のビジネス要件に合わせて、複数のデプロイオプションを提供しています。 デプロイのタイプごとに、独自のエンドポイントのセットが用意されています。 以下のタブよりお選びください。
マネージドAIプラットフォーム(US)は、主に米国と日本のユーザーが利用しています。 https://app.jp.datarobot.comからアクセスできます。
APIエンドポイントのルート:https://app.jp.datarobot.com/api/v2
マネージドAIプラットフォーム(EU)は、主にEMEA地域のユーザーが利用しています。 https://app.eu.datarobot.comからアクセスできます。
APIエンドポイントのルート:https://app.eu.datarobot.com/api/v2
セルフマネージドAIプラットフォーム環境の場合、APIルートはDataRobot UIのルートと同じになります。 {datarobot.example.com}
をデプロイのエンドポイントに置き換えてください。
APIエンドポイントのルート:https://{datarobot.example.com}/api/v2
APIの認証設定¶
DataRobotのAPIで認証を行うには、前のステップで取得したエンドポイントとトークンにアクセスできるコードが必要です。 これには、3つの方法があります。
drconfig.yaml
は、DataRobotのPythonおよびRクライアントが自動的に検索するファイルです。 これは、DataRobotが推奨する認証方法です。 APIクライアントに対して、特定の場所(デフォルトでは~/.config/datarobot/drconfig.yaml
)、または一意な名前でファイルを探すように指示することができます。 したがって、これを利用して複数の設定ファイルを持つことが可能です。 以下の例は .yamlの形式を示したものです。
endpoint: 'https://app.jp.datarobot.com/api/v2'
token: 'NjE3ZjA3Mzk0MmY0MDFmZGFiYjQ0MztergsgsQwOk9G'
作成後、APIへのアクセスをテストすることができます。
Pythonの場合:
設定ファイルが~/.config/datarobot/drconfig.yaml
にあれば、あとはライブラリをインポートするだけです。
import datarobot as dr
そうでない場合は、以下のコマンドを使用します。
import datarobot as dr
dr.Client(config_path = "<file-path-to-drconfig.yaml>")
Rの場合:
設定ファイルが~/.config/datarobot/drconfig.yaml
にあれば、あとはライブラリを読み込むだけです。
library(datarobot)
そうでない場合は、以下のコマンドを使用します。
ConnectToDataRobot(configPath = "<file-path-to-drconfig.yaml>"))
UNIXシェルで環境変数を設定して、エンドポイントを設定します。
export DATAROBOT_ENDPOINT=https://app.jp.datarobot.com/api/v2
export DATAROBOT_API_TOKEN=your_api_token
設定後、DataRobotに接続するために認証を行います。
Pythonの場合:
import datarobot as dr
dr.Project.list()
Rの場合:
library(datarobot)
cURLの場合:
curl --location -X GET "${DATAROBOT_API_ENDPOINT}/projects" --header "Authorization: Bearer ${DATAROBOT_API_TOKEN}"
(オプション)資格情報をGitにコミットしないように注意してください。
Pythonの場合:
import datarobot as dr
dr.Client(endpoint='https://app.jp.datarobot.com/api/v2', token='NjE3ZjA3Mzk0MmY0MDFmZGFiYjQ0MztergsgsQwOk9G')
Rの場合:
ConnectToDataRobot(endpoint =
"https://app.jp.datarobot.com/api/v2",
token =
'NjE3ZjA3Mzk0MmY0MDFmZGFiYjQ0MztergsgsQwOk9G')
cURLの場合
GET https://app.jp.datarobot.com/api/v2/ HTTP/1.1
Authorization: Bearer DnwzBUNTOtKBO6Sp1hoUByG4YgZwCCw4
APIの使用:燃費を予測する¶
API資格情報、エンドポイント、環境の各設定が完了したら、この例に従ってDataRobot APIを使用することができます。 この例では、PythonクライアントとREST API(cURLを使用)を使用しているため、Python3またはcURLの基礎知識が必要です。 既知の自動車データ(車両重量、気筒数など)から燃費(燃料1ガロン当たりの走行マイル数)を予測するという簡単な問題に取り組みます。 追加のコード例については、DataRobotの AIアクセラレーターを参照してください。
備考
Pythonクライアントのユーザーは、次のワークフローではクライアントのバージョン3.0で導入されたメソッドを使用していることに注意してください。 お使いのクライアントが最新であることを確認してから、この例に含まれるコードを実行してください。
以降のセクションでは、次のことを行うためのPythonおよびcURLのサンプルコードを提供します。
- データセットをアップロードする
- モデルをトレーニングして、データセットから学習する
- 新しいデータを使って、モデルの予測結果をテストする
- モデルをデプロイする
- デプロイされたモデルで新しいデータを使って、結果を予測する
データセットのアップロード¶
プロジェクトを作成するには、まずデータセットをアップロードします。 この例では、こちらでダウンロードできるデータセットauto-mpg.csv
を使用しています。
import datarobot as dr
dr.Client()
# Set to the location of your auto-mpg.csv and auto-mpg-test.csv data files
# Example: dataset_file_path = '/Users/myuser/Downloads/auto-mpg.csv'
training_dataset_file_path = ''
test_dataset_file_path = ''
# Load dataset
training_dataset = dr.Dataset.create_from_file(training_dataset_file_path)
# Create a new project based on dataset
project = dr.Project.create_from_dataset(training_dataset.id, project_name='Auto MPG DR-Client')
# Set to the location of your auto-mpg.csv and auto-mpg-test.csv data files
# Example: dataset_file_path = '/Users/myuser/Downloads/auto-mpg.csv'
training_dataset_file_path <- ""
test_dataset_file_path <- ""
training_dataset <- utils::read.csv(training_dataset_file_path)
test_dataset <- utils::read.csv(test_dataset_file_path)
head(training_dataset)
project <- SetupProject(dataSource = training_dataset, projectName = "Auto MPG DR-Client", maxWait = 60 * 60)
DATAROBOT_API_TOKEN=${DATAROBOT_API_TOKEN}
DATAROBOT_ENDPOINT=${DATAROBOT_ENDPOINT}
location=$(curl -Lsi \
-X POST \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
-F 'projectName="Auto MPG"' \
-F "file=@${DATASET_FILE_PATH}" \
"${DATAROBOT_ENDPOINT}"/projects/ | grep -i 'Location: .*$' | \
cut -d " " -f2 | tr -d '\r')
echo "Uploaded dataset. Checking status of project at: ${location}"
while true; do
project_id=$(curl -Ls \
-X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" "${location}" \
| grep -Eo 'id":\s"\w+' | cut -d '"' -f3 | tr -d '\r')
if [ "${project_id}" = "" ]
then
echo "Setting up project..."
sleep 10
else
echo "Project setup complete."
echo "Project ID: ${project_id}"
break
fi
done
モデルのトレーニング¶
DataRobotにデータが取り込まれたので、そのデータを使ってオートパイロットでモデルのトレーニングと構築が可能になりました。 オートパイロットは、DataRobotの「適者生存」モデリングモードです。このモードでは、指定したターゲット特徴量に最適な予測モデルが自動的に選択され、サンプルサイズを増やしながら実行されます。 オートパイロットの成果は、最適なモデルの選択だけでなく、推奨されるモデル、つまりターゲット特徴量「mpg」の予測方法を最もよく理解しているモデルの特定でもあります。最適なモデルの選択には、精度、指標で示されたパフォーマンス、モデルのシンプルさのバランスが必要です。 モデルの推奨プロセスについては、UIドキュメントで詳しく説明されています。
# Use training data to build models
from datarobot import AUTOPILOT_MODE
# Set the project's target and initiate Autopilot (runs in Quick mode unless a different mode is specified)
project.analyze_and_model(target='mpg', worker_count=-1, mode=AUTOPILOT_MODE.QUICK)
# Open the project's Leaderboard to monitor the progress in UI.
project.open_in_browser()
# Wait for the model creation to finish
project.wait_for_autopilot()
model = project.get_top_model()
# Set the project target and initiate Autopilot
SetTarget(project,
target = "mpg")
# Block execution until Autopilot is complete
WaitForAutopilot(project)
model <- GetRecommendedModel(project, type = RecommendedModelType$RecommendedForDeployment)
response=$(curl -Lsi \
-X PATCH \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"target": "mpg", "mode": "quick"}' \
"${DATAROBOT_ENDPOINT}/projects/${project_id}/aim" | grep 'location: .*$' \
| cut -d " " | tr -d '\r')
echo "AI training initiated. Checking status of training at: ${response}"
while true; do
initial_project_status=$(curl -Ls \
-X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" "${response}" \
| grep -Eo 'stage":\s"\w+' | cut -d '"' -f3 | tr -d '\r')
if [ "${initial_project_status}" = "" ]
then
echo "Setting up AI training..."
sleep 10
else
echo "Training AI."
echo "Grab a coffee or catch up on email."
break
fi
done
project_status=$(curl -Lsi \
-X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
"${DATAROBOT_ENDPOINT}/projects/${project_id}/status" \
| grep -Eo 'autopilotDone":\strue'
)
if [ "${project_status}" = "" ]
then
echo "Autopilot training in progress..."
sleep 60
else
echo "Autopilot training complete. Model ready to deploy."
break
fi
done
モデルを使った予測¶
モデルを構築し、最もパフォーマンスの高いモデルを特定した後、新しいデータで予測を行うことで、モデルをさらにテストできます。 通常は、モデルを本番環境にデプロイする前に、より小さなデータセットで予測をテストして、モデルが期待どおりに動作していることを確認します。 DataRobotでは、新しいデータで予測を行うための方法が複数用意されています。 予測方法については、UIドキュメントで詳しく説明されています。
このコードでは、最初のステップでデータをアップロードした際に特定したテストセット(test_dataset_file_path
)を用いて、推奨モデルで予測を行います。
# Test predictions on new data
predict_job = model.request_predictions(test_dataset_file_path)
predictions = predict_job.get_result_when_complete()
predictions.head()
このコードでは、最初のステップでデータをアップロードした際に特定したテストセット(test_dataset_file_path
)を用いて、推奨モデルで予測を行います。
# Uploading the testing dataset
scoring <- UploadPredictionDataset(project, dataSource = test_dataset)
# Requesting prediction
predict_job_id <- RequestPredictions(project, modelId = model$modelId, datasetId = scoring$id)
# Grabbing predictions
predictions_prob <- GetPredictions(project, predictId = predict_job_id, type = "probability")
head(predictions_prob)
このコードでは、最初のステップでデータをアップロードした際に特定したテストセット(test_dataset_file_path
)を用いて、推奨モデルで予測を行います。
# Test predictions on new data
# shellcheck disable=SC2089
prediction_location=$(curl -Lsi\
-X POST \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
-F "file=@${TEST_DATASET_FILE_PATH}" \
"${DATAROBOT_ENDPOINT}/projects/${project_id}/predictionDatasets/fileUploads/"\
| grep -i 'location: .*$' | cut -d " " -f2 | tr -d '\r')
echo "Uploaded prediction dataset. Checking status of upload at: ${prediction_location}"
while true; do
prediction_dataset_id=$(curl -Ls \
-X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" "${prediction_location}" \
| grep -Eo 'id":\s"\w+' | cut -d '"' -f3 | tr -d '\r')
if [ "${prediction_dataset_id}" = "" ]
then
echo "Uploading predictions..."
sleep 10
else
echo "Predictions upload complete."
echo "Predictions dataset ID: ${prediction_dataset_id}"
break
fi
done
prediction_request_data="{\
\"modelId\":\"${recommended_model_id}\",\
\"datasetId\":\"${prediction_dataset_id}\"\
}"
predict_job=$(curl -Lsi \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
--data "${prediction_request_data}" \
"${DATAROBOT_ENDPOINT}/projects/${project_id}/predictions/"\
| grep -i 'location: .*$' | cut -d " " -f2 | tr -d '\r')
while true; do
initial_job_response=$(curl -Ls \
-X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" "${predict_job}" \
| grep -Eo 'status":\s"\w+' | cut -d '"' -f3 | tr -d '\r')
if [ "${initial_job_status}" = "inprogress" ]
then
echo "Generating predictions..."
sleep 10
else
echo "Predictions complete."
break
fi
done
curl -Ls \
-X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" "${predict_job}"
モデルのデプロイ¶
デプロイとは、実際のデータでの予測およびインサイトの生成を目的として、機械学習モデルを既存の本番環境に統合する方法のことです。 詳しくは、機械学習モデルのデプロイ概要をご覧ください。
``` python
# Deploy model
deployment = dr.Deployment.create_from_learning_model(
model_id=model.id, label="MPG Prediction Server",
description="Deployed with DataRobot client")
# View deployment stats
service_stats = deployment.get_service_stats()
print(service_stats.metrics)
```
# Deploy model
prediction_server = dr.PredictionServer.list()[0]
deployment = dr.Deployment.create_from_learning_model(
model_id=model.id, label="MPG Prediction Server",
description="Deployed with DataRobot client",
default_prediction_server_id=prediction_server.id
)
# View deployment stats
service_stats = deployment.get_service_stats()
print(service_stats.metrics)
predictionServer <- ListPredictionServers()[[1]]
deployment <- CreateDeployment(model,
label = "MPG Prediction Server",
description = "Deployed with DataRobot client",
defaultPredictionServerId = predictionServer)
recommended_model_id=$(curl -s \
-X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
"${DATAROBOT_ENDPOINT}/projects/${project_id}/recommendedModels"\
"/recommendedModel/" \
| grep -Eo 'modelId":\s"\w+' | cut -d '"' -f3 | tr -d '\r')
server_data=$(curl -s -X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
"${DATAROBOT_ENDPOINT}/predictionServers/")
default_server_id=$(echo $server_data \
| grep -Eo 'id":\s"\w+' | cut -d '"' -f3 | tr -d '\r')
server_url=$(echo $server_data | grep -Eo 'url":\s".*?"' \
| cut -d '"' -f3 | tr -d '\r')
server_key=$(echo $server_data | grep -Eo 'datarobot-key":\s".*?"' \
| cut -d '"' -f3 | tr -d '\r')
request_data="{\
\"defaultPredictionServerId\":\"${default_server_id}\",\
\"modelId\":\"${recommended_model_id}\",\
\"description\":\"Deployed with cURL\",\
\"label\":\"MPG Prediction Server\"\
}"
deployment_response=$(curl -Lsi -X POST \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
-H "Content-Type: application/json" \
--data "${request_data}" \
"${DATAROBOT_ENDPOINT}/deployments/fromLearningModel/")
deploy_response_code_202=$(echo $deployment_response | grep -Eo 'HTTP/2 202')
if [ "${deploy_response_code_202}" = "" ]
then
deployment_id=$(echo "$deployment_response" | grep -Eo 'id":\s"\w+' \
| cut -d '"' -f3 | tr -d '\r')
echo "Prediction server ready."
else
deployment_status=$(echo "$deployment_response" | grep -Eo 'location: .*$' \
| cut -d " " | tr -d '\r')
while true; do
deployment_ready=$(curl -Ls \
-X GET \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" "${deployment_status}" \
| grep -Eo 'id":\s"\w+' | cut -d '"' -f3 | tr -d '\r')
if [ "${deployment_ready}" = "" ]
then
echo "Waiting for deployment..."
sleep 10
else
deployment_id=$deployment_ready
echo "Prediction server ready."
break
fi
done
fi
デプロイされたモデルを使った予測¶
モデルが正常にデプロイされたら、DataRobotの予測APIを使って予測を行うことができます。 これにより、データドリフト、精度、サービス正常性の統計など、高度なモデル管理機能を利用できます。
また、UIからPythonの予測スニペットを参照することも可能です。 予測を行うためのスニペットを参照するには、デプロイページでデプロイを選択して、予測 > 予測APIに移動します。
import requests
from pprint import pprint
import json
import os
# JSON records for example autos for which to predict mpg
autos = [
{
"cylinders": 4,
"displacement": 119.0,
"horsepower": 82.00,
"weight": 2720.0,
"acceleration": 19.4,
"model year": 82,
"origin": 1,
},
{
"cylinders": 8,
"displacement": 120.0,
"horsepower": 79.00,
"weight": 2625.0,
"acceleration": 18.6,
"model year": 82,
"origin": 1,
},
]
# Create REST request for prediction API
prediction_server = deployment.default_prediction_server
prediction_headers = {
"Authorization": "Bearer {}".format(os.getenv("DATAROBOT_API_TOKEN")),
"Content-Type": "application/json",
"datarobot-key": prediction_server['datarobot-key']
}
predictions = requests.post(
f"{prediction_server['url']}/predApi/v1.0/deployments"
f"/{deployment.id}/predictions",
headers=prediction_headers,
data=json.dumps(autos),
)
pprint(predictions.json())
# Prepare to connect to the prediction server
URL <- paste0(deployment$defaultPredictionServer$url,
"/predApi/v1.0/deployments/",
deployment$id,
"/predictions")
USERNAME <- "deployment$owners$preview$email" # This should be your DR email account
API_TOKEN <- Sys.getenv("DATAROBOT_API_TOKEN") # This is configured implicitly when you first run `library(datarobot)`
# Invoke Predictions API with the test_dataset
response <- httr::POST(URL,
body = jsonlite::toJSON(test_dataset),
httr::add_headers("datarobot-key" = deployment$defaultPredictionServer$dataRobotKey),
httr::content_type_json(),
authenticate(USERNAME, API_TOKEN, "basic"))
# Parse the results from the prediction server
predictionResults <- fromJSON(httr::content(response, as = "text"),
simplifyDataFrame = TRUE,
flatten = TRUE)$data
print(predictionResults)
autos='[{
"cylinders": 4,
"displacement": 119.0,
"horsepower": 82.00,
"weight": 2720.0,
"acceleration": 19.4,
"model year": 82,
"origin":1
},{
"cylinders": 8,
"displacement": 120.0,
"horsepower": 79.00,
"weight": 2625.0,
"acceleration": 18.6,
"model year": 82,
"origin":1
}]'
curl -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" \
-H "datarobot-key: ${server_key}" \
--data "${autos}" \
"${server_url}/predApi/v1.0/deployments/${deployment_id}/predictions"
学習リソース¶
DataRobot APIの使用を開始し、一般的なデータサイエンスと機械学習ワークフローの完全な例を見つけるのに役立つ、概要、Jupyterノートブック、およびタスクベースのチュートリアルの ユーザーガイドに移動します。 DataRobotのプログラムによるツールで利用できる リファレンスドキュメントも併せてお読みください。
備考
GitHubにログインしてからこれらのGitHubリソースにアクセスしてください。