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]).