Skip to content

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

データソースの設定

最も一般的に使用されるデータソースはDataRobotSourceです。 このデータソースはDataRobotに接続して、DataRobotプラットフォームから選択された予測データを取得します。 さらに3つのデフォルトデータソースDataRobotSourceBatchDataRobotSource、およびDataFrameSourceが利用可能です。

時系列のサポート

DataRobotモデル指標(DMM)ライブラリは、時系列モデル、特に時系列モデルの データエクスポートサポートしていません。 データのエクスポートと取得には、 DataRobot APIクライアントを使用します。

DataRobotソースの設定

DataRobotSourceはDataRobotに接続して、DataRobotプラットフォームから選択された予測データを取得します。 次の必須パラメーターでDataRobotSourceを初期化します。

from dmm.data_source import DataRobotSource

source = DataRobotSource(
    base_url=DATAROBOT_ENDPOINT,
    token=DATAROBOT_API_TOKEN,
    deployment_id=deployment_id,
    start=start_of_export_window,
    end=end_of_export_window,
) 

base_urlおよびtokenパラメーターを、環境変数のos.environ['DATAROBOT_ENDPOINT']およびos.environ['DATAROBOT_API_TOKEN']として指定することもできます。

from dmm.data_source import DataRobotSource

source = DataRobotSource(
    deployment_id=deployment_id,
    start=start_of_export_window,
    end=end_of_export_window,
) 

次の例では、すべてのパラメーターでDataRobotSourceを初期化します。

from dmm.data_source import DataRobotSource

source = DataRobotSource(
    base_url=DATAROBOT_ENDPOINT,
    token=DATAROBOT_API_TOKEN,
    client=None,
    deployment_id=deployment_id,
    model_id=model_id,
    start=start_of_export_window,
    end=end_of_export_window,
    max_rows=10000,
    delete_exports=False,
    use_cache=False,
    actuals_with_matched_predictions=True,
) 
パラメーター 説明
base_url: str DataRobot API URL(例:https://app.datarobot.com/api/v2)。
token: str 開発者ツールからのDataRobot APIトークン。
client: Optional[DataRobotClient] base_urlおよびtokenの代わりにDataRobotClientオブジェクトを使用します。
deployment_id: str カスタム指標によって評価されるデプロイのID。
model_id: Optional[str] カスタム指標によって評価されるモデルのID。 モデルIDを指定しない場合、チャンピオンモデルIDが使用されます。
start: datetime エクスポートウィンドウの開始。 データの取得を開始する日付を定義します。
end: datetime エクスポートウィンドウの終了。 データの取得を終了する日付を定義します。
max_rows: Optional[int] 要求されたデータがメモリーに収まらない場合に、一度に取得する最大の行数。
delete_exports: Optional[bool] AIカタログで作成されたエクスポート済みデータを含むデータセットを自動的に削除するかどうか。 Trueは削除用に設定します。デフォルト値はFalseです。
use_cache: Optional[bool] 以前のエクスポートに含まれる時間範囲に対して、AIカタログに保存されている既存のデータセットを使用するかどうか。 Trueは以前のエクスポートで使用されたデータセットを使用します。デフォルト値はFalseです。
actuals_with_matched_predictions: Optional[bool] 一致する予測値なしで実測値をエクスポートするかどうか。 Falseは一致しないエクスポートを許可しません。デフォルト値はTrueです。

予測データのインポート

get_prediction_dataメソッドは、適切なチャンクIDがある予測データのチャンクを返します。返されるデータチャンクは、max_rowsパラメーターに関する行数があるpandas DataFrameです。 このメソッドは、データソースが使い切られるまでデータを返します。

prediction_df_1, prediction_chunk_id_1 = source.get_prediction_data()

print(prediction_df_1.head(5).to_string())
print(f"chunk id: {prediction_chunk_id_1}")

   DR_RESERVED_PREDICTION_TIMESTAMP  DR_RESERVED_PREDICTION_VALUE_high  DR_RESERVED_PREDICTION_VALUE_low date_non_unique date_random  id       年月日
0  2023-09-13 11:02:51.248000+00:00                           0.697782                          0.302218      1950-10-01  1949-01-27   1  1949-01-01
1  2023-09-13 11:02:51.252000+00:00                           0.581351                          0.418649      1959-04-01  1949-02-03   2  1949-02-01
2  2023-09-13 11:02:51.459000+00:00                           0.639347                          0.360653      1954-05-01  1949-03-28   3  1949-03-01
3  2023-09-13 11:02:51.459000+00:00                           0.627727                          0.372273      1951-09-01  1949-04-07   4  1949-04-01
4  2023-09-13 11:02:51.664000+00:00                           0.591612                          0.408388      1951-03-01  1949-05-16   5  1949-05-01
chunk id: 0 

データソースを使い切ると、None-1が返されます。

prediction_df_2, prediction_chunk_id_2 = source.get_prediction_data()

print(prediction_df_2)
print(prediction_chunk_id_2)

None
chunk id: -1 

resetメソッドは、使い切ったデータソースをリセットして、最初からイテレーションできるようにします。

source.reset() 

get_all_prediction_dataメソッドは、単一のDataFrameの1つのデータソースオブジェクトで使用できるすべての予測データを返します。

prediction_df = source.get_all_prediction_data() 

実測値データのエクスポート

get_actuals_dataメソッドは、適切なチャンクIDがある実測値データのチャンクを返します。返されるデータチャンクは、max_rowsパラメーターに関する行数があるpandas DataFrameです。 このメソッドは、データソースが使い切られるまでデータを返します。

actuals_df_1, actuals_chunk_id_1 = source.get_actuals_data()

print(actuals_df_1.head(5).to_string())
print(f"chunk id: {actuals_chunk_id_1}")

     association_id                  timestamp label  actuals  predictions predicted_class
0                 1  2023-09-13 11:00:00+00:00   low        0     0.302218            high
194              57  2023-09-13 11:00:00+00:00   low        1     0.568564             low
192              56  2023-09-13 11:00:00+00:00   low        1     0.569865             low
190              55  2023-09-13 11:00:00+00:00   low        0     0.473282            high
196              58  2023-09-13 11:00:00+00:00   low        1     0.573861             low
chunk id: 0 

postgresqlからのデータ形式で元のデータを返すには、return_original_column_namesパラメーターをTrueに設定します。

actuals_df_1, actuals_chunk_id_1 = source.get_actuals_data()

print(actuals_df_1.head(5).to_string())
print(f"chunk id: {actuals_chunk_id_1}")

     id                  timestamp label  actuals         y predicted_class
0     1  2023-09-13 11:00:00+00:00   low        0  0.302218            high
194  57  2023-09-13 11:00:00+00:00   low        1  0.568564             low
192  56  2023-09-13 11:00:00+00:00   low        1  0.569865             low
190  55  2023-09-13 11:00:00+00:00   low        0  0.473282            high
196  58  2023-09-13 11:00:00+00:00   low        1  0.573861             low
chunk id: 0 

単一のDataFrame内の1つのソースオブジェクトに対して使用できるすべての実測値データを返すには、get_all_actuals_dataメソッドを使用します。

actuals_df = source.get_all_actuals_data() 

データソースを使い切ると、None-1が返されます。

actuals_df_2, actuals_chunk_id_2 = source.get_actuals_data()

print(actuals_df_2)
print(actuals_chunk_id_2)

None
chunk id: -1 

resetメソッドは、使い切ったデータソースをリセットして、最初からイテレーションできるようにします。

source.reset()  

トレーニングデータのエクスポート

get_training_dataメソッドは、1回の呼び出しでトレーニングに使用されるすべてのデータを返します。 返されるデータはpandas DataFrameです。

train_df = source.get_training_data()
print(train_df.head(5).to_string())

      y date_random date_non_unique       年月日
0  high  1949-01-27      1950-10-01  1949-01-01
1  high  1949-02-03      1959-04-01  1949-02-01
2   low  1949-03-28      1954-05-01  1949-03-01
3  high  1949-04-07      1951-09-01  1949-04-01
4  high  1949-05-16      1951-03-01  1949-05-01 

結合データのエクスポート

get_dataメソッドはcombined_dataを返します。これには、マージされたスコアリングデータ、予測値、および一致した実測値が含まれます。 この MetricEvaluatorは、このメソッドをメインのデータエクスポート法として使用します。

df, chunk_id_1 = source.get_data()
print(df.head(5).to_string())
print(f"chunk id: {chunk_id_1}")

                          timestamp  predictions date_non_unique date_random  association_id       年月日 predicted_class label  actuals
0  2023-09-13 11:02:51.248000+00:00     0.302218      1950-10-01  1949-01-27               1  1949-01-01            high   low        0
1  2023-09-13 11:02:51.252000+00:00     0.418649      1959-04-01  1949-02-03               2  1949-02-01            high   low        0
2  2023-09-13 11:02:51.459000+00:00     0.360653      1954-05-01  1949-03-28               3  1949-03-01            high   low        1
3  2023-09-13 11:02:51.459000+00:00     0.372273      1951-09-01  1949-04-07               4  1949-04-01            high   low        0
4  2023-09-13 11:02:51.664000+00:00     0.408388      1951-03-01  1949-05-16               5  1949-05-01            high   low        0
chunk id: 0 

get_all_dataは、単一のDataFrame内のそのソースオブジェクトで使用できるすべての結合データを返します。

df = source.get_all_data() 

DataRobotバッチデプロイソースの設定

BatchDataRobotSourceインターフェイスはバッチデプロイ用です。 次の例では、すべてのパラメーターでBatchDataRobotSourceを初期化します。

from dmm.data_source import BatchDataRobotSource

source = BatchDataRobotSource(
    base_url=DATAROBOT_ENDPOINT,
    token=DATAROBOT_API_TOKEN,
    client=None,
    deployment_id=deployment_id,
    model_id=model_id,
    batch_ids=batch_ids,
    max_rows=10000,
    delete_exports=False,
    use_cache=False,
) 

このメソッドのパラメーターは、DataRobotSourceのパラメーターと類似しています。 最も重要な違いは、時間範囲(開始と終了)の代わりに、バッチIDを指定する必要があることです。 さらに、バッチソースは実測値のエクスポートをサポートしていません。

get_prediction_dataメソッドは、適切なチャンクIDがある予測データのチャンクを返します。返されるデータチャンクは、max_rowsパラメーターに関する行数があるpandas DataFrameです。 このメソッドは、データソースが使い切られるまでデータを返します。

prediction_df_1, prediction_chunk_id_1 = source.get_prediction_data()
print(prediction_df_1.head(5).to_string())
print(f"chunk id: {prediction_chunk_id_1}")

    AGE       B  CHAS     CRIM     DIS                  batch_id    DR_RESERVED_BATCH_NAME                         timestamp   INDUS  LSTAT  MEDV    NOX  PTRATIO  RAD     RM  TAX    ZN  id
0  65.2  396.90     0  0.00632  4.0900                <batch_id>                    batch1  2023-06-23 09:47:47.060000+00:00    2.31   4.98  24.0  0.538     15.3    1  6.575  296  18.0   1
1  78.9  396.90     0  0.02731  4.9671                <batch_id>                    batch1  2023-06-23 09:47:47.060000+00:00    7.07   9.14  21.6  0.469     17.8    2  6.421  242   0.0   2
2  61.1  392.83     0  0.02729  4.9671                <batch_id>                    batch1  2023-06-23 09:47:47.060000+00:00    7.07   4.03  34.7  0.469     17.8    2  7.185  242   0.0   3
3  45.8  394.63     0  0.03237  6.0622                <batch_id>                    batch1  2023-06-23 09:47:47.060000+00:00    2.18   2.94  33.4  0.458     18.7    3  6.998  222   0.0   4
4  54.2  396.90     0  0.06905  6.0622                <batch_id>                    batch1  2023-06-23 09:47:47.060000+00:00    2.18   5.33  36.2  0.458     18.7    3  7.147  222   0.0   5
chunk id: 0

prediction_df = source.get_all_prediction_data()

source.reset()

df, chunk_id_1 = source.get_data() 

get_training_dataメソッドは、1回の呼び出しでトレーニングに使用されるすべてのデータを返します。 返されるデータはpandas DataFrameです。

train_df = source.get_training_data() 

DataFrameソースの設定

DataRobotから直接データをエクスポートしないで、(たとえば)ローカルでダウンロードした場合、そのデータセットをDataFrameSourceにロードできます。 DataFrameSourceメソッドは、任意のpd.DataFrameをラップして、ライブラリ互換のソースを作成します。 これは、独自のデータを取り込むときにライブラリを操作する最も簡単な方法です。

source = DataFrameSource(
    df=pd.read_csv("./data_hour_of_week.csv"),
    max_rows=10000,
    timestamp_col="date"
)

df, chunk_id_1 = source.get_data()
print(df.head(5).to_string())
print(f"chunk id: {chunk_id_1}")

                  date         y
0  1959-12-31 23:59:57 -0.183669
1  1960-01-01 01:00:02  0.283993
2  1960-01-01 01:59:52  0.020663
3  1960-01-01 03:00:14  0.404304
4  1960-01-01 03:59:58  1.005252
chunk id: 0 

さらに、新しいデータソース定義を作成することもできます。 新しいデータソースを定義するために、DataSourceBaseインターフェイスをカスタマイズして実装できます。

TimeBucketの設定

TimeBucketクラス列挙(enum)は、時間経過に伴い、必要なデータ集計のきめ細かさを定義します。 デフォルトでは、TimeBucketTimeBucket.ALLに設定されます。 SECONDMINUTEHOURDAYWEEKMONTHQUARTER、またはALLのいずれの値も指定できます。 TimeBucket値を変更するには、initメソッド:source.init(time_bucket)を使用します。

# Generate a dummy DataFrame with 2 rows per time bucket (Hour in this scenario)
test_df = gen_dataframe_for_accuracy_metric(
    nr_rows=10,
    rows_per_time_bucket=2,
    prediction_value=1,
    with_actuals=True,
    with_predictions=True,
    time_bucket=TimeBucket.HOUR,
)
print(test_df)
                    timestamp  predictions  actuals
0  01/06/2005 13:00:00.000000            1    0.999
1  01/06/2005 13:00:00.000000            1    0.999
2  01/06/2005 14:00:00.000000            1    0.999
3  01/06/2005 14:00:00.000000            1    0.999
4  01/06/2005 15:00:00.000000            1    0.999
5  01/06/2005 15:00:00.000000            1    0.999
6  01/06/2005 16:00:00.000000            1    0.999
7  01/06/2005 16:00:00.000000            1    0.999
8  01/06/2005 17:00:00.000000            1    0.999
9  01/06/2005 17:00:00.000000            1    0.999

# Use DataFrameSource and load created DataFrame
source = DataFrameSource(
    df=test_df,
    max_rows=10000,
    timestamp_col="timestamp",
)
# Init source with the selected TimeBucket
source.init(TimeBucket.HOUR)
df, _ = source.get_data()
print(df)
                    timestamp predictions actuals
0  01/06/2005 13:00:00.000000           1   0.999
1  01/06/2005 13:00:00.000000           1   0.999
df, _ = source.get_data()
print(df)
                    timestamp predictions actuals
2  01/06/2005 14:00:00.000000           1   0.999
3  01/06/2005 14:00:00.000000           1   0.999

source.init(TimeBucket.DAY)
df, _ = source.get_data()
print(df)
                    timestamp predictions actuals
0  01/06/2005 13:00:00.000000           1   0.999
1  01/06/2005 13:00:00.000000           1   0.999
2  01/06/2005 14:00:00.000000           1   0.999
3  01/06/2005 14:00:00.000000           1   0.999
4  01/06/2005 15:00:00.000000           1   0.999
5  01/06/2005 15:00:00.000000           1   0.999
6  01/06/2005 16:00:00.000000           1   0.999
7  01/06/2005 16:00:00.000000           1   0.999
8  01/06/2005 17:00:00.000000           1   0.999
9  01/06/2005 17:00:00.000000           1   0.999 

返されたデータチャンクは、選択したTimeBucketに従います。 これはMetricEvaluatorで役立ちます。 TimeBucketに加えて、ソースは、データチャンクを生成するとき、たとえば、上記の例と同じデータセットを使用する(ただし、max_rows3に設定する)とき、max_rowsパラメーターを順守します。

source = DataFrameSource(
    df=test_df,
    max_rows=3,
    timestamp_col="timestamp",
)
source.init(TimeBucket.DAY)
df, chunk_id = source.get_data()
print(df)
                    timestamp predictions actuals
0  01/06/2005 13:00:00.000000           1   0.999
1  01/06/2005 13:00:00.000000           1   0.999
2  01/06/2005 14:00:00.000000           1   0.999 

DataRobotSourceでは、1つのチャンクで返されるトレーニングデータのエクスポートを除き、すべてのエクスポートタイプに対してTimeBucketおよびmax_rowsパラメーターを指定できます。

追加のDataRobotデプロイプロパティの指定

Deploymentクラスはヘルパークラスであり、関連するデプロイプロパティへのアクセスを提供します。 このクラスは、データを操作する適切なワークフローを選択するために、DataRobotSource内で使用されます。

import datarobot as dr
from dmm.data_source.datarobot.deployment import Deployment
DataRobotClient()
deployment = Deployment(deployment_id=deployment_id)

deployment_type = deployment.type()
target_column = deployment.target_column()
positive_class_label = deployment.positive_class_label()
negative_class_label = deployment.negative_class_label()
prediction_threshold = deployment.prediction_threshold()
.
.
. 

更新しました 2025年3月12日