Skip to content

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

データソースの設定

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

時系列のサポート

The DataRobot Model Metrics (DMM) library does not support time series models, specifically data export for time series models. To export and retrieve data, use the DataRobot API client.

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()
.
.
. 

更新しました January 3, 2025