microsoft/qlib · error · ValueError
model is not fitted yet!
Error message
model is not fitted yet!
What it means
Raised by SFM model predict() in qlib/contrib/model/pytorch_sfm.py:438 when self.fitted is False. The flag flips True only after fit() completes (including restoring best params); predict() guards inference with it. An unfitted or half-fit model raises immediately before touching the dataset.
Source
Thrown at qlib/contrib/model/pytorch_sfm.py:438
def loss_fn(self, pred, label):
mask = ~torch.isnan(label)
if self.loss == "mse":
return self.mse(pred[mask], label[mask])
raise ValueError("unknown loss `%s`" % self.loss)
def metric_fn(self, pred, label):
mask = torch.isfinite(label)
if self.metric in ("", "loss"):
return -self.loss_fn(pred[mask], label[mask])
raise ValueError("unknown metric `%s`" % self.metric)
def predict(self, dataset: DatasetH, segment: Union[Text, slice] = "test"):
if not self.fitted:
raise ValueError("model is not fitted yet!")
x_test = dataset.prepare(segment, col_set="feature", data_key=DataHandlerLP.DK_I)
index = x_test.index
self.sfm_model.eval()
x_values = x_test.values
sample_num = x_values.shape[0]
preds = []
for begin in range(sample_num)[:: self.batch_size]:
if sample_num - begin < self.batch_size:
end = sample_num
else:
end = begin + self.batch_size
x_batch = torch.from_numpy(x_values[begin:end]).float().to(self.device)
with torch.no_grad():
pred = self.sfm_model(x_batch).detach().cpu().numpy()View on GitHub (pinned to 79633dd950)
Solutions
- Run fit() to completion before predict().
- Check the fitted attribute (or 'best score' log line) before predicting in scripts.
- Fix the underlying fit()-time failure if fit never finishes.
Example fix
if not model.fitted:
model.fit(dataset)
preds = model.predict(dataset, segment="test") Defensive patterns
Strategy: validation
Validate before calling
if not model.fitted:
raise RuntimeError("SFM model must complete fit() before predict()")
preds = model.predict(dataset, segment="test") Type guard
def is_fitted(model) -> bool:
return bool(getattr(model, "fitted", False)) Try / catch
try:
preds = model.predict(dataset, segment)
except ValueError as e:
if "not fitted" in str(e):
raise RuntimeError("fit() never completed; fix training errors first") from e
raise Prevention
- Guard predict calls with model.fitted checks in pipelines.
- Abort workflows on fit failure rather than attempting inference.
When it happens
Trigger: predict() called before fit(); predict() after a fit() that crashed (empty data, bad loss/metric config, OOM) — fitted remains False.
Common situations: Retry loops in backtest scripts that call predict without checking fit status; notebook cells run out of order after a failed training cell.
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/b0fd9d1f07ce7137.
Report an issue: GitHub.