microsoft/qlib · error · ValueError

Empty data from dataset, please check your dataset config.

Error message

Empty data from dataset, please check your dataset config.

What it means

KRNNModel.fit prepares train/valid/test segments and raises if the train or valid frame is empty. With no training rows or no validation rows the early-stopping loop cannot operate, so the run aborts with a dataset-config error before any training step.

Source

Thrown at qlib/contrib/model/pytorch_krnn.py:444

            score = self.metric_fn(pred, label)
            scores.append(score.item())

        return np.mean(losses), np.mean(scores)

    def fit(
        self,
        dataset: DatasetH,
        evals_result=dict(),
        save_path=None,
    ):
        df_train, df_valid, df_test = dataset.prepare(
            ["train", "valid", "test"],
            col_set=["feature", "label"],
            data_key=DataHandlerLP.DK_L,
        )
        if df_train.empty or df_valid.empty:
            raise ValueError("Empty data from dataset, please check your dataset config.")

        x_train, y_train = df_train["feature"], df_train["label"]
        x_valid, y_valid = df_valid["feature"], df_valid["label"]

        save_path = get_or_create_path(save_path)
        stop_steps = 0
        train_loss = 0
        best_score = -np.inf
        best_epoch = 0
        evals_result["train"] = []
        evals_result["valid"] = []

        # train
        self.logger.info("training...")
        self.fitted = True

        for step in range(self.n_epochs):
            self.logger.info("Epoch%d:", step)

View on GitHub (pinned to 79633dd950)

Solutions

  1. Assert train/valid frames are non-empty before fit and fix segments/instruments accordingly
  2. Cross-check segment bounds against D.calendar output
  3. Re-dump or point to the correct data provider if data is missing

Example fix

# before
model.fit(dataset)

# after
assert all(not dataset.prepare(s, col_set="label").empty for s in ("train", "valid"))
model.fit(dataset)
Defensive patterns

Strategy: validation

Validate before calling

for seg in ("train", "valid"):
    if dataset.prepare(seg, col_set=["feature", "label"], data_key=DataHandlerLP.DK_L).empty:
        raise RuntimeError(f"{seg} empty; fix dataset config")

Try / catch

try:
    model.fit(dataset)
except ValueError as e:
    if "Empty data" in str(e):
        raise RuntimeError("Fix DatasetH segments/data before training") from e
    raise

Prevention

When it happens

Trigger: fit(dataset) where dataset.prepare(['train','valid','test'], col_set=['feature','label'], data_key=DK_L) returns an empty train or valid DataFrame.

Common situations: Segment dates outside the data calendar; missing dumped data under provider_uri; label expressions producing all-NaN columns that leave the frame empty after processing.

Related errors


AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15). Data as JSON: /api/errors/5b165ddec561316a. Report an issue: GitHub.