Skip to content

Support for Business Days ('B' frequency) in Training and Prediction #3245

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
LiPingYen opened this issue Mar 3, 2025 · 0 comments
Open
Labels
bug Something isn't working

Comments

@LiPingYen
Copy link

LiPingYen commented Mar 3, 2025

Description

I would like to use business days ('B') as the time unit for both training and prediction in GluonTS. However, when I attempt to use 'B' as the frequency in my dataset and model configuration, I encounter repeated FutureWarnings, and the model fails to train properly.

Additionally:

  • When I set freq='B', the model fails to train properly.
  • When I change freq='D', the model trains without any issues.

To Reproduce

seed_everything(202402, workers=True)
test_dta = pd.read_csv('data/integrate_data.csv', parse_dates=True, index_col=0)

# Prepare single stock data
stock_id = '2330'
filtered_dta = test_dta.query("date >= '2019-12-01'").query(f"stock_id == {stock_id}")
date_new_index = pd.date_range(start=filtered_dta.index.min(), end=filtered_dta.index.max(), freq='B')
filtered_dta2 = filtered_dta.reindex(date_new_index)
stock_name = filtered_dta2.values[0][1]

freq = 'B' 
prediction_length = 14
context_length = 28
num_layers = 8
hidden_size = 64
batch_size = 128
num_batches_per_epoch = 5
max_epochs = 5

train = PandasDataset(filtered_dta2[:-prediction_length], target='stock_close_price', feat_dynamic_real=dynamic_features, freq=freq)
test = PandasDataset(filtered_dta2, target='stock_close_price', feat_dynamic_real=dynamic_features, freq=freq)

estimator = DeepAREstimator(
    freq=freq, 
    prediction_length=prediction_length, 
    context_length=context_length,
    num_layers=num_layers,
    hidden_size=hidden_size,
    batch_size=batch_size,
    num_batches_per_epoch=num_batches_per_epoch,
    distr_output=NormalOutput(),
    trainer_kwargs={'accelerator': 'mps', 'devices': 'auto', 'strategy': 'auto', 'callbacks': [RichProgressBar()], 'deterministic': True, 'max_epochs': max_epochs, 'log_every_n_steps': 100},
)
predictor = estimator.train(train)

Error message or code output

/Users/tayloryen/.local/share/virtualenvs/python_gluonts-OHlRrEvD/lib/python3.12/site-packages/gluonts/transform/feature.py:364: FutureWarning: Period with BDay freq is deprecated and will be removed in a future version. Use a DatetimeIndex with BDay freq instead.
  index = pd.period_range(start, periods=length, freq=start.freq)
/Users/tayloryen/.local/share/virtualenvs/python_gluonts-OHlRrEvD/lib/python3.12/site-packages/gluonts/transform/feature.py:364: FutureWarning: PeriodDtype[B] is deprecated and will be removed in a future version. Use a DatetimeIndex with freq='B' instead

Environment

  • Operating system: macOS 15.3.1
  • Python version: 3.12.8
  • GluonTS version: 0.16.0
  • pytorch-lightning version: 2.4.0
  • torch: 2.6.0

Expected Behavior

  • GluonTS should support business days ('B') as a valid frequency without warnings or errors.
  • The model should train and predict correctly when using 'B' as the time unit.

Request

Could you confirm whether GluonTS currently supports business day ('B') frequencies? If not, would it be possible to add support for this? Alternatively, is there a workaround to correctly handle business day frequency in training and prediction?

Thank you!

@LiPingYen LiPingYen added the bug Something isn't working label Mar 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant