From 584ae6676423437e2b12209aef46ea26ea427918 Mon Sep 17 00:00:00 2001 From: Zeeshan Siddiqui Date: Mon, 1 Jul 2019 16:18:28 -0700 Subject: [PATCH 1/2] Fix typo in time series forecasting API. --- .../ForecastingWithConfidenceInterval.cs | 4 +- .../ExtensionsCatalog.cs | 14 +++---- src/Microsoft.ML.TimeSeries/SSaForecasting.cs | 40 +++++++++---------- .../SequentialForecastingTransformBase.cs | 8 ++-- .../SsaForecastingBase.cs | 6 +-- .../TimeSeriesDirectApi.cs | 12 +++--- .../TimeSeriesEstimatorTests.cs | 4 +- 7 files changed, 44 insertions(+), 44 deletions(-) diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/TimeSeries/ForecastingWithConfidenceInterval.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/TimeSeries/ForecastingWithConfidenceInterval.cs index 571cf9325a..f9e7f891f3 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/TimeSeries/ForecastingWithConfidenceInterval.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/TimeSeries/ForecastingWithConfidenceInterval.cs @@ -48,8 +48,8 @@ public static void Example() // Instantiate the forecasting model. var model = ml.Forecasting.ForecastBySsa(outputColumnName, inputColumnName, 5, 11, data.Count, 5, confidenceLevel: 0.95f, - forcastingConfidentLowerBoundColumnName: "ConfidenceLowerBound", - forcastingConfidentUpperBoundColumnName: "ConfidenceUpperBound"); + lowerBoundConfidenceColumn: "ConfidenceLowerBound", + upperBoundConfidenceColumn: "ConfidenceUpperBound"); // Train. var transformer = model.Fit(dataView); diff --git a/src/Microsoft.ML.TimeSeries/ExtensionsCatalog.cs b/src/Microsoft.ML.TimeSeries/ExtensionsCatalog.cs index bfec448467..2581347b3c 100644 --- a/src/Microsoft.ML.TimeSeries/ExtensionsCatalog.cs +++ b/src/Microsoft.ML.TimeSeries/ExtensionsCatalog.cs @@ -164,11 +164,11 @@ public static SrCnnAnomalyEstimator DetectAnomalyBySrCnn(this TransformsCatalog /// The desired rank of the subspace used for SSA projection (parameter r). This parameter should be in the range in [1, windowSize]. /// If set to null, the rank is automatically determined based on prediction error minimization. /// The maximum rank considered during the rank selection process. If not provided (i.e. set to null), it is set to windowSize - 1. - /// The flag determining whether the model should be stabilized. + /// The flag determining whether the model should be stabilized. /// The flag determining whether the meta information for the model needs to be maintained. /// The maximum growth on the exponential trend. - /// The name of the confidence interval lower bound column. If not specified then confidence intervals will not be calculated. - /// The name of the confidence interval upper bound column. If not specified then confidence intervals will not be calculated. + /// The name of the confidence interval lower bound column. If not specified then confidence intervals will not be calculated. + /// The name of the confidence interval upper bound column. If not specified then confidence intervals will not be calculated. /// The confidence level for forecasting. /// Set this to true if horizon will change after training(at prediction time). /// @@ -182,10 +182,10 @@ public static SrCnnAnomalyEstimator DetectAnomalyBySrCnn(this TransformsCatalog public static SsaForecastingEstimator ForecastBySsa( this ForecastingCatalog catalog, string outputColumnName, string inputColumnName, int windowSize, int seriesLength, int trainSize, int horizon, bool isAdaptive = false, float discountFactor = 1, RankSelectionMethod rankSelectionMethod = RankSelectionMethod.Exact, int? rank = null, - int? maxRank = null, bool shouldStablize = true, bool shouldMaintainInfo = false, GrowthRatio? maxGrowth = null, string forcastingConfidentLowerBoundColumnName = null, - string forcastingConfidentUpperBoundColumnName = null, float confidenceLevel = 0.95f, bool variableHorizon = false) => + int? maxRank = null, bool shouldStabilize = true, bool shouldMaintainInfo = false, GrowthRatio? maxGrowth = null, string lowerBoundConfidenceColumn = null, + string upperBoundConfidenceColumn = null, float confidenceLevel = 0.95f, bool variableHorizon = false) => new SsaForecastingEstimator(CatalogUtils.GetEnvironment(catalog), outputColumnName, inputColumnName, windowSize, seriesLength, trainSize, - horizon, isAdaptive, discountFactor, rankSelectionMethod, rank, maxRank, shouldStablize, shouldMaintainInfo, maxGrowth, forcastingConfidentLowerBoundColumnName, - forcastingConfidentUpperBoundColumnName, confidenceLevel, variableHorizon); + horizon, isAdaptive, discountFactor, rankSelectionMethod, rank, maxRank, shouldStabilize, shouldMaintainInfo, maxGrowth, lowerBoundConfidenceColumn, + upperBoundConfidenceColumn, confidenceLevel, variableHorizon); } } diff --git a/src/Microsoft.ML.TimeSeries/SSaForecasting.cs b/src/Microsoft.ML.TimeSeries/SSaForecasting.cs index ab8684c147..d6e7f9e8ab 100644 --- a/src/Microsoft.ML.TimeSeries/SSaForecasting.cs +++ b/src/Microsoft.ML.TimeSeries/SSaForecasting.cs @@ -42,10 +42,10 @@ internal sealed class Options : TransformInputBase public string Name; [Argument(ArgumentType.AtMostOnce, HelpText = "The name of the confidence interval lower bound column.", ShortName = "cnfminname", SortOrder = 3)] - public string ForcastingConfidentLowerBoundColumnName; + public string LowerBoundConfidenceColumn; [Argument(ArgumentType.AtMostOnce, HelpText = "The name of the confidence interval upper bound column.", ShortName = "cnfmaxnname", SortOrder = 3)] - public string ForcastingConfidentUpperBoundColumnName; + public string UpperBoundConfidenceColumn; [Argument(ArgumentType.AtMostOnce, HelpText = "The discount factor in [0,1] used for online updates.", ShortName = "disc", SortOrder = 5)] public float DiscountFactor = 1; @@ -67,7 +67,7 @@ internal sealed class Options : TransformInputBase public int? MaxRank = null; [Argument(ArgumentType.AtMostOnce, HelpText = "The flag determining whether the model should be stabilized.", SortOrder = 3)] - public bool ShouldStablize = true; + public bool ShouldStabilize = true; [Argument(ArgumentType.AtMostOnce, HelpText = "The flag determining whether the meta information for the model needs to be maintained.", SortOrder = 3)] public bool ShouldMaintainInfo = false; @@ -97,14 +97,14 @@ public BaseArguments(Options options) { Source = options.Source; Name = options.Name; - ForcastingConfidentLowerBoundColumnName = options.ForcastingConfidentLowerBoundColumnName; - ForcastingConfidentUpperBoundColumnName = options.ForcastingConfidentUpperBoundColumnName; + LowerBoundConfidenceColumn = options.LowerBoundConfidenceColumn; + UpperBoundConfidenceColumn = options.UpperBoundConfidenceColumn; WindowSize = options.WindowSize; DiscountFactor = options.DiscountFactor; IsAdaptive = options.IsAdaptive; RankSelectionMethod = options.RankSelectionMethod; Rank = options.Rank; - ShouldStablize = options.ShouldStablize; + ShouldStablize = options.ShouldStabilize; MaxGrowth = options.MaxGrowth; SeriesLength = options.SeriesLength; TrainSize = options.TrainSize; @@ -255,11 +255,11 @@ public sealed class SsaForecastingEstimator : IEstimatorThe desired rank of the subspace used for SSA projection (parameter r). This parameter should be in the range in [1, windowSize]. /// If set to null, the rank is automatically determined based on prediction error minimization. /// The maximum rank considered during the rank selection process. If not provided (i.e. set to null), it is set to windowSize - 1. - /// The flag determining whether the model should be stabilized. + /// The flag determining whether the model should be stabilized. /// The flag determining whether the meta information for the model needs to be maintained. /// The maximum growth on the exponential trend. - /// The name of the confidence interval lower bound column. If not specified then confidence intervals will not be calculated. - /// The name of the confidence interval upper bound column. If not specified then confidence intervals will not be calculated. + /// The name of the confidence interval lower bound column. If not specified then confidence intervals will not be calculated. + /// The name of the confidence interval upper bound column. If not specified then confidence intervals will not be calculated. /// The confidence level for forecasting. /// Set this to true if horizon will change after training. internal SsaForecastingEstimator(IHostEnvironment env, @@ -274,11 +274,11 @@ internal SsaForecastingEstimator(IHostEnvironment env, RankSelectionMethod rankSelectionMethod = RankSelectionMethod.Exact, int? rank = null, int? maxRank = null, - bool shouldStablize = true, + bool shouldStabilize = true, bool shouldMaintainInfo = false, GrowthRatio? maxGrowth = null, - string forcastingConfidentLowerBoundColumnName = null, - string forcastingConfidentUpperBoundColumnName = null, + string lowerBoundConfidenceColumn = null, + string upperBoundConfidenceColumn = null, float confidenceLevel = 0.95f, bool variableHorizon = false) : this(env, new SsaForecastingTransformer.Options @@ -291,12 +291,12 @@ internal SsaForecastingEstimator(IHostEnvironment env, RankSelectionMethod = rankSelectionMethod, Rank = rank, MaxRank = maxRank, - ShouldStablize = shouldStablize, + ShouldStabilize = shouldStabilize, ShouldMaintainInfo = shouldMaintainInfo, MaxGrowth = maxGrowth, ConfidenceLevel = confidenceLevel, - ForcastingConfidentLowerBoundColumnName = forcastingConfidentLowerBoundColumnName, - ForcastingConfidentUpperBoundColumnName = forcastingConfidentUpperBoundColumnName, + LowerBoundConfidenceColumn = lowerBoundConfidenceColumn, + UpperBoundConfidenceColumn = upperBoundConfidenceColumn, SeriesLength = seriesLength, TrainSize = trainSize, VariableHorizon = variableHorizon, @@ -344,14 +344,14 @@ public SchemaShape GetOutputSchema(SchemaShape inputSchema) resultDic[_options.Name] = new SchemaShape.Column( _options.Name, SchemaShape.Column.VectorKind.Vector, NumberDataViewType.Single, false); - if (!string.IsNullOrEmpty(_options.ForcastingConfidentUpperBoundColumnName)) + if (!string.IsNullOrEmpty(_options.UpperBoundConfidenceColumn)) { - resultDic[_options.ForcastingConfidentLowerBoundColumnName] = new SchemaShape.Column( - _options.ForcastingConfidentLowerBoundColumnName, SchemaShape.Column.VectorKind.Vector, + resultDic[_options.LowerBoundConfidenceColumn] = new SchemaShape.Column( + _options.LowerBoundConfidenceColumn, SchemaShape.Column.VectorKind.Vector, NumberDataViewType.Single, false); - resultDic[_options.ForcastingConfidentUpperBoundColumnName] = new SchemaShape.Column( - _options.ForcastingConfidentUpperBoundColumnName, SchemaShape.Column.VectorKind.Vector, + resultDic[_options.UpperBoundConfidenceColumn] = new SchemaShape.Column( + _options.UpperBoundConfidenceColumn, SchemaShape.Column.VectorKind.Vector, NumberDataViewType.Single, false); } diff --git a/src/Microsoft.ML.TimeSeries/SequentialForecastingTransformBase.cs b/src/Microsoft.ML.TimeSeries/SequentialForecastingTransformBase.cs index 27557df7de..4f1e96039c 100644 --- a/src/Microsoft.ML.TimeSeries/SequentialForecastingTransformBase.cs +++ b/src/Microsoft.ML.TimeSeries/SequentialForecastingTransformBase.cs @@ -28,11 +28,11 @@ internal abstract class ForecastingArgumentsBase [Argument(ArgumentType.Required, HelpText = "The name of the confidence interval lower bound column.", ShortName = "cnfminname", SortOrder = 2)] - public string ForcastingConfidentLowerBoundColumnName; + public string LowerBoundConfidenceColumn; [Argument(ArgumentType.Required, HelpText = "The name of the confidence interval upper bound column.", ShortName = "cnfmaxnname", SortOrder = 2)] - public string ForcastingConfidentUpperBoundColumnName; + public string UpperBoundConfidenceColumn; [Argument(ArgumentType.AtMostOnce, HelpText = "The length of series from the begining used for training.", ShortName = "wnd", SortOrder = 3)] @@ -67,8 +67,8 @@ private protected SequentialForecastingTransformBase(int windowSize, int initial } private protected SequentialForecastingTransformBase(ForecastingArgumentsBase args, string name, int outputLength, IHostEnvironment env) - : this(args.TrainSize, args.SeriesLength, args.Source, args.ForcastingConfidentLowerBoundColumnName, - args.ForcastingConfidentUpperBoundColumnName, args.Name, name, outputLength, env) + : this(args.TrainSize, args.SeriesLength, args.Source, args.LowerBoundConfidenceColumn, + args.UpperBoundConfidenceColumn, args.Name, name, outputLength, env) { } diff --git a/src/Microsoft.ML.TimeSeries/SsaForecastingBase.cs b/src/Microsoft.ML.TimeSeries/SsaForecastingBase.cs index 86a48781c7..f7911e1047 100644 --- a/src/Microsoft.ML.TimeSeries/SsaForecastingBase.cs +++ b/src/Microsoft.ML.TimeSeries/SsaForecastingBase.cs @@ -127,8 +127,8 @@ internal sealed class SsaForecastingBase : SequentialForecastingTransformBase Model; public SsaForecastingBase(SsaForecastingOptions options, string name, IHostEnvironment env, SsaForecastingBaseWrapper parent) - : base(options.TrainSize, 0, options.Source, options.Name, options.ForcastingConfidentLowerBoundColumnName, - options.ForcastingConfidentUpperBoundColumnName, name, options.VariableHorizon ? 0: options.Horizon, env) + : base(options.TrainSize, 0, options.Source, options.Name, options.LowerBoundConfidenceColumn, + options.UpperBoundConfidenceColumn, name, options.VariableHorizon ? 0: options.Horizon, env) { Host.CheckUserArg(0 <= options.DiscountFactor && options.DiscountFactor <= 1, nameof(options.DiscountFactor), "Must be in the range [0, 1]."); IsAdaptive = options.IsAdaptive; @@ -136,7 +136,7 @@ public SsaForecastingBase(SsaForecastingOptions options, string name, IHostEnvir ConfidenceLevel = options.ConfidenceLevel; // Creating the master SSA model Model = new AdaptiveSingularSpectrumSequenceModelerInternal(Host, options.TrainSize, options.SeriesLength, options.WindowSize, - options.DiscountFactor, options.RankSelectionMethod, options.Rank, options.MaxRank, !string.IsNullOrEmpty(options.ForcastingConfidentLowerBoundColumnName), + options.DiscountFactor, options.RankSelectionMethod, options.Rank, options.MaxRank, !string.IsNullOrEmpty(options.LowerBoundConfidenceColumn), options.ShouldStablize, options.ShouldMaintainInfo, options.MaxGrowth); StateRef = new State(); diff --git a/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs b/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs index d8f4387d75..00b8ec6613 100644 --- a/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs +++ b/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs @@ -338,8 +338,8 @@ public void SsaForecast() ConfidenceLevel = 0.95f, Source = "Value", Name = "Forecast", - ForcastingConfidentLowerBoundColumnName = "MinCnf", - ForcastingConfidentUpperBoundColumnName = "MaxCnf", + LowerBoundConfidenceColumn = "MinCnf", + UpperBoundConfidenceColumn = "MaxCnf", WindowSize = 10, SeriesLength = 11, TrainSize = 22, @@ -397,8 +397,8 @@ public void SsaForecastPredictionEngine() SeriesLength = 11, TrainSize = 22, Horizon = 4, - ForcastingConfidentLowerBoundColumnName = "ConfidenceLowerBound", - ForcastingConfidentUpperBoundColumnName = "ConfidenceUpperBound", + LowerBoundConfidenceColumn = "ConfidenceLowerBound", + UpperBoundConfidenceColumn = "ConfidenceUpperBound", VariableHorizon = true }; @@ -413,8 +413,8 @@ public void SsaForecastPredictionEngine() var model = ml.Transforms.Text.FeaturizeText("Text_Featurized", "Text") .Append(ml.Transforms.Conversion.ConvertType("Value", "Value", DataKind.Single)) .Append(ml.Forecasting.ForecastBySsa("Forecast", "Value", 10, 11, 22, 4, - forcastingConfidentLowerBoundColumnName: "ConfidenceLowerBound", - forcastingConfidentUpperBoundColumnName: "ConfidenceUpperBound", variableHorizon: true)) + lowerBoundConfidenceColumn: "ConfidenceLowerBound", + upperBoundConfidenceColumn: "ConfidenceUpperBound", variableHorizon: true)) .Append(ml.Transforms.Concatenate("Forecast", "Forecast", "ConfidenceLowerBound", "ConfidenceUpperBound")) .Fit(dataView); diff --git a/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesEstimatorTests.cs b/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesEstimatorTests.cs index efb25b43e3..ee1b40156e 100644 --- a/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesEstimatorTests.cs +++ b/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesEstimatorTests.cs @@ -95,8 +95,8 @@ void TestSsaForecastingEstimator() // Train var pipe = new SsaForecastingEstimator(Env, "Forecast", "Value", 10, 11, 22, 4, - forcastingConfidentLowerBoundColumnName: "ConfidenceLowerBound", - forcastingConfidentUpperBoundColumnName: "ConfidenceUpperBound"); + lowerBoundConfidenceColumn: "ConfidenceLowerBound", + upperBoundConfidenceColumn: "ConfidenceUpperBound"); var xyData = new List { new TestDataXY() { A = new float[inputSize] } }; var stringData = new List { new TestDataDifferntType() { data_0 = new string[inputSize] } }; From 327409a1d28636ec0bbefc368cb9be45c2241414 Mon Sep 17 00:00:00 2001 From: Zeeshan Siddiqui Date: Mon, 1 Jul 2019 16:22:46 -0700 Subject: [PATCH 2/2] manifest. --- test/BaselineOutput/Common/EntryPoints/core_manifest.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/BaselineOutput/Common/EntryPoints/core_manifest.json b/test/BaselineOutput/Common/EntryPoints/core_manifest.json index c5a734b6b3..166e75173b 100644 --- a/test/BaselineOutput/Common/EntryPoints/core_manifest.json +++ b/test/BaselineOutput/Common/EntryPoints/core_manifest.json @@ -4095,7 +4095,7 @@ "Default": false }, { - "Name": "ForcastingConfidentLowerBoundColumnName", + "Name": "LowerBoundConfidenceColumn", "Type": "String", "Desc": "The name of the confidence interval lower bound column.", "Aliases": [ @@ -4107,7 +4107,7 @@ "Default": null }, { - "Name": "ForcastingConfidentUpperBoundColumnName", + "Name": "UpperBoundConfidenceColumn", "Type": "String", "Desc": "The name of the confidence interval upper bound column.", "Aliases": [ @@ -4153,7 +4153,7 @@ "Default": null }, { - "Name": "ShouldStablize", + "Name": "ShouldStabilize", "Type": "Bool", "Desc": "The flag determining whether the model should be stabilized.", "Required": false,