Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›REST API ›API аналитики данных в формате DataFrame

API оценки аналитики DataFrame

Новая справка по API

Для получения самых актуальных сведений об API обратитесь к API аналитики данных в формате DataFrame.

Оценивает аналитику DataFrame для аннотированного индекса.

Запрос

POST _ml/data_frame/_evaluate

Предварительные требования

Требуются следующие привилегии:

  • cluster: monitor_ml (роль machine_learning_user предоставляет эту привилегию)
  • индекс назначения: read

Описание

API объединяет часто используемые метрики оценки для различных типов машинных обучающих функций. Он предназначен для использования с индексами, созданными с помощью аналитики DataFrame. Для оценки необходимо наличие как поля «истинных значений», так и поля результатов аналитики.

Тело запроса

evaluation

(Обязательно, объект) Определяет тип оценки, который требуется выполнить. См. Ресурсы оценки аналитики DataFrame.

Доступные типы оценки:

  • outlier_detection
  • regression
  • classification
index
(Обязательно, объект) Определяет index, в котором будет выполняться оценка.
query
(Необязательно, объект) Предложение запроса, которое извлекает подмножество данных из исходного индекса. См. Язык запросов.

Ресурсы оценки аналитики DataFrame

Объекты оценки выявления аномалий

Оценка выявления аномалий оценивает результаты анализа выявления аномалий, который выводит вероятность того, что каждый документ является аномалией.

actual_field
(Обязательно, строка) Поле index, которое содержит ground truth. Тип данных этого поля может быть boolean или integer. Если тип данных — integer, значение должно быть либо 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 (площадь под кривой 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

(Необязательно, объект) Указывает метрики, используемые для оценки. Для получения дополнительной информации о mse, msle и huber обратитесь к Jupyter notebook по функциям потерь регрессии. Если метрики не указаны, по умолчанию возвращаются следующие:

  • mse,
  • r_squared,
  • huber (delta: 1.0).

    mse
    (Необязательно, объект) Среднее значение квадратичных разностей между предсказанными значениями и фактическим (ground truth) значением. Для получения дополнительной информации ознакомьтесь со этой статьей в Википедии.
    msle

    (Необязательно, объект) Среднее значение квадратичных разностей между логарифмами предсказанных значений и логарифмами фактического (ground truth) значения.

    offset
    (Необязательно, double) Определяет точку перехода, при которой происходит переход от минимизации квадратичной ошибки к минимизации квадратичной ошибки логарифмов. Значение по умолчанию — 1.
    huber

    (Необязательно, объект) Функция потерь Pseudo Huber. Для получения дополнительной информации ознакомьтесь со этой статьей в Википедии.

    delta
    (Необязательно, double) Приближает 1/2 (прогноз - фактическое значение)2 для значений, намного меньших, чем дельта, и приближает прямую линию с наклоном дельта для значений, намного больших, чем дельта. Значение по умолчанию — 1. Дельта должна быть больше 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,
  • recall.

    accuracy
    (Необязательно, объект) Точность прогнозов (по классам и в целом).
    auc_roc

    (Необязательно, объект) Значение AUC ROC (площадь под кривой ROC) и, необязательно, сама кривая. Вычисляется для определенного класса (указанного как "class_name"), который рассматривается как положительный.

    class_name
    (Обязательно, строка) Название единственного класса, рассматриваемого как положительный при вычислении AUC ROC. Другие классы рассматриваются как отрицательные ("один-против-всех" стратегия). Все оцениваемые документы должны иметь class_name в списке своих лучших классов.
    include_curve
    (Необязательно, Булево) Требуется ли возвращать кривую дополнительно к значению. Значение по умолчанию — false.
    multiclass_confusion_matrix

    (Необязательно, объект) Многоклассовая матрица ошибок.

    size
    (Необязательно, double) Указывает размер многоклассовой матрицы ошибок. По умолчанию 10, что приводит к матрице размером 10x10.
    precision
    (Необязательно, объект) Точность прогнозов (по классам и средняя).
    recall
    (Необязательно, объект) Полнота прогнозов (по классам и средняя).

Примеры

Обнаружение выбросов

resp = client.ml.evaluate_data_frame(
    index="my_analytics_dest_index",
    evaluation={
        "outlier_detection": {
            "actual_field": "is_outlier",
            "predicted_probability_field": "ml.outlier_score"
        }
    },
)
print(resp)
response = client.ml.evaluate_data_frame(
  body: {
    index: 'my_analytics_dest_index',
    evaluation: {
      outlier_detection: {
        actual_field: 'is_outlier',
        predicted_probability_field: 'ml.outlier_score'
      }
    }
  }
)
puts response
const response = await client.ml.evaluateDataFrame({
  index: "my_analytics_dest_index",
  evaluation: {
    outlier_detection: {
      actual_field: "is_outlier",
      predicted_probability_field: "ml.outlier_score",
    },
  },
});
console.log(response);
POST _ml/data_frame/_evaluate
{
  "index": "my_analytics_dest_index",
  "evaluation": {
    "outlier_detection": {
      "actual_field": "is_outlier",
      "predicted_probability_field": "ml.outlier_score"
    }
  }
}

API возвращает следующие результаты:

{
  "outlier_detection": {
    "auc_roc": {
      "value": 0.92584757746414444
    },
    "confusion_matrix": {
      "0.25": {
          "tp": 5,
          "fp": 9,
          "tn": 204,
          "fn": 5
      },
      "0.5": {
          "tp": 1,
          "fp": 5,
          "tn": 208,
          "fn": 9
      },
      "0.75": {
          "tp": 0,
          "fp": 4,
          "tn": 209,
          "fn": 10
      }
    },
    "precision": {
        "0.25": 0.35714285714285715,
        "0.5": 0.16666666666666666,
        "0.75": 0
    },
    "recall": {
        "0.25": 0.5,
        "0.5": 0.1,
        "0.75": 0
    }
  }
}

Регрессия

resp = client.ml.evaluate_data_frame(
    index="house_price_predictions",
    query={
        "bool": {
            "filter": [
                {
                    "term": {
                        "ml.is_training": False
                    }
                }
            ]
        }
    },
    evaluation={
        "regression": {
            "actual_field": "price",
            "predicted_field": "ml.price_prediction",
            "metrics": {
                "r_squared": {},
                "mse": {},
                "msle": {
                    "offset": 10
                },
                "huber": {
                    "delta": 1.5
                }
            }
        }
    },
)
print(resp)
response = client.ml.evaluate_data_frame(
  body: {
    index: 'house_price_predictions',
    query: {
      bool: {
        filter: [
          {
            term: {
              'ml.is_training' => false
            }
          }
        ]
      }
    },
    evaluation: {
      regression: {
        actual_field: 'price',
        predicted_field: 'ml.price_prediction',
        metrics: {
          r_squared: {},
          mse: {},
          msle: {
            offset: 10
          },
          huber: {
            delta: 1.5
          }
        }
      }
    }
  }
)
puts response
const response = await client.ml.evaluateDataFrame({
  index: "house_price_predictions",
  query: {
    bool: {
      filter: [
        {
          term: {
            "ml.is_training": false,
          },
        },
      ],
    },
  },
  evaluation: {
    regression: {
      actual_field: "price",
      predicted_field: "ml.price_prediction",
      metrics: {
        r_squared: {},
        mse: {},
        msle: {
          offset: 10,
        },
        huber: {
          delta: 1.5,
        },
      },
    },
  },
});
console.log(response);
POST _ml/data_frame/_evaluate
{
  "index": "house_price_predictions", 
  "query": {
      "bool": {
        "filter": [
          { "term":  { "ml.is_training": false } } 
        ]
      }
  },
  "evaluation": {
    "regression": {
      "actual_field": "price", 
      "predicted_field": "ml.price_prediction", 
      "metrics": {
        "r_squared": {},
        "mse": {},
        "msle": {"offset": 10},
        "huber": {"delta": 1.5}
      }
    }
  }
}

Индекс назначения результата анализа регрессии для фрейма данных.

В этом примере для анализа регрессии был определён разбиение на обучающую и тестовую выборки (training_percent). Этот запрос ограничивает оценку только тестовой выборкой.

Истинное значение фактической цены дома. Это необходимо для оценки результатов.

Прогнозируемое значение цены дома, рассчитанное с помощью анализа регрессии.

Следующий пример вычисляет ошибку обучения:

resp = client.ml.evaluate_data_frame(
    index="student_performance_mathematics_reg",
    query={
        "term": {
            "ml.is_training": {
                "value": True
            }
        }
    },
    evaluation={
        "regression": {
            "actual_field": "G3",
            "predicted_field": "ml.G3_prediction",
            "metrics": {
                "r_squared": {},
                "mse": {},
                "msle": {},
                "huber": {}
            }
        }
    },
)
print(resp)
response = client.ml.evaluate_data_frame(
  body: {
    index: 'student_performance_mathematics_reg',
    query: {
      term: {
        'ml.is_training' => {
          value: true
        }
      }
    },
    evaluation: {
      regression: {
        actual_field: 'G3',
        predicted_field: 'ml.G3_prediction',
        metrics: {
          r_squared: {},
          mse: {},
          msle: {},
          huber: {}
        }
      }
    }
  }
)
puts response
const response = await client.ml.evaluateDataFrame({
  index: "student_performance_mathematics_reg",
  query: {
    term: {
      "ml.is_training": {
        value: true,
      },
    },
  },
  evaluation: {
    regression: {
      actual_field: "G3",
      predicted_field: "ml.G3_prediction",
      metrics: {
        r_squared: {},
        mse: {},
        msle: {},
        huber: {},
      },
    },
  },
});
console.log(response);
POST _ml/data_frame/_evaluate
{
  "index": "student_performance_mathematics_reg",
  "query": {
    "term": {
      "ml.is_training": {
        "value": true 
      }
    }
  },
  "evaluation": {
    "regression": {
      "actual_field": "G3", 
      "predicted_field": "ml.G3_prediction", 
      "metrics": {
        "r_squared": {},
        "mse": {},
        "msle": {},
        "huber": {}
      }
    }
  }
}

В этом примере для анализа регрессии был определён разбиение на обучающую и тестовую выборки (training_percent). Этот запрос ограничивает оценку только обучающей выборкой. Это означает, что будет рассчитана ошибка обучения.

Поле, содержащее истинное значение фактической успеваемости студента. Это необходимо для оценки результатов.

Поле, содержащее прогнозируемое значение успеваемости студента, рассчитанное с помощью анализа регрессии.

Следующий пример вычисляет ошибку тестирования. Единственное отличие от предыдущего примера заключается в том, что ml.is_training установлено в false в этот раз, поэтому запрос исключает обучающую выборку из оценки.

resp = client.ml.evaluate_data_frame(
    index="student_performance_mathematics_reg",
    query={
        "term": {
            "ml.is_training": {
                "value": False
            }
        }
    },
    evaluation={
        "regression": {
            "actual_field": "G3",
            "predicted_field": "ml.G3_prediction",
            "metrics": {
                "r_squared": {},
                "mse": {},
                "msle": {},
                "huber": {}
            }
        }
    },
)
print(resp)
response = client.ml.evaluate_data_frame(
  body: {
    index: 'student_performance_mathematics_reg',
    query: {
      term: {
        'ml.is_training' => {
          value: false
        }
      }
    },
    evaluation: {
      regression: {
        actual_field: 'G3',
        predicted_field: 'ml.G3_prediction',
        metrics: {
          r_squared: {},
          mse: {},
          msle: {},
          huber: {}
        }
      }
    }
  }
)
puts response
const response = await client.ml.evaluateDataFrame({
  index: "student_performance_mathematics_reg",
  query: {
    term: {
      "ml.is_training": {
        value: false,
      },
    },
  },
  evaluation: {
    regression: {
      actual_field: "G3",
      predicted_field: "ml.G3_prediction",
      metrics: {
        r_squared: {},
        mse: {},
        msle: {},
        huber: {},
      },
    },
  },
});
console.log(response);
POST _ml/data_frame/_evaluate
{
  "index": "student_performance_mathematics_reg",
  "query": {
    "term": {
      "ml.is_training": {
        "value": false 
      }
    }
  },
  "evaluation": {
    "regression": {
      "actual_field": "G3", 
      "predicted_field": "ml.G3_prediction", 
      "metrics": {
        "r_squared": {},
        "mse": {},
        "msle": {},
        "huber": {}
      }
    }
  }
}

В этом примере для анализа регрессии было определено разбиение на обучающую и тестовую выборки (training_percent). Этот запрос ограничивает оценку только тестовой выборкой. Это означает, что будет рассчитана ошибка тестирования.

Поле, содержащее истинное значение фактической успеваемости студента. Это необходимо для оценки результатов.

Поле, содержащее прогнозируемое значение успеваемости студента, рассчитанное с помощью анализа регрессии.

Классификация

resp = client.ml.evaluate_data_frame(
    index="animal_classification",
    evaluation={
        "classification": {
            "actual_field": "animal_class",
            "predicted_field": "ml.animal_class_prediction",
            "metrics": {
                "multiclass_confusion_matrix": {}
            }
        }
    },
)
print(resp)
response = client.ml.evaluate_data_frame(
  body: {
    index: 'animal_classification',
    evaluation: {
      classification: {
        actual_field: 'animal_class',
        predicted_field: 'ml.animal_class_prediction',
        metrics: {
          multiclass_confusion_matrix: {}
        }
      }
    }
  }
)
puts response
const response = await client.ml.evaluateDataFrame({
  index: "animal_classification",
  evaluation: {
    classification: {
      actual_field: "animal_class",
      predicted_field: "ml.animal_class_prediction",
      metrics: {
        multiclass_confusion_matrix: {},
      },
    },
  },
});
console.log(response);
POST _ml/data_frame/_evaluate
{
   "index": "animal_classification",
   "evaluation": {
      "classification": { 
         "actual_field": "animal_class", 
         "predicted_field": "ml.animal_class_prediction", 
         "metrics": {
           "multiclass_confusion_matrix" : {} 
         }
      }
   }
}

Тип оценки.

Поле, содержащее истинное значение фактической классификации животного. Это необходимо для оценки результатов.

Поле, содержащее прогнозируемое значение классификации животного, полученное с помощью анализа классификации.

Указывает метрику для оценки.

API возвращает следующий результат:

{
   "classification" : {
      "multiclass_confusion_matrix" : {
         "confusion_matrix" : [
         {
            "actual_class" : "cat", 
            "actual_class_doc_count" : 12, 
            "predicted_classes" : [ 
              {
                "predicted_class" : "cat",
                "count" : 12 
              },
              {
                "predicted_class" : "dog",
                "count" : 0 
              }
            ],
            "other_predicted_class_doc_count" : 0 
          },
          {
            "actual_class" : "dog",
            "actual_class_doc_count" : 11,
            "predicted_classes" : [
              {
                "predicted_class" : "dog",
                "count" : 7
              },
              {
                "predicted_class" : "cat",
                "count" : 4
              }
            ],
            "other_predicted_class_doc_count" : 0
          }
        ],
        "other_actual_class_count" : 0
      }
    }
  }

Имя фактического класса, который анализ пытался предсказать.

Количество документов в индексе, относящихся к классу actual_class.

Этот объект содержит список предсказанных классов и количество предсказаний, связанных с классом.

Количество кошек в наборе данных, которые правильно идентифицированы как кошки.

Количество кошек в наборе данных, которые неправильно классифицированы как собаки.

Количество документов, которые классифицированы как класс, который не указан как predicted_class.

resp = client.ml.evaluate_data_frame(
    index="animal_classification",
    evaluation={
        "classification": {
            "actual_field": "animal_class",
            "metrics": {
                "auc_roc": {
                    "class_name": "dog"
                }
            }
        }
    },
)
print(resp)
response = client.ml.evaluate_data_frame(
  body: {
    index: 'animal_classification',
    evaluation: {
      classification: {
        actual_field: 'animal_class',
        metrics: {
          auc_roc: {
            class_name: 'dog'
          }
        }
      }
    }
  }
)
puts response
const response = await client.ml.evaluateDataFrame({
  index: "animal_classification",
  evaluation: {
    classification: {
      actual_field: "animal_class",
      metrics: {
        auc_roc: {
          class_name: "dog",
        },
      },
    },
  },
});
console.log(response);
POST _ml/data_frame/_evaluate
{
   "index": "animal_classification",
   "evaluation": {
      "classification": { 
         "actual_field": "animal_class", 
         "metrics": {
            "auc_roc" : { 
              "class_name": "dog" 
            }
         }
      }
   }
}

Тип оценки.

Поле, содержащее истинное значение фактической классификации животного. Это необходимо для оценки результатов.

Указывает метрику для оценки.

Указывает имя класса, который рассматривается как положительный при оценке, все остальные классы рассматриваются как отрицательные.

API возвращает следующий результат:

{
  "classification" : {
    "auc_roc" : {
      "value" : 0.8941788639536681
    }
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/evaluate-dfanalytics.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API