{"record":{"id":"333a7744083e366a","repo":"microsoft/qlib","slug":"empty-data-from-dataset-please-check-your-dataset-333a77","errorCode":null,"errorMessage":"Empty data from dataset, please check your dataset config.","messagePattern":"Empty data from dataset, please check your dataset config\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"critical","filePath":"qlib/contrib/model/pytorch_gats.py","lineNumber":236,"sourceCode":"\n            score = self.metric_fn(pred, label)\n            scores.append(score.item())\n\n        return np.mean(losses), np.mean(scores)\n\n    def fit(\n        self,\n        dataset: DatasetH,\n        evals_result=dict(),\n        save_path=None,\n    ):\n        df_train, df_valid, df_test = dataset.prepare(\n            [\"train\", \"valid\", \"test\"],\n            col_set=[\"feature\", \"label\"],\n            data_key=DataHandlerLP.DK_L,\n        )\n        if df_train.empty or df_valid.empty:\n            raise ValueError(\"Empty data from dataset, please check your dataset config.\")\n\n        x_train, y_train = df_train[\"feature\"], df_train[\"label\"]\n        x_valid, y_valid = df_valid[\"feature\"], df_valid[\"label\"]\n\n        save_path = get_or_create_path(save_path)\n        stop_steps = 0\n        best_score = -np.inf\n        best_epoch = 0\n        evals_result[\"train\"] = []\n        evals_result[\"valid\"] = []\n\n        # load pretrained base_model\n        if self.base_model == \"LSTM\":\n            pretrained_model = LSTMModel()\n        elif self.base_model == \"GRU\":\n            pretrained_model = GRUModel()\n        else:\n            raise ValueError(\"unknown base model name `%s`\" % self.base_model)","sourceCodeStart":218,"sourceCodeEnd":254,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/contrib/model/pytorch_gats.py#L218-L254","documentation":"GATsModel.fit() prepares the 'train', 'valid', and 'test' segments in one call, then checks that df_train and df_valid are non-empty. If either is empty it raises ValueError before training starts. Like all qlib empty-data errors the cause is dataset scope (segments/instruments/handler), not the GAT model itself.","triggerScenarios":"fit(dataset) where dataset.prepare(['train','valid','test'], ...) yields an empty train or valid DataFrame: bad segment date ranges, instruments with no data, or handler processing dropping all rows.","commonSituations":"Valid segment dates falling outside the dumped qlib bin data range; wrong market instrument file; a custom handler whose label processing produces all-NaN and rows get dropped; date-string formats that silently parse to the wrong range.","solutions":["Inspect dataset.prepare('train', col_set=['feature','label']) and the 'valid' result manually to identify the empty segment.","Correct the segments config so train/valid ranges intersect the data covered by your Qlib data handler.","Check the instruments list matches your data dump (market/instrument file).","Ensure handler label expressions and drop-row processing leave usable rows."],"exampleFix":"# before\nsegments = {'train': ('2008-01-01', '2010-12-31'), 'valid': ('2011-01-01', '2999-12-31')}\n\n# after\nsegments = {'train': ('2008-01-01', '2010-12-31'), 'valid': ('2011-01-01', '2012-12-31')}","handlingStrategy":"validation","validationCode":"for seg in ('train', 'valid'):\n    df = dataset.prepare(seg, col_set=['feature', 'label'], data_key='learn')\n    if df.empty:\n        raise RuntimeError(f\"segment '{seg}' is empty; check dataset config before fit\")","typeGuard":null,"tryCatchPattern":"try:\n    model.fit(dataset)\nexcept ValueError as e:\n    if 'Empty data from dataset' in str(e):\n        # log prepared segment shapes, fix segments/instruments, then retry fit\n        ...\n    raise","preventionTips":["Pre-check all prepared segments in pipeline setup code.","Validate segment date ranges against the data calendar at config load time.","Use integration tests over a tiny known-good dataset to catch scope regressions."],"tags":["qlib","dataset","empty-data","config-validation","gats"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}