次の方法で共有


TimeSeriesCatalog.LocalizeRootCause メソッド

定義

デシジョン ツリー アルゴリズムを使用して根本原因をローカライズする作成 RootCause

public static Microsoft.ML.TimeSeries.RootCause LocalizeRootCause (this Microsoft.ML.AnomalyDetectionCatalog catalog, Microsoft.ML.TimeSeries.RootCauseLocalizationInput src, double beta = 0.3, double rootCauseThreshold = 0.95);
static member LocalizeRootCause : Microsoft.ML.AnomalyDetectionCatalog * Microsoft.ML.TimeSeries.RootCauseLocalizationInput * double * double -> Microsoft.ML.TimeSeries.RootCause
<Extension()>
Public Function LocalizeRootCause (catalog As AnomalyDetectionCatalog, src As RootCauseLocalizationInput, Optional beta As Double = 0.3, Optional rootCauseThreshold As Double = 0.95) As RootCause

パラメーター

catalog
AnomalyDetectionCatalog

異常検出カタログ。

src
RootCauseLocalizationInput

根本原因の入力。 データは.の RootCauseLocalizationInputインスタンスです。

beta
Double

ベータは、ユーザーが選択する重みパラメーターです。 これは、根本原因項目ごとにスコアが計算されるときに使用されます。 ベータの範囲は [0,1] である必要があります。 ベータ版が大きい場合、値と期待値の差が大きい根本原因項目は高いスコアを取得します。 小規模なベータ版の場合、相対的な変化が高い根本原因項目は低いスコアを取得します。

rootCauseThreshold
Double

ポイントが根本原因であるかどうかを判断するためのしきい値。 このしきい値の範囲は [0,1] である必要があります。 ポイントのデルタが rootCauseThreshold に異常ディメンション ポイントのデルタを乗算した場合、このポイントは根本原因として扱われます。 しきい値が異なると、結果が異なります。 ユーザーは、データと要求に応じて差分を選択できます。

戻り値

using System;
using System.Collections.Generic;
using Microsoft.ML;
using Microsoft.ML.TimeSeries;

namespace Samples.Dynamic
{
    public static class LocalizeRootCause
    {
        // In the root cause detection input, this string identifies an aggregation as opposed to a dimension value"
        private static string AGG_SYMBOL = "##SUM##";
        public static void Example()
        {
            // Create a new ML context, for ML.NET operations. It can be used for
            // exception tracking and logging, as well as the source of randomness.
            var mlContext = new MLContext();

            // Create an root cause localization input instance.
            DateTime timestamp = GetTimestamp();
            var data = new RootCauseLocalizationInput(timestamp, GetAnomalyDimension(), new List<MetricSlice>() { new MetricSlice(timestamp, GetPoints()) }, AggregateType.Sum, AGG_SYMBOL);

            // Get the root cause localization result.
            RootCause prediction = mlContext.AnomalyDetection.LocalizeRootCause(data);

            // Print the localization result.
            int count = 0;
            foreach (RootCauseItem item in prediction.Items)
            {
                count++;
                Console.WriteLine($"Root cause item #{count} ...");
                Console.WriteLine($"Score: {item.Score}, Path: {String.Join(" ", item.Path)}, Direction: {item.Direction}, Dimension:{String.Join(" ", item.Dimension)}");
            }

            //Item #1 ...
            //Score: 0.26670448876705927, Path: DataCenter, Direction: Up, Dimension:[Country, UK] [DeviceType, ##SUM##] [DataCenter, DC1]
        }

        private static List<TimeSeriesPoint> GetPoints()
        {
            List<TimeSeriesPoint> points = new List<TimeSeriesPoint>();

            Dictionary<string, Object> dic1 = new Dictionary<string, Object>();
            dic1.Add("Country", "UK");
            dic1.Add("DeviceType", "Laptop");
            dic1.Add("DataCenter", "DC1");
            points.Add(new TimeSeriesPoint(200, 100, true, dic1));

            Dictionary<string, Object> dic2 = new Dictionary<string, Object>();
            dic2.Add("Country", "UK");
            dic2.Add("DeviceType", "Mobile");
            dic2.Add("DataCenter", "DC1");
            points.Add(new TimeSeriesPoint(1000, 100, true, dic2));

            Dictionary<string, Object> dic3 = new Dictionary<string, Object>();
            dic3.Add("Country", "UK");
            dic3.Add("DeviceType", AGG_SYMBOL);
            dic3.Add("DataCenter", "DC1");
            points.Add(new TimeSeriesPoint(1200, 200, true, dic3));

            Dictionary<string, Object> dic4 = new Dictionary<string, Object>();
            dic4.Add("Country", "UK");
            dic4.Add("DeviceType", "Laptop");
            dic4.Add("DataCenter", "DC2");
            points.Add(new TimeSeriesPoint(100, 100, false, dic4));

            Dictionary<string, Object> dic5 = new Dictionary<string, Object>();
            dic5.Add("Country", "UK");
            dic5.Add("DeviceType", "Mobile");
            dic5.Add("DataCenter", "DC2");
            points.Add(new TimeSeriesPoint(200, 200, false, dic5));

            Dictionary<string, Object> dic6 = new Dictionary<string, Object>();
            dic6.Add("Country", "UK");
            dic6.Add("DeviceType", AGG_SYMBOL);
            dic6.Add("DataCenter", "DC2");
            points.Add(new TimeSeriesPoint(300, 300, false, dic6));

            Dictionary<string, Object> dic7 = new Dictionary<string, Object>();
            dic7.Add("Country", "UK");
            dic7.Add("DeviceType", AGG_SYMBOL);
            dic7.Add("DataCenter", AGG_SYMBOL);
            points.Add(new TimeSeriesPoint(1500, 500, true, dic7));

            Dictionary<string, Object> dic8 = new Dictionary<string, Object>();
            dic8.Add("Country", "UK");
            dic8.Add("DeviceType", "Laptop");
            dic8.Add("DataCenter", AGG_SYMBOL);
            points.Add(new TimeSeriesPoint(300, 200, true, dic8));

            Dictionary<string, Object> dic9 = new Dictionary<string, Object>();
            dic9.Add("Country", "UK");
            dic9.Add("DeviceType", "Mobile");
            dic9.Add("DataCenter", AGG_SYMBOL);
            points.Add(new TimeSeriesPoint(1200, 300, true, dic9));

            return points;
        }

        private static Dictionary<string, Object> GetAnomalyDimension()
        {
            Dictionary<string, Object> dim = new Dictionary<string, Object>();
            dim.Add("Country", "UK");
            dim.Add("DeviceType", AGG_SYMBOL);
            dim.Add("DataCenter", AGG_SYMBOL);

            return dim;
        }

        private static DateTime GetTimestamp()
        {
            return new DateTime(2020, 3, 23, 0, 0, 0);
        }
    }
}

適用対象