データフレーム分析APIの評価

注釈付きインデックスのデータフレーム分析を評価します。

リクエスト

POST _ml/data_frame/_evaluate

前提条件

次の権限が必要です:

  • クラスター: monitor_ml (この権限を付与するのはmachine_learning_user組み込みロール)
  • 目的地インデックス: read

説明

このAPIは、さまざまなタイプの機械学習機能に対して一般的に使用される評価指標をパッケージ化しています。これは、データフレーム分析によって作成されたインデックスでの使用を目的としています。評価には、グラウンドトゥルースフィールドと分析結果フィールドの両方が必要です。

リクエストボディ

  • evaluation
  • (必須、オブジェクト) 実行したい評価のタイプを定義します。 データフレーム分析評価リソースを参照してください。
    利用可能な評価タイプ:
    • outlier_detection
    • regression
    • classification
  • index
  • (必須、オブジェクト) 評価が実行されるindexを定義します。
  • query
  • (オプション、オブジェクト) ソースインデックスからデータのサブセットを取得するクエリ句。 クエリDSLを参照してください。

データフレーム分析評価リソース

外れ値検出評価オブジェクト

外れ値検出は、各ドキュメントが外れ値である確率を出力する外れ値検出分析の結果を評価します。

  • actual_field
  • (必須、文字列) indexのフィールドで、ground truthを含みます。このフィールドのデータ型はブール値または整数である必要があります。データ型が整数の場合、値は0 (false) または 1 (true) のいずれかでなければなりません。
  • predicted_probability_field
  • (必須、文字列) indexのフィールドで、アイテムが該当クラスに属するかどうかの確率を定義します。これは分析の結果を含むフィールドです。
  • metrics
  • (オプション、オブジェクト) 評価に使用される指標を指定します。指標が指定されていない場合、デフォルトで次のものが返されます:
    • auc_roc (include_curve: false),
    • precision (at: [0.25, 0.5, 0.75]),
    • recall (at: [0.25, 0.5, 0.75]),
    • confusion_matrix (at: [0.25, 0.5, 0.75]).
      • auc_roc
      • (オプション、オブジェクト) AUC ROC(受信者動作特性の曲線下面積)スコアとオプションで曲線。デフォルト値は{“include_curve”: false}です。
      • confusion_matrix
      • (オプション、オブジェクト) 指標(tp - 真陽性、fp - 偽陽性、tn - 真陰性、fn - 偽陰性)が計算される外れ値スコアの異なる閾値を設定します。デフォルト値は{“at”: [0.25, 0.50, 0.75]}です。
      • precision
      • (オプション、オブジェクト) 指標が計算される外れ値スコアの異なる閾値を設定します。デフォルト値は{“at”: [0.25, 0.50, 0.75]}です。
      • recall
      • (オプション、オブジェクト) 指標が計算される外れ値スコアの異なる閾値を設定します。デフォルト値は{“at”: [0.25, 0.50, 0.75]}です。

回帰評価オブジェクト

回帰評価は、値の予測を出力する回帰分析の結果を評価します。

  • actual_field
  • (必須、文字列) indexのフィールドで、ground truthを含みます。このフィールドのデータ型は数値である必要があります。
  • predicted_field
  • (必須、文字列) indexのフィールドで、予測値、つまり回帰分析の結果を含みます。
  • metrics
  • (オプション、オブジェクト) 評価に使用される指標を指定します。msemslehuberに関する詳細は、回帰損失関数に関するJupyterノートブックを参照してください。指標が指定されていない場合、デフォルトで次のものが返されます:
    • mse,
    • r_squared,
    • huber (delta: 1.0).
      • mse
      • (オプション、オブジェクト) 予測値と実際の(ground truth)値との間の平均二乗差。詳細については、このウィキ記事を参照してください。
      • msle
      • (オプション、オブジェクト) 予測値の対数と実際の(ground truth)値の対数との間の平均二乗差。
        • offset
        • (オプション、ダブル) 二次誤差の最小化から二次対数誤差の最小化に切り替える転換点を定義します。デフォルトは1です。
      • huber
      • (オプション、オブジェクト) 擬似ハバー損失関数。詳細については、このウィキ記事を参照してください。
        • delta
        • (オプション、ダブル) deltaよりもはるかに小さい値に対しては1/2 (予測 - 実際)2を近似し、deltaよりもはるかに大きい値に対しては傾きdeltaの直線を近似します。デフォルトは1です。deltaは0より大きい必要があります。
      • r_squared
      • (オプション、オブジェクト) 従属変数の分散のうち、独立変数から予測可能な割合。詳細については、このウィキ記事を参照してください。

分類評価オブジェクト

分類評価は、各ドキュメントがどのクラスに属するかを特定する予測を出力する分類分析の結果を評価します。

  • actual_field
  • (必須、文字列) indexのフィールドで、ground truthを含みます。このフィールドのデータ型はカテゴリカルである必要があります。
  • predicted_field
  • (オプション、文字列) indexのフィールドで、予測値、つまり分類分析の結果を含みます。
  • top_classes_field
  • (オプション、文字列) indexのフィールドで、{ "class_name": XXX, "class_probability": YYY }の形式のドキュメントの配列です。このフィールドはマッピングでnestedとして定義されている必要があります。
  • metrics
  • (オプション、オブジェクト) 評価に使用される指標を指定します。指標が指定されていない場合、デフォルトで次のものが返されます:
    • accuracy,
    • multiclass_confusion_matrix,
    • precision,
      1. - `````accuracy
      • (オプション、オブジェクト) 予測の精度(クラスごとおよび全体)。
      • auc_roc
      • (オプション、オブジェクト) AUC ROC(受信者動作特性の曲線下面積)スコアとオプションで曲線。特定のクラス(”class_name”として提供)に対して計算されます。
        • class_name
        • (必須、文字列) AUC ROC計算中に正として扱われる唯一のクラスの名前。他のクラスは負として扱われます(”one-vs-all”戦略)。評価されたすべてのドキュメントは、トップクラスのリストにclass_nameを持っている必要があります。
        • include_curve
        • (オプション、ブール) スコアに加えて曲線を返すかどうか。デフォルト値はfalseです。
      • multiclass_confusion_matrix
      • (オプション、オブジェクト) マルチクラス混同行列。
        • size
        • (オプション、ダブル) マルチクラス混同行列のサイズを指定します。デフォルトは10で、10x10のサイズの行列が生成されます。
      • precision
      • (オプション、オブジェクト) 予測の精度(クラスごとおよび平均)。
      • recall
      • (オプション、オブジェクト) 予測の再現率(クラスごとおよび平均)。

外れ値検出

Python

  1. resp = client.ml.evaluate_data_frame(
  2. index="my_analytics_dest_index",
  3. evaluation={
  4. "outlier_detection": {
  5. "actual_field": "is_outlier",
  6. "predicted_probability_field": "ml.outlier_score"
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.ml.evaluate_data_frame(
  2. body: {
  3. index: 'my_analytics_dest_index',
  4. evaluation: {
  5. outlier_detection: {
  6. actual_field: 'is_outlier',
  7. predicted_probability_field: 'ml.outlier_score'
  8. }
  9. }
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.ml.evaluateDataFrame({
  2. index: "my_analytics_dest_index",
  3. evaluation: {
  4. outlier_detection: {
  5. actual_field: "is_outlier",
  6. predicted_probability_field: "ml.outlier_score",
  7. },
  8. },
  9. });
  10. console.log(response);

コンソール

  1. POST _ml/data_frame/_evaluate
  2. {
  3. "index": "my_analytics_dest_index",
  4. "evaluation": {
  5. "outlier_detection": {
  6. "actual_field": "is_outlier",
  7. "predicted_probability_field": "ml.outlier_score"
  8. }
  9. }
  10. }

APIは次の結果を返します:

コンソール-結果

  1. {
  2. "outlier_detection": {
  3. "auc_roc": {
  4. "value": 0.92584757746414444
  5. },
  6. "confusion_matrix": {
  7. "0.25": {
  8. "tp": 5,
  9. "fp": 9,
  10. "tn": 204,
  11. "fn": 5
  12. },
  13. "0.5": {
  14. "tp": 1,
  15. "fp": 5,
  16. "tn": 208,
  17. "fn": 9
  18. },
  19. "0.75": {
  20. "tp": 0,
  21. "fp": 4,
  22. "tn": 209,
  23. "fn": 10
  24. }
  25. },
  26. "precision": {
  27. "0.25": 0.35714285714285715,
  28. "0.5": 0.16666666666666666,
  29. "0.75": 0
  30. },
  31. "recall": {
  32. "0.25": 0.5,
  33. "0.5": 0.1,
  34. "0.75": 0
  35. }
  36. }
  37. }

回帰

Python

  1. resp = client.ml.evaluate_data_frame(
  2. index="house_price_predictions",
  3. query={
  4. "bool": {
  5. "filter": [
  6. {
  7. "term": {
  8. "ml.is_training": False
  9. }
  10. }
  11. ]
  12. }
  13. },
  14. evaluation={
  15. "regression": {
  16. "actual_field": "price",
  17. "predicted_field": "ml.price_prediction",
  18. "metrics": {
  19. "r_squared": {},
  20. "mse": {},
  21. "msle": {
  22. "offset": 10
  23. },
  24. "huber": {
  25. "delta": 1.5
  26. }
  27. }
  28. }
  29. },
  30. )
  31. print(resp)

Ruby

  1. response = client.ml.evaluate_data_frame(
  2. body: {
  3. index: 'house_price_predictions',
  4. query: {
  5. bool: {
  6. filter: [
  7. {
  8. term: {
  9. 'ml.is_training' => false
  10. }
  11. }
  12. ]
  13. }
  14. },
  15. evaluation: {
  16. regression: {
  17. actual_field: 'price',
  18. predicted_field: 'ml.price_prediction',
  19. metrics: {
  20. r_squared: {},
  21. mse: {},
  22. msle: {
  23. offset: 10
  24. },
  25. huber: {
  26. delta: 1.5
  27. }
  28. }
  29. }
  30. }
  31. }
  32. )
  33. puts response

Js

  1. const response = await client.ml.evaluateDataFrame({
  2. index: "house_price_predictions",
  3. query: {
  4. bool: {
  5. filter: [
  6. {
  7. term: {
  8. "ml.is_training": false,
  9. },
  10. },
  11. ],
  12. },
  13. },
  14. evaluation: {
  15. regression: {
  16. actual_field: "price",
  17. predicted_field: "ml.price_prediction",
  18. metrics: {
  19. r_squared: {},
  20. mse: {},
  21. msle: {
  22. offset: 10,
  23. },
  24. huber: {
  25. delta: 1.5,
  26. },
  27. },
  28. },
  29. },
  30. });
  31. console.log(response);

コンソール

  1. POST _ml/data_frame/_evaluate
  2. {
  3. "index": "house_price_predictions",
  4. "query": {
  5. "bool": {
  6. "filter": [
  7. { "term": { "ml.is_training": false } }
  8. ]
  9. }
  10. },
  11. "evaluation": {
  12. "regression": {
  13. "actual_field": "price",
  14. "predicted_field": "ml.price_prediction",
  15. "metrics": {
  16. "r_squared": {},
  17. "mse": {},
  18. "msle": {"offset": 10},
  19. "huber": {"delta": 1.5}
  20. }
  21. }
  22. }
  23. }
データフレーム分析回帰分析からの出力先インデックス。
この例では、テスト/トレイン分割(training_percent)が回帰分析のために定義されました。このクエリは評価をテスト分割のみに制限します。
実際の住宅価格のグラウンドトゥルース値。これは結果を評価するために必要です。
回帰分析によって計算された住宅価格の予測値。

次の例は、トレーニングエラーを計算します:

Python

  1. resp = client.ml.evaluate_data_frame(
  2. index="student_performance_mathematics_reg",
  3. query={
  4. "term": {
  5. "ml.is_training": {
  6. "value": True
  7. }
  8. }
  9. },
  10. evaluation={
  11. "regression": {
  12. "actual_field": "G3",
  13. "predicted_field": "ml.G3_prediction",
  14. "metrics": {
  15. "r_squared": {},
  16. "mse": {},
  17. "msle": {},
  18. "huber": {}
  19. }
  20. }
  21. },
  22. )
  23. print(resp)

Ruby

  1. response = client.ml.evaluate_data_frame(
  2. body: {
  3. index: 'student_performance_mathematics_reg',
  4. query: {
  5. term: {
  6. 'ml.is_training' => {
  7. value: true
  8. }
  9. }
  10. },
  11. evaluation: {
  12. regression: {
  13. actual_field: 'G3',
  14. predicted_field: 'ml.G3_prediction',
  15. metrics: {
  16. r_squared: {},
  17. mse: {},
  18. msle: {},
  19. huber: {}
  20. }
  21. }
  22. }
  23. }
  24. )
  25. puts response

Js

  1. const response = await client.ml.evaluateDataFrame({
  2. index: "student_performance_mathematics_reg",
  3. query: {
  4. term: {
  5. "ml.is_training": {
  6. value: true,
  7. },
  8. },
  9. },
  10. evaluation: {
  11. regression: {
  12. actual_field: "G3",
  13. predicted_field: "ml.G3_prediction",
  14. metrics: {
  15. r_squared: {},
  16. mse: {},
  17. msle: {},
  18. huber: {},
  19. },
  20. },
  21. },
  22. });
  23. console.log(response);

コンソール

  1. POST _ml/data_frame/_evaluate
  2. {
  3. "index": "student_performance_mathematics_reg",
  4. "query": {
  5. "term": {
  6. "ml.is_training": {
  7. "value": true
  8. }
  9. }
  10. },
  11. "evaluation": {
  12. "regression": {
  13. "actual_field": "G3",
  14. "predicted_field": "ml.G3_prediction",
  15. "metrics": {
  16. "r_squared": {},
  17. "mse": {},
  18. "msle": {},
  19. "huber": {}
  20. }
  21. }
  22. }
  23. }
この例では、テスト/トレイン分割(training_percent)が回帰分析のために定義されました。このクエリは評価をトレイン分割のみに制限します。これはトレーニングエラーが計算されることを意味します。
実際の学生のパフォーマンスのグラウンドトゥルース値を含むフィールド。この結果を評価するために必要です。
回帰分析によって計算された学生のパフォーマンスの予測値を含むフィールド。

次の例は、テストエラーを計算します。前の例との唯一の違いは、ml.is_trainingfalseに設定されているため、クエリは評価からトレイン分割を除外します。

Python

  1. resp = client.ml.evaluate_data_frame(
  2. index="student_performance_mathematics_reg",
  3. query={
  4. "term": {
  5. "ml.is_training": {
  6. "value": False
  7. }
  8. }
  9. },
  10. evaluation={
  11. "regression": {
  12. "actual_field": "G3",
  13. "predicted_field": "ml.G3_prediction",
  14. "metrics": {
  15. "r_squared": {},
  16. "mse": {},
  17. "msle": {},
  18. "huber": {}
  19. }
  20. }
  21. },
  22. )
  23. print(resp)

Ruby

  1. response = client.ml.evaluate_data_frame(
  2. body: {
  3. index: 'student_performance_mathematics_reg',
  4. query: {
  5. term: {
  6. 'ml.is_training' => {
  7. value: false
  8. }
  9. }
  10. },
  11. evaluation: {
  12. regression: {
  13. actual_field: 'G3',
  14. predicted_field: 'ml.G3_prediction',
  15. metrics: {
  16. r_squared: {},
  17. mse: {},
  18. msle: {},
  19. huber: {}
  20. }
  21. }
  22. }
  23. }
  24. )
  25. puts response

Js

  1. const response = await client.ml.evaluateDataFrame({
  2. index: "student_performance_mathematics_reg",
  3. query: {
  4. term: {
  5. "ml.is_training": {
  6. value: false,
  7. },
  8. },
  9. },
  10. evaluation: {
  11. regression: {
  12. actual_field: "G3",
  13. predicted_field: "ml.G3_prediction",
  14. metrics: {
  15. r_squared: {},
  16. mse: {},
  17. msle: {},
  18. huber: {},
  19. },
  20. },
  21. },
  22. });
  23. console.log(response);

コンソール

  1. POST _ml/data_frame/_evaluate
  2. {
  3. "index": "student_performance_mathematics_reg",
  4. "query": {
  5. "term": {
  6. "ml.is_training": {
  7. "value": false
  8. }
  9. }
  10. },
  11. "evaluation": {
  12. "regression": {
  13. "actual_field": "G3",
  14. "predicted_field": "ml.G3_prediction",
  15. "metrics": {
  16. "r_squared": {},
  17. "mse": {},
  18. "msle": {},
  19. "huber": {}
  20. }
  21. }
  22. }
  23. }
この例では、テスト/トレイン分割(training_percent)が回帰分析のために定義されました。このクエリは評価をテスト分割のみに制限します。これはテストエラーが計算されることを意味します。
実際の学生のパフォーマンスのグラウンドトゥルース値を含むフィールド。この結果を評価するために必要です。
回帰分析によって計算された学生のパフォーマンスの予測値を含むフィールド。

分類

Python

  1. resp = client.ml.evaluate_data_frame(
  2. index="animal_classification",
  3. evaluation={
  4. "classification": {
  5. "actual_field": "animal_class",
  6. "predicted_field": "ml.animal_class_prediction",
  7. "metrics": {
  8. "multiclass_confusion_matrix": {}
  9. }
  10. }
  11. },
  12. )
  13. print(resp)

Ruby

  1. response = client.ml.evaluate_data_frame(
  2. body: {
  3. index: 'animal_classification',
  4. evaluation: {
  5. classification: {
  6. actual_field: 'animal_class',
  7. predicted_field: 'ml.animal_class_prediction',
  8. metrics: {
  9. multiclass_confusion_matrix: {}
  10. }
  11. }
  12. }
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.ml.evaluateDataFrame({
  2. index: "animal_classification",
  3. evaluation: {
  4. classification: {
  5. actual_field: "animal_class",
  6. predicted_field: "ml.animal_class_prediction",
  7. metrics: {
  8. multiclass_confusion_matrix: {},
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. POST _ml/data_frame/_evaluate
  2. {
  3. "index": "animal_classification",
  4. "evaluation": {
  5. "classification": {
  6. "actual_field": "animal_class",
  7. "predicted_field": "ml.animal_class_prediction",
  8. "metrics": {
  9. "multiclass_confusion_matrix" : {}
  10. }
  11. }
  12. }
  13. }
評価タイプ。
実際の動物分類のグラウンドトゥルース値を含むフィールド。この結果を評価するために必要です。
分類分析によって動物分類のために計算された予測値を含むフィールド。
評価のための指標を指定します。

APIは次の結果を返します:

コンソール-結果

  1. {
  2. "classification" : {
  3. "multiclass_confusion_matrix" : {
  4. "confusion_matrix" : [
  5. {
  6. "actual_class" : "cat",
  7. "actual_class_doc_count" : 12,
  8. "predicted_classes" : [
  9. {
  10. "predicted_class" : "cat",
  11. "count" : 12
  12. },
  13. {
  14. "predicted_class" : "dog",
  15. "count" : 0
  16. }
  17. ],
  18. "other_predicted_class_doc_count" : 0
  19. },
  20. {
  21. "actual_class" : "dog",
  22. "actual_class_doc_count" : 11,
  23. "predicted_classes" : [
  24. {
  25. "predicted_class" : "dog",
  26. "count" : 7
  27. },
  28. {
  29. "predicted_class" : "cat",
  30. "count" : 4
  31. }
  32. ],
  33. "other_predicted_class_doc_count" : 0
  34. }
  35. ],
  36. "other_actual_class_count" : 0
  37. }
  38. }
  39. }
分析が予測しようとした実際のクラスの名前。
actual_classに属するインデックス内のドキュメントの数。
このオブジェクトには、予測されたクラスのリストと、そのクラスに関連付けられた予測の数が含まれています。
データセット内の猫の数で、正しく猫として識別されたもの。
データセット内の猫の数で、誤って犬として分類されたもの。
predicted_classとしてリストされていないクラスとして分類されたドキュメントの数。

Python

  1. resp = client.ml.evaluate_data_frame(
  2. index="animal_classification",
  3. evaluation={
  4. "classification": {
  5. "actual_field": "animal_class",
  6. "metrics": {
  7. "auc_roc": {
  8. "class_name": "dog"
  9. }
  10. }
  11. }
  12. },
  13. )
  14. print(resp)

Ruby

  1. response = client.ml.evaluate_data_frame(
  2. body: {
  3. index: 'animal_classification',
  4. evaluation: {
  5. classification: {
  6. actual_field: 'animal_class',
  7. metrics: {
  8. auc_roc: {
  9. class_name: 'dog'
  10. }
  11. }
  12. }
  13. }
  14. }
  15. )
  16. puts response

Js

  1. const response = await client.ml.evaluateDataFrame({
  2. index: "animal_classification",
  3. evaluation: {
  4. classification: {
  5. actual_field: "animal_class",
  6. metrics: {
  7. auc_roc: {
  8. class_name: "dog",
  9. },
  10. },
  11. },
  12. },
  13. });
  14. console.log(response);

コンソール

  1. POST _ml/data_frame/_evaluate
  2. {
  3. "index": "animal_classification",
  4. "evaluation": {
  5. "classification": {
  6. "actual_field": "animal_class",
  7. "metrics": {
  8. "auc_roc" : {
  9. "class_name": "dog"
  10. }
  11. }
  12. }
  13. }
  14. }
評価タイプ。
実際の動物分類のグラウンドトゥルース値を含むフィールド。この結果を評価するために必要です。
評価のための指標を指定します。
評価中に正として扱われるクラス名を指定します。すべての他のクラスは負として扱われます。

APIは次の結果を返します:

コンソール-結果

  1. {
  2. "classification" : {
  3. "auc_roc" : {
  4. "value" : 0.8941788639536681
  5. }
  6. }
  7. }