Back to models
Forecaster

WindFMForecaster

Categorical in XInsamplePred intPred int insampleExogenous

WindFM zero-shot forecaster for wind power data.

This forecaster wraps WindFM [1], a foundation model for wind power forecasting [2], through the sktime forecasting interface. This implementation is inference-only and uses the upstream WindFMPredictor preprocessing and autoregressive inference path internally.

Quickstart

python
from sktime.forecasting.windfm import WindFMForecaster

estimator = WindFMForecaster(model_path='NeoQuasar/WindFM', tokenizer_path='NeoQuasar/WindFM-Tokenizer', device='cpu', columns=None, freq='1h', start='2000-01-01', clip=5.0, predict_kwargs=None, deterministic=False)

Parameters(9)

model_pathstr, default=”NeoQuasar/WindFM”

Hugging Face repository identifier or local path for the WindFM model. The default is the WindFM checkpoint [3]. Other released checkpoints include WindFM-robust [4].

tokenizer_pathstr, default=”NeoQuasar/WindFM-Tokenizer”

Hugging Face repository identifier or local path for the WindFM tokenizer. The default is the WindFM-Tokenizer checkpoint [5]. The released WindFM-Tokenizer-robust is also available [6].

devicestr, default=”cpu”
Device used for model and tokenizer inference.
columnslist of str or None, default=None

Optional mapping from columns in X to WindFM weather covariates. If provided, it must contain five entries ordered as "wind_speed", "wind_direction", "density", "temperature", and "pressure". If None, X must contain the literal WindFM covariate names.

freqstr or pandas offset, default=”1h”

Frequency used to synthesize timestamps for WindFM when the training index is not a pd.PeriodIndex or pd.DatetimeIndex. The default is one hour, matching the example data distributed by WindFM.

startstr or pd.Timestamp, default=”2000-01-01”

Start timestamp used with freq to synthesize timestamps for WindFM when the training index is not datetime-like. The default date is arbitrary; it provides deterministic calendar fields for WindFM while keeping the synthetic timestamp path independent of the original index.

clipfloat, default=5.0

Input normalization clipping value passed to WindFMPredictor.

predict_kwargsdict or None, default=None

Additional keyword arguments passed directly to WindFMPredictor.predict. Examples are T, top_k, top_p, sample_count, and verbose.

deterministicbool, default=False
Whether predictions should reset the PyTorch random seed before autoregressive sampling.

Examples

>>> import pandas as pd
>>> import torch
>>> from sktime.forecasting.base import ForecastingHorizon
>>> from sktime.forecasting.windfm import WindFMForecaster
>>> df = pd. read_csv (
... "https://raw.githubusercontent.com/shiyu-coder/WindFM/"
... "refs/heads/master/examples/data/121522.csv",
... parse_dates = ["time" ],
... index_col = "time",
... )
>>> lookback, pred_len = 240, 80
>>> covariate_cols = [
... "wind_speed",
... "wind_direction",
... "density",
... "temperature",
... "pressure",
... ]
>>> y_train = df ["power" ]. iloc [: lookback ]
>>> X_train = df [covariate_cols ]. iloc [: lookback ]
>>> fh = ForecastingHorizon (
... df. index [lookback: lookback + pred_len ],
... is_relative = False,
... )
>>> device = "cuda:0" if torch. cuda. is_available () else "cpu"
>>> forecaster = WindFMForecaster (
... model_path = "NeoQuasar/WindFM",
... tokenizer_path = "NeoQuasar/WindFM-Tokenizer",
... # robust variants:
... # model_path="NeoQuasar/WindFM-robust",
... # tokenizer_path="NeoQuasar/WindFM-Tokenizer-robust",
... device = device,
... deterministic = True,
... predict_kwargs = {
... "T": 1.0,
... "top_k": 0,
... "top_p": 0.9,
... "sample_count": 100,
... "verbose": True,
... },
... )
>>> forecaster. fit (y_train, X = X_train) WindFMForecaster(
... )
>>> y_pred = forecaster. predict (fh = fh)
>>> y_quantiles = forecaster. predict_quantiles (
... fh = fh,
... alpha = [0.1, 0.5, 0.9 ],
... )

References

[1]

WindFM GitHub repository: https://github.com/shiyu-coder/WindFM

[2]

Hang Fan, Yu Shi, Zongliang Fu, Shuo Chen, Wei Wei, Wei Xu, Jian Li (2025). WindFM: An Open-Source Foundation Model for Zero-Shot Wind Power Forecasting. arXiv. https://arxiv.org/abs/2509.06311

[6]

WindFM-Tokenizer-robust model card: https://huggingface.co/NeoQuasar/WindFM-Tokenizer-robust