Skip to content

BATS / TBATS

BATS (Box-Cox, ARMA errors, Trend, Seasonality) and TBATS (Trigonometric BATS) handle complex seasonal patterns, including multiple seasonal periods.


BATS

from durbyn import BATS

# Single seasonal period
model = BATS().fit(y, m=12)
fc = model.forecast(h=12, level=[80, 95])

# Multiple seasonal periods (pass a list as m)
model = BATS().fit(y, m=[24, 168])  # daily + weekly
fc = model.forecast(h=24)

# With specific components
model = BATS(
    use_box_cox=True,
    use_trend=True,
    use_damped_trend=True,
    use_arma_errors=True,
).fit(y, m=12)

Parameters

Parameter Type Default Description
use_box_cox bool \| None None Use Box-Cox transform. None for auto
use_trend bool \| None None Include trend. None for auto
use_damped_trend bool \| None None Damp the trend. None for auto
use_arma_errors bool True Model errors as ARMA process
bc_lower float 0.0 Box-Cox lower bound
bc_upper float 1.0 Box-Cox upper bound
biasadj bool False Bias adjustment

TBATS

Extends BATS with trigonometric representation for seasonal components, enabling non-integer seasonal periods.

from durbyn import TBATS

# Non-integer seasonal periods
model = TBATS().fit(y, m=[12.5, 52.18])
fc = model.forecast(h=12, level=[80, 95])

# Standard usage
model = TBATS(
    use_box_cox=True,
    use_damped_trend=True,
).fit(y, m=12)
fc = model.forecast(h=24)

Parameters

Same as BATS:

Parameter Type Default Description
use_box_cox bool \| None None Use Box-Cox transform. None for auto
use_trend bool \| None None Include trend. None for auto
use_damped_trend bool \| None None Damp the trend. None for auto
use_arma_errors bool True Model errors as ARMA process
bc_lower float 0.0 Box-Cox lower bound
bc_upper float 1.0 Box-Cox upper bound
biasadj bool False Bias adjustment

When to Use BATS vs TBATS

Feature BATS TBATS
Integer seasonal periods Yes Yes
Non-integer seasonal periods No Yes
Multiple seasonal periods Yes Yes
Speed Faster Slower
Very long seasonal periods Limited Better

Tip

Use BATS when you have integer seasonal periods (e.g., monthly data with m=12). Use TBATS when you have non-integer or very long seasonal periods (e.g., hourly data with m=[24, 168.25]).