public static PlotlyChart BuildChart(TimeSeriesAnalysis analysis) { IEnumerable <Graph.Trace> traces = BuildTraces(analysis); PlotlyChart chart = BuildPlotlyChart(analysis.TimeSeries.Name, traces); return(chart); }
private static IEnumerable <Graph.Trace> BuildTraces(TimeSeriesAnalysis analysis) { yield return(BuildTrace("Historical", analysis.Historical)); yield return(BuildTrace("Actual", analysis.Actual)); foreach (ForecastDetails forecastDetails in analysis.Forecasts) { string name = $"{forecastDetails.AlgorithmName} Forecast"; yield return(BuildTrace(name, forecastDetails.Forecast)); } }
private static IEnumerable <TimeSeriesAnalysis> Analyze(IEnumerable <TimeSeries> timeSeriesList) { const int horizon = 100; foreach (TimeSeries timeSeries in timeSeriesList) { Observation[] observations = GapFiller.FillGaps(timeSeries.Observations, timeSeries.Interval).ToArray(); Observation[] historical = observations.Take(observations.Length - horizon).ToArray(); Observation[] actual = observations.Skip(observations.Length - horizon).ToArray(); var forecasts = new List <ForecastDetails>(); Observation[] linearRegressionForecast = LinearRegressionForecaster .Forecast(historical, horizon, timeSeries.Interval); RegressionMetrics linearRegressionMetrics = ForecastScorer.Evaluate(actual, linearRegressionForecast); forecasts.Add(new ForecastDetails("Linear Regression", linearRegressionForecast, linearRegressionMetrics)); Observation[] ssaForecast = SsaForecaster.Forecast(historical, horizon, timeSeries.Interval); RegressionMetrics ssaMetrics = ForecastScorer.Evaluate(actual, ssaForecast); forecasts.Add(new ForecastDetails("SSA", ssaForecast, ssaMetrics)); var analysis = new TimeSeriesAnalysis(timeSeries, historical, actual, forecasts); yield return(analysis); } }