microsoft/qlib · error · ValueError
Unsupported reweighter type.
Error message
Unsupported reweighter type.
What it means
ALSTMTSModel.fit() accepts an optional reweighter used to compute per-sample weights for the training and validation loaders. It only handles two cases: reweighter is None (uniform weights of ones) or reweighter is an instance of qlib's Reweighter class. Anything else (a function, lambda, numpy array, dict) raises ValueError.
Source
Thrown at qlib/contrib/model/pytorch_alstm_ts.py:228
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
- Pass None if you do not need sample reweighting.
- Subclass qlib.data.dataset.Reweighting.Reweighter and implement reweight(dataset) returning a pandas Series; pass that instance.
- Check the actual import path of Reweighter in your qlib version and make sure your class inherits from it.
Example fix
# before
model.fit(dataset, reweighter=lambda df: df['volume'])
# after
from qlib.data.dataset import Reweighter
class VolReweighter(Reweighter):
def reweight(self, df):
return df['volume'] / df['volume'].mean()
model.fit(dataset, reweighter=VolReweighter()) 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') 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):
rw = None # or wrap logic in a Reweighter subclass
model.fit(dataset, reweighter=rw)
else:
raise Prevention
- Subclass qlib's Reweighter for custom weighting schemes instead of passing callables or arrays.
- Check isinstance(reweighter, Reweighter) before calling fit() with reweighting enabled.
- Remember this model has no sklearn-style sample_weight support.
When it happens
Trigger: Passing fit(dataset, reweighter=my_func), a raw numpy weight array, or a custom reweighting object that does not subclass qlib.data.dataset.Reweighting.Reweighter.
Common situations: Coming from sklearn-style APIs where sample_weight arrays are accepted directly; writing a bespoke reweighting callable instead of subclassing Reweighter; version drift where the Reweighter import path moved and the isinstance check silently fails.
Related errors
- Unsupported reweighter type.
- Unsupported reweighter type.
- Unsupported reweighter type.
- Unsupported reweighter type.
- Unsupported reweighter type.
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/33a520639cb84b5b.
Report an issue: GitHub.