diff --git a/docs/notebooks/mk_model_comparision_pycaret.ipynb b/docs/notebooks/mk_model_comparision_pycaret.ipynb new file mode 100644 index 00000000..da0e11c3 --- /dev/null +++ b/docs/notebooks/mk_model_comparision_pycaret.ipynb @@ -0,0 +1,1081 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "23ba6ec2-2974-4950-9f69-0b06a4ec5554", + "metadata": {}, + "outputs": [], + "source": [ + "from springtime.main import Workflow" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "72ed8ef0-0df9-4fca-9be7-200d0d9f685e", + "metadata": {}, + "outputs": [], + "source": [ + "recipe = \"/home/jovyan/springtime/src/springtime/recipes/model_comparison_usecase.yaml\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "778938b4-845c-48ce-83b9-6e368413ec93", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading dataset: npn_obs\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2015_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2016_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2017_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2018_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2019_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2020_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Dataset npn_obs loaded with 241 rows\n", + "Dataset npn_obs resampled to 241 rows\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading dataset: daymet\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Dataset daymet loaded with 326310 rows\n", + "Dataset daymet resampled to 894 rows\n", + "Datesets joined to shape: (894, 25)\n", + "Data saved to: /tmp/output/data.csv\n" + ] + } + ], + "source": [ + "Workflow.from_recipe(recipe).execute()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d9ea46d3-0240-411f-b359-a84193dfd175", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "64016317-853c-4632-9faf-54bcb31209f7", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yeargeometrybreaking leaf buds_doytmin_1tmin_2tmin_3tmin_4tmin_5tmin_6tmin_7...tmax_3tmax_4tmax_5tmax_6tmax_7tmax_8tmax_9tmax_10tmax_11tmax_12
02015POINT (-122.357971 47.754948)50.03.815.0005.594.64010.1911.62514.50...14.2614.62018.9124.78525.7425.5219.16517.609.4507.37
12015POINT (-122.377419 47.776241)50.03.684.9555.564.58510.1111.54014.41...14.2514.63518.9624.76525.7325.5819.16517.609.4757.41
22015POINT (-122.185921 47.255966)56.03.274.9155.664.9209.8311.76014.66...14.0414.07018.1925.54526.8126.2018.96516.639.1206.62
32015POINT (-121.861725 47.952686)50.01.933.4404.212.9209.2410.01512.76...13.1313.76517.7924.68025.7225.5218.02515.807.8355.09
42015POINT (-122.686279 45.513168)99.03.705.2906.234.8259.9112.53014.75...17.1315.76521.4528.00529.3628.6622.72019.0810.7158.00
\n", + "

5 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " year geometry breaking leaf buds_doy tmin_1 \n", + "0 2015 POINT (-122.357971 47.754948) 50.0 3.81 \\\n", + "1 2015 POINT (-122.377419 47.776241) 50.0 3.68 \n", + "2 2015 POINT (-122.185921 47.255966) 56.0 3.27 \n", + "3 2015 POINT (-121.861725 47.952686) 50.0 1.93 \n", + "4 2015 POINT (-122.686279 45.513168) 99.0 3.70 \n", + "\n", + " tmin_2 tmin_3 tmin_4 tmin_5 tmin_6 tmin_7 ... tmax_3 tmax_4 \n", + "0 5.000 5.59 4.640 10.19 11.625 14.50 ... 14.26 14.620 \\\n", + "1 4.955 5.56 4.585 10.11 11.540 14.41 ... 14.25 14.635 \n", + "2 4.915 5.66 4.920 9.83 11.760 14.66 ... 14.04 14.070 \n", + "3 3.440 4.21 2.920 9.24 10.015 12.76 ... 13.13 13.765 \n", + "4 5.290 6.23 4.825 9.91 12.530 14.75 ... 17.13 15.765 \n", + "\n", + " tmax_5 tmax_6 tmax_7 tmax_8 tmax_9 tmax_10 tmax_11 tmax_12 \n", + "0 18.91 24.785 25.74 25.52 19.165 17.60 9.450 7.37 \n", + "1 18.96 24.765 25.73 25.58 19.165 17.60 9.475 7.41 \n", + "2 18.19 25.545 26.81 26.20 18.965 16.63 9.120 6.62 \n", + "3 17.79 24.680 25.72 25.52 18.025 15.80 7.835 5.09 \n", + "4 21.45 28.005 29.36 28.66 22.720 19.08 10.715 8.00 \n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(\"/tmp/output/data.csv\")\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "33f238d0-b186-440b-a898-91bd20260e90", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(894, 27)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f2db90c6-99fd-4753-95da-e3379f063cde", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(241, 27)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dropna(inplace = True)\n", + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "87377a7c-18ad-4e90-bf8b-ddd44d535b09", + "metadata": {}, + "outputs": [], + "source": [ + "df.drop(columns = [\"year\",\"geometry\"], inplace = True)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "01abf19a-63e0-4c6e-adc0-a1b426d82288", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(241, 25)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "1c671813-fa6e-47ab-90d6-136617fe4f98", + "metadata": {}, + "outputs": [], + "source": [ + "# import RegressionExperiment and init the class\n", + "from pycaret.regression import RegressionExperiment\n", + "exp = RegressionExperiment()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c4070825-4166-433e-bb57-47f286e8bf91", + "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", + "
 DescriptionValue
0Session id123
1Targetbreaking leaf buds_doy
2Target typeRegression
3Original data shape(241, 25)
4Transformed data shape(241, 25)
5Transformed train set shape(168, 25)
6Transformed test set shape(73, 25)
7Numeric features24
8PreprocessTrue
9Imputation typesimple
10Numeric imputationmean
11Categorical imputationmode
12Fold GeneratorKFold
13Fold Number10
14CPU Jobs-1
15Use GPUFalse
16Log ExperimentFalse
17Experiment Namereg-default-name
18USI5e4e
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# init setup on exp\n", + "exp.setup(df, target = 'breaking leaf buds_doy', session_id = 123)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "fbac3840-009c-4c1c-ab0f-6eced341d83b", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.svm import SVR\n", + "svr_rbf = SVR(kernel=\"rbf\", C=100, gamma=0.1, epsilon=0.1)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a23a5f25-09f0-45c4-973c-5fc82826d4a1", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from scipy.optimize import curve_fit\n", + "from sklearn.base import BaseEstimator, RegressorMixin\n", + "from sklearn.metrics import mean_absolute_error\n", + "from sklearn.utils.validation import check_X_y, check_array, check_is_fitted\n", + "\n", + "# inherit the subclasses\n", + "class ExponentialRegressor(BaseEstimator, RegressorMixin):\n", + "\n", + " # make the init method\n", + " def __init__(self,maxfev = 3000): \n", + " self.maxfev = maxfev\n", + " return (None)\n", + " \n", + " # make the custom function\n", + " def exp_curve(self,X,*args):\n", + " y_ = np.array(X).dot(np.array(args[1:]))\n", + " y_ = np.exp(y_)\n", + " y = y_*args[0]\n", + " return (y)\n", + " \n", + " # make fit method.\n", + " def fit(self,X,y):\n", + " # check the X & y\n", + " X, y = check_X_y(X, y)\n", + " p0 = np.zeros(X.shape[1]+1)\n", + " self.coefficients_, *_ = curve_fit(self.exp_curve,X,y,p0 = p0)\n", + " # Note that self.coefficients_ has a subsequent \"-\",\n", + " # enough to fullfil the requirement.\n", + " return (None)\n", + " \n", + " # make the predict method.\n", + " def predict(self, X):\n", + " self.predictions = self.exp_curve(X,*self.coefficients_)\n", + " return (self.predictions) " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "23e89931-7e3b-43a2-aec5-d0c5c9d709dd", + "metadata": {}, + "outputs": [], + "source": [ + "er = ExponentialRegressor()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "8fb22277-eb78-4472-98ea-19a85e13da30", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 MAEMSERMSER2RMSLEMAPE
Fold      
033.42322443.424449.43100.51430.63640.5511
145.42285940.901777.07720.44990.71650.4608
223.50231240.178635.21620.86060.33060.2950
334.41292149.945346.36750.46250.61900.7070
427.72591323.071936.37410.75760.51510.4690
523.52321046.449032.34890.83270.48100.5022
621.7696642.494025.34750.83180.30760.2769
747.47734386.561466.23110.49140.73560.8810
829.26981650.630140.62790.77690.47120.4820
929.02061338.458536.58490.88560.44960.4591
Mean31.55482216.211544.56060.68630.52630.5084
Std8.41971591.394215.18430.17310.14070.1692
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
ExplainableBoostingRegressor()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "ExplainableBoostingRegressor()" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# RegressionTree, LinearRegression, LogisticRegression not implemented inline with the pycaret\n", + "from interpret.glassbox import ExplainableBoostingRegressor\n", + "model = ExplainableBoostingRegressor()\n", + "exp.create_model(model)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "42c786bb-c2c7-404b-97c2-1352532945a8", + "metadata": {}, + "outputs": [], + "source": [ + "from interpret.glassbox import ExplainableBoostingRegressor\n", + "ebm = ExplainableBoostingRegressor()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "edc800e5-5884-4290-9034-38d25aeb75ea", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
 ModelMAEMSERMSER2RMSLEMAPETT (Sec)
1AdaBoost Regressor26.69211470.782436.10620.79100.49420.49730.2710
0Random Forest Regressor24.59371467.850435.90530.78570.47240.42360.2740
5Support Vector Regression26.96781684.473239.41200.74670.50890.45890.0240
2Decision Tree Regressor26.07201761.649339.86400.72860.52420.41990.2000
4Gradient Boosting Regressor27.47391786.873740.34150.72250.51390.46680.0320
7ExplainableBoostingRegressor31.55482216.211544.56060.68630.52630.50840.0310
3Linear Regression40.86493029.919553.88830.53280.68350.64400.0220
6ExponentialRegressor37.41573127.344450.87610.41620.64280.58850.0270
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# compare baseline models\n", + "best = exp.compare_models(include = [\"rf\",\"ada\",\"dt\",\"lr\",\"gbr\",svr_rbf,er,ebm])" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "f8455018-e6b6-4e63-b697-4a2137016550", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
AdaBoostRegressor(random_state=123)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "AdaBoostRegressor(random_state=123)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "best" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "9f6fec2e-c800-4c9d-afce-c1778d4b0ca1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuUAAAH7CAYAAABrDuGIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACs3klEQVR4nOzdeXxU1fn48c+9d9bsCQQIWwJCwhZ2FxZRAbVFUbRaxaXWWv25VOtWt0pRS6XFb/VbrVpFqxaVb0XrBq4U930B2XeCYU3Insx+7/n9MZkhk40kBCaE5/160Zp7z9x75t7J5Jkzz3mOppRSCCGEEEIIIeJGj3cHhBBCCCGEONpJUC6EEEIIIUScSVAuhBBCCCFEnElQLoQQQgghRJxJUC6EEEIIIUScSVAuhBBCCCFEnElQLoQQQgghRJxJUC6EEEIIIUScSVAuhBBCCCFEnElQLo5od9xxB3l5eTH/Bg0axEknncQ111zD2rVr2/2cX331FXl5eXz88cfNtpswYQJ33HFHu5//kUceIS8vD7/f3+Zj+Hw+rrnmGkaNGsWVV17Zjr1reJ6xY8eSl5fHxo0bW/y4m266icmTJ7fqXJH7Uvff2LFjOeecc3jmmWcIhUKt7f4h85///KdBX/Py8jj++OOZOXMm7777bry7eESI/C5ceumlTbb505/+RF5eXrv9Lrbl93ry5MncdNNN7XJ+IUTnZYt3B4Q4WBkZGbzxxhvRny3LorCwkMcff5wLL7yQV155hYEDB7bb+UaNGsWnn35Kampqux3zcPvggw9YtmwZ9913H1OmTDlk53n77bcxTZPs7GxeeeUV7rzzzkN2roi//vWvHH/88QBUVlbywQcfMG/ePHbt2sXvf//7Q37+xvzqV7/i1FNPZebMmTHbX3jhBbKzs6M/l5SU8J///IcbbriBP/3pT5x33nmHu6tHHLfbzTfffENhYSF9+vSJ2RcKhVi8eDEJCQlx6p0QQrScjJSLI56u62RmZkb/de/enbFjx/LII4/gdDp54okn2vV8DoeDzMxMHA5Hux73cKqoqADCo35du3Y9ZOdZtGgRkydP5swzz+SNN94gGAwesnNFpKSkRF8LxxxzDL/+9a+ZMGECy5YtO+TnboxlWfzwww+N7ktPT4957Q4aNIi77rqLCRMm8PDDDx/mnh6ZMjIyGDhwIP/5z38a7Pvoo48IBoMMGjQoDj0TQojWkaBcdFoJCQlkZ2ezd+/emO3PP/88Z599NiNHjmT8+PH84Q9/oLKyMrq/oqKC3//+95x44okMGzaMk046iTlz5uDz+YDG01f+/e9/M3nyZPLz85kxYwZffvllzDl37NhBXl4eCxcujNleP02jpqaGOXPmRI81adIk7rrrLsrKypp8njt37uTGG29kwoQJ5OfnM3XqVB555BFM02y0/R133MHs2bMBmDJlSvSr/6qqKmbPns3EiRNjnrfX640+9tJLL+Xaa6/lb3/7G6NGjeKFF15osl9bt27lu+++46yzzuKcc86hrKyMDz74oEG77777jnPOOYf8/HwmT57M888/36BNW65LXUop0tLSYrZt2bKFq6++mrFjxzJs2DCmTZvW4NyBQIC//vWvTJ48mWHDhjF+/HjuvPNOSktLo22ae73s2LGDwYMHU11dzT333ENeXl6L+jto0CCKioqwLCu67bPPPuOSSy7huOOOY/To0Vx55ZVs2bIl5nHLli3jjDPOID8/nzPPPJOPPvqIK664Iia9Iy8vjyeffJL/9//+H8OHD2fDhg0A/Pjjj9xwww1MmjSJ4cOHc+655zb4IPP+++/zs5/9jNGjRzN69GguvPBCPv/88+j+lrwWW3Ldm+pjU6ZMmcJrr70Wc70AXnvtNSZNmoTNFvulsFKKp556itNPP51hw4Zx3HHHccMNN1BYWBjT7kC/1wAej4c5c+Zw+umnR5/zk08+iVKq2T4LIUR9EpSLTisQCFBYWEivXr2i2+bPnx/9A/r666/z5z//mU8//ZTf/OY30TZz5sxh5cqVPPzww7z//vv88Y9/ZOnSpcydO7fR83zxxRf84Q9/YOLEibz22mvccccd/O///i8ej6fVfZ4zZw5vvvkmf/zjH3nvvff4n//5H7788kv+8Ic/NPmY3/3ud5SWljJ//nzeffddbrnlFp577jmefvrpRtv//ve/59ZbbwXCI9mPPPIIANdccw3//e9/mT17Nm+//Ta33347b7zxBrfffnvM4zdt2kRBQQEvv/wy06dPb7JfixYtokePHkycOJE+ffpw3HHH8corr8S0KS8v5+qrr8bpdLJw4UIeffRRvv76a7755puDvi4Qfg28/vrrfPnll1xxxRXR7SUlJVx88cWUlZXx5JNPsnjxYs4++2zmzJkTEyDOmjWLF154geuvv5633nqLuXPn8uWXX3LVVVdFg67mXi9ZWVksWrQIgFtvvZVPP/202f5GbN26lZ49e6Lr4bfo77//niuvvJIuXbrw/PPP89xzzxEIBLjkkkuiHxA2bdrE9ddfT+/evVm0aBF33303//M//9MgcI/cmzFjxrBkyRL69etHRUUFF198MQUFBfzP//wPr776KmPHjuW6666LBqLbtm3jxhtvjP7uLFq0iGHDhnHVVVexe/du4MCvxZZe98b62Jzp06eza9eumKC5vLycDz74gDPPPLNB+0ceeYT//d//ZebMmSxevJjHHnuMgoICLrvssujvbUt/r3/729/y5ptv8pvf/IbFixdz5ZVX8ve//51HH3202T4LIUQDSogj2O23367Gjx/fYHtxcbG6/fbb1ZAhQ9QPP/yglFIqGAyqsWPHqltuuSWm7fvvv69yc3PVd999p5RSavr06eoPf/hDTJvt27erbdu2KaWU+vLLL1Vubq766KOPlFJK3XLLLer4449XgUAg2v7bb79Vubm56vbbb1dKKVVYWKhyc3PViy++GHPcG2+8UZ1yyinRn4uKilRhYWFMmwceeECNHDlSWZallFLq4YcfVrm5ucrn8ymllBo9erR64oknYh6zadMmtWPHjqYum3rxxRdVbm5u9FzLly9Xubm5avHixTHtnn76aZWXl6d27dqllFLqkksuUUOHDlXl5eVNHlsppQKBgBo3bpx66KGHottef/11NXjwYLVnz57otpdeeknl5uaqNWvWRLfV1NSosWPHtvq6RO5Lfn6+GjlypBo5cqTKy8tTQ4cOVY8++qgyTTP62CeeeEINGjQopi9KKfX//t//U6eeeqpSSqk9e/aoQYMGNbi277zzjsrNzVXffvutUurAr5fG7v0rr7yicnNz1ebNm2MeV11drRYsWKDy8vLUM888E91+1VVXqVNOOUUFg8HotuLiYjVs2DD1+OOPK6WUevDBB9WQIUNi7k3kvl5yySXRbbm5ueqcc86JOe9TTz2lcnNzo32OOPvss9Xll1+ulFLqvffeU7m5uaq4uDi6PxQKqe+//15VV1crpQ78WmzJdW+qj415+OGHo6+Tc845R918883RfQsWLFDHHXecCgQC6pJLLon+Lvr9fjVq1Cg1a9asmGOtWrVK5ebmqtdff10p1bLf65UrV6rc3Fz1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aOlCm83Gr3/9axYuXMiCBQsoKChg/fr13HnnnZx//vns3bsXm83GAw88wO9+9ztWrlzJnj17+P7773njjTcajPpGnH322ezbt48///nPbNu2ja+++or7778/JsBITk4mJyeH119/nZUrV7Jp0ybuvPPOmD/a/fv3JyUlhYULF7Jt2zZWrFjBr3/9a6ZOnQqESzHWr/yglOKee+5h1qxZrF+/nt27d/P555+zbNmyJvvbmOHDh3PCCSfw5z//mQ8++IDCwkIWL17Ms88+y4wZM+jWrVuLjmNZFv/5z384+eSTmxz1nDZtGu+88w41NTWcdtppJCQkcN9997Fu3TrWr1/PLbfcclDXpbKykuLiYoqLi9m9ezdffPEFN910E7169eKCCy4A4NxzzyUtLY0bb7yRlStXUlBQwKOPPspXX30VTa3JzMzknHPO4cknn+TNN9+ksLCQjz76iAcffJDjjz+e4cOHt+j1EvlA9u2337J+/fpoac3G6LrOPffcw48//sjf//736PZf//rXbNiwgXvuuYf169ezfft25s+fz/Tp0/noo48A+OlPf0owGOS+++5j8+bNfP3118yePZuePXse8L6de+65pKamcsMNN/Ddd9+xY8cO3n77bc4///xodZ4VK1Zw7bXX8sorr1BYWEhhYSH//Oc/8Xq9HHvssS16Lbbkuh+MU089Fbvdzvbt25usDGS327n88st55ZVXeP755yksLOSbb77hnnvuoX///tHXVUt+r4cNG8bEiROjFXd27NjB119/za9//WuuvvpqKYsohGiduEwvFaKdNFV9RalwtZUzzzxTnXLKKdHqEEqFqzL85Cc/UUOHDlWjRo1SV111lVq7dm10/5YtW9TVV1+tjjvuODV06FB18sknqz/84Q+qrKxMKdWw+opSSj3zzDNq0qRJaujQoeqss85SX3zxhTr99NOjVRqUUur7779XZ599tsrPz1cnn3yyWrBggZozZ05MlZEPP/xQ/eQnP1H5+fnqzDPPVEuXLlUlJSVq2rRpKj8/X3344YcNqq8sX75c/fKXv1Rjx45Vw4YNU1OnTlUPPPBAtPJDY+pXX1FKqaqqKjVr1iw1fvx4NWTIEHXKKaeoBx98MKb6xCWXXKLOP//8Jo/7ySefqNzcXPX+++832WbDhg0qNzdXLVq0SCml1GeffabOPPPM6LX+17/+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot residuals\n", + "exp.plot_model(best, plot = 'residuals')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "70e04206-e625-452f-a94e-1d6998a4d9d3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf0AAAH9CAYAAAAQzKWIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACTR0lEQVR4nOzdd1xT198H8M9NSAgbFBEHigtQAXFvcFBx1GqtC2211modz8+tVautVltrtbXWurW1raPOWrV1W8GqdQ9EIoqCqCgoG0Lmef6IuSWMMEMC+b5fL2u5SW5ODjGfnHPP4BhjDIQQQgip8gSmLgAhhBBCKgaFPiGEEGIhKPQJIYQQC0GhTwghhFgICn1CCCHEQlDoE0IIIRaCQp8QQgixEBT6hBBCiIWg0CeEEEIsBIU+MWju3Lnw9vbW++Pr64vevXtj7dq1UCgURnvu8PBweHt749KlSwCANWvWwNvbG3K5vNTnfO+99zB06NDyKqJBBw4cyFd3ef+cOnWqQspiCGMM8+bNQ+vWrdG3b1+jPldISAi8vb3x999/F/sxK1euhLe3d4me58mTJ/nqumXLlujXrx/WrFmDrKyskhbdaC5dulTge6N169Z45513sGfPHmg0GlMXk1QRVqYuADF/1apVw6FDh/if09PTcfHiRaxcuRIxMTH49ttvK6QcH3zwAYYPHw5ra+tiPyYkJASffPIJAgMDAWi/OFS0HTt2oH79+gXe5uTkVMGlyS8iIgIHDhzApEmTMHz4cKM9z+XLlxEXFwcfHx/s378f3bt3N9pz6cyaNQsDBw4EAGRnZ+Py5ctYunQpoqKisG7dOqM/f0EWLlwIJycnzJo1S+/4N998g/bt2/M/p6am4vTp01i0aBESEhIwderUii4qqYIo9EmRBAIBatSowf9co0YNNGrUCMnJyVi7di0+/fRTODs7G70cdnZ2sLOzK/b9U1JSEBsbq3esIsqZl4uLi179mZu0tDQAQIcOHVCzZk2jPc/evXsREBCAIUOG4LPPPkNycjKqVatmtOcDAHt7e726r1+/Pu7cuYO9e/dCo9FAIKj4zs6bN28iKCgo33FHR8d8/86aNGmCp0+fYvPmzRg/fjxsbGwqsqikCqLufVJqPj4+AID4+HgA2q7zSZMmYfXq1WjZsiV27NgBQNvCWrp0KUJCQuDn54fg4GBs2rQJufd6yszMxKxZs9CqVSu0bt0aM2fORHp6ut7zFdS9f/DgQfTv3x9+fn7o2bMnvvvuOyiVSly6dAkdOnQAAIwbNw49evTgy5i7e1+hUOCbb75Bjx494Ovri06dOmHevHlITk7m7zN37lwMGDAA169fx7Bhw9CiRQt0794dGzduLLe6XLNmDdq0aYNTp06hS5cumDJlCgCgR48eWLp0KebPn4+AgAC+W/zFixeYOXMmOnToAF9fXwQHB2PNmjVQq9X8OQt7bN7n/fDDDwEAo0aN4uupJPWya9cutGvXDsuXLy/09WVkZODEiRN466230Lt3b4hEIvzxxx/57hcTE4N3330Xfn5+6NKlC1avXo28e4KpVCqsXr0aISEhaNGiBTp37owpU6bgyZMnxaprxhgcHR31Ar849ckYw5YtWxASEgJfX1+0a9cOU6ZM4d//unr76quv0KNHD/j5+aFz5874+OOP+Xrz9vZGdHQ0Nm/eDG9v72KV2cfHB0qlEq9eveKP3blzBx9++CE6deqEgIAAjBw5EtevX9d73I0bNzB48GD+39yBAwfw6aef8r9joPD3yKtXrzB37lz+dfTr1w/79u3TO//ly5fx7rvvom3btggICMDbb7+NP//8k789LS0Nn3zyCbp27QpfX18EBQVh6dKlyMnJKVG9F+d9TEqAEWLAxx9/zDp16lTgbZs3b2ZeXl4sOTmZMcbYu+++y4KDg9m0adPYgwcPWFpaGmOMsQ8//JC1a9eOHTp0iMXGxrLffvuN+fn5sTVr1vDnmj17NgsICGBHjhxhjx49Ytu3b2fdu3dnXl5e7N9//2WMMfb9998zLy8vlpOTwxhj7MiRI6xp06bsl19+YbGxsezkyZOsVatW7KuvvmJyuZwdP36ceXl5scOHD7NXr17xZRwyZAj/vHPmzGEtW7ZkBw4cYHFxcezs2bOsW7du7J133mEajYavgy5durCRI0eyS5cusbi4OPbpp58yLy8vdunSpULrbv/+/czLy4s9ePCgyHr+/vvvWUBAABs1ahS7desWS0pKYowx1r17dxYcHMyWLFnCYmNjWWZmJsvJyWG9evViISEh7Pz58ywuLo7t2rWL+fr6sq+++oo/Z0GPzSszM5MdPnyYeXl5sePHj/P1VNx66dq1K/vggw9YVFQU/z4oyPbt25m/vz//npg7dy7r16+f3n0UCgXr2bMn69WrF7ty5QqLjo5mixYtYp07d2ZeXl78/dasWcOaN2/Ojh49yp49e8Zu3brF3n77bfb222/z94mPj2deXl5s586deucPCwtjAQEBbPPmzfzx4tbn6tWrWfPmzdlPP/3EHj16xK5cucL69+/PunfvzrKyshhjjK1atYp16dKFXbx4kT179oxduXKFvfnmm2zs2LGMMcYSExOZl5cX+/zzz1liYiJTqVTs33//ZV5eXiwsLKzAuvv888+Zr68vk8vljDHG4uLiWEBAAHv33XfZrVu3mFQqZTNmzGAtWrTg32uvXr1irVq1YoMHD2a3bt1it27dYkOGDGHBwcGse/fu/LkLeo8olUr+dZ05c4Y9fPiQbdy4kXl7e7Pff/+dMcZYeno6CwgIYEuXLmUPHz5kcXFxbP369czLy4vduHGDMcbYrFmz2JtvvsmuX7/Onj17xsLCwlhQUBD79NNPS1TvxXkfk+Kj0CcGFRT6CoWCnT9/nnXo0IHNmTOHP/7uu++y5s2bs9TUVP7Y7du3mZeXF9uzZ4/eOZYuXcpatmzJ5HI5y87OZs2bN2dLlizRu88nn3xiMPTffPNNNmnSJL3H7N69my1dupQxxgr8MM0d+s+fP2c+Pj5s48aNeuc4duwY8/LyYlevXuXrwMvLi927d4+/T1JSEvPy8mKbNm0qtO50od+iRQsWEBCQ78+wYcP4++pe25kzZ/TO0b17d9axY0emUqn4Y0eOHNH7cNX5/PPPWUBAAB8OBT22IGFhYXr1XJZ6KczAgQPZrFmz+J+vXr3KvLy82K1bt/hj58+fZ15eXuzEiRP8MY1Gw3r16qUX+snJySw2Nlbv/Dt37mReXl78lxZd6Pv6+vL17ePjw7y9vdnixYv5OmKsePUpl8tZy5Yt2cKFC/XuExERwby8vNgff/zBGGNswoQJfMDrJCQkMKlUyv/s5eXFVqxYwf9cWOjLZDJ25MgR5ufnp/dvY/HixSwgIID/AsWYNkA7derEFixYwBjT/jvI+7t5+vQpa968eb7Qz/seOXr0KPPy8mLnz5/XK8/EiRNZr169GGOMRUZGMi8vL3bz5k29+9y8eZOlpKQwxhjr378/H/A6cXFx7NGjR4yx8n8fk+Kha/qkSK9evULLli35n+VyOaysrDBgwADMmzdP775169bVG5x28+ZNAECXLl307texY0f88ssviI2NhVqthlKpRKtWrfLdZ+/evQWWKScnB9HR0XjzzTf1jpdkZP6dO3eg0WjQpk0bveMBAQEAgMjISLRu3RoAYGtrCy8vL/4+1atXB4B8lyAK8sMPP8DDwyPfcbFYnO+Yr69vvmNNmzaFUCjkf759+zasra3h7++fr9zbt2/Hw4cP+UsveR9bHCWpF7FYrFcvBYmMjMTdu3cxZ84cqFQqAECLFi3QoEED7Nu3j38d0dHRAKD3PuA4Du3bt9cbm2FtbY1Dhw7hxIkTePHiBZRKJX/elJQUvXECEyZM4N8jSqUSsbGx2LRpEwYNGoRffvkF1apVK1Z9AkBWVhbatm2rd59mzZrB2toakZGReOutt9CjRw8sWLAAU6ZMQe/evdGuXTu4u7vD3d3dYB0BwP/93//p/a5ycnLg5OSEMWPG8Jd7AO2/KX9/fzg6OurVSatWrRAZGQkAePz4MaysrNCkSRP+PrVr14aPj4/eJRog/3vk5s2bEIlEeoMKAe2/x9OnTyMrKwuNGzdGvXr1MGXKFAwfPhydOnWCr68vWrRowd+/R48e2LRpE5RKJXr06IG2bduiXr16/O3Gfh+TglHokyI5Oztj9+7d/M9WVlaoUaNGgaGV+4MI0F7LBZBvKphuClJSUhI/Gj/vID1Dg/Z0YVuSgX15ZWZmAgAcHBz0jut+zj2ty9bWVu8+HMcBQL7rzQWpVatWoaP388pbfwUdy8zMhK2tbb5BaAWVu6DzFaUk9VKc8+/ZswcA8P777+e77eXLl5g/fz4kEgl/3rx1nfd3PHv2bISFhWH27Nlo3749bGxscOLECaxcuTLf+atVq6ZX940bN0a7du0QGBiIrVu3Yvbs2cWqT93vOW+dCAQC2Nra8mUfMmQIXF1dsXPnTsybNw9yuRzt2rXDp59+isaNGxusp88++4z/oqVWqzFu3Dh4enpi+vTpevfLyMiAVCrV+yIOaMcT6L7wpKamwsHBgX+f6ri7u+cL/YL+zSqVynxf+nRfrJKSkuDp6Yndu3dj69atOHjwIL777js4Ozvjgw8+wPjx48FxHKZOnQpPT0/s378f06ZNA2MMQUFB+Oyzz1CzZk2jv49JwSj0SZGEQmGxQysvXav/559/LnB6Wo0aNfDo0SMA/31B0DHUinZxcYFAIOBHnpeG7oNEF3I6unLk/YA3F46OjsjOzgZjTO9DvbzKXZ71kpOTgz///BOjRo3CW2+9pXdbVlYWxowZg+PHj2PAgAF82GdkZOiNUs/9vsjMzMTp06fx7rvvYvTo0fzxksxjd3R0RN26dXHv3j3+5+LWZ9460Wg0yM7O1rtP9+7d0b17dygUCly4cAHffPMNxo0bhzNnzuQL4dxq1Kih9+9s4cKF+Oijj3Dw4EF+2qGuvO7u7li6dGm+c+gCVCwWF7ieRXH+vTg6OsLa2hoHDx4s8PZatWoB0H6hmj17NmbPno34+Hjs27cP3333HapXr47BgweD4zgMHDgQAwcORFZWFsLCwrBixQrMmDEDO3bsMPr7mBSMRu8To9J19yUmJqJ+/fr8H0dHR9jY2MDW1hb169eHlZUV3zWpc/Xq1ULPKxKJ4O3tjStXrugd3717N8aOHavXAi+sNe7r6wuBQJDvHBcvXgSAfN2O5sLf3x9yuRy3b9/WO37hwgXY29ujQYMGZTp/edbL0aNHkZGRwY/Iz/2nQ4cOaNeuHfbv3w8AaNiwIQDg7t27/OMZY7h27Rr/s1KpBGMMtWvX5o+p1Wq9dSSKkp2djSdPnvBd7sWpzwYNGsDBwSFfnVy7dg1yuRx+fn7QaDQ4efIknj17BkAbvN26dcOUKVPw7NkzvcAtTg9Rt27dEBwcjGXLlumN3A8ICMCjR4/4HiTdH8YY3NzcAGinJmZnZ+PBgwf84168eMFfbjMkICAAcrkcMplM7/wSiQSOjo4Qi8WIjY3FmTNn+Md4eHhg+vTpaNKkCaRSKWQyGf7880+9Hrm+ffti9OjRiIqKKna9k/JHoU+MytfXF126dMGSJUtw6tQpPHnyBJcvX8aHH36ICRMmgDEGe3t79OzZE3v27MGJEycQFxeH7du348KFCwbPPW7cOFy8eBE//PADHj16hLNnz+Lbb79FgwYNwHEc37Nw8eJF3L17N98HbY0aNfD2229j06ZNOHz4MOLj4xEWFoZvv/0W7du3L7fQT0lJQVJSUoF/8vZuFEfPnj3RqFEjzJs3D5cuXcLjx4+xc+dOHD58GGPGjIFIJCpTecuzXvbu3Qs/P79Ce4r69euHy5cvIz4+nl8n4JtvvsHNmzfx4MEDfPbZZ8jOzubv7+LiAk9PT/z++++4d+8eoqKiMHHiRH6MwZUrV/Ra45mZmXxdv3jxAtevX8eUKVMgFosxduxYAMWrT5FIhDFjxmD//v3Yvn074uPjceXKFSxatAgNGzZEcHAwBAIBNm/ejGnTpuHq1atISEhAZGQkfvvtN/j4+PBrRDg6OuL27duQSqVFjgn55JNPoFAo8MUXX/DHRo0ahaysLMycORMRERGIj4/Hnj17MHDgQP4yXHBwMEQiEZYsWQKpVIqIiAjMmDEDdevWLfJ31r17d3h5eWHWrFm4cOECnj59irCwMLz77rtYuHAhAO2Ygf/7v//Djz/+iNjYWDx9+hQHDhzAo0eP0KFDB1hZWWHFihWYPXs2bt++jefPn+P69es4dOgQP5XW2O9jUjDq3idGt2bNGqxatQqff/45Xr58CScnJwQHB2P69Ol8t97ixYvx2Wef4eOPPwbHcQgKCsLChQsxfvz4Qs/br18/ZGdn46effsLGjRtRo0YNDB8+HJMnTwagnRPdu3dv7NixA4cOHcK5c+fynWPRokWoVq0avvnmGyQlJcHFxQVvvPEGZs6cWW6vf+TIkYXe1r9//wKvRRsiFovx008/Yfny5ZgyZQqysrJQp04dzJo1S6/LuyzKo14ePXqEa9eu5RvsmVuvXr3w+eef48CBA5g6dSo2bNiAxYsX491334WTkxOGDBmC0NBQrFq1in/MihUrsGjRIgwZMgQ1a9bE+PHjMWDAANy/fx9Lly4Fx3Ho3LkzAO0Svrr6FQqFcHV1Rdu2bbFjxw6+JVnc+pw0aRKsra3xyy+/YNmyZXBwcEDXrl0xe/ZsfnzL2rVrsXz5ckydOhVpaWlwcXFB+/bt8fnnn/PnmThxItasWYORI0diy5YtBuuwdu3amDRpElauXIk333wTPXr0QP369fHrr79i1apVGDVqFJRKJTw9PfHxxx8jNDQUAFCnTh2sXr0aK1aswODBg+Hp6YmpU6fi8OHD/IDJwojFYmzbtg0rV67EzJkzkZaWBldXV/Tr148fUBgYGIgvv/wS27Ztw/fffw+O41C/fn18+umnCA4OBgD8+OOPWLFiBcaNG4esrCzUqFEDgYGB/BiFingfk/w4Vpx+JkIIIZVKamoqrK2t9cZHDBgwADVr1sSmTZtMWDJiStTSJ4SQKiY1NRU9evRAmzZtMGPGDNjY2ODQoUOQSqX43//+Z+riEROilj4hhFRBt2/fxnfffYeIiAioVCp4enri/fffx4ABA0xdNGJCFPqEEEKIhaDR+4QQQoiFoNAnhBBCLASFPiGEEGIhaPR+AW7cuAHGGC0OQQghxKwolUpwHJdv74XiopZ+AZh2y2FTF8PoGGNQKBQW8VpLg+rHMKofw6h+DKP6MSxv/SiVSqSlpUGtVpepzqilXwBdC9/Pz8/EJTGu7OxsREVFoXHjxvl2NiNUP0Wh+jGM6scwqh/DctfP48ePcfToUWg0GnTu3Jlf0rk0zLqlL5VKMXr0aLRu3RqdOnXCtGnTkJSUBAA4f/48Bg8ejFatWqFfv375doTatm0bQkJC0Lp1a4SGhubb1IEQQggxd9HR0Th06BC/k2RBW5qXhNmGvkKhwAcffIB27drh4sWLOHToEJKSkrBo0SK8ePECkydPxvDhw3Hx4kUsWLAAn332GR/sp06dwtq1a/H111/j/Pnz6NmzJyZOnKi3PzMhhBBizuLi4vDnn3/yge/v71/mXhGzDX2ZTIbp06fjo48+glgshqurK0JCQnD//n0cOXIEDRo0wODBg2FtbY2OHTuiZ8+e2LdvHwDtzl6DBg1CixYtIJFIMHbsWAgEApw9e9a0L4oQQggphujoaISHh+sFfp8+fcp8XrO9pq/bYUsnLi4OBw8eRN++fREZGYlmzZrp3b9p06Y4evQoACAyMhJ9+/blb+M4Dj4+PoiIiEC/fv2K9fyMMb0tPasimUym9zfRR/VjGNWPYVQ/hlH9FC46OhoHDx4EYwwqlQq+vr4ICgqCTCYDY4zfnbQ0zDb0dZ4+fYqQkBCoVCoMHz4cU6ZMwYcffoiaNWvq3c/Z2RkpKSkAtJtN6PZS13FycuJvLw6lUomoqKiyv4BKIDY21tRFMGtUP4ZR/RhG9WMY1Y8+tVqNw4cPIz09HQDg6uoKDw8PSKVS/j5lua5v9qFfp04dREREIC4uDp9++ilmz55d4P2K+vZT0m9HIpEIjRs3LnF5KxOZTIbY2Fh4enrqbb9JtKh+DKP6MYzqxzCqn8LVq1cPO3fuhEgkQmhoqN51/AcPHpTp3GYf+oC2e97T0xPTp0/H8OHDERQUhNTUVL37pKamwsXFBQDg4uKSr1WflpaGJk2alOg5LWUaiY2NjcW81tKg+jGM6scwqh/DqH7ys7W1xahRoxAbGwtbW1u9+ilL1z5gxgP5zp8/j5CQEH4QAwAIBNridurUCXfu3NG7/507d9CiRQsAgK+vLyIjI/nb1Go17t69y99OCCGEmIvHjx9DpVLpHbO1tS1zwBfEbEPf19cX6enpWLlyJWQyGZKTk7FmzRq0adMG/fv3x9OnT7F3717I5XKEhYUhLCwMQ4cOBQCEhobi4MGDuHnzJmQyGdavXw+xWIxu3bqZ9kURQgghuUilUvz22284cOBAvuA3BrMNfScnJ/z000+IiIhAhw4d0K9fPzg4OODbb79F9erVsXHjRuzZswcdO3bEN998gxUrVsDHxwcAEBgYiBkzZmDu3Lno0qULLl++jE2bNkEikZj4VRFCCCFaUqmUX3jn4cOHuHHjhtGf06yv6fv4+ODXX38t8La2bdti7969hT52xIgRGDFihLGKRgghhJRa7sAHtPPw27RpY/TnNduWPiGEEFIVFRT4ffr0Mco1/Lwo9AkhhJAKYsrAByj0CSGEkAph6sAHKPQJIYQQo4uLizN54AMU+oQQQojR1apVC3Xr1gVgusAHzHz0PiGEEFIViMViDB48GDdu3EC7du1MEvgAhT4hhBACAEjMkGHXjVik5SjgJBEjtKUn3ByK3hegsMdpNBp+JVlAG/zt27cvU/nSc5TQMFbqc1DoE0IIsWhqjQZfnopAWMwLqDUMAo6DhjEcjoxHUKOamB/sB6Eg/9VwQ4/ztZbBV5OE4cOHw97evtzKN8ffuUznotAnhBBi0b48FYFT0QmwEgggeN3tLuA4MAacik4AACzslX/vlsIel/3iCY5F/IvoanYAfsPIkSPLtJNg7ucpKxrIRwghxGIlZsgQFvOi0EC1EggQHpOIxAxZsR4nS3yC1DuXIABDXEoW7Fxcy7QEfFJmjsHylRSFPiGEEIu160Ys1BrD18hVGg123Ygt8nG6wAfTTsuzdq+PF65eZRq0t/d2fJHlKwnq3ieEEGKx0nIUfNd8YQQch/QcpcHH6QJfpVYjS6GCoIYHlLWaIiFdlvd0JSufXFlk+UqCQp8QQojFcpKIoWHMYLBqGIOjRFTo47SB/y9Ss+XIUamB6nWB2s2QmSXHH3fiYW9tVeBgwOLMFnCyFhVZvpKg0CeEEGKxQlt64sDtODxNl0Gt1kAoFKCmvQRi4X8BbSUQILSlZ77HHY6MR9rTOCTcvIBshRIqNYPAzQOCBi3AcRw4jkMNe0m+wYDFmS2gM8TfA8fuv0AZZunpoWv6hBBCLJJao8HGi9F4kpaNxAwZUmUKvMzMwd0XqYhNzgSD9np+YCO3fC3w6nbWYABiHsUiS66EQq2BslodZNduBrlaAw1jcJaIIBYK8g0G1I3GZwwFzhb48lQE/zw17CUIalQTqtfL95YVhT4hhBCLpAvf+s52qG5rrT3IGMCA5Gw5HqdkItirll7LO/djlSoNnH1aQVW9LtTV6kJT3w/gBJCrNFCotSEdm5yp/ZOSic0Xo4s9WyApM4c/Nj/YD8Fetcqli5+69wkhhFicvOHrWc0ecpUaiZk5UGsYrAQcajrY4KOOXgVeiw+LeQGRUIAG1R2gbtYGLzPl0DAG9vr6u1ylQVxKFgQCDiIBB2srIX68HIPzcUlQaRiEBgJcpdFg7+14dHfR/iwUCLCwVwskZshwXxpVphX5qKVPCCHE4hQ05c7aSggPZzt4VrNHXWc7CAVcvql69+7dw+Yz1/Qeay2yAuMAhtfd9GBgALjXf5RqhhylCkIBh6jnaYhPyTJYNgHHIV2uzHfczcEGjhIRnG3EpXvRoNAnhBBigUozVU8qleKPP/7ApZNHoM5M449XsxFDrWHgoA1+xsD/PwBwHKDSaK/xi4QCpMgUfPd/QTSMwdFaVOjtZUGhTwghxOLoptwZknuqnlQqxaFDh6DRaCBUq5CV8Ii/X7JMAaFAOxCPMW0rX9fSB7THrAQCpOYo4WavXZ3vRa5r9nlZCQQY4u9RlpdXKAp9QgghFie0pSeEAsMtfd1UvdyBDwBDg7vA2SuAv59arYHESgiRUP982lY/g0gogMRKALWGwdpKCBcbMRSqglv6utkCNexLv3SvIRT6hBBCLI6bg43BqXC68E1+GqcX+P7+/hg+aAC6NXbnHyt8PadfG/wCcACEHCCxEsBWJITESqi93+svGR7Otmju7sTPzwfAL8BT2GyB8kKj9yuh0u75TAgh5D+6cA2PSYRKo+FD2EogQLBXLbzjIc4X+H369AHHcXqPrWFnjVdZOWCvW/IcAGuhQG/NfY7j+K59kVCIn4Z3AqAdUJieo4STRITQVp6oYW/cz3IK/UqktHs+E0IIyS/3VLi84fvqSf4Wvi7wC3rsoTvxeJySCXcHGzxLlyFFpuCfR8MYqtlaw9pKCJVGg2CvWnxDbWpg0wp9zRT6lUhp93wmhBBSODcHG73wTUlJMRj4BT32/7p448tTEQiPSYSHi532PDIFOADVbK3h4WxbId33RaHQryRKsuczdfUTQkjpubi4oHv37jh9+rTBwM+toF4DIQdotAv8VVj3fVEo9CsJ3UIShuaV6vZ8rujuIkIIqWratm0LV1dXeHp6Fhn4ueXtNTA3dAG4kijtns+EEEKKlpWVf5W8Bg0alCjwKwMK/UqipAtJEEIIKR6pVIoNGzYgOjra1EUxOgr9SqIkC0kQQggpHt3CO0qlEn/88QcSEhJMXSSjotCvJIq7kAQN4iOEkOLJu9Je8+bN4e7ubuJSGRcN5KtEilpIwpTTQAghpDLJG/jFHaVf2VHoVyKGFpIw9TQQQgipLCw18AEK/UrJ3KeEEEKIubLkwAfomj4hhBALYemBD1DoE0IIsRBisRiC16uaWmLgA9S9TwghxEI0bNgQgwYNwv3799GrVy+LC3yAQp8QQogFadiwIRo2bGjqYpgMde8TQgipkqRSKf79919TF8OsUEufEEJIlZN30F6HDh1MXCLzQC19QgghVUrewE9OTgYrYu8SS0GhTwghpMqgaXmGUegTQgipEijwi0ahTwghpNKjwC8eCn1CCCGVGgV+8VHoE0IIqbSUSiVOnz5NgV9MFPqEEEIqLZFIhGHDhsHW1pYCvxhonj4hhJBKzdXVFe+//z4cHBwo8ItALX1CCCGVytOnT/nufB1HR0cK/GKg0CeEEFJpSKVS7NixA3/99Ve+4CdFo9AnhBBSKeQepX/nzh3cuXPH1EWqdCj0CSGEmL2CpuX5+fmZuFSVD4U+IYQQs0bz8MsPhT4hhBCzRYFfvij0CSGEmCUK/PJHoU8IIcTsPHz4kALfCCj0CSGEmB13d3e4uroCoMAvT7QiHyGEELNja2uL4cOH48aNG+jUqRMFfjmhlj4hhBCzwBjT+9nW1hadO3emwM9FoVCU6fEU+oQQQkxOKpVi165dkMvlpi6KWWKMYcuWLXj+/HmZzkOhTwghxKR0o/QfP36MPXv2lLk1W9WkpqZi9OjRmDNnTr7ekJIy69B/+vQpJk+ejPbt26NDhw6YM2cO0tPTER8fD29vb/j5+en9OXr0KP/Ybdu2ISQkBK1bt0ZoaChu375twldCCCGkINHR0Xqj9KtXrw6RSGTiUpmPa9euISgoCEeOHCmX85n1QL5JkyahWbNmOHPmDLKzszFx4kQsX74cI0eOhEgkQkRERIGPO3XqFNauXYstW7bA29sb27dvx8SJE3HixAnY2dlV8KsghBBSkLi4OERFRUEoFAKgUfq5aTQa7N69G9u2bYNKpQIAODs7w83NrUznNduWfnp6Opo1a4aZM2fCzs4ONWrUwMCBA3H16lWkpaXBycmp0Mfu3bsXgwYNQosWLSCRSDB27FgIBAKcPXu24l4AIYSQQkVHRyM8PJzm4Rfg5cuXeO+997BlyxY+8Nu3b4/w8HDY2NiU6dxm29J3dHTEsmXL9I49e/YMbm5uSE9Ph0ajwYQJE3Djxg04OzsjNDQUo0ePBsdxiIyMRN++ffnHcRwHHx8fREREoF+/fsV6fsYYsrOzy/U1mRuZTKb3N9FH9WMY1Y9hVD+Fi46OxsGDB8EYg0qlgq+vL4KCgqiuXktPT+d7sjmOw//93/9h5syZsLKyQnJycpm+GJlt6OcVERGBHTt2YP369cjJyUH9+vUxcuRIfP/997h06RKmTZsGOzs7DBkyBKmpqfl6ApycnJCSklLs51MqlYiKiirvl2GWYmNjTV0Es0b1YxjVj2FUP/ri4uIQHh7OD0hzdXWFh4cHpFKpiUtmXmbNmoWVK1fi448/RqtWrXD//n3+NrFYXOrzVorQv3btGiZOnIiZM2eiU6dOAIAePXrwt3ft2hXDhg3D77//jiFDhhR4DsZYib4diUQiNG7cuGwFN3MymQyxsbHw9PQsc5dRVUT1YxjVj2FUP/kxxvDgwQNUr14dKpUKrq6uCA0Nha2tramLZlLPnj2Dra0tnJ2d+WOenp7w8/ODj4+P3vvnwYMHZXousw/9v//+G7NmzcLChQsxcODAQu9Xt25dnDhxAgDg4uKSr1WflpaGJk2aFPt5OY6zmDeijY2NxbzW0qD6MYzqxzCqH32DBw/GwYMHIRAI4OHhAVtbW4uunxMnTmDSpEno1KkTfv75Z73GqUQiyff+KeuYB7MdyAcA169fx5w5c7B69Wq9wD9+/Dh2796td9+HDx/Cw8MDAODr64vIyEj+NrVajbt376JFixYVUm5CCCEFEwqFGDhwIHr16mXRg/YUCgUWLFiA4cOHIzk5GUeOHMGvv/5q9Oc129BXqVRYsGABZs2ahS5duujdJhQKsWzZMly4cAEqlQoXL17E/v37MXLkSABAaGgoDh48iJs3b0Imk2H9+vUQi8Xo1q2bCV4JIYRYrvv37yMtLU3vmFAotOjAj42NRd++fbFu3Tr+WJ8+fdC/f3+jP7fZdu/fvHkTMTExWLp0KZYuXap327FjxzBv3jwsXrwYiYmJqFOnDhYuXIjg4GAAQGBgIGbMmIG5c+ciKSkJzZs3x6ZNmyCRSEzxUgghxCLpVtpzcHDAiBEjDE61thS///47pk2bhoyMDADa8WOLFy/GRx99VCFfhMw29Nu0aYN79+4VevuwYcMwbNiwQm8fMWIERowYYYyiEUIIKYIu8DUaDdLS0nDjxg2L7m2VyWT45JNPsG3bNv5Yw4YNsWXLFgQEBFRYOcw29AkhhFROuQMf0C68ExQUZOJSmU5KSgr69++Pu3fv8scGDx6MlStXwtHRsULLYrbX9AkhhFQ+BQW+pa+05+zszE8Bt7GxwerVq7Fx48YKD3yAWvqEEELKCQV+wTiOw+rVqyGXy/HZZ5/Bx8fHZGWh0CeEEFJmFPj/uX37NlJSUvQuaTg5OWHXrl0mLJUWde8TQggpk8TERAp8aFcc3LRpE3r16oWxY8fi2bNnpi5SPhT6hBBCyqRGjRpo164dAMsN/JSUFIwaNQpz586FQqFAcnIyvvvuO1MXKx/q3ieEEFImHMchKCgI7u7u8Pb2trjAv3TpEsaNG4cnT57wxyZNmoRPP/3UhKUqGIU+IYSQEsvJydFb8Ey3hbkl0Wg0WL16Nb788kuo1WoA2r1f1q1bh5CQEBOXrmDUvU8IIaREpFIpNm7cqNeytTSJiYkYPHgwlixZwgd+x44dER4ebraBD1DoE0IIKQHdKH2ZTIY9e/bg1atXpi5ShVOr1ejfvz/Onj0LQNvLMWvWLPzxxx+oU6eOaQtXBAp9QgghxZJ3Wp6Pjw+qVatm4lJVPKFQiPnz5wMAatasiQMHDmD+/PmwsjL/K+bmX0JCCCEmR/Pw9Q0YMAArV67Em2++CTc3N1MXp9iopU8IIcQgSw/8o0ePYt68efmOf/DBB5Uq8AFq6RNCCDHAkgNfLpdj8eLF2LBhAwCgRYsWGD58uIlLVTbU0ieEEFIgSw78hw8fok+fPnzgA+AH7lVmFPqEEEIKpFKpwBgDYFmBv3//fnTr1g03b94EAIjFYixfvhzr1683bcHKAXXvE0IIKZCvry8AID4+Hr17967ygZ+dnY158+bh119/5Y81atQIW7duhb+/vwlLVn4o9AkhhBTK19eXD/+qLCoqCmPHjoVUKuWPDR06FCtWrICDg4MJS1a+KPQJIYQA0F7DVyqV8PPzM3VRKtyyZcv4wLe1tcXXX3+N0NDQKte7QaFPCCGEH7Snu4ZvacH/7bff4urVq6hWrRq2bt0Kb29vUxfJKCj0CSHEwuUdpf/kyZMqH/pyuRzW1tb8z66urjhw4ADq168PGxsbE5bMuGj0PiGEWLCCpuX17t3bxKUyHsYY1q9fj/bt2+Ply5d6t/n4+FTpwAco9AkhxGJZ2jz85ORkjBw5Ep988gkeP36MSZMm8a/dUlD3PiGEWCBLC/x///0XH374IZ49e8Yf8/HxgUajgUBgOe1fCn1CCLEwlhT4arUaq1atwldffcW/3urVq2PdunV44403TFy6ikehTwghFiQnJwfHjx+3iMB//vw5Jk6ciLCwMP5Y586dsXHjRtSuXduEJTMdy+nTIIQQAolEgnfeeQdisbhKB/7ff/+NoKAgPvAFAgE+/vhjHDx40GIDH6CWPiGEWJy6deti9OjRqFatWpUMfABISEhAUlISAKBWrVrYuHEjunTpYuJSmR6FPiGEVHGJiYmoUaOGXsBXr17dhCUyvtDQUISHhyM5ORnr1q2Dq6urqYtkFij0CSGkCtMN2mvbti26detWZVv2kZGRaN68Of8zx3H47rvvIBaLLWp0flGoJgghpIrKPUr/0qVLepvJVBVyuRxz585F165dcejQIb3bJBIJBX4eVBuEEFIFFTQtz8fHx8SlKl8PHjxASEgINm3aBACYMmUKXrx4YeJSmTcKfUIIqWIsYR7+3r170aNHD9y+fRsAYG1tjc8++wxubm4mLpl5o2v6hBBShVT1wM/KysLHH3+MnTt38seaNGmCH3/8Ue+aPikYtfQJIaSKqOqBf/fuXfTs2VMv8ENDQ3H69GkK/GKilj4hhFQB9+/fr9KBf+zYMXzwwQfIyckBANjZ2WHlypUYNmyYiUtWuVBLnxBCqgA3Nzc4ODgAqHqBD2hfk62tLQDA19cXZ86cocAvBWrpE0JIFeDk5IQRI0bgxo0bCAoKqlKBDwC1a9fGunXrcOrUKXz++eeQSCSmLlKlRC19QgippBhjej87OTlViQV4NBoNfvrpJ6Slpekd79WrF77++msK/DKg0CeEkEpIKpXi999/h0qlMnVRytWrV68QGhqKmTNnYurUqfm+2JCyodAnhJBKRjdKPzo6Gn/88QfUarWpi1Quzp8/j8DAQJw8eRIAcOjQIVy7ds3EpapaKPQJIaQSyTstz8bGptIvNatWq/H1119jwIABSEhIAAC4urpi7969aNOmjYlLV7XQQD5CCKkkquI8/OfPn2P69Ok4d+4cfywwMBAbNmyAu7u7CUtWNVXur4eEEGIhqmLgX7lyBSEhIXzgCwQCzJs3D/v376fANxJq6RNCiJmrioF/9epVzJ8/n/+5Vq1a2Lx5Mzp16mTCUlV91NInhBAzVhUDHwBat26Nzp07A9BOxQsPD6fArwDU0ieEEDPFGMP169erXOADAMdxmDlzJvr164ePPvqoSrymyoBa+oQQYqY4jsM777yDunXrVurAz8nJwZw5c3D69Gm94w4ODhg1alSlfE2VFbX0CSHEjFlbW2Po0KEQiUSVMhzv37+PsWPH4s6dOzh48CDCw8NpkJ4JUUufEELMSExMDLKysvSOicXiShn4v/32G3r06IE7d+4AADIzM3Hr1i0Tl8qyUUufEELMhG7QnqurK4YNGwY7OztTF6lUMjMzMWfOHPz222/8MS8vL/z4449o1qyZCUtGqKVPCCFmIPco/cTERNy4ccPURSqVO3fuoGfPnnqBP3LkSJw+fZoC3wxQ6BNCiIkVNC1PN52tsmCMYevWrXjjjTdw//59AIC9vT02bdqENWvWVNpei6qGuvcJIcSEqso8/BcvXmDx4sWQy+UAtK9j69ataNSokYlLRnKjlj4hhJhIVQl8AHB3d8d3330HABg/fjyOHz9OgW+GqKVPCCEmUNkDX6PRQKlUwtramj82aNAgNGnSBH5+fiYsGTGEWvqEEFLBnj17VqkD/+XLlxg+fDhmzpyZ7zYKfPNGoU8IIRXM3d0dzZs3B1D5Av/cuXMIDAzEqVOnsHPnTuzdu9fURSIlQN37hBBSwQQCAfr06QMPDw/4+flVisBXqVRYsWIFVq5cCcYYAKBGjRqoUaOGiUtGSoJCnxBCKoBSqYRIJOJ/FggE8Pf3N2GJiu/Zs2cYP348Lly4wB/r1q0b1q9fj5o1a5qwZKSkqHufEEKMTCqVYuPGjUhKSjJ1UUrsxIkTCAwM5ANfKBRiwYIF2LdvHwV+JWTWof/06VNMnjwZ7du3R4cOHTBnzhykp6cDAM6fP4/BgwejVatW6NevHw4ePKj32G3btiEkJAStW7dGaGgobt++bYJXQAixdNHR0Th06BAyMzOxa9cu/jPM3CmVSixcuBDDhw9HcnIyAKBOnTo4fPgwZsyYAYHArOODFMKsf2uTJk2Co6Mjzpw5g8OHD+Phw4dYvnw5Xrx4gcmTJ2P48OG4ePEiFixYgM8++4wP9lOnTmHt2rX4+uuvcf78efTs2RMTJ07Mt4kFIYQYU1xcHP78809+lH7jxo3h4OBg4lIVj1AoRGRkJP9znz59EB4ejg4dOpiwVKSszDb009PT0axZM8ycORN2dnaoUaMGBg4ciKtXr+LIkSNo0KABBg8eDGtra3Ts2BE9e/bEvn37AAB79+7FoEGD0KJFC0gkEowdOxYCgQBnz5417YsihFiM6OhohIeHV9ppeQKBABs2bEDdunWxbNkybN++HS4uLqYuFikjsx3I5+joiGXLlukde/bsGdzc3BAZGZlv44amTZvi6NGjAIDIyEj07duXv43jOPj4+CAiIgL9+vUr1vMzxpCdnV3GV2HeZDKZ3t9EH9WPYVQ/hYuOjsbBgwfBGINKpYKvry+CgoLMuq5kMhmePHmCJk2a8Mfs7e1x9uxZSCSSci87vX8MK6x+GGNl+uJotqGfV0REBHbs2IH169djy5Yt+QaQODs7IyUlBQCQmpoKJycnvdudnJz424tDqVQiKiqq7AWvBGJjY01dBLNG9WMY1Y++uLg4hIeH89PaXF1d4eHhAalUauKSFS4uLg5ffPEFMjMzsWHDBjg6OlbYc9P7x7CC6kcsFpf6fJUi9K9du4aJEydi5syZ6NSpE7Zs2ZLvPkV9+ynptyORSITGjRuXqryVhUwmQ2xsLDw9PWFjY2Pq4pgdqh/DqH7yi46ORlRUFKpXrw6VSgVXV1eEhobC1tbW1EUrEGMMe/bswYIFC/gW5U8//YQNGzYY/bnp/WNYYfXz4MGDMp3X7EP/77//xqxZs7Bw4UIMHDgQAODi4oLU1FS9+6WmpvLXm1xcXPK16tPS0vS6rYrCcZzZ/kMtbzY2NhbzWkuD6sewqlI/iRky7LoRi7QcBZwkYoS29ISbQ8nCSC6XQygUQigUwtfXFx4eHrC1tTXL+snIyMCsWbP0VtTz8fHBvHnzKrS8VeX9Yyx566esY0LMOvSvX7+OOXPmYPXq1ejSpQt/3M/PD/v379e77507d9CiRQsAgK+vLyIjI/H2228DANRqNe7evYvBgwdXXOEJIZWCWqPBl6ciEBbzAmoNg4DjoGEMhyPjEdSoJuYH+0FYzOlp7du3B2MMycnJCAoKMtsu/du3b2Ps2LGIiYnhj40aNQpffvklBXAVZ7aj91UqFRYsWIBZs2bpBT4A9O/fH0+fPsXevXshl8sRFhaGsLAwDB06FAAQGhqKgwcP4ubNm5DJZFi/fj3EYjG6detmgldCCDFnX56KwKnoBDAGCF63ogQcB8aAU9EJ+PJURInO16FDB7Mdpc8Yw+bNm9GrVy8+8O3t7bF582Z89913FPgWwGxb+jdv3kRMTAyWLl2KpUuX6t127NgxbNy4EV9//TWWLVuGunXrYsWKFfDx8QEABAYGYsaMGZg7dy6SkpLQvHlzbNq0CRKJxBQvhRBiphIzZAiLeQGrQlryVgIBwmMSkZghK7CrXyqVQiQS5ds33hwDHwAmTJig150fEBCALVu2oGHDhiYsFalIZhv6bdq0wb179wq9vU6dOgZ3dxoxYgRGjBhhjKIRQqqIXTdi+S79wqg0Guy6EYupgU31jkulUhw6dAgcx2HQoEH5gt8cde7cmf/cnDBhAj777DNYW1ubuFSkIplt6BNCiLGl5SgMBj6g7epPz1HqHdMFvm7hnQcPHlSK0H/vvfcQERGBnj17onfv3qYuDjEBs72mTwghxuYkEUPzej59YTSMwVHy3+54eQPf398fvXr1Mmo5SyMpKQk///yz3jGO47BixQoKfAtGoU8IsVihLT0hFBhu6VsJBAht6Qmg4MA3x0F7YWFhCAwMxPTp0/HXX3+ZujjEjFDoE0IslpuDDYIa1YTqdYjnpdJoENjIDW4ONpUi8FUqFb744gsMGjQIL168AAAsWbKELzMhdE2fEGLR5gf7AQDCYxKh0mj4efpWAgGCvWphfrBfpQj8J0+eYPz48fj333/5Y927d8f69etpG1zCo9AnhFg0oUCAhb1a8Cvypeco4SQRIbSVJ2rY2yArK0tve1xzDPyjR4/i//7v//iVSIVCIRYsWID//e9/FPhED4U+IYRA29Wfd1oeANjZ2eGtt97CwYMH0bx5c7MKfLlcjkWLFmHjxo38sbp162LLli1o166dCUtGzBWFPiGEFKFJkyZ47733ULNmTbMJfACYP38+fvrpJ/7nN998E99//z2cnZ1NVyhi1qjfhxBC8ihoG253d3ezCnwAmD59OpydnSEWi/H111/j559/psAnBlFLnxBCctEN2uvWrZvZd5HruvJdXV3h7+9v6uKQSoBa+oQQ8lruUfpnzpzBw4cPTV0knlQqxciRI5Genq53vEePHhT4pNgo9AkhBAUvvNOgQQMTl0q7M96vv/6Knj174ujRo5gxYwZYEasIElIY6t4nhFg8c52Hn56ejpkzZ2L//v38MalUirS0NLp2T0qFWvqEEItmroF/8+ZNdO/eXS/wx4wZg5MnT1Lgk1Kjlj4hxGKZY+AzxrBx40YsWrQICoUCAODg4IDVq1dj4MCBJisXqRoo9AkhFunevXtmF/jJycn43//+h6NHj/LHWrVqhS1btsDT09Nk5SJVB3XvE0IskouLCyQSCQDzCHwAOHTokF7gT5o0CX/99RcFPik31NInhFgkNzc3DB8+HBEREejRo4fJAx8ARo8ejRMnTuDy5ctYt24devXqZeoikSqGQp8QYrHc3NzQs2dPkz2/TCaDjY0N/zPHcfjhhx+Qk5OD2rVrm6xcpOqi7n1CiEWQSqU4fvy42cxx//vvv9G6dWucPXtW73i1atUo8InRUOgTQqo83Sj9Gzdu4OjRoyYNfqVSiSVLlmDw4MF4/vw5JkyYgMTERJOVh1gW6t4nhFRpeaflmVJ8fDzGjRuHy5cv88f8/f1pz3tSYeidRgipssxpHv6ff/6JwMBAPvCtrKywePFi/Pbbb3B1da3w8hDLRC19QkiVZC6BL5fL8fnnn2PTpk38sXr16mHLli1o06ZNhZaFEAp9QkiVYy6B/+zZM0yfPh137tzhj7311ltYvXo1nJycKrQshAAU+oSQKsZcAh8ANBoNHj16BACwtrbGl19+iffff98s1gQglomu6RNCqgyNRoOLFy+aReADQN26dfHVV1+hSZMmOHnyJMaMGUOBT0yKQp8QUmUIBAIMHToUrq6uJgl8qVSK7OxsvWNvv/02wsPD4evrW2HlIKQwFPqEkCrFzs4OI0eOrNDAZ4xh27Zt6NGjB+bPn5/vdmtr6wopByFFodAnhFRqsbGx/Ba0OjY2NhUW+Onp6Rg7dixmzJiBnJwc/PLLLzh27FiFPDchJUWhTwiptKRSKfbs2YO9e/fmC/6KcP36dXTr1g0HDx7kj40dOxbdunWr8LIQUhwU+oSQSin3KP34+Hhcv369wp6bMYZ169ahT58+iI2NBQA4Ojri559/xooVK/gtewkxNzRljxBS6RQ0La99+/YV8tyvXr3C5MmTceLECf5YmzZtsGXLFtSrV69CykBIaVHoE0IqFVPOw3/8+DH69OmDhIQE/tiUKVPwySefQCQSGf35CSkrCn1CSKVh6oV36tSpgyZNmiAhIQGurq5Yt24dgoODK+S5CSkPdE2fEFIpmDrwAUAoFGLDhg0YMGAAwsLCKPBJpUMtfUKI2Xv8+LFJAv/06dNwdHRE27Zt+WPu7u746aefjPq8hBgLtfQJIWavdu3aaNCgAYCKCXylUolFixZhyJAhGDt2LFJSUoz2XIRUJAp9QojZs7Kywttvv43g4GCjB358fDzefPNNfP/99wCAJ0+e4Oeffzba8xFSkSj0CSFmSa1W6/1sZWWFNm3aGDXwDx8+jMDAQFy5cgUAIBKJsGTJEkydOtVoz0lIRaLQJ4SYHalUiq1btyI9Pb1Cni8nJwdz5szB6NGjkZaWBgCoX78+jh49ismTJ9POeKTKoNAnhJgV3Sj95ORk7Ny5E1lZWUZ9vvv376NXr17YsmULf2zgwIEICwtDq1atjPrchFQ0Gr1PCDEbeafl1atXD7a2tkZ7vqysLPTt2xevXr0CAEgkEnz55ZcYPXo0te5JlUQtfUKIWTDFPHw7Ozt88sknAAAvLy+cOnUK77//PgU+qbKopU8IMTlTLrwzevRoAMCQIUNgZ2dn9OcjxJSopU8IMamKCnzGGH788UcsWbJE7zjHcXj//fcp8IlFoJY+IcRkKirw09LSMGXKFBw+fBgA0L59e/Tq1atcn4OQyoBa+oQQk0lISDB64F+9ehVBQUF84OuOEWKJqKVPCDGZbt26QaPRQC6Xl3vgazQarF27FkuWLIFKpQIAODs7Y82aNejXr1+5PQ8hlQmFPiHEZDiOQ48ePfj/Ly8vX77EpEmTcOrUKf5Yu3btsGXLFtStW7fcnoeQyoa69wkhFebevXt4+vSp3jGO48o18P/55x8EBQXxgc9xHKZPn47Dhw9T4BOLV+aWvlwuh7W1dXmUhRBShekG7YlEIgwdOhR16tQp9+dgjOGLL75AQkICAKBGjRpYv34935tAiKUrc0s/JCQER44cKY+yEEKqqNyj9OVyOe7evWuU5+E4Dhs3boSTkxOCgoIQHh5OgU9ILqUK/UuXLvH///bbb2PBggUYNmwYbt++XW4FI4RUDQVNywsODi638+ddm79evXo4duwY9u3bh5o1a5bb8xBSFZQo9F+9eoVZs2Zh+fLl/LGpU6fir7/+gru7O4YPH47Zs2fjxYsX5V5QQkjlY8x5+AqFAgsXLkSPHj2QkZGhd5u3tzeEQmGZn4OQqqZEod+nTx+4ublhz549esdr166N1atX4+eff8b9+/fRu3dv/PDDD8jJySnXwhJCKg9jBn5cXBz69u2LtWvX4v79+5g9ezYYY2U+LyFVXYlCv23btjh37hzu379f6O2///475s+fj127dqF37944dOhQuRSUEFJ5GDPw//jjDwQFBeH69esAAJFIhICAgDKflxBLUKLQX7t2LWbNmoUZM2bkuy09PR0XLlzAxo0bcfbsWTDG8Pz5c8yZMwfDhg3DvXv3yq3QhBDzlZ6ejsOHD5d74MtkMsycORNjxoxBeno6AKBBgwY4duwYJkyYQDvjEVIMJZ6yFxQUhI4dO/I/z5o1CxEREXj8+DEYY3B1dUVAQADGjBmDli1bwsXFBd9//z2GDBmClStX0nrXhFRxjo6OCAkJwdGjR+Hn51cugX/v3j2MHTtWb9T/oEGD8O2338LR0bGsRSbEYpRqnr5YLOb//9GjR+jatSsCAgIQEBBQ4OIXq1evxqpVq/D1119T6BNiAfz9/eHi4oK6deuWOfB/++03zJo1C9nZ2QAAGxsbLFu2DO+99x617gkpoTIvzrN///5i3a9nz57YtGlTWZ+OEGKG0tPT87W4PTw8yuXcL1++5APfx8cHW7duRdOmTcvl3IRYmgpbhtfb2xsbN24s0WPOnTuHTp06Yfr06XrH4+Pj4e3tDT8/P70/R48e5e+zbds2hISEoHXr1ggNDaU1BAgxkujoaGzatMloC+5MmjQJb7zxBkaNGoVTp05R4BNSBhW24Y61tTUCAwOLff/Nmzdj3759qF+/fr7bMjIyIBKJEBERUeBjT506hbVr12LLli3w9vbG9u3bMXHiRJw4cQJ2dnalfg2EEH1xcXGIioqCUCjE4cOH4ejoWKb17RljuH79Olq3bs0fEwgE+PXXX/UuKxJSVokZMuy6EYu0HAWcJGKEtvSEm4ONqYtldGa74Y61tXWhoZ+WlgYnJ6dCH7t3714MGjQILVq0gEQiwdixYyEQCHD27FkjlpgQyxIdHY3w8HB+lL6fn1+Z1tNPTU3F6NGj0atXL5w7d07vNgp8Ul7UGg2WnLiFEdvP4WDEY4Q9eIGDEY8xYvs5LDlxC+rX7+eqymy31h01alSht6Wnp0Oj0WDChAm4ceMGnJ2dERoaitGjR4PjOERGRqJv3778/TmOg4+PDyIiIoq9jzZjjL+OWFXJZDK9v4k+qp/CRUdH4+DBg2CMQaVSwdfXF0FBQaWuq2vXrmHSpEn8Dnzjx4/HP//8AxubytvyovePYaaqn2V/R+HvBy9gJdS2edWvF3VSqRmORz2FQqnCvO6mv4RUWP0wxso0gNVsQ98QkUiE+vXrY+TIkfj+++9x6dIlTJs2DXZ2dhgyZAhSU1Pz9QQ4OTkhJSWl2M+hVCoRFRVV3kU3S7GxsaYuglmj+tEXFxeH8PBwfgU8V1dXeHh4QCqVlvhcGo0Ge/bswU8//cT3GDg4OGDy5MlVpt6ryuswloqsn2SZEifuPAUDoCjkPicj4xDopEQ1G1GFlcuQguqnLD1flTL0e/ToobdzVteuXTFs2DD8/vvvGDJkSIGPKem3I5FIhMaNG5e5rOZMJpMhNjYWnp6elbpFZSxUP/lFR0cjKioK1atXh0qlgqurK0JDQ2Fra1vic718+RJTp05FWFgYf6xdu3b44YcfULt27fIstknQ+8cwU9TPugv3YW1rC4GBLNAwhls5NpjUqkmFlKkwhdXPgwcPynTeShn6Balbty5OnDgBAHBxccnXqk9LS0OTJsX/JXIcV6oPssrIxsbGYl5raVD9aEmlUpw4cQJCoRBCoRC+vr7w8PCAra1tiesnPDwcH330Eb85F8dxmDFjBj7++GNYWVWZjyUA9P4pSkXWT7YGEBWxEZMQgExjPp//eeunrGtTmO1APkOOHz+O3bt36x17+PAhPy/Y19cXkZGR/G1qtRp3795FixYtKrSchFQldnZ2/M51/v7+6NWrV6k+gLZt24a3336bD3w3NzccOHAAn3zySZULfGJenCRiaIrYmEnDGBwl5tG1bwyVMvSFQiGWLVuGCxcuQKVS4eLFi9i/fz9GjhwJAAgNDcXBgwdx8+ZNyGQyrF+/HmKxGN26dTNtwQmpxDw8PDB06FC0atWqTEvrdu7cmW+5dO/eHeHh4QgKCirPohJSoNCWnhAKDL9vrQQChLb0rJgCmYDZfq328/MDAKhUKgDaufcAEBERgeDgYMybNw+LFy9GYmIi6tSpg4ULFyI4OBgAEBgYiBkzZmDu3LlISkpC8+bNsWnTJkgkEtO8GEKqCA8PjzKvtNekSROsXLkSCQkJmDJlCgSCStn2IJWQm4MNghrVxKnoBFgV8L5TaTQI9qpVpefrm23oF7bwjs6wYcMwbNiwQm8fMWIERowYUd7FIsRiSKVSJCUloUuXLqVu1SsUCmzYsAHjxo3TG4xk6N8uIcY0P1jboAyPSYRKo4GA46BhDFYCAYK9avG3V1VmG/qEENORSqU4dOgQNBoNGGPo2rVriYP/0aNH+PDDD3Hjxg08fvwYK1euNFJpCSk+oUCAhb1a8Cvypeco4SQRIbSVJ2rYV90Wvg6FPiFET+7AB4DMzMwSn+PAgQOYPn06MjIyAADbt2/H//73vwJX2CTEFNwcbDA10PSL8FQ0uphGCOHlDXx/f/8SDdrLzs7GtGnT8OGHH/KB37BhQ5w4cYICnxAzQC19QgiAsge+VCrFBx98oLcy35AhQ7By5Uo4ODgYpcyEkJKhlj4hpEyBzxjDr7/+ip49e/KBb2trizVr1mDDhg0U+ISYEWrpE2LhytrC//PPPzF16lT+52bNmmHr1q3w9vY2SnkJIaVHLX1CLJhKpcLZs2dLHfgA0KdPH3Tu3BkAMGbMGJw8eZICnxAzRS19QiyYlZUVhg0bhl27dsHT07NUK+0JhUJs3LgRV65cwYABA4xUUkJIeaCWPiEWzsXFBe+9916xAj8lJQWjR4/GlStX9I7Xrl2bAp+QSoBCnxAL8+TJE6jVar1jDg4ORQb+v//+i8DAQBw+fBjjxo1DWlqaMYtJCDECCn1CLIhUKsXOnTvxxx9/5Av+wmg0Gnz77bfo378/nj59CkC7YM+jR4+MWVRCiBFQ6BNiIXKP0o+OjsatW7eKfExiYiLeeecdLF26lP+S0KlTJ4SFhSEgIMDIJSaElDcayEdMTrcGdlqOAk4SMUJbelbpXa5MoaBpeS1btjT4mL///hsTJ05EYmIiAIDjOMyePRuzZ8+GUChEdna20ctNCClfFPrEZNQaDb48FYGwmBdQaxi/29XhyHgENaqJ+cF+ENK2q2VW0nn4SqUSX331Fb777jswxgAA7u7u2LhxI7p27Vph5SaElD/6RCUm8+WpCJyKTgBjgOB1AAk4DowBp6IT8OUpw9srk6KVZuGdmJgYrFu3jg/8nj17IiwsjAKfkCqAQp+YRGKGDGExL2BVSEveSiBAeEwiEjNkFVyyqqO0K+35+PhgyZIlsLKywqJFi7B7927UqFGjIopMCDEyCn1iErtuxEKtYQbvo9JosOtGbMUUqIp59OhRsQNfLpdDqVTqHRs7diz++ecfTJkyBQK6xEJIlUH/molJpOUo+C79wgg4Duk5SoP3IQWrVasW3N3dARgO/JiYGPTu3RtLly7VO85xHLy8vCqkrISQikMD+YhJOEnE0DBmMPg1jMFRIqrAUlUdEokEQ4cOxY0bN9ChQ4cCA3/fvn2YMWMGMjMzcevWLXTp0gVvvPGGCUpLCKko1NInJhHa0hNCgeGWvpVAgNCWnhVToCpA15WvI5FI0LFjx3yBn5WVhf/9738YP348MjMzAQCNGzdGrVq1KqyshBDToNAnJuHmYIOgRjWhyhNUOiqNBoGN3Gi+fjFJpVL8+uuvkMkMD3y8e/cuevbsiR07dvDHhg0bhjNnzsDX19fYxSSEmBiFPjGZ+cF+CPaqxc/PB8B3+Qd71cL8YD8Tl7By0I3ST0hIwO7duyGXy/PdhzGGn3/+GcHBwYiOjgYA2NnZYd26dVi/fj3s7e0rutiEEBOga/rEZIQCARb2asGvyJeeo4STRITQVp6oYU8t/OLIOy3Pzc0NYrFY7z6ZmZmYOnUqfv/9d/5Y8+bN8eOPP6JJkyYVWl5CiGlR6BOTc3OwwdTApqYuRqVT3Hn4YrEYcXFx/M9jx47FkiVLIJFIKrS8hBDTo+59Qiqhkiy8IxaLsWXLFnh4eGDbtm1YsWIFBT4hFopa+oRUMkUF/qtXr5CSkoLGjRvzj/H09MTVq1chEtEUSEIsGbX0CalEigr8CxcuIDAwECNHjkRWVpbeYynwCSEU+oRUIg8ePCgw8NVqNVasWIG33noLCQkJuH//PpYsWWLi0hJCzA117xNSifTt2xcajQZWVlZ84D9//hwTJkxAeHg4f7+uXbti6tSpJiwpIcQcUegTUokIBAK8+eab4DgOHMfh9OnTmDhxIl6+fMnfPmfOHMycORNCodDEpSWEmBsKfULMWHR0NKpXr47q1avzxwQCAZRKJb744gt8//33/PFatWph06ZN6Ny5symKSgipBCj0CTFTukF7NjY2GDFiBB/8arUaAwcOxMWLF/n79urVC2vXrtX7ckAIIXnRQD5CzFDuUfpZWVm4desWf5tQKOR3wxOJRFiyZAl27txJgU8IKRK19AkxMwVNy+vevbvefaZMmYLY2Fi89957aN26tSmKSQiphKilT4gZKSjwmzRporcrHqC9rv/dd99R4BNCSoRa+oSYiYICPz09HT169IBMJkPDhg3RqVMnE5eSEFKZUUufEDOQN/C9vLxw5MgRTJo0CVlZWdBoNFixYoWJS0kIqeyopU+Iib169Uov8J2dnfHVV1/hwYMH/H1GjBiB5cuXm6qIhJAqgkKfEBOrXr06unTpgvDwcCQlJeG7776DQqEAANjZ2eGbb77B0KFDTVxKQkhVQN37hJgBX19fXLt2DT/99BMf+P7+/vj7778p8Akh5YZCnxATyM7O1vt5woQJOH36NP/z+PHjcfz4cb3tcQkhpKwo9AmpYFKpFBs2bMCjR4/4Y59++ilsbGzg5OSEX3/9FV999RWsra1NWEpCSFVEoU9IBdKN0lcoFNi/fz8SExMBAD4+Pvjxxx9x7tw59OvXz8SlJIRUVRT6hFQQXeDHxsZi3759aNy4MWrUqMHfHhISgrp165qwhISQqo5Cn5AKIJVK8ccffyA8PBy//fYbHj58iAsXLoDjOFMXjRBiQWjKHiFGJpVKsWPHDhw6dAjx8fH88fv370OhUEAsFpuwdIQQS0KhT4gRSaVSrFq1CkeOHIFMJgMAcByH+fPnY9q0aRAKhSYuISHEklDoE2IkERERmD17Ni5fvswfq1WrFrZu3YoOHTqYsGSEEEtFoU+IEcTGxmLChAmIiorij4WEhGDt2rWoVq2aCUtGCLFkNJCPECPYvXs3H/hCoRBffPEFdu7cSYFPCDEpaukTYgQzZ85EWFgYXrx4gS1btqBly5amLhIhhFDoE1IeMjIy8PTpU2RlZaF169awsrLCTz/9BBsbGzg6Opq6eIQQAoBC32wlZsiw60Ys0nIUcJKIEdrSE24ONqYuFinArl278PHHH+Odd95BzZo1AQCtW7fm/58QQswFhb6ZUWs0+PJUBMJiXkCtYRBwHDSM4XBkPIIa1cT8YD8IBTQUwxxkZmZi9uzZ2L17NwDg4MGDeP/99/HixQswxmjhHUKI2aHQNzNfnorAqegEWAkEELwODQHHgTHgVHQCAGBhrxamLCKBdjre2LFj8eDBA/5Y/fr14e/vjz59+lDgE0LMEoW+GUnMkCEs5gWsCmnJWwkECI9JRGKGjLr6TYQxhq1bt2LhwoWQy+UAAJFIhJCQEAwfPpwCnxBi1ij0zciuG7F8l35hVBoNdt2IxdTAphVYMgIAqampmDJlCo4cOcIfq1mzJt566y0EBQVR4BNCzB6FvhlJy1EYDHxA29WfnqOsoBIRnevXr2PMmDF6a+e3bt0a3bp1Q8uWLSnwCSGVAoW+GXGSiKFhhlv6GsbgKBFVYKkIAAgEAjx//hwAIJFI0LdvXzRu3Jiu4RNCKhUaBm5GQlt6QigwHB5WAgFCW3pWTIEILyAgAIsXL0b79u3x559/ws/PjwKfEFLpUEvfjLg52CCoUU1+9H5eKo0GwV61aBBfBbh69SqaNGmid+yjjz7Chx9+CCsrKzRo0ABOTk4U+ISQSsWsW/rnzp1Dp06dMH369Hy3nT9/HoMHD0arVq3Qr18/HDx4UO/2bdu2ISQkBK1bt0ZoaChu375dQaUum/nBfgj2qsXPzwfAd/kHe9XC/GA/E5ewalOpVPjyyy8REhKCb775BgDw/Plzft69lZX2e7KzszMFPiGk0jHblv7mzZuxb98+1K9fP99tL168wOTJk7FgwQL0798f169fx4QJE9CwYUP4+/vj1KlTWLt2LbZs2QJvb29s374dEydOxIkTJ2BnZ2eCV1N8QoEAC3u14FfkS89RwkkiQmgrT9Swpxa+MT19+hTjx4/HxYsXAQBr166Fg4MDFAoF2rRpg169elHQE0IqNbNt6VtbWxca+keOHEGDBg0wePBgWFtbo2PHjujZsyf27dsHANi7dy8GDRqEFi1aQCKRYOzYsRAIBDh79mwFv4rSc3OwwdTApljYyx9TAptS4BvZ8ePHERQUxAe+UCjE2LFj8eTJE2g0Gty4cQN37941cSkJIaRszLalP2rUqEJvi4yMRLNmzfSONW3aFEePHuVv79u3L38bx3Hw8fFBREQE+vXrV6znZ4whOzu7FCWvPGQymd7flkihUGDZsmXYvHkzf6x27dqYO3cuHjx4ALlcDpVKBV9fX3h6elb590RJ0PvHMKofw6h+DCusfsq6xLfZhr4hqamp+TYzcXZ2RkpKCn+7k5OT3u1OTk787cWhVCr5/dCrutjYWFMXwSSePXuGL774AtHR0fyxzp07Y8iQIbh69SrY6zEVrq6u8PDwgFQqNVVRzZqlvn+Ki+rHMKofwwqqH7FYXOrzVcrQL0hR335K+u1IJBKhcePG5VE0syWTyRAbGwtPT0/Y2FjW5YPbt29j8uTJyMzMBKD9R7RgwQJ07twZf/31F6pXrw6VSgVXV1eEhobC1tbWxCU2P5b8/ikOqh/DqH4MK6x+cu/3URqVMvRdXFyQmpqqdyw1NRUuLi787Xlb9WlpafmmYBnCcZzFfNDb2NhYzGvVadmyJRo1aoRbt26hYcOG2Lp1K6ytrXHo0CEIhUIIhUL4+vrCw8MDtra2Flc/JWGJ75+SoPoxjOrHsLz1U9bBxGY7kM8QPz8/3LlzR+/YnTt30KKFdvc5X19fREZG8rep1WrcvXuXv50Qa2trbN26Fe+99x7+/vtv2NnZ4dChQ9BoNAAAf39/Gq1PCKlyKmXo9+/fH0+fPsXevXshl8sRFhaGsLAwDB06FAAQGhqKgwcP4ubNm5DJZFi/fj3EYjG6detm2oITk2CMYceOHTh/7SZWh0fh8xO3sDo8CvY1amH16tVwcHBAzZo14ezsDAC00h4hpMoy2+59Pz/tIjQqlQoAcOrUKQDafcyrV6+OjRs34uuvv8ayZctQt25drFixAj4+PgCAwMBAzJgxA3PnzkVSUhKaN2+OTZs2QSKRmObFEJPJyMjAjBkzsH//fkjc6qLJR0thZS2BhjEcjoxHUKOamB/sBwcHB4SGhuLmzZvo0qULBT4hpEoy29CPiIgweHvbtm2xd+/eQm8fMWIERowYUd7FIpXIrVu3MHbsWDx8+BAAkJP4BOlRV1AtoKt2xUMNw6noBADAwl4t4ODggK5du5qyyIQQYlSVsnufEEMYY9i4cSNCQkL4wBdY28Bz2FRUC9CGuizxCVJu/QMh0yA8JhGJGTRXmBBS9VHokyolJSUF7733HubNmweFQgEAsKnTED6Tv4KLX0cA2sBPvXMJ8lfPkXzrPJRKBXbdiDVhqQkhpGKYbfc+ISX177//Yty4cXj69Cl/rFW/IVC3HQDB641ydIEPph2lL7Sxg0BohfQcpUnKTAghFYlCn1QJz58/x9tvvw25XA4AqFatGtatW4coiQcORjwGkD/wbWo3gJNPazAAjhKRqYpOCCEVhrr3SaWSmCHTm3anuxbv7u6OWbNmAQA6duyIsLAw9OrVC6EtPSEUcIUGPsdxsBIIENrS01QviRBCKgy19C3E3YQULDx2C6kyBZxtxFjSuwU8naxNXaxiU2s0+PJUBMJiXkCtYdrR93mm3U2bNg3u7u4YNmwYv++9m4MNfK1lOBbxLwTQrqWfO/BVGg2CvWrBzYGWASWEVH0U+mYkMUOGXTdikZajgJNEjNCWnmUOI4VKhT6bz+DGk2TkKNXgOIAx4O8Hz+FfywnL2rqWU+mN68tTETgVnQArgQCcRoNnZ/ZCILaBe9AAvWl3I0eO1HucVCpFrSQpGlazQ1xKFqzd6/Nd+kKOQ7BXLcwP9sv3fIkZMvxy6T4ePElC4xQrjGrvRV8MCCGVHoW+GShOK1YoKN2VmN6bzuBibCI0DGAAuNd/ZylUuBT3ClOyshHm17xcX095S8yQISzmBawEAihSXyJ2zxpkPb4HCASw9/SBfX1vftpd7mBmjCEiIgKMMQQ2qon6TXzwwtULGXIVnCQihLbyRA17/SDP/btQqNTIyc7G3YxnOHb/RZl/F4QQYmoU+mYgdytW8HolOAHHgTHotWJL6m5CCi7FJUHNAA7aP8j1t5oBd15mI+pFKlo3MN8NL3bdiIVaw5AuvYbHB9ZDLct6fQuHnMQnsK/vDZVGg103YjE1sCn/OI7jMHDgQOzfvx+Ojo7FWlq3PH8Xxui5IZaH3kekPFHom1juVmxBrASCAluxxTHnyDUo1Bo+vPLhAJUG+OT4HRybULukRa8wrzIy8eyvn5F08Rh/TOzsCs9hU2Hnod05UcBxBU67E4lEGDx4MIRCYZGBXx6/i8QMGXZcf4Qjd5/gaWo2qttZQ2IlLLeeG2I5jNkDSCwXhb6J6VqxhQYzUGArtjiikzKKDDqOA2JeZpbovBUpJiYG+z+bgqSH9/hjTs3aod7b42FlY88f0zAGR4kIDx48gJubGxwdHfnbdIP6ilKW30XuD+iHLzOQIlOA4zgkZeXAWSJG/Wr2Ze65IZbFWD2AxLLR10QTS8tRGAwZoPBWbFFEQg5MwwzeR8MAK6F5bi6zb98+dO/eHQmvA5+zEqFu/w/QIHS6XuAD2lZ4WzsFDhw4gN9++w3p6eklfr6y/C50H9A5SjXScpQQcJz2MgoDUmQKxCVn8uWkZX9JUUrS60RISVDom5iTRAwNKyqYWakWj+nfrC6K2iyOA9DX273E5zY2hUKBlStXIjNTG5YutTzQaNxi1Giff497lUaD5tbZ+Of0cWg0GiQnJ+PmzZslfs7S/i5yf0AnZuaA5TkHByA1RwmFWsOXl5b9JYboep0MofcRKQ0KfRPTLR5jSGkXj5nRrTkcrEXQFPLhwTQMtiIBpnTxLvG5jU0sFuPHH3+ERCLB8OHDcf3iOfQP6shf1wS0ASzgOLS0laNWkhQajTZU/f39S7VbXml/F7k/oNUaVuAlFcYYXmTmACh9zw2xHMbsASSWja7pm5ibgw2CGtXkr93lVZbFY9wcbPB/Xb3x/TkpsuQqMAYIBNotZTkOsBdbYXATR9Swl5THSykTxhgyMjL0rsU3a9YM//zzDxo2bAhAe/1SN5I5PUcJJ4kIbe0VOHfqOP9FwN/fv1ij9AtS2t9F7g9ooYADY/mDnwOgft3SL23PTUFoZHfVpOt1MhT85fk+IpaDQt8M6BaHCY9JhEqj4VuzVgJBoYvHFNenvVrASiDAn5FPEPMqE2rGIOQ4NKpujze83NHfzXAXYkVIT0/H9OnT8ejRIxw9ehTW1v+tFKgLfB03Bxt+EJ1UKsWhQ8f1WvilDXyd3L8LZa4eBZGBhXxyf0C72UvwKkue7z4MgFCo/SJRHsv+0sjuqi20pScOR8bD0NUmWj6alAaFvhkQCgQFtmILWjymtOf+qKNXvnPbCRiioqJKdd7yamHeuHEDH374IR49egQAWLx4Mb788ssiH6cN/EPlGviA/u/il0vRiHmSgMYetTGqfZNCfxe5P6CtrYRwthEjOVuu10rjOA417SXltuwvjeyu2ozZA0gsG4W+Gcndiq2Ic2dnZ5f4POXVwmSMYcOGDVi0aBGUSu11SUdHR7Rv377Ixz5//twogZ+bm4MNJnVqgqgoFZo2bQxb28I/XPN+QNd3sQMApMoU2kF9HAdnaytIrIRoVbca7K1F+PzErVJ/WTLm2g7EfBizB5BYLgp9UiLl0cJMTk7G5MmTcfz4cf5Y69atsWXLFtSvX7/IMtSsWRMBAQG4fv26UQK/NPQ+oBmDZzV7yJQqJGcrUMfJFm82q4MXGTJcffKqzN3xxlzbgZgPY/YAEstFoU+KrTxamBcvXsS4cePw7Nkz/tj//vc/LFiwACJR8QYlcRyHN954A3Xr1kXTpk3LPfB1H7IvM7IgS03G/zxyUN/W8DLFRX1ALzlxCxfjXpZLdzyN7LYsxuwBJJaHQt9CFbaLnKFr9YZamJlyJR6lZEKl0uCNDSex692uaFbLRe8+cxd/gU3fr+L3tHd2qYaNG9bjjTfeKLK8crlcb4Afx3Fo1qxZWaogn7yXLhhjyMzMxPW9l9G9Sa1itcYL+oAu7+54GtlNCCktCn0Lowu2U9EJeJqahRyFEpInWdh35wlSZAqo1AwCAQd3BxtYCTi97ue8LUyFWoPn6dl4li6DQqUNcoGAQ3RSOgJ/OI4Wdavh6LgeAKDd3jc8gg98VqsJ0t4Yg68eMAR1V0FsYKlcqVSKEydOYMiQIahVq1aJXm9JBhzmvXShZrpu+LINjivv7nga2U0IKS0KfQuz9GQEfrr8ABlyJTQM0KjVSM5RIy4lGxoA1lYCSKyESM6W82vG6wJP18LkOA5xyZlIzVEgQ67E6+nn2rnoGgYrKyEYgGvxr9Bn8xng9f8L2vYHEmKAuj7gWveBhhPg4qNENP3qEKYENi0wkHOP0t+9ezdGjx4NFxf9HoSClHTAoTEHx5V3dzyN7CaElBZN5LUgiRky/Ho1Rhsur7fbVagZFGoNXuc2lGqNtgWZa814XeC90cQdQoE28FNkCihVGqg1+tv2MmhH5jO1GoIXD3H18Utci38FIceBEwqBAdOAtv0g1zBkK1VQaYD4tGxsvxqDEdvPYcmJW1C/HpWfd1qel5cXnJ2di/Vada12xlDgNfQvT0Xo3d+Yy54aY6nl+cF+CPaqVeAKhTSymxBSGGrpW5DNF6ORnC3H661gwBiDOlcYcdBuwCNXq2FjJdRbM95KwOHk/edoXbc6rj15BQE4yHVN/NcYAAEHaNJfgYX9DC4pHvI3p0Hj6gEHa22gcQIhclRqKNXaVQE5ThtWcalZ8JOI+V6FIfWsSz0trzStdmMOjjNGdzyN7CaElAaFvgU5H5uE/9rk4DeAgd5R6LV4dWvGezjZIj1HCXdHG7hIxEjLUWqXm4U27AFt4FvF3obkn53gFNrdv6zDt0P29lz+fBoGqF4vAwz+cRxUau1ZrAQCHL94HarLCbCx0oZ2SaflleYaujEHxxl7qWUa2U0IKS4K/UKkyhRYHR5VtdYy5wC8XiwG+C+sdf9fUNzp1ozXBV5ajgINqjtArlLj1rNkZCs1EHAAp1LC+sofEEWd++/BDtUh7zoCyDP4L1cRAGjDVLe9ryzxCVLu/IvbNRzRvr5rqebh5261K9QavMjMgVqtgVAoQE17CcRCQb5We+7WuO4xSpUaGpUSdSVqCAWCMg2OK++FVmjNfUJIaVDoF0KmVONgxOMqtZZ5p/o18G/sS/7nwmI0905zujXjdYG360YsNIzB2kqIpm5OuPksBYL0JFif+QnC5Kf849QNW0LYbSSsRZI8rWeWb7tfjuPQwMUessQnSL1zCRxjkKvUpV54x0kihpoxxKdkITVHof2S8fq1vMrKgbNEDA8XO71Wu5uDDbo2rMkPctR1xavVamQkZsBRIsKYdo1LHazl1R1Pa+4TQsqCQt+AqraW+fiOXvjpSgySs7TrwouFAijVGggEHJiGQQNtF721UMg/huM4VLcRI7CRG9wcbPRaxA4SMezjroOF7QKnUgAAmNAKig7vQOwXCA2ANh7VAYAfzAfodqHTnl/DGBytRbC3FiFbKQeYBgxAfa+mpV5pL7SlJ9aci0KKTKE3yJAD+AGKHIcCWu2Mv4+uO4K9Tv/8fSOlU9bueFpznxBSFtQkKIbcA78qMzcHG4xq0xDONmL+mJDTBj6gDXyxQAAO/40Gd7ERoW+zOnz3s+76tEqjwbOTu4HTP/OBr3aqCdlbs6Bp2hkCjkNrj+o4Oq4Hjo7rgdavw99K8N/gPQbA0VoE/9raKXi2dRrB0bsV7Os0xKKP3i3TSnu6WQR5aQDkqNRIyVZg08Vo/neamCHDuYeJaFjdAU1rOsHVXgIniQguEiv41HBAw+oO+OdhkknfAyUZoEgIIQWhln4xVZW1zBe84Q8Bx+HkvQQ8S8tGjlyObA2g0TBUs7VGLUcbJGbKwRiDd01HbB3WEe6Odnrn0H0BOJrQBon/HAJTq2Hv3wU5HQfD1c4eLWq74Iu+AWjq/t98+tMTe+FuQgoWHruFm0+TkZ6jRMPq9rC31h8YZ127AXo2cUdNR8PL3hqy60YsPJxsAaa/6U2OUgXV6+voGo0GP195iLMxLxDUqCbsrUV8d7m1lRAeznZQazTIzsqC2Erb82Hq9wCtuU8IKSsK/WKqKmuZ595qN/fWsX2ae+Bk9PNiXWvOfY4Z6mRoRNbo8Ea/Iq9PN6vlgv1juvHXpY9fvI5stRq27vXKdfewtBwFhAIBPKvZQ65SIzEzBy+z5OA4DrZCAX/NW8MY3y1uJRQYbcpeeaE19wkhZUWhX0xVbS3z/FvH2qJZrpZ5XmlpadiwYQNmzpwJq9dL5ro52GD7V5+U+LmFAgGG1LOG6nICIhJT4FG/Bho18Sq3Oea5p99ZWwlR08EGr7LlkFj9N1aBMcYPWLQSCPAkNRvVbcWwERX+T8LU7wFac58QUlZ0Tb+YLHkt82vXrqFbt25Yvnw5li9fXubz6Vbas7ESoJ1HdfSpY40pgU3LbVGZ0JaeejMQXmTm5FsYh+M4uNlL+J9d7azxKltu8Lymfg/kfV0FMXUZCSHmjVr6xVCZ1jIvz/nbGo0GX69ajZVffQmNWg0A2LJ1KyZPngyF0LpUz5N3aV1/f3+EhIQUu/zFeX15F8NRqzV60xM1TDt+wTpXy19iJURdJzuoNJoSLaBTkfPlac19QkhZUegbUJ7XmcuTbkBcqkwBiZUA/rVdIBEJcenxS2TkKPnpXGWZv52YlIQ+w0fh0Y1L/DFbjyaoO/R/eGfXZX5znZI8z4Vrt7Dyx+2QKVSQWAkxNLgLPy2vqPnnH/dojuVnInHi3jM8T8/hu7n33YpFL+/a+Z4392I4AsHr+QivNwuqZmuN+i76gxM1jOEtXw9kypU4Ff0cz9KzoVJroFYqUF9ig15N6+i9B0w1X768F/kpDd0XnZcZWZClJuN/Hjmob1v6gZeEkIpDoV8IG5EQb/vVM6u1zBUqFfpsPoNbT5Kh0mig1Gg3yzkZnQCRUACRUAAhx8HZRoz6Lnalnr99/vx5DB81Blkp/y3kUzNwAGr1HIK4tBy8in+F6rbW8KxmD6DoeeJqjQYztx3GyaN/QaPRtroltTyx5YUNHpy8jfnBfkXOP//7wXM8epWJdN3yv6/n0Cdny/EkNRsaxvBZSAD/nLkXw9l8MRo/Xo6BlUDbpS/O1cLXsRIIMDygPrZcegAN0+hNyWcFzM831Xx5U665n/eLDmMMmZmZuL73Mro3qUULAxFSCVDoF8LZRowp7cpv2lN5dAP32XwG1+JfAYxBplJDpdHOrWcAclQaqDQM9mIrJL++Nq0LZd387bsJKTh5/zlfhoE+NfXOr1arsXLlSqxYsYLvfreyc0T9wZPh2KQF5Co1UmUKCDmO34hHLPzvQ76w7WdnbjuMY3/+CcHrxW9sajeAk09rABxORScgU67EtSfJhc4/1zDgatxLWAkEsBJw/Px93d+pMgV+vfoIEzt5F9jV/0mvFtAA+brFdcvtKlRqNHd3xnfhUfg37qXeMsEcx0GTJ8iNuQ1vcZlizf28X3TUTNfDQQsDEVJZUOgbWXl1A99NSMGN+FdQqjWQqzT8Wvm5d4NVabS75gk5DqkyBeQqNaythGCMIeZVBgZtC0MtRxuoNAzPM2RYHX4XtSQcfq3jiYa2tti8ebPeQD37hs3hOeT/IHLQjupPzMzRa2XrNuLJLe888cdJyTh14jgEr1vLusDXBbaVQIA/7jxBdTtrvdH1uT1Ny369ORAHqwIGsgk4DinZcmy6GI0FhYRO7m5xpUaD+JQspMi0Ow4624iRki3HxvP3oGTaL1EaDeP/fp6dghp21hAJBPioo8wi58ubwxcdQkjZUV+ckZV0X/fCLDx2CzKVBso8g9Lyxk6OUjvgjjGGxMwcAEBcShZSZAoo1Bo8TsnC3RepeJUlR6pMiYikbARvPoslJ27hvVGj4OfnB44ToFbPIWj8/id84APaa/h8KxvajXjyyjtP/PeoF3Bs3gGcQJgv8HXkajWSsgofOZ8uUxa5DC5jDBfiXhZ6u65bfMe7XWArFkLDGGrYSdCsphPqu9gh+mUGMpUa5Ki0X6qUGgbV66WJVRqGhIwcXIhLwq/XHlrkfHndFx1DdF90CCHmi1r6RlSeraMXGTKoNZrX3c2s0M1ydJ/L2sFxjO+S5zgOGXKlNrjx3wY03Ouu+r/uPgEAbN26FetOXsENTbV84SwUcP+19KHdiCf/8+vPE0/LUcCmujus2vaElZ1jgUvrigQCqFTqwl88p/uPgaDlOBjcsD4XhUqDhtUd+J9jkzORKVMYXFmfAyBXafB9eBRmdGtucfPlLfGLDiFVEbX0jag8W0e5d37LvYd9XrpBZ7rFZ3Rd8gyv97HX3S/9JfDHd0DKczDG8CpbgfCYRDjWrIO57w4scD64m71E73p6zVzz3HWsBAKE1PsvUHULyojsnQpdS9/VzrrAwXX/nUMEgOmNHyhIZ88aBm8H8v9OdF+KWBGBpnvE8wwZWtV2trj58rrfoyFV7YsOIVURhb4RlWfrKLBhTQgKCZrcR3W9CrrFZ9Qa7ag0oYD7L/BjrgN7lwHPoiE49SM4tbYHQPcFJPemOrlZWwnhbKPdttZZIsoXwiqNBs2ts3Foz078888/AIq3oIydWIQBvh75nk/Hzd4aDtaifFvy6jAA1WzFGNfRq8DbEzNkWB0ehc9P3MLxe0+hzHVZQvelqKjfE6CtZwE4fHfuXoH1o6PSaPhdCc1F7jpYHR5V4k15aGEgQqoG6t43ovJcNrVxDUfYiYXIlKu14f/6erPe9X1O2wWvZgzVba35aXzOEhHAcUjNyAK7sA+IPPffg9RKsMwUCJ0c9L6AFDYfvEE1e3hWt883T99KIEBLWzlqJUmhYQz//PMPatasiSZNmhRrQRndtL2C5p/3bVYXvV5vkJMhV2kvMeC/yxOO1lZ4r02jfCFb0CDKx6lZeJUlh8vraY26cQpF5BlPINAOkjSH+fLFUV4DSWlhINNQKpVQqVSmLoZRyOVy/u+y7KhZlQiFQohEIqPWB4W+EeXee74wxW0dhbb0xKE7j3HzWQoy5doPAQG0W8Vqz8PBTiyEj5sTXGyt0a6eK1xsxAj2cseU36/gYUwM8Mc64NXT/07auA00XYZCaGMPN3uJ3heQouaD5z3e1l6Bc6eO813A/v7+aNy4MYDiLShT1POpX6+Up1s4R6PRXr6o7WiLnl7uBYZsQXPp3R1skJwt56c16sYpiAQccgzUPwft9Eghp53Oacr58iVRnusJ5P09AtovrUIA3czoi05VkZGRAY1GA7FYXPSdKyGxWIwGDRpU2ddXGgqFAmlpaXBxKXwflLKi0C+D3CvjOduIsaR3CzSr9d8vqzxbR24ONujW2B0qDYNcpcGj5Eyo1BpwHGAv1nZ9N3N3wrbQzvlCx/XJDdz49TtA+XqEvJUI6DwUaNoJUKvhJBHB2koIAcfl+wJS2Hzw3Me1S+se11taV7fSHlCyBWUKe77cO/sVJ2QLG0QpFgrgLBEjRaZAqkyBRtXt8SpLDiHHQSRQQ1lwjz04Dq97ToRY0vu/kDTFfHlDcq8HIQRw4t4ziIUFj5co6TS7vL/HVxlZkKUK8L832qCeW7VyfiWWTaPRQKlUolq1qluv6tdLe0skEggLeY9aIjs7O7x8+RK2RlrlkkK/FHKvjPffAiUMYQ+eo0Xdajg6rgfEr3eiK89u4NznalbTSe9cgY3c8nXVZmZmYvbs2Tixezd/jLm4g3vjQ6BaLYDj4CAWop6zbam7ZwtaSz934OdWHgFZ3HMYmktfv5o9kJyJFJkCKTIlnG3EeJUth61YhCyFEqo8wc9B+2XBSsAhoG41vS925qI4lzIK+p2UZj0B3e8gOzsbUVFRcC1gQCcpG6VSCWtra1MXg5gAx3GwsbEx2mUdCv1S0K2MJ+Q4/S5TANfiX6HP5jM4PbEXgPJdNrWk57pz5w727t3L//zO0OF47NcPMSnaa2g17MRQ5MhgxXGl6p4tSeBXNEODKDloVyusrdbAwdoK7evXwOXHL5ElV4ExDW49S0GmQg0G7SUUGysOIishAl5/oTNHBXXja17P1si7QmNuNM3OPGk0GghoSWOLJRQKoVQa598lhX4J3U1Iwc0nyRAWEihCjsPNJ8m4m5CSr6u/vLqBi3uuDh06YPbs2Vi7di1WrVqFd955BwDydM8ml6p7Njo62mwDHyjeIEorAYcQnzp8XerqJdi7DrLlCtx8moxXaRmoU90ZX77ZCk3dza+FDxR+KUMo1K6DKMizQmNuNM2OEMtCoV9CC4/dKtaI/IXHbmH/mG4VVi4ASE9Ph729vV4LYdasWQgNDUW9evX4Y+XRPevq6gpbW1tkZmaaXeADpRtEmffLlK5+mjZtarTra+WhsEsZNe0leJWVA7D/Vmj0cNbfXZCm2RFiWaj/qJh085xvPk2GQs1gaM0dXcuqrHOjS+LKlSvo2rUrfvjhB73jQqFQL/DLS7Vq1TBixAi0b9/e7AIfQKFrDeiY41z60irsUoZu0KJuamPehaKqUh0QQoqHWvpFyDtAKkOhhEKlhkqjgZWAg7WVMN/isBqm3dBmxPZzRt9rXaPR4IcffsDSpUuhUqmwdOlSdOzYEW3bti2X8xtSrVo1dO/e3ejPU1qVZS59WRm6lJF70CJ/rb8K1gGpXBISEjB79my8fPkSIpEIkyZNQp8+fUxdLItAoV+EvAOkGrjYI1WWDABQqhkAdb7d4RRqDSRCQaGb7ADlswVpUlISJk2ahNOnT/PHWrdujVq1apX53HlJpVLcv38f/fr1qzQDjCrLXPqyMnQpQzdosa6G4Q0vdzBwVbIOSOUiFAoxd+5cNGjQAFlZWRg8eDCCgoLM+jJaVUGhb0BBA6TsrUVwEIuQLldCwHHandgY+BXdVBoNJFZCONsWPN2mvLYgDQ8Px4QJE/D8+XMA2u7bGTNm4OOPP4aVVfn+WnOP0ler1XjrrbcqTfAD5jeXvrwVdz2IwrYdJqSiubm5oXr16sjJyUH16tXh5OSEtLQ0Cv0KUHk+uU2gsA1z/Gu7wNFaxO+3rlBr+JXo3B1t4FvL2eB5y7IFqUqlwrJly/D222/zge/m5ob9+/fjk08+MWrgA9pVtMzt+j3RXsoI9qrFX8IAwHf5Uzc+qWgjR46Et7c3vL294evriz59+uDw4cMF3vfOnTtgjBmlhzKvHTt2oEePHvDz88OgQYNw9erVIh/z4sULzJo1C+3bt0eLFi0wYMAA3Llzp0T32bhxI9555x20bNkSHTt2xKRJk/Dw4cNyf33FQS19AwobICXgOATUqYZMuRKPUjLhIBahZZ1qWNKnBfbefoywBy8Mnre0c6MTExPxwQcf4MKFC/yxoKAgbNiwATVr1izx+YpizvPwiT5LuZRBzB9jDFFRUfj444/Rv39/5OTk4Ndff8XHH3+MgIAAeHh48PdNTU3F3Llz8cUXXxi9XH/99ReWLVuGzz77DK1atcJvv/2GcePG4c8//0Tt2rULfExaWhpCQ0PRvn17bN68GdWqVUN8fDwcHR1LdJ/Lly9j5MiR8PPzg1qtxqpVqzB27Fj8+eefFd67QaFvQFFzve2tRWhe0xkD/erx3cdO0c+Ntte6ra0tkpKSAGivic2bNw/Tpk0zSlc7BX7lVNUvZRDzFxsbi6ysLHTt2hU1ami3ux48eDB+/vlnPHr0iA99hUKBmTNnYvz48WjVqpXRy/XTTz/hnXfewZAhQwAAn3zyCf755x/s2rULM2fOLPAxmzdvhru7O5YtW8Yfq1u3bonvs3XrVr2fly1bho4dOyIyMrJCBl3nRqFvQGnmepfnJjt52dvbY+vWrRgzZgzWrFmDDh06lPgcxUGBT0jVkHsvBieJGKEtPY0+RTMyMhJOTk78hlvPnz/HqlWrIBaL4e3tDUDbGzB//ny0bdsWb731VrHPvWHDBmzcuNHgfTZv3ow2bdroHVMoFIiMjMT48eP1jnfu3Bk3btwo9FxnzpxBly5dMGXKFFy5cgU1a9bEiBEjMHTo0BLdJ6+MjAwAgJOTk8HXYgwU+gaUZsOc8txkJzY2FgKBQG+eva+vL/7991+jbVBBgU9I5VdeWyqXRmRkJDIyMtCqVStoNBrk5ORAIpFg8eLF/GXIa9eu4ejRo2jSpAnCwsLAcRy+/vpr/ktBYYYPH17k1L6CLnWmpKRArVajevXqesddXV353tOCxMfHY9euXRgzZgwmTJiA27dvY+nSpRCLxRg4cGCx75MbYwzLli1D69at4eXlZfC1GAOFfhFKM9e7POaHHzhwANOnT0eTJk3w119/6W0/aazAZ4zh8uXLFPiEVHLluaVySUVGRmLkyJF47733kJ6ejq+//hoBAQEYNGgQf582bdogMjKS/0JQ3M80Z2dnODs7l7pseT/LGGMGP98YY/D19cWMGTMAAM2aNcODBw+wa9cuPtCLc5/cPv/8c0RHR2Pnzp2lfh1lQaFfhNIMkCrLoCqZTIb58+fj559/BgBcv34dP/zwA/+GMiaO4zBkyBDs3r0bbm5uFPiEVEKF7cWgU17ThgsTFRWFYcOGoX79+gCAzz77DP3798fQoUP1BvGVRmm7911cXCAUCvHy5Uu9469evYKrq2uh56pRowYaNWqkd6xhw4Y4fvx4ie6js2TJEpw5cwbbt2+Hu7u7wddhLJU69Lt3746kpCS9YBo6dCgWLlyI8+fPY9WqVXj48CFq1aqFcePGFfitq7hKM0CqpI+RSqUYO3YsoqKi+GODBw/GuHHjSvS8ZWFjY4PQ0FCamkdIJWVoW2md0mypXBzx8fFIT09HkyZN+GONGzdGvXr18Oeff2LChAllOn9pu/fFYjGaN2+O8+fP44033uCPX7hwAT179iz0XK1atcKjR4/0jsXGxqJOnTolug9jDEuWLMHJkyfx66+/lvnLT1lU6tBPT0/HL7/8km/k54sXLzB58mQsWLAA/fv3x/Xr1zFhwgQ0bNgQ/v7+Jipt4Rhj2LFjBz7++GPIZNr1+W1tbbF8+XKMGDHCqOH77NkzNGjQQG/aCO3jTUjlZWhbaR1jbal8584dWFlZwdPTU+94586dcfLkyTKHflm698eMGYM5c+bA19cXLVu2xO7du5GQkIDhw4cDALZv346TJ0/yvawAMHr0aISGhmLDhg3o06cPbt++jT179uDzzz8v0X0WL16MI0eOYN26dbCzs+PHETg4OEAiKfmGZ2VRaUNfrVYjKyurwNGPR44cQYMGDTB48GAAQMeOHdGzZ0/s27fP7EI/IyMDM2fOxL59+/hjTZs2xdatW+Hj42PU546Ojsbp06eRkJCAUaNGVfibjxBS/oqzrbSxtlS+e/cuPD099cYgAUCnTp2wc+dOPH/+3GTd2n379kVKSgrWrVuHxMREeHl5YdOmTXyLPCUlBfHx8XqP8ff3xw8//IBvv/0Wa9euRd26dTF//ny9GQfFuc+uXbsAAO+9957e+ZctW6Y31qEicIwZmlxmvlJSUtChQwf06dMH169fB2MMPXr0wJw5c7Bw4ULY2NjoLfiwefNmHD16FAcOHCjy3BEREWCM8VNOjCU7Oxu9e/fWW5lp5MiRWLRoEWxsjDutJjo6GgcPHkRKSgqcnZ3RrVs3tG/f3qjPWdnIZDLExsbC09PT6L+Pyojqx7Cy1I9cLodYLC7VF/HEDBne23ne8E6gAg6/hnYy6Q6LjDHI5XJYW1vTpcQ8cnJykJ6ejmfPnuV7/zx48AAcx8HPr3SrbFbalr5CoUDz5s3RqlUrLFu2DE+fPsX06dOxaNEipKam5ruu4+zsjJSUlGKfX6lU6l1bN5bWrVvj4cOHsLW1xYwZMxAUFITY2FijPmdcXBzCw8Oh+77n6uoKBweHCnm9lZGxfx+VHdWPYaWtnwYNGpTqcY4iDh3rVcffMYmwEuQPU5WGoXsjNziKOOTk5JTqOcqTXC43dRHMjlwux7NnzwAU/P7J25NSEpU29GvWrKnXam/cuDFmzZqFiRMnonXr1vnuX9TUjLxEIpHRW/oAsHz5cojFYkycODHfdTBjiI6ORlRUFKpXrw6VSgVXV1eEhobSRhcFoJasYVQ/hpmqpQ8AC0NawOpMJM49TIRKnWvasFCA7g3dMK9Hc6PN0y8uaukbVrt27UJb+mVRaUO/IHXr1oVarYZAIEBqaqrebampqXBxcSn2uTiOK/cgvHTpEuLi4vRWarK1tcWaNWvK9XkKI5VKceLECQiFQgiFQvj6+sLDwwO2trYU+gbY2NhQ/RhA9WNYaepHF4KlXZNDKBTis5AAs96LQa1WA9C+VmOtPVJZCQQC/gtf3vdPWb8gVdrQl0qlOHz4MGbPns0fi4mJgVgsRlBQEH7//Xe9+9+5cwctWphma1GNRoPVq1fjyy+/hJWVFZo1awZfX98KLUNBK+0FBQVBKpVWaDkIIRWH9mIgeVXarXVdXFywc+dObNmyBQqFAo8ePcKaNWswfPhwDBgwAE+fPsXevXshl8sRFhaGsLAwg2shG0tiYiIGDx6MJUuWQK1WQy6XF7m4RHl78uQJLa1LCCGk8oZ+zZo1sWnTJpw4cQLt27fH2LFj0bVrV8yePRvVq1fHxo0bsWfPHnTs2BHffPMNVqxYYfQpcHmdPXsWgYGBOHv2LABtt8zs2bOxatWqCi1HrVq1+MUyKPAJIcRyVdrufQBo27Yt9uzZU+hte/fureASaalUKixfvhzffvstP0Le3d0dGzduRNeuXSu8PEKhEG+99RZu376NgIAACnxCCLFQlTr0zdGTJ08wbtw4XLp0iT/Wo0cPrF+/nt9buiKoVCpYWf336xUKhWjZsmWFPT8hhBDzU2m7980RYwyjRo3iA9/KygqLFi3Cnj17KjTwpVIpNm/ejOTk5Ap7TkIIIeaPQr8ccRyH5cuXw8rKCh4eHjhy5AimTJkCQQXOh9WN0k9LS8OuXbuQkZFRYc9NCCHEvFHol7O2bdti27ZtCAsLQ7t27Sr0ufNOy2vQoAHs7e0rtAyEEMv05MkTeHt7IyYmpsKfOzo6GiEhIWjRogWePn0KPz+/fDvfES0K/TLYv38/Ro4cyS8yodO3b99S7wRVWgXNw6dR+oSQqiA+Ph7Hjh0r9PZ9+/bB0dER165dQ506dRAREcEvY3zx4kVERERUVFHNHoV+KWRnZ2PKlCkYN24cjh49ipUrV5q0PBT4hJCq7MSJEzh+/Hiht2dkZKBu3bp6g5d1tm3bhjt37hizeJUKhX4JRUVFoWfPnti+fTt/7PHjxzDVZoUU+IQQc3L79m307dsXLVu2xOjRo/HixQv+tosXL2LYsGFo2bIlunXrhh07dvC3xcTEYNSoUWjdujXatWuHKVOmIC0tDVu3bsXKlStx7Ngx+Pn55etZnTNnDg4ePMjfnvsyw4QJE3D27FksXboUo0ePrrA6MGcU+sXEGMPPP/+M4OBg3Lt3DwBgZ2eHdevWYe3atSYJWQp8Qoi52bt3L7Zs2YKzZ89Co9Fg4cKFAICEhARMmjQJw4YNw9WrV7Fp0yb88ssvOHLkCABg6dKl8PDwwMWLF3HmzBkwxrBhwwaMHTsWAwYMQO/evREREZFvnf6vv/5a7/bcNmzYgDp16mDBggX4+eefK6YCzBzN0y+G9PR0zJgxQ29Xv+bNm2Pr1q3w8vIyWblevnxJgU+IBVm7di3WrVtX5P1atGiBnTt36h0bMWIEbt26VeRjJ02ahMmTJ5e6jCNHjkTt2rUBAKNHj8a0adOgUqnw559/okmTJhg0aBAAwMvLC4MHD8ahQ4cwYMAApKWlwdPTE2KxGGKxGKtXr67QmU+WgkK/CDdu3MCHH36oNxL0gw8+wJIlS0y+nWjnzp3BGENGRgYFPiEWICMjAwkJCUXer06dOvmOvXz5sliPLes030aNGvH/X7t2bSiVSrx69QqPHz9GREQE/Pz8+NsZY/yAu8mTJ2POnDk4d+4cAgMD8eabb6JVq1ZlKgvJj0K/CDt37uQD38HBAd9//z0GDBhg4lJpcRyHLl268P9PCKnaHBwcUKtWrSLv5+rqWuCx4jzWwcGhVGXTyd061411sra2hkQiQVBQEDZs2ABAu7VuTk4Ov4Vsz549cfbsWZw5cwanT5/Gu+++izlz5uD9998vU3mIPgr9Inz++ee4ePEiJBIJtm7divr165usLFKpFDY2NnploLAnxHJMnjy51F3vebv7jeXRo0f8Zc9nz55BIpHA2dkZ9erVw6lTp8AY4z+3Xr58CTc3N9jY2CA5ORnVqlXDgAEDMGDAAPzwww/Yv38/hX45owsmRbCxscGePXvw119/mTzwDx06hH379iEuLs5k5SCEEEN27NiBFy9eICMjA7/88guCg4MBAP369UNqairWrVuHnJwcxMfHY9KkSfj111+Rk5ODkJAQ7N69GyqVCllZWXjw4AHq1asHQNtT8OzZMyQnJ0OlUpWoPNbW1nj48CHS09PL/bVWRhT6xVC7dm2IxWKTPX/uUfpKpZKfPUAIIeZm+PDhGDNmDAIDAyEWizF//nwAgIuLC9atW4fTp0+jbdu2GD16NLp27Yr3338fEokE33//PX777Te0adMGPXr0gEqlwqeffgoA6N+/P2JjY/HGG28gMTGxROUZOnQo9uzZg/fee6/cX2tlxDFTTTA3YxEREWCMwd/f39RFMeq0vOzsbERFRaFp06awtbUt8/mqGqofw6h+DCtL/chkMgAw+WBhY8p9TT/vNDxLJ5PJkJOTg4cPH+Z7/+imJeYeEFkS1NIvhDlcK6d5+IQQQsoThb6ZosAnhBBS3ij0zRAFPiGEEGOg0DczGRkZOHLkCAU+IYSQckehb2YcHBzQt29fcBxHgU8IIaRc0eI8ZqhZs2ZwcnJC7dq1KfAJIYSUG2rpm4G0tLR8x+rUqUOBTwghpFxR6JuYVCrFpk2bcPPmTVMXhRBCSBVHoW9CulH6arUax44dw+PHj01dJEIIIVUYhb6JFDQtz8PDw8SlIoSQ0nv69Cn8/Pz0tiLXCQ8Ph7e3t1GeNyQkBHv37jXKuasaGshnAjQPnxBSFdWpU4dfJtaY4uPjERkZid69ewMAjh8/XuhtRB+19CsYBT4hhJTNiRMn9IK+uLcRCv0KRYFPCKnKnjx5Am9vb8TExCA2NhbDhw9Hy5YtMXTo0HxbgkulUnz00Udo3749OnTogG+//RZqtRoAcODAAbz11ls4ePAgevTogZYtW2LatGlQKpXYunUrVq5ciWPHjsHPzw9qtRo9evTArl278t32ww8/YNCgQXrPe+XKFfj6+lrsVrvUvV9B7t27R4FPCLEYc+fORa1atfDjjz8iISEBU6ZM4W/Lzs7G+PHjMXToUGzevBkvX77EpEmTYGtriwkTJgDQjg+4c+cOjhw5gqdPn2LQoEE4efIkxo4di/v370Mul2PVqlV6z5n3tidPnuCHH35ATEwMGjVqBEDbE9CtWzc4OjpWXGWYEQr9CuLg4ACxWIycnBwKfEJIqVy+fBlXrlwp8n7u7u5455139I7t378fz58/L/Kxbdu2Rbt27UpdRkC7nPiNGzewaNEi2NraolGjRnj77bexYsUKAEBYWBgYY/jwww8hFovh4eGBsWPHYuPGjXzoZ2VlYdq0abC1tUWTJk3g7e2Nhw8flqgcdevWRZs2bXD48GFMmzYNAHD69GnMnTu3TK+vMqPQryC1a9fG0KFDERkZieDgYAp8QkiJKRQKZGRkFHk/BweHfMeysrKK9ViFQlGqsuWm66avXbs2f6xevXr8/8fHxyM5ORkdOnTgjzHGIBaL+Z9dXFxgb2/P/2xjY4OcnJwSl2XAgAHYuHEjpk2bhoiICGRkZKBbt24lPk9VQaFfgWrXrq33j4AQQkpCLBYXGOh52dnZFXisOI/NHbylVVCjRiD4bwiZtbU1GjdujN27d0MikUAoFBq8f1n06dMHS5cuxc2bN/H333+jd+/e5fIaKysKfSORSqV4+vQpevToQa16Qki5aNeuXam73vN29xuTk5MTAODZs2f8tfOYmBj+9nr16uHJkyfIzs6GRCIBAKSkpEAkEum17suDvb09evbsiWPHjuHMmTNYunRpuZ6/sqHR+0agG6V/5coVnDp1CowxUxeJEEIqlKenJ3766SfIZDJER0fjjz/+4G/r0qULXFxcsGrVKmRmZiIpKQlTp07FypUri3Vua2trPHv2DMnJyVCpVEXeNmDAAOzduxdKpRJt27YtvxdZCVHol7O80/KUSqWJS0QIIRVvzZo1iImJQYcOHTBv3jyMHTuWv00kEuGHH37Ao0ePEBgYiIEDB8LT0xMff/xxsc7dv39/xMbG4o033kBiYmKRt3Xp0gU2NjZ48803Lb7nlWPUDM1Ht6KUn59fiR5X2ebhZ2dnIyoqCk2bNoWtra2pi2N2qH4Mo/oxrCz1I5PJAGgHr1VVarUaOTk5hV7TL0+ZmZkICgrC/v374enpadTnKg8ymQw5OTl4+PBhvvdPafNJh1r65aSyBT4hhFgCuVyOzz//HF26dKkUgW9sFPrlgAKfEELMz9WrV9G2bVu8evUKn332mamLYxZo9H4ZUeATQoh5atOmDW7fvm3qYpgVaumXgVqtxrlz5yjwCSGEVAoU+mUgFAoxbNgwuLi4UOATQggxe9S9X0aOjo549913YWtrS4FPCCkXAoEg3/xzYjnUanW5rUiYF7X0S+jx48f5/jHa2dlR4BNCyo1IJIJcLjd1MYgJMMYgk8lgZWWcNjm19EtAN2jP09MTgwYNMtovhRBi2QQCAUQiEdLS0qrsOvEajYb/YmOsVm1lo1arIZPJ4OLiUi4bHxWEarqYco/Sf/jwIW7cuGHqIhFCqjAHB4cqveiRQqHAo0ePjBZulZFYLIarq6tRG5TUVC2GgqbltWnTxsSlIoRUdSKRCCKRyNTFMArdYrDW1tZVeuVBc0Mt/SLQPHxCCCFVBYW+ART4hBBCqhLq3i+EUqnE0aNHKfAJIYRUGdTSL0R2djYFPiGEkCqFttYtwPXr16HRaCCTySAWi6vsCFrGGJRKJUQiEX2hKQDVj2FUP4ZR/RhG9WNYYfWjUCjAcRxatWpVqvNS934BOI6DQCCAs7OzqYtiVBzHVdk5wOWB6scwqh/DqH4Mo/oxrLD64TiuTF+SqKVPCCGEWAi6pk8IIYRYCAp9QgghxEJQ6BNCCCEWgkKfEEIIsRAU+oQQQoiFoNAnhBBCLASFPiGEEGIhKPQJIYQQC0GhTwghhFgICn0L0b17d/j6+sLPz4//s2TJEgDA+fPnMXjwYLRq1Qr9+vXDwYMHTVvYCnDu3Dl06tQJ06dPz3dbUfWxbds2hISEoHXr1ggNDcXt27crqNQVp7D6iY+Ph7e3t977yM/PD0ePHuXvYwn18/TpU0yePBnt27dHhw4dMGfOHKSnpwOg9w9QeP3Q+0dLKpVi9OjRaN26NTp16oRp06YhKSkJQAW8fxixCK1atWLXrl3Ld/z58+esRYsWbO/evSwnJ4dduHCB+fv7s1u3bpmglBVj06ZNrFevXmz48OFs2rRpercVVR8nT55kbdq0YTdv3mQymYxt3ryZderUiWVmZpripRiFofqJjIxkzZs3L/SxllA/jDH21ltvsblz/7+9+wtpqo/DAP74p5lGrgMrKRULQvJf2yIoJS0KWhSVrP8NdqGUFVHJLEIGdSNSdiMLvAmNIMm2ygsDdyElRREzKacRiYoX7mKCzZGsmfO8F6u9+Wp68bqd8Pd8Ls85wteHLz7teOxcl799+yZ7vV75yJEjcnV1Nffnpz/lw/2R5WAwKBcWFsp3796Vg8GgPDo6Kp8+fVq+cOFCTPaHn/QFEAqFMDExAbVaPetcW1sbNmzYgKNHjyIpKQmFhYXYs2cPHA6HApPGRlJSEhwOB7KysmadWygPu90Oo9EIrVaL5cuXo7y8HPHx8Xj58mWMv4vomS+f8fHxOffoFxHy8fv9yM3NhcViwYoVK7B69WqUlpaiq6uL+4P58+H+AIFAAJWVlaioqIBKpYJGo4HBYEB/f39M9oelLwC/3w9ZlmGz2VBSUoLi4mLcuHEDExMT6OvrQ25u7ozrc3Jy0Nvbq9C00Wc2m7Fy5co5zy2Ux3/Px8XFYdOmTXC73dEbOMbmy8fv92N6ehrnzp3Dtm3bYDAYcP/+fcg/39slQj6pqamora2FRqOJHPN4PFizZg33B/Pnw/0B1Go1jh07hsTE8Etuh4eH0draiv3798dkf1j6ApicnEReXh62bNkCp9OJpqYmdHd34+bNm/D5fEhNTZ1x/apVq/D161eFplXWQnn4fL5Zn1TUarUweS1btgxZWVkwmUx49eoVrFYrbDZb5JOIiPm43W48fPgQ58+f5/7M4fd8uD//GhkZQX5+PgwGAzZv3oxLly7FZH9Y+gJIS0vD06dPYTabkZycjI0bN6KqqgrPnz/Hjx8/Zl0vy/L/el/zUrNQHiLltXv3bjx69AjFxcVQqVQoLi7GiRMn8OzZsz9+zVLO5/379ygvL4fFYkFRUdGc14i8P//Nh/vzr/T0dLjdbrS3t2NwcBBXr16d87rF3h+WvqAyMjIQCoUQHx8Pn88345zP54MkScoMpjBJkubNQ5KkWf+qHh8fFzYvILxLXq8XgFj5vHjxAmfPnkV1dTXMZjMA7s/v5spnLqLuDxC+Pb9+/XpUVlaira0NiYmJUd8flr4APn/+jLq6uhnHBgYGoFKpsHPnzlm/v+/t7YVWq43liH+NgoKCefPIz89HX19f5FwoFMKnT5+EycvpdKKlpWXGscHBQWRmZgIQJ5/u7m5cu3YN9fX1KC0tjRzn/oT9KR/uT/hP8gwGA6anpyPH4uPDVVxUVBT1/WHpC0CSJDQ3N+PevXuYnJzE0NAQbDYbTp48icOHD2NkZAR2ux3BYBCdnZ3o7OzE8ePHlR5bEQcPHpw3j1OnTqG1tRUfPnxAIBBAQ0MDVCoVdu3apezgMZKQkIDa2lq8efMGU1NTePv2LZ48eQKTyQRAjHympqZgtVpRVVWFHTt2zDjH/Zk/H+5PuLj9fj/u3LmDQCCAsbEx2Gw2bN26NSb7Eyf/emySljSXy4W6ujr09/dDkiTs27cPV65cgUqlgsvlwu3btzEwMICMjAxcvHgRe/fuVXrkqCkoKAAQ/uEEIPIU7a8nYBfKo7m5GQ8ePMDo6Cjy8vJgtVqRnZ0d4+8iehbKp6WlBY2NjfB6vUhPT0dZWRmMRmPk65d6Pl1dXTCZTFCpVLPOtbe3w+PxCL0/C+Xz+vVrofcHCN99rampQU9PD1JSUrB9+3Zcv34daWlpUf/5w9InIiISBG/vExERCYKlT0REJAiWPhERkSBY+kRERIJg6RMREQmCpU9ERCQIlj4REZEgWPpERESCYOkTEREJgqVPRIvOaDTCYrHMOl5fX4+SkhIEAgEFpiIilj4RLTq9Xh/5v/p/8Xg8aGxshMViQXJyskKTEYmNpU9Ei06n02F4eHjGu8Fv3bqF7OxsHDp0SLnBiATH0ieiRafT6QAg8m5wl8sFp9OJ6upqxMXFKTgZkdhY+kS06DIzM6HRaNDT04Pp6WnU1NTgwIED0Ov1So9GJLREpQcgoqVJp9PB7XbD4XBgaGgIDQ0NSo9EJDyWPhFFhVarRVNTEz5+/IiysjKsXbtW6ZGIhMfb+0QUFXq9HmNjY0hISMCZM2eUHoeIwNInoiiRJAkAYLFYkJKSovA0RAQAcbIsy0oPQURLz+XLl+HxePD48WM+sU/0l+Dv9Ilo0Xz//h1fvnxBR0cHOjo6YLfbWfhEfxGWPhEtmnfv3qGiogLr1q1DXV0dcnJylB6JiH7D2/tERESC4IN8REREgmDpExERCYKlT0REJAiWPhERkSBY+kRERIJg6RMREQmCpU9ERCQIlj4REZEgWPpERESCYOkTEREJgqVPREQkiH8A40JU4FHatOwAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot error\n", + "exp.plot_model(best, plot = 'error')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "56cd08f7-d5fa-49ff-849c-08294a025074", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Springtime x86", + "language": "python", + "name": "springtime_x86" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/notebooks/mk_recipe_rf_merf_ebm_integration.ipynb b/docs/notebooks/mk_recipe_rf_merf_ebm_integration.ipynb new file mode 100644 index 00000000..8f45fef8 --- /dev/null +++ b/docs/notebooks/mk_recipe_rf_merf_ebm_integration.ipynb @@ -0,0 +1,1385 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "7ca85fd6-27fd-422f-833e-e6b4bb02499a", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b69a1f5e-9708-4a35-ae76-f62f69a56312", + "metadata": {}, + "outputs": [], + "source": [ + "from springtime.main import Workflow" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "72a3ad90-6323-4ef9-8020-d6cf3cf4e60c", + "metadata": {}, + "outputs": [], + "source": [ + "recipe = \"/home/jovyan/springtime/src/springtime/recipes/model_comparison_usecase.yaml\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "bc630bb0-ea34-46eb-80be-fbcefa397645", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading dataset: npn_obs\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2015_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2016_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2017_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2018_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2019_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n", + "/tmp/data/rnpn/rnpn_npn_data_y_2020_Deciduous broadleaf_breaking leaf buds_Washington.csv already exists, skipping\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Dataset npn_obs loaded with 241 rows\n", + "Dataset npn_obs resampled to 241 rows\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading dataset: daymet\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Dataset daymet loaded with 326310 rows\n", + "Dataset daymet resampled to 894 rows\n", + "Datesets joined to shape: (894, 25)\n", + "Data saved to: /tmp/output/data.csv\n" + ] + } + ], + "source": [ + "Workflow.from_recipe(recipe).execute()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1161a129-0ec3-4e5e-8142-5bf114f960c5", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yeargeometrybreaking leaf buds_doytmin_1tmin_2tmin_3tmin_4tmin_5tmin_6tmin_7...tmax_3tmax_4tmax_5tmax_6tmax_7tmax_8tmax_9tmax_10tmax_11tmax_12
02015POINT (-122.357971 47.754948)50.03.815.0005.594.64010.1911.62514.50...14.2614.62018.9124.78525.7425.5219.16517.609.4507.37
12015POINT (-122.377419 47.776241)50.03.684.9555.564.58510.1111.54014.41...14.2514.63518.9624.76525.7325.5819.16517.609.4757.41
22015POINT (-122.185921 47.255966)56.03.274.9155.664.9209.8311.76014.66...14.0414.07018.1925.54526.8126.2018.96516.639.1206.62
32015POINT (-121.861725 47.952686)50.01.933.4404.212.9209.2410.01512.76...13.1313.76517.7924.68025.7225.5218.02515.807.8355.09
42015POINT (-122.686279 45.513168)99.03.705.2906.234.8259.9112.53014.75...17.1315.76521.4528.00529.3628.6622.72019.0810.7158.00
\n", + "

5 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " year geometry breaking leaf buds_doy tmin_1 \n", + "0 2015 POINT (-122.357971 47.754948) 50.0 3.81 \\\n", + "1 2015 POINT (-122.377419 47.776241) 50.0 3.68 \n", + "2 2015 POINT (-122.185921 47.255966) 56.0 3.27 \n", + "3 2015 POINT (-121.861725 47.952686) 50.0 1.93 \n", + "4 2015 POINT (-122.686279 45.513168) 99.0 3.70 \n", + "\n", + " tmin_2 tmin_3 tmin_4 tmin_5 tmin_6 tmin_7 ... tmax_3 tmax_4 \n", + "0 5.000 5.59 4.640 10.19 11.625 14.50 ... 14.26 14.620 \\\n", + "1 4.955 5.56 4.585 10.11 11.540 14.41 ... 14.25 14.635 \n", + "2 4.915 5.66 4.920 9.83 11.760 14.66 ... 14.04 14.070 \n", + "3 3.440 4.21 2.920 9.24 10.015 12.76 ... 13.13 13.765 \n", + "4 5.290 6.23 4.825 9.91 12.530 14.75 ... 17.13 15.765 \n", + "\n", + " tmax_5 tmax_6 tmax_7 tmax_8 tmax_9 tmax_10 tmax_11 tmax_12 \n", + "0 18.91 24.785 25.74 25.52 19.165 17.60 9.450 7.37 \n", + "1 18.96 24.765 25.73 25.58 19.165 17.60 9.475 7.41 \n", + "2 18.19 25.545 26.81 26.20 18.965 16.63 9.120 6.62 \n", + "3 17.79 24.680 25.72 25.52 18.025 15.80 7.835 5.09 \n", + "4 21.45 28.005 29.36 28.66 22.720 19.08 10.715 8.00 \n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(\"/tmp/output/data.csv\")\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "302e1f2b-2eaf-45a6-bcc2-e764dacb7955", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(241, 27)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dropna(inplace = True)\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "id": "2e622202-d5e7-484c-a234-8c70b70ad895", + "metadata": {}, + "source": [ + "We have three matrices containing our n_samples =500 of training data:\n", + "\n", + "X. Matrix containing three fixed effect features. Dimension = 500 x 3.\n", + "y. Vector containing the single target variable. Dimension = 500 x 1.\n", + "clusters. Vector containing the cluster_id for each sample. Dimension = 500 x1. We have k = 100 unique clusters in the training data.\n", + "In this example, there is not an explicit Z matrix. We create one to model a random mean for each cluster. It is a matrix of all 1s with dimension = 500 x 1." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "27f10802-65c3-4166-8a7d-97378fbcc391", + "metadata": {}, + "outputs": [], + "source": [ + "y = df.pop(\"breaking leaf buds_doy\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "6cbab5c1-0505-4076-b4cb-ee8f639dd35e", + "metadata": {}, + "outputs": [], + "source": [ + "# Z = df.pop(\"year\")\n", + "# Z = Z.values[:,None]\n", + "\n", + "df.drop(columns = [\"year\"], inplace = True)\n", + "Z = np.ones((len(y),1))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e5517458-3956-47a7-9985-eb883c8536ab", + "metadata": {}, + "outputs": [], + "source": [ + "clusters = df.pop(\"geometry\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "3eed0391-5a92-46af-afb7-09cd476618f0", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "indices = np.arange(len(y))\n", + "rand_num = 42\n", + "te_sz = 0.2\n", + "X_train, X_test, Z_train, Z_test, clusters_train, clusters_test, y_train, y_test, indices_train, indices_test = train_test_split(df, Z, clusters, y, indices, test_size=te_sz, random_state=rand_num)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c878ad42-e9e9-4f93-a992-40a5175076ea", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(192, 24)\n", + "(192, 1)\n", + "(192,)\n", + "(192,)\n" + ] + } + ], + "source": [ + "print(X_train.shape)\n", + "print(Z_train.shape)\n", + "print(clusters_train.shape)\n", + "print(y_train.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5bc6ba2a-ba29-449d-9232-5b2ee56af5b1", + "metadata": {}, + "outputs": [], + "source": [ + "# Linear\n", + "from sklearn.linear_model import LinearRegression\n", + "\n", + "lm = LinearRegression()\n", + "lm.fit(X_train, y_train)\n", + "y_hat_lm = lm.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "49dcf048-59bb-4755-a6f2-f6a1c7e04317", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4aaf89d6-bb28-4758-b0b5-6932b19b9069", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Linear Regression Model\n", + "mean_absolute_error: 44.82426405323358\n", + "mean_squared_error: 3197.151312171903\n", + "r2: 0.6247992212591051\n" + ] + } + ], + "source": [ + "print(\"Linear Regression Model\")\n", + "print(\"mean_absolute_error: \", mean_absolute_error(y_test, y_hat_lm))\n", + "print(\"mean_squared_error: \", mean_squared_error(y_test, y_hat_lm))\n", + "print(\"r2: \", r2_score(y_test, y_hat_lm))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "5e7c7060-3c66-4856-ab4e-71db0447ed43", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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oXFvQrPzvXHkIlkAAJDcGEEBAAC2Q0ABAAC2Q0ABAAC2Q0ABAAC2Q0Cx0K9//WsVFRWpU6dOGjBggN58881EdynuysrK5HK5TF8ej8f/vGEYKisrU0FBgTp37qxhw4Zp3759CeyxdTZv3qxx48apoKBALpdLL7zwgun5cO5FfX29Zs6cqW7duikrK0vjx4/XoUOH4vhbWKOtezN16tSA99GgQYNM1yTjvVm0aJFuuOEGZWdnq0ePHrrtttv0/vvvm65J1fdNOPcmVd83y5cv1zXXXOMvvjZ48GC98sor/ued8p4hoFjkueeeU2lpqR5++GG98847+sY3vqExY8bo008/TXTX4u7qq69WdXW1/2vPnj3+5xYvXqwlS5Zo2bJl2rFjhzwej0aNGuU/bymZnDp1Sv3799eyZcuCPh/OvSgtLdXatWtVXl6uLVu26OTJkxo7dqwaGxvj9WtYoq17I0mjR482vY/Wr19vej4Z701lZaUeeOABbd++XRUVFTp//rxKSkp06tQp/zWp+r4J595Iqfm+6dmzpx599FG9/fbbevvttzV8+HBNmDDBH0Ic854xYIkbb7zRuO+++0xtX/3qV40f/OAHCepRYsyfP9/o379/0OeampoMj8djPProo/62s2fPGm632/jNb34Tpx4mhiRj7dq1/sfh3Ivjx48b6enpRnl5uf+azz77zOjQoYOxYcOGuPXdai3vjWEYxpQpU4wJEyaE/J5UuTe1tbWGJKOystIwDN43F2t5bwyD983FunTpYvzud79z1HuGERQLNDQ0aOfOnSopKTG1l5SUaOvWrQnqVeIcOHBABQUFKioq0re//W199NFHkqSqqirV1NSY7lNmZqZuvvnmlLtP4dyLnTt36ty5c6ZrCgoKVFxcnBL3a9OmTerRo4f69Omje+65R7W1tf7nUuXeeL1eSVJubq4k3jcXa3lvfFL9fdPY2Kjy8nKdOnVKgwcPdtR7hoBigS+++EKNjY3Ky8sztefl5ammpiZBvUqMgQMH6umnn9arr76q3/72t6qpqdGQIUN05MgR/73gPimse1FTU6OMjAx16dIl5DXJasyYMXr22We1ceNGPf7449qxY4eGDx+u+vp6SalxbwzD0KxZszR06FAVFxdL4n3jE+zeSKn9vtmzZ48uvfRSZWZm6r777tPatWvVt29fR71nHHmasVO4XC7TY8MwAtqS3ZgxY/z/7tevnwYPHqwrr7xSK1eu9C9W4z5dEM29SIX7NXnyZP+/i4uLdf3116tXr156+eWXNXHixJDfl0z3ZsaMGXr33Xe1ZcuWgOdS/X0T6t6k8vvmK1/5inbv3q3jx4/r+eef15QpU1RZWel/3gnvGUZQLNCtWzelpaUFJM3a2tqA1JpqsrKy1K9fPx04cMC/m4f7pLDuhcfjUUNDg44dOxbymlSRn5+vXr166cCBA5KS/97MnDlTL730kt544w317NnT3877JvS9CSaV3jcZGRm66qqrdP3112vRokXq37+/fvGLXzjqPUNAsUBGRoYGDBigiooKU3tFRYWGDBmSoF7ZQ319vd577z3l5+erqKhIHo/HdJ8aGhpUWVmZcvcpnHsxYMAApaenm66prq7W3r17U+5+HTlyRAcPHlR+fr6k5L03hmFoxowZWrNmjTZu3KiioiLT86n8vmnr3gSTKu+bYAzDUH19vbPeM3FbjptiysvLjfT0dOPJJ5809u/fb5SWlhpZWVnGxx9/nOiuxdXs2bONTZs2GR999JGxfft2Y+zYsUZ2drb/Pjz66KOG2+021qxZY+zZs8e44447jPz8fKOuri7BPY+9EydOGO+8847xzjvvGJKMJUuWGO+8847xySefGIYR3r247777jJ49exqvv/66sWvXLmP48OFG//79jfPnzyfq14qJ1u7NiRMnjNmzZxtbt241qqqqjDfeeMMYPHiwcfnllyf9vZk+fbrhdruNTZs2GdXV1f6v06dP+69J1fdNW/cmld83c+fONTZv3mxUVVUZ7777rjFv3jyjQ4cOxmuvvWYYhnPeMwQUC/3qV78yevXqZWRkZBjXXXedaftbqpg8ebKRn59vpKenGwUFBcbEiRONffv2+Z9vamoy5s+fb3g8HiMzM9O46aabjD179iSwx9Z54403DEkBX1OmTDEMI7x7cebMGWPGjBlGbm6u0blzZ2Ps2LHGp59+moDfJrZauzenT582SkpKjO7duxvp6enGFVdcYUyZMiXg907GexPsnkgynnrqKf81qfq+aevepPL75u677/Z/9nTv3t0YMWKEP5wYhnPeMy7DMIz4jdcAAAC0jTUoAADAdggoAADAdggoAADAdggoAADAdggoAADAdggoAADAdggoAADAdggoAADAdggoAADAdggoAADAdggoAADAdggoAADAdv4/++JOfN2cI7EAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(y_hat_lm, y_test, \"o\")\n", + "plt.plot(y_test, y_test, \"-\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "7fb360f7-3cf1-4fbf-9898-2527aada33ee", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.ensemble import RandomForestRegressor\n", + "rf = RandomForestRegressor()\n", + "rf.fit(X_train, y_train)\n", + "y_hat_rf = rf.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ad7204f6-aba8-4ba7-b9a0-501b38de83e1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RF Regression Model\n", + "mean_absolute_error: 26.097192714315163\n", + "mean_squared_error: 1683.3490930514713\n", + "r2: 0.8024510481561682\n" + ] + } + ], + "source": [ + "print(\"RF Regression Model\")\n", + "print(\"mean_absolute_error: \", mean_absolute_error(y_test, y_hat_rf))\n", + "print(\"mean_squared_error: \", mean_squared_error(y_test, y_hat_rf))\n", + "print(\"r2: \", r2_score(y_test, y_hat_rf))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "a13ba435-b57c-4e81-a207-9658803efe10", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(y_hat_rf, y_test, \"o\")\n", + "plt.plot(y_test, y_test, \"-\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "cdf93e9c-e61c-4f99-ac5a-4d51e8b2f4ad", + "metadata": {}, + "outputs": [], + "source": [ + "from interpret.glassbox import ExplainableBoostingRegressor\n", + "ebm = ExplainableBoostingRegressor()\n", + "ebm.fit(X_train, y_train)\n", + "y_hat_ebm = ebm.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "99c848f0-879c-479a-aae2-5ec67878d533", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Linear Regression Model\n", + "mean_absolute_error: 29.88629211922297\n", + "mean_squared_error: 1710.5219336949328\n", + "r2: 0.799262187206355\n" + ] + } + ], + "source": [ + "print(\"Linear Regression Model\")\n", + "print(\"mean_absolute_error: \", mean_absolute_error(y_test, y_hat_ebm))\n", + "print(\"mean_squared_error: \", mean_squared_error(y_test, y_hat_ebm))\n", + "print(\"r2: \", r2_score(y_test, y_hat_ebm))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "cc521981-66a7-49a8-9e0f-f05ff2f2a5bb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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aH3vvPjcBdfY2Kj169fr9OnTGj58eMJ93ggoSWDo0KF6/vnn9ec//1m/+93v5Ha7NWLECJ04cUJut1uSlJ+f7/ec/Px832NoFsq9crvd6ty5s7p37x70mlQ0YcIE/eEPf9C2bdv01FNPac+ePRo1apTq6+slcd+k5rH/BQsW6LrrrlNJSYkkPnOhMrt3Ep+7YA4cOKALLrhAmZmZuvfee7Vhwwb1798/4T5vCXmaMfxNmDDB988DBgzQ8OHDdemll+q5557zTRhzOBx+zzEMI6ANzSK5V6l+P6dNm+b755KSEg0ZMkR9+vTR66+/rqlTpwZ9Xirdt3nz5un999/Xzp07Ax7jM9e2YPeOz525yy+/XPv379fJkyf10ksvacaMGSovL/c9niifNyooSahbt24aMGCADh8+7FvN0zr5VlVVBaToVBfKvXK5XGpoaFB1dXXQayAVFBSoT58+Onz4sCTu2/z58/Xaa69p+/bt6t27t6+dz1z7gt07M3zumnXu3FmXXXaZhgwZouXLl2vQoEF6+umnE+7zRkBJQvX19frwww9VUFCg4uJiuVwubdmyxfd4Q0ODysvLNWLEiDj20n5CuVeDBw9WRkaG3zWVlZU6ePAg97OFEydO6OjRoyooKJCUuvfNMAzNmzdPL7/8srZt26bi4mK/x/nMBdfevTPD586cYRiqr69PvM+bpVNyERMLFy40duzYYXz22WfG7t27jYkTJxrZ2dnGkSNHDMMwjMcff9xwOp3Gyy+/bBw4cMC44447jIKCAqOmpibOPbdebW2t8d577xnvvfeeIclYsWKF8d577xmff/65YRih3at7773X6N27t7F161Zj3759xqhRo4xBgwYZ586di9fbirm27lttba2xcOFCY9euXUZFRYWxfft2Y/jw4cZFF12U8vdt9uzZhtPpNHbs2GFUVlb6vr777jvfNXzmzLV37/jcmVu8eLHx1ltvGRUVFcb7779vPPDAA0ZaWpqxefNmwzAS6/NGQEkC06ZNMwoKCoyMjAyjsLDQmDp1qnHo0CHf401NTcaSJUsMl8tlZGZmGtdff71x4MCBOPY4frZv325ICviaMWOGYRih3aszZ84Y8+bNM3Jzc40uXboYEydONL744os4vBvrtHXfvvvuO2PcuHFGr169jIyMDOPiiy82ZsyYEXBPUvG+md0zScazzz7ru4bPnLn27h2fO3N33XWX0adPH6Nz585Gr169jNGjR/vCiWEk1ufNYRiGYV29BgAAoH3MQQEAALZDQAEAALZDQAEAALZDQAEAALZDQAEAALZDQAEAALZDQAEAALZDQAEAALZDQAEAALZDQAEAALZDQAEAALZDQAEAALbz/wOrnrXRSjdEdAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(y_hat_ebm, y_test, \"o\")\n", + "plt.plot(y_test, y_test, \"-\")" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "364941dc-5d93-4cf7-9638-a59dac665ee8", + "metadata": {}, + "outputs": [], + "source": [ + "from merf import MERF\n", + "merf = MERF()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f5facaa7-7086-4f56-8346-98765d508c19", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO [merf.py:307] Training GLL is 1763.3817123147687 at iteration 1.\n", + "INFO [merf.py:307] Training GLL is 1870.6218704909504 at iteration 2.\n", + "INFO [merf.py:307] Training GLL is 1907.8271937117267 at iteration 3.\n", + "INFO [merf.py:307] Training GLL is 1917.7421474746807 at iteration 4.\n", + "INFO [merf.py:307] Training GLL is 1940.1322305242377 at iteration 5.\n", + "INFO [merf.py:307] Training GLL is 1954.298382232997 at iteration 6.\n", + "INFO [merf.py:307] Training GLL is 1963.5869201183036 at iteration 7.\n", + "INFO [merf.py:307] Training GLL is 1958.6200378598992 at iteration 8.\n", + "INFO [merf.py:307] Training GLL is 1958.6875917054062 at iteration 9.\n", + "INFO [merf.py:307] Training GLL is 1974.6210287979754 at iteration 10.\n", + "INFO [merf.py:307] Training GLL is 1962.9141082223468 at iteration 11.\n", + "INFO [merf.py:307] Training GLL is 1979.9544334991142 at iteration 12.\n", + "INFO [merf.py:307] Training GLL is 1974.629933478824 at iteration 13.\n", + "INFO [merf.py:307] Training GLL is 1975.1997896158846 at iteration 14.\n", + "INFO [merf.py:307] Training GLL is 1996.8425550183122 at iteration 15.\n", + "INFO [merf.py:307] Training GLL is 1996.5776671569074 at iteration 16.\n", + "INFO [merf.py:307] Training GLL is 1996.0038768111663 at iteration 17.\n", + "INFO [merf.py:307] Training GLL is 2007.4828706103815 at iteration 18.\n", + "INFO [merf.py:307] Training GLL is 1997.2774818986284 at iteration 19.\n", + "INFO [merf.py:307] Training GLL is 1998.261373869593 at iteration 20.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merf.fit(X_train, Z_train, clusters_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "ead4f880-c746-4d03-9c49-98021a70b6f4", + "metadata": {}, + "outputs": [], + "source": [ + "y_hat_merf = merf.predict(X_test, Z_test, clusters_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "46eaa788-adac-4e83-ba75-bde15f17d1db", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MERF Regression Model\n", + "mean_absolute_error: 22.68994763980058\n", + "mean_squared_error: 1460.4859699626766\n", + "r2: 0.8286050862891772\n" + ] + } + ], + "source": [ + "print(\"MERF Regression Model\")\n", + "print(\"mean_absolute_error: \", mean_absolute_error(y_test, y_hat_merf))\n", + "print(\"mean_squared_error: \", mean_squared_error(y_test, y_hat_merf))\n", + "print(\"r2: \", r2_score(y_test, y_hat_merf))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "f2d30fb2-779c-4030-9ffa-f9a9d83d1217", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6uElEQVR4nO3de3iU5aHu/3sSkgliMhIOmUQiRkXdGMSKyqFWzhG6OCi2UFla3LK6FIHdbKBatKuELgtqf2q7Fy1dtS5AkeLeLagskQIbCU2RLYIsOVhEDRY0YxTDTIAcIHl/f8QZeDMzyUwyh3dmvp/rmutynnky88ybkbnzHG2GYRgCAACwkLR4NwAAAKA1AgoAALAcAgoAALAcAgoAALAcAgoAALAcAgoAALAcAgoAALAcAgoAALCcLvFuQEc0Nzfrs88+U3Z2tmw2W7ybAwAAQmAYhmpra1VQUKC0tLb7SBIyoHz22WcqLCyMdzMAAEAHHDt2TH369GmzTkIGlOzsbEktbzAnJyfOrQEAAKHweDwqLCz0fY+3JSEDindYJycnh4ACAECCCWV6BpNkAQCA5RBQAACA5RBQAACA5RBQAACA5RBQAACA5RBQAACA5RBQAACA5RBQAACA5STkRm0AACS6pmZDb1d+peraevXOztItRblKT+N8OS8CCgAAMbbpQJUWbzikKne9ryzfkaVFE/trXHF+HFtmHQzxAAAQQ5sOVGnW6r2mcCJJLne9Zq3eq00HquLUMmshoAAAECNNzYYWbzgkI8Bj3rLFGw6pqTlQjdRCQAEAIEbervzKr+fkQoakKne93q78KnaNaq3upPR/fyYdfyd+bRBzUAAAiJnq2uDhpCP1Iq5yh7RqYst/H62QZm6OTzsUZg/K8uXLdf311ysnJ0c5OTkaOnSo3njjDd/jhmGorKxMBQUF6tq1q0aMGKGDBw+anqOhoUFz585Vz5491a1bN02aNEnHjx+PzLsBACBGmpoNvfXRCb2671O99dGJkIZlemdnhfTcodaLqDceOR9OJOn6abFvwwXC6kHp06ePnnjiCV111VWSpFWrVmny5Ml69913dd111+mpp57SM888o5UrV+rqq6/W448/rrFjx+rw4cPKzs6WJJWWlmrDhg1au3atevToofnz52vChAnas2eP0tPTI/8OAQCIsI6uwrmlKFf5jiy53PUB56HYJDkdLUuOY6bpnPSvPcxl92+WLhscuzYEYDMMo1MzcXJzc/WLX/xC999/vwoKClRaWqpHHnlEUktvSV5enp588kk98MADcrvd6tWrl1588UVNm9aSzD777DMVFhZq48aNuv3220N6TY/HI4fDIbfbrZycnM40HwCAsHhX4bT+8vTuYLL8nhvbDCnen5dkeo5Qfz6iTnwk/duN5rKFxyV7dlReLpzv7w5Pkm1qatLatWt1+vRpDR06VJWVlXK5XCopKfHVsdvtGj58uHbu3ClJ2rNnj86ePWuqU1BQoOLiYl+dQBoaGuTxeEw3AABiLRKrcMYV52v5PTfK6TAP4zgdWbENJ3tWmsPJFSOlMnfUwkm4wp4ku3//fg0dOlT19fW6+OKLtX79evXv398XMPLy8kz18/Ly9Mknn0iSXC6XMjMz1b17d786Lpcr6GsuXbpUixcvDrepAABEhHfX179++GXIq3CGXtkjaL1xxfka298Zv51kfz9WOv72+ft3/rs08Huxee0QhR1QrrnmGu3bt08nT57Un/70J82YMUPl5eW+x20288U1DMOvrLX26ixcuFDz5s3z3fd4PCosLAy36QAAhC3QfJP2hLIKJz3N1maIiYq6k9KTfc1lP3xP6t43YPV4CjugZGZm+ibJ3nTTTdq9e7d+9atf+eaduFwu5eef756qrq729ao4nU41NjaqpqbG1ItSXV2tYcOGBX1Nu90uu90eblMBAOiUYPNN2hOXVTjtuXAJsSRldJMWHpPSrLlApdMbtRmGoYaGBhUVFcnpdGrLli2+xxobG1VeXu4LH4MGDVJGRoapTlVVlQ4cONBmQAEAINbamm8SjE0tq3liugonFKsmmcPJN0ulxz6zbDiRwuxBefTRRzV+/HgVFhaqtrZWa9eu1fbt27Vp0ybZbDaVlpZqyZIl6tevn/r166clS5booosu0vTp0yVJDodDM2fO1Pz589WjRw/l5uZqwYIFGjBggMaMGROVNwgAQEe0t+tra96JCosm9rfOqcRn66Wfm+eG6v4/S5cNiU97whBWQPn888917733qqqqSg6HQ9dff702bdqksWPHSpIefvhh1dXV6aGHHlJNTY0GDx6szZs3+/ZAkaRnn31WXbp00dSpU1VXV6fRo0dr5cqV7IECALCUcHdzdVrtNOIjW6WX7jKXRXEJcaR1eh+U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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(y_hat_merf, y_test, \"o\")\n", + "plt.plot(y_test, y_test, \"-\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "42129b7b-6f75-41e7-b565-cf44a175dadf", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO [merf.py:307] Training GLL is 1756.0443098578774 at iteration 1.\n", + "INFO [merf.py:307] Training GLL is 1870.6299808880237 at iteration 2.\n", + "INFO [merf.py:307] Training GLL is 1912.2472198141095 at iteration 3.\n", + "INFO [merf.py:307] Training GLL is 1929.4846161297685 at iteration 4.\n", + "INFO [merf.py:307] Training GLL is 1950.4886212027704 at iteration 5.\n", + "INFO [merf.py:307] Training GLL is 1965.556734921893 at iteration 6.\n", + "INFO [merf.py:307] Training GLL is 1966.2954209093828 at iteration 7.\n", + "INFO [merf.py:307] Training GLL is 1958.6409588405618 at iteration 8.\n", + "INFO [merf.py:307] Training GLL is 1959.456316351379 at iteration 9.\n", + "INFO [merf.py:307] Training GLL is 1980.5484296238556 at iteration 10.\n", + "INFO [merf.py:307] Training GLL is 1974.6592953690306 at iteration 11.\n", + "INFO [merf.py:307] Training GLL is 1972.7337181526273 at iteration 12.\n", + "INFO [merf.py:307] Training GLL is 1972.2167235724894 at iteration 13.\n", + "INFO [merf.py:307] Training GLL is 1969.0154173477276 at iteration 14.\n", + "INFO [merf.py:307] Training GLL is 1985.8735022996786 at iteration 15.\n", + "INFO [merf.py:307] Training GLL is 1991.5518261299442 at iteration 16.\n", + "INFO [merf.py:307] Training GLL is 2013.8915582551788 at iteration 17.\n", + "INFO [merf.py:307] Training GLL is 2010.7922731798976 at iteration 18.\n", + "INFO [merf.py:307] Training GLL is 2004.071512798519 at iteration 19.\n", + "INFO [merf.py:307] Training GLL is 2011.8739566409765 at iteration 20.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mrf_rf = MERF(rf)\n", + "mrf_rf.fit(X_train, Z_train, clusters_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "8f23720e-b2fd-4d7a-82dc-7a9aaa45d94a", + "metadata": {}, + "outputs": [], + "source": [ + "y_hat_merf_rf = mrf_rf.predict(X_test, Z_test, clusters_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "244d858c-8288-4b3e-9cc3-a8ae0ec386a5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MERF+RF Regression Model\n", + "mean_absolute_error: 23.526416819017854\n", + "mean_squared_error: 1513.2422472646606\n", + "r2: 0.8224138884400743\n" + ] + } + ], + "source": [ + "print(\"MERF+RF Regression Model\")\n", + "print(\"mean_absolute_error: \", mean_absolute_error(y_test, y_hat_merf_rf))\n", + "print(\"mean_squared_error: \", mean_squared_error(y_test, y_hat_merf_rf))\n", + "print(\"r2: \", r2_score(y_test, y_hat_merf_rf))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "028bf8f6-fe99-409a-9066-2c6bdeab6e13", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO [merf.py:307] Training GLL is 2437.4899014848297 at iteration 1.\n", + "INFO [merf.py:307] Training GLL is 2427.8988250485686 at iteration 2.\n", + "INFO [merf.py:307] Training GLL is 2434.7665505313316 at iteration 3.\n", + "INFO [merf.py:307] Training GLL is 2438.171820183171 at iteration 4.\n", + "INFO [merf.py:307] Training GLL is 2440.0531107244506 at iteration 5.\n", + "INFO [merf.py:307] Training GLL is 2441.3670563152627 at iteration 6.\n", + "INFO [merf.py:307] Training GLL is 2442.47436043523 at iteration 7.\n", + "INFO [merf.py:307] Training GLL is 2443.4993851274453 at iteration 8.\n", + "INFO [merf.py:307] Training GLL is 2444.4805964485568 at iteration 9.\n", + "INFO [merf.py:307] Training GLL is 2445.426522080128 at iteration 10.\n", + "INFO [merf.py:307] Training GLL is 2446.335611113075 at iteration 11.\n", + "INFO [merf.py:307] Training GLL is 2447.203061949204 at iteration 12.\n", + "INFO [merf.py:307] Training GLL is 2448.0230791132976 at iteration 13.\n", + "INFO [merf.py:307] Training GLL is 2448.789573847746 at iteration 14.\n", + "INFO [merf.py:307] Training GLL is 2449.496363235542 at iteration 15.\n", + "INFO [merf.py:307] Training GLL is 2450.1372283921314 at iteration 16.\n", + "INFO [merf.py:307] Training GLL is 2450.705949842018 at iteration 17.\n", + "INFO [merf.py:307] Training GLL is 2451.1963552777793 at iteration 18.\n", + "INFO [merf.py:307] Training GLL is 2451.602387485692 at iteration 19.\n", + "INFO [merf.py:307] Training GLL is 2451.918191600278 at iteration 20.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mrf_lm = MERF(lm)\n", + "mrf_lm.fit(X_train, Z_train, clusters_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "ca5689b7-0ada-40a8-99e9-d6f8003231b0", + "metadata": {}, + "outputs": [], + "source": [ + "y_hat_merf_lm = mrf_lm.predict(X_test, Z_test, clusters_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "0fb47c77-cc8e-4f2f-b62a-5d36bf3fc039", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MERF+LM Regression Model\n", + "mean_absolute_error: 41.65389016189721\n", + "mean_squared_error: 2853.789317204953\n", + "r2: 0.6650943700720995\n" + ] + } + ], + "source": [ + "print(\"MERF+LM Regression Model\")\n", + "print(\"mean_absolute_error: \", mean_absolute_error(y_test, y_hat_merf_lm))\n", + "print(\"mean_squared_error: \", mean_squared_error(y_test, y_hat_merf_lm))\n", + "print(\"r2: \", r2_score(y_test, y_hat_merf_lm))" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d66c0f33-74c2-4ad3-96f7-ce1740b3ed08", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7+ElEQVR4nO3de3hU5b33/88kJAExmRIOmURSjIpaGsQKyqFUkZOwNwfFbik8ttDyWEVhmwLVoq2EHkBphdpNpb9at6hIY58qHrZIhY2EspHKQTYEWooaFCRjFMIkIEkwWb8/MAMrM0lmMoe11sz7dV25LnLPmuSe5bTzyX343i7DMAwBAADYSIrVHQAAAGiOgAIAAGyHgAIAAGyHgAIAAGyHgAIAAGyHgAIAAGyHgAIAAGyHgAIAAGyng9UdaI/GxkYdPXpUmZmZcrlcVncHAACEwDAM1dTUKC8vTykprY+RODKgHD16VPn5+VZ3AwAAtMPhw4fVs2fPVq9xZEDJzMyUdPYFZmVlWdwbAAAQiurqauXn5/s/x1vjyIDSNK2TlZVFQAEAwGFCWZ7BIlkAAGA7BBQAAGA7BBQAAGA7BBQAAGA7BBQAAGA7BBQAAGA7BBQAAGA7BBQAAGA7jizUBgCAJDU0Gnq7/Lgqa2rVI7OjrivIVmoKZ7QlAgIKAMCR1pVVaOGr+1Xhq/W35bo7asH4PhpTmGthzxANTPEAABxnXVmFZq7aZQonkuT11Wrmql1aV1ZhUc8QLQQUAICjNDQaWvjqfhlBHmtqW/jqfjU0BrsCTkFAAQA4ytvlxwNGTs5nSKrw1ert8uPx61Qiqa2W3lwkHdlhaTdYgwIAcJTKmpbDSXuuw3k+OSD99rqz/37vTen/rresK2GNoKxYsUJXXXWVsrKylJWVpcGDB+v111/3P24YhoqLi5WXl6dOnTpp2LBh2rdvn+ln1NXVafbs2erWrZs6d+6sCRMm6MiRI9F5NQCAmGloNPTWe8f08u6P9NZ7xyybQumR2TGq1+EL+18+F04kqXCSdX1RmAGlZ8+eevjhh7Vjxw7t2LFDw4cP18SJE/0hZMmSJVq6dKmWL1+u7du3y+PxaNSoUaqpqfH/jKKiIq1Zs0YlJSXasmWLTp48qXHjxqmhoSG6rwwAEDXryio09JGNmvLENt1bsltTntimoY9stGQx6nUF2cp1d1RLm4ldOrub57qC7Hh2y9n+8qD0p++c+37yc9Kgmdb1R5LLMIyIInB2drZ++ctf6nvf+57y8vJUVFSk+++/X9LZ0ZKcnBw98sgjuvPOO+Xz+dS9e3c9++yzmjx5siTp6NGjys/P19q1a3XTTTeF9Durq6vldrvl8/mUlZUVSfcBAG1o2jHT/MOiKSCsuP2auG/rbeqTJFO/rOyTY/12kPTJ3899P2uH1K13TH5VOJ/f7V4k29DQoJKSEp06dUqDBw9WeXm5vF6vRo8e7b8mIyNDN9xwg7Zu3SpJ2rlzp86cOWO6Ji8vT4WFhf5rgqmrq1N1dbXpCwAQe3bdMTOmMFcrbr9GHrd5Gsfj7kg4CdXndVKx2xxO5h+JWTgJV9iLZPfu3avBgwertrZWF154odasWaM+ffr4A0ZOTo7p+pycHH3wwQeSJK/Xq/T0dHXp0iXgGq/X2+LvXLx4sRYuXBhuVwEAIWitGms4O2YGX9o1Tj0+a0xhrkb18VBJtj18H0nL+pz7PsMt/egDyWWfexd2QLniiiu0e/dunThxQi+88IKmTZum0tJS/+OuZi/OMIyAtubaumb+/PmaM2eO//vq6mrl5+eH23UAQDNtVWO1+46Z1BRX3IOR45Vvlp4ef+77vv8m3foH6/rTgrCneNLT03XZZZdpwIABWrx4sfr166fHHntMHo9HkgJGQiorK/2jKh6PR/X19aqqqmrxmmAyMjL8O4eavgAAkQmlGis7ZhLM1v8wh5Nxv7ZlOJGiUKjNMAzV1dWpoKBAHo9H69ef2zNdX1+v0tJSDRkyRJLUv39/paWlma6pqKhQWVmZ/xoAQOyFurakf68u7JhJFEv7SG/8+Nz3//e/pQHfta4/bQhriueBBx7Q2LFjlZ+fr5qaGpWUlGjTpk1at26dXC6XioqKtGjRIvXu3Vu9e/fWokWLdMEFF2jq1KmSJLfbrRkzZmju3Lnq2rWrsrOzNW/ePPXt21cjR46MyQsEAAQKdW3Jzg+qtGB8H81ctUsuBd8xs2B8H9Z92FnDGeln3cxt896VLuxuTX9CFFZA+fjjj/Xtb39bFRUVcrvduuqqq7Ru3TqNGjVKknTffffp9OnTuvvuu1VVVaWBAwfqjTfeUGZmpv9nLFu2TB06dNBtt92m06dPa8SIEVq5cqVSU1Oj+8oAAC0KZ23JxKsv0orbrwlYq+Lh5GD7O/6+9Juvmdt+ckxKtX8h+YjroFiBOigAEJm33jumKU9sa/O6P94xyL8ItbXdPrChd56TXr7b3Fbss6YvXwjn89v+EQoAEHVN1Vi9vtqg61BcOjtCcv7akpZ2zBBcbOiZm6X33zz3fUoH6aFjlnWnPQgoAJCEUlNcUVlb0tY2ZVig2G3+fuBd0thHrOlLBCLexQMAcKZIq7GGsk05mto6rNAuhxlaxjACw8l3XnZkOJEYQQGApNbeaqxtbVN26ew25VF9PFGZ7mlrpCbpR3JOHZN+eYm57b5y6QLnbv9mkSwAIGztWWTbXm0dVvj96wv0+83ltjrMMK52rpRevdfctuCErcrWN4nLYYEAgOQVrxL4oRSU+/1fA8PJ+Y9bcZhh3PzmmsBwUuyzZTgJFwEFABC2eJXAD6WgXGvzAOcfZphwit3S8featVm7jTiaCCgAgLA1bVOOdQn8aB1CaNVhhjHTfDHsoLsTKpxIBBQAQDs0bVOWFBBSolkCP1qHECbMYYYnKwPDyTefksYstqY/MURAAQC0S6TblEPR1khNW8IdybH1VuX//pn0q97mtgeOSoWTrOlPjLHNGADQbu3dphyq1grKhSrUkRxbb1VuPmoiJdyUTnNsMwYA2F6w8NCWrp3T9YtbCkMKF21tZbZ0q3IChRPO4gEAJJTzR2q81bX62X/t0/FTZ1q8Prtzmt6aP0LpHdpeyRDvonNhSaBwEi7WoAAAHKHpsMJbvnaRFt3SVy4FX6DrkrTolr4hhRMptK3Mcd+q3HAmMJwUfjNpwolEQAEAOFA0F+jGq+hcyA68Lv2sm7ntnu3SN5+Mz++3CaZ4AACOFK0FuvEqOheSh3tJtSfMbUk0anI+AgoAwLGapn0i0bSV2eurDboOxaWzIzOhbFVuaDTaH5iSeL1JMAQUAEDCaE9AaG0rczhF5yLapkw4CcA2YwBAQoi0jkkkz49om3LzcJJ+ofTAR23214nC+fwmoAAAHC9adUzaMwLT0Gho6CMbW9wJ1DRFtOX+4eafdew96T+uMV88eZX0lfFt9tOpqIMCAEga0axj0p41LeFsU/b/7DV3Sf/7R/OFP/5E6pAe1u9OZAQUAICjtSsgRFHY25RZbxIS6qAAABzN6jomYW1TJpyEjIACAHA0q+uYtHXictOJyoOfvSTwQcJJiwgoAABHCzUghFLHpD2atik3/a7mv7uTavVW3STzA18vIpy0gYACAHC0tgKCFFodk0i0VHr/jgu3aH/H75kvnntAGrUwZn1JFGwzBgAkhEjroETD+duUJ77UJ/CCJB81oQ4KACApRVRqPppYDBsUdVAAAEkpGmfzRIxwEhWsQQEAIBoMIzCc5PQlnLQTIygAAETqo53SE8PNbd9dJ/UabE1/EgABBQCASDz1L9IH/2Nue6hKSmGSIhIEFAAA2ov1JjFDvAMAoD0IJzFFQAEAIFyEk5gjoAAAEKpTnwaGkzGPEE5igDUoAACEonSJ9OYvzG0/+lDqGGQ0BREjoAAA0BamdOKOKR4AAFpDOLEEAQUAgJYQTixDQAEAoLmGzwPDyZXjCCdxxBoUAADOd3CD9Nyt5ra7t0k9vmJNf5IUAQUAgCaPfkWqOWpuY9TEEgQUAAAk1pvYDGtQAAAgnNgOAQUAkNwCwomLcGIDTPEAAJJT1SHpsX7mtn9bKX31Fit6g2YIKACA5PPKbGnXM+a2H1dKHTKs6Q8ChDXFs3jxYl177bXKzMxUjx49dPPNN+vAgQOma6ZPny6Xy2X6GjRokOmauro6zZ49W926dVPnzp01YcIEHTlyJPJXAwBAW4rdgeGk2Ec4sZmwAkppaanuuecebdu2TevXr9fnn3+u0aNH69SpU6brxowZo4qKCv/X2rVrTY8XFRVpzZo1Kikp0ZYtW3Ty5EmNGzdODQ0Nkb8iAABawmJYxwhrimfdunWm75966in16NFDO3fu1PXXX+9vz8jIkMfjCfozfD6fnnzyST377LMaOXKkJGnVqlXKz8/Xhg0bdNNNN4X7GgAAaBvhxFEi2sXj8539D5udnW1q37Rpk3r06KHLL79cd9xxhyorK/2P7dy5U2fOnNHo0aP9bXl5eSosLNTWrVuD/p66ujpVV1ebvgAACMmZ04HhZNDdhBOba3dAMQxDc+bM0dChQ1VYWOhvHzt2rJ577jlt3LhRjz76qLZv367hw4errq5OkuT1epWenq4uXbqYfl5OTo68Xm/Q37V48WK53W7/V35+fnu7DQBIJv9bIv2i2Yj+D/ZJYxZb0x+ErN27eGbNmqU9e/Zoy5YtpvbJkyf7/11YWKgBAwaoV69eeu211zRp0qQWf55hGHK5XEEfmz9/vubMmeP/vrq6mpACAGgdUzqO1q4RlNmzZ+uVV17Rm2++qZ49e7Z6bW5urnr16qWDBw9Kkjwej+rr61VVVWW6rrKyUjk5OUF/RkZGhrKyskxfAAC0iHDieGEFFMMwNGvWLL344ovauHGjCgoK2nzOsWPHdPjwYeXm5kqS+vfvr7S0NK1fv95/TUVFhcrKyjRkyJAwuw8AQDOEk4QQ1hTPPffco9WrV+vll19WZmamf82I2+1Wp06ddPLkSRUXF+vWW29Vbm6uDh06pAceeEDdunXTLbfc4r92xowZmjt3rrp27ars7GzNmzdPffv29e/qAQAgbIYhLfySua3b5dKs7ZZ0B5EJK6CsWLFCkjRs2DBT+1NPPaXp06crNTVVe/fu1TPPPKMTJ04oNzdXN954o55//nllZmb6r1+2bJk6dOig2267TadPn9aIESO0cuVKpaamRv6KAADJp+J/pf/venPbtFelguuDXw/bcxmGYVjdiXBVV1fL7XbL5/OxHgUAkt2zt0jvbTS3PVQlpXAert2E8/nNWTwAAOdivUnCIl4CAJyJcJLQCCgAAOchnCQ8AgoAwDk+Ox4YTkb9lHCSgFiDAgBwhi2/ljYsMLfdf0jq1CXY1XA4AgoAwP6Y0kk6TPEAAOyNcJKUCCgAAPsinCQtAgoAwH4aGwLDyWUjCSdJhDUoAAB7eX+T9MxEc9tdWyRPX0u6A2sQUAAA9vGbr0nH3ze3LTghuVyWdAfWIaAAAOyB9SY4D2tQAADWI5ygGQIKAMBahBMEQUABAFjjxOHAcHLL7wknkMQaFACAFV6/X/rb78xtD3qltE7W9Ae2Q0ABAMQXUzoIAVM8AID4IZwgRAQUAEB8EE4QBgIKACC2ztQGhpP+3yWcoFWsQQEAxE7ZC9Kfv2duu3eP1KWXNf2BYxBQAACxwZQOIsAUDwAg+ggniBABBQAQXYQTRAEBBQAQPc3DSVZPwgnahTUoAIDIfbxfWjHY3Hb7i9JlI6zpDxyPgAIAiMwfp0gH1prbHjoupaRa0x8kBAIKAKD9WG+CGGENCgCgfQgniCECCgAgfIQTxBgBBQAQulpfYDgZ/mPCCaKONSgAgNC89bj0l/nmth++L3Xuak1/kNAIKACAtjGlgzhjigcA0DrCCSxAQAEAtIxwAosQUAAAgRobA8PJxd8gnCBuWIMCADD7YKv01Fhz2x1vShddY01/kJQIKACAcx4fIlXuM7ctOCG5XJZ0B8mLgAIAOIv1JrAR1qAAAAgnsB0CCgAkO8IJbIiAAgDJqroiMJxMWE44gS2wBgUAktEbP5G2/sbc9sBRKb2zNf0BmiGgAECyYUoHDsAUDwAkE8IJHIKAAgDJgnACByGgAECi+7w+MJxc/X8IJ7C1sALK4sWLde211yozM1M9evTQzTffrAMHDpiuMQxDxcXFysvLU6dOnTRs2DDt22euSlhXV6fZs2erW7du6ty5syZMmKAjR45E/moAAGb7X5F+3t3cNnuXdPPj1vQHCFFYAaW0tFT33HOPtm3bpvXr1+vzzz/X6NGjderUKf81S5Ys0dKlS7V8+XJt375dHo9Ho0aNUk1Njf+aoqIirVmzRiUlJdqyZYtOnjypcePGqaGhIXqvDACS3S9ypT9929xW7JO6XmpNf4AwuAzDMNr75E8++UQ9evRQaWmprr/+ehmGoby8PBUVFen++++XdHa0JCcnR4888ojuvPNO+Xw+de/eXc8++6wmT54sSTp69Kjy8/O1du1a3XTTTW3+3urqarndbvl8PmVlZbW3+wCQuFhvAhsK5/M7ojUoPt/ZN3t2drYkqby8XF6vV6NHj/Zfk5GRoRtuuEFbt26VJO3cuVNnzpwxXZOXl6fCwkL/Nc3V1dWpurra9AUAaAHhBAmg3QHFMAzNmTNHQ4cOVWFhoSTJ6/VKknJyckzX5uTk+B/zer1KT09Xly5dWrymucWLF8vtdvu/8vPz29ttAEhszcPJBV0JJ3CkdgeUWbNmac+ePfrjH/8Y8Jir2bHchmEEtDXX2jXz58+Xz+fzfx0+fLi93QaAxPTJPwPDyZTnpfvet6Y/QITaVUl29uzZeuWVV7R582b17NnT3+7xeCSdHSXJzc31t1dWVvpHVTwej+rr61VVVWUaRamsrNSQIUOC/r6MjAxlZGS0p6sAkPj+33elfS+a235yTEqlWDicK6wRFMMwNGvWLL344ovauHGjCgoKTI8XFBTI4/Fo/fr1/rb6+nqVlpb6w0f//v2VlpZmuqaiokJlZWUtBhQAQAuK3YHhpNhHOIHjhfUOvueee7R69Wq9/PLLyszM9K8Zcbvd6tSpk1wul4qKirRo0SL17t1bvXv31qJFi3TBBRdo6tSp/mtnzJihuXPnqmvXrsrOzta8efPUt29fjRw5MvqvEAASFYthkcDCCigrVqyQJA0bNszU/tRTT2n69OmSpPvuu0+nT5/W3XffraqqKg0cOFBvvPGGMjMz/dcvW7ZMHTp00G233abTp09rxIgRWrlypVJTUyN7NQCQLAgnSHAR1UGxCnVQAGs1NBp6u/y4Kmtq1SOzo64ryFZqSusL4REldTXS4p7mtuvvk4Y/aE1/gDCE8/nNJCWAsKwrq9DCV/erwlfrb8t1d9SC8X00pjC3lWciYtv/IL0219w276B0YQ9r+gPEEAEFQMjWlVVo5qpdaj7s6vXVauaqXVpx+zWElFhhSgdJhtOMAYSkodHQwlf3B4QTSf62ha/uV0Oj42aN7Y9wgiREQAEQkrfLj5umdZozJFX4avV2+fH4dSoZEE6QpAgoAEJSWdNyOGnPdWiDYQSGk4sGEE6QNFiDAiAkPTI7RvU6tOL9UumZCea2aa9KBddb0x/AAgQUACG5riBbue6O8vpqg65DcUnyuM9uOUYEllwifXbM3LbghNTGeWZAomGKB0BIUlNcWjC+j6SzYeR8Td8vGN+HeiiRKHYHhpNiH+EESYmAAiBkYwpzteL2a+Rxm6dxPO6ObDGOFIthAROmeACEZUxhrkb18VBJNpoIJ0AAAgqAsKWmuDT40q5Wd8P5qo9KS79ibhuxQPrGHGv6A9gIAQUArPDKv0u7nja3/ehDqWOQ0RQgCRFQACDemNIB2sQiWQCIJ8IJEBICCgDEC+EECBkBBQBireFMYDj58hDCCdAK1qAAQCzt/bP0wgxz213/I3kKrekP4BAEFACIFaZ0gHZjigcAYoFwAkSEgAIA0UY4ASJGQAGAaCKcAFFBQAGAaKj8R2A4uXkF4QRoJxbJAkCknpkovb/J3PbjSqlDhiXdARIBAQUAIsGUDhATTPEAQHsRToCYIaAAQHsQToCYIqAAQDjqagLDSb+phBMgyliDAgCh+p/fSOt/Ym4rKpO+lG9Nf4AERkABgFAwpQPEFVM8ANAWwgkQdwQUAGgN4QSwBAEFAIIxjMBwkn4h4QSIE9agAEBzH2yVnhprbrv9Bemykdb0B0hCBBQAON+yvpLvQ3PbQ1VSCgPOQDwRUACgCetNANvgTwIAkAgngM0QUACAcALYDgEFQPKq+TgwnNxwP+EEsAHWoABITq/fL/3td+a2+8qlC7Kt6Q8AEwIKgOTDlA5ge0zxAEguhBPAEQgoAJIH4QRwDAIKgMTX8HlgOMntRzgBbIw1KAAS2/6XpT99x9z2/VIp72pLugMgNAQUAImLKR3AsZjiAZCYCCeAoxFQACQewgngeAQUAImFcAIkhLADyubNmzV+/Hjl5eXJ5XLppZdeMj0+ffp0uVwu09egQYNM19TV1Wn27Nnq1q2bOnfurAkTJujIkSMRvRAASe7TdwPDyfjHCCeAQ4UdUE6dOqV+/fpp+fLlLV4zZswYVVRU+L/Wrl1reryoqEhr1qxRSUmJtmzZopMnT2rcuHFqaGgI/xUAwOpvScv7m9se9Er9p1vSHQCRC3sXz9ixYzV27NhWr8nIyJDH4wn6mM/n05NPPqlnn31WI0eOlCStWrVK+fn52rBhg2666aZwuwQgmTGlAySkmKxB2bRpk3r06KHLL79cd9xxhyorK/2P7dy5U2fOnNHo0aP9bXl5eSosLNTWrVuD/ry6ujpVV1ebvgCAcAIkrqgHlLFjx+q5557Txo0b9eijj2r79u0aPny46urqJEler1fp6enq0qWL6Xk5OTnyer1Bf+bixYvldrv9X/n5+dHuNgCnIZwACS3qhdomT57s/3dhYaEGDBigXr166bXXXtOkSZNafJ5hGHK5XEEfmz9/vubMmeP/vrq6mpACJKv6U9KiPHPbV2+R/m2lJd0BEBsxrySbm5urXr166eDBg5Ikj8ej+vp6VVVVmUZRKisrNWTIkKA/IyMjQxkZGbHuKgC7+9vvpdd/aG77991SdoEl3QEQOzGvg3Ls2DEdPnxYubm5kqT+/fsrLS1N69ev919TUVGhsrKyFgMKAKjYHRhOin2EEyBBhT2CcvLkSb377rv+78vLy7V7925lZ2crOztbxcXFuvXWW5Wbm6tDhw7pgQceULdu3XTLLbdIktxut2bMmKG5c+eqa9euys7O1rx589S3b1//rh4AMGG9CZB0wg4oO3bs0I033uj/vmltyLRp07RixQrt3btXzzzzjE6cOKHc3FzdeOONev7555WZmel/zrJly9ShQwfddtttOn36tEaMGKGVK1cqNTU1Ci8JQEIhnABJyWUYhmF1J8JVXV0tt9stn8+nrKwsq7sDIBYMQ1r4JXObK0VaUGVJdwBELpzP75gvkgWAsB3eLj3ZbMp3Sol0RetFIgEkDgIKAHtZfp306QFz20PHpRSmgIFkQkABYB+sNwHwhZhvMwaAkBBOAJyHgALAeoQTAM0QUABY59SngeHk6/cSTgCwBgWARdY/JP3PY+a2H74nde5mTX8A2AoBBUD8MaUDoA1M8QCIL8IJgBAwgoKYaWg09Hb5cVXW1KpHZkddV5Ct1BSX1d2ClQgnAEJEQEFMrCur0MJX96vCV+tvy3V31ILxfTSmMNfCnsESjQ3ST7PNbd2ukGa9bU1/ANgeUzyIunVlFZq5apcpnEiS11ermat2aV1ZhUU9gyUOvB4YTmZsIJwAaBUjKOdhSiJyDY2GFr66X8FOoDQkuSQtfHW/RvXxcG+TQbApnQUnJBf/7QG0joDyBaYkouPt8uMBIyfnMyRV+Gr1dvlxDb60a/w6hvhjvQmACDDFI6YkoqmypuVw0p7r4FCEEwARSvqA0taUhHR2SqKhMdgVaK5HZseoXgcHIpwAiIKkDyjhTEmgbdcVZCvX3VEtrTBw6ezU2XUF2S1cAcf6eH9gOLnxx4QTAO2S9GtQmJKIrtQUlxaM76OZq3bJJZlGpppCy4LxfVggm2j+o7907F1z2/yPpIwLrekPAMdL+hEUpiSib0xhrlbcfo08bvM987g7asXt17DoONEUuwPDSbGPcAIgIkk/gtI0JeH11QZdh+LS2Q9WpiTCM6YwV6P6eNi2nehYbwIgRpI+oDAlETupKS62EicywgmAGEr6KR6JKQmc1dBo6K33junl3R/prfeOsXOrJfWnAsNJZi7hBEBUJf0IShOmJJIbhfpCtPEX0uYl5rY7/yrlXmVNfwAkLJdhGI77M7G6ulput1s+n09ZWVlWdwcO11Sor/n/EJqiKaNoX2BKB0CEwvn8ZooHSY1CfSEinACIMwIKkhqF+kJAOAFgAQIKkhqF+tpAOAFgEQIKkhqF+lpQvjkwnPzLrwgnAOKGXTxIahTqCyLYqMlPPpVS0+LfFwBJixEUJLWmQn2SAg44TMpCfS1N6RBOAMQZAQVJj0J9X2C9CQAbYYoHEIX6CCcA7IaAAnwhKc8OOvmJ9KvLTE2V3YfovTGrdF2jkTwBDYDtEFCAZPXnGVLZn01NQ2p/o6OHu0lPbKPUPwBLsQYFSEbF7oBwcnHtah1VN//3Xl+tZq7apXVlFfHuHQAQUICkE2S9ycW1qwPaKPUPwEoEFDhWQ6Oht947ppd3f6S33jvGh2goQgwnTSj1D8AqrEGBI60rq9DCV/ebztFhzUQrGhuln3YJaH755v1Sye42n560pf4BWIYRFDjOurIKzVy1K+CQP9ZMtOB/nw8MJ9/6o1Tso9Q/ANtiBAWO0tBoaOGr+4OWpTd0tvrrwlf3a1QfD1tkpeD1TRackFxn7w2l/gHYFSMocJS3y48HjJycjzUT52mp+JrrXHCj1D8AuyKgwFFCXQuR9GsmwqgMS6l/AHbEFA8chTUTIWhH2fqkL/UPwHYIKHAU1ky0ovLv0uODzG19b5NufSKkpydlqX8AtkVAgaM0rZmYuWqXXJIppCT1molfXSGd9Jrb7iuXLkjCoAYgIbAGBY4zpjBXv516jbp0Tje123XNRMwLyhW7A8NJsY9wAsDRGEGB46wrq9DPXtuv46fq/W3ZndP0k3/9iu3CScwLyrVjvYkTNDQarIcBklzYIyibN2/W+PHjlZeXJ5fLpZdeesn0uGEYKi4uVl5enjp16qRhw4Zp3759pmvq6uo0e/ZsdevWTZ07d9aECRN05MiRiF4IkkNLRdqqTp3RPavfsVWRtpgXlEvQcLKurEJDH9moKU9s070luzXliW0a+shGW/23BRB7YQeUU6dOqV+/flq+fHnQx5csWaKlS5dq+fLl2r59uzwej0aNGqWamhr/NUVFRVqzZo1KSkq0ZcsWnTx5UuPGjVNDQ0P7XwkSXltF2iT7HGwX076eOZ3Q4YQqwQCkdgSUsWPH6uc//7kmTZoU8JhhGPr1r3+tBx98UJMmTVJhYaGefvppffbZZ1q9+uyBZD6fT08++aQeffRRjRw5Ul/72te0atUq7d27Vxs2bIj8FSFhOalIW8z6uqFY+oXH3Pbd1xMinDgpgAKIvaguki0vL5fX69Xo0aP9bRkZGbrhhhu0detWSdLOnTt15swZ0zV5eXkqLCz0X9NcXV2dqqurTV9IPk4q0haTvha7pS3LmrX5pF5DwuiZfTkpgAKIvagGFK/37E6CnJwcU3tOTo7/Ma/Xq/T0dHXp0qXFa5pbvHix3G63/ys/Pz+a3YZDOKlIW9T7mqBTOudzUgAFEHsx2WbscplX2xuGEdDWXGvXzJ8/Xz6fz/91+PDhqPUVztFUpK2ld5JLZ3fI2KFIW1T7GuNw0nwbdP3njbHdFt0CJwVQALEX1W3GHs/ZuXGv16vc3HNbKCsrK/2jKh6PR/X19aqqqjKNolRWVmrIkOBD1RkZGcrIyIhmV+FATirSFrW+xjicBNsGneKSzs8kUd0W3QqqBAM4X1RHUAoKCuTxeLR+/Xp/W319vUpLS/3ho3///kpLSzNdU1FRobKyshYDCtDESQfbRdTXg+sDw8ngWVEPJ8F2zDQfMInXDhpOVgZwvrBHUE6ePKl3333X/315ebl2796t7OxsffnLX1ZRUZEWLVqk3r17q3fv3lq0aJEuuOACTZ06VZLkdrs1Y8YMzZ07V127dlV2drbmzZunvn37auTIkdF7ZUhYTjrYLty+NjQaSv3plwIfePBjKS16Uxut7ZhpztDZgLDw1f0a1ccT0/vcFOqaj+p44jSKA8A+wg4oO3bs0I033uj/fs6cOZKkadOmaeXKlbrvvvt0+vRp3X333aqqqtLAgQP1xhtvKDMz0/+cZcuWqUOHDrrtttt0+vRpjRgxQitXrlRqamoUXhKSgZMOtgu1r+vKKjTmz1cGtn/zHxoTxXAitb1jprnzd9DE+r47KYACiB2XYRiOKypQXV0tt9stn8+nrKwsq7sDRKylcFJQe7Z+ULSnr17e/ZHuLdkd9vMe+9bVmnj1RVHrB4DkEs7nN4cFAhZraDSChpOLa1fHrEBZe3fCsIMGQLwQUAArVVcEXXNy8RcjJ1JsCpS1tQ26OTtt4QaQHAgogFV+N1Raah45GVP3sCmcnC+aBcpa2zHTHDtoAFiBgAJYodgtefeami6uXa1/GF9u8SnRnl5paRt08wxixy3cABJfVAu1AQhBkOJrgzNelKs2/gXKgu2Y6d+ri3Z+UMUOGgCWIqAA8dRCZdgFXxRNs6JCbrBt0E7Zwg0gcTHFg4TS/FyZeJ0j06bGxlbL1jupQi4AxAMjKEgYwc6Vidc5Mq1663HpL/PNbTctkgbfY2qiQBkAnEOhtiTS0Ggk7Idf07kyzd/MTa/OslGIYKMmD1VJKQxeAkg+4Xx+M4KSJGw7uhAFrZ0rE89zZALE+CRiAEhk/BmXBFo6tTZep9TGWlvnysSi0FmbCCcAEBECSoJra3RBin4Z9XgLtYBZNAudtYpwAgARI6AkOFuOLkRZqAXMYn6OzMf7A8NJr6GEEwBoB9agJDjbjS7EQNO5Ml5f/Aud+QUbNZn7TykzJ3a/EwASGCMoCc42owsx1Nq5MtEqdNZqfZWWpnQIJwDQboygJDhbjC7EQVOhs+Y7lTxR2KnU6g6oP18Z+ASmdAAgYtRBSQJNu3ik4GXUE6lSabRrvbRWX6W849TAJxBOAKBF1EGBSSxHF+wm2Lky7dXSDqgM1etAx+mBTyCcAEDUEFCSBGXUwxdsB9TPOvynvt1hg6ntHzf8TlfeOCWeXQOAhEdASSLRHF1IBs13Nh0KMqVzce1qPdblagVZiQIAiAABBWjB+TubWgonza8LVSKfiwQA0UBAAVrQtAPqrbpJAY9dXLu63TugEvlcJACIFuqgAC1ITXG1Gk6k8OurtHQuUoWvVnet2qW1e45G0mUASBgEFCCYdzcEFGB7sWGof1rH4+4Y9vbs1s5FajLrj+9o7Z7oHN7YanE5ALA5pniA5oJUhm340RHlflSvxyJYM9LWuUiS1GhId6/epd+lRFabhmkkAE7HCApwvhbK1qd2zNTgS7tq4tUXafClXdu1oDWc844iOWG6pWkkr69WM1ft0rqy6IzQAEAsEVCAJi2dqRMl4ez2ae8J061NIzW1RRJ+ACBeCCiAFPNwIp3bFRSq9pww3dY0kqH2hx8AiCcCCpLbqU/jEk4k86nLoWhPfZVQQ017wg8AxBMBBcnrP8dIv7zU3HbHxpieqTOmMFePT/2aWlvC4tLZBa3tOWE61FDTnvADAPHELh4kp3aOmkSjAuy/XJWn5XLp7tW7Ah5rb32VJk3TSF5fbdB1KO0tLgcA8UZAQfJpZziJ5tbdf7kqV79Lif4J003TSDNX7ZJLMoWUSMMPAMSTyzAMxy3nr66ultvtls/nU1ZWltXdgZNEEE5mrtoVMCrR9DEfbtG2JrE6k4c6KADsKJzPb0ZQkBwMQ1r4pcD2EKd12tq6+8CavTp9plGerPBCRqxOmB5TmKtRfTwcSAjAsQgoSChBRyR2/EFaO8984fAfS9f/MKSfGUoF2OOnzugHz++WZJ+RiliFn3ji1GcgeRFQkDCCTWsc6jg18MKHjkspqSH/3HC35DZVbG3vtA/OYpoKSG5sM0ZCCFbePWg4KfaFFU6k8LfkJnrF1ngcQki5fgCMoMDxgq0RCRZOGh46ofCiyVnXFWQru3Oajp86E/Jzzq/Y6vRplvPFY1SjrTU/Lp0Nf6P6eJjuARIYIyhwvOZrRIKFk4trV7e7vHtqiku3XH1Ru56bSBVb4zWqQbl+ABIBBQmgKQT0dH0SEE62N16ui2tXm65rj5F9PO16XqJUbI3nIYSU6wcgMcWDBNAjs6NWpC3T2NTtpvZrax/XJ/qS6br2aqtCa3OJVrE1nFGNSKe0KNcPQGIEBQlg8LOXBISTi2tX+8NJJGfbNDn/oL+2Vj0kYsXWeI5qNIXBlu5cNP57ArA/AgqcLUhl2KYpHSm8sNDW7pQxhblacfs18rjNf7k3/7Eed8eE22Icz1GN1sJgIoY/AMExxQPnChJOLqlbbfre5ZLu+EZBm2Eh1N0pwSq09u/VRTs/qEroYmLxPoSwKQxG+6wiAM7BWTxwnoYz0s+6mZoaXR106elnWvzwbG1EI1bn7CSapvskBT+EMBb3iUqyQGIJ5/ObKR44y65nAsJJw3f+S19P/1Ori1db2mESz90pTtfSFFcsp7SayvVPvPoiDb60K+EESCJM8cA5WjiJ+O33jqnCt63Fp7W2wySS3SnJ+Nc9hxACiBcCCpyhhXAiRbbDpL3PTeZzYhLhEEIA9hf1KZ7i4mK5XC7Tl8dzrsiVYRgqLi5WXl6eOnXqpGHDhmnfvn3R7gYSSSvhRIpsh0l7nss5MQAQezFZg/LVr35VFRUV/q+9e/f6H1uyZImWLl2q5cuXa/v27fJ4PBo1apRqampi0RU4XRvhRIqsbka4z21rzYohqfiVfaxZAYAIxSSgdOjQQR6Px//VvXt3SWdHT37961/rwQcf1KRJk1RYWKinn35an332mVavXt3GT0VSOV4eGE7GLgkIJ1LbdTMMSd+6Nl//tedoQH2TcGtutLVmRZK81XVavvHdVq+xu3icWGwHyfI6ASeKyRqUgwcPKi8vTxkZGRo4cKAWLVqkSy65ROXl5fJ6vRo9erT/2oyMDN1www3aunWr7rzzzqA/r66uTnV1df7vq6urY9Ft2MULd0h7/2Rue6BCSr+gxae0VDfDfUGaJGnZhoP+tuZrRcKpuRHqmpVlG/6pKzwXOnI9SrKsr0mW1wk4VdTroLz++uv67LPPdPnll+vjjz/Wz3/+c/3jH//Qvn37dODAAX3961/XRx99pLy8PP9zvv/97+uDDz7QX/7yl6A/s7i4WAsXLgxopw5KAgphSqc15++sOfTpZ/r1hn+GXN8klF05b713TFOeaHnH0Ply3R215f7hjtrhkiw1YZLldQJ2Y2kdlLFjx+rWW29V3759NXLkSL322muSpKefftp/jctl/j9swzAC2s43f/58+Xw+/9fhw4ej3W3YQYThRDq3w2TcVXkq2f5hWPVNQqm50bRmJRRN25OdIllqwiTL6wScLuaF2jp37qy+ffvq4MGD/t08Xq/XdE1lZaVycnJa/BkZGRnKysoyfSHBRCGcnC+c+ibhOH/NSiiicXhevMTqntlNsrxOwOliHlDq6ur097//Xbm5uSooKJDH49H69ev9j9fX16u0tFRDhgyJdVdgR2dOB4aTq2+PKJxIsT19d0xhrn4wsndI10bj8Lx4ieeJxVZKltcJOF3UA8q8efNUWlqq8vJy/e1vf9M3v/lNVVdXa9q0aXK5XCoqKtKiRYu0Zs0alZWVafr06brgggs0derUaHcFdrfnT9IvPOa2e/dIN/824h8d69N3Zw3vLU9W68/N7pwmb3WtY3aHxPPEYisly+sEnC7qu3iOHDmiKVOm6NNPP1X37t01aNAgbdu2Tb169ZIk3XfffTp9+rTuvvtuVVVVaeDAgXrjjTeUmZkZ7a7AQm0uOI3ylE5zsT59NzXFpeIJfYIentfk+Kkz+sHzuyU5Y3dIvE8stkqyvE7A6TjNGFHX5vbNGIeT8/sR69N3g73WYJyyO8SKE4utkCyvE7CbcD6/CSiIqra2b5Z3DDKVF4Nwcn5/Yl3romm0yOs7rZ+99ncdP1Uf9Lqmv8ztvvU4WeqDJMvrBOyEgOJgTj4ht6HR0NBHNrYwmmDoUMf/Y27KvkT693fi0q943NNQa6T88Y5Btj9sz8nvw3Aky+sE7CKcz29OM7YRp/9F19L2zUtcR7UxY5658TsvS5cMi0u/4nX6rl12h0TjQzdRTywOdm8S8XUCiYCAYhMtTY00nZDrhDnxYB+8P+/wpG7v8N+mtpcn7tXES74cr27FjR12hzg95MYS9wZwlpjXQUHbEqWyZfMP3kMdpwaEk4trV6tHVueIfo9dD3iL5FTlaGgKuc1HsZpC7rqyipj8Xifg3gDOQ0CxgUSpbHn+B/ShIIthC2pXR/wBva6sQkMf2agpT2zTvSW7NeWJbRr6yEZbfMCEezJyNCVKyI0F7g3gTAQUG7DL2oVINX1AB9upU1C7WlJkH9BO+Cu46WRkT7PzejzujjGdpkuUkBsL3BvAmViDYgN2WLsQFWdOa8yfrzQ13VE/R+sbB0Q819/WX8Eunf0reFQfj+W7MMYU5mpUH09cd4ckSsiNBe4N4EwEFBtIiMqWnx6Ulg8wNf1tyj6NO+3S96LwAR3OX8F22JUR710wCRNyY4B7AzgTUzw2YOXahajY+XRAOFGxTwOv6KmJV1+kwZd2jbjv/BXcOqsX6NoZ9wZwJgKKTVi1diFiT/2r9Oq/m9tiUBmWv4Jb5/iQG0PcG8CZqCRrM46qbNn8TJ2v3yuN+mlMflVTldq2psHsXkY+1qj10TLuDWA9St0jtgxDWvglc9v0tdLFX4/pr+WAt9A4KuTGGfcGsBYBBbFz8hPpV5eZ2+4/JHXqEpdfz1/BAOBcnMWD2Di4QXruVnPbghOSK35/gYa6hZe/lAHA2QgoCM1//UDa8Z/mthgshg1FW1t4GWUBAOdjFw/aVuw2h5Mr/tWycNIWJ1SbBQC0jYCC1jXfqXPrk9KU1db0pQ2cuQIAiYOAguAazgSGk3v3SH2/aU1/QsCZKwCQOFiDgkA1H0uPXm5ue+i4lJJqTX9CRLVZAEgcjKDA7PDb5nBy5biz601sHk4kqs0CQCIhoOCct5+Qnhx17vsxD0vfes66/oSJM1cAIHEQUHDW/5surZ137vvvvi4NmmlZd9qDM1cAIHEQUJKdYUg/90j71pxrm/MPqdcQ6/oUAcceuggAMGGRbDKrrZYezje3/fgTqUO6Nf2JklCrzQIA7IuAkqwq/yE9PvDc956rpLv+al1/oqytarMAAHsjoCSJ88+mufL4Rl2xeda5B4f+QBpZbFnfAABojoCSBM4/m+bHHZ7VxA6vn3vwW6ulK//Vus4BABAEASXBNZ1NY0han/5D9U75yP/Y8LpHdd/n12iMdd0DACAodvEksKazadJ0Roc6TjWFkz61/6lyI5ezaQAAtkRASWBvlx/Xp76T+mfHaf62KuNCXVz7nD5TR86mAQDYFgElgVXW1GpAygH/9y80DNXX6n6v5mXMOJsGAGA3rEFJYD0yO2pH4xWaf2aG3m28SNuNK1u8DgAAOyGgJLDrCrLVzX2hSnwjFGyViUtnK6xyNg0AwG6Y4klgnE0DAHAqAkqC42waAIATMcWTBDibBgDgNASUJMHZNAAAJ2GKBwAA2A4BBQAA2A4BBQAA2A4BBQAA2A4BBQAA2A4BBQAA2A4BBQAA2A4BBQAA2A4BBQAA2I4jK8kaxtmzeaurqy3uCQAACFXT53bT53hrHBlQampqJEn5+fkW9wQAAISrpqZGbre71WtcRigxxmYaGxt19OhRZWZmyuVy/oF31dXVys/P1+HDh5WVlWV1d2yBexIc9yUQ9yQ47ksg7kmgeN8TwzBUU1OjvLw8paS0vsrEkSMoKSkp6tmzp9XdiLqsrCz+R9MM9yQ47ksg7klw3JdA3JNA8bwnbY2cNGGRLAAAsB0CCgAAsB0Cig1kZGRowYIFysjIsLortsE9CY77Eoh7Ehz3JRD3JJCd74kjF8kCAIDExggKAACwHQIKAACwHQIKAACwHQIKAACwHQKKDTz++OMqKChQx44d1b9/f/31r3+1uktxU1xcLJfLZfryeDz+xw3DUHFxsfLy8tSpUycNGzZM+/bts7DH0bd582aNHz9eeXl5crlceumll0yPh3IP6urqNHv2bHXr1k2dO3fWhAkTdOTIkTi+iuhq655Mnz494H0zaNAg0zWJdk8WL16sa6+9VpmZmerRo4duvvlmHThwwHRNMr5XQrkvyfZ+WbFiha666ip/8bXBgwfr9ddf9z/ulPcJAcVizz//vIqKivTggw/qnXfe0Te+8Q2NHTtWH374odVdi5uvfvWrqqio8H/t3bvX/9iSJUu0dOlSLV++XNu3b5fH49GoUaP85zElglOnTqlfv35avnx50MdDuQdFRUVas2aNSkpKtGXLFp08eVLjxo1TQ0NDvF5GVLV1TyRpzJgxpvfN2rVrTY8n2j0pLS3VPffco23btmn9+vX6/PPPNXr0aJ06dcp/TTK+V0K5L1JyvV969uyphx9+WDt27NCOHTs0fPhwTZw40R9CHPM+MWCp6667zrjrrrtMbVdeeaXxox/9yKIexdeCBQuMfv36BX2ssbHR8Hg8xsMPP+xvq62tNdxut/G73/0uTj2ML0nGmjVr/N+Hcg9OnDhhpKWlGSUlJf5rPvroIyMlJcVYt25d3PoeK83viWEYxrRp04yJEye2+JxEvyeGYRiVlZWGJKO0tNQwDN4rTZrfF8Pg/WIYhtGlSxfjD3/4g6PeJ4ygWKi+vl47d+7U6NGjTe2jR4/W1q1bLepV/B08eFB5eXkqKCjQt771Lb3//vuSpPLycnm9XtP9ycjI0A033JA09yeUe7Bz506dOXPGdE1eXp4KCwsT+j5t2rRJPXr00OWXX6477rhDlZWV/seS4Z74fD5JUnZ2tiTeK02a35cmyfp+aWhoUElJiU6dOqXBgwc76n1CQLHQp59+qoaGBuXk5Jjac3Jy5PV6LepVfA0cOFDPPPOM/vKXv+iJJ56Q1+vVkCFDdOzYMf89SOb7E8o98Hq9Sk9PV5cuXVq8JtGMHTtWzz33nDZu3KhHH31U27dv1/Dhw1VXVycp8e+JYRiaM2eOhg4dqsLCQkm8V6Tg90VKzvfL3r17deGFFyojI0N33XWX1qxZoz59+jjqfeLI04wTjcvlMn1vGEZAW6IaO3as/999+/bV4MGDdemll+rpp5/2L2JL5vvTpD33IJHv0+TJk/3/Liws1IABA9SrVy+99tprmjRpUovPS5R7MmvWLO3Zs0dbtmwJeCyZ3yst3ZdkfL9cccUV2r17t06cOKEXXnhB06ZNU2lpqf9xJ7xPGEGxULdu3ZSamhqQSCsrKwPSbbLo3Lmz+vbtq4MHD/p38yTz/QnlHng8HtXX16uqqqrFaxJdbm6uevXqpYMHD0pK7Hsye/ZsvfLKK3rzzTfVs2dPf3uyv1daui/BJMP7JT09XZdddpkGDBigxYsXq1+/fnrssccc9T4hoFgoPT1d/fv31/r1603t69ev15AhQyzqlbXq6ur097//Xbm5uSooKJDH4zHdn/r6epWWlibN/QnlHvTv319paWmmayoqKlRWVpY09+nYsWM6fPiwcnNzJSXmPTEMQ7NmzdKLL76ojRs3qqCgwPR4sr5X2rovwSTD+6U5wzBUV1fnrPdJ3JbjIqiSkhIjLS3NePLJJ439+/cbRUVFRufOnY1Dhw5Z3bW4mDt3rrFp0ybj/fffN7Zt22aMGzfOyMzM9L/+hx9+2HC73caLL75o7N2715gyZYqRm5trVFdXW9zz6KmpqTHeeecd45133jEkGUuXLjXeeecd44MPPjAMI7R7cNdddxk9e/Y0NmzYYOzatcsYPny40a9fP+Pzzz+36mVFpLV7UlNTY8ydO9fYunWrUV5ebrz55pvG4MGDjYsuuiih78nMmTMNt9ttbNq0yaioqPB/ffbZZ/5rkvG90tZ9Scb3y/z5843Nmzcb5eXlxp49e4wHHnjASElJMd544w3DMJzzPiGg2MBvf/tbo1evXkZ6erpxzTXXmLbHJbrJkycbubm5RlpampGXl2dMmjTJ2Ldvn//xxsZGY8GCBYbH4zEyMjKM66+/3ti7d6+FPY6+N99805AU8DVt2jTDMEK7B6dPnzZmzZplZGdnG506dTLGjRtnfPjhhxa8muho7Z589tlnxujRo43u3bsbaWlpxpe//GVj2rRpAa830e5JsPshyXjqqaf81yTje6Wt+5KM75fvfe97/s+U7t27GyNGjPCHE8NwzvvEZRiGEb/xGgAAgLaxBgUAANgOAQUAANgOAQUAANgOAQUAANgOAQUAANgOAQUAANgOAQUAANgOAQUAANgOAQUAANgOAQUAANgOAQUAANgOAQUAANjO/w+JQQiuyce7RwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(y_hat_merf_lm, y_test, \"o\")\n", + "plt.plot(y_test, y_test, \"-\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "b985593e-11c8-48c8-8c09-6f59d4a3e872", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1729.2322117100189 at iteration 1.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1722.6336802748651 at iteration 2.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1741.7049929706577 at iteration 3.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1762.391802675483 at iteration 4.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1757.2373504751026 at iteration 5.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1829.2879109190922 at iteration 6.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1843.3488100314746 at iteration 7.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1845.6852501846533 at iteration 8.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1854.0603037378419 at iteration 9.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1841.5651430986702 at iteration 10.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1840.8167716915584 at iteration 11.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1858.6193161061392 at iteration 12.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1855.8811580852757 at iteration 13.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1877.5603737348674 at iteration 14.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1888.8149421934836 at iteration 15.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1898.6859052262948 at iteration 16.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1901.1670785781039 at iteration 17.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1909.0686819364796 at iteration 18.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1920.060517314308 at iteration 19.\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [_binning.py:2584] Creating native dataset\n", + "INFO [ebm.py:702] Estimating with FAST\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [bin.py:29] eval_terms\n", + "INFO [merf.py:307] Training GLL is 1925.9246843298638 at iteration 20.\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mrf_ebm = MERF(ebm)\n", + "mrf_ebm.fit(X_train, Z_train, clusters_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "3210e5e1-bc3e-4b7c-bae9-a7326a064dda", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO [bin.py:29] eval_terms\n" + ] + } + ], + "source": [ + "y_hat_merf_ebm = mrf_ebm.predict(X_test, Z_test, clusters_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "aa8d71ec-0f0e-4b36-9e7c-ec0688ef4a07", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MERF+EBM Regression Model\n", + "mean_absolute_error: 29.893672342605583\n", + "mean_squared_error: 1805.5081944718838\n", + "r2: 0.7881151017126167\n" + ] + } + ], + "source": [ + "print(\"MERF+EBM Regression Model\")\n", + "print(\"mean_absolute_error: \", mean_absolute_error(y_test, y_hat_merf_ebm))\n", + "print(\"mean_squared_error: \", mean_squared_error(y_test, y_hat_merf_ebm))\n", + "print(\"r2: \", r2_score(y_test, y_hat_merf_ebm))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "d3bf32eb-6e04-476b-aae9-ba8224d72e0b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6uElEQVR4nO3de3iU5aHu/3sSkgliMhIOmUQiRkXdGMSKyqFWzhG6OCi2UFla3LK6FIHdbKBatKuELgtqf2q7Fy1dtS5AkeLeLagskQIbCU2RLYIsOVhEDRY0YxTDTIAcIHl/f8QZeDMzyUwyh3dmvp/rmutynnky88ybkbnzHG2GYRgCAACwkLR4NwAAAKA1AgoAALAcAgoAALAcAgoAALAcAgoAALAcAgoAALAcAgoAALAcAgoAALCcLvFuQEc0Nzfrs88+U3Z2tmw2W7ybAwAAQmAYhmpra1VQUKC0tLb7SBIyoHz22WcqLCyMdzMAAEAHHDt2TH369GmzTkIGlOzsbEktbzAnJyfOrQEAAKHweDwqLCz0fY+3JSEDindYJycnh4ACAECCCWV6BpNkAQCA5RBQAACA5RBQAACA5RBQAACA5RBQAACA5RBQAACA5RBQAACA5RBQAACA5STkRm0AACS6pmZDb1d+peraevXOztItRblKT+N8OS8CCgAAMbbpQJUWbzikKne9ryzfkaVFE/trXHF+HFtmHQzxAAAQQ5sOVGnW6r2mcCJJLne9Zq3eq00HquLUMmshoAAAECNNzYYWbzgkI8Bj3rLFGw6pqTlQjdRCQAEAIEbervzKr+fkQoakKne93q78KnaNaq3upPR/fyYdfyd+bRBzUAAAiJnq2uDhpCP1Iq5yh7RqYst/H62QZm6OTzsUZg/K8uXLdf311ysnJ0c5OTkaOnSo3njjDd/jhmGorKxMBQUF6tq1q0aMGKGDBw+anqOhoUFz585Vz5491a1bN02aNEnHjx+PzLsBACBGmpoNvfXRCb2671O99dGJkIZlemdnhfTcodaLqDceOR9OJOn6abFvwwXC6kHp06ePnnjiCV111VWSpFWrVmny5Ml69913dd111+mpp57SM888o5UrV+rqq6/W448/rrFjx+rw4cPKzs6WJJWWlmrDhg1au3atevToofnz52vChAnas2eP0tPTI/8OAQCIsI6uwrmlKFf5jiy53PUB56HYJDkdLUuOY6bpnPSvPcxl92+WLhscuzYEYDMMo1MzcXJzc/WLX/xC999/vwoKClRaWqpHHnlEUktvSV5enp588kk98MADcrvd6tWrl1588UVNm9aSzD777DMVFhZq48aNuv3220N6TY/HI4fDIbfbrZycnM40HwCAsHhX4bT+8vTuYLL8nhvbDCnen5dkeo5Qfz6iTnwk/duN5rKFxyV7dlReLpzv7w5Pkm1qatLatWt1+vRpDR06VJWVlXK5XCopKfHVsdvtGj58uHbu3ClJ2rNnj86ePWuqU1BQoOLiYl+dQBoaGuTxeEw3AABiLRKrcMYV52v5PTfK6TAP4zgdWbENJ3tWmsPJFSOlMnfUwkm4wp4ku3//fg0dOlT19fW6+OKLtX79evXv398XMPLy8kz18/Ly9Mknn0iSXC6XMjMz1b17d786Lpcr6GsuXbpUixcvDrepAABEhHfX179++GXIq3CGXtkjaL1xxfka298Zv51kfz9WOv72+ft3/rs08Huxee0QhR1QrrnmGu3bt08nT57Un/70J82YMUPl5eW+x20288U1DMOvrLX26ixcuFDz5s3z3fd4PCosLAy36QAAhC3QfJP2hLIKJz3N1maIiYq6k9KTfc1lP3xP6t43YPV4CjugZGZm+ibJ3nTTTdq9e7d+9atf+eaduFwu5eef756qrq729ao4nU41NjaqpqbG1ItSXV2tYcOGBX1Nu90uu90eblMBAOiUYPNN2hOXVTjtuXAJsSRldJMWHpPSrLlApdMbtRmGoYaGBhUVFcnpdGrLli2+xxobG1VeXu4LH4MGDVJGRoapTlVVlQ4cONBmQAEAINbamm8SjE0tq3liugonFKsmmcPJN0ulxz6zbDiRwuxBefTRRzV+/HgVFhaqtrZWa9eu1fbt27Vp0ybZbDaVlpZqyZIl6tevn/r166clS5booosu0vTp0yVJDodDM2fO1Pz589WjRw/l5uZqwYIFGjBggMaMGROVNwgAQEe0t+tra96JCosm9rfOqcRn66Wfm+eG6v4/S5cNiU97whBWQPn888917733qqqqSg6HQ9dff702bdqksWPHSpIefvhh1dXV6aGHHlJNTY0GDx6szZs3+/ZAkaRnn31WXbp00dSpU1VXV6fRo0dr5cqV7IECALCUcHdzdVrtNOIjW6WX7jKXRXEJcaR1eh+U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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(y_hat_merf, y_test, \"o\")\n", + "plt.plot(y_test, y_test, \"-\")" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "739e6057-e474-4d18-8e77-6c8281ad0f07", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "r2 summary:\n", + "Linear: 0.6247992212591051\n", + "RF: 0.8024510481561682\n", + "EBM: 0.799262187206355\n", + "MERF: 0.8286050862891772\n", + "RF->MERF: 0.8224138884400743\n", + "Linear->MERF: 0.6650943700720995\n", + "EBM->MERF: 0.7881151017126167\n" + ] + } + ], + "source": [ + "print(\"r2 summary:\")\n", + "print(\"Linear: \", r2_score(y_test, y_hat_lm))\n", + "print(\"RF: \", r2_score(y_test, y_hat_rf))\n", + "print(\"EBM: \", r2_score(y_test, y_hat_ebm))\n", + "print(\"MERF: \", r2_score(y_test, y_hat_merf))\n", + "print(\"RF->MERF: \", r2_score(y_test, y_hat_merf_rf))\n", + "print(\"Linear->MERF: \", r2_score(y_test, y_hat_merf_lm))\n", + "print(\"EBM->MERF: \", r2_score(y_test, y_hat_merf_ebm))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb2959fc-7291-406d-a22f-f21081d124b4", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Springtime x86", + "language": "python", + "name": "springtime_x86" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pyproject.toml b/pyproject.toml index 161f8efe..312cbd91 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,8 @@ dependencies = [ "geopandas", "dask", # needed for xarray.open_mfdataset() "netCDF4", + "interpret", + "merf", ] dynamic = ["version"]