Skip to content

アプリケーション内で をクリックすると、お使いのDataRobotバージョンに関する全プラットフォームドキュメントにアクセスできます。

DataRobot予測API

This section describes how to use DataRobot's Prediction API to make predictions on a dedicated prediction server. 予測APIリファレンスドキュメントが必要な場合は、こちらから入手できます。

DataRobotの予測APIは(デプロイIDを指定することによって)モデルデプロイ上で予測を作成する場合に使用できます。 この場合、高度なモデル管理機能(ターゲットまたはデータドリフト検出など)を活用できます。 DataRobotのモデルマネジメント機能は予測APIから安全に分離されているので、予測の速度や信頼性を損なうことなくメリットを活用できます。 モデルデプロイの作成の詳細については、デプロイセクションを参照してください。

予測APIで予測を生成する前に、予測を最も高速に実行するために推奨されるベストプラクティスを参照してください。

予測を作成する

予測APIを使用して新しいデータで予測を作成するには、次のものが必要です。

  • モデルのデプロイID。 IDは、デプロイ > 予測 > 予測APIタブのサンプルコード出力にあります(インターフェイスは「APIクライアント」に設定されています)。
  • APIキー

注意

モデルがオープンソースのRスクリプトの場合、実行速度は著しく遅くなります。

予測リクエストがPOSTリクエストとしてリソースに対して送信されます。次に例を示します。

curl -i -X POST "https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictions" \
    -H "Authorization: Bearer <API key>" -F \
    file=@~/.home/path/to/dataset.csv 

本機能の提供について

マネージドAIクラウドユーザーの場合は、datarobot-keyをCurlヘッダーに含める必要があります(curl -H "Content-Type: application/json", -H "datarobot-key: xxxx"など)。 予測 > 予測APIタブを使用するか、DataRobot担当者に連絡してキーを見つけます。

予測応答行の順序は、送信されたデータの順序と同じです。

この応答は次のようになります。

HTTP/1.1 200 OK
Content-Type: application/json
X-DataRobot-Execution-Time: 38
X-DataRobot-Model-Cache-Hit: true

{"data":[…]} 

備考

上記の例では、予測API URLとして便宜的なホスト名(example.datarobot.com)が使用されています。実際に使用する場合は、専用予測サーバーの正しいホスト名を使用してください。 The configured (predictions) URL is displayed in the sample code of the Deployments > Predictions > Prediction API tab. 不明な点がある場合は、システム管理者に問い合わせてください。

永続的HTTP接続の使用

すべての予測リクエストは安全な接続(SSL/TLS)を介して行われるので、接続のセットアップ時間が長くなることがあります。 この時間は、予測インスタンスへのネットワークレイテンシーに応じて 30msから100~150msです。

この問題への対処として、予測APIでHTTP Keep-Aliveがサポートされていて、最後の予測リクエストの後、最大1分間システムで接続を開いたままにしておくことができます。

Pythonのrequestsモジュールを使用して、requests.Sessionから予測リクエストを実行します。

import json
import requests

data = [
    json.dumps({'Feature1': 42, 'Feature2': 'text value 1'}),
    json.dumps({'Feature1': 60, 'Feature2': 'text value 2'}),
]

api_key = '...'
api_endpoint = '...'

session = requests.Session()
session.headers = {
    'Authorization': 'Bearer {}'.format(api_key),
    'Content-Type': 'text/json',
}

for row in data:
    print(session.post(api_endpoint, data=row).json()) 

現在の統合で持続的接続(パーシステントコネクション)を使用する方法については、使用するHTTPライブラリのドキュメントを参照してください。

予測入力

APIは、JSONとCSVの両方の形式の入力データをサポートします(高品質のJSONパーサーで作成されている場合はJSONの使用が推奨されます)。 データは、リクエストボディまたはファイルアップロード(マルチパートフォーム)を介してポストすることができます。

備考

予測APIを使用する場合、CSVファイルとリクエスト本文でサポートされる列区切りはコンマ(,)だけです

JSON入力

JSON入力は、キーが特徴量名で、値がデータセット内の値となるオブジェクト配列としてフォーマットされています。

たとえば、CSVファイルで以下のように表示されている場合:

a,b,c
1,2,3
7,8,9 

JSONの場合は以下のように表示されます。

[
  {
    "a": 1,
    "b": 2,
    "c": 3
  },
  {
    "a": 7,
    "b": 8,
    "c": 9
  }
] 

データを/predApi/v1.0/deployments/<deploymentId>/predictionsエンドポイントに送信して、JSON配列を予測APIにサブミットします。 例:

curl -H "Content-Type: application/json" -X POST --data '[{"a": 4, "b": 5, "c": 6}\]' \
    -H "Authorization: Bearer <API key>" \
    https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictions 

ファイル入力

この例では、ヘッダーと予測を行うデータの行を含むCSVファイルdataset.csvを使用します。 コンテンツタイプはURLによって自動的に設定されます。

curl -i -X POST "https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictions" \
    -H "Authorization: Bearer <API key>" -F \
    file=@~/.home/path/to/dataset.csv

HTTP/1.1 200 OK
Date: Fri, 08 Feb 2019 10:00:00 GMT
Content-Type: application/json
Content-Length: 60624
Connection: keep-alive
Server: nginx/1.12.2
X-DataRobot-Execution-Time: 39
X-DataRobot-Model-Cache-Hit: true
Access-Control-Allow-Methods: OPTIONS, POST
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Content-Type,Content-Length,X-DataRobot-Execution-Time,X-DataRobot-Model-Cache-Hit,X-DataRobot-Model-Id,X-DataRobot-Request-Id
Access-Control-Allow-Headers: Content-Type,Authorization,datarobot-key
X-DataRobot-Request-ID: 9e61f97bf07903b8c526f4eb47830a86

{
  "data": [
    {
      "predictionValues": [
        {
          "value": 0.2570950924,
          "label": 1
        },
        {
          "value": 0.7429049076,
          "label": 0
        }
      ],
      "predictionThreshold": 0.5,
      "prediction": 0,
      "rowId": 0
    },
    {
      "predictionValues": [
        {
          "value": 0.7631880558,
          "label": 1
        },
        {
          "value": 0.2368119442,
          "label": 0
        }
      ],
      "predictionThreshold": 0.5,
      "prediction": 1,
      "rowId": 1
    }
  ]
} 

インボディテキスト入力

この例には、リクエストボディ内にCSVファイルが含まれます。 この形式では、フォームデータのContent-Typeをtext/plainに設定する必要があります。

curl  -i -X POST "https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictions"  --data-binary $'a,b,c\n1,2,3\n7,8,9\n'
    -H "content-type: text/plain" \
    -H "Authorization: Bearer <API key>" \ 

予測オブジェクト

以下のセクションでは、さまざまな予測オブジェクトのコンテンツについて説明します。

リクエストスキーマ

リクエストスキーマは、すべての種類の予測の標準です。 使用可能なヘッダーを以下に示します。

名前
Content-Type text/csv;charset=utf8
  application/json
  multipart/form-data
コンテンツエンコーディング gzip
  bz2
Authorization ベアラー

以下の点に注意してください。

  • データの元のストリームとして予測を送信する場合、;charset=<encoding>Content-Typeヘッダーに追加してエンコーディングを指定できます。 有効な値の一覧については、Pythonの標準エンコーディングを参照してください。 DataRobotでは、デフォルトでutf8が使用されます。

  • データのエンコード済みストリームを送信する場合は、 Content-Encodingヘッダーを指定する必要があります。

  • Authorizationフィールドは、ベアラートークンと呼ばれるセキュリティトークンに関連するBearer認証HTTP ユーザー名 + APIトークン(基本認証)またはAPIトークンのみでも認証できますが、これらの認証方法は廃止されているので推奨されません。

URIクエリーパラメーターを使用してリクエストをパラメーター化することができます。

パラメーター名 タイプ 備考
passthroughColumns 文字列 予測応答でスコアリングデータセットから返す列のリスト。
passthroughColumnsSet 文字列 passthroughColumnsSet=allが渡された場合、スコアリングデータセットのすべての列が予測応答で返されます。

以下の点に注意してください。

  • passthroughColumnsおよびpassthroughColumnsSetパラメーターの両方を同じリクエストで渡すことはできません。
  • passthroughColumnsクエリーパラメーターで渡すことのできる列名の数に制限はありませんが、HTTPリクエストラインの制限があります(現在の制限は8192バイト)。

次の例は、複数のパススルー列の使用を示しています。

curl -i -X POST "https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictions?passthroughColumns=Latitude&passthroughColumns=Longitude" \
    -H "Authorization: Bearer <API key>" \
    -H "datarobot-key: <DataRobot key>" -F \
    file=@~/.home/path/to/dataset.csv 

応答スキーム

サンプルの応答本文を以下に示します(時系列応答本文の追加例も参照してください)。

{
  "data": [
    {
      "predictionValues": [
        {
          "value": 0.6856798909,
          "label": 1
        },
        {
          "value": 0.3143201091,
          "label": 0
        }
      ],
      "predictionThreshold": 0.5,
      "prediction": 1,
      "rowId": 0,
      "passthroughValues": {
        "Latitude": -25.433508,
        "Longitude": 22.759397
      }
    },
    {
      "predictionValues": [
        {
          "value": 0.765656753,
          "label": 1
        },
        {
          "value": 0.234343247,
          "label": 0
        }
      ],
      "predictionThreshold": 0.5,
      "prediction": 1,
      "rowId": 1,
      "passthroughValues": {
        "Latitude": 41.051128,
        "Longitude": 14.49598
      }
    }
  ]
} 

次の表にDataRobotのカスタムヘッダーの一覧を示します。

名前 備考
X-DataRobot-Execution-Time 数値 予測の計算時間(ミリ秒)。
X-DataRobot-Model-Cache-Hit trueまたはfalse モデルのインメモリーの有無(ブール型)。
X-DataRobot-Model-Id ObjectId 予測リクエストに使用するモデルのID(モデル展開で行われた予測に対してのみ返されます)。
X-DataRobot-Request-Id uuid 予測リクエストの一意の識別子。

以下の表にJSON配列の応答予測行を示します。

名前 タイプ 備考
predictionValues array PredictionValueの配列(スキーマについては以下を参照)。
predictionThreshold 浮動小数 予測に対して使用されるしきい値(二値分類プロジェクトのみ)。
prediction 浮動小数 この行のモデルの出力。
rowId int 説明された行。
passthroughValues object JSONオブジェクト(キーが列名で、はスコアリングデータセットから予測された行の対応する値)。 このJSON項目はpassthroughColumnsまたはpassthroughColumnsSetのいずれかが渡された場合にのみ返されます。
adjustedPrediction 浮動小数 エクスポージャーがモデル構築で使用された場合、この行に対するこのモデルのエクスポージャーを調整した出力。 リクエストパラメーターexcludeAdjustedPredictionsがFalseの場合、adjustedPredictionは応答に含まれます。
adjustedPredictionValues array エクスポージャー調整されたPredictionValueの配列(スキーマについては以下を参照)。 リクエストパラメーターexcludeAdjustedPredictionsがfalseの場合、adjustedPredictionValuesは応答に含まれます。
predictionExplanations array PredictionExplanationsの配列(スキーマについては以下を参照)。 このJSON項目は、予測の説明と共にのみ返されます。

PredictionValueスキーマ

以下の表にJSON応答配列のPredictionValueスキーマを示します。

名前 タイプ 備考
ラベル - モデル出力に対応するものを示します。 連続値プロジェクトの場合、これはターゲット特徴量の名前です。 分類プロジェクトの場合、これはターゲット特徴量のラベルです。
value 浮動小数 予測の出力。 連続値プロジェクトの場合、これはターゲットの予測値です。 分類プロジェクトの場合、最も確率が高いと予測されるのはラベルに関連付けられた確率です(二値分類問題において0.5のしきい値となります)。

時系列での予測の作成

ヒント

時系列予測は、すべての時間認識モデリングではなく、時系列プロジェクトに固有です。 特に、CSVファイルは特定の形式である必要があります。詳細については、時系列モデリングのページの予測に関するセクションを参照してください。

If you are making predictions with the forecast point, you can skip the forecast window in your prediction data as DataRobot generates a forecast point automatically. This is called autoexpansion. Autoexpansion applies automatically if:

  • Predictions are made for a specific forecast point and not a forecast range.
  • The time series project has a regular time step and does not use Nowcasting.

When using autoexpansion, note the following:

  • If you have Known in Advance features that are important for your model, it is recommended that you manually create a forecast window to increase prediction accuracy.
  • If you plan to use an association ID other than the primary date/time column in your deployment to track accuracy, create a forecast window manually.

時系列展開と通常の非時系列展開で予測を行うためのURLは同じです。 唯一の違いは、オプションで予測ポイント、予測の開始/終了日、またはその他の時系列固有のURLパラメーターを指定できることです。 サーバーは、デプロイIDを使用して、デプロイされたモデルを時系列デプロイとして自動的に検出し、それに応じて処理します。

curl -i -X POST "https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictions" \
    -H "Authorization: Bearer <API key>" -F \
    file=@~/.home/path/to/dataset.csv 

複数系列プロジェクトのサンプル応答本文を以下に示します。

HTTP/1.1 200 OK
Content-Type: application/json
X-DataRobot-Execution-Time: 1405
X-DataRobot-Model-Cache-Hit: false

{
  "data": [
    {
      "seriesId": 1,
      "forecastPoint": "2018-01-09T00:00:00Z",
      "rowId": 365,
      "timestamp": "2018-01-10T00:00:00.000000Z",
      "predictionValues": [
        {
          "value": 45180.4041874386,
          "label": "target (actual)"
        }
      ],
      "forecastDistance": 1,
      "prediction": 45180.4041874386
    },
    {
      "seriesId": 1,
      "forecastPoint": "2018-01-09T00:00:00Z",
      "rowId": 366,
      "timestamp": "2018-01-11T00:00:00.000000Z",
      "predictionValues": [
        {
          "value": 47742.9432499386,
          "label": "target (actual)"
        }
      ],
      "forecastDistance": 2,
      "prediction": 47742.9432499386
    },
    {
      "seriesId": 1,
      "forecastPoint": "2018-01-09T00:00:00Z",
      "rowId": 367,
      "timestamp": "2018-01-12T00:00:00.000000Z",
      "predictionValues": [
        {
          "value": 46394.5698978878,
          "label": "target (actual)"
        }
      ],
      "forecastDistance": 3,
      "prediction": 46394.5698978878
    },
    {
      "seriesId": 2,
      "forecastPoint": "2018-01-09T00:00:00Z",
      "rowId": 697,
      "timestamp": "2018-01-10T00:00:00.000000Z",
      "predictionValues": [
        {
          "value": 39794.833199375,
          "label": "target (actual)"
        }
      ]
    }
  ]
} 

リクエストパラメーター

URIクエリパラメータを使用して、時系列予測リクエストをパラメータ化できます。 たとえば、デフォルトの推定予測ポイントを上書きすると、次のようになります。

curl -i -X POST "https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictions?forecastPoint=1961-01-01T00:00:00?relaxKnownInAdvanceFeaturesCheck=true" \
    -H "Authorization: Bearer <API key>" -F \
    file=@~/.home/path/to/dataset.csv 

時系列固有のパラメーターの詳細なリストについては、デプロイの時系列予測を参照してください。

応答スキーム

応答スキーム標準の予測と一貫性がありますが、各PredictionRowオブジェクトにいくつかの列が追加されます。

名前 タイプ 備考
seriesId string、int、またはNone 複数系列プロジェクトの系列を識別する予測済み列の複数系列識別子。
forecastPoint 文字列 予測リクエストの予測ポイント(ユーザー設定またはDataRobotによる選択)に対応するISO 8601形式のDateTime文字列。
timestamp 文字列 予測された行のDateTime列に対応するISO 8601形式のDateTime文字列。
forecastDistance int 予測された行の予測距離識別子、またはスコアリングデータセットのforecastPointからの距離。
originalFormatTimestamp 文字列 予測された行のDateTime列に対応するDateTime文字列。 timestamp列とは異なり、この列はアップロードされた予測データセットと同じDateTime形式を維持します。 (この列は管理者によって有効化されている場合に表示されます。

予測の説明の作成

DataRobotの予測の説明機能を使用すると、例外的に高い予測値や例外的に低い予測値が発生する特定の入力の属性に関するインサイトを得ることができます。

ヒント

You must run the following two critical dependencies before running Prediction Explanations:

  1. You must compute Feature Impact for the model.
  2. You must generate predictions on the dataset using the selected model.

予測の説明を初期化するには、予測の説明タブを使用します。

予測の説明の作成は、標準の予測リクエストに非常に似ています。 最初に、予測の説明リクエストがPOSTリクエストとしてリソースに送信されます。

curl -i -X POST "https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictionExplanations" \
    -H "Authorization: Bearer <API key>" -F \
    file=@~/.home/path/to/dataset.csv 

応答本文のサンプルを以下に示します。

HTTP/1.1 200 OK
Content-Type: application/json
X-DataRobot-Execution-Time: 841
X-DataRobot-Model-Cache-Hit: true

{
  "data": [
    {
      "predictionValues": [
        {
          "value": 0.6634830442,
          "label": 1
        },
        {
          "value": 0.3365169558,
          "label": 0
        }
      ],
      "prediction": 1,
      "rowId": 0,
      "predictionExplanations": [
        {
          "featureValue": 49,
          "strength": 0.6194461777,
          "feature": "driver_age",
          "qualitativeStrength": "+++",
          "label": 1
        },
        {
          "featureValue": 1,
          "strength": 0.3501610895,
          "feature": "territory",
          "qualitativeStrength": "++",
          "label": 1
        },
        {
          "featureValue": "M",
          "strength": -0.171075409,
          "feature": "gender",
          "qualitativeStrength": "--",
          "label": 1
        }
      ]
    },
    {
      "predictionValues": [
        {
          "value": 0.3565584672,
          "label": 1
        },
        {
          "value": 0.6434415328,
          "label": 0
        }
      ],
      "prediction": 0,
      "rowId": 1,
      "predictionExplanations": []
    }
  ]
} 

リクエストパラメーター

URIクエリーパラメーターを使用して、予測の説明の予測リクエストをパラメーター化することができます。

パラメーター名 タイプ 備考
maxExplanations int 予測ごとに生成されるコードの最大数。 デフォルトは3です。
thresholdLow 浮動小数 予測の説明の下限しきい値。 予測の説明を計算するには、予測は、この値以下(またはthresholdHighの値以上)である必要があります。 この値はnullに設定できます。
thresholdHigh 浮動小数 予測の説明の上限しきい値。 予測の説明を計算するには、予測は、この値以上(またはthresholdLowの値以下)である必要があります。 この値はnullに設定できます。
excludeAdjustedPredictions 文字列 モデル構築中にエクスポージャーが使用された場合、エクスポージャー調整された予測を予測応答に含めるか予測応答から除外します。 デフォルト値は「true」です(エクスポージャー調整された予測を除外します)。

パラメーター化されたリクエストの例を以下に示します。

curl -i -X POST "https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictionExplanations?maxExplanations=2&thresholdLow=0.2&thresholdHigh=0.5"
    -H "Authorization: Bearer <API key>" -F \
    file=@~/.home/path/to/dataset.csv 

DataRobotのヘッダースキーマは予測応答のものと同じです。 応答スキームは標準の予測と一貫性がありますが、PredictionExplanationsの配列「predictionExplanations」が各PredictionRowオブジェクトに追加されます。

PredictionExplanationsスキーマ

オブジェクトの応答JSON配列:

名前 タイプ 備考
ラベル この予測の説明から派生した出力を説明します。 連続値プロジェクトの場合、これはターゲット特徴量の名前です。 分類プロジェクトの場合、これは、この予測の説明のpositiveの強度が確率の増加に対応するクラスです。
feature 文字列 予測に貢献する特徴量の名前。
featureValue - この行に対して特徴量が取った値。
strength 浮動小数 この特徴量の値が予測に影響した量。
qualitativeStrength 文字列 特徴量が予測に影響した強度を示す人間が読み取ることのできる説明(例:+++、–、+)。

ヒント

The prediction explanation strength value is not bounded to the values [-1, 1]; its interpretation may change as the number of features in the model changes. For normalized values, use qualitativeStrength instead. qualitativeStrength expresses the [-1, 1] range with visuals, with --- representing -1 and +++ representing 1. For explanations with the same qualitativeStrength, you can then use the strength value for ranking.

詳細については、予測の説明の出力の解釈のセクションを参照してください。

信頼性の監視を備えた予測の作成

信頼性の監視を備えた予測では、ユーザー定義の信頼性ルールを使用して予測を監視できます。

予測が「不確かな予測」トリガーに対して提供されたしきい値の範囲外になると、トリガーに割り当てられたアクションがデフォルトになります。 トリガーがアクティブになると、信頼性キーが予測応答の本文に追加されます。

以下に示すのは、サンプルの応答本文です。これは、Uncertain Prediction TriggerAction - No Operationを使用した連続値プロジェクトの応答です。

{
  "data": [
    {
      "predictionValues": [
        {
          "value": 122.8034057617,
          "label": "length"
        }
      ],
      "prediction": 122.8034057617,
      "rowId": 99,
      "humility": [
        {
          "ruleId": "5ebad4735f11b33a38ff3e0d",
          "triggered": true,
          "ruleName": "Uncertain Prediction Trigger"
        }
      ]
    }
  ]
} 

以下に示すのは、連続値モデルデプロイの応答本文の例です。 これは、「エラーを発生」アクションが設定された「不確かな予測」トリガーを使用します。

480 Error: {"message":"Humility ReturnError action triggered."} 

以下に示すのは、連続値モデルデプロイの応答本文の例です。 これは、「予測のオーバーライド」アクションが設定された「不確かな予測」トリガーを使用します。

{
  "data": [
    {
      "predictionValues": [
        {
          "value": 122.8034057617,
          "label": "length"
        }
      ],
      "prediction": 5220,
      "rowId": 99,
      "humility": [
        {
          "ruleId": "5ebad4735f11b33a38ff3e0d",
          "triggered": true,
          "ruleName": "Uncertain Prediction Trigger"
        }
      ]
    }
  ]
} 

応答スキーム

応答スキーマ標準の予測と一貫性がありますが、各Humilityオブジェクトの列のサブセットを含む新しい信頼性列が追加されます。

名前 タイプ 備考
ruleId 文字列 デプロイに割り当てられた信頼性ルールのID
トリガー済み ブーリアン ルールがトリガーされたかどうかに応じて、「True」または「False」を返します
ruleName 文字列 ユーザーによって定義されたルールまたはタイムスタンプを使用して自動生成されたルールの名前

エラーレスポンス

エラーはすべて200コード属性以外で表示されます。 4XXで始まるコードはリクエストエラーであることを示します(列の欠損、間違った認証情報、不明なモデルIDなど)。 メッセージ属性は、4XXコードが発生した場合、エラーの詳細説明を表示します。 例:

curl -H "Content-Type: application/json" -X POST --data '' \
    -H "Authorization: Bearer <API key>" \
    https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>

HTTP/1.1 400 BAD REQUEST
Date: Fri, 08 Feb 2019 11:00:00 GMT
Content-Type: application/json
Content-Length: 53
Connection: keep-alive
Server: nginx/1.12.2
X-DataRobot-Execution-Time: 332
X-DataRobot-Request-ID: fad6a0b62c1ff30db74c6359648d12fd

{
  "message": "The requested URL was not found on the server.  If you entered the URL manually, please check your spelling and try again."
} 

5XXで始まるコードはサーバー側のエラーを示します。 リクエストを再度試行するか、DataRobot担当者にお問い合わせください。

制限に関する説明

ここでは、専用予測インスタンスのサイズおよびタイムアウト制限について説明します。

  • 専用の予測サーバーに送信できるデータの最大量は、50MBです。

  • 行数の制限はありませんが、以下のタイムアウト制限があります。

    • オンプレミスデプロイ:設定に応じて異なる
    • マネージドAIクラウド:600秒

    リクエストがタイムアウトを超える場合、または専用予測サーバーを使用して大きなファイルのスコアリングを行う場合は、バッチスコアリングパッケージの使用を検討してください。

HTTPリクエストラインのサイズに制限があります(現在の制限は 8192バイトです)。

  • マネージドAIクラウドデプロイの場合、専用予測APIサーバーは、600秒以上アイドル状態になると、持続的なHTTP接続を自動で終了します。 持続接続を使用するには、クライアント側でこれらの切断を正しく処理できる必要があります。 次の例は、送信が失敗した場合にHTTPリクエストを自動的に再試行するようPython HTTPライブラリrequestsを設定します。
import requests
import urllib3

# create a transport adapter that will automatically retry GET/POST/HEAD requests on failures up to 3 times
adapter = requests.adapters.HTTPAdapter(
    max_retries=urllib3.Retry(
        total=3,
        method_whitelist=frozenset(['GET', 'POST', 'HEAD'])
    )
)

# create a Session (a pool of connections) and make it use the given adapter for HTTP and HTTPS requests
session = requests.Session()
session.mount('http://', adapter)
session.mount('https://', adapter)

# execute a prediction request that will be retried on transport failures, if needed
api_token = '<your api token>'
dr_key = '<your datarobot key>'
response = session.post(
    'https://example.datarobot.com/predApi/v1.0/deployments/<deploymentId>/predictions',
    headers={
        'Authorization': 'Bearer %s' % api_token,
        'DataRobot-Key': dr_key,
        'Content-Type': 'text/csv',
    },
    data='<your scoring data>',
)

print(response.content) 

モデルのキャッシュ

専用予測サーバーは、必要に応じてDataRobotクラスターからモデルをフェッチします。 同じモデルを使用する後続の予測の処理速度を向上させるために、DataRobotは特定の数のモデルをメモリーに格納(キャッシュ)します。 キャッシュがいっぱいになった場合に新しいモデルリクエストをするには、キャッシュ内の既存のモデルを1つ削除する必要があります。 DataRobotでは、最も以前に使用されたモデルが削除されます(必ずしもキャッシュ内に最も長く格納されているモデルではありません)。

オンプレミスインストールの場合、キャッシュのデフォルトサイズは16モデルですが、このサイズはインストールごとに異なります。 特定のインストールのキャッシュサイズに関する質問については、DataRobotサポートに問い合わせてください。

予測サーバーは、複数の予測処理を実行します。それぞれの予測処理には、独自の排他的モデルキャッシュがあります。 予測処理は相互に共有されません。 そのため、2つのリクエストを連続して予測サーバーに送信した場合、それぞれのリクエストでモデルデータをダウンロードする必要が生じることがあります。

予測サーバーからの各応答には、使用されたモデルがキャッシュ内にあったかどうかを示す1つのヘッダー(X-DataRobot-Model-Cache-Hit)が含まれます。 モデルがキャッシュにあった場合、ヘッダーの値はtrueです。値がfalseの場合、モデルはキャッシュにありませんでした。

予測をすばやく作成するためのベストプラクティス

以下のチェックリストに予測をすばやく作成するための推奨事項をまとめます。

  • 持続的HTTP接続を実装する。これで予測APIへのネットワークラウンドトリップが削減され、レイテンシーが削減されます。

  • CSVデータを使用する。大量のデータのJSONシリアル化はCSVを使用するよりも長い時間がかかるので、予測入力にCCSVを使用することを検討してください。

  • リクエストされたモデルの数を少なくする。これで予測APIでモデルキャッシュを使用できるようになります。

  • データをチャンクにまとめる。50MBのリクエスト制限を超えずに、可能な限り多くの行をバッチにまとめます。 大きなファイルをスコアリングする場合は、ローカルファイルのスコアリングに加えて、S3とデータベース間のスコアリングもサポートするバッチ予測APIの使用を検討してください。


更新しました December 22, 2022
Back to top