solarforecastarbiter.reference_forecasts.persistence.persistence_interval

solarforecastarbiter.reference_forecasts.persistence.persistence_interval(observation, data_start, data_end, forecast_start, interval_length, interval_label, load_data)[source]

Make a persistence forecast for an observation using the mean values of each interval_length bin from data_start to data_end. The forecast starts at forecast_start and is of length data_end - data_start. A frequent use of this function is to create a day ahead persistence forecast using the previous day’s observations.

In the example below, we use GHI to be concrete but the concept applies to any kind of observation data. The persistence forecast for multiple intervals is:

\[GHI_{t_{f_m}} = \overline{GHI_{t_{{start}_m}} \ldots GHI_{t_{{end}_m}}}\]

where:

\[\begin{split}m &\in \{0, 1, \ldots \frac{\textrm{data end} - \textrm{data start}} {\textrm{interval_length}} - 1\} \\ t_{start_m} &= \textrm{data start} + m \times \textrm{interval_length} \\ t_{end_m} &= \textrm{data start} + (1 + m) \times \textrm{interval_length} \\ t_{f_m} &= \textrm{forecast start} + m \times \textrm{interval_length} \\\end{split}\]

Further, persistence of multiple intervals requires that data_start, data_end, and forecast_start are all integer multiples of interval_length. For example, if interval_length = 60 minutes, data_start may be 12:00 or 01:00, but not 12:30.

Parameters:
observation : datamodel.Observation
data_start : pd.Timestamp

Observation data start. Forecast is inclusive of this instant if observation.interval_label is beginning or instantaneous.

data_end : pd.Timestamp

Observation data end. Forecast is inclusive of this instant if observation.interval_label is ending or instantaneous.

forecast_start : pd.Timestamp

Forecast start. Forecast is inclusive of this instant if interval_label is beginning or instantaneous.

interval_length : pd.Timedelta

Forecast interval length

interval_label : str

instantaneous, beginning, or ending

load_data : function

A function that loads the observation data. Must have the signature load_data(observation, data_start, data_end) and properly account for observation interval label.

Returns:
forecast : pd.Series

The persistence forecast.