Skip to content

Panel Data

PanelForecaster fits a model independently to each group in a pandas DataFrame.


Usage

import pandas as pd
from durbyn import AutoARIMA, PanelForecaster

# Panel data with multiple groups
data = pd.DataFrame({
    "store": ["A"] * 48 + ["B"] * 48 + ["C"] * 48,
    "date": list(range(48)) * 3,
    "sales": [...],  # sales data for each store
})

# Create a panel forecaster
pf = PanelForecaster(model=AutoARIMA(), groupby="store")

# Fit to each group
pf.fit(data, y_col="sales", m=12, date_col="date")

# Forecast all groups
result = pf.forecast(h=12, level=[80, 95])

# Long-format DataFrame
df = result.to_dataframe()
print(df)

PanelForecaster

Constructor

Parameter Type Description
model BaseForecaster Template model (deep-copied per group)
groupby str \| list[str] Column(s) to group by

.fit(data, y_col="y", m=1, date_col=None)

Parameter Type Default Description
data pd.DataFrame required Panel data
y_col str "y" Target column name
m int 1 Seasonal period
date_col str \| None None Date column for sorting within groups

Returns self for method chaining.

.forecast(h=10, level=None)

Parameter Type Default Description
h int 10 Forecast horizon
level list[int] \| None None Confidence levels

Returns a PanelForecastResult.


PanelForecastResult

Attributes

Attribute Type Description
groups dict[Any, ForecastResult] Forecast result per group key

.to_dataframe()

Returns a long-format pandas.DataFrame with a group column and all forecast columns (step, mean, lower/upper intervals).


Multi-Group Keys

When grouping by multiple columns, group keys are tuples:

pf = PanelForecaster(model=AutoARIMA(), groupby=["region", "product"])
pf.fit(data, y_col="sales", m=12)
result = pf.forecast(h=6)

# Access individual group
fc = result.groups[("East", "Widget")]

Error Handling

If a model fails to fit or forecast for a group, a warning is issued and that group is skipped.

import warnings

with warnings.catch_warnings(record=True):
    pf.fit(data, y_col="sales", m=12)