public static async Task SubmitAutoMLForecastAsync()

in sdk/dotnet/AzureML-Samples-CSharp/Jobs/AutomlJob/AutoMLJobOperations.cs [130:258]


    public static async Task<MachineLearningJobResource> SubmitAutoMLForecastAsync(
        ResourceGroupResource resourceGroup,
        string workspaceName,
        string id,
        string experimentName,
        string environmentId,
        string computeId)
    {
        Console.WriteLine("Creating an AutoML Forecast job...");
        MachineLearningWorkspaceResource ws = await resourceGroup.GetMachineLearningWorkspaces().GetAsync(workspaceName);

        var trainData = new MLTableJobInput(new Uri("https://raw.githubusercontent.com/Azure/azureml-examples/main/cli/jobs/automl-standalone-jobs/cli-automl-forecasting-task-energy-demand/training-mltable-folder"))
        {
            Mode = InputDeliveryMode.ReadOnlyMount,
            Description = "Train data",
        };
        var validationData = new MLTableJobInput(new Uri("https://raw.githubusercontent.com/Azure/azureml-examples/main/cli/jobs/automl-standalone-jobs/cli-automl-forecasting-task-energy-demand/validation-mltable-folder"))
        {
            Mode = InputDeliveryMode.ReadOnlyMount,
            Description = "Validation data",
        };
        var trainingDataSettings = new TrainingDataSettings(trainData);

        AutoMLVertical taskDetails = new Forecasting
        {
            LogVerbosity = LogVerbosity.Debug,
            PrimaryMetric = ForecastingPrimaryMetrics.NormalizedRootMeanSquaredError,
            AllowedModels = new List<ForecastingModels>() { ForecastingModels.ExponentialSmoothing, ForecastingModels.GradientBoosting },
            BlockedModels = new List<ForecastingModels>() { ForecastingModels.Average },
            FeaturizationSettings = new TableVerticalFeaturizationSettings
            {
                EnableDnnFeaturization = false,
                Mode = FeaturizationMode.Auto,
            },
            ForecastingSettings = new ForecastingSettings
            {
                CountryOrRegionForHolidays = "US",
                TimeColumnName = "timeStamp",
                ShortSeriesHandlingConfig = ShortSeriesHandlingConfiguration.Auto,
                // Frequency = "1",
                FeatureLags = FeatureLags.Auto,
                TargetAggregateFunction = TargetAggregationFunction.Mean,
                //// Time column name is present in the grain columns. Please remove it from grain list.
                //TimeSeriesIdColumnNames = new List<string>() { "temp" },
                UseStl = UseStl.Season,
                // Number of periods between the origin time of one CV fold and the next fold.
                CvStepSize = 1,
                Seasonality = new AutoSeasonality(),
                ForecastHorizon = new CustomForecastHorizon(2),
                TargetLags = new CustomTargetLags(new List<int> { 1 }),
                TargetRollingWindowSize = new AutoTargetRollingWindowSize(),

            },
            DataSettings = new TableVerticalDataSettings("precip", trainingDataSettings)
            {
                ValidationData = new TableVerticalValidationDataSettings()
                {
                    Data = validationData,
                    // ValidationDataSize = .05,
                    NCrossValidations = new CustomNCrossValidations(2),
                },
                //// Test split is not supported for task type: forecasting. 
                //TestData = new TestDataSettings()
                //{
                //    Data = testData,
                //    TestDataSize = .20,
                //},
            },

            TrainingSettings = new TrainingSettings
            {
                EnableDnnTraining = false,
                EnableStackEnsemble = false,
                EnableVoteEnsemble = true,
                EnsembleModelDownloadTimeout = TimeSpan.FromSeconds(250),
                StackEnsembleSettings = new StackEnsembleSettings()
                {
                    StackMetaLearnerTrainPercentage = 0.12,
                    StackMetaLearnerType = StackMetaLearnerType.LightGBMRegressor
                },
                EnableModelExplainability = false,
                EnableOnnxCompatibleModels = false,
            },
            LimitSettings = new TableVerticalLimitSettings
            {
                MaxTrials = 5,
                Timeout = TimeSpan.FromMinutes(1800),
                MaxConcurrentTrials = 2,
                EnableEarlyTermination = true,
                ExitScore = 0.90,
                MaxCoresPerTrial = -1,
                TrialTimeout = TimeSpan.FromMinutes(1200),
            },
        };
        // AutoMLVertical
        var autoMLJob = new AutoMLJob(taskDetails)
        {
            ExperimentName = experimentName,
            DisplayName = "AutoMLJob forecasting-" + Guid.NewGuid().ToString("n").Substring(0, 6),
            EnvironmentId = environmentId,
            IsArchived = false,
            ComputeId = computeId,
            Resources = new ResourceConfiguration
            {
                InstanceCount = 2,
            },
            Properties = new Dictionary<string, string>
                {
                    { "property-name", "property-value" },
                },
            Tags = new Dictionary<string, string>
                {
                    { "tag-name", "tag-value" },
                },

            // Environment variables included in the job.
            EnvironmentVariables = new Dictionary<string, string>()
                {
                    { "env-var", "env-var-value" }
                },
            Description = "This is a description of test AutoMLJob for forecast",
        };

        MachineLearningJobData MachineLearningJobData = new MachineLearningJobData(autoMLJob);
        ArmOperation<MachineLearningJobResource> jobOperation = await ws.GetMachineLearningJobs().CreateOrUpdateAsync(WaitUntil.Completed, id, MachineLearningJobData);
        MachineLearningJobResource jobResource = jobOperation.Value;
        Console.WriteLine($"JobCreateOrUpdateOperation {jobResource.Data.Id} created.");
        return jobResource;
    }