#### TimeSeries / Forecast / 0.2.1

## Forecast

Gives a forecast the next `n`

steps of a given time series based on extrapolation of linear and periodic trends.

## Table of Contents

## Description

This Forecasting algorithm works by fitting a linear trend to the given data, extrapolating it into the future series interval, and then adjusting it based on the expected contributions of each detected periodic component. Periodicity is detected using AutoCorrelate.

*Note that this algorithm only deals with linear and periodic trends. If other artifacts, such as non-periodic spikes or super/sub-linear trends, are present in the data, results will suffer, and as a general rule the further you go in the future, the less accuracy you should expect.*

## Inputs

This algorithm has both a JSON Object Input and a Array Input format.

## JSON Format

This algorithm has a single JSON input format.

{ "series": Double[], "steps": Int, "maxNumPeriods": Int }

{ "series": [1,2,3,4,3,4.62,6,7,5,4,2.01,1,1], "stepsToPredict": 3, "maxNumPeriods": 2 }

- series -
- the input time series dataset. this algorithm assumes the values are evenly spaced. (*(required)*`dx(1) == dx(n)`

) - stepsToPredict -
- the number of timesteps to predict, defaults to the length of the series dataset.*(optional)**The further into the future you predict, the worse the accuracy becomes, so it makes sense to set a value other than the default.* - maxNumPeriods -
- the number of periods to consider, strongest first, defaults to a value of 1.*(optional)*

## Array Format

There are two array input formats; basic and advanced.

## Basic Format

series: Double[]

[1,2,3,4,3,4,6,7,5,4,2,1,1]

- series -
- the input time series dataset. this algorithm assumes the values are evenly spaced. (*(required)*`dx(1) == dx(n)`

)

## Advanced Format

```
[
series: Double[],
stepsToPredict: Int,
maxNumOfPeriods: Int
}
```

[[1,2,3,4,3,4,6,7,5,4,2,1,1], 4, 2]

- series -
- the input time series dataset. this algorithm assumes the values are evenly spaced. (*(required)*`dx(1) == dx(n)`

) - stepsToPredict -
- the number of timesteps to predict, defaults to the length of the series dataset.*(optional)**The further into the future you predict, the worse the accuracy becomes, so it makes sense to set a value other than the default.* - maxNumPeriods -
- the number of periods to consider, strongest first, defaults to a value of 1.*(optional)*

## Outputs

If a JSON object as passed as an input, the JSON format is returned, otherwise the Array format is returned.

## JSON Format

{ "predicted": Double[] }

{ "predicted": [11, 12, 13, 14, 15] }

- predicted - the predicted datapoints extending from the last datapoint in
`series`

.

## Array Format

predicted: Double[]

[1,2,3,4,3,4,6,7,5,4,2,1,1]

- predicted - the predicted datapoints extending from the last datapoint in
`series`

.