microsoft/qlib · error · ValueError
model is not fitted yet!
Error message
model is not fitted yet!
What it means
Thrown by TRAModel.predict when self.fitted is False. TRAModel (temporal routing adaptor) sets fitted only after a full train run (which also writes info.json to logdir). Note predict additionally asserts the dataset is an MTSDatasetH, so the fitted check fires after that type check passes.
Source
Thrown at qlib/contrib/model/pytorch_tra.py:503
"alpha": self.alpha,
"seed": self.seed,
"logdir": self.logdir,
"pretrain": self.pretrain,
"init_state": self.init_state,
"transport_method": self.transport_method,
"use_daily_transport": self.use_daily_transport,
},
"best_eval_metric": -best_score, # NOTE: -1 for minimize
"metrics": {"train": train_metrics, "valid": valid_metrics, "test": test_metrics},
}
with open(self.logdir + "/info.json", "w") as f:
json.dump(info, f)
def predict(self, dataset, segment="test"):
assert isinstance(dataset, MTSDatasetH), "TRAModel only supports `qlib.contrib.data.dataset.MTSDatasetH`"
if not self.fitted:
raise ValueError("model is not fitted yet!")
test_set = dataset.prepare(segment)
metrics, preds, _, _ = self.test_epoch(-1, test_set, return_pred=True)
self.logger.info("test metrics: %s" % metrics)
return preds
class RNN(nn.Module):
"""RNN Model
Args:
input_size (int): input size (# features)
hidden_size (int): hidden size
num_layers (int): number of hidden layers
rnn_arch (str): rnn architecture
use_attn (bool): whether use attention layer.View on GitHub (pinned to 79633dd950)
Solutions
- Run the full TRA training entry point (model.train / the workflow's fit stage) to completion before predicting.
- If training failed, read the earlier traceback and fix it — fitted is only set on the success path.
- Persist the trained TRAModel (e.g. save state + logdir) and reload the fitted object instead of predicting from a fresh instance.
Example fix
# before model = TRAModel(...) model.predict(mts_dataset) # ValueError: not fitted # after model = TRAModel(...) model.train(mts_dataset, ...) model.predict(mts_dataset)
Defensive patterns
Strategy: validation
Validate before calling
from qlib.contrib.data.dataset import MTSDatasetH assert isinstance(dataset, MTSDatasetH), "TRAModel requires MTSDatasetH" assert getattr(model, "fitted", False), "TRAModel not fitted — run train(...) before predict"
Type guard
def tra_predict_ready(model, dataset) -> bool:
from qlib.contrib.data.dataset import MTSDatasetH
return isinstance(dataset, MTSDatasetH) and getattr(model, "fitted", False) Try / catch
try:
preds = model.predict(dataset)
except ValueError as e:
if "not fitted" in str(e):
raise RuntimeError("Complete TRA training before evaluation") from e
raise Prevention
- Run TRA train and eval as ordered stages in the workflow, gating eval on train success.
- Check logdir/info.json exists as evidence training completed before predicting.
When it happens
Trigger: Calling TRAModel.predict(dataset) where dataset is an MTSDatasetH but model.train(...) was never called or raised before completion (e.g. logging/threading errors or a failed epoch) — fitted stays False and predict raises.
Common situations: TRA workflow scripts that train and evaluate in separate stages; a crashed train (OOM, bad task config) followed by an eval stage that unconditionally predicts; reusing a model object after partially running TRA's task-aware training.
Related errors
- model is not fitted yet!
- model is not fitted yet!
- model is not fitted yet!
- model is not fitted yet!
- model is not fitted yet!
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/3e7112af5836f5ba.
Report an issue: GitHub.