{"record":{"id":"2b5a4c74d30b9558","repo":"microsoft/qlib","slug":"empty-data-from-dataset-please-check-your-dataset-2b5a4c","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":"error","filePath":"qlib/contrib/model/pytorch_igmtf.py","lineNumber":260,"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 = dataset.prepare(\n            [\"train\", \"valid\"],\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        train_loss = 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:","sourceCodeStart":242,"sourceCodeEnd":278,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/contrib/model/pytorch_igmtf.py#L242-L278","documentation":"IGMTFModel.fit prepares the train and valid segments and raises if either DataFrame is empty. Without train rows there is nothing to learn from, and without valid rows the early-stopping loop cannot score epochs, so the run is aborted as a dataset configuration error.","triggerScenarios":"Calling fit(dataset) where dataset.prepare(['train','valid'], col_set=['feature','label'], data_key=DK_L) yields an empty train or valid frame: segments outside the data calendar, no instruments resolved, or labels all NaN.","commonSituations":"Misconfigured segment dates in DatasetH, missing qlib binary data (dump not run or wrong provider_uri), expression-engine features returning all NaN for the chosen instruments.","solutions":["Check dataset.prepare('train') and dataset.prepare('valid') shapes before fit and fix whichever is empty","Align segment dates with the actual data calendar (D.calendar)","Verify provider_uri / data dump so instruments have rows"],"exampleFix":"# before\nmodel.fit(dataset)  # segments: train (2025, 2026) but data ends 2020\n\n# after\nfor seg in (\"train\", \"valid\"):\n    assert not dataset.prepare(seg, col_set=\"feature\").empty, seg\nmodel.fit(dataset)","handlingStrategy":"validation","validationCode":"for seg in (\"train\", \"valid\"):\n    if dataset.prepare(seg, col_set=[\"feature\", \"label\"], data_key=DataHandlerLP.DK_L).empty:\n        raise RuntimeError(f\"{seg} segment empty; fix DatasetH config/data\")","typeGuard":null,"tryCatchPattern":"try:\n    model.fit(dataset)\nexcept ValueError as e:\n    if \"Empty data\" in str(e):\n        # log segments + data calendar, fix config, retry once\n        raise","preventionTips":["Pre-flight check both segments' shapes before fit","Validate segment ranges against the data calendar at config time"],"tags":["qlib","igmtf","dataset-config","training-data"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}