Share via


TimeSeriesCatalog.DetectSeasonality Método

Definição

Em dados de série temporal, a sazonalidade (ou periodicidade) é a presença de variações que ocorrem em intervalos regulares específicos, como semanal, mensal ou trimestral.

Esse método detecta esse intervalo previsível (ou período) adotando técnicas de análise fourier. Supondo que os valores de entrada tenham o mesmo intervalo de tempo (por exemplo, dados do sensor coletados a cada segundo ordenado por carimbos de data/hora), esse método usa uma lista de dados de série temporal e retorna o período regular para os dados sazonais de entrada, se uma flutuação ou padrão previsível pode ser encontrado que se repete ou se repete durante esse período em todos os valores de entrada.

Retorna -1 se nenhum padrão desse tipo for encontrado, ou seja, os valores de entrada não seguirão uma flutuação sazonal.

public static int DetectSeasonality (this Microsoft.ML.AnomalyDetectionCatalog catalog, Microsoft.ML.IDataView input, string inputColumnName, int seasonalityWindowSize = -1, double randomnessThreshold = 0.95);
static member DetectSeasonality : Microsoft.ML.AnomalyDetectionCatalog * Microsoft.ML.IDataView * string * int * double -> int
<Extension()>
Public Function DetectSeasonality (catalog As AnomalyDetectionCatalog, input As IDataView, inputColumnName As String, Optional seasonalityWindowSize As Integer = -1, Optional randomnessThreshold As Double = 0.95) As Integer

Parâmetros

catalog
AnomalyDetectionCatalog

O catálogo de detecção de sazonalidade.

input
IDataView

DataView de Entrada.Os dados são uma instância de IDataView.

inputColumnName
String

Nome da coluna a ser processada. Os dados da coluna devem ser Double.

seasonalityWindowSize
Int32

Um limite superior no número de valores a serem considerados nos valores de entrada. Quando definido como -1, use toda a entrada para ajustar o modelo; quando definido como um inteiro positivo, somente o primeiro número de valores windowSize será considerado. O valor padrão é -1.

randomnessThreshold
Double

Limite de aleatoriedade que especifica o quão confiantes os valores de entrada seguem um padrão previsível recorrente como dados sazonais. O intervalo está entre [0, 1]. Por padrão, ele é definido como 0,95.

Retornos

O intervalo regular para a entrada como dados sazonais, caso contrário, retornará -1.

Exemplos

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

namespace Samples.Dynamic
{
    public static class DetectSeasonality
    {
        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 a seasonal data as input: y = sin(2 * Pi + x)
            var seasonalData = Enumerable.Range(0, 100).Select(x => new TimeSeriesData(Math.Sin(2 * Math.PI + x)));

            // Load the input data as a DataView.
            var dataView = mlContext.Data.LoadFromEnumerable(seasonalData);

            /* Two option parameters:
             * seasonalityWindowSize: Default value is -1. When set to -1, use the whole input to fit model; 
             * when set to a positive integer, only the first windowSize number of values will be considered.
             * randomnessThreshold: Randomness threshold that specifies how confidence the input values follows 
             * a predictable pattern recurring as seasonal data. By default, it is set as 0.99. 
             * The higher the threshold is set, the more strict recurring pattern the 
             * input values should follow to be determined as seasonal data.
             */
            int period = mlContext.AnomalyDetection.DetectSeasonality(
                dataView,
                nameof(TimeSeriesData.Value),
                seasonalityWindowSize: 40);

            // Print the Seasonality Period result.
            Console.WriteLine($"Seasonality Period: #{period}");
        }

        private class TimeSeriesData
        {
            public double Value;

            public TimeSeriesData(double value)
            {
                Value = value;
            }
        }

    }
}

Aplica-se a