データソースの設定¶
最も一般的に使用されるデータソースはDataRobotSource
です。 このデータソースはDataRobotに接続して、DataRobotプラットフォームから選択された予測データを取得します。 さらに3つのデフォルトデータソースDataRobotSource
、BatchDataRobotSource
、および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)は、時間経過に伴い、必要なデータ集計のきめ細かさを定義します。 デフォルトでは、TimeBucket
はTimeBucket.ALL
に設定されます。 SECOND
、MINUTE
、HOUR
、DAY
、WEEK
、MONTH
、QUARTER
、または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_rows
を3
に設定する)とき、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()
.
.
.