pub struct EvaluatedSlice {
    pub dimensions: Vec<PinnedDimension>,
    pub detection_point_actual: Option<f64>,
    pub detection_point_forecast: Option<f64>,
    pub expected_deviation: Option<f64>,
    pub anomaly_score: Option<f64>,
    pub history: Option<Timeseries>,
    pub forecast: Option<Timeseries>,
    pub status: Option<Status>,
}
Expand description

Forecast result for a given slice.

Fields§

§dimensions: Vec<PinnedDimension>

Values for all categorical dimensions that uniquely identify this slice.

§detection_point_actual: Option<f64>

The actual value at the detection time (see [detectionTime][google.cloud.timeseriesinsights.v1.QueryDataSetRequest.detection_time]).

NOTE: This value can be an estimate, so it should not be used as a source of truth.

§detection_point_forecast: Option<f64>

The expected value at the detection time, which is obtained by forecasting on the historical time series.

§expected_deviation: Option<f64>

How much our forecast model expects the detection point actual will deviate from its forecasted value based on how well it fit the input time series.

In general, we expect the detectionPointActual to be in the [detectionPointForecast - expectedDeviation, detectionPointForecast + expectedDeviation] range. The more the actual value is outside this range, the more statistically significant the anomaly is.

The expected deviation is always positive.

§anomaly_score: Option<f64>

Summarizes how significant the change between the actual and forecasted detection points are compared with the historical patterns observed on the [history][google.cloud.timeseriesinsights.v1.EvaluatedSlice.history] time series.

Defined as |a - f| / (e + nt), where:

  • a is the [detectionPointActual][google.cloud.timeseriesinsights.v1.EvaluatedSlice.detection_point_actual].
  • f is the [detectionPointForecast][google.cloud.timeseriesinsights.v1.EvaluatedSlice.detection_point_forecast].
  • e is the [expectedDeviation][google.cloud.timeseriesinsights.v1.EvaluatedSlice.expected_deviation].
  • *nt` is the [noiseThreshold][google.cloud.timeseriesinsights.v1.ForecastParams.noise_threshold].

Anomaly scores between different requests and datasets are comparable. As a guideline, the risk of a slice being an anomaly based on the anomaly score is:

  • Very High if anomalyScore > 5.
  • High if the anomalyScore is in the [2, 5] range.
  • Medium if the anomalyScore is in the [1, 2) range.
  • Low if the anomalyScore is < 1.

If there were issues evaluating this slice, then the anomaly score will be set to -1.0 and the [status][google.cloud.timeseriesinsights.v1.EvaluatedSlice.status] field will contain details on what went wrong.

§history: Option<Timeseries>

The actual values in the [ [detectionTime][google.cloud.timeseriesinsights.v1.QueryDataSetRequest.detection_time] - [forecastHistory][google.cloud.timeseriesinsights.v1.TimeseriesParams.forecast_history], [detectionTime][google.cloud.timeseriesinsights.v1.QueryDataSetRequest.detection_time] ] time range.

NOTE: This field is only populated if [returnTimeseries][google.cloud.timeseriesinsights.v1.QueryDataSetRequest.return_timeseries] is true.

§forecast: Option<Timeseries>

The forecasted values in the [ [detectionTime][google.cloud.timeseriesinsights.v1.QueryDataSetRequest.detection_time] + [granularity][google.cloud.timeseriesinsights.v1.TimeseriesParams.granularity], [forecastParams.horizonTime][google.cloud.timeseriesinsights.v1.QueryDataSetRequest.forecast_params] ] time range.

NOTE: This field is only populated if [returnTimeseries][google.cloud.timeseriesinsights.v1.QueryDataSetRequest.return_timeseries] is true.

§status: Option<Status>

Evaluation status. Contains an error message if the anomalyScore is < 0.

Possible error messages:

  • “Time series too sparse”: The returned time series for this slice did not contain enough data points (we require a minimum of 10).
  • “Not enough recent time series points”: The time series contains the minimum of 10 points, but there are not enough close in time to the detection point.
  • “Missing detection point data”: There were not events to be aggregated within the \[detectionTime, detectionTime + granularity\] time interval, so we don’t have an actual value with which we can compare our prediction.
  • “Data retrieval error”: We failed to retrieve the time series data for this slice and could not evaluate it successfully. Should be a transient error.
  • “Internal server error”: Internal unexpected error.

Implementations§

source§

impl EvaluatedSlice

source

pub fn detection_point_actual(&self) -> f64

Returns the value of detection_point_actual, or the default value if detection_point_actual is unset.

source

pub fn detection_point_forecast(&self) -> f64

Returns the value of detection_point_forecast, or the default value if detection_point_forecast is unset.

source

pub fn expected_deviation(&self) -> f64

Returns the value of expected_deviation, or the default value if expected_deviation is unset.

source

pub fn anomaly_score(&self) -> f64

Returns the value of anomaly_score, or the default value if anomaly_score is unset.

Trait Implementations§

source§

impl Clone for EvaluatedSlice

source§

fn clone(&self) -> EvaluatedSlice

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for EvaluatedSlice

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for EvaluatedSlice

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Message for EvaluatedSlice

source§

fn encoded_len(&self) -> usize

Returns the encoded length of the message without a length delimiter.
source§

fn clear(&mut self)

Clears the message, resetting all fields to their default.
source§

fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message to a buffer. Read more
source§

fn encode_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message to a newly allocated buffer.
source§

fn encode_length_delimited( &self, buf: &mut impl BufMut, ) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message with a length-delimiter to a buffer. Read more
source§

fn encode_length_delimited_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message with a length-delimiter to a newly allocated buffer.
source§

fn decode(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes an instance of the message from a buffer. Read more
source§

fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes a length-delimited instance of the message from the buffer.
source§

fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes an instance of the message from a buffer, and merges it into self. Read more
source§

fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes a length-delimited instance of the message from buffer, and merges it into self.
source§

impl PartialEq for EvaluatedSlice

source§

fn eq(&self, other: &EvaluatedSlice) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for EvaluatedSlice

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more