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