microsoft/qlib · error · ValueError
Unsupported reweighter type.
Error message
Unsupported reweighter type.
What it means
The TS LSTM fit() accepts a reweighter only in two forms: None (uniform weights of ones) or an instance of qlib.dataset.common.Reweighter (whose reweight(df) method supplies sample weights). Anything else raises ValueError('Unsupported reweighter type.') before DataLoaders are constructed.
Source
Thrown at qlib/contrib/model/pytorch_lstm_ts.py:217
save_path=None,
reweighter=None,
):
dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L)
dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L)
if dl_train.empty or dl_valid.empty:
raise ValueError("Empty data from dataset, please check your dataset config.")
dl_train.config(fillna_type="ffill+bfill") # process nan brought by dataloader
dl_valid.config(fillna_type="ffill+bfill") # process nan brought by dataloader
if reweighter is None:
wl_train = np.ones(len(dl_train))
wl_valid = np.ones(len(dl_valid))
elif isinstance(reweighter, Reweighter):
wl_train = reweighter.reweight(dl_train)
wl_valid = reweighter.reweight(dl_valid)
else:
raise ValueError("Unsupported reweighter type.")
train_loader = DataLoader(
ConcatDataset(dl_train, wl_train),
batch_size=self.batch_size,
shuffle=True,
num_workers=self.n_jobs,
drop_last=True,
)
valid_loader = DataLoader(
ConcatDataset(dl_valid, wl_valid),
batch_size=self.batch_size,
shuffle=False,
num_workers=self.n_jobs,
drop_last=True,
)
save_path = get_or_create_path(save_path)
View on GitHub (pinned to 79633dd950)
Solutions
- Wrap your weighting logic in qlib.dataset.common.Reweighter (implement its reweight(df) method) and pass that instance.
- Omit the argument (reweighter=None) for uniform weights.
- If using a builtin, qlib provides Reweighter subclasses (e.g. in qlib/contrib/eva/alpha or similar weighting utilities) — reuse them where they fit.
Example fix
# before
model.fit(dataset, reweighter=np.array([0.5, 1.5, ...])) # ValueError: Unsupported reweighter type.
# after
from qlib.data.dataset import Reweighter
class MyReweighter(Reweighter):
def reweight(self, data_frame):
return data_frame["label"].abs().values # your weights
model.fit(dataset, reweighter=MyReweighter()) Defensive patterns
Strategy: type-guard
Validate before calling
from qlib.data.dataset import Reweighter
if reweighter is not None and not isinstance(reweighter, Reweighter):
raise TypeError("reweighter must be None or a qlib Reweighter instance")
model.fit(dataset, reweighter=reweighter) Type guard
from qlib.data.dataset import Reweighter
def is_valid_reweighter(rw) -> bool:
return rw is None or isinstance(rw, Reweighter) Try / catch
try:
model.fit(dataset, reweighter=rw)
except ValueError as e:
if "Unsupported reweighter" in str(e):
raise TypeError("Wrap weights in a qlib Reweighter subclass") from e
raise Prevention
- Never pass raw arrays/callables as reweighter — always a Reweighter subclass.
- Import Reweighter from qlib.data.dataset (qlib.dataset.common) so isinstance checks match.
- Implement reweight(data_frame) returning one weight per sample.
When it happens
Trigger: model.fit(dataset, reweighter=X) where X is neither None nor a Reweighter instance — e.g. a numpy array of weights, a dict, a callable, or a custom class that mimics Reweighter but does not subclass it.
Common situations: Passing a raw weight vector because the model's loss takes weights; implementing sample weighting ad hoc instead of via Reweighter; passing a Reweighter imported from the wrong module path or a reimplementation.
Related errors
- Unsupported reweighter type.
- Unsupported reweighter type.
- optimizer {} is not supported!
- unknown loss `%s`
- unknown metric `%s`
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/b46a6b15fe0f0d2c.
Report an issue: GitHub.