- Why did TimeGPT make this forecast?
- What is the forecast sensitive to?
- Which signals have been useful historically?
df and future X_df from
those guides.
Compare historical relationship analyses
explain() provides two complementary analyses:

The analyses emphasize different patterns in the same historical data. Results were generated locally from TimeGPT 2.1.
Allocate a forecast using historical relationships
TimeGPT can also use those historical weights to divide the movement of a forecast around its starting value:"granger" and "transfer_entropy" appear in two different places. As the
method argument to explain() (above) they screen historical relationships
without a forecast. As feature_contributions_type in forecast() (below) they
use those same relationship measures to allocate a forecast. Same names, two
mechanisms.
Both allocations add to the same forecast movement, but distribute it using different historical evidence.
Check whether a ranking is stable
A feature ranking can change when the historical window changes. Re-running the analysis over adjacent windows helps reveal persistent and temporary signals:
Rolling 180-day windows show which historical signals persist and which depend on the selected period.
Practical details
Output and additivity
Output and additivity
explain() weights are nonnegative and add to one.
Granger-weighted and transfer-entropy-weighted forecast contributions add
to TimeGPT together with base_value. Intervention contributions are
calculated one input at a time and need not add up to the forecast.Categorical inputs
Categorical inputs
categorical_exog_list. Historical
relationship analyses encode categories consistently before measuring
lagged relationships. Treat the result as a ranking rather than a numeric
distance between category labels.For any feature_contributions_type other than "shapley", categorical
features cannot be combined with hist_exog_list when the request also
covers historical timestamps, that is forecast(..., add_history=True). The
historical/future column mapping cannot be represented faithfully once the
categorical columns are split out, so the request is rejected rather than
returning a silently wrong explanation. Either keep the exogenous features
all-numeric, drop hist_exog_list, or use "shapley". A plain
forecast() call is unaffected and supports this combination.Request limits
Request limits
When no signal is detected
When no signal is detected
explain() returns
equal weights. This can happen with short series, constant values, or a
historical window that contains little predictive information.