R/agent_iterate_forecast.R
iterate_forecast.RdThis function orchestrates the forecast iteration process for a Finn agent, including exploratory data analysis,
iterate_forecast(
agent_info,
max_iter = 3,
weighted_mape_goal = 0.03,
parallel_processing = NULL,
inner_parallel = FALSE,
num_cores = NULL,
seed = 123
)Agent info from set_agent_info()
Maximum number of iterations for forecast optimization.
Weighted MAPE goal the agent is trying to achieve for each time series
Default of NULL runs no parallel processing and forecasts each individual time series one after another. 'local_machine' leverages all cores on current machine Finn is running on. 'spark' runs time series in parallel on a spark cluster in Azure Databricks or Azure Synapse. Parallel agent workflows require ellmer 0.4.0 or later on the main process and every worker.
Run components of forecast process inside a specific time series in parallel. Can only be used if parallel_processing is set to NULL or 'spark'.
Number of cores to run when parallel processing is set up. Used when running parallel computations on local machine or within Azure. Default of NULL uses total amount of cores on machine minus one. Can't be greater than number of cores on machine minus 1.
Set seed for random number generator. Numeric value.
Future quality is evaluated when final_models() selects the winner
within each iteration. Iteration ranking starts from the earliest minimum
WMAPE and may prefer a later eligible iteration within 10 percent relative
WMAPE when its average model WMAPE is strictly lower. Local mean, median, and
standard deviation summarize individual-model backtests, excluding simple
averages. This retains evidence that a setting improves other models even if
the current best model does not improve. Global summary fields retain their
original meaning: run WMAPE for mean and median, and zero standard deviation.
Agent comparisons and stopping use WMAPE rounded to four decimal places.
Search-context selection does not overwrite a better saved local forecast.
Global promotion applies to one complete iteration, and all saved global
winners must reference that same iteration. Individual models and averages
may differ within it. Mixed global iteration metadata is rejected before
publication or update; interrupted writes are not treated as successful.
Normal accuracy-goal stopping requires a complete eligible result and finite WMAPE, not another
soft-quality check. A winner with soft concerns may therefore beat an earlier
winner on accuracy. Loaded backtests, run history, and best-run metrics are reused without
re-evaluating past future paths. Rejected evaluations still consume iteration
budget without repeating the same fit as an infrastructure retry. If no
eligible result exists, the workflow fails or an enabled local phase handles
unresolved global series. Rankings are kept in memory, not new files.
Hierarchical accuracy uses reconciled backtests; later comparisons and
reconciliation do not require retained source-node quality rankings. Final
reconciliation publishes the selected mixture without future-quality scoring,
whole-set fallback, or extra refitting.
if (FALSE) { # \dontrun{
# load example data
hist_data <- timetk::m4_monthly %>%
dplyr::filter(date >= "2013-01-01") %>%
dplyr::rename(Date = date) %>%
dplyr::mutate(id = as.character(id))
# set up Finn project
project <- set_project_info(
project_name = "Demo_Project",
combo_variables = c("id"),
target_variable = "value",
date_type = "month"
)
# set up LLM
llm <- ellmer::chat_azure_openai(model = "gpt-4o-mini")
# set up agent info
agent_info <- set_agent_info(
project_info = project,
llm = llm,
input_data = hist_data,
forecast_horizon = 6
)
# run the forecast iteration process
iterate_forecast(
agent_info = agent_info,
max_iter = 3,
weighted_mape_goal = 0.03
)
} # }