.. _commands:

CLI commands
=============

.. automodule:: etna.commands
    :no-members:
    :no-inherited-members:

Basic ``forecast`` usage:
-------------------------

.. code-block:: console

        Usage: etna forecast [OPTIONS] CONFIG_PATH TARGET_PATH FREQ OUTPUT_PATH [EXOG_PATH]
                             [FORECAST_CONFIG_PATH] [RAW_OUTPUT] [KNOWN_FUTURE]

        Command to make forecast with etna without coding.

        Arguments:
            CONFIG_PATH             path to yaml config with desired pipeline  [required]
            TARGET_PATH             path to csv with data to forecast  [required]
            FREQ                    frequency of timestamp in files in pandas format  [required]
            OUTPUT_PATH             where to save forecast  [required]
            [EXOG_PATH]             path to csv with exog data
            [FORECAST_CONFIG_PATH]  path to yaml config with forecast params
            [RAW_OUTPUT]            by default we return only forecast without features [default: False]
            [KNOWN_FUTURE]          list of all known_future columns (regressor columns). If not specified then all exog_columns considered known_future [default: None]

**Forecast config parameters**

* :code:`start_timestamp` - timestamp with the starting point of forecast.
* :code:`estimate_n_folds` - whether to estimate the number of folds from data. Works only when prediction intervals are enabled. Requires :code:`context_size` parameter set in pipeline config.

Other parameters that could be set in the configuration file could be found in :meth:`~etna.pipeline.pipeline.Pipeline.forecast` method documentation.

Setting these parameters is optional.


**Pipeline config parameters**

* :code:`context_size` - minimum number of points in the history that is required by pipeline to produce a forecast.

Further information on pipeline parameters could be found in :class:`~etna.pipeline.pipeline.Pipeline` method documentation.


**How to create config?**

Example of pipeline's config:

.. code-block:: yaml

    _target_: etna.pipeline.Pipeline
    horizon: 4
    model:
      _target_: etna.models.CatBoostMultiSegmentModel
    transforms:
      - _target_: etna.transforms.LinearTrendTransform
        in_column: target
      - _target_: etna.transforms.SegmentEncoderTransform

Example of forecast params config:

.. code-block:: yaml

    prediction_interval: true
    quantiles: [0.025, 0.975]
    n_folds: 3

Parameter :code:`start_timestamp` could be set similarly:

.. code-block:: yaml

    prediction_interval: true
    quantiles: [0.025, 0.975]
    start_timestamp: "2020-01-12"

Example of a pair of configs for number of folds estimation:

.. code-block:: yaml

    _target_: etna.pipeline.Pipeline
    horizon: 4
    model:
      _target_: etna.models.CatBoostMultiSegmentModel
    transforms:
      - _target_: etna.transforms.LinearTrendTransform
        in_column: target
      - _target_: etna.transforms.SegmentEncoderTransform
    context_size: 1

.. code-block:: yaml

    prediction_interval: true
    quantiles: [0.025, 0.975]
    estimate_n_folds: true

**How to prepare data?**

Example of dataset with data to forecast:

=============  ===========  ==========
  timestamp      segment      target
=============  ===========  ==========
2020-01-01     segment_1         1
2020-01-02     segment_1         2
2020-01-03     segment_1         3
2020-01-04     segment_1         4
...
2020-01-10     segment_2        10
2020-01-11     segment_2        20
=============  ===========  ==========

Example of exog dataset:

=============  ===========  ===============  ===============
  timestamp      segment      regressor_1      regressor_2
=============  ===========  ===============  ===============
2020-01-01     segment_1          11               12
2020-01-02     segment_1          22               13
2020-01-03     segment_1          31               14
2020-01-04     segment_1          42               15
...
2020-02-10     segment_2         101               61
2020-02-11     segment_2         205               54
=============  ===========  ===============  ===============

---------------------------


Basic ``backtest`` usage:
--------------------------

.. code-block:: console

        Usage: etna backtest [OPTIONS] CONFIG_PATH BACKTEST_CONFIG_PATH TARGET_PATH FREQ OUTPUT_PATH [EXOG_PATH] [KNOWN_FUTURE]

        Command to run backtest with etna without coding.

        Arguments:
            CONFIG_PATH             path to yaml config with desired pipeline  [required]
            BACKTEST_CONFIG_PATH    path to yaml with backtest run config [required]
            TARGET_PATH             path to csv with data to forecast  [required]
            FREQ                    frequency of timestamp in files in pandas format  [required]
            OUTPUT_PATH             where to save forecast  [required]
            [EXOG_PATH]             path to csv with exog data
            [KNOWN_FUTURE]          list of all known_future columns (regressor columns). If not specified then all exog_columns considered known_future [default: None]

**Backtest config parameters**

* :code:`estimate_n_folds` - whether to estimate the number of folds from data. Requires :code:`context_size` parameter set in pipeline config.

Other parameters that could be set in the configuration file could be found in :meth:`~etna.pipeline.base.BasePipeline.backtest` method documentation.

Setting these parameters is optional.


**Pipeline config parameters**

* :code:`context_size` - minimum number of points in the history that is required by pipeline to produce a forecast.

Further information on pipeline parameters could be found in :class:`~etna.pipeline.pipeline.Pipeline` method documentation.

**How to create configs?**

Example of pipeline's config:

.. code-block:: yaml

    _target_: etna.pipeline.Pipeline
    horizon: 4
    model:
      _target_: etna.models.CatBoostMultiSegmentModel
    transforms:
      - _target_: etna.transforms.LinearTrendTransform
        in_column: target
      - _target_: etna.transforms.SegmentEncoderTransform

Example of backtest run config:

.. code-block:: yaml

    n_folds: 3
    n_jobs: 3
    metrics:
      - _target_: etna.metrics.MAE
      - _target_: etna.metrics.MSE
      - _target_: etna.metrics.MAPE
      - _target_: etna.metrics.SMAPE

Example of a pair of configs for number of folds estimation for backtest:

.. code-block:: yaml

    _target_: etna.pipeline.Pipeline
    horizon: 4
    model:
      _target_: etna.models.CatBoostMultiSegmentModel
    transforms:
      - _target_: etna.transforms.LinearTrendTransform
        in_column: target
      - _target_: etna.transforms.SegmentEncoderTransform
    context_size: 1

.. code-block:: yaml

    n_folds: 200
    n_jobs: 4
    metrics:
      - _target_: etna.metrics.MAE
      - _target_: etna.metrics.SMAPE
    estimate_n_folds: true


**How to prepare data?**

Example of dataset with data to forecast:

=============  ===========  ==========
  timestamp      segment      target
=============  ===========  ==========
2020-01-01     segment_1         1
2020-01-02     segment_1         2
2020-01-03     segment_1         3
2020-01-04     segment_1         4
...
2020-01-10     segment_2        10
2020-01-11     segment_2        20
=============  ===========  ==========

Example of exog dataset:

=============  ===========  ===============  ===============
  timestamp      segment      regressor_1      regressor_2
=============  ===========  ===============  ===============
2020-01-01     segment_1          11               12
2020-01-02     segment_1          22               13
2020-01-03     segment_1          31               14
2020-01-04     segment_1          42               15
...
2020-02-10     segment_2         101               61
2020-02-11     segment_2         205               54
=============  ===========  ===============  ===============