class_docstr: A multi-output model that arranges regressors into a chain.
  
  This will create one model per output. The prediction of the first output will be used as a
  feature in the second output. The prediction for the second output will be used as a feature
  for the third, etc. This "chain model" is therefore capable of capturing dependencies between
  outputs.
  
  Parameters
  ----------
  model
      The regression model used to make predictions for each target.
  order
      A list with the targets order in which to construct the chain. If `None` then the order
      will be inferred from the order of the keys in the target.
  
  Examples
  --------
  
  >>> from river import evaluate
  >>> from river import linear_model
  >>> from river import metrics
  >>> from river import multioutput
  >>> from river import preprocessing
  >>> from river import stream
  
  >>> from sklearn import datasets
  
  >>> dataset = stream.iter_sklearn_dataset(
  ...     dataset=datasets.load_linnerud(),
  ...     shuffle=True,
  ...     seed=42
  ... )
  
  >>> model = multioutput.RegressorChain(
  ...     model=(
  ...         preprocessing.StandardScaler() |
  ...         linear_model.LinearRegression(intercept_lr=0.3)
  ...     ),
  ...     order=[0, 1, 2]
  ... )
  
  >>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
  
  >>> evaluate.progressive_val_score(dataset, model, metric)
  MicroAverage(MAE): 12.733525
code: def __init__(self, model: base.Regressor, order: list | None = None):
      super().__init__(model, order)
  
imports: from __future__ import annotations
  import collections
  import copy
  import functools
  import random
  from river import base, linear_model
  from river.utils.math import minkowski_distance, prod
label_desc: Use image node_id 1 to create a new RegressorChain object from inherited base classes: BaseChain, base with example: obj = RegressorChain(model, order)