class_docstr: This class enables anomaly detection algorithms which use baseline
  forecasts in their logic.
  
  The class assumes that for a given dataset (`df`) which can for example include
  timestamps and observed values for a timeseries as well as anomaly labels (optional),
  a number of (say k) forecasts are given.
  The goal is to use those k forecasts as baselines to detect anomalies.
  
  To that end this class implements joining of the k forecasts with the observed
  data (`df`), thus producing k joined dataframes.
  
  This class facilitates the join by implementing it by using the input `join_cols`
  using its `join_with_forecasts` method within the class.
  In order to use this class user only required to implement these three methods:
  
      - ``add_features_one_df``: Note that the class uses this method to fully implement
          ``add_features`` because the class can assume that the same function can
          be used for all k forecasts.
      - ``calc_with_param``: the prediction logic, assuming the optimal param
          is determined
      - ``fit``: The fit method
  
  This class also already implements ``prep_df_for_predict`` which is basically
  a combination of
  
  - Joining with baselines: ``join_with_forecasts``
  - Adding features: ``add_features``
  
  In this way, with minimal implementation, one can implement a large variety of
  "forecast based" anomaly detectors.
  
  
  Parameters
  ----------
  value_cols : `list` [`str`] or None
      The columns for the response metric (which can be multivariate).
      If not None, and also ``pred_cols`` (below) also not None, we expect them
      to be ordered consistently.
  pred_cols : `list` [`str`] or None
      The columns for the response metric (which can be multivariate).
      If not None, and also ``value_cols`` (above) also not None, we expect them
      to be ordered consistently.
  is_anomaly_col : `str` or None
  join_cols : `list` [`str`] or None
  reward : See docstring for
      `~/greykite.detection.detector.detector.Detector`
  anomaly_percent_dict : See docstring for
      `~/greykite.detection.detector.detector.Detector`
  param_iterable : See docstring for
      `~/greykite.detection.detector.detector.Detector`
  
  Attributes
  ----------
  Solely inherited from `~/greykite.detection.detector.detector.Detector`
code: def __init__(
      self,
      value_cols=None,
      pred_cols=None,
      is_anomaly_col=None,
      join_cols=None,
      reward=None,
      anomaly_percent_dict=None,
      param_iterable=None,
  ):
      super().__init__(
          reward=reward,
          anomaly_percent_dict=anomaly_percent_dict,
          param_iterable=param_iterable,
      )
      self.value_cols = value_cols
      self.pred_cols = pred_cols
      self.is_anomaly_col = is_anomaly_col
      self.join_cols = join_cols
  
imports: from greykite.detection.detector.detector import Detector
label_desc: Use image node_id 1 to create a new ForecastBasedDetector object from inherited base classes: Detector with example: obj = ForecastBasedDetector(value_cols, pred_cols, is_anomaly_col, join_cols, reward, anomaly_percent_dict, param_iterable)