TimeSeriesCatalog.DetectSeasonality Metodo

Definizione

Nei dati delle serie temporali, la stagionalità (o periodicità) è la presenza di variazioni che si verificano a intervalli regolari specifici, ad esempio settimanali, mensili o trimestrali.

Questo metodo rileva questo intervallo prevedibile (o periodo) adottando tecniche di analisi più quattro. Supponendo che i valori di input abbiano lo stesso intervallo di tempo (ad esempio, i dati del sensore raccolti ogni secondo ordinati in base ai timestamp), questo metodo accetta un elenco di dati di serie temporali e restituisce il periodo regolare per i dati stagionali di input, se è possibile trovare una fluttuazione o un modello prevedibile che si ripeta in questo periodo in tutti i valori di input.

Restituisce -1 se non viene trovato alcun criterio di questo tipo, ovvero i valori di input non seguono una fluttuazione stagionale.

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

Parametri

catalog
AnomalyDetectionCatalog

Catalogo di rilevamento della stagionalità.

input
IDataView

Input DataView.I dati sono un'istanza di IDataView.

inputColumnName
String

Nome della colonna da elaborare. I dati della colonna devono essere Double.

seasonalityWindowSize
Int32

Limite superiore sul numero di valori da considerare nei valori di input. Se impostato su -1, usare l'intero input per adattare il modello; se impostato su un numero intero positivo, verrà considerato solo il numero di valori windowSize della prima finestra. Il valore predefinito è -1.

randomnessThreshold
Double

Soglia di casualità che specifica in che modo i valori di input seguono un modello prevedibile ricorrente come dati stagionali. L'intervallo è compreso tra [0, 1]. Per impostazione predefinita, è impostato su 0,95.

Restituisce

L'intervallo regolare per l'input come dati stagionali, altrimenti restituisce -1.

Esempio

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;
            }
        }

    }
}

Si applica a