class_docstr: This class implements APE (absolute percent error) based detector.
  The class finds the
  
  - best forecast among multiple forecasts which can be
      passed as baselines
  - as well as optimal APE threshold to use to denote an anomaly
  
  
  This class inherits its parameters and attributes from
  
  `~greykite.detection.detector.forecast_based.BestForecast`
  
  and all methods apply here as well. The only difference is: ``param_iterable``
  is not passed but constructed during the ``__init__``.
  
  
  Parameters
  ----------
  Solely inherited from
  `~greykite.detection.detector.forecast_based.BestForecast`
  except for the input parameter `param_iterable` which is constructed in the
  ``__init__``.
  
  Attributes
  ----------
  Solely inherited from
  `~greykite.detection.detector.forecast_based.BestForecast`
code: def __init__(
      self,
      value_cols,
      pred_cols,
      is_anomaly_col=None,
      join_cols=None,
      reward=None,
      anomaly_percent_dict=None,
  ):
      super().__init__(
          value_cols=value_cols,
          pred_cols=pred_cols,
          is_anomaly_col=is_anomaly_col,
          join_cols=join_cols,
          reward=reward,
          anomaly_percent_dict=anomaly_percent_dict,
      )
  
      self.param_iterable = APE_PARAM_ITERABLE
  
file_path: greykite/greykite/detection/detector/ape_based.py
imports: import numpy
  from greykite.common.constants import PREDICTED_ANOMALY_COL
  from greykite.detection.detector.best_forecast import BestForecastDetector
  from greykite.detection.detector.optimizer import CalcResult
label_desc: Use image node_id 1 to create a new APEDetector object from inherited base classes: BestForecastDetector with example: obj = APEDetector(value_cols, pred_cols, is_anomaly_col, join_cols, reward, anomaly_percent_dict)