From f1c4d9f936a422b09043274b35dd235968461a38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Morales?= Date: Mon, 2 Oct 2023 13:46:33 -0600 Subject: [PATCH] move distributed API reference to quickstart (#229) --- README.md | 35 +- nbs/distributed.forecast.ipynb | 2630 +---------------- .../quick_start_distributed.ipynb | 1471 +++++++-- nbs/figs/logo.png | Bin 0 -> 3850 bytes nbs/figs/quick_start_distributed__sample.png | Bin 149563 -> 0 bytes ...k_start_distributed__sample_prediction.png | Bin 145409 -> 0 bytes nbs/index.ipynb | 22 +- 7 files changed, 1300 insertions(+), 2858 deletions(-) create mode 100644 nbs/figs/logo.png delete mode 100644 nbs/figs/quick_start_distributed__sample.png delete mode 100644 nbs/figs/quick_start_distributed__sample_prediction.png diff --git a/README.md b/README.md index 0406c720..532aa885 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@
- +

Machine Learning πŸ€– Forecast @@ -39,7 +39,7 @@ data using remote clusters. `conda install -c conda-forge mlforecast` For more detailed instructions you can refer to the [installation -page](docs/getting-started/install.html). +page](https://nixtla.github.io/mlforecast/docs/getting-started/install.html). ## Quick Start @@ -61,11 +61,11 @@ mlf.predict(12) ``` **Get Started with this [quick -guide](docs/getting-started/quick_start_local.html).** +guide](https://nixtla.github.io/mlforecast/docs/getting-started/quick_start_local.html).** **Follow this [end-to-end -walkthrough](docs/getting-started/end_to_end_walkthrough.html) for best -practices.** +walkthrough](https://nixtla.github.io/mlforecast/docs/getting-started/end_to_end_walkthrough.html) +for best practices.** ### Sample notebooks @@ -98,27 +98,30 @@ Missing something? Please open an issue or write us in ## Examples and Guides πŸ“š [End to End -Walkthrough](docs/getting-started/end_to_end_walkthrough.html): model -training, evaluation and selection for multiple time series. +Walkthrough](https://nixtla.github.io/mlforecast/docs/getting-started/end_to_end_walkthrough.html): +model training, evaluation and selection for multiple time series. πŸ”Ž [Probabilistic -Forecasting](docs/how-to-guides/prediction_intervals.html): use -Conformal Prediction to produce prediciton intervals. +Forecasting](https://nixtla.github.io/mlforecast/docs/how-to-guides/prediction_intervals.html): +use Conformal Prediction to produce prediciton intervals. -πŸ‘©β€πŸ”¬ [Cross Validation](docs/how-to-guides/cross_validation.html): robust -model’s performance evaluation. +πŸ‘©β€πŸ”¬ [Cross +Validation](https://nixtla.github.io/mlforecast/docs/how-to-guides/cross_validation.html): +robust model’s performance evaluation. πŸ”Œ [Predict Demand -Peaks](docs/tutorials/electricity_peak_forecasting.html): electricity -load forecasting for detecting daily peaks and reducing electric bills. +Peaks](https://nixtla.github.io/mlforecast/docs/tutorials/electricity_peak_forecasting.html): +electricity load forecasting for detecting daily peaks and reducing +electric bills. -πŸ“ˆ [Transfer Learning](docs/how-to-guides/transfer_learning.html): +πŸ“ˆ [Transfer +Learning](https://nixtla.github.io/mlforecast/docs/how-to-guides/transfer_learning.html): pretrain a model using a set of time series and then predict another one using that pretrained model. 🌑️ [Distributed -Training](docs/getting-started/quick_start_distributed.html): use a -Dask, Ray or Spark cluster to train models at scale. +Training](https://nixtla.github.io/mlforecast/docs/getting-started/quick_start_distributed.html): +use a Dask, Ray or Spark cluster to train models at scale. ## How to use diff --git a/nbs/distributed.forecast.ipynb b/nbs/distributed.forecast.ipynb index a46f7062..87f7d7fa 100644 --- a/nbs/distributed.forecast.ipynb +++ b/nbs/distributed.forecast.ipynb @@ -54,7 +54,7 @@ "id": "6fc9a984-a442-41d2-8132-471d73e64d96", "metadata": {}, "source": [ - "# DistributedMLForecast\n", + "# Distributed Forecast\n", "\n", "> Distributed pipeline encapsulation\n", "\n", @@ -723,11 +723,9 @@ "> lags:Optional[Iterable[int]]=None, lag_transforms:\n", "> Optional[Dict[int,List[Union[Callable,Tuple[Callab\n", "> le,Any]]]]]=None, date_features:Optional[Iterable[\n", - "> Union[str,Callable]]]=None,\n", - "> differences:Optional[Iterable[int]]=None,\n", - "> num_threads:int=1, target_transforms:Optional[List\n", - "> [mlforecast.target_transforms.BaseTargetTransform]\n", - "> ]=None, engine=None,\n", + "> Union[str,Callable]]]=None, num_threads:int=1, tar\n", + "> get_transforms:Optional[List[mlforecast.target_tra\n", + "> nsforms.BaseTargetTransform]]=None, engine=None,\n", "> num_partitions:Optional[int]=None)\n", "\n", "Multi backend distributed pipeline" @@ -743,11 +741,9 @@ "> lags:Optional[Iterable[int]]=None, lag_transforms:\n", "> Optional[Dict[int,List[Union[Callable,Tuple[Callab\n", "> le,Any]]]]]=None, date_features:Optional[Iterable[\n", - "> Union[str,Callable]]]=None,\n", - "> differences:Optional[Iterable[int]]=None,\n", - "> num_threads:int=1, target_transforms:Optional[List\n", - "> [mlforecast.target_transforms.BaseTargetTransform]\n", - "> ]=None, engine=None,\n", + "> Union[str,Callable]]]=None, num_threads:int=1, tar\n", + "> get_transforms:Optional[List[mlforecast.target_tra\n", + "> nsforms.BaseTargetTransform]]=None, engine=None,\n", "> num_partitions:Optional[int]=None)\n", "\n", "Multi backend distributed pipeline" @@ -762,291 +758,6 @@ "show_doc(DistributedMLForecast)" ] }, - { - "cell_type": "markdown", - "id": "79ec88ed-1306-4a4b-bca4-0a254ada08a5", - "metadata": {}, - "source": [ - "The `DistributedMLForecast` class is a high level abstraction that encapsulates all the steps in the pipeline (preprocessing, fitting the model and computing predictions) and applies them in a distributed way.\n", - "\n", - "The different things that you need to use `DistributedMLForecast` (as opposed to `MLForecast`) are:\n", - "\n", - "1. You need to set up a cluster. We currently support dask and spark (ray is on the roadmap).\n", - "2. Your data needs to be a distributed collection. We currently support dask and spark dataframes.\n", - "3. You need to use a model that implements distributed training in your framework of choice, e.g. SynapseML for LightGBM in spark." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cbda5c45", - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import pandas as pd\n", - "from dask.distributed import Client\n", - "from window_ops.expanding import expanding_mean\n", - "from window_ops.rolling import rolling_mean\n", - "\n", - "from mlforecast.target_transforms import Differences\n", - "from mlforecast.utils import backtest_splits, generate_daily_series, generate_prices_for_series\n", - "from mlforecast.distributed.models.dask.lgb import DaskLGBMForecast\n", - "from mlforecast.distributed.models.dask.xgb import DaskXGBForecast" - ] - }, - { - "cell_type": "markdown", - "id": "73eb8f10-1b95-453a-8f1c-91f9c1813af1", - "metadata": {}, - "source": [ - "## Dask" - ] - }, - { - "cell_type": "markdown", - "id": "d92b13a2-f6bd-4d76-840d-cadb1d672147", - "metadata": {}, - "source": [ - "### Client setup" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9e9fe50e-1b4a-4f58-8bbf-d1c087fb7d76", - "metadata": {}, - "outputs": [], - "source": [ - "client = Client(n_workers=2, threads_per_worker=1)" - ] - }, - { - "cell_type": "markdown", - "id": "7e838b0d-a0f3-4672-a794-75301a4aced3", - "metadata": {}, - "source": [ - "Here we define a client that connects to a `dask.distributed.LocalCluster`, however it could be any other kind of cluster." - ] - }, - { - "cell_type": "markdown", - "id": "97f15a4a-79d2-4b72-8b9b-290edefe340f", - "metadata": {}, - "source": [ - "### Data setup\n", - "\n", - "For dask, the data must be a `dask.dataframe.DataFrame`. You need to make sure that each time serie is only in one partition and it is recommended that you have as many partitions as you have workers. If you have more partitions than workers make sure to set `num_threads=1` to avoid having nested parallelism.\n", - "\n", - "The required input format is the same as for `MLForecast`, except that it's a `dask.dataframe.DataFrame` instead of a `pandas.Dataframe`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "552cea5f-b826-4c9b-ae9f-2532f92f31bd", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
Dask DataFrame Structure:
\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsystatic_0static_1
npartitions=10
id_00objectdatetime64[ns]float64int64int64
id_10...............
..................
id_89...............
id_99...............
\n", - "
\n", - "
Dask Name: assign, 5 graph layers
" - ], - "text/plain": [ - "Dask DataFrame Structure:\n", - " unique_id ds y static_0 static_1\n", - "npartitions=10 \n", - "id_00 object datetime64[ns] float64 int64 int64\n", - "id_10 ... ... ... ... ...\n", - "... ... ... ... ... ...\n", - "id_89 ... ... ... ... ...\n", - "id_99 ... ... ... ... ...\n", - "Dask Name: assign, 5 graph layers" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "series = generate_daily_series(100, n_static_features=2, equal_ends=True, static_as_categorical=False)\n", - "npartitions = 10\n", - "partitioned_series = dd.from_pandas(series.set_index('unique_id'), npartitions=npartitions) # make sure we split by the id_col\n", - "partitioned_series = partitioned_series.map_partitions(lambda df: df.reset_index())\n", - "partitioned_series['unique_id'] = partitioned_series['unique_id'].astype(str) # can't handle categoricals atm\n", - "partitioned_series" - ] - }, - { - "cell_type": "markdown", - "id": "bf40d477-eddd-4c4d-b6b1-57fd4bd7c58f", - "metadata": {}, - "source": [ - "### Models\n", - "In order to perform distributed forecasting, we need to use a model that is able to train in a distributed way using `dask`. The current implementations are in `DaskLGBMForecast` and `DaskXGBForecast` which are just wrappers around the native implementations." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e7e3eabd-f9d3-4d7e-b1e8-edccf8a27f4e", - "metadata": {}, - "outputs": [], - "source": [ - "models = [DaskXGBForecast(random_state=0), DaskLGBMForecast(random_state=0)]" - ] - }, - { - "cell_type": "markdown", - "id": "1cfb3968-0ee4-4141-ad7a-ee202dd8c044", - "metadata": {}, - "source": [ - "### Training\n", - "Once we have our models we instantiate a `DistributedMLForecast` object defining our features." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6f56da13-0e3e-43d8-897d-af44fb89b037", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "DistributedMLForecast(models=[DaskXGBForecast, DaskLGBMForecast], freq=, lag_features=['lag7', 'expanding_mean_lag1', 'rolling_mean_lag7_window_size14'], date_features=['dayofweek', 'month'], num_threads=1, engine=)" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fcst = DistributedMLForecast(\n", - " models=models,\n", - " freq='D',\n", - " lags=[7],\n", - " lag_transforms={\n", - " 1: [expanding_mean],\n", - " 7: [(rolling_mean, 14)]\n", - " },\n", - " date_features=['dayofweek', 'month'],\n", - " num_threads=1,\n", - " engine=client,\n", - ")\n", - "fcst" - ] - }, - { - "cell_type": "markdown", - "id": "67af6771-3484-4b54-82b1-ef6f284bb289", - "metadata": {}, - "source": [ - "Here where we say that:\n", - "\n", - "* Our series have daily frequency.\n", - "* We want to use lag 7 as a feature\n", - "* We want the lag transformations to be:\n", - " * expanding mean of the lag 1\n", - " * rolling mean of the lag 7 over a window of size 14\n", - "* We want to use dayofweek and month as date features.\n", - "* We want to perform the preprocessing and the forecasting steps using 1 thread, because we have 10 partitions and 2 workers.\n", - "\n", - "From this point we have two options:\n", - "\n", - "1. Compute the features and fit our models.\n", - "2. Compute the features and get them back as a dataframe to do some custom splitting or adding additional features, then training the models." - ] - }, - { - "cell_type": "markdown", - "id": "65ea6591-d9bd-4273-8920-c40f678e2f2c", - "metadata": {}, - "source": [ - "### 1. Using all the data" - ] - }, { "cell_type": "code", "execution_count": null, @@ -1058,7 +769,7 @@ "text/markdown": [ "---\n", "\n", - "## DistributedMLForecast.fit\n", + "### DistributedMLForecast.fit\n", "\n", "> DistributedMLForecast.fit (df:~AnyDataFrame, id_col:str='unique_id',\n", "> time_col:str='ds', target_col:str='y',\n", @@ -1079,12 +790,12 @@ "| dropna | bool | True | Drop rows with missing values produced by the transformations. |\n", "| keep_last_n | Optional | None | Keep only these many records from each serie for the forecasting step. Can save time and memory if your features allow it. |\n", "| data | Optional | None | |\n", - "| **Returns** | **DistributedMLForecast** | | **Forecast object with series values and trained models.** |" + "| **Returns** | **DistributedMLForecast** | | **noqa: ARG002** |" ], "text/plain": [ "---\n", "\n", - "## DistributedMLForecast.fit\n", + "### DistributedMLForecast.fit\n", "\n", "> DistributedMLForecast.fit (df:~AnyDataFrame, id_col:str='unique_id',\n", "> time_col:str='ds', target_col:str='y',\n", @@ -1105,7 +816,7 @@ "| dropna | bool | True | Drop rows with missing values produced by the transformations. |\n", "| keep_last_n | Optional | None | Keep only these many records from each serie for the forecasting step. Can save time and memory if your features allow it. |\n", "| data | Optional | None | |\n", - "| **Returns** | **DistributedMLForecast** | | **Forecast object with series values and trained models.** |" + "| **Returns** | **DistributedMLForecast** | | **noqa: ARG002** |" ] }, "execution_count": null, @@ -1114,100 +825,7 @@ } ], "source": [ - "show_doc(DistributedMLForecast.fit, title_level=2)" - ] - }, - { - "cell_type": "markdown", - "id": "baa359fc-e73b-4178-9421-848742b027ae", - "metadata": {}, - "source": [ - "Calling `fit` on our data computes the features independently for each partition and performs distributed training." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b0bf69ca-1723-43ef-a527-239aed06bd7d", - "metadata": {}, - "outputs": [], - "source": [ - "fcst.fit(partitioned_series)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f494de02-cffa-4cb1-904e-587f1149b37d", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "# function to test the partition_results data\n", - "# has the right size\n", - "def test_partition_results_size(fcst_object, expected_n_partitions):\n", - " test_eq(\n", - " fa.get_num_partitions(fcst_object.partition_results),\n", - " expected_n_partitions,\n", - " )\n", - " test_eq(\n", - " fa.count(fcst_object.partition_results),\n", - " expected_n_partitions,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a3b8f358-d83c-4160-b510-3fc3f67b4341", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "test_partition_results_size(fcst, npartitions)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cb5103a5-ffb5-4c90-bdbe-1fe29c4a6988", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "# test num_partitions works properly\n", - "num_partitions_test = 4\n", - "test_dd = dd.from_pandas(series, npartitions=num_partitions_test) # In this case we dont have to specify the column\n", - "test_dd['unique_id'] = test_dd['unique_id'].astype(str)\n", - "fcst_np = DistributedMLForecast(\n", - " models=models,\n", - " freq='D',\n", - " lags=[7],\n", - " lag_transforms={\n", - " 1: [expanding_mean],\n", - " 7: [(rolling_mean, 14)]\n", - " },\n", - " date_features=['dayofweek', 'month'],\n", - " num_threads=1,\n", - " engine=client,\n", - " num_partitions=num_partitions_test\n", - ")\n", - "fcst_np.fit(test_dd)\n", - "test_partition_results_size(fcst_np, num_partitions_test)\n", - "preds_np = fcst_np.predict(7).compute().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", - "preds = fcst.predict(7).compute().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", - "pd.testing.assert_frame_equal(\n", - " preds[['unique_id', 'ds']], \n", - " preds_np[['unique_id', 'ds']], \n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "d06df485-8496-45da-87e0-e45cf9b1f9ea", - "metadata": {}, - "source": [ - "### Forecasting" + "show_doc(DistributedMLForecast.fit)" ] }, { @@ -1221,7 +839,7 @@ "text/markdown": [ "---\n", "\n", - "## DistributedMLForecast.predict\n", + "### DistributedMLForecast.predict\n", "\n", "> DistributedMLForecast.predict (h:int,\n", "> dynamic_dfs:Optional[List[pandas.core.fram\n", @@ -1248,7 +866,7 @@ "text/plain": [ "---\n", "\n", - "## DistributedMLForecast.predict\n", + "### DistributedMLForecast.predict\n", "\n", "> DistributedMLForecast.predict (h:int,\n", "> dynamic_dfs:Optional[List[pandas.core.fram\n", @@ -1279,183 +897,7 @@ } ], "source": [ - "show_doc(DistributedMLForecast.predict, title_level=2)" - ] - }, - { - "cell_type": "markdown", - "id": "7f8162b4-4dc7-48cd-8a0e-f59f36825f1e", - "metadata": {}, - "source": [ - "Once we have our fitted models we can compute the predictions for the next 7 timesteps." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "694a1c30-40d0-4552-ab79-73eaf6179b44", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
Dask DataFrame Structure:
\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsDaskXGBForecastDaskLGBMForecast
npartitions=10
id_00objectdatetime64[ns]float64float64
id_10............
...............
id_89............
id_99............
\n", - "
\n", - "
Dask Name: map, 17 graph layers
" - ], - "text/plain": [ - "Dask DataFrame Structure:\n", - " unique_id ds DaskXGBForecast DaskLGBMForecast\n", - "npartitions=10 \n", - "id_00 object datetime64[ns] float64 float64\n", - "id_10 ... ... ... ...\n", - "... ... ... ... ...\n", - "id_89 ... ... ... ...\n", - "id_99 ... ... ... ...\n", - "Dask Name: map, 17 graph layers" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "preds = fcst.predict(7)\n", - "preds" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cba35d44-0916-4fb0-9a2d-ee98efbbe931", - "metadata": {}, - "outputs": [], - "source": [ - "#|hide\n", - "preds = preds.compute()\n", - "preds2 = fcst.predict(7).compute()\n", - "preds3 = fcst.predict(7, new_df=partitioned_series).compute()\n", - "pd.testing.assert_frame_equal(preds, preds2)\n", - "pd.testing.assert_frame_equal(preds, preds3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "51d85e0d-b167-43a2-a480-708e20aba44f", - "metadata": {}, - "outputs": [], - "source": [ - "#|hide\n", - "non_std_series = partitioned_series.copy()\n", - "non_std_series['ds'] = non_std_series.map_partitions(lambda part: part.groupby('unique_id').cumcount())\n", - "non_std_series = non_std_series.rename(columns={'ds': 'time', 'y': 'value', 'unique_id': 'some_id'})\n", - "flow_params = dict(\n", - " models=[DaskXGBForecast(random_state=0)],\n", - " lags=[7],\n", - " lag_transforms={\n", - " 1: [expanding_mean],\n", - " 7: [(rolling_mean, 14)]\n", - " },\n", - " num_threads=1,\n", - ")\n", - "fcst = DistributedMLForecast(freq='D', **flow_params)\n", - "fcst.fit(partitioned_series)\n", - "preds = fcst.predict(7).compute()\n", - "fcst2 = DistributedMLForecast(**flow_params)\n", - "fcst2.preprocess(non_std_series, id_col='some_id', time_col='time', target_col='value')\n", - "fcst2.models_ = fcst.models_ # distributed training can end up with different fits\n", - "non_std_preds = fcst2.predict(7).compute()\n", - "pd.testing.assert_frame_equal(\n", - " preds.drop(columns='ds'),\n", - " non_std_preds.drop(columns='time').rename(columns={'some_id': 'unique_id'})\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "a6438efd-365c-444f-a447-03f44f1cc61a", - "metadata": {}, - "source": [ - "### 2. Preprocess and train" - ] - }, - { - "cell_type": "markdown", - "id": "39b989f8-945e-4864-854d-92e846fe240d", - "metadata": {}, - "source": [ - "If we only want to perform the preprocessing step we call `preprocess` with our data." + "show_doc(DistributedMLForecast.predict)" ] }, { @@ -1469,7 +911,7 @@ "text/markdown": [ "---\n", "\n", - "## DistributedMLForecast.preprocess\n", + "### DistributedMLForecast.preprocess\n", "\n", "> DistributedMLForecast.preprocess (df:~AnyDataFrame,\n", "> id_col:str='unique_id',\n", @@ -1491,12 +933,12 @@ "| dropna | bool | True | Drop rows with missing values produced by the transformations. |\n", "| keep_last_n | Optional | None | Keep only these many records from each serie for the forecasting step. Can save time and memory if your features allow it. |\n", "| data | Optional | None | |\n", - "| **Returns** | **AnyDataFrame** | | **`df` with added features.** |" + "| **Returns** | **AnyDataFrame** | | **noqa: ARG002** |" ], "text/plain": [ "---\n", "\n", - "## DistributedMLForecast.preprocess\n", + "### DistributedMLForecast.preprocess\n", "\n", "> DistributedMLForecast.preprocess (df:~AnyDataFrame,\n", "> id_col:str='unique_id',\n", @@ -1518,7 +960,7 @@ "| dropna | bool | True | Drop rows with missing values produced by the transformations. |\n", "| keep_last_n | Optional | None | Keep only these many records from each serie for the forecasting step. Can save time and memory if your features allow it. |\n", "| data | Optional | None | |\n", - "| **Returns** | **AnyDataFrame** | | **`df` with added features.** |" + "| **Returns** | **AnyDataFrame** | | **noqa: ARG002** |" ] }, "execution_count": null, @@ -1527,681 +969,37 @@ } ], "source": [ - "show_doc(DistributedMLForecast.preprocess, title_level=2)" + "show_doc(DistributedMLForecast.preprocess)" ] }, { "cell_type": "code", "execution_count": null, - "id": "dbbd1a34-f3ad-4aca-8d94-62a2bc13299e", + "id": "7d3faef3-89d4-45dd-bcda-78aba4414a07", "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsystatic_0static_1lag7expanding_mean_lag1rolling_mean_lag7_window_size14
20id_002000-10-2549.766844794550.69463925.00136726.320060
21id_002000-10-263.91834779453.88778026.18067526.313387
22id_002000-10-279.437778794511.51277425.16875126.398056
23id_002000-10-2817.923574794518.03849824.48479626.425272
24id_002000-10-2926.754645794524.22285924.21141126.305563
\n", - "
" - ], - "text/plain": [ - " unique_id ds y static_0 static_1 lag7 \\\n", - "20 id_00 2000-10-25 49.766844 79 45 50.694639 \n", - "21 id_00 2000-10-26 3.918347 79 45 3.887780 \n", - "22 id_00 2000-10-27 9.437778 79 45 11.512774 \n", - "23 id_00 2000-10-28 17.923574 79 45 18.038498 \n", - "24 id_00 2000-10-29 26.754645 79 45 24.222859 \n", - "\n", - " expanding_mean_lag1 rolling_mean_lag7_window_size14 \n", - "20 25.001367 26.320060 \n", - "21 26.180675 26.313387 \n", - "22 25.168751 26.398056 \n", - "23 24.484796 26.425272 \n", - "24 24.211411 26.305563 " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "features_ddf = fcst.preprocess(partitioned_series)\n", - "features_ddf.head()" - ] - }, - { - "cell_type": "markdown", - "id": "a15a97f1-7285-48fc-a016-6b8076c154ec", - "metadata": {}, - "source": [ - "This is useful if we want to inspect the data the model will be trained. If we do this we must manually train our models and add a local version of them to the `models_` attribute." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ece0fb49-c02c-4336-af7c-e007bd19aaca", - "metadata": {}, - "outputs": [], - "source": [ - "X, y = features_ddf.drop(columns=['unique_id', 'ds', 'y']), features_ddf['y']\n", - "model = DaskXGBForecast(random_state=0).fit(X, y)\n", - "fcst.models_ = {'DaskXGBForecast': model.model_}\n", - "fcst.predict(7)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b0380885-e914-4caf-ad85-7d9d1e6c0b7d", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "fcst.models_ = fcst2.models_\n", - "preds2 = fcst.predict(7).compute()\n", - "pd.testing.assert_frame_equal(preds, preds2)" - ] - }, - { - "cell_type": "markdown", - "id": "71e6f46c-8222-4cef-8955-a2b9a80a4735", - "metadata": {}, - "source": [ - "### Dynamic features\n", - "By default the predict method repeats the static features and updates the transformations and the date features. If you have dynamic features like prices or a calendar with holidays you can pass them as a list to the `dynamic_dfs` argument of `DistributedMLForecast.predict`, which will call `pd.DataFrame.merge` on each of them in order.\n", - "\n", - "Here's an example:\n", - "\n", - "Suppose that we have a `product_id` column and we have a catalog for prices based on that `product_id` and the date." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "86a3b1df-530e-4673-b500-e26ffd378914", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dsproduct_idprice
02000-06-0910.548814
12000-06-1010.715189
22000-06-1110.602763
32000-06-1210.544883
42000-06-1310.423655
............
201802001-05-17990.223520
201812001-05-18990.446104
201822001-05-19990.044783
201832001-05-20990.483216
201842001-05-21990.799660
\n", - "

20185 rows Γ— 3 columns

\n", - "
" - ], - "text/plain": [ - " ds product_id price\n", - "0 2000-06-09 1 0.548814\n", - "1 2000-06-10 1 0.715189\n", - "2 2000-06-11 1 0.602763\n", - "3 2000-06-12 1 0.544883\n", - "4 2000-06-13 1 0.423655\n", - "... ... ... ...\n", - "20180 2001-05-17 99 0.223520\n", - "20181 2001-05-18 99 0.446104\n", - "20182 2001-05-19 99 0.044783\n", - "20183 2001-05-20 99 0.483216\n", - "20184 2001-05-21 99 0.799660\n", - "\n", - "[20185 rows x 3 columns]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dynamic_series = series.rename(columns={'static_1': 'product_id'})\n", - "prices_catalog = generate_prices_for_series(dynamic_series)\n", - "prices_catalog" - ] - }, - { - "cell_type": "markdown", - "id": "f5aec529-856e-4028-b8aa-4347eefd422f", - "metadata": {}, - "source": [ - "And you have already merged these prices into your series dataframe." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0557a5a8-bfad-4c6e-a0a5-a3a2181d6c03", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsystatic_0product_idprice
0id_002000-10-053.98119879450.570826
1id_002000-10-0610.32740179450.260562
2id_002000-10-0717.65747479450.274048
3id_002000-10-0825.89879079450.433878
4id_002000-10-0934.49404079450.653738
\n", - "
" - ], - "text/plain": [ - " unique_id ds y static_0 product_id price\n", - "0 id_00 2000-10-05 3.981198 79 45 0.570826\n", - "1 id_00 2000-10-06 10.327401 79 45 0.260562\n", - "2 id_00 2000-10-07 17.657474 79 45 0.274048\n", - "3 id_00 2000-10-08 25.898790 79 45 0.433878\n", - "4 id_00 2000-10-09 34.494040 79 45 0.653738" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dynamic_series = partitioned_series.rename(columns={'static_1': 'product_id'})\n", - "dynamic_series = dynamic_series\n", - "series_with_prices = dynamic_series.merge(prices_catalog, how='left')\n", - "series_with_prices.head()" - ] - }, - { - "cell_type": "markdown", - "id": "951f5066-3685-43d0-91a6-09867790ab35", - "metadata": {}, - "source": [ - "This dataframe will be passed to `DistributedMLForecast.fit` (or `DistributedMLForecast.preprocess`), however since the price is dynamic we have to tell that method that only `static_0` and `product_id` are static and we'll have to update `price` in every timestep, which basically involves merging the updated features with the prices catalog." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "01ca112d-cbdb-41dc-88b4-fad613cb8b6b", - "metadata": {}, - "outputs": [], - "source": [ - "fcst = DistributedMLForecast(\n", - " models,\n", - " freq='D',\n", - " lags=[7],\n", - " lag_transforms={\n", - " 1: [expanding_mean],\n", - " 7: [(rolling_mean, 14)]\n", - " },\n", - " date_features=['dayofweek', 'month'],\n", - " num_threads=1,\n", - ")\n", - "series_with_prices = series_with_prices\n", - "fcst.fit(\n", - " series_with_prices,\n", - " static_features=['static_0', 'product_id'],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "4191f9c1-d2cd-4896-9ff2-18c078cfc503", - "metadata": {}, - "source": [ - "So in order to update the price in each timestep we just call `DistributedMLForecast.predict` with our forecast horizon and pass the prices catalog as a dynamic dataframe." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "68c4e580-73af-4b0f-943a-32bc3838cbb0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsDaskXGBForecastDaskLGBMForecast
0id_002001-05-1542.40400343.094384
1id_002001-05-1650.45744749.880064
2id_002001-05-172.0443981.938665
3id_002001-05-1810.10240310.250496
4id_002001-05-1918.24554318.473560
...............
72id_992001-05-1743.53634644.494822
73id_992001-05-182.0635842.093080
74id_992001-05-199.0162129.148367
75id_992001-05-2015.63031615.048958
76id_992001-05-2122.42023323.037681
\n", - "

700 rows Γ— 4 columns

\n", - "
" - ], - "text/plain": [ - " unique_id ds DaskXGBForecast DaskLGBMForecast\n", - "0 id_00 2001-05-15 42.404003 43.094384\n", - "1 id_00 2001-05-16 50.457447 49.880064\n", - "2 id_00 2001-05-17 2.044398 1.938665\n", - "3 id_00 2001-05-18 10.102403 10.250496\n", - "4 id_00 2001-05-19 18.245543 18.473560\n", - ".. ... ... ... ...\n", - "72 id_99 2001-05-17 43.536346 44.494822\n", - "73 id_99 2001-05-18 2.063584 2.093080\n", - "74 id_99 2001-05-19 9.016212 9.148367\n", - "75 id_99 2001-05-20 15.630316 15.048958\n", - "76 id_99 2001-05-21 22.420233 23.037681\n", - "\n", - "[700 rows x 4 columns]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "preds = fcst.predict(7, dynamic_dfs=[prices_catalog])\n", - "preds.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d06edbe8-27e1-4662-bf5a-60a67c7f6713", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "# test we can compute cross validation with\n", - "# exougenous variables without adding extra information\n", - "# later a more robust test is performed\n", - "cv_with_ex = fcst.cross_validation(\n", - " series_with_prices,\n", - " window_size=7,\n", - " n_windows=2,\n", - " static_features=['static_0', 'product_id'],\n", - ").compute()" - ] - }, - { - "cell_type": "markdown", - "id": "0c37303b-d2a9-4041-8cbe-f7921e5a7316", - "metadata": {}, - "source": [ - "### Custom predictions" - ] - }, - { - "cell_type": "markdown", - "id": "3063a465-11bb-4e85-be4e-a3f4978e6fc7", - "metadata": {}, - "source": [ - "If you want to do something like scaling the predictions you can define a function and pass it to `DistributedMLForecast.predict` as described in Custom predictions." - ] - }, - { - "cell_type": "markdown", - "id": "ec9461e8-2891-4c52-ab1c-0b1417c9ce60", - "metadata": {}, - "source": [ - "#### Cross validation\n", - "Refer to `MLForecast.cross_validation`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7d3faef3-89d4-45dd-bcda-78aba4414a07", - "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "---\n", - "\n", - "## DistributedMLForecast.cross_validation\n", - "\n", - "> DistributedMLForecast.cross_validation (df:~AnyDataFrame, n_windows:int,\n", - "> h:int, id_col:str='unique_id',\n", - "> time_col:str='ds',\n", - "> target_col:str='y',\n", - "> step_size:Optional[int]=None, sta\n", - "> tic_features:Optional[List[str]]=\n", - "> None, dropna:bool=True,\n", - "> keep_last_n:Optional[int]=None,\n", - "> refit:bool=True, before_predict_c\n", - "> allback:Optional[Callable]=None, \n", - "> after_predict_callback:Optional[C\n", - "> allable]=None,\n", - "> input_size:Optional[int]=None, da\n", - "> ta:Optional[~AnyDataFrame]=None,\n", - "> window_size:Optional[int]=None)\n", + "> DistributedMLForecast.cross_validation (df:~AnyDataFrame, n_windows:int,\n", + "> h:int, id_col:str='unique_id',\n", + "> time_col:str='ds',\n", + "> target_col:str='y',\n", + "> step_size:Optional[int]=None, sta\n", + "> tic_features:Optional[List[str]]=\n", + "> None, dropna:bool=True,\n", + "> keep_last_n:Optional[int]=None,\n", + "> refit:bool=True, before_predict_c\n", + "> allback:Optional[Callable]=None, \n", + "> after_predict_callback:Optional[C\n", + "> allable]=None,\n", + "> input_size:Optional[int]=None, da\n", + "> ta:Optional[~AnyDataFrame]=None,\n", + "> window_size:Optional[int]=None)\n", "\n", "Perform time series cross validation.\n", "Creates `n_windows` splits where each window has `h` test periods,\n", @@ -2230,7 +1028,7 @@ "text/plain": [ "---\n", "\n", - "## DistributedMLForecast.cross_validation\n", + "### DistributedMLForecast.cross_validation\n", "\n", "> DistributedMLForecast.cross_validation (df:~AnyDataFrame, n_windows:int,\n", "> h:int, id_col:str='unique_id',\n", @@ -2279,1353 +1077,7 @@ } ], "source": [ - "show_doc(DistributedMLForecast.cross_validation, title_level=2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e006da05-b056-4859-8005-9ece21dd3c2b", - "metadata": {}, - "outputs": [], - "source": [ - "fcst = DistributedMLForecast(\n", - " models=[DaskLGBMForecast(), DaskXGBForecast()],\n", - " freq='D',\n", - " lags=[7],\n", - " lag_transforms={\n", - " 1: [expanding_mean],\n", - " 7: [(rolling_mean, 14)]\n", - " },\n", - " date_features=['dayofweek', 'month'],\n", - " num_threads=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7d8eb4ac-1622-4eed-8892-e1272e131925", - "metadata": {}, - "outputs": [], - "source": [ - "n_windows = 2\n", - "window_size = 14\n", - "\n", - "cv_results = fcst.cross_validation(\n", - " partitioned_series,\n", - " n_windows,\n", - " window_size,\n", - ")\n", - "cv_results" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "320dbd3d-87fe-4aaa-900a-2a06227262eb", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "# input_size\n", - "input_size = 100\n", - "reduced_train = fcst._preprocess(\n", - " partitioned_series,\n", - " id_col='unique_id',\n", - " time_col='ds',\n", - " target_col='y',\n", - " dropna=False,\n", - " window_info=WindowInfo(\n", - " n_windows=1,\n", - " window_size=10,\n", - " step_size=None,\n", - " i_window=0,\n", - " input_size=input_size,\n", - " ),\n", - ")\n", - "assert reduced_train.groupby('unique_id').size().compute().max() == input_size" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a173f86-eeca-4e66-9df3-9282bf4afcdb", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "cv_results_no_refit = fcst.cross_validation(\n", - " partitioned_series,\n", - " n_windows,\n", - " window_size,\n", - " refit=False\n", - ")\n", - "cv_results_df = cv_results.compute()\n", - "cv_results_no_refit_df = cv_results_no_refit.compute()\n", - "# test we recover the same \"metadata\"\n", - "models = ['DaskXGBForecast', 'DaskLGBMForecast']\n", - "test_eq(\n", - " cv_results_no_refit_df.drop(columns=models),\n", - " cv_results_df.drop(columns=models)\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "6df86990-35ff-4b44-b96a-cabd22b03adb", - "metadata": {}, - "source": [ - "We can aggregate these by date to get a rough estimate of how our model is doing." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1776f7a5-996d-4598-90d6-c5217b6da9e7", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
DaskLGBMForecastDaskXGBForecasty
ds
2001-04-1716.19523016.16870916.123231
2001-04-1815.14531815.13573415.213920
2001-04-1917.14911917.08715016.985699
2001-04-2018.00278118.04509218.068340
2001-04-2118.13661218.14214418.200609
\n", - "
" - ], - "text/plain": [ - " DaskLGBMForecast DaskXGBForecast y\n", - "ds \n", - "2001-04-17 16.195230 16.168709 16.123231\n", - "2001-04-18 15.145318 15.135734 15.213920\n", - "2001-04-19 17.149119 17.087150 16.985699\n", - "2001-04-20 18.002781 18.045092 18.068340\n", - "2001-04-21 18.136612 18.142144 18.200609" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "agg_results = cv_results_df.drop(columns='cutoff').groupby('ds').mean()\n", - "agg_results.head()" - ] - }, - { - "cell_type": "markdown", - "id": "8ccb8da2-6009-4143-8c3b-3425921f52de", - "metadata": {}, - "source": [ - "We can also compute the error for each model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a449b9e-7b68-443a-b3c2-4b0977d32143", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'DaskLGBMForecast': 0.92, 'DaskXGBForecast': 0.86}" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def mse_from_dask_dataframe(ddf):\n", - " mses = {}\n", - " for model_name in ddf.columns.drop(['unique_id', 'ds', 'y', 'cutoff']):\n", - " mses[model_name] = (ddf['y'] - ddf[model_name]).pow(2).mean()\n", - " return client.gather(client.compute(mses))\n", - "\n", - "{k: round(v, 2) for k, v in mse_from_dask_dataframe(cv_results).items()}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aa70236c-dfd0-4cc7-9a0a-46a9769567ff", - "metadata": {}, - "outputs": [], - "source": [ - "client.close()" - ] - }, - { - "cell_type": "markdown", - "id": "a3bd1c31-9270-4176-b9b1-eaaaeae3cf28", - "metadata": {}, - "source": [ - "## Spark" - ] - }, - { - "cell_type": "markdown", - "id": "25e7f9e1-4bac-4998-b0b7-a9897e5a3ef3", - "metadata": {}, - "source": [ - "### Session setup" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "81348566-8200-419f-9921-c6b5b655652d", - "metadata": {}, - "outputs": [], - "source": [ - "from pyspark.sql import SparkSession" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c9713172-2263-48a5-99fd-f66b13117cc7", - "metadata": {}, - "outputs": [], - "source": [ - "spark = (\n", - " SparkSession.builder.appName(\"MyApp\")\n", - " .config(\"spark.jars.packages\", \"com.microsoft.azure:synapseml_2.12:0.10.2\")\n", - " .config(\"spark.jars.repositories\", \"https://mmlspark.azureedge.net/maven\")\n", - " .getOrCreate()\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "fadaef9e-29a6-4423-8f32-573ea7b4edc7", - "metadata": {}, - "source": [ - "### Data setup\n", - "For spark, the data must be a `pyspark DataFrame`. You need to make sure that each time serie is only in one partition (which you can do using `repartitionByRange`, for example) and it is recommended that you have as many partitions as you have workers. If you have more partitions than workers make sure to set `num_threads=1` to avoid having nested parallelism.\n", - "\n", - "The required input format is the same as for `MLForecast`, i.e. it should have at least an id column, a time column and a target column." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b9efe100-a3b8-4b23-93c5-8235cbe4e6cf", - "metadata": {}, - "outputs": [], - "source": [ - "numPartitions = 4\n", - "series = generate_daily_series(100, n_static_features=2, equal_ends=True, static_as_categorical=False)\n", - "spark_series = spark.createDataFrame(series).repartitionByRange(numPartitions, 'unique_id')" - ] - }, - { - "cell_type": "markdown", - "id": "609ef79b-259d-4939-bb9f-b9bec54e326e", - "metadata": {}, - "source": [ - "### Models\n", - "In order to perform distributed forecasting, we need to use a model that is able to train in a distributed way using `spark`. The current implementations are in `SparkLGBMForecast` and `SparkXGBForecast` which are just wrappers around the native implementations." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "071e6bb6-7cfe-4208-bae9-8e8b4cc0cfa6", - "metadata": {}, - "outputs": [], - "source": [ - "from mlforecast.distributed.models.spark.lgb import SparkLGBMForecast\n", - "\n", - "models = [SparkLGBMForecast()]\n", - "try:\n", - " from xgboost.spark import SparkXGBRegressor\n", - " from mlforecast.distributed.models.spark.xgb import SparkXGBForecast\n", - " models.append(SparkXGBForecast())\n", - "except ModuleNotFoundError: # py < 38\n", - " pass" - ] - }, - { - "cell_type": "markdown", - "id": "8ff83d8e-a96c-4bba-9305-9c8a89153ac4", - "metadata": {}, - "source": [ - "### Training" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d91acad4-55fd-43c6-838d-3102816664fd", - "metadata": {}, - "outputs": [], - "source": [ - "fcst = DistributedMLForecast(\n", - " models,\n", - " freq='D',\n", - " lags=[1],\n", - " lag_transforms={\n", - " 1: [expanding_mean]\n", - " },\n", - " date_features=['dayofweek'],\n", - ")\n", - "fcst.fit(\n", - " spark_series,\n", - " static_features=['static_0', 'static_1'],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bbafe111-f193-4e94-89f0-1145e4a637fb", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "#| hide\n", - "test_partition_results_size(fcst, numPartitions)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b50b8273-739d-4fd6-b08d-5b6b72cd51dd", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "# test num_partitions works properly\n", - "test_spark_df = spark.createDataFrame(series)\n", - "num_partitions_test = 10\n", - "fcst_np = DistributedMLForecast(\n", - " models=models,\n", - " freq='D',\n", - " lags=[7],\n", - " lag_transforms={\n", - " 1: [expanding_mean],\n", - " 7: [(rolling_mean, 14)]\n", - " },\n", - " date_features=['dayofweek', 'month'],\n", - " num_threads=1,\n", - " num_partitions=num_partitions_test,\n", - ")\n", - "fcst_np.fit(test_spark_df)\n", - "test_partition_results_size(fcst_np, num_partitions_test)\n", - "preds_np = fcst_np.predict(7).toPandas().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", - "preds = fcst.predict(7).toPandas().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", - "pd.testing.assert_frame_equal(\n", - " preds[['unique_id', 'ds']], \n", - " preds_np[['unique_id', 'ds']], \n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "473f10d8-6e41-4096-a239-cd8bc8febc4e", - "metadata": {}, - "source": [ - "### Forecasting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d003e12c-ffa4-42b7-8387-5fe78baa1b9d", - "metadata": {}, - "outputs": [], - "source": [ - "preds = fcst.predict(14)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52f2fd37-39d1-4025-82b6-7cc9b76a1e0a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsSparkLGBMForecastSparkXGBForecast
0id_002001-05-1542.21398442.305004
1id_002001-05-1649.71802150.262386
2id_002001-05-171.3062481.912686
3id_002001-05-1810.06010410.240939
4id_002001-05-1918.07078518.265749
...............
1395id_992001-05-2443.42690143.780163
1396id_992001-05-251.3616802.097803
1397id_992001-05-268.7872838.593580
1398id_992001-05-2715.55196515.622238
1399id_992001-05-2822.51851822.943216
\n", - "

1400 rows Γ— 4 columns

\n", - "
" - ], - "text/plain": [ - " unique_id ds SparkLGBMForecast SparkXGBForecast\n", - "0 id_00 2001-05-15 42.213984 42.305004\n", - "1 id_00 2001-05-16 49.718021 50.262386\n", - "2 id_00 2001-05-17 1.306248 1.912686\n", - "3 id_00 2001-05-18 10.060104 10.240939\n", - "4 id_00 2001-05-19 18.070785 18.265749\n", - "... ... ... ... ...\n", - "1395 id_99 2001-05-24 43.426901 43.780163\n", - "1396 id_99 2001-05-25 1.361680 2.097803\n", - "1397 id_99 2001-05-26 8.787283 8.593580\n", - "1398 id_99 2001-05-27 15.551965 15.622238\n", - "1399 id_99 2001-05-28 22.518518 22.943216\n", - "\n", - "[1400 rows x 4 columns]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "preds.toPandas()" - ] - }, - { - "cell_type": "markdown", - "id": "e7006bea-6774-49dd-8a34-b3f07320aee6", - "metadata": {}, - "source": [ - "### Cross validation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "df462c44-f309-45bc-97c5-39b946030d12", - "metadata": {}, - "outputs": [], - "source": [ - "cv_res = fcst.cross_validation(\n", - " spark_series,\n", - " n_windows=2,\n", - " window_size=14,\n", - ").toPandas()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10d9d284-4be4-45e1-9ba1-d285257d6607", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsSparkLGBMForecastSparkXGBForecastcutoffy
0id_172001-04-3031.46784931.6763362001-04-1630.832464
1id_072001-04-171.0154291.0393122001-04-161.034871
2id_062001-04-2921.1339191.3680222001-04-160.944155
3id_112001-04-1757.06901357.5915262001-04-1657.406090
4id_122001-04-277.9655857.7412582001-04-168.498222
.....................
2795id_962001-05-129.0695988.9251492001-04-307.983343
2796id_842001-05-0410.4746239.9598462001-04-3010.683266
2797id_872001-05-072.1623162.0654322001-04-301.277810
2798id_802001-05-1122.67955220.5477852001-04-3019.823192
2799id_902001-05-0840.22544840.2934192001-04-3039.215204
\n", - "

2800 rows Γ— 6 columns

\n", - "
" - ], - "text/plain": [ - " unique_id ds SparkLGBMForecast SparkXGBForecast cutoff \\\n", - "0 id_17 2001-04-30 31.467849 31.676336 2001-04-16 \n", - "1 id_07 2001-04-17 1.015429 1.039312 2001-04-16 \n", - "2 id_06 2001-04-29 21.133919 1.368022 2001-04-16 \n", - "3 id_11 2001-04-17 57.069013 57.591526 2001-04-16 \n", - "4 id_12 2001-04-27 7.965585 7.741258 2001-04-16 \n", - "... ... ... ... ... ... \n", - "2795 id_96 2001-05-12 9.069598 8.925149 2001-04-30 \n", - "2796 id_84 2001-05-04 10.474623 9.959846 2001-04-30 \n", - "2797 id_87 2001-05-07 2.162316 2.065432 2001-04-30 \n", - "2798 id_80 2001-05-11 22.679552 20.547785 2001-04-30 \n", - "2799 id_90 2001-05-08 40.225448 40.293419 2001-04-30 \n", - "\n", - " y \n", - "0 30.832464 \n", - "1 1.034871 \n", - "2 0.944155 \n", - "3 57.406090 \n", - "4 8.498222 \n", - "... ... \n", - "2795 7.983343 \n", - "2796 10.683266 \n", - "2797 1.277810 \n", - "2798 19.823192 \n", - "2799 39.215204 \n", - "\n", - "[2800 rows x 6 columns]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cv_res" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ceaa1c40-2bcf-4f51-b891-00a2f180b93c", - "metadata": {}, - "outputs": [], - "source": [ - "spark.stop()" - ] - }, - { - "cell_type": "markdown", - "id": "7d426eef-f002-4456-805e-4f61667abcac", - "metadata": {}, - "source": [ - "## Ray" - ] - }, - { - "cell_type": "markdown", - "id": "27ed8f06-cdc6-4507-94ad-39bed3554552", - "metadata": {}, - "source": [ - "### Session setup" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "39504f85-1c9c-4525-8e57-a8c37c279af7", - "metadata": {}, - "outputs": [], - "source": [ - "import ray\n", - "from ray.cluster_utils import Cluster" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2deba5bc-c4ea-4f5c-8506-744fe085614e", - "metadata": {}, - "outputs": [], - "source": [ - "ray_cluster = Cluster(\n", - " initialize_head=True,\n", - " head_node_args={\"num_cpus\": 2}\n", - ")\n", - "ray.init(address=ray_cluster.address, ignore_reinit_error=True)\n", - "# add mock node to simulate a cluster\n", - "mock_node = ray_cluster.add_node(num_cpus=2)" - ] - }, - { - "cell_type": "markdown", - "id": "5bf4f53e-18be-4d15-b93e-536efe0d3f17", - "metadata": {}, - "source": [ - "### Data setup\n", - "For ray, the data must be a `ray DataFrame`. It is recommended that you have as many partitions as you have workers. If you have more partitions than workers make sure to set `num_threads=1` to avoid having nested parallelism.\n", - "\n", - "The required input format is the same as for `MLForecast`, i.e. it should have at least an id column, a time column and a target column." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c910c858-f038-4d49-b844-1e9a2932f16e", - "metadata": {}, - "outputs": [], - "source": [ - "series = generate_daily_series(100, n_static_features=2, equal_ends=True, static_as_categorical=False)\n", - "# we need noncategory unique_id\n", - "series['unique_id'] = series['unique_id'].astype(str)\n", - "ray_series = ray.data.from_pandas(series)" - ] - }, - { - "cell_type": "markdown", - "id": "6487397d-09dc-49d4-a909-cf37759b29f3", - "metadata": {}, - "source": [ - "### Models\n", - "The ray integration allows to include `lightgbm` (`RayLGBMRegressor`), and `xgboost` (`RayXGBRegressor`)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "af6db2d8-34d4-483e-9d4e-75993c0c8683", - "metadata": {}, - "outputs": [], - "source": [ - "from mlforecast.distributed.models.ray.lgb import RayLGBMForecast\n", - "from mlforecast.distributed.models.ray.xgb import RayXGBForecast\n", - "\n", - "models = [\n", - " RayLGBMForecast(),\n", - " RayXGBForecast(),\n", - "]" - ] - }, - { - "cell_type": "markdown", - "id": "e8c25924-dae1-4d25-95e2-261814f4a1a0", - "metadata": {}, - "source": [ - "### Training" - ] - }, - { - "cell_type": "markdown", - "id": "1b83f187-f47b-431c-be62-578bce4bd63c", - "metadata": {}, - "source": [ - "To control the number of partitions to use using Ray, we have to include `num_partitions` to `DistributedMLForecast`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6025c553-9d3a-4962-a840-72d28b29b8cf", - "metadata": {}, - "outputs": [], - "source": [ - "num_partitions = 4" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "97d84521-e796-4a8c-9b39-cd1b9310fdd1", - "metadata": {}, - "outputs": [], - "source": [ - "%%capture\n", - "fcst = DistributedMLForecast(\n", - " models,\n", - " freq='D',\n", - " lags=[1],\n", - " lag_transforms={\n", - " 1: [expanding_mean]\n", - " },\n", - " date_features=['dayofweek'],\n", - " num_partitions=num_partitions, # Use num_partitions to reduce overhead\n", - ")\n", - "fcst.fit(\n", - " ray_series,\n", - " static_features=['static_0', 'static_1'],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a4ccf035-3d29-4d86-ad98-a0053efdb664", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "test_partition_results_size(fcst, num_partitions)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d3a48ef0-00a4-499d-b47b-4b4a5daf7809", - "metadata": {}, - "outputs": [], - "source": [ - "#| hide\n", - "# test num_partitions works properly\n", - "# In this case we test that the default behavior \n", - "# for ray datasets works as expected\n", - "fcst_np = DistributedMLForecast(\n", - " models=models,\n", - " freq='D',\n", - " lags=[7],\n", - " lag_transforms={\n", - " 1: [expanding_mean],\n", - " 7: [(rolling_mean, 14)]\n", - " },\n", - " date_features=['dayofweek', 'month'],\n", - " num_threads=1,\n", - ")\n", - "fcst_np.fit(ray_series)\n", - "# we dont use test_partition_results_size\n", - "# since the number of objects is different \n", - "# from the number of partitions\n", - "test_eq(fa.count(fcst_np.partition_results), 100) # number of series\n", - "preds_np = fcst_np.predict(7).to_pandas().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", - "preds = fcst.predict(7).to_pandas().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", - "pd.testing.assert_frame_equal(\n", - " preds[['unique_id', 'ds']], \n", - " preds_np[['unique_id', 'ds']], \n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "fa79da49-3c1a-41c6-8597-410d382d443d", - "metadata": {}, - "source": [ - "### Forecasting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4af59dab-5458-49e2-b794-6b80529210b8", - "metadata": {}, - "outputs": [], - "source": [ - "preds = fcst.predict(14)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "657802d4-cb7c-450c-9360-6420522a47db", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsRayLGBMForecastRayXGBForecast
0id_002001-05-1542.21398441.992321
1id_002001-05-1649.71802150.999878
2id_002001-05-171.3062481.712625
3id_002001-05-1810.06010410.157331
4id_002001-05-1918.07078518.163649
...............
1395id_992001-05-2443.42690142.060478
1396id_992001-05-251.3616802.587303
1397id_992001-05-268.7872838.652343
1398id_992001-05-2715.55196515.278493
1399id_992001-05-2822.51851822.898369
\n", - "

1400 rows Γ— 4 columns

\n", - "
" - ], - "text/plain": [ - " unique_id ds RayLGBMForecast RayXGBForecast\n", - "0 id_00 2001-05-15 42.213984 41.992321\n", - "1 id_00 2001-05-16 49.718021 50.999878\n", - "2 id_00 2001-05-17 1.306248 1.712625\n", - "3 id_00 2001-05-18 10.060104 10.157331\n", - "4 id_00 2001-05-19 18.070785 18.163649\n", - "... ... ... ... ...\n", - "1395 id_99 2001-05-24 43.426901 42.060478\n", - "1396 id_99 2001-05-25 1.361680 2.587303\n", - "1397 id_99 2001-05-26 8.787283 8.652343\n", - "1398 id_99 2001-05-27 15.551965 15.278493\n", - "1399 id_99 2001-05-28 22.518518 22.898369\n", - "\n", - "[1400 rows x 4 columns]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "preds.to_pandas()" - ] - }, - { - "cell_type": "markdown", - "id": "8349b33f-a892-4b7d-9379-c1edc4c87d78", - "metadata": {}, - "source": [ - "### Cross validation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "77f9b4b1-f923-49eb-9c78-8388f4d2b4a7", - "metadata": {}, - "outputs": [], - "source": [ - "%%capture\n", - "cv_res = fcst.cross_validation(\n", - " ray_series,\n", - " n_windows=2,\n", - " window_size=14,\n", - ").to_pandas()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6bfca612-25bb-4f7f-8f28-55fe7151d6fc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique_iddsRayLGBMForecastRayXGBForecastcutoffy
0id_002001-04-1741.39594841.9682012001-04-1640.499332
1id_002001-04-1850.00467050.1917042001-04-1650.888323
2id_002001-04-191.8211051.9786452001-04-160.121812
3id_002001-04-2010.26645910.2116972001-04-1610.987977
4id_002001-04-2118.28540017.9443682001-04-1616.370385
.....................
2795id_692001-05-072.1517521.9717452001-04-300.768383
2796id_822001-05-0929.73349229.8446852001-04-3029.584063
2797id_802001-05-0314.97861115.5644032001-04-3014.888339
2798id_282001-05-1018.20401716.6448822001-04-3016.512652
2799id_932001-05-0129.75617329.0355992001-04-3029.340027
\n", - "

2800 rows Γ— 6 columns

\n", - "
" - ], - "text/plain": [ - " unique_id ds RayLGBMForecast RayXGBForecast cutoff \\\n", - "0 id_00 2001-04-17 41.395948 41.968201 2001-04-16 \n", - "1 id_00 2001-04-18 50.004670 50.191704 2001-04-16 \n", - "2 id_00 2001-04-19 1.821105 1.978645 2001-04-16 \n", - "3 id_00 2001-04-20 10.266459 10.211697 2001-04-16 \n", - "4 id_00 2001-04-21 18.285400 17.944368 2001-04-16 \n", - "... ... ... ... ... ... \n", - "2795 id_69 2001-05-07 2.151752 1.971745 2001-04-30 \n", - "2796 id_82 2001-05-09 29.733492 29.844685 2001-04-30 \n", - "2797 id_80 2001-05-03 14.978611 15.564403 2001-04-30 \n", - "2798 id_28 2001-05-10 18.204017 16.644882 2001-04-30 \n", - "2799 id_93 2001-05-01 29.756173 29.035599 2001-04-30 \n", - "\n", - " y \n", - "0 40.499332 \n", - "1 50.888323 \n", - "2 0.121812 \n", - "3 10.987977 \n", - "4 16.370385 \n", - "... ... \n", - "2795 0.768383 \n", - "2796 29.584063 \n", - "2797 14.888339 \n", - "2798 16.512652 \n", - "2799 29.340027 \n", - "\n", - "[2800 rows x 6 columns]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cv_res" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9f38f46e-f36a-4e84-ab67-77bee7f7f9d4", - "metadata": {}, - "outputs": [], - "source": [ - "ray.shutdown()" + "show_doc(DistributedMLForecast.cross_validation)" ] } ], diff --git a/nbs/docs/getting-started/quick_start_distributed.ipynb b/nbs/docs/getting-started/quick_start_distributed.ipynb index 5cd7fad9..f6653098 100644 --- a/nbs/docs/getting-started/quick_start_distributed.ipynb +++ b/nbs/docs/getting-started/quick_start_distributed.ipynb @@ -12,101 +12,915 @@ }, { "cell_type": "markdown", - "id": "3a829526-7edd-4c9d-9aba-95441d184b31", + "id": "a07e9e05-e8b2-433e-9ff2-16e652cf6acb", "metadata": {}, "source": [ - "## Main concepts" + "The `DistributedMLForecast` class is a high level abstraction that encapsulates all the steps in the pipeline (preprocessing, fitting the model and computing predictions) and applies them in a distributed way.\n", + "\n", + "The different things that you need to use `DistributedMLForecast` (as opposed to `MLForecast`) are:\n", + "\n", + "1. You need to set up a cluster. We currently support dask, ray and spark.\n", + "2. Your data needs to be a distributed collection (dask, ray or spark dataframe).\n", + "3. You need to use a model that implements distributed training in your framework of choice, e.g. SynapseML for LightGBM in spark." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1dd7853f-df6e-4bf2-b2d9-cb3b4c6a0d4b", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "from window_ops.expanding import expanding_mean\n", + "from window_ops.rolling import rolling_mean\n", + "\n", + "from mlforecast.distributed import DistributedMLForecast\n", + "from mlforecast.target_transforms import Differences\n", + "from mlforecast.utils import backtest_splits, generate_daily_series, generate_prices_for_series" + ] + }, + { + "cell_type": "markdown", + "id": "3f930a27-b15f-438a-aab2-ccafc77e09f4", + "metadata": {}, + "source": [ + "## Dask" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5af70aed-bfb9-4c36-a4c4-cf546f8655a7", + "metadata": {}, + "outputs": [], + "source": [ + "import dask.dataframe as dd\n", + "from dask.distributed import Client" ] }, { "cell_type": "markdown", - "id": "dcc46367-361e-4e2b-9297-31a98a5c4b09", + "id": "17fe3454-b2e1-40d0-a623-6ae1fe486536", "metadata": {}, "source": [ - "The main component for distributed training with mlforecast is the `DistributedMLForecast` class, which abstracts away:\n", + "### Client setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b9868f8-38a5-4a9f-829c-47a10a522fb0", + "metadata": {}, + "outputs": [], + "source": [ + "client = Client(n_workers=2, threads_per_worker=1)" + ] + }, + { + "cell_type": "markdown", + "id": "3fd61b21-9a22-42dc-ba19-d6de68dc8eba", + "metadata": {}, + "source": [ + "Here we define a client that connects to a `dask.distributed.LocalCluster`, however it could be any other kind of cluster." + ] + }, + { + "cell_type": "markdown", + "id": "9b968e6d-cbc8-499b-8a41-ef12fe4fdd69", + "metadata": {}, + "source": [ + "### Data setup\n", + "\n", + "For dask, the data must be a `dask.dataframe.DataFrame`. You need to make sure that each time serie is only in one partition and it is recommended that you have as many partitions as you have workers. If you have more partitions than workers make sure to set `num_threads=1` to avoid having nested parallelism.\n", "\n", - "* Feature engineering and model training through `DistributedMLForecast.fit`\n", - "* Feature updates and multi step ahead predictions through `DistributedMLForecast.predict`" + "The required input format is the same as for `MLForecast`, except that it's a `dask.dataframe.DataFrame` instead of a `pandas.Dataframe`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f8acdff6-49c0-4f28-8a2c-1a75e2c1c115", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Dask DataFrame Structure:
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unique_iddsystatic_0static_1
npartitions=10
id_00objectdatetime64[ns]float64int64int64
id_10...............
..................
id_89...............
id_99...............
\n", + "
\n", + "
Dask Name: assign, 5 graph layers
" + ], + "text/plain": [ + "Dask DataFrame Structure:\n", + " unique_id ds y static_0 static_1\n", + "npartitions=10 \n", + "id_00 object datetime64[ns] float64 int64 int64\n", + "id_10 ... ... ... ... ...\n", + "... ... ... ... ... ...\n", + "id_89 ... ... ... ... ...\n", + "id_99 ... ... ... ... ...\n", + "Dask Name: assign, 5 graph layers" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "series = generate_daily_series(100, n_static_features=2, equal_ends=True, static_as_categorical=False)\n", + "npartitions = 10\n", + "partitioned_series = dd.from_pandas(series.set_index('unique_id'), npartitions=npartitions) # make sure we split by the id_col\n", + "partitioned_series = partitioned_series.map_partitions(lambda df: df.reset_index())\n", + "partitioned_series['unique_id'] = partitioned_series['unique_id'].astype(str) # can't handle categoricals atm\n", + "partitioned_series" ] }, { "cell_type": "markdown", - "id": "b088eaaf-6c5b-4292-b420-da2916233558", + "id": "28aa4f88-1a4d-4175-a33c-80d34f61f8cc", + "metadata": {}, + "source": [ + "### Models\n", + "In order to perform distributed forecasting, we need to use a model that is able to train in a distributed way using `dask`. The current implementations are in `DaskLGBMForecast` and `DaskXGBForecast` which are just wrappers around the native implementations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5997af98-7a6e-468a-8f22-d7271b85ec67", "metadata": {}, + "outputs": [], "source": [ - "## Setup" + "from mlforecast.distributed.models.dask.lgb import DaskLGBMForecast\n", + "from mlforecast.distributed.models.dask.xgb import DaskXGBForecast" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e482699-e3c3-4fef-b081-112c23bff40a", + "metadata": {}, + "outputs": [], + "source": [ + "models = [DaskXGBForecast(random_state=0), DaskLGBMForecast(random_state=0)]" ] }, { "cell_type": "markdown", - "id": "a3d06187-a523-46de-af83-17f17d63849d", + "id": "ab284f5f-e6d7-4d73-b0b6-efdf0aea581a", + "metadata": {}, + "source": [ + "### Training\n", + "Once we have our models we instantiate a `DistributedMLForecast` object defining our features. We can then call `fit` on this object passing our dask dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "66b5821d-6c04-4fd6-b5d6-9bbfefe9d442", "metadata": {}, + "outputs": [], "source": [ - "In order to perform distributed training you need a dask cluster. In this example we'll use a local cluster but you can replace it with any other type of remote cluster and the processing will take place there." + "fcst = DistributedMLForecast(\n", + " models=models,\n", + " freq='D',\n", + " lags=[7],\n", + " lag_transforms={\n", + " 1: [expanding_mean],\n", + " 7: [(rolling_mean, 14)]\n", + " },\n", + " date_features=['dayofweek', 'month'],\n", + " num_threads=1,\n", + " engine=client,\n", + ")\n", + "fcst.fit(partitioned_series)" ] }, { "cell_type": "code", "execution_count": null, - "id": "28ba525d-fc85-4525-b7e6-67a038033c3d", + "id": "6a49e861-74ab-42b0-a220-a823e5c7070a", "metadata": {}, "outputs": [], "source": [ - "from dask.distributed import Client, LocalCluster" + "#| hide\n", + "import fugue.api as fa\n", + "from fastcore.test import test_eq" ] }, { "cell_type": "code", "execution_count": null, - "id": "8e7189c6-af44-4a2d-bb7d-f695722f3276", + "id": "4241e4da-fc38-4744-bb88-e72c77e63ee1", "metadata": {}, "outputs": [], "source": [ - "cluster = LocalCluster(n_workers=2, threads_per_worker=1) # change this to use a remote cluster\n", - "client = Client(cluster)" + "#| hide\n", + "# function to test the partition_results data\n", + "# has the right size\n", + "def test_partition_results_size(fcst_object, expected_n_partitions):\n", + " test_eq(\n", + " fa.get_num_partitions(fcst_object.partition_results),\n", + " expected_n_partitions,\n", + " )\n", + " test_eq(\n", + " fa.count(fcst_object.partition_results),\n", + " expected_n_partitions,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52b4219d-4c48-43a1-87c4-58dfb520022c", + "metadata": {}, + "outputs": [], + "source": [ + "#| hide\n", + "test_partition_results_size(fcst, npartitions)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e5a8531-014f-4d0e-a33e-fe8504d164a5", + "metadata": {}, + "outputs": [], + "source": [ + "#| hide\n", + "# test num_partitions works properly\n", + "num_partitions_test = 4\n", + "test_dd = dd.from_pandas(series, npartitions=num_partitions_test) # In this case we dont have to specify the column\n", + "test_dd['unique_id'] = test_dd['unique_id'].astype(str)\n", + "fcst_np = DistributedMLForecast(\n", + " models=models,\n", + " freq='D',\n", + " lags=[7],\n", + " lag_transforms={\n", + " 1: [expanding_mean],\n", + " 7: [(rolling_mean, 14)]\n", + " },\n", + " date_features=['dayofweek', 'month'],\n", + " num_threads=1,\n", + " engine=client,\n", + " num_partitions=num_partitions_test\n", + ")\n", + "fcst_np.fit(test_dd)\n", + "test_partition_results_size(fcst_np, num_partitions_test)\n", + "preds_np = fcst_np.predict(7).compute().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", + "preds = fcst.predict(7).compute().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", + "pd.testing.assert_frame_equal(\n", + " preds[['unique_id', 'ds']], \n", + " preds_np[['unique_id', 'ds']], \n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "d9f2d411-66f8-425a-bcfe-8c5cc28ca324", + "metadata": {}, + "source": [ + "Once we have our fitted models we can compute the predictions for the next 7 timesteps." ] }, { "cell_type": "markdown", - "id": "29aa9351-46ab-4f64-9bbc-86d0069630cd", + "id": "21511e5a-750b-4a27-8f68-e9ceff5c7536", + "metadata": {}, + "source": [ + "### Forecasting" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "58769a05-3961-49c9-9b50-e1b0713d8c7b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unique_iddsDaskXGBForecastDaskLGBMForecast
0id_002001-05-15419.537354422.416413
1id_002001-05-16503.103333499.033217
2id_002001-05-1720.97330320.771351
3id_002001-05-1899.137711102.852949
4id_002001-05-19180.525391186.165082
\n", + "
" + ], + "text/plain": [ + " unique_id ds DaskXGBForecast DaskLGBMForecast\n", + "0 id_00 2001-05-15 419.537354 422.416413\n", + "1 id_00 2001-05-16 503.103333 499.033217\n", + "2 id_00 2001-05-17 20.973303 20.771351\n", + "3 id_00 2001-05-18 99.137711 102.852949\n", + "4 id_00 2001-05-19 180.525391 186.165082" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preds = fcst.predict(7)\n", + "preds.compute().head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1e6f1f2-d22b-48d7-a5e5-77d400cd4625", + "metadata": {}, + "outputs": [], + "source": [ + "#|hide\n", + "preds = preds.compute()\n", + "preds2 = fcst.predict(7).compute()\n", + "preds3 = fcst.predict(7, new_df=partitioned_series).compute()\n", + "pd.testing.assert_frame_equal(preds, preds2)\n", + "pd.testing.assert_frame_equal(preds, preds3)" + ] + }, + { + "cell_type": "markdown", + "id": "29841c02-b0bc-44cc-a8f3-da31b442584b", + "metadata": {}, + "source": [ + "### Cross validation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "296af9be-4149-4b47-9386-fc92bff65d4d", + "metadata": {}, + "outputs": [], + "source": [ + "cv_res = fcst.cross_validation(\n", + " partitioned_series,\n", + " n_windows=2,\n", + " window_size=14,\n", + ")\n", + "cv_res" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "155bc2ce-27e9-4245-b98f-9e88b2a7829e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unique_iddsDaskXGBForecastDaskLGBMForecastcutoffy
0id_002001-04-17419.697906414.7463592001-04-16404.993322
1id_002001-04-18502.494995495.2924672001-04-16508.883226
2id_002001-04-1920.51042420.4046742001-04-161.218119
3id_002001-04-2099.549591100.7205642001-04-16109.879770
4id_002001-04-21181.436050188.6458392001-04-16163.703847
\n", + "
" + ], + "text/plain": [ + " unique_id ds DaskXGBForecast DaskLGBMForecast cutoff \\\n", + "0 id_00 2001-04-17 419.697906 414.746359 2001-04-16 \n", + "1 id_00 2001-04-18 502.494995 495.292467 2001-04-16 \n", + "2 id_00 2001-04-19 20.510424 20.404674 2001-04-16 \n", + "3 id_00 2001-04-20 99.549591 100.720564 2001-04-16 \n", + "4 id_00 2001-04-21 181.436050 188.645839 2001-04-16 \n", + "\n", + " y \n", + "0 404.993322 \n", + "1 508.883226 \n", + "2 1.218119 \n", + "3 109.879770 \n", + "4 163.703847 " + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cv_res.compute().head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7f3d27b0-ba00-4141-a50c-ab39385e8295", + "metadata": {}, + "outputs": [], + "source": [ + "#| hide\n", + "from mlforecast.distributed.forecast import WindowInfo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "62457500-a299-4eb7-b13f-78412f4d302e", + "metadata": {}, + "outputs": [], + "source": [ + "#| hide\n", + "# input_size\n", + "input_size = 100\n", + "reduced_train = fcst._preprocess(\n", + " partitioned_series,\n", + " id_col='unique_id',\n", + " time_col='ds',\n", + " target_col='y',\n", + " dropna=False,\n", + " window_info=WindowInfo(\n", + " n_windows=1,\n", + " window_size=10,\n", + " step_size=None,\n", + " i_window=0,\n", + " input_size=input_size,\n", + " ),\n", + ")\n", + "assert reduced_train.groupby('unique_id').size().compute().max() == input_size" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "429cdca0-6368-42d9-bc57-2390e6430b83", + "metadata": {}, + "outputs": [], + "source": [ + "#| hide\n", + "cv_res_no_refit = fcst.cross_validation(\n", + " partitioned_series,\n", + " n_windows=2,\n", + " window_size=14,\n", + " refit=False\n", + ")\n", + "cv_results_df = cv_res.compute()\n", + "cv_results_no_refit_df = cv_res_no_refit.compute()\n", + "# test we recover the same \"metadata\"\n", + "models = ['DaskXGBForecast', 'DaskLGBMForecast']\n", + "test_eq(\n", + " cv_results_no_refit_df.drop(columns=models),\n", + " cv_results_df.drop(columns=models)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a34651ae-5be4-4e86-b44f-fbd15c4d72ad", + "metadata": {}, + "outputs": [], + "source": [ + "#|hide\n", + "non_std_series = partitioned_series.copy()\n", + "non_std_series['ds'] = non_std_series.map_partitions(lambda part: part.groupby('unique_id').cumcount())\n", + "non_std_series = non_std_series.rename(columns={'ds': 'time', 'y': 'value', 'unique_id': 'some_id'})\n", + "flow_params = dict(\n", + " models=[DaskXGBForecast(random_state=0)],\n", + " lags=[7],\n", + " lag_transforms={\n", + " 1: [expanding_mean],\n", + " 7: [(rolling_mean, 14)]\n", + " },\n", + " num_threads=1,\n", + ")\n", + "fcst = DistributedMLForecast(freq='D', **flow_params)\n", + "fcst.fit(partitioned_series)\n", + "preds = fcst.predict(7).compute()\n", + "fcst2 = DistributedMLForecast(**flow_params)\n", + "fcst2.preprocess(non_std_series, id_col='some_id', time_col='time', target_col='value')\n", + "fcst2.models_ = fcst.models_ # distributed training can end up with different fits\n", + "non_std_preds = fcst2.predict(7).compute()\n", + "pd.testing.assert_frame_equal(\n", + " preds.drop(columns='ds'),\n", + " non_std_preds.drop(columns='time').rename(columns={'some_id': 'unique_id'})\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8ba9b3ae-3859-4989-aa56-85390f63cf49", + "metadata": {}, + "outputs": [], + "source": [ + "client.close()" + ] + }, + { + "cell_type": "markdown", + "id": "327df016-bc2a-47c1-afeb-4394ca7695cb", + "metadata": {}, + "source": [ + "## Spark" + ] + }, + { + "cell_type": "markdown", + "id": "fcfae838-6305-4a48-8a82-2f3c3eb653f5", + "metadata": {}, + "source": [ + "### Session setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "97595792-8173-4d0e-ac56-174c3d698d78", + "metadata": {}, + "outputs": [], + "source": [ + "from pyspark.sql import SparkSession" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9119c014-b51b-4ba0-ab28-585665c03ac1", + "metadata": {}, + "outputs": [], + "source": [ + "spark = (\n", + " SparkSession\n", + " .builder\n", + " .config(\"spark.jars.packages\", \"com.microsoft.azure:synapseml_2.12:0.10.2\")\n", + " .config(\"spark.jars.repositories\", \"https://mmlspark.azureedge.net/maven\")\n", + " .getOrCreate()\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f0371e5b-5700-4466-86e3-07e35499200b", + "metadata": {}, + "source": [ + "### Data setup\n", + "For spark, the data must be a `pyspark DataFrame`. You need to make sure that each time serie is only in one partition (which you can do using `repartitionByRange`, for example) and it is recommended that you have as many partitions as you have workers. If you have more partitions than workers make sure to set `num_threads=1` to avoid having nested parallelism.\n", + "\n", + "The required input format is the same as for `MLForecast`, i.e. it should have at least an id column, a time column and a target column." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cc337af2-0952-4f7c-98ad-baa87bb16d75", + "metadata": {}, + "outputs": [], + "source": [ + "numPartitions = 4\n", + "series = generate_daily_series(100, n_static_features=2, equal_ends=True, static_as_categorical=False)\n", + "spark_series = spark.createDataFrame(series).repartitionByRange(numPartitions, 'unique_id')" + ] + }, + { + "cell_type": "markdown", + "id": "959aec60-ed2e-4538-8d6c-09b0a66bc35d", + "metadata": {}, + "source": [ + "### Models\n", + "In order to perform distributed forecasting, we need to use a model that is able to train in a distributed way using `spark`. The current implementations are in `SparkLGBMForecast` and `SparkXGBForecast` which are just wrappers around the native implementations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9609dee3-f959-4c28-b913-0871f94e2863", + "metadata": {}, + "outputs": [], + "source": [ + "from mlforecast.distributed.models.spark.lgb import SparkLGBMForecast\n", + "\n", + "models = [SparkLGBMForecast()]\n", + "try:\n", + " from xgboost.spark import SparkXGBRegressor\n", + " from mlforecast.distributed.models.spark.xgb import SparkXGBForecast\n", + " models.append(SparkXGBForecast())\n", + "except ModuleNotFoundError: # py < 38\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "id": "690336b5-ad1a-4ff2-a42b-fd2bf15870fe", + "metadata": {}, + "source": [ + "### Training" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e8a458c1-855d-4955-b77b-5dbdb5ecacf4", + "metadata": {}, + "outputs": [], + "source": [ + "fcst = DistributedMLForecast(\n", + " models,\n", + " freq='D',\n", + " lags=[1],\n", + " lag_transforms={\n", + " 1: [expanding_mean]\n", + " },\n", + " date_features=['dayofweek'],\n", + ")\n", + "fcst.fit(\n", + " spark_series,\n", + " static_features=['static_0', 'static_1'],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "33443e25-3a35-4abc-85f1-2aa774d64689", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " \r" + ] + } + ], + "source": [ + "#| hide\n", + "test_partition_results_size(fcst, numPartitions)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa7ebdd-6d6a-4e0d-babf-d7fe11cd09ff", "metadata": {}, + "outputs": [], "source": [ - "## Data format" + "#| hide\n", + "# test num_partitions works properly\n", + "test_spark_df = spark.createDataFrame(series)\n", + "num_partitions_test = 10\n", + "fcst_np = DistributedMLForecast(\n", + " models=models,\n", + " freq='D',\n", + " lags=[7],\n", + " lag_transforms={\n", + " 1: [expanding_mean],\n", + " 7: [(rolling_mean, 14)]\n", + " },\n", + " date_features=['dayofweek', 'month'],\n", + " num_threads=1,\n", + " num_partitions=num_partitions_test,\n", + ")\n", + "fcst_np.fit(test_spark_df)\n", + "test_partition_results_size(fcst_np, num_partitions_test)\n", + "preds_np = fcst_np.predict(7).toPandas().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", + "preds = fcst.predict(7).toPandas().sort_values(['unique_id', 'ds']).reset_index(drop=True)\n", + "pd.testing.assert_frame_equal(\n", + " preds[['unique_id', 'ds']], \n", + " preds_np[['unique_id', 'ds']], \n", + ")" ] }, { "cell_type": "markdown", - "id": "39b91ff7-2661-46a5-a127-a1fce8c02611", + "id": "a1a1b654-5641-4b4d-b503-6606f94396cd", "metadata": {}, "source": [ - "The data is expected to be a dask dataframe in long format, that is, each row represents an observation of a single serie at a given time, with at least three columns:\n", - "\n", - "* `id_col`: column that identifies each serie.\n", - "* `target_col`: column that has the series values at each timestamp.\n", - "* `time_col`: column that contains the time the series value was observed. These are usually timestamps, but can also be consecutive integers.\n", - "\n", - "**You need to make sure that each serie is only in a single partition**. You can do so by setting the id_col as the index in dask or with repartitionByRange in spark.\n", - "\n", - "Here we present an example with synthetic data." + "### Forecasting" ] }, { "cell_type": "code", "execution_count": null, - "id": "58e1f392-29e3-4328-af11-5e1935aa0bf8", + "id": "d06d2230-60f5-47f1-820b-af2ca7311b41", "metadata": {}, "outputs": [], "source": [ - "import dask.dataframe as dd\n", - "from mlforecast.utils import generate_daily_series" + "preds = fcst.predict(14)" ] }, { "cell_type": "code", "execution_count": null, - "id": "a09142c9-6105-4c39-9503-9b55054f66e8", + "id": "5da6bbd2-9806-4b12-91a2-1b5571ae1550", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/hdd/miniforge3/envs/mlforecast/lib/python3.10/site-packages/pyspark/sql/pandas/conversion.py:251: FutureWarning: Passing unit-less datetime64 dtype to .astype is deprecated and will raise in a future version. Pass 'datetime64[ns]' instead\n", + " series = series.astype(t, copy=False)\n" + ] + }, { "data": { "text/html": [ @@ -130,96 +944,57 @@ " \n", " unique_id\n", " ds\n", - " y\n", + " SparkLGBMForecast\n", + " SparkXGBForecast\n", " \n", " \n", " \n", " \n", " 0\n", " id_00\n", - " 2000-01-01\n", - " 0.497650\n", + " 2001-05-15\n", + " 422.139843\n", + " 421.606537\n", " \n", " \n", " 1\n", " id_00\n", - " 2000-01-02\n", - " 1.554489\n", + " 2001-05-16\n", + " 497.180212\n", + " 505.575836\n", " \n", " \n", " 2\n", " id_00\n", - " 2000-01-03\n", - " 2.734311\n", + " 2001-05-17\n", + " 13.062478\n", + " 15.462178\n", " \n", " \n", " 3\n", " id_00\n", - " 2000-01-04\n", - " 4.028039\n", + " 2001-05-18\n", + " 100.601041\n", + " 102.123245\n", " \n", " \n", " 4\n", " id_00\n", - " 2000-01-05\n", - " 5.366009\n", - " \n", - " \n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " \n", - " \n", - " 26998\n", - " id_99\n", - " 2000-06-25\n", - " 34.165302\n", - " \n", - " \n", - " 26999\n", - " id_99\n", - " 2000-06-26\n", - " 28.277320\n", - " \n", - " \n", - " 27000\n", - " id_99\n", - " 2000-06-27\n", - " 29.450129\n", - " \n", - " \n", - " 27001\n", - " id_99\n", - " 2000-06-28\n", - " 30.241885\n", - " \n", - " \n", - " 27002\n", - " id_99\n", - " 2000-06-29\n", - " 31.576907\n", + " 2001-05-19\n", + " 180.707848\n", + " 182.308197\n", " \n", " \n", "\n", - "

27003 rows Γ— 3 columns

\n", "

" ], "text/plain": [ - " unique_id ds y\n", - "0 id_00 2000-01-01 0.497650\n", - "1 id_00 2000-01-02 1.554489\n", - "2 id_00 2000-01-03 2.734311\n", - "3 id_00 2000-01-04 4.028039\n", - "4 id_00 2000-01-05 5.366009\n", - "... ... ... ...\n", - "26998 id_99 2000-06-25 34.165302\n", - "26999 id_99 2000-06-26 28.277320\n", - "27000 id_99 2000-06-27 29.450129\n", - "27001 id_99 2000-06-28 30.241885\n", - "27002 id_99 2000-06-29 31.576907\n", - "\n", - "[27003 rows x 3 columns]" + " unique_id ds SparkLGBMForecast SparkXGBForecast\n", + "0 id_00 2001-05-15 422.139843 421.606537\n", + "1 id_00 2001-05-16 497.180212 505.575836\n", + "2 id_00 2001-05-17 13.062478 15.462178\n", + "3 id_00 2001-05-18 100.601041 102.123245\n", + "4 id_00 2001-05-19 180.707848 182.308197" ] }, "execution_count": null, @@ -228,32 +1003,40 @@ } ], "source": [ - "series = generate_daily_series(100, with_trend=True)\n", - "series" + "preds.toPandas().head()" ] }, { "cell_type": "markdown", - "id": "b905be3b-30e7-459e-94ed-aa6008201ccc", + "id": "5ad24338-2634-4b27-8f73-dc162338dd38", "metadata": {}, "source": [ - "Here we can see that the index goes from `id_00` to `id_99`, which means we have 100 different series stacked together.\n", - "\n", - "We also have the `ds` column that contains the timestamps, in this case with a daily frequency, and the `y` column that contains the series values in each timestamp.\n", - "\n", - "In order to perform distributed processing and training we need to have these in a dask dataframe, this is typically done loading them directly in a distributed way, for example with `dd.read_parquet`." + "### Cross validation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eb396b93-b160-4325-9d5c-bf391ef87db3", + "metadata": {}, + "outputs": [], + "source": [ + "cv_res = fcst.cross_validation(\n", + " spark_series,\n", + " n_windows=2,\n", + " window_size=14,\n", + ").toPandas()" ] }, { "cell_type": "code", "execution_count": null, - "id": "e02ac871-05a8-48c7-b38d-b56174a9ed58", + "id": "0c735385-7104-4ced-a253-d4a16b8bbb4e", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
Dask DataFrame Structure:
\n", "
\n", "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
unique_iddsRayLGBMForecastRayXGBForecastcutoffy
0id_002001-04-17413.959480416.6956182001-04-16404.993322
1id_002001-04-18500.046697501.9386902001-04-16508.883226
2id_002001-04-1918.21105217.6299922001-04-161.218119
3id_002001-04-20102.664586102.1737442001-04-16109.879770
4id_002001-04-21182.853996180.8411102001-04-16163.703847
\n", + "
" + ], + "text/plain": [ + " unique_id ds RayLGBMForecast RayXGBForecast cutoff y\n", + "0 id_00 2001-04-17 413.959480 416.695618 2001-04-16 404.993322\n", + "1 id_00 2001-04-18 500.046697 501.938690 2001-04-16 508.883226\n", + "2 id_00 2001-04-19 18.211052 17.629992 2001-04-16 1.218119\n", + "3 id_00 2001-04-20 102.664586 102.173744 2001-04-16 109.879770\n", + "4 id_00 2001-04-21 182.853996 180.841110 2001-04-16 163.703847" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "fig = plot_series(series, local_preds, max_ids=4, max_insample_length=70)" + "cv_res.head()" ] }, { "cell_type": "code", "execution_count": null, - "id": "5a367c89-0c6b-4861-9cc0-25dd83d8247c", + "id": "6fba9328-7183-4744-9089-8ef02d3e9c27", "metadata": {}, "outputs": [], "source": [ - "#| hide\n", - "fig.savefig('../../figs/quick_start_distributed__sample_prediction.png', bbox_inches='tight')" - ] - }, - { - "cell_type": "markdown", - "id": "9c65a60b-246b-42ee-a888-b082822c568e", - "metadata": {}, - "source": [ - "![](../../figs/quick_start_distributed__sample_prediction.png)" - ] - }, - { - "cell_type": "markdown", - "id": "4c7076e1-0388-4fbf-a27c-bc99ed291259", - "metadata": {}, - "source": [ - "And that's it! You've trained a distributed LightGBM model and computed predictions for the next 14 days." + "ray.shutdown()" ] } ], diff --git a/nbs/figs/logo.png b/nbs/figs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..30f63ca6c326e0c5188eb21233262e12d8aa592f GIT binary patch literal 3850 zcmYLMc|25Y8x|rOq_GT{vE?OMvS*OpknAN)_GL&}#}<;c*FKX;$eM{1gY4PLlJ&L5 zFl8UI)6`5dmT$`YecvDFoadb1ecktUug`N5%}rr!to*EWbaZS+hI*ECbf-FKYppX( zw0k0NhzRY$;%8_ZNJn=T`1?9Vmy-*keLNLt3Dcp&4GFB#UKkPDCfam#)#+ysoKMry zu@@NWY2OSzwUw7#{iU8eq5WGU-LpsMKSeLFirlV3p0<#*X{1-i2Qotr=tqSz-Ng|S&Ax})}y+9d_i)_(fy&5J#y<83pU8f z*#7#eJZm!q?5h2_EEny4!RJfVj5&W(s?}80W_miY?3m+b*W5WjCopo${R}o}ULoj` zoCIIIeL8zG?iyPV$k2CbBVjDGG{w}p^Q|mkc|%j}DEe=Pff8?7m{2Q_<5O{0p&M7Q z#)FuSBSY{|uM%6xy*nzHk818n)(e@D=*v>jmx~J)vgiDrvS}t*up#q%58qg)wEqhO zyxXtEEWa9&zg87UBesJXy>!opqK~Uu#Uv%bT6KD(-AC)5iK9w^YU}1M<}_dO!x;4; zqRUrSJz`g)EB;ST5I`mf@oDM~M!S#H;e}}kd=7Ue2$Rx*LqHOqK_!bEb%h*lD=%DM z%9Dr2vkg4#1@q)tQsjuGjB?C`#p%*u<4F2n(CT7!vGp;D%?B$>T)$F?JrbmLQpCbg zkgivYl|gBh^E5|w+x1#q%I>R`weQx@5hk+-?zmf2tw{PXwYNo5VoYMREM=QT5bmp9 z1`wsc{vXJku)lRBxl;4x&b149Y7>Bh;{#^$F43Q9;d_Di*pcWlzSYC!;$k?oVQs#C7jBTXv!&_9duMueT@a)^Db!Vl~kye1e1 zr~kDPffYF6ZPas#q?VC(YX#vMTYQ7+V`60tc>8WIbZJ(oCFCN|v2~x?9?FtYazlw> zSs!$ZEJ#i880u@>n7T4u#L2qE!lVY%F4fZA@0lE{XVGHxbYjawP7Jaq1+fi4!}ebLXnRV&Ey#~& zia);IK+z8m8-y0v)rcHb((SI=@OU({rkRKZ>*x(iHGU8h*8U7_DqCKgv^PD(jfH2hw$i% zZW{PHlm=F*a@a~+24*?(thK5#-|>3Lqnfb496FF?M60BxF`w@T(kE`-bwxcr4vGKA z!ZQ#nFD8&=R?BNs8QcRsGbo#0bR;|`M*7{M@;31au;sJ0vIBPnf~aG5N)sMh)<=%0 zB^2JfZg*8r=JEM>s-D^@uxf2oFLtIHLht1s(7WM&5$xr_qiW!cw@O3TzEe!1R!Vs* zgZwdGa}{2%Q)?aBd*ymJ>h6XjMIP%KnM8+4X*avtGmiD&qK@l`k>qHW18m~c;O+pa zVu3*aPa81r$(z8~mIFfeXIsw@x4#_a3L5>PtXiDt{+~)mtfGJ zSBt2dmIuVA)LeSftr1>QlulWVN%`(O;J*Lu{cLsPSQ_)>>03e^(zR-nMnbI-)fxF{ z{KWf+>*{$I;_c0B%XJ1O_g|m1jfp}3VTm;9T^={YB%9OpQ@;JnLB=^tI2D43sZ1o7 zXFCgc?Zq|tnG&g>9ch`Ch{G4-VF}tQqMrhEj$UT8Ux^h+yJ9&|L`22_>uPsqSWFp- znoPRIyz`eAnEN@Y-fwO*=LI>(!oPU56-$R)8BH~9` zD7Fic0>9SIxT2`-5A z@)?b{V>Ia%)y{3k*`=Nh5?=y(V@lv&6uPfV~vg>IIvmvmwEiHozFsKcUMcWjMQv z3ggnF0D~jOI+expU6Gc_w=Iuf5RHOKf3w zl8=8D1C1`-33WN%$}Us|_j_*%hTZXJ*#8bn_r*EBQ2<~x3Ieod9f#C+<}Km>_Q)d~ zZtyu3)_q8TzK(VcBY-z5hE+YO=5KCFx9k`J`SYjRL#|Mw$^-T;iv+KNAWgETNdIFg-eHbouKa!Qk|Zq7W_X& z2>l~Ov_@$a@A!LpzdtiXGFlst$V3^i&I9%1#VKDOO8wO0+u}!r<~lpRZdE#EYb&tE zNDTVAGliPqyQOAgVoeO6K!Qz`)hY56`wk}&F)P?H2~>% zDVz`beKVi=U|L}F^}0qAN51*q^Ie@6*~R%-yDFu{??Z4c-) zET;$gBd54VrF@Z~1(tgIxGU6tv$;n6@+ca6!-(O*N}G5@-l7&1cas{u%!%>}A$AH^ z)_nV?b&PtF7Y>+y{_PdP#9(V;k?Kq_?H_*{QI|ys)(f2mkaxm4*e5Je@&(eAT;?Bi!C}64PZj zr=~-lao<~LK;@N)%cn^epZSsuIwzcJ7l*vDAjN#)}$!r~;JR_Sd;x8>ZdVGX!^wY!dYtm6ex9CX3>Ge?PL4VQl%(;!b!Vc@++8R208z(a9%c8}2kWwA-b8J8rh~h4)S_2df<%28H)X z;xsG@l0_T`Qg>IqVU0Iw(qnu$?cdUVW;Hq{He{VyzoSIjOo~WEerej3pRAi#>8|Vi z9F;}kl%Z__H`v8Kz6q3`bI73V{u0gjwXU2hvRSJ8Ugz`D0*^V-J`$E3j_$#WR~7q)qZE8vRTWGKPO&) zYoeTG+9MoJ+6f@j()3-omB5hpDA(Pdaww1 zq;87?(^<6iyFQZz;_&vKg4`o|{R#MEPVmAP?WU)q*@pfS-gwBAETKjYA5*kxao0{} zbtqhk>tGvR%EI(ZYDX{JG|9W&MuQ)`kgMHPCz`!V_}PP0UYY#cY}UX(GBvxpSg^Mh zK`URea`;u@sH?Rt>u<(iTl`blQv0FNdrlDkoSPq6)T=c;Js(FYa)qLrYuK>Pqf=(4 zQVjpZvTY-|CaXor=>`s3SVUF;82x8}L<4zH;BwNWKr1t6kAhocR9jWWJ{#{AgR z++pA8OWjVgRMp3O4l84kQkqwCLq~=?X~I!XE;b{aC@7(5quqmt?nX4C3aLjUA(q zfgF}_%-eswo>t_Q5a1lC@B|mBnQQaYz{j|`_>JQlz9Cq`Q@Fq&pYQ zKNh(6z31GY=h^3+?UBXz%{k^6Z%w=&C`w;APkA1JKwOZOkx)h;&YB|-*rsQ3;7>YV z=r_ZE30O<2TC14pS=+s|)J5EXX>D$7W^HV!eZ^MS(#p`xl#7jzjg#eyfwi@{l^{F2 z$-jSr&CF7to%#8s8+^z)a~U-&1cKlt<{zwYVo8PwECfPU;_f5+$b})hMUpD`*Py3)6dY=EkK2Cx~;SBYEei}VJX(IN;|NJyU zLcHV0lVMn_8? zdW{gN3A%syAfut2Aa~i9Mo8*CJ_QRrBIbWiHHRUsTkl8kqPPt^4Je#8=YH>R_Gsl8 z_XX_ltWPX2x0N`o-%!tEfgc`c*p-;EI8x@~6wLNq4!tx)A!N&P_3G6~F}G-UcXxvZ zrsL%zdOAbRryaXajqZq(CSiT{IbJr9)AEl@mQF*Z*wKDf`&aS4d^5Tv#i+{0x$?c+ zHomvu`-sYqca(vsGhS9aoZFCv=9=R2&@+zQwvtq$Q=LYQ?s! zx=q1nz9@uoo<4Ji?C|Q3A<(_tOQqQM#VsX6RntQ&4p7#=+yn70~`%$ZfiLo(4CYYtqXdsYD>7sjSsmnHR)WkqRoaYnaH7R&s9OXm>*_LpgLW_x7CptdoZS&o&Mfshz$-WW?uEl};B&Zdr)5*B( zRMpHk=P%#%=QdOhW>v4vC_j{I{LGxJnmI20d~{cfj9oL{xGziCW%o0z1E<-r@Zruh zosX4h(6pKhD|mE6T767uxk zy?gxDGnWdjrd>@2GLdyRRDWDiNmQt)sX1e0WR#`X(g@`Rz2qTh{_&xfF^;zyEU@rZ zkCVCp6?YHTtI&K5yDdg+dbHxLHx-{Ro$L1NNC7MClhYx4Bj+8gM!o#&*RL1)vT>Q1 zm=N$*60j9Ja1dsDGDg(t);DHVYW?VxU|rM-%wKMA4HjCdl-OHj>9^6&Qe$CZSugen zeSe&i1^cqHm=S!A;`R#!lVaqDje-nsat`e5zUJXlC)p4-noD_07SX~E!@c=Xh%D-P z3vZFZHy_XW6sH{a{7P1F*q9+a+FvKwS)a!JVmaCP=-Y$W>iMQFgTy;@&`u^s+>Ugi zI>!c}XcQhixa4-Y!^ET%t+O%Hq0<@}W;5U2QEX@C?CeY~;<&-o#(Hufsb;D9Od}^4 z<%7K^>ikrSZ5Mkud(zZHCYwS$-O{WypkPq%?jCnL_8?{z#{EjtJ4M#BG7-G2(b3V% z&dspy_N(J(d?}xCDrADoL$EXos~w4bobJYg=2s=EE#% zS^ff6Qv|*{F!g+5o|4%*Y?Q+?k zZ_ur$ovCVECuf)866Wlp>|2J1qrZIl!j~uJy3a3H>t=Jexv6R1XW7BQVQg-0_ZjJ^ zkMNP0JoFB%PGF{D`5us0_jO)c~hi(slYw~hhN&O1AE^jbY!~@lh94>J%(|BQJ zZa%u+CgwIzozabxmzA|Uvx8}n5)#_strjEE0&Fo8(E?WQp^bWwnUyHV%Mc<4hla5J zJ{!s3XZ!s-$diC>4UXLk-o1*7iiN>KF1cFvXE`^vwzg6=3IqCcjXcf795-%2m1R61 zblgP47MJFku5_oVYf)uG$uTHJM}8t>m-?1#qyv@tK21HpY%BcT`}bM4i~W3CKHs;p zbQ?dvgzg(D;4x>B-xnz{pn$xR7a7G z(Oh?06Esf>UgKV>G?h;z%=fky`euKpkiqzjmqEROrfLCaqi0J#fZ-f;!FaW7JzBEc|C+(%XdQ+zBTS~$`g_s58Pv1cfHCFcjt4L$yih` z2?+@yV2su@2Hi?l&u6_)tstT9t|tcY1qj?O-(JjQ|NVk-l|EWCd!!8VGaj4mN`iLh30+Yo z-}HGnuL-5D6?Dos&}p)adf1?s);5Q6h4GmU8`)jKQdL*aHW}cx{8N7ynwLR;4zsPT zEzGQW9}X%$)8;alJ^RCb0kMM(VmR<|Mm_0~qAuZCx=pUi!?21!pi2iZ-j~bPYcUwe zV})6UTp6v1;a=K{SBi-~g?rKe)>F3rd^4qqTA$4Pe7AY4BY)T|Bxe}E%Pu#p;dF#q znZsfmw3{mQ{V>k!P}PY#4FQ<_#S9Z-CdD82tJ;oR3lu?050B3YL;ox_`o6^hb-wvn zB{d9qY5~jJ=A(Bo$3Mrg>l<_;XxsQ&Z*Z)S(NDl7^5zWEdVnpc8;^^u4c*b{5g1ei zUqoax)K4)V%CMV!>i^>4>si(a=-)g1P)W-NWkErgpFFWhdeUXg>t;Tr2O|<6M;!n9 z2_`^=#vV6&LP8r1D)!>tLofT~b!WjUSJ&1~mAXlJlM}L9Nr%8}a#<0e;Wz);$#HV< zi5Q|Lq_z02Kj&A9^WJ z#K|@?GE(~n>bPP)RG&U6hY#-_{(msN;W-Rm{f{p^d7W8AM~e=p#qzKSd=kL1VBc#e zE0gKoXFLVRLZ>;D@K#EJmD$^q=aZ25bMz@?x`2Ky(O&E4@i#_AvC{nI3)){{1_TON z>B-l9xc&EOKGYXi=fcuBsFbjenp;|8SGvBqen0$Ir6Ihlj}-J8NdVwKGBY!+sZr!{ zNG)wHnizV*IP}NrCxW~cZEXbl`qL{`wP*|?hKl?HNRgkP|3RuM2L?94S+7DnK!qOc zZX#iP+dDZ;%+1M#ust^bG`%f)_wHRxE&Wb;N=!~J0}~TQfMPsb`YiR+x{PW~L0(CE zspZRFE!NI*#tBFjQ3g(UIilj4J#62nth#`T!(XtQ*4RkJ5kez?O8>5=56~HipfsOOU3B9y1kneZ- z)|1h>xyJP8#WU?+Pr;VPLrXwdLqCC`mZ{f52|Pj)a8>fN+?yB_-`_8&>_EIGknXGH zm1b@HQNnxp7E#3P_UB%?xCsR%a$N z5r<=jjB(j1&CNkN590P6T}P`NqRHm_BY6!-2#x>Cd?e-IPJ@^VwUs zZjrKS$aoQ5N35)^Rd#m=!UiQ%v7Nf$ zn|k%xUJ@_z(x(i(U8~HQLB97LLfqXE^3s=3H)8*xr>L_q^NFWhqb63ys(>B9j|Xg_ z4~-vaiuuauT|w)aJHP`gLlhjSvitUjc|O9zDEZNfRF-e8uUGZ;g`HsgP9?W{7XBRu zI>7fnvukP2yUC}HTIs{0H&(pGZ2+*n zz4i0w9UOe}pNaP)z9}c1M?e#vfCjG+&g}&-7bWWA2z_LAb=4saudd3IfcZ&kuh4W( zc6L>3>ypnRFE8)8!^$+xQ~$TVN2L~*F7Bx;7i!#9N66Atn?Usk(=#P$%SH3=l zyFD4A1xQtHyDaTlZmfP=bi7>9$Ir|voheV*f%xwYUw?A)*bH-_3XF>~&lYr`%Ji;H0bR*V2;yuTZqwCgpj3idZ@JdW3ln2Z^#$k_mRr!f896vc_{KCo9$|Q$BKFpOi2ue}6UzG~Vn^d#5pd9ID z`&jYfXMcaVUez4d57V_L`_aPLIy!`?o_{}3BD_II`$>|daYR0zdmeFwa{e>{sp9pM z$2|ADO5HEC!{RDaUJTAp0cl3Z{e5Bwxj)Xx5wm%c>qeqvrjhG92Y*a*sE2MR0=q8> z68x)i$;7{V|Bf@W#yGEKz@y^Dmw}SJo5O!4u}^0&T+p4^Sj=f0iXt9R3aqaUPZXc$ zSdQ^BV;x5P$jXZCTiHbzhp!5W61X5avp&=d{R=@PRL%WS92b%-bh@-u)zmxCA+646 zYAmg>=#UE;yuc10w3Ze<&K{JkmetySb+Q#4I855zu zUZ-0Pa5@~VoV{#@AjiiE_cKQP%qtXfa9)q#s#%Bb!kc#W*V8j5YsfQO0*v z+(wp}V{Y3)TnHulof zqk`-I>2C~MoH$goT81P&icbE*_myjxsH^qQ4F1nMxQ~)m7>AVx{zmeyG}qC&mt42% z)N>}bbUkqR+>9!>Ha#EQ(gcc~eog)6hDNWbTlg4&rmbq6C_z`dN-AA zZ$Hmr$e9#79ec4^hzk|_7*E<^73WU6S=PEu(7n)m_fyF;*&6G}2)%CnyRTGlu-}HZ zJM$(!ARggix!WK(qAD2h7jYuX{0_)_bZ`!C`Ha^JC=oGP#cvkWvJ`Sg$+0%RfcBTR z&PSz5=U$p}al&EMHmCJE{TkcfKPjS zoE&TFlVk6d)U3ya`D^ooLpxTJS5s5*f6YDf&`NKMb&Z+p73i&z@omG?O^`^-;D~5p zq1rO?Zf2%mJNie&CgLVQt6OhpvByy=Orp=YJrh(+HQ)MqhF9^3#+??gAH|&z=s|qa z&t#ncxQuv?m*G$HnFA^Y!4@6sZ82iC`)%D9qyXe(TF(v>c+KjQmx$ z87c$|C+LbU(^a2plSXJ9&WC#tt7-nszQdRs>H|P}uUmI#ckkZ+Y_>PZnsos#Ijuuc z*CLd(qw2#M#pgJumsfSz*TQNn3nv@yh0%RF^}~4P*{8`%sCV*zr+>f|lc?;#yN~OL zR#^PGTayt57Oh>C$t=s$n&qQ5>x8qjX==}rZ14hr3pJi-kukYlD_3ml$+(_a6 z*pN20vY#x5X%dA=wO!V#BF4rhEHr-b0NT1HHLD|v7OUHj7(zYxB=ddQMCKJPQ$FJ~}=e1L2L>r2nLFTbFGD*p*5k*U<>jp)mt zI@=;TU&+46Yc<^{A}_tm02*aW_TiWN!?cmZE*I6EsQSIln!V%VESl!EXYI#0-B76W z_vNwXDzDOW`~!RfUYr)j(=qTlhv}J!v|8@?p4f{z_2Iq@4aCHhM2%_kcC3+|oY6bN z`j+#B2uzLaCs?Wf`y`ty-PdrQQq_gN?^<#B4a{kX`c$nP(E_cs1utg#=>y!q{dGu)-g)NJbsY>; zME1H;!h7Hx^}oeAc%^-t9LQ9`WD_>Spzb3*J2h{#2wh~he*9!89V?CW@p)yq>-ak% z)+U-3^Q}|^63!!uEC}3g+R4`61;0J6aWj18nc!Pjc|BY}SLQ8FLab*Y3 z@^Vw_U>ETWcgp2-NzRv?VQM^jaS2GNP|rQqB2v2g*uz^KI26npSHSC&gPt=8Jg6HGEmaH%ZdG4L0n;LzbuRJjW`qIDCT7l*1B(s}weTsE?rBNRe&L z7;!c^X@Cs7r*SEEbbB*$*ndTQs!JcA`EzGlEiKH^{4`r(B-RaOb~=Pxx^VT7+p;?6 z60QfixT=8TDVp+yrl7zc%t(p;BzSwv?{&PDEOOSKFj!FK=J(tT#Lv!(l;0lW650~< z@`|o&e`N28i&vG~+Sw&J@2vewQ|EJ52W+aEr6arDlb4sr5q=_5j57jU$so?p`Z01I z@$nH`{m#{wwd04HvKDOF=Q$G5lQkR_duc6ACAq8j;u>Byb9>7VV?ofP4ycRTv^z$ zjv9FXD@<99zppNNB!kh7WmrB~Bg}#D(mQc&CwXZilznUL8EV7M5=~t`(?NdFa-@=# z6Dsrj`ucz@?1uV+m;_%IsvkJs%`TGtz`(cfcBvA3$t{_RItQ(F1%GU7U))})o@WN^ zB8%cxQ>e)eExkoxp|dUvC#4JUN^fufKVw4X%_V47k_S(-OqST7mp61V#&vlIe@@-I zfb(`N&2Puz1uLNQs-;O>1MY9U6j_O%#(pi6YU97$?7g2#S^D}C@`fTaQP)dH`9|K| zt*AC8HW?Hz#Vz5f(a-c=32`4}uwQmy`yO4Urf&Xt`PNKFT%D0vJ$iXWsXxb1HdTTv6>O%alikR0a5#Lyvt)yH*^yC~g>ZAo$CJJ^%G_rLWA-Ov_2M&6i~ zLmuhOEY5aYWtHzXsUI4QD|NU_*Dbt^(;EC)Y0!t8L__F!qwo zOmxS{9vCYKv~N$d6pcbokSA-v!yzCbz#*V*wi|J&OIAtxk)7={&;MWC*UT)4#i9zl z0alv3)%4a2@)**M;h$b=Zf54w+u>ZQYE<6_^GUo0@9i9*N3LzCdUEHjuoY6-+{L_7RW z`>Rtj+H01y%+Mu`Ssaogcm$s&0*~qyDm!>TY1iZJQCcxj!`f$LP|A003ZcpQIH~<2^McD#~~+W{8k-ary>Te z%W2q;THs7lC7I~oUH(BILK;Uo8eCTckm8!?;oje(g)QDOIW(QxRFwm0-q6L6&=cV6 zeBkock2br(zbJCpDjIlehxrTEPCZ#-53iB75q5XL$XTXqyb50#0}^aw*B5v{f8V?B z4W5iwo30IGRn4_ z(3x~9{mm0I!GQ>8H4d@T5NihAU6L4XQy@*u4;cCMx1PUfDQK|{>teh)UKYa9TfepA zq{?AQQ|1?g^`OX=L$K9Ac8$9s*2NWUyh>0)fV_eY^%Xn>2Dy!qnvUtVm@W_;!0)ex zbV4755XAOZPQiIg)N2VRRbat%Qf-H$!->0f8M~PlySDPunFW`SXRpoQuV|XM3f&I5 zk|82iv_c;xPe~m`eH+Kqe0uKShT&{#F+~`X@`{W6!*maVV^$9ub zbBc}uE(Pz_+shbx@OjF6SadY-6Q8D`a6B7Ah;(_fgJ$^##kvUwKX=o_*(@zJFBOrG z)U}znMx(|e_HLWo*kNdb1ji?>w1I4Wf_&4VSdgbPO!D*crXZs5C_^)fy=?mpyvb?} znU?uNF9*oPET4~cmFhLNr~;|wtg6CYv<+{|_E4tYl$P2`XpmNXNtl<};5=Oa3| zvKP9#9!A4I*r@qh9i$#hd|Go@`K+n?{{3_Aoa~qF{j|U4G|zx)F#A`@SoMWX0P;Vh z?#eKXb~Xn^hN7A91)Rq0K5pl+YM>b2Nl10v3?hiMU%$Ijh zDaXr8^%R<@nY*5^`F`0eSU^&ONbnQ-RQiLj*m~JJK8q0J0IRGE+v~VBX=ki^vT=Ny zQ^k%xgFQOA>hG@q`WU{3=^6vh9+_H(IoIx{`&7e9$ZajOZ>`XLb>^~gt3##V_1G&3 zlY;;qu}1tb8!4+Iz~O8~w?@+Ty2BvHn){>z?WbFF_q{APYX(>r$^#|_6tP~!^!hrMepgA-e@q>~&^%8- zPtQ>^{uhxGaU`K5kpPBE&Yq2h;{l!KZQCg=)1ndj9=<+S8ur?QY_xE8F&oa8$g(sc9GXIVhj^%h@t&{WexpMr2peXq*ZO*XF zth`uwQ*K&irp91ba9z;Z+e9}p=YW3gC5SBA?F19{gqI{xa%adl)!jsI&EWj>vC3zO zWSbf)UaF~gRJrXDeq&%;eGZ*WtBcfkdHmCYcZt+|LEY+I*`zcO@0dtQG5y_+j(@}! zFC5xw5ej7&VPf^>DG#?xJ93lS!(p-=nk85-Zj&2u!f_aI8}>oF#Q0IxL2F8Q+ta?k z-nySTqXa5Jjgf23Jv1})04ar=Hl=b+_W=m#{?+ zTHyHc4>Qwe?H^#1!_RGt7G{F^-7zt3OOF5k2Gt0UQZFZq-?C^0P+X`C$-dr>7GvIQ z+e%W>O|5fxyq;-wnK|e$P%p4VDjZiLgKMGN1Xk1gblv6eRiP~}hi-;n$WS^c`<eDtisDbcHapabZ84vF;lepx$GtOSHB`C9kKxoV-5maa4OjvUczS*T0TlSC zuYP^20HacKpzg)(lFhbiFXAfnx%1~^!BmY`j0%T;S4n%uvou&p+@*BFfJ7@MoRmU4 zUShFYT2HnGc|y_z0}3%TV$A&+$FmZwm(%nh4`Pkx?-Z{(tZ?7+E4JOm87ik~21vB( zFe*RA&UxDyX_iPsnT$~h@sv*pkPJ&MVAfimFfZm`5*||tv-u@lUdD$;v1Dbx>I9U) zU`x=h{dWD-Q>*=amEQh=+s;;6%DNw-dDHvWj?n$JXRz9^DKuP!F+~HiUR4e$NSng7 z?9{bS|C&4)+YuZCVj`k@VDhY>(F7yYhX;EZ2Wlnu9H0?k-1p@!;0C-V{ng<-M*Pm( zw;?8z^y>F_pwiFA4UhE(8HQ~UhuSw~w+s#)^g%ujH-;l*0n?K!=_)(p8i%43z7SofkvE)^vDw z?^t$bAnoUL!p#Ic0tX;KbJTU z(Qfq+H_I)IwSUU8X}%KG!c=InrI*t}_!w$^=BWiqh>}KCYen$ktzzYp+NZ(3mopZ6 zGbeI0LRi%90pJ#}nIi$g{PY!<-HnXJYzT)za7i4bbF7ukOxaV>opI(Efl}h-?|z=btO=v_|dTdEsM+rGmJ!zT8g5>UG<$@+g`8uO~JEN>y*@kIDYv z9@!OR3hx+3KBsw_+q`+a{L}UI_t69Pk?Y<)XQ;{ip1+ifa6oX+JPllSWg$#k_psyh znw0+rU0QpEV4}czoKlfF@V4U~0wlx21Z0gC>u$Z$3y6o@j?M-m7T5E1+Y~`}ztRN+?3~wc< ztrwbi9q{tC4vmA`fxP+3y9mzssWQ5^9QE}W^P%P&PKRjHKohoa#8N(p>OMj8sMF=|~gJ>_n0U`rAn6T;TkR!k}kQg5!~*ZoiSd{E^cf6+kywYp<@_S)t@(RK$P@q%C;Q9Cc zM;GTMGM9y)iVmlk`p^@h|EihV)m_qM7%}rMRs~Br2NeJ?+$siA8(rTXUIQCS zj6b^1*wqXb92G?asSz{d{LD<*6}p=1n_v%qeO-(c4 z{=vH>&9>eaGreO|`NWaMK!5fF;W+va1+*&dk-2M#_}0$>Kn@>dN>YHJaCj}3fF|Pl zE7unNGeg^GI)Ylh=!V}ae3crADU@ zys5QZYQK%_PWW$E(S4A{#341b%JTTM`;4eSYwWG%;xAhy$=l-f?(Ga2tjSUreDdZW zTNV;C^^pSW>SzJTRz6MF_zHA9!$c`YR0MKb+uPeEc?V-vo=|{n{hY_1oCFgXYmE8f zRbS|8S3y)!v((eB&E(*wdE%#6HGk>{DE>=M!avMA2{2NA|I~a#*>CB}j}LHu>&^bA zcx0$9`h>(x;vGz?)lor2WS`w@MEM<2_Q;@FY3VK_3tSAwuf{r&-BAYly4@EQjm2mV zbL)0`H(wVdM2VQcE))sIZig{4x3PV-(ywLLGTBc(WSNLs$J^JQ)MB}a%%$kxO6bcY)j9(bx#xo-G;PjOYakKNTAw8X$<0AjZFOJ${ zdzSN|(gQD0%GtfmE+G}3@ui*J^!>`2_|NWlv$2>za8F&TZOkT9>%@_-T*QwP9hzJ5pS=z43dNOzO9ZbR;obd}ky1v91utaw);&hHnW;~T@T6m|h%@V<>bHDC@ zilAUN9fBaV!>-NW{^HUZ^|`I@q{($jt)GdKNW2`TCfdNYXb2wRaePzz#WSC_qjQB<1)j-}CQZkiIO?d8*gBlxM8L@l-@VVd28_d`(?=FF#vmxR|pHx zEOkWjnQ20>j11X!Jox{poH>J&`R(W?5HlM04O7F}()epTa#N1T5pW?bU-hWjvJNO! zVdd8Q^Vr(N6x;9LBo1#GU&`G>JX%)u>YkuNE|a6r^J!*gWob7rpBgEC6bD75Id^gk zpo8(o?GIp3zQpHT1LFuPmB2lM%v7CUZQ;^BeJB_xs~ae~zVij0CWlI>vY()bAL=Lj z^*%IMVWu5%x(BS$0j#L7^7^0KLvLk+1(PMSO6E+7sDhKg!)cz+^j;J@re2^Ve*U(T zn}EDd4mh%=rzfN{K|b)R`1=(xNTRuzl=B#MzW{Y&wT^B?uoY5o$q(ajAfFls`9^+0 z!7K>2rKY7J#|@8}jdPYfQ+h|)gP4_ZpPMF4>+5~87&Eqh^S*6aYABt`H!skgs&#&$ z!3IYgCR>C zVl6v~VssUcK4ZmpG7@OaT|z9Qb0a+#a$)aYQaQP8NXDi*Jm+^?A)>V?aj%;G%I?zW zGdjG98*eAy^iD)vHcZr`X04!<#oJ+Y=d7ES8xfPdaVCpAZpKS+lMx%L?Y;mlUS_hK zL-iT^wnK0`F9H5p-Y+XH6@f^A4%|9;c={ZZ1z z;|m)^tiGlq4d4J{&6MU4gA`N+jybe+`>6>(bSV?5qJi4L)RJ~j=Ygsk1$j=Q5I9n< z8>(Yb^y4d?+^)lI!0S)vvyWWAKlMmq-|7aqky!?eNhGo|5!ZPTw9~BU{&dQ0)MI32 z_opTPxa&dBT=g@LMHKpg6`1#4wr8BOUo}esZ_}l6X?nA+LjR})%Rgm?3{>$esd#k; zO*UhZT4H?e~g#ls4wJY?>IBCexN=XbDv z5{+oCP~)tKQo>5;QJCEM>L%6 zKQ4c7;yi5B;p8amW7#i>Syj8s_sshc0@1}&=Wg*9gx$g8rybeUlNf4%fPyl}SaTcu zV}W(nO%wP(1NTI?MYs0;tZFNRL5cH(qAFK~PbRqE>zvbj|DAP+0A61D&3Q9eHF^qY zSJ(iO8FAmUJ5FKc%GKR4JCF^ku#~q2ak1pniGj)>mll!Z!{s!TX_tfi z`8~b2zprG=rDyPE4GtfBb&Dxs3_X8+{fb~9kiJjATQ^jDY2Q|?G)xFGSX@EoS-b0o z?0!fk!@7%~&g%=#PXL31cI_giw>+D^e4S%U%0&>L>Ws1KhJSm80pCPyIzCNW^%vw2 zJPEfmDA=VBC7F4kyv+myll=D0TNaytiC>%LJxWs2)Qbm+6R}^of5k3c(v8e_;OSCl z+^NSHnvgR5QxTDYbFu`Q!h5#8E1V1nS9ke&BCYR^OnnbKahq0#@!iIaNALIHK zJTkcSSkF$gdXl)uTn-fq9bv-1SG2L#7Eep6hEv`};t9Cn?|+Ba7oH-su(o_L*m~Fb z$XOp}Ia#91{}deksM-}Ir6R_fgk(&Da?|o~(MZa@x9ViemnbPI0|{AQ?X?x}xQxX> zQe-z{j&zdDXK<~Ih5N&)Gt_$7Vaz7e7BG1hXcoy!OU3#=IqS`;ngv100R>;F6#KBp zM=P=C41Y0rtYdEft31ZqOAzmVfzPR2aL<)AGUnb}SDwtw z+?^E!>e8?WvgYoRMk!eW^3=Xl?b}w#y=;S@H@)vlm8FtzX?(Z&_8}-pl!%xR)vI)* zj-lW(pF@XiIKac9_p!QJ)OIu*MJK2auo$ddh&`;X*^^f>vrcrbrZmr$oOKV5bBmX$ z!G0)Omy#eVJcxAD58MpQU!DFa4k;ZDV-+(9uNcnCEbBzoQ-*{z9S-u79b_!N*7CCi zoq-`MGZ9Q3h+9kVMINhR0k?O6{{QK=ntk}{Y(Cr2b;%+feAVARnQr*rd5V`|fuuUV zdvJs`r;_JFiCln<)oFhv=<++pC`klUJ)-hL98+kFUrDUH4sRpDcf!2tnFhdfFAiP; zDW=`bAq1WN$;iaSM?SszSn^jPWUW1tMZ{4lT&pJU4vTjkq3qynOKD}~8#1e#Yh`4z z+phuz7GWTkAmGt7oo^mX&_pRdbRRkm2bkmt%8TE8ymQOYOirfiFSEB^A=_kA0v6++nfQL1CL!H z!MRI$&fo@Ej=m@T;7_3akaPXUme?r_Q(Oyb-mIuAz_hj%e!9J4N$2xO^RsRW!qtI$ zN)|1P3d=P#v5Vsm-y6?@k$wHf?a;lRIJaa!Ka1%(5ve2o3xN#^38cE;hLZylu1VIX zEHU!6N}FNT?GKl)08C*k`fR{b|ca!Rt$1PssgX7r2U9zj@}dwg>kFH##7w_KGsV~xuSBRlMPYgJ= zI#MF|;uXw>TRa7{IuYLdbA-}t(332t)wSVp^F|Ol_Kh#U* z$#AiQHwJE^r8`6xTCNGwPMe{2K6!WW_SCJQ@m|RIoZH^R@t==ipAk;FA6ZD;$U4&W zCeC2tr^PFD-wGSA2x(4LH`}Y8Fj9;fje6HaZmcsMaF9xw{aQM|6iX&h;PM6B?nLcR zoxQ!a`#aKIUpFzdX734I;@HoAody(hr5{g33-yp?z)q>_*rCr4DhLF!N`m|-6W+;O zM2~sBvnMrI0*^n{L1Wgbqj*_g)Yw<{mbA%eCF&N)>FsWkPl@^@7JB4+gkQ>wSNB|h z+Ri({VRrX1Aga zQlq}60u3Kg^M$Tcj0nR>l@60(CFjS5FSwatMZG9aI=zEuyZ?jtJz>?EX>MGWMq(eI zuo}x0De9v|5==^Opf}!2sFh$!9Xv zea?-iCBn1;wE~w}rH;rGkjLDq-V+mR0r%eA_UMeVAXA*)L3nTVSl2IjR$F$l`o@Rz z(B017Y20WqY|mhP+#g)kJ=|S+u8NyNIRvu`W}AeR7gK%YTbs>>+Te-+So=@BHR^n_ zUrrZalwC+3PUgI@`}>N8a$Tr5T!kY_JDCz|q|m<&#agC&yUVe*r`y(Vj&9S1C~6>` zyTTBU<{zMzDP5_K$x}de1NAEU!f0!d(-_Ug@gg8z7zv+1m~ISWhpxAZR&H;Ydbh;z zl(=8pV!5B~wn+HIZ|L+LzcY*Vnt!!fU*tm+wVF^( z4v8GMrawb(v`%M(k=*S)@Q#E3v^!J2i@@ptv)pfHy)kPP84SPS$DV2&uS8%3U|(_Q z*WsQ~fBSv05jp)rf9zexUg{UB8Y2=1waCoq*C|D%TP~ovqwc$9YX5OGEz#)g>}YsB z7j^StQXK)q{e($nz}$x?VcvRm7OJ9P8u={`H<$H$3p;lPJAuPva+jyeZ(}$UI4AU- zNEnnLKvW#8=z?|gk?ah$H1APO0V9|F7@b6ITPLQRICbQkmdoojusqd=f3z~9)5Wf= zI9$0X%c73I0x>j&R|2^1MIvrrG$sN_Th^He*NV(7>%vw(y?=PMn!NIJw-pQ!=bj&@ zwcNCBG}fMU0<=(eTh#2L+f?iCJp=|}lFSBV8qK=$Dh|+2pXVR+)6la_5g2P@QhUV& zF3jEETbIottUPAD+-)!O+}BvN;dQRGq3}0e$klL!DNqmFzqx#^$8+S%C`4{r*hW-R zoGu3>J{o%u{Xy&GlrAAEtk_uMo(W#kM;c6E>%s3#VV4>CJnVFQ zjiC$k65Vt>!A7R~g9KW&*L=(Kprn2y`7&YnAus{UFS$dq;hpCoxe=!pkf12nh|g?q zIf6@o9{6)}SJJ!nsN9)$mosPTG>mX&x!`<>SC9=a+cyl;QiGAbPMe_Zi2S!wKho{_qIW2yyu*{ zDyRJgNJN5~`yj*42GTJGtFeb4wo~1qUR-OSL{^(tY#?)W;g(c7Uirm|&<))&DZb05 z068j8qUWe13;V8f;IW;)1AX^fSN2WJqJTgK#y5(^Mj4MOhZ>R)gf>i8^PSH@ly3ND zav(aZ?QazQ!<5jXuvqrNi%Ws(ZMqn}3`5#&Rl-sAwU*_2`Yj`b!;Q+8~;bZP*-R0eCQnhstnhaPAZQckDa{L(X;iwe!al=|nU9*Jk zo8;#l)^1G7WEY9`#W>DvR=AkQD^TzmuPOr%w3llUhvTC~NNNo`e0OL9Rd{@0F=m?I zgAo-PcdWOgLSXB)6{=<-f%83wS$g8C4dm&7A%6;~6Ni(+=r%hT>}yB}g)zHGYOa?d z1TBf8FpVymD`7XDF+}bQCL1b8gxaKL zmFZAC`2)(WbVcvt0#8-(p}ok+1|qF==utjA;3EjHI7>M8G$ zL=z|76??G6Jfh-vEfRDWkh5T2ZMG!|dW2i;9fYf^4xYSW9aV)uzEH?gRb%7NpFBf5 zsqO6BH`jH%ql!GRL++_M>`O@Jm`} zpVy6VU}_PP$H(rsrCy$l@3-K3MnW}9-KknNC5XiD$7B17ksdYxQ32K#2ibRvHS843 z-t}YZw(q#S_6jHJu%zvKcirH=dXCpDAyOs|1%%w*BufvZ(IF=yL9j zaSn&SVl-;9xL!QY?_v8>a+CW*N))~5?=l`~RZasQ1f+?_=a=y$8w$XRMM1qHK(Fx% z;6PRaAH-m9OwOPoD6G%T=Mzs26+%sm)O=9b4KKToI?gHvGzYb)s^BZHIOe2bv{T2e zOXok$NUJOK)7qL|EoIst)EBt4Md>1U^%!-0C>aQIS;}b{`4kk#cS##RVTQm%&Hm+0 z8>hpS)^VSwuWT}~f3{xVTUmD{CAPR$4FV9D9aWtbMz_P7KN~3rz*G3F!&5*?U?;D; z2jg+0PM?He1HNExRQz17Tbc3YYZc(+ur$(w#RbcC^D$PPhu={X(7=kS9zW<$KF5xS6!*amjn8zJ!Y|FoBdIQ^b`wL@oq9&C`;od zIR>UhT>x_x`{#snGf6GLJV^P~bVB}^UzN$XN+H(_rL?} zQm`rfayR#ucaMJo2I>PBAY%~)T8?Gg!r zToBfFz`Y2DNAqkExx3WcS6zC}6RHPe#p-20(mD8AU7V9X)b|Rn6SOWAyTeV5w{DB8 zQe+X^^y-H{CN`IN*ufBzoXc!;j`n0{@A_iqvoZ;B0{HsVB~moe(jHDsu4Z-~A_olt zT*N8_KJiTp-E`0GwP0RC{HvwQvur`l_4Y?%Y45hTN%-G{!@==`L!I1S!kv9c={esN zaeTS;FHmCOhbG?lJlGuWxg^n>f zYRZ6#w5W*&q?h8Uc!X4zj}0t2S?10U(ymo;O9W@6dM!W z1ZA%{^0U7f%?wcxkAg;#JTfUPv1;z65gE_4NsxNTbqh{uQ?0@}uf?P|on`{a zWPE;jA@MfE^e}mCo_sFYV0jO{1f&k+eh4#Jj;W!{n=Gdttl*29r|x(fvfg-%jyNmQ z%7X?&S7y+Ljx3G5FdFkJ(0@j?oW_HhrD$XPt;GxCl@;rlVbZ9i*0Mm!f5G|W|2rg8ep}tys zsg^sk_UmR{X6F6s_6wzAJ8XAO_;4%mVYsQ2!`>SKd8SeS>Sz$WIXBzuZ)iQM?r6AL z^1x;2PufGlts{L%MCBTbrCHic{LH9>yGya4hc@pTv9J~9=z#DhbMGW5AbUGKrnCXB z`JH-Du4MDdI-Po~uBc37?pl!$rE2HceWq=Qrz5PRy56(j`s0UkK&~4V>$FqCT_jBW z@0s^2xL!aQ%xHBJPCf(ZYy%<7l1ioii5-=j{ zfu%u}*N<@@pHk*$x#kKI$0h8Q&qiA==UM5Z#%s-5J9?>Xx9keuP||}q6Qb#T_X_~CA32#3S`ScjCA@fnRU8*LT{71g#@usxfC4@LFL9w*RN z6+p_^>!BTcJ$()C?mXUiIiPrG$63LCtXBskDW&FCGd|*Dd=YMLZbABIpCQ?%V8Dy# z9{#*+dXINf+j!~eb5ZSqHEs+!TyGXb%m`+%UX-O~iM%lm*Xr%R-nAyFJq^A8Yo7wd zfSDgJQ#Eqmpq;d;exkNs?)-12j8&*2LZrrIvC7q5gd2NRzu0(*bY#MkaSkd7+ z5Ofe9S7E#A>|#n*U7#FLn~CN?*D>o+mdvO1n9bmI{ITG;S_N3tnqA->K$91oVa$-R zBYhqz6^2uTT+oO&^`k@Z=N$5*MPjGI-Rm5bF!z~CqMI;Ty)xy(P&Zp({M}bj_hWB_ zVeb2n(;gr1>TC0iCX;9nH*E8r>Rh{Fn&@`SwN6jo$SZ)NVYtY4K2k){0w6sf5@Iy# zSWp*z@2%2hO3KDisjfnF2HEWYBkQfhs@$UW?PZ~Wh#;UyDXG#W4Z0b-wHKkG;KiAguSDbB_6p=edVw4~MnsA&_#nQ`QQzt2@%n`H}w>Z-@czk_;-$Dol+SXy#?lVmz zGvi0mlyPtPg7n{d2M1>f#p!Ec8{ydzX&gLFi$HpH@JrMe9$0_=aUt_Sd@ECSIDZ`7 zIaQ}rG`p7Gk#Ie04nEkf!deWjh|wIV{d_2iyfcTt+{=#oYxo%*kX$FytBMoryebg@ zJsA4zQ=^%*u+6JF8;Bf&c?8a7LMxHtm!AhFKypHALX?=irDR8r7$BsYi>CI2WM>2OVwHr{h90o8kwz&8lM( zYLqG~IxXh;Qy=I3FEOJZ`CLkh5@){uNbw4|nzL_GGfJ;+hYO8mPA z^dhgET%C!WIcI$BEIXus6+A?R0(!PtOWgEFlm4Ox@|@YBG3EZ}23RtBvtL@NgpNIc z)!p#*x^DNoFNnRMClRre(R=h*orm{my*B+?Ka%=G{S{K7HLK1QTFptWGWq#DdUq?F zJ#|6xHf&ry+d)cI`ss={J9&3OET5D*)8ysQq{eM|?P{OQM8R82vKC!^GjF@l;5XA1 z@lb+g6ecSAbAEsy?6cgtRxQe-=Q+_CE^fQH9%D34HtX2-I3UV=Veu7h;zL z){{uRzkzCkpCynaUGe&5sI%Wf9NivUHp-L}a)^FPW8;Y%1sYh~AHDl1xGdB<5!4jD zqV5MxblxK#tWOXiY(8Egk1FmMY-vbUwYInY)S7UgvpC7t9)5qTO5+8nfRhk4*q5C> zNm~!KIE)ARNf#;vX#IyOTv7VKv(oYrO^OP$OG5lpYRfVciRO~#%Tg)%F02%%_6Pba zc$~huZhL}=Ue;p32(2~n3Pph##*L{x%YfrX)^Nd1Xb>B0wxPd_rrs-dyua!$2f@|h z*;U>7@xQ{G>lZ)iZE_VR{_#n>i!myZf@ct*O>}RZ-)`nI;#dHr6wOFKcpxBn1RMxa zfdsfURiZaDPcDBIjLsxYx3rphrzNVM=2>i=9}g!QSn z{ze&vq-qh*V>H88gZ5csh6|J+@x#U|j9S>rdR!e*_W7P(!j`GaN9go%mL51GR;Wa8 zRwU5u#pS}1pnz;B#1UqhR!GyT5)oTPvgSfbWoe zg$Bom)GIMnRaIdT^wG;NkNmE*B~cX@?|=bte}6U^pbis@IW7@STm(vI95eQtag<^?EFVX4GJsmPw$!q@_D`Nt%{F$5 zjp_7MBAVXpin-t(U2qt44kafh`0=#D``QfmDd@92U|1XITFQ8JW|6tYsT z-^A|+Wc@9|6WdkqIB3xT7uXg>B85Bk0g|?JWE~}Z04fS%g`*i#_9vZ1BNcdsx`Y7} zWTJY~0`?AU0ijpl&@k|m8E9}2u$7hVGL3c+td#={2Uem$9rih$H` z*->I7PA5fBp6scRh3S zNglLN%L2(pGU;3L)lsWVHd`GsXYgGumSJHO zX*E!+j{*Yb?$fkOK+u51Tl7s{Q)?i*@aK1`$mxVVQfAVUChsPy&uUBpI{A+JAP z>-FcWau9-@G9ToEh?!cEsj^Q2e5HCRvnDGeXg>buI!PwAc3nP%dXG-Ik>tS$E6?7I z#+P((HX(+5&>>Rm3TKo=rS_iEtk|qNj6%1xMqvo=K@I~|o!FaDf}XOBpJUxu^xucO z_E+iITLO8YZNB(CT&5S^Ge~9JNE8#Sda-~31sl5YX*5`nV-S<|CvXb5sdO!$3zO!D z+F!2Yb29f#nAa40`eex7O0Cy9dw_WXC9uGC*Am!^SrAG&IXRg))U5GHBxZR0o=)n@ z&MLYSEYak`&Kv-8n>a+sKmag9$Us+UMB4z~h>(F&QaE)=5#hzAGpZ)1cRJpyZLakF ztm5%LG%U`kI3VgDoQ7qN2fpcak^}Q1vwL8pyK?mUGHC0-v3MWgd4<6u+8-@#dN&}F zVFn6vlp3GF66Nsm8iSzQV9cP_b<8S7E!Zt%Jq$>y$eeCT3>icRBiJk(IiHv(E)4*n z1E*RKa8baIMr`;H5Hsp|dKUnVSo@O08q-Js96|U2|Jf4-W9Wx_%7Lj;VH>@QVpR?a z@W#Q`f6Br+SNn=bkLPA8OHO@)D%SE~H_}J4sk*WidS~i9x4y@&XST@SeSRCQ5q1ss zm$mBIy1&o*_diSb-D$t75!Q)xC41J*=w()&FZ69g769|Sby%Wb8FfPJu5ieRXQkF zJE)3iWZ(sRCm6RUccLl`j#%7%Xw10c0E9pWNk=y&dWs@fl>mpPUe#;OPV%LnG`jz2yB zKm4V=yQfKs$vk7xPIWG8-kNqa&;%Mezno*0JZ^?8A0QUm;W_UC7C|Lsuo+}r7OLGU zXnUv)STV#KpPYFB)g?FpuIFFhZ~N6kn`zX)I>>`@>R56xw%)d(L_6Z4z{6+)(q^@l z2HQV;r!mzd&v3T!xxoS^u&5f=`x60E#}}N5N(DypOG`_lcbg$->T;nhIQXg%yBorHn;m$$MyK(lb0Ooct-T?{W5xnj*Dr!RA@)5gKJ_HO`Kerv-7S? z8V)zSqr7rH&KT_`X?1gjF`$`SxCGYc4zAs28I~)yqSbzL+&^TOFu15dt6>(%)7sFX zC6vmUuJ+jcK!Cazwi(fbyz1&|6j&{ZFEKk0Rl5s8xFJQaA@B%5j-_Q~-QXdI_{*7E zi2ZTg49OWyd(Wva2|&v_2%n3y{`j@4G_Z;?yczxJ z?|?6O1}Gz2pz!)^xk@uovB2TSmoz>UM=_B|ryuW$U4N;!DKJv)cKr=>D0^+q>vAoF z^QN5r=howB-MJq3vHk{MFw($>016)K<6budcW95@Jh7r9R^BRjCMw?KD}6*Xe>N00 z_+DU00iU-O;J83X#-|dr|D;>zTL@@ksBPV!zn2IiQ!2AHgy_NE&B|K4)`ZUC{{F<$k{pCzV8fo5GQ8Hxbu(mXtSTPpZ2IsEC<&a%!}i>@5`O72oZ@p+ z-c2k0s<+3oSJ8Hb>Lb~u{mBPkTmU`cH-gCP9fEmysVbjP=+0OMb~)*7ndcG zx_2~sRXFc7C-*Qs#>DbCUibF}KBZ?9;fQ#@Of^! ztz|Dsg6~hzl#yO_&&Qty4sRfK-BJ2{9?+y`#=){J?0J#^bTtrSW8gULDl$`jQTS?o?4Ka)^!$8Fl87rH zzV!Esx901Hgj`)*!V$~uG9itqTPkxCHXowoW_(w{w|(AKm#ex92^`~23=m%7;)0l2 z8zVPJ?J7YnCC)RO2@txOIBX8<#4qEtcHmoDMx&1xg8msqt=ZRvL`5kVR%Yi-?70zL ztp_d#uG`651gZ1dobLNI2{h*iE-k#LhH_p2&sfpkMv{%G7TJn`6p0&lxQkc{ZwH7# z(~iM#h=j)D(>sIKRlM3CK~A5KOUrFKB2S{EHm9ly!P=TSJ?Gmkm~fDpz0H6cQY?c}r&E*E}(;P@^+{0PdaeEBYoG+@2dn|&o!=f(S_ zd)n399PKV3=9-~te`1R24|9&NQZNS2$wcB|V;UIWILiKNvQbyzJ;*!F_>;CgZR$Yl z)4ICdHyyt9E7{xM4exmA1L6KaJc&5{&i>rlD?l0m;2U5kaFLA4tM1Q*rhfwg%Ek#O zOazJuAT?T^zHi&!-=2RVu5NE{4}nLIR33O_ESDZwTXR5^?d8$lIt_&e(EU=B;Q$U7u1Zfq~6#jGT1`iAof+2~eL2quY=y)P0jK>6l6(SyUb8RUA<+9*I=Yi}HDcz<7Voa6nOa9f7eu(JbyFdWYSTvJuI`{-8Xv_yL zT*k;a4fcNVP*cDAl$oCC-H100U^;RF9B+X}BGIauC(-Ao+q8JRNO)<>bG_pjIti`g zG>wpKlneiTVO|uQ$#0{pOwR}!7ea&w&cR@X6T79QWsW-u%~-=$(KTTe6^E|)2w9Nc1K)$FZ6?mMYpbB6ZL#cf^2KU|6BMp-$Z4*h z3?#G49_t4ds2vuuW)Qr)N%y_M{bA_593W>Y!uMTcrbHml(~)>OKDtK$xurB;6fZv~ z6;3O0N2gjCQV8jQ{I&WqhomhCZu0ndIlJyGO~6YBhv!Df>h^rEAMh9f0r@5@48-VT zUZCp!YH7KfpC=(sPqwk?(FhnAk_)I|}JK3VhH;wADl89MjV5GgL z;h~zHP}#9vz;{=f-NT*VeqxSv#!(0F0nh+|U7#4;e*BeV#)yT5AJ3Vr8QOCE1^rYM zLKHYZ<`wc5fV{^14>Xy;Iw*jI4Q8#@)z6dwpn@0?kiK^WLE0ALlcdM0_CGr&j%A4& zE+W?@NHIXRGH~|YFc^h5`F7T;SL>j|z7F5^bsZ!9wV@UI{QWs2ciMG@rcf&NB2!Wz z4*zUv!DVM>M*-8p*ZYy0>URV^T;t&m>`|FGE`ap)&}onNRlJ z02>urgemC)M`l*&@x!L#ls3q&OI=(AQMr9>VV zyDR7w5@KN`iNC4@0w)AV&<7%*;=!`Hao=3c0J;X!EKr-p^*BS&2uWD@?A&wx+goPC><)m=qPz)B?ivjy_yxYPG1!m5MuydwLUku63q5E~g1M|>Cvms|R=U|7kncws`BQD;o$r?QD=(Nu zC&Ymr2pnTUosV>$rpc3~Zq~Fzm}Bc3KVD~$lQbY>I6W`ZAI1#ABIx-Qq|YYa-uV`s zj~PXWaa2LOXS;xUc9SqWa(rmVsD1I*{OIf&KlY&WEHqExo3S}=lSj1Q0WqA$K#V$l zu}i=FMXU}mZqY+p8>FtTu0|aREkIaJz4sB(9*972LpBq{Q(3-$>CJQUXKVV{7tbxV z$TTVxnMa%%R!an0G`N^%3AHEt12pFNk4J0b#oqx11c{35`#V&w5&rr;6eu|Q4L$*P z^JR-v2TMe~-fO-`E0hiiFW}2cId=gTe|(-;rNL)sdFxroFMeo zr>8H6_+&cbM1>GqYr<&k$ZIxjKALb^Ev_L&i;jFV?k{6`Pd^|Vweu4yl!s34ML>R~ z+Ap2rK8CI@)Inw*u}Fga80Yl*tOX;F(y5@-EEV|VVrZsf@qibMbi-6{XHZ@_H#||Tyktp8D=#K%9bbtfeQB^UH^#ZPpL54Q1@$Wzh1aoe& zgigO_r*l_L&#NTSEr#A%@*6c~9MJ7jW9iJaZJ|=BU0>_dht8=?0?WEo2nMzYuy!Gt zes}?HdM(k=!`Q1J)W;aLhUJ zgydk%IAwxv@W^~Ym*6N5E7y*7vklF#s@-Q7s6I)6-dCQ-#{D6=SH$U~vd;=R0t*j!@?Rsq2a^keIw1QM@!*JSNj3Y#oeC6#`KrQa zdjVAdUWKMVSR{yc%o5A%5*98p^e8rK9URrn>u)2>^6T<*tDpb8sJ^;J*Z4d=eu(?|u$S!5l7OA!McNAJbZ^~JOwr13XH8~}wAYYXBcuc|nlBG^HK1 zo}iI(`9Z&nSa_enwi()~h17AjYWAI?4jdS--TLFZ#T4oQ!&_}~_v^`Xz=gI)capwY zoVAo}agH8eUF^(#am@wZ^AuYb6Vb0;>2&Yd4>7taXG3dF_WV3Zr6yJ>9*kMpak-## z`E?+fXtu|7FWl2Yq{Fo*ec*wmR=F&^-LbD<8N6i&=4??(gMh0fDw;sOwUW9O^-7@p zHtENx;+LnyrSLrl@EtLDt8mZx*+3r$;hAt^+r$wF3ta<6j@!2TZFnxzfLEc=am+s= zQB~B+G|T(H!eeh(Xa=-O|E017{Ig&T3MD5(Wd#z47cje_F$4^#c8bH&YE8k3nFb%# zTG*|)^2bP!^#KUH@-`D70r^Md70fuD8E;hYyhF~O0nR{1p5%6D^!&Gz0an=pJe<`_ z#C8Akj0xOjIo0gVv0^wLTTkiol=eE$?lvE@l-g}mi?m*@J4_-( zveiT3N)!4mo~>C+YL(aFnqPE<6g=?0hL2969QAafgh@R)lXpN-yYv9kRk3a_&zls~ zA92Nit^(2ebGarntB?W2Dq-NSoox#E^IOWEP^yLMKfMUNsFv?FjS-uRimNwIp*K0F zBdo-QATtMnmd&|hKIBGPw?$?(x>{4Qa!vb8Q)g8)f`vxhUURCRbqoDFSS)1u3hiJy8$g-fV$cQw;vw<5HOY>e8av_X^}qg1{*g#d@(imyH7v} z!n?>HF3YBvDVg~@Z?X~Z^c0guJR`)*JKy=6VZTK9KQTh{eP>{YKZUNIZG@ zL{73WtLhtJflD6^YU?k(Fc1s5X8{yiv5YvYX>JianLBzGgyh;`ufbLXjm%;6F&~+V5WO2F1m!PU<0MJ->?5T6^)V$lha1wH{ zZK3ee8%SVRl~fr)^up$G_>IUG%2_-D(P+SFW)#O=d;p>By%|6DRJSXz7Zo36qd>#v z{@oPD2HkJYj0t;4zD8+8O#@OEXdVPP<&Dnu5Bg)_py2>!E%Gm4cu0Y>I5$5qx#qWF zOB^l?$N^FXEHU@h>i-PWE432Hp$~>>po50ReX@~*4>E6NrBiNz`@Dv$2GC!T2Y3Ds zYzbi3%(M6-3Y&@9Jb!WWaRwe>F1 zn~Gcve^GohWil4vH@U!#2EOoR&0eaK7_moF%TEoZQ#wxR*m^|Q!*tSnRgdF_E$${| zt{^yE1Z4{b`koYNu`5=>4{0gP0MaUtCDpQ#-q^`bjfR~{9!{4tYJ4uk8bV1><6p55 ze)vsubl+i;3^6sSR9%Aj+jP?j5@8(S;y?}(T=_J7e(-0xz=#5h;i{@C2Tpj2v+Ki&}|c_w;IXh}Ht3r+zfXke(ZgAkhKpC5rD0m$p+M6v7F z%JHRga`mPJA^u}>Z6fl-r^gEerS_>W%={XsftDg7h5y(zY^CY*!W_iK=bglA3F+bs zMf*5BzmZ!mWKxipXP@Tu`tS0@PI?7scar;iu$O|v>mE!fpoeHs@WBr;s5e44T=Y^^ zbC%&zWG9t(>@jkqvieeJf$tcaXO28TpqxSBi@v^;;0@v{sYGLV6N`cR!DR8|dfncpRng9du!e#V`->EC*>33TsDajWb2ykb}YwTxF zln{A*ho$2*+Jre9+6zSU^*6cMXTa7F9F8vnngRe(#}D_&$9CPN6FChFJIU2yYe5*V zfH*^e@j^T$KhHH})IQrJ7rNvSlwLVmM0CZ^=H_q^fO;uAgX)IV~ZQJe7L8j{-cRE1B|9* z3fsCWDk|Wnm;rx@Et2~qvqmu35K}$>3BAFVcM_VNwPT7)iWCiTaue4j&VggLbZBpl z!4Tx2PzPF8%&FOem;xzTAZ##j--(Gak{l$;k5|4)g>*#e99D_gJeC3%yBEQ;k^%sa z2R^@d)hvca0HR{*iPtAw)~}!jgA7u8+f-~;DBJtSq5+Z3U2^!en0?^f1F+^Jabbo< zk85T+u%AQPl=0UEN@{9q6w*Enq2P-E{q7Y$11+%zlIjFk=gIzN4etw)NgJ@E3p#X2*n$WAfD$9a(dM*;C61+xCGkISaOqIWHR=b0RU?6i|%6tijqr1?;V^~FYV!~qW zf#E?g$L14LoL0~wL zW13=(i6&Jf!Q@TN2r^z@DEa^>Bd$D=zU{=N902Xjb#k|DeT`z%nDG(g?fxJv!2R(W)6 z_?T1uW7?mk4G|PXRbW0z!}Fy=mbD6+X+|((j}IE(Bv2E z>Nm`GZ%`TBVe3KrMs%-Vq#L~^D&NkJHukZ0dWzvAM9_cTC=$!S39evBJ-wIEJA;Fz zRqA`Hdx~g+m@_W?*e^m%nvb}z-F<%F%BL}F_}fjuhanC?zdo9cIRTw4ZV zR)2Y@Na?16IDPRRK!BqO2oA~nbzkE@?q^qsmUlW;{{H5@ z+X7w$us$C`7|&MdoUYS){Y8XWs*9dR0ZTF1jloWxUaAkO+mWi*VV`Pm1sOO`uWMN$ zXp~blMw|~=RMMZ6xskPRr8yqF`)HE8?FtV1e}mN8{>-PXFARp^gXn4l@|xA;#7AIp`S@e1_-*5p~mD z31U;H9K70m-5O#bS!ji$TNh^@0fwU%wC^&zZBZzbQ#791rj19 zI4yO2kAK5Kh|20N;{q^oa0FojrkD8Mt_byimHc#k)aTbtkI7mQ!#C`Na5@*yak|b9 zxtB-X_#b=Umy1&GA#%tXJ^L(OIwm3QO9JG`M#}AXQyY3?kGD z%9#-vF4k5r)ULzj`J~#$$>k%0dilm14mXWWq}IP*@ z?6de}EaNZ;F`(Q4=3wu@x9D(}*rZFR2@W}gMePIqvp_e#_OTN| z>!9WUktFZ?C!~i^Iq@m|Z7{o`00n%_5YtExWflaR%53`n&-Ttr6=cpHql6GWgFD?J zVD=gY{XiWK`_}J2-gMHd2S!S-G`H?HXvSw?JFGUHKyRF@$!8v{X(Ri)KKUJbpUt3S zTe=i*xIIf&Tc-xwGu+``AsOzctpZy=IEdN9{E%|Ld-!74Y785_Y$DI&8N`DD)PD?I zfR|o4-g?~V7XJWy9VSY>V^kN)hf)Jbq}J`2HVEg$<{H1+D@#N^CI58s@=jzr=oe^U zgI$xJp56y~w{{c1E+DjRuXEkItwsLQa^+5=L1&_*u8m)p2Hq#~(tmjs@qcAlv7<(uXz$r?_-6h>zF|wA%|MsWvmsPh=v)YMg0?{SUvz_Ss zHFfU2e(E#_1&euUl!3c?t&NB;K0lE28vM&6;ZUFlQJ=i5$f~kDbzYe>Mv6YD49U%V ztm>d%3FYA;;_dX{Bp0-oJ{;2#*LSKSA659k9H1fFmI|*zQxd}ekkFKF!nC!ETlo=g^+&!=?9`_wH{uT^84Z65} zmBt#qfQg7u=Ku5H0Sc&>`u*8jz!(e#NUu_<^~78=)U2s))WYeW=}HhJL*zC|^OeJn zit2)?Hed(VLQi1t!kaz7C?tb(;(y4vdUnaLn8#4ou7A64U2)_SC^}>T*AnW}=m(=I z=D5~h0Vk2m)5Q1wjgjjcbRfcH3NI7#+5@|Wyh8tF<-IY~i7{@JKit6&nq#^NGW76x zm1de?EQmI5`DBC3e-!5cbtJB>wj2N%4s!T(0Igb&K$v(6ls_PYaEr8Dzzgyda_sy1 z6UjAYzswx-Rx#Q)nO`_K13&qp!@>|)|vr<$uu%8b=#9`}x< zQcm4BUitCm&Xt7m2L?%K8hZ3z8OrMrXRNcyyNPb)P_Tbnprl{GrsG&3nc4Gm=={3X z*`~kTEzDk+zNq2g12??zaGbFp%xfl@rWsf6;_SK&<|)McW`@08->veFSM3w0S{-Y@ z7;Gkx=)ZPJ)a2lH)vN<;h(qPc5r(bbEMQ3E~r~V{96fGScdB3gTuBCA8@u;~y zwmLC_NPe61^I#5$zSi)<<-I z%i1xNfPXUiS5@5kyePiYMyo&RNcHRMZ&+61UWw+Of$ue~dGYD#)<8a)pnU`*Ibu$P zJ&s~wd~dzKk~qDLk0`$3tE%-QyDhx=0)9@T-UnP|hRztrZpE?W;N!^Mmi8krS%C^H zZ74ZqY^l52XC^C@Gudz4H>+Q!B5R2#w}Ml)t1;`|OqCk<_(qM2cq`bad(|>;8+%cr zG(|mlm6~8(ywnUb5iZBZ3O7{F36$suR>?%ORh>hEzj~^?M)L!_M^*d$_Z>~hw=}}U zUEiKE^PtM19`$VVm%K)fevR{xFnPoB%ShXSE9DPAKAEklklC+A`##^P)t#-G-)t9@ z)VsLWaSRmc(ddxPb=2n=*&Qxuag`f>>MdlC^VAjO9a2%q>rY1x!U(Q<0WUi64H`7R zpLmxHUL1X6V?RH?i!h7&HWwEc=OihS42iEUN7*PL<*>)i3j5;VgH$nrjq(Q5;aSBo zoq)O?+?E#IWX#chT`H8wtRuZ5XAV7iKL$RkqhwcOU##p3d(|tB?^zrPhFXY){O~3?=dqk*z;`4!4LW$Gs2650w3p>ZCCQtP z-r;fO0lIGe)2lbk`g;@~+EXm8=$Iq?M)@Z5i?CO}{?tf@f0ORf&PglE%NVRZK(SDi z_>MFE%p2PoDx=u?A^4UkgwbY`#xsFisK@djS+W!E#PY;%nR{mc`%ctydY-r;gJ-}K z05*F9Fj!@HVowY@lMo>ECJcw?wix08)N%Zc^}uG0a*uVgl+Nd@v)JJ^Z$eMDp?B#~ z43AW|XA+6a^s9dKZ$2izy8Ar_2iot>F>YpVl9ouPK9-#PNK4ts*?;b zjr|+AivxM)>?$VTZ&X$q+wtfLdAsY$P{vREY;K=Vd?KqIWuW|4l!i=+<75K zW(Kd6s(CI$Np|VEiE`3co#%32*G|`rxc1tT$t745;@F$1F4oK_SeS9eRwV5>f12)v zM9JuV?a3D&v^8c}TcPWdLvJl}jsz9=Q;kQJ8%sG_C#I%5Bn>>R1`0 zi>w$T&UgI%K^nO)&%o&8G-Ske&R-bj48YXQIzq8rheZ|JnYNZJrPMiejpth&W?C!b z{rc^;`KtFfb(AOL1(xNhLI?S=y9`E7$ro#5Qa?Vev<>ICz#e@${FZs_9~@lY!_`q{ zW7NWNnbA!k65bqVGW*QqG!+?YZ{yoA^s>Tl^^2KIzPYU1@{t9*-61Q^r@E;=BP!+x z*`JjZpJ+W!!=rpi=zXKt9xt3I{P|HO<=BsV^uPIM8aD}Aka73HCZZw8mnCU_7(=cT zH%csoy#KTjuM@C`#F!Uyb*o46s0GJth4{So+#)`UUyp7s@)X|a@wZ{kEO7hvV!?i^ z@#o;gJ4avLT>U|9kGY~ZhkWNycb-+8r(!H()UfPNy8@OqFc>_n-`8k#KipCJu9kOQ zn;iz$f*JGNIDAf1Lq#9TKD?2(Epi&Y?Q!Htglck3xNpNVgX#8e3Vy{Op4(+Dx>raN z^1463j%IMPJiKuzaGa^L)NWauR@~$!d{jSwiiPS~=*wdnM&&l@1C6~rW70S<3yiM) z)Oz*>U&JME{y8ega}ZSFb&$5&685UY{-%0MEh67lO;Gpp@u9%p;aJ1p)_0Z#Lm40G z-_5pYsw!yLaRgr<(-GEVkSa;4hm7LGR#&~*m+^mYpPu6WSBa>9PKGnj@BBm^b)e}} zHE<-YC?8~+=zJ7*!IT9i$Iuy{ED2w^q&Gc<)^SGf7SfH2n*HxS#BKfRfa!gzBy-9_*$xle4D+09O_P;WOhfQJ_>XLZ9;OtiR@JvKUxJn=V= z-%b9IEy2C=+GsLMj-87u0#=bV>}4aihUvSN3hM`-1wtHd+Rk*Id9!+VQ=Z2^$TL)H zB2%;m)ddT@5|3&5V@anA3D4^JP}ncH^4IBU>1ejnsFIUjft4ANjsEHj(Ge9zHaEdcNfA|#2CjNUk2~O;&`hg`5pCXcvlCrzAEtV zbm=yYSJF4kj4dY@KZ~dfo2GxMb1~y%-|tO5dO1U={TR+78a|fRFeb*QUl&|6uCU@j zuja*-fUl@3+uu0UBF>i|bfspxq3zBr2W`&`?DVD;6=nR*Z9K9!B~CYs<}hqNeNAy` zJ7lxuVmZ8g2`KVyFp`g>?!ANW&F>1;B=~H;s}XHC)Tcc1do@yO^Y$V$t<7$&*qetA zjTM&forQ^^%6e8Y$}f7oJh_! z6_pHi8h%mR>)TV=Xm>WMn#U=G*Nj?X%w{b)3Klz2h16rQN9mi4(lsr}^tHi_Qd`U< ztDE9}csK98xNW3NFcBrF>f=JT=o4(UPOcLf%K|vw?OOLc!SwW7{tv(;~bt5|%oxQp0HO zS@>un*@OS)3Y8#-Nl)5&LKX2zMtXjq+i=Rm4{BS9Y5atKJ+98rbX9p$j8~|9nI0d9 z{lcfst@~4VXSP+2UC4qDG~0`wifg)I+ue>jMsGbUzPxqx#aqT|YN{>y96mli^_Z(% zZK5Az5C$u>-7kRCPcAiA!14PJ+rt{2a=j?VeR?a@)IDNl<>?+y^!a)AE%iI8qRDLq znMy5sA=Sq`4-e!mD^En4L~|Oi!9s;)cd2soy{3f79RD`{Gv9y1Y*sM-)vNP!qFY>z zP-M+Xl2HFj_+1U0O1xQmF4~9&x=0<;(8CfK8e%0JIec7O@abyc2lm353`2O^{Um)N#4uw-Mr=GhQC3jlgw9uko*pmUhDT9T3d3W~t@1 zU?J+VD4MJqD7})rm`!@Phspe*rl!{Aq@)TbcN`BjP%uYq%d9thEZh{e=<1l>$=@Wb z-G7AT_|*6+NrWK9$4Lo?b0|6#$68t6Va=!eL9Zag;--aq~inVJfNVzbl+{YuJc^<+LjVW zpGogpLv!c;QvAo3jJF1`np`psEZL6SaVaVad8nQwLnA1k!BlA zt@xmBY!oE@LB}`eWm8X0?qmIi_oP+L;e1~!XE!tJl0C~}hhUL#=eJB{WljV+cNsRS z;@T>>Ce=8@PPNe09ZsI93I?WDgF?t@KLxmjvnXU?aCr7D7683gwq|!eATV~F) zwt8I3n9#$XoFVBX(JL9R-o3r7^*6q-*hK#3Gq-8Bo625wyB}!a6t!~Lw8Z+>eNWoC zh(hXlyW(J6Vtv~w^*NUdp=OjL&L4D|zTpMe2X0)Y$CT zE2Aj6`Mc(Z%iV^`ZaQ8mMpbHX@fn)Nyu=>V9dYShaKG-rYdBzKzus(^;TT&7XeyL5 zd{nPb{@gCVsc);RtNZgksmNfl0bw%F@zt0Fbvdfjv9Hpf12-{wtQy4zFv}%?D9E4w zJyq+8-b5}MHFv*)Rf3r$*kjdm`uLgg*`^T>S^ndGm!-s|8-ssECYfA zSIKU6gm@lZOY2M{fyER%)9XxpL%h1j#f0~J_?Jh4GfKDa2{it(+gTtNJ9tjsfq8Qa z?}NJ^(c%I9z!B$#k`eVhhuqur{2wT;W5kSC(U)KTis3$!)n9}Id%1Mh)yQ^yg(|Wnm40t4M4w zX`_zLGxYqT&|MbtqQGaa9lEQpq_7R6ZC~H|_t)t7A11AHt6%PCADbNh4XE{1P8ZoJ zy)ByKJXvGod}rdfQBkDY@9bl~D*8xA z#!$M9=E80B{rHoA-acy4puN7#Sj^=B(0ur{K{I^Cx)S*LXJ- z!(7t(tStx*f%X26kC6B6T(rI7XMc1XyrbU*Yrn5-mO5e1ph!P{NIkAsF|ciYIXQ=H z0B`}D)bzrDOO=FOo05r%iA}S#7GhMXo*?=}U%DMAZ9ckQ(KN2uM0CIs%vJPw?Qf|O zdtn}6Hds|vZY|)h|Cu~!(CAh^yWsgOC`^<&aa`Y-j3?|dk&T0Cr@9Au9;N@+fekm0 z*q~V%DOE+CCXQfw8Z>(M3Q|j*!#;qm+F&Wei=SVp(xuMemMW1Vij8VBq<=@MKVbrH zNdPPE@|1D<@$j-*dfqP)&*xmh-UTAw(c4|KP~@HsCg=8jn*MlVZq7d_2p{6a(=bSl zbEwdA^d>%j&4q*KJix+z?R8i&m|IvlF7xv0u9fI5yB#^1`#YnHyYpHmH=K@F zFiGq}7&n-TFyGF%6%jNdk@|a9`@ku2wv-qx_RD{UBG{#8R`gp=47i zUhAI^V6^Ro;M)A3FV|q8C#|q>!kKe89)7%#T$G zE%xUaL%7WVK5=lIKmDe{3K80)-!-EW;#14-K!N!C0jaYR&AhyeA$h=@~H!eY`-G~l3ovv2YGb@tc4ymjqXxKEzwm~LW+v1imA-g z0>{)yly^gdehiUWhV=wv!gLs_g1GDYcYcno|7{g=CjH$qR^<0o{z52u;;iky_#b2L zm-Bo9#lrro6Q0-jBV;aIspE+4@wfswaymHlVUN*Yc&~l$hsBHhSqJ3ajn14R> z;>j5|4VN1ysw?kVom3jJ0_--QqOtbGldEzXp#VywfP1YHQmQ^P^uF;UvxZC6Je!JATrRf&$XV z&M1@5(#{BbLDEz7-LUHFKdgA}eK)I!PVhkjTn+1bdNzKXB-&OkHu`PL z7PvNe%n+(K)*7PepAT4(IM3eR#9?bN{;7aU;1cR_)Z`X5*?|I*tVQo+UX92uWB=~V zW4mW#;&zYdr~U2DHo=$;lfirj7|aP1Ymik2Lx0wHcQawsNB~i)e`Vv${_y^CMGfADQWp4h!C7Jy!u4=v$RyEGW5 z6-Jjp7ls9AD-2vfjqC#s%&RH41y-ZmEGGT6I}1JuxvEe}N2H~~S8FUu3RpD}166Ij z;>V-0Sdu8s!SsSUc<(JwFrDcb)w|mBf19KY4Ct8|vu9_|)DRObEY}eS+Yg+unp9$-U=y4j}#Ttv6Tqk+86EsqHkLHx9vMq@w5qU^QUU)A;Ht zGCCM8$&Z3h@{QU9Yih8}O%yO|w$7Kpbz&Q8pO;q2*Mw56B{EnT-Sa|y`OD5&6823GFXsL5_b0e zj%z6C=Tl`Gc z!PFujfeq6866ama8^!;|N7_G9jyX>(0t{$I9XX()>x)G0uqe@$Nh1T z(OMYyvYxXyE{L|6K}8 z{W!cLOX~UACQdZG*5}9EoA>&-1q#>iph$0e!iv$!*Y6Ca4+hFay|DetNF0b=xyGGI zH*%1P)CV>Ar1!*IA{f@!*2Z_yp0fp=qOOLXzPgpgAC+O+FX+iqTdR=H{WUsDWo2cR zkT9kx!pwk&k6+i+r0CtUsd%)dHCd+X@%d4d5rwdpD=Si8plOVFH|YUbIRLn z+sb_4v^v^;li0dr>u_lC!of7@jy@_uY>SY)q63pmr}`#qnnOtb@U2@qrsi_+-T%8v zrd*07iDXVD6KZYddl*dnzT=AjSfwB#@d2R#?Y2pf?6%P&n|zr#+-DaQLd**VCSjJh zVGA)C4ex#P#`<6n64*4J?cvk`({S`8G5@J7Zz@>AhHm`JjgMxVOE6HD6vmfiu#R2a z;OP{LkB|8*8ZU}pK_7(2LXBm#))ZOZZDbc1YfO=sQs;0cM`;;(G*qN-ATk`ilM*|K zwYAgNs@dJKdmX*OCikO2K$C__0(R!7$KM|N`1vtee1Zbb=o3Wzk;y_@6^`L_Qlb6D z4t92Rb#>lB*I{Jf!op)f`c@DQ)wb$QIm_L1)tN`|$xBogCljBa!vHyw?5 z;(8txlGbrpTNh_;`!oJo8Asy4Z$l071Xb!2OgsY1dPY8|c2{1N5tuysp#@n-m!myS z6sW_qP#dDoL6VO$YC|j)o2LWY2_IXKJx=RqP}{_r`M*^(2?sjHe}b+a%%tP0nDyzK92b)qMsS<2Icd zCi)9j2?)x_5VvxN#l~WbVdS3jH2u%IVGKPhmf6YKem3As9S5`2iSW;lCjOANXMM0esIj&e!8K9ct8FRof476Z94OC%2kYzD$_mg({X&k z2=a;xxhCdzaeVK6VTV;g>1)Vg28y%jW;69siSs6AD10*R5xkI%IN7m5L z(7nUMbK^@(!7z^w=Ktx=b*22t(V^kv<8yO&pGVh-L9LhpM_9MTaG}Yg&Lk0lcU^-a z;%TZm+9Yh6v5@JEx7`&Nk4Q&U%=F`gIeP59AHRD&{$WnwVp#UZgWc5NFvl~`vre~z zs#3ao7j3B?=^3i6`y!J@phE2H+epyR%R9_vC&D(E#7mJ&60P2hUSe(D%m2sMTR>H{ zb^XJLC>JROr6fd3Lb}sHIut}e2`K^T?l1xAZjcr!0Rd?Q1ZhFKyStljZs0y|jQ9UB z#vNBh4`=VQ_F8lPYW_q;CO1NRV86Xce6@fe2j)5;&QaLgbpCw4??vz>S0Yd#68)1DgR*@|uN$W@&X=~dtHg$*LnWwPl~Vi3c{9>3 zgIlHYe`;=##*hUGehe?3u=8(^m#1a#_}m{JPu(<+2dHBb9(RAnlPTH6fh~W$zwaj6u*2_Og1;DL8&?4gDrtQ!9U3+z zOO^`du4GG`&`o!+QP$eKfFB-dZ~$}2QB_+&${ zWH2qZFA3LeUfu}6RS^zINb>G&JapU@A?8lzMA?->q!9O{R?IzK7-7Y_ z^%^5|2Fj7W?Ey37KYU?!$t^!q0m$i@_y-e%iU|#nLTb(QBBxK3Gzj;(tWhanD46XG z6F15Z9O9}hj;ilIcvu~DMA!`wkB>2XWR(DJgHr7~W{wK>26kL{CIV^1Y2lywugoo6 zKO7yR_8&XJ#KzDOO_CHW+d1VP1%(`*g|FVZ8cJ%lB~#5TpKn`7TgW`@3mn$P@U2_Y zeli&SmBsnrzTHxOf-AQuSmVQN#RnZVR!vogx!h&uh5PW(%aSF+g*6COlDpmz5D?%t z8$PUaH8wGc6n5c<%0T|hA5l>SKz4hN7sy}P#Mjq2`R9KB{#m0a>O0AB?_?KhH1?Oa zcyC(^gNY}tivsd*@^UK)5yGLactC|!m-vkxIqKsCNxptr1IcM);*oC!r*|@$Gt9y; zhDh_{@DGc3koyu$uSg4nA01Z8cVMQi`Q|~^i=w*f>f3elVD!Zk#9?EhvyIglmlNYqV*0J1nfkJ4b0c+yB5U$A4e%NpCUjPMFPGR5j>=<)d_swr zPI1RC5fBJkc^Cv2HgIF**$osGUSo&MLN=^-M>lacY}(^wmRLRDbGK*GREt58Vi?HX~KiM1P!s9hWV`A%hr@aolj#g1=@ zgl#4^IqRDMmmP&SOJ^7V3-CdQ;SDKIR$1+tb(hSTbpaF?0&7Yqa-QJ23DrLcVLRr; zpvCy8w!ZsUsVWcSyx|{V?~?K9&@R}9<9jN-*m_#k=-Aouq?>rBZdHsTtbhS$AczMT zIO*&4hm2@NBN`McI-Yd-Lfqc&D>(rMPGxnh{H#leooGt zo$g}g3om24%NV@4Z>mtle-Pj+o8nD7<`++}+|%gWJ{$?(T^o2rI$}YBk|qPeY@O}^ z=tc~=o+=w9IzB0))`JP#+}2j^+s}I6n;xa5PCk=Z^73tj{e4i7&(BA_ocOedsDv-R z_L)|F{Lin9>sqso8oNyW#GzFdx3_4`0s5Y_6?^%*KHjE)@rgfD1*lQEvw0~>e3JG@hhaj%IU55j9h%e6C~Ah$F#$KI1CUJXfmO3 z{B#m3pxZ=ta>DZd!$&rNLQqXbYT=P|JnS8&mR^qVUdL`ieZ2b4u3p z5s#?0L^T?k#?R1eH>^9(0ES6ha1_UJz>M;Ew#FF>mGZu4SFE?J6Z#2n>>bsMsPb;| z)E!{CCiqsakWFJBhMGukqr8M-U4Q5`f-H8V*h$O>oC4&vSik7sB*8}deQ;u-Z8 z6O#`#uHmLs(_`a-O`AE~QEC1#F(U!xqT9h`Oh!!0$+pX)cN0Jo8O3DAUzT-u!|t2g zkyb~t?8CNr0ryK7?D19vo+Wb@fcobN3crmP)S1;Expp{7{6VBu-a7%iSzE+%()%k4 zj2jqe>6f!O3!qskw?^1S6uO$=M8VF z3Tu(cqrOA=9oG};e=~&3LN^zw!KKBrbobudy!UwY5-0~{o#-d|>Y+v1wGq8hIJ-Uo z9#~l~NXjkpKMeH8L|Nq>#i;bt_!TvG69W^wzPkFYREx;C_cdAbhIDF21Zuyw7q3ER zPF)v19nPYOq%UsHw!ee<-&U)m_e*S-KKc4$Lz9U1*>P(gKAEc!ItT$I)t~Rb+no%S zM`nR@b91w7^1W&%0+w;RdI8B$7#xpN<{uAK2gCi&vS-@%W;Zkb?QdfRv)_lEmw zfH@P>U8IF+BFv#yuj|}e*`3|ScU`Ku;Jy=meR{D#F{a#>;r{-%n=`t*m7C@yU^x;2 z!oi=kh<0W6yp8nDUdI3Q3(CU$=Fs#?(c{uR6$xIIs-y#XmAwUq#lHjPN^Zi!!WOU1 zh%Vo(UmBlI8Q^_o@ma;&*?72YE=!x0(6B@NsPead3pZ-VpqDa*ev!KN0`5T-DuXq1 zOZ$cgpQA8kl8pK|zsMs6Mlwe2Y=w;`2gtp>D&q6SU*x$si8Qu7Ri8 zM>{W6;86iqylP)HT2;{UlK;g-yw{(U7@B(~UIe76tgAOZJKd)6;HmN<}`t+B< zj1WW#wfgPMUtONG*S1&mFJ;(8cDay)AOf`tG&cOQM?rZuQnaN~nejU(KC&Wah^Xj$ z^AP?1$glhW0h9WI&rb_>f`)|8cYQA#RB>Hh-M6^Q)6-&aP%mkhg^9SiKFe0y>o-Aw z8JOWJJpvP@9Srqwpiz42q|*_jF60z@+$FX#JFGKI9~sSd6Mb~_a6BqLvYh>@`NTEA z^V5v8f@nQEIiJZqZ%ZGV`DXJiq3tbmZ+``E(TLbbrn!dkIImLIonnjO_-cwN`9H__ zO??*$BmWvvqL|ckrK$X?ruCbBgs>yPdqR1b{IpBktV>y~RkI$9r9VHXpjb!k(_Ctb zQr2!7XjHGocLz;E?Ox3B>M)fUSKI>?2_n7Mp`U+^etf0r%ER~PMDvlhc>Sk{j7~uw z#RXSyiAJcpfFf3BBF_~pdHw+cypi*e;cioK9shioW^lz;#9t>$?~g}ybh0AUS-uXj z2h|U1RQUGn2>exk=BH5t?~r)k|2Z7HD3Bzr=t0N=nzlr-fyT_(VlU|Qf6s=!>8`ms z0lmSqXVaROPR|Wd8OCl5Qm+KHV#^p2ihR?f5153jtE=`?+&e2H^=)mq2y%oYkJq<_ z$+K73!HT*f2m&*fI#cr9j!A5H8FJzuKV}%9myhM1z={rwI|0%X^3l__`Jk|8cBONkCY zM2HXE!;5RcuUNdeTyDGP*Bm!@;fJ%J4YfH^R%B0E1NvrPDaQ8IO^Lp}Zk-_{_?;W6 zEI|Vs95hIw3ahnY&F>~i{x}Enl3-<`0u}x|$cGS*wEEj+d}z*2RS5j~S$(eDW>gva z1mNVc-{yRO^JF)eLvx$Q6dw^x0@>M~MTaD0&wd?FmOfe6MScK$S?Lm8KHwppp1B~M zNO9e~aZ(~!*d~1_m!WW*C8yU=NB`l*eQbo5fKxQNKl}!eh&vsHk~E{Xx2!7EYoV#Q z5CAQtro4gV)HFp}#DdC9v)txEN_2V+s3Cxu*8L5)5l9n&*nj$+d zs>kluBi9db4=-x!4R*(eGtFFZiOgFeQDfx34c3QopGEB=G+JORoWIR4-uab7I9x ztQIr!L%l?1JGp7JD%ky2c5Ja+oVJGK)hxppA@jgf>A=8ZPQzpv<&%0R4f^rM1|zRH zgH`Tla>G?-_}v#)TViZqozOUMmzgH#7T(@%;4sxJ_s&R@PW0s}TG2+-piuc^sUO|# z+eludNfo>TXeHn}6G{7e8hy)S<>H$e+(F(jRb$k+ZB}Go@$+J-BvJZli7at=X%GkC zp%jFa0c~?PceitQ)@2Y(_$r=>0ZFQhyk~7mb8Jfb#emL<<17?MWs;Alm3wUHN+AwqlF?!iKJX}s_}I+x ztS1mg&p6wzSXUG!rz=Vg+J*qA;%WCI0KL-+t^4%ZL%!JQ$TiWQkYXTgaT>^N6a$V_ zV)%Q%Yp<27f>iOx$qTY^2Zw>$Z)523v$bJyRssr>6R2L?Va2P5c0!XqO1{N*8yAEa zv7oAEOl}*meZTZD^c;$7crcs)ILzoX6XW_~O@{PF{%7SP1tZcv$&{JcOrrM@Y3ai{#Q! z+8@7gnVM(B<26+;mi6~Xx7up9Vb^c_T^n1|u%XeI)lYT0iPFE*B3gW&>(70uQp>dR zmmnx91Zb={9D2+zGcT<@3njY?_>A`C3`%C?G5U_Fu*8>dnseP#1DpH0cSJUyOTc-W z@|93$d9J~^Kb-{j3NPWa`JNJ%$#B`${^WwG{yUztEQ*x_{Ai$486T9lM)e@3B`(V< z?O8$Ofz0F;K31>9#WEM7lNTz5KO|KD<5KNSV=I+nL#LvMJ=bNCtj4X3P z<2%WEe|B(aXET#lh_+pMNYrkChtRa30jr1|iJUtSSDdXm#9$Yji~2>s`m+>Z5}k(M zp%@)AP0+xuSUK;O7|6>l^LwlFzo^(tAWP!j^xmiuJbTr2Up!vwCzph<5;Y5+fWRsg zOEq@Sbm1zfG<}sdH697Nf4M^XQHxqPg4X6}{BFgb!PTDDVFX~3>F0V|_REUK5UY)m zg!);E=k5=XR9`gmqlG8?lQOf+ibL$T?=l)`nX|PKXvb5uJe!Uy3dXGyJn2uPOktG@chRgVM*I_PC&m8vwNn8ebGVg`!iX+W@H|N3)%Cp1=iZGOkb=x zu%rde7J|~`=1NN==ZKvviPG~h`9BLUL6g_-V|t~ELd0Zhn&t#;;h@-wXPM*kv;jaL zHNaC{af^wk@RR=xrA_*L3BbMZMO_ipQA$c9*WJFB?|DR~2H`4fa&G%A%Kdp2n>?I&1nNRX}nR+yU#=#)$^_jR6} zU7_D+&r}cz{hNn)zn~Vx`pOXoxWZ_}&o=-~LHTt2%%#6Kh323V<5sx;0qwnzR2#n4LS`qR~iLG=% z0P*H+QM;6hU)@}#{~+94Z|8h)K& zZ>o3RAlzy85S zpL`oEh1(i}#oS8kO_w1~u-MTjMnj@jwl$572jdTj9xnL$%RMH_H@pRbXgsQdW=$O( z?EDsUCgEuS4I=o&s((^%Z;D=RiEz53LjXXMg)9f&Z@9!aKn#pG{D>I-DNbuTNBUU- z-aOL9;c87khPuA%FT_ewX+2EsO=-5K<~;a~3G5qYe>#fhjX>$}{qA7! z5F_qOIF+8&kZ_o++!0)#k@#$I_Hqh@H0Ba-uV7;9*w=WGuJOGAQ%BMXQ58Z1s+<&m zvOg1JZbf$5X7$#O^6Ow=;G{tRMO5k#(2#Klbf)8~cNp5Mo;H1fg~|$LDB=u(d2l-1 zIJaJyDhJmF1ssQ0jqN-;%8V&{12L33P?n5nmISRFC6^ZK`^B*&Sc1s|dJ}r(6_<}W zOYgGEeZ8p8eIv!OO*`$y)*^_I9mqLk1L`OHs;#9JIGGEF2oXG^+gS(E90x454hM)L zcEFP4;k+;1YU@J~xpBCh7=Skd948r~ohZQ zX%u~hc9sY(7zG9p4TSGU)NAH-Fn{QE`-Vj^akb6#53NTBB0n%#wU{M_a0 z!goWW!c<&PRm!YdSl;lJ8eJ8z3;q-EO?T_V5|~*cHcUFhSGg*_iuUxGKqyCinnKwX zahF1~V1uig(qcK@r3!f^&pO!G{tUwkp#@ z1IB1xL=Lk5an)vo8)wj)QP{17B=lU9yl}gk>W3R63Ot>uI5a=e1|5FSw$WJ`9~h#L zY-h?wv$ZrQNx8tj zqNg|TnxtV!6{Xo-0F=EnTV9>3ZbxsF-!0LeJT8)2NdgPHh;$Kko*z9g4|MA=N zBR-Uc!nSk9b6Zy8!lsYAJGCBJHAH@RzErL%w1n$QzRC!Aro$Z944?^n74^=oi{8&) z(|9}4R*($De3EUPBRN07-pmE+IT&%29{aStja7NB%0Ak&9FnedyS*;&+c(ebYKy%e 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%0DG{*`E!a9B>{?qImOn12xDcn|c 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 NrR%B+1y}Dq`Y+qXU#b8A diff --git a/nbs/figs/quick_start_distributed__sample_prediction.png b/nbs/figs/quick_start_distributed__sample_prediction.png deleted file mode 100644 index e752ef93937686dd890383f37e5006a03763b6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145409 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�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ⅇV_Uu9GP$MrWPJI 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
r{0gqlCv7EPh=-X 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 UPa-DDfO3\n", "
\n", - "\n", + "\n", "
\n", "

Machine Learning πŸ€– Forecast

\n", "

Scalable machine learning for time series forecasting

\n", @@ -79,7 +79,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For more detailed instructions you can refer to the [installation page](docs/getting-started/install.html)." + "For more detailed instructions you can refer to the [installation page](https://nixtla.github.io/mlforecast/docs/getting-started/install.html)." ] }, { @@ -105,9 +105,9 @@ "mlf.predict(12)\n", "```\n", "\n", - "**Get Started with this [quick guide](docs/getting-started/quick_start_local.html).**\n", + "**Get Started with this [quick guide](https://nixtla.github.io/mlforecast/docs/getting-started/quick_start_local.html).**\n", "\n", - "**Follow this [end-to-end walkthrough](docs/getting-started/end_to_end_walkthrough.html) for best practices.**\n", + "**Follow this [end-to-end walkthrough](https://nixtla.github.io/mlforecast/docs/getting-started/end_to_end_walkthrough.html) for best practices.**\n", "\n", "### Sample notebooks\n", "* [m5](https://www.kaggle.com/code/lemuz90/m5-mlforecast-eval)\n", @@ -141,17 +141,17 @@ "source": [ "## Examples and Guides\n", "\n", - "πŸ“š [End to End Walkthrough](docs/getting-started/end_to_end_walkthrough.html): model training, evaluation and selection for multiple time series.\n", + "πŸ“š [End to End Walkthrough](https://nixtla.github.io/mlforecast/docs/getting-started/end_to_end_walkthrough.html): model training, evaluation and selection for multiple time series.\n", "\n", - "πŸ”Ž [Probabilistic Forecasting](docs/how-to-guides/prediction_intervals.html): use Conformal Prediction to produce prediciton intervals. \n", + "πŸ”Ž [Probabilistic Forecasting](https://nixtla.github.io/mlforecast/docs/how-to-guides/prediction_intervals.html): use Conformal Prediction to produce prediciton intervals. \n", "\n", - "πŸ‘©β€πŸ”¬ [Cross Validation](docs/how-to-guides/cross_validation.html): robust model’s performance evaluation.\n", + "πŸ‘©β€πŸ”¬ [Cross Validation](https://nixtla.github.io/mlforecast/docs/how-to-guides/cross_validation.html): robust model’s performance evaluation.\n", "\n", - "πŸ”Œ [Predict Demand Peaks](docs/tutorials/electricity_peak_forecasting.html): electricity load forecasting for detecting daily peaks and reducing electric bills.\n", + "πŸ”Œ [Predict Demand Peaks](https://nixtla.github.io/mlforecast/docs/tutorials/electricity_peak_forecasting.html): electricity load forecasting for detecting daily peaks and reducing electric bills.\n", "\n", - "πŸ“ˆ [Transfer Learning](docs/how-to-guides/transfer_learning.html): pretrain a model using a set of time series and then predict another one using that pretrained model. \n", + "πŸ“ˆ [Transfer Learning](https://nixtla.github.io/mlforecast/docs/how-to-guides/transfer_learning.html): pretrain a model using a set of time series and then predict another one using that pretrained model. \n", "\n", - "🌑️ [Distributed Training](docs/getting-started/quick_start_distributed.html): use a Dask, Ray or Spark cluster to train models at scale.\n" + "🌑️ [Distributed Training](https://nixtla.github.io/mlforecast/docs/getting-started/quick_start_distributed.html): use a Dask, Ray or Spark cluster to train models at scale.\n" ] }, {