データフレーム分析ジョブAPIの作成
データフレーム分析ジョブをインスタンス化します。
リクエスト
PUT _ml/data_frame/analytics/<data_frame_analytics_id>
前提条件
次の権限が必要です:
- クラスター:
manage_ml
(machine_learning_admin
ビルトインロールがこの権限を付与します) - ソースインデックス:
read
,view_index_metadata
- デスティネーションインデックス:
read
,create_index
,manage
およびindex
データフレーム分析ジョブは、作成時にそのジョブを作成したユーザーが持っていたロールを記憶します。ジョブを開始すると、それらの同じロールを使用して分析を実行します。セカンダリアイソリューションヘッダーを提供した場合、それらの資格情報が代わりに使用されます。
説明
このAPIは、ソースインデックスに対して分析を実行し、その結果をデスティネーションインデックスに保存するデータフレーム分析ジョブを作成します。
デスティネーションインデックスが存在しない場合、ジョブを開始すると自動的に作成されます。データフレーム分析ジョブの開始を参照してください。
回帰または分類パラメータのサブセットのみを提供した場合、ハイパーパラメータ最適化が行われます。未定義の各パラメータの値が決定されます。
パスパラメータ
<data_frame_analytics_id>
- (必須、文字列)データフレーム分析ジョブの識別子。この識別子は、小文字の英数字(a-zおよび0-9)、ハイフン、アンダースコアを含むことができます。英数字で始まり、英数字で終わる必要があります。
データフレーム分析ジョブAPIの作成
データフレーム分析ジョブをインスタンス化します。
例
前処理アクションの例
以下の例は、分析の範囲を特定のフィールドに制限し、宛先インデックスで除外するフィールドを指定し、分析前にデータをフィルタリングするためのクエリを使用する方法を示しています。
Python
resp = client.ml.put_data_frame_analytics(
id="model-flight-delays-pre",
source={
"index": [
"kibana_sample_data_flights"
],
"query": {
"range": {
"DistanceKilometers": {
"gt": 0
}
}
},
"_source": {
"includes": [],
"excludes": [
"FlightDelay",
"FlightDelayType"
]
}
},
dest={
"index": "df-flight-delays",
"results_field": "ml-results"
},
analysis={
"regression": {
"dependent_variable": "FlightDelayMin",
"training_percent": 90
}
},
analyzed_fields={
"includes": [],
"excludes": [
"FlightNum"
]
},
model_memory_limit="100mb",
)
print(resp)
Js
const response = await client.ml.putDataFrameAnalytics({
id: "model-flight-delays-pre",
source: {
index: ["kibana_sample_data_flights"],
query: {
range: {
DistanceKilometers: {
gt: 0,
},
},
},
_source: {
includes: [],
excludes: ["FlightDelay", "FlightDelayType"],
},
},
dest: {
index: "df-flight-delays",
results_field: "ml-results",
},
analysis: {
regression: {
dependent_variable: "FlightDelayMin",
training_percent: 90,
},
},
analyzed_fields: {
includes: [],
excludes: ["FlightNum"],
},
model_memory_limit: "100mb",
});
console.log(response);
コンソール
PUT _ml/data_frame/analytics/model-flight-delays-pre
{
"source": {
"index": [
"kibana_sample_data_flights"
],
"query": {
"range": {
"DistanceKilometers": {
"gt": 0
}
}
},
"_source": {
"includes": [],
"excludes": [
"FlightDelay",
"FlightDelayType"
]
}
},
"dest": {
"index": "df-flight-delays",
"results_field": "ml-results"
},
"analysis": {
"regression": {
"dependent_variable": "FlightDelayMin",
"training_percent": 90
}
},
"analyzed_fields": {
"includes": [],
"excludes": [
"FlightNum"
]
},
"model_memory_limit": "100mb"
}
分析するソースインデックス。 | |
このクエリは、宛先インデックスに存在しない全体のドキュメントをフィルタリングします。 | |
_source オブジェクトは、宛先インデックスに含まれるか除外されるデータセットのフィールドを定義します。 |
|
_source オブジェクトで指定されたソースインデックスのフィールドと分析結果を含む宛先インデックスを定義します。また、results_field の名前も定義します。 |
|
分析に含めるか除外するフィールドを指定します。これは、フィールドが宛先インデックスに存在するかどうかには影響せず、分析に使用されるかどうかにのみ影響します。 |
この例では、FlightDelay
と FlightDelayType
を除外フィールドとして excludes
パラメータで定義しているため、ソースインデックスのすべてのフィールドが宛先インデックスに含まれています。FlightNum
フィールドは宛先インデックスに含まれていますが、analyzed_fields
オブジェクトの excludes
パラメータで明示的に除外フィールドとして指定されているため、分析には含まれていません。
外れ値検出の例
以下の例は、loganalytics
データフレーム分析ジョブを作成します。分析タイプは outlier_detection
です。
Python
resp = client.ml.put_data_frame_analytics(
id="loganalytics",
description="Outlier detection on log data",
source={
"index": "logdata"
},
dest={
"index": "logdata_out"
},
analysis={
"outlier_detection": {
"compute_feature_influence": True,
"outlier_fraction": 0.05,
"standardization_enabled": True
}
},
)
print(resp)
Js
const response = await client.ml.putDataFrameAnalytics({
id: "loganalytics",
description: "Outlier detection on log data",
source: {
index: "logdata",
},
dest: {
index: "logdata_out",
},
analysis: {
outlier_detection: {
compute_feature_influence: true,
outlier_fraction: 0.05,
standardization_enabled: true,
},
},
});
console.log(response);
コンソール
PUT _ml/data_frame/analytics/loganalytics
{
"description": "Outlier detection on log data",
"source": {
"index": "logdata"
},
"dest": {
"index": "logdata_out"
},
"analysis": {
"outlier_detection": {
"compute_feature_influence": true,
"outlier_fraction": 0.05,
"standardization_enabled": true
}
}
}
コンソール-結果
{
"id" : "loganalytics",
"create_time" : 1656364565517,
"version" : "8.4.0",
"authorization" : {
"roles" : [
"superuser"
]
},
"description" : "Outlier detection on log data",
"source" : {
"index" : [
"logdata"
],
"query" : {
"match_all" : { }
}
},
"dest" : {
"index" : "logdata_out",
"results_field" : "ml"
},
"analysis" : {
"outlier_detection" : {
"compute_feature_influence" : true,
"outlier_fraction" : 0.05,
"standardization_enabled" : true
}
},
"model_memory_limit" : "1gb",
"allow_lazy_start" : false,
"max_num_threads" : 1
}
回帰の例
以下の例は、house_price_regression_analysis
データフレーム分析ジョブを作成します。分析タイプは regression
です。
Python
resp = client.ml.put_data_frame_analytics(
id="house_price_regression_analysis",
source={
"index": "houses_sold_last_10_yrs"
},
dest={
"index": "house_price_predictions"
},
analysis={
"regression": {
"dependent_variable": "price"
}
},
)
print(resp)
Js
const response = await client.ml.putDataFrameAnalytics({
id: "house_price_regression_analysis",
source: {
index: "houses_sold_last_10_yrs",
},
dest: {
index: "house_price_predictions",
},
analysis: {
regression: {
dependent_variable: "price",
},
},
});
console.log(response);
コンソール
PUT _ml/data_frame/analytics/house_price_regression_analysis
{
"source": {
"index": "houses_sold_last_10_yrs"
},
"dest": {
"index": "house_price_predictions"
},
"analysis":
{
"regression": {
"dependent_variable": "price"
}
}
}
コンソール-結果
{
"id" : "house_price_regression_analysis",
"create_time" : 1656364845151,
"version" : "8.4.0",
"authorization" : {
"roles" : [
"superuser"
]
},
"source" : {
"index" : [
"houses_sold_last_10_yrs"
],
"query" : {
"match_all" : { }
}
},
"dest" : {
"index" : "house_price_predictions",
"results_field" : "ml"
},
"analysis" : {
"regression" : {
"dependent_variable" : "price",
"prediction_field_name" : "price_prediction",
"training_percent" : 100.0,
"randomize_seed" : -3578554885299300212,
"loss_function" : "mse",
"early_stopping_enabled" : true
}
},
"model_memory_limit" : "1gb",
"allow_lazy_start" : false,
"max_num_threads" : 1
}
以下の例は、ジョブを作成し、トレーニングパーセントを指定します:
Python
resp = client.ml.put_data_frame_analytics(
id="student_performance_mathematics_0.3",
source={
"index": "student_performance_mathematics"
},
dest={
"index": "student_performance_mathematics_reg"
},
analysis={
"regression": {
"dependent_variable": "G3",
"training_percent": 70,
"randomize_seed": 19673948271
}
},
)
print(resp)
Js
const response = await client.ml.putDataFrameAnalytics({
id: "student_performance_mathematics_0.3",
source: {
index: "student_performance_mathematics",
},
dest: {
index: "student_performance_mathematics_reg",
},
analysis: {
regression: {
dependent_variable: "G3",
training_percent: 70,
randomize_seed: 19673948271,
},
},
});
console.log(response);
コンソール
PUT _ml/data_frame/analytics/student_performance_mathematics_0.3
{
"source": {
"index": "student_performance_mathematics"
},
"dest": {
"index":"student_performance_mathematics_reg"
},
"analysis":
{
"regression": {
"dependent_variable": "G3",
"training_percent": 70,
"randomize_seed": 19673948271
}
}
}
モデルのトレーニングに使用されるデータセットの割合。 | |
トレーニングに使用されるデータをランダムに選択するために使用されるシード。 |
以下の例では、カスタムフィーチャープロセッサを使用して、DestWeather
のカテゴリカル値をワンホット、ターゲット平均、および頻度エンコーディング技術を使用して数値値に変換します:
Python
resp = client.ml.put_data_frame_analytics(
id="flight_prices",
source={
"index": [
"kibana_sample_data_flights"
]
},
dest={
"index": "kibana_sample_flight_prices"
},
analysis={
"regression": {
"dependent_variable": "AvgTicketPrice",
"num_top_feature_importance_values": 2,
"feature_processors": [
{
"frequency_encoding": {
"field": "DestWeather",
"feature_name": "DestWeather_frequency",
"frequency_map": {
"Rain": 0.14604811155570188,
"Heavy Fog": 0.14604811155570188,
"Thunder & Lightning": 0.14604811155570188,
"Cloudy": 0.14604811155570188,
"Damaging Wind": 0.14604811155570188,
"Hail": 0.14604811155570188,
"Sunny": 0.14604811155570188,
"Clear": 0.14604811155570188
}
}
},
{
"target_mean_encoding": {
"field": "DestWeather",
"feature_name": "DestWeather_targetmean",
"target_map": {
"Rain": 626.5588814585794,
"Heavy Fog": 626.5588814585794,
"Thunder & Lightning": 626.5588814585794,
"Hail": 626.5588814585794,
"Damaging Wind": 626.5588814585794,
"Cloudy": 626.5588814585794,
"Clear": 626.5588814585794,
"Sunny": 626.5588814585794
},
"default_value": 624.0249512020454
}
},
{
"one_hot_encoding": {
"field": "DestWeather",
"hot_map": {
"Rain": "DestWeather_Rain",
"Heavy Fog": "DestWeather_Heavy Fog",
"Thunder & Lightning": "DestWeather_Thunder & Lightning",
"Cloudy": "DestWeather_Cloudy",
"Damaging Wind": "DestWeather_Damaging Wind",
"Hail": "DestWeather_Hail",
"Clear": "DestWeather_Clear",
"Sunny": "DestWeather_Sunny"
}
}
}
]
}
},
analyzed_fields={
"includes": [
"AvgTicketPrice",
"Cancelled",
"DestWeather",
"FlightDelayMin",
"DistanceMiles"
]
},
model_memory_limit="30mb",
)
print(resp)
Js
const response = await client.ml.putDataFrameAnalytics({
id: "flight_prices",
source: {
index: ["kibana_sample_data_flights"],
},
dest: {
index: "kibana_sample_flight_prices",
},
analysis: {
regression: {
dependent_variable: "AvgTicketPrice",
num_top_feature_importance_values: 2,
feature_processors: [
{
frequency_encoding: {
field: "DestWeather",
feature_name: "DestWeather_frequency",
frequency_map: {
Rain: 0.14604811155570188,
"Heavy Fog": 0.14604811155570188,
"Thunder & Lightning": 0.14604811155570188,
Cloudy: 0.14604811155570188,
"Damaging Wind": 0.14604811155570188,
Hail: 0.14604811155570188,
Sunny: 0.14604811155570188,
Clear: 0.14604811155570188,
},
},
},
{
target_mean_encoding: {
field: "DestWeather",
feature_name: "DestWeather_targetmean",
target_map: {
Rain: 626.5588814585794,
"Heavy Fog": 626.5588814585794,
"Thunder & Lightning": 626.5588814585794,
Hail: 626.5588814585794,
"Damaging Wind": 626.5588814585794,
Cloudy: 626.5588814585794,
Clear: 626.5588814585794,
Sunny: 626.5588814585794,
},
default_value: 624.0249512020454,
},
},
{
one_hot_encoding: {
field: "DestWeather",
hot_map: {
Rain: "DestWeather_Rain",
"Heavy Fog": "DestWeather_Heavy Fog",
"Thunder & Lightning": "DestWeather_Thunder & Lightning",
Cloudy: "DestWeather_Cloudy",
"Damaging Wind": "DestWeather_Damaging Wind",
Hail: "DestWeather_Hail",
Clear: "DestWeather_Clear",
Sunny: "DestWeather_Sunny",
},
},
},
],
},
},
analyzed_fields: {
includes: [
"AvgTicketPrice",
"Cancelled",
"DestWeather",
"FlightDelayMin",
"DistanceMiles",
],
},
model_memory_limit: "30mb",
});
console.log(response);
コンソール
PUT _ml/data_frame/analytics/flight_prices
{
"source": {
"index": [
"kibana_sample_data_flights"
]
},
"dest": {
"index": "kibana_sample_flight_prices"
},
"analysis": {
"regression": {
"dependent_variable": "AvgTicketPrice",
"num_top_feature_importance_values": 2,
"feature_processors": [
{
"frequency_encoding": {
"field": "DestWeather",
"feature_name": "DestWeather_frequency",
"frequency_map": {
"Rain": 0.14604811155570188,
"Heavy Fog": 0.14604811155570188,
"Thunder & Lightning": 0.14604811155570188,
"Cloudy": 0.14604811155570188,
"Damaging Wind": 0.14604811155570188,
"Hail": 0.14604811155570188,
"Sunny": 0.14604811155570188,
"Clear": 0.14604811155570188
}
}
},
{
"target_mean_encoding": {
"field": "DestWeather",
"feature_name": "DestWeather_targetmean",
"target_map": {
"Rain": 626.5588814585794,
"Heavy Fog": 626.5588814585794,
"Thunder & Lightning": 626.5588814585794,
"Hail": 626.5588814585794,
"Damaging Wind": 626.5588814585794,
"Cloudy": 626.5588814585794,
"Clear": 626.5588814585794,
"Sunny": 626.5588814585794
},
"default_value": 624.0249512020454
}
},
{
"one_hot_encoding": {
"field": "DestWeather",
"hot_map": {
"Rain": "DestWeather_Rain",
"Heavy Fog": "DestWeather_Heavy Fog",
"Thunder & Lightning": "DestWeather_Thunder & Lightning",
"Cloudy": "DestWeather_Cloudy",
"Damaging Wind": "DestWeather_Damaging Wind",
"Hail": "DestWeather_Hail",
"Clear": "DestWeather_Clear",
"Sunny": "DestWeather_Sunny"
}
}
}
]
}
},
"analyzed_fields": {
"includes": [
"AvgTicketPrice",
"Cancelled",
"DestWeather",
"FlightDelayMin",
"DistanceMiles"
]
},
"model_memory_limit": "30mb"
}
これらのカスタムフィーチャープロセッサはオプションです。すべてのカテゴリカルフィーチャに対して自動フィーチャエンコーディングが引き続き行われます。
分類の例
以下の例は、loan_classification
データフレーム分析ジョブを作成します。分析タイプは classification
です。
Python
resp = client.ml.put_data_frame_analytics(
id="loan_classification",
source={
"index": "loan-applicants"
},
dest={
"index": "loan-applicants-classified"
},
analysis={
"classification": {
"dependent_variable": "label",
"training_percent": 75,
"num_top_classes": 2
}
},
)
print(resp)
Js
const response = await client.ml.putDataFrameAnalytics({
id: "loan_classification",
source: {
index: "loan-applicants",
},
dest: {
index: "loan-applicants-classified",
},
analysis: {
classification: {
dependent_variable: "label",
training_percent: 75,
num_top_classes: 2,
},
},
});
console.log(response);
コンソール
PUT _ml/data_frame/analytics/loan_classification
{
"source" : {
"index": "loan-applicants"
},
"dest" : {
"index": "loan-applicants-classified"
},
"analysis" : {
"classification": {
"dependent_variable": "label",
"training_percent": 75,
"num_top_classes": 2
}
}
}