diff --git a/README.md b/README.md index c276c4ae..77985b41 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,10 @@ print(f"Best estimator: {ct.best_estimator}") ``` +Now if ***outcome_model="auto"*** in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by ***outcome_model="nested"*** (Refitting AutoML for each estimator). + +You can also preprocess the data in the CausalityDataset using one of the popular category encoders: ***OneHot, WoE, Label, Target***. + ## Supported Models The package supports the following causal estimators: * Meta Learners: diff --git a/causaltune/dataset_processor.py b/causaltune/dataset_processor.py index 11ef5313..fb8deee4 100644 --- a/causaltune/dataset_processor.py +++ b/causaltune/dataset_processor.py @@ -8,7 +8,18 @@ class CausalityDatasetProcessor(BaseEstimator, TransformerMixin): + """ + A processor for CausalityDataset, designed to preprocess data for causal inference tasks by encoding, normalizing, + and handling missing values. + Attributes: + encoder_type (str): Type of encoder used for categorical feature encoding ('onehot', 'label', 'target', 'woe'). + outcome (str): The target variable used for encoding. + encoder: Encoder object used during feature transformations. + """ def __init__(self): + """ + Initializes CausalityDatasetProcessor with default attributes for encoder_type, outcome, and encoder. + """ self.encoder_type = None self.outcome = None self.encoder = None @@ -19,6 +30,15 @@ def fit( encoder_type: Optional[str] = "onehot", outcome: str = None, ): + """ + Fits the processor by preprocessing the input CausalityDataset. + Args: + cd (CausalityDataset): The dataset for causal analysis. + encoder_type (str, optional): Encoder to use for categorical features. Default is 'onehot'. + outcome (str, optional): The target variable for encoding (needed for 'target' or 'woe'). Default is None. + Returns: + CausalityDatasetProcessor: The fitted processor instance. + """ cd = copy.deepcopy(cd) self.preprocess_dataset( cd, encoder_type=encoder_type, outcome=outcome, fit_phase=True @@ -26,6 +46,15 @@ def fit( return self def transform(self, cd: CausalityDataset): + """ + Transforms the CausalityDataset using the fitted encoder. + Args: + cd (CausalityDataset): Dataset to transform. + Returns: + CausalityDataset: Transformed dataset. + Raises: + ValueError: If processor has not been trained yet. + """ if self.encoder: cd = self.preprocess_dataset( cd, diff --git a/notebooks/AB testing.ipynb b/notebooks/AB testing.ipynb index 53080e1b..c9f422d9 100644 --- a/notebooks/AB testing.ipynb +++ b/notebooks/AB testing.ipynb @@ -1,7 +1,6 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -49,7 +48,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -78,7 +76,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -97,7 +94,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -105,7 +101,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -113,7 +108,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -154,7 +148,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -179,7 +172,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now if outcome_model=\"auto\" in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by outcome_model=\"nested\" (the default for now)" + "Now if `outcome_model=\"auto\"` in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by `outcome_model=\"nested\"` (Refitting AutoML for each estimator).\n", + "\n", + "You can also preprocess the data in the CausalityDataset using one of the popular category encoders: OneHot, WoE, Label, Target." ] }, { @@ -201,7 +196,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -230,7 +224,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -274,7 +267,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -356,13 +348,11 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -370,7 +360,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -431,7 +420,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [] diff --git a/notebooks/CausalityDataset setup.ipynb b/notebooks/CausalityDataset setup.ipynb index 4ca160f3..e328bf46 100644 --- a/notebooks/CausalityDataset setup.ipynb +++ b/notebooks/CausalityDataset setup.ipynb @@ -16,23 +16,14 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 51, "id": "d43137b0", "metadata": { "pycharm": { "name": "#%%\n" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", @@ -65,7 +56,8 @@ " \n", "from causaltune import CausalTune\n", "from causaltune.datasets import synth_ihdp, iv_dgp_econml, generate_non_random_dataset\n", - "from causaltune.data_utils import CausalityDataset\n" + "from causaltune.data_utils import CausalityDataset\n", + "from causaltune.dataset_processor import CausalityDatasetProcessor" ] }, { @@ -108,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 3, "id": "0efc918c", "metadata": {}, "outputs": [ @@ -254,7 +246,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 6, "id": "6695f65f", "metadata": {}, "outputs": [ @@ -280,10 +272,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "eb9ebea5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting a Propensity-Weighted scoring estimator to be used in scoring tasks\n", + "Propensity Model Fitted Successfully\n" + ] + } + ], "source": [ "ct = CausalTune(components_time_budget=5,) \n", "ct.fit(data=cd, outcome='y_factual')" @@ -299,21 +300,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "6b9a1ad6", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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MV3v3r05evQov//+O66urmbHEbF7KoAiImKq3377jaFDh9KvXz98fHzMjiPiEDQFLCIiprlz5w6+vr4ULlyYTp06mR1HxGFoBFBEREzTq1cvwsPD2blzJy4uekkSSSza20RExBSbN28mKCiIQYMG4e3tbXYcEYeiKWAREUl0t2/fxs/Pj7fffpuAgACz44g4HI0AiohIouvRowcnTpzgxx9/1NSviAm014mISKLauHEjI0aMYNiwYbz11ltmxxFxSJoCFhGRRHPr1i38/f0pWbIkbdu2NTuOiMPSCKCIiCSabt268eeff7J06VKcnZ3NjiPisFQARUQkUaxbt45Ro0YxYsQIcufObXYcEYemKWAREUlwN27coH79+pQuXZrWrVubHUfE4WkEUEREElyXLl04e/Ysy5Ytw8lJYw8iZlMBFBGRBLV69WrGjRvH6NGjyZkzp9lxRARNAYuISAK6fv06DRo04L333qNFixZmxxGRBzQCKCIiCaZTp06cP3+eVatWaepXxIaoAIqISIJYsWIFEydOZPz48Xh6epodR0QeobdjIiIS765du0aDBg14//33adKkidlxROQfVABFRCTedejQgcuXLzNt2jRN/YrYIE0Bi4hIvFq2bBlTpkxh0qRJuLu7mx1HRJ5Ab8tERCTeXLlyhQYNGvDBBx/QqFEjs+OIyFOoAIqISLxp3749169fZ9q0aVgsFrPjiMhTaApYRETixdKlSwkJCWHq1Km88cYbZscRkWfQCKCIiLy0y5cv07hxYz766CPq169vdhwR+Q8qgCIi8tLatm3LzZs3mTJliqZ+RZIATQGLiMhLWbRoETNmzCA0NJTXX3/d7Dgi8hw0AigiIi/s0qVLNGnShCpVqlCvXj2z44jIc1IBFBGRF9a6dWvu3LnD5MmTNfUrkoRoClhERF7IwoULmT17NjNnziRbtmxmxxGRONAIoIiIxNmFCxdo2rQp1atXp06dOmbHEZE4UgEUEZE4a9myJVFRUUycOFFTvyJJkKaARUQkTubPn8+3337LnDlzyJIli9lxROQFaARQRESe219//UWzZs347LPPqFWrltlxROQFqQCKiMhzMQyD5s2bAzBhwgRN/YokYZoCFhGR5zJv3jwWLFjAvHnzePXVV82OIyIvQSOAIiLyn86dO0eLFi2oWbMmNWvWNDuOiLwkFUAREXkm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aylXrtwzlwkJCYk9c/bflgJVn/K9+LQU3QxexNZo/xeJCxVAsRnXr1/n8OHDz1zGw8ODjP+8autjvgLmAdHxGe0BZ+BLYHYCrFtEXp72f5HnpQIoduYi4P3gc3y+CDgDGYGDQIb/WFZEzKH9X+R56RhAsTMZgZVAKqxP2vHB+cH6VqInfxFbpv1f5HmpAIod8gE2Yn0xeNkXgYfv/DeSuGcZisiL0f4v8jxUAMVO+WCdrvnywddxfSF4uHytB+vRk79I0qH9X+S/qACKHcuA9YDtpUDJB4+58PQr+Fv4++6IJR/83Cw07SOSFGn/F3kWnQQiDmQ/MAfYCmwDrj3yvbRYb+9UHOuZhLrOl4h90f4v8igVQHFQBnADuAckw3pjd93bU8QxaP8XUQEUERERcTA6BlBERETEwagAioiIiDgYFUARERERB6MCKCIiIuJgVABFREREHIwKoIiIiIiDUQEUERERcTAqgCIiIiIORgVQRERExMGoAIqIiIg4GBVAEREREQejAigiIiLiYFQARURERByMCqCIiIiIg1EBFBEREXEwKoAiIiIiDkYFUERERMTBqACKiIiIOBgVQBEREREHowIoIiIi4mBUAEVEREQcjAqgiIiIiINRARQRERFxMCqAIiIiIg5GBVBERETEwagAioiIiDgYFUARERERB6MCKCIiIuJgVABFREREHIwKoIiIiIiDUQEUERERcTAqgCIiIiIORgVQRERExMH8HxeJVAt71vhGAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "%matplotlib inline\n", "ct.causal_model.view_model()" @@ -339,7 +329,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 9, "id": "6babd054", "metadata": {}, "outputs": [], @@ -357,7 +347,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 10, "id": "510157f0", "metadata": {}, "outputs": [ @@ -366,18 +356,8 @@ "output_type": "stream", "text": [ "Fitting a Propensity-Weighted scoring estimator to be used in scoring tasks\n", - "Initial configs: [{'estimator': {'estimator_name': 'backdoor.causaltune.models.NaiveDummy'}}, {'estimator': {'estimator_name': 'backdoor.causaltune.models.Dummy'}}, {'estimator': {'estimator_name': 'backdoor.econml.metalearners.SLearner'}}, {'estimator': {'estimator_name': 'backdoor.econml.metalearners.DomainAdaptationLearner'}}, {'estimator': {'estimator_name': 'backdoor.econml.dr.ForestDRLearner', 'min_propensity': 1e-06, 'n_estimators': 100, 'min_samples_split': 5, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': True, 'subforest_size': 4}}, {'estimator': {'estimator_name': 'backdoor.econml.dml.CausalForestDML', 'drate': True, 'n_estimators': 100, 'criterion': 'mse', 'min_samples_split': 10, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': True, 'fit_intercept': True, 'subforest_size': 4}}, {'estimator': {'estimator_name': 'backdoor.causaltune.models.TransformedOutcome'}}]\n" + "Propensity Model Fitted Successfully\n" ] - }, - { - "data": { - "image/png": "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nnv44osv9EOBG1ABFBHxMgcPHnRZ3Vu7di2ZmZkULlyYyMhIhg8f7hznatsO+TefffYZgwcPZtCgQXz88cf4+PhYHUmugwqgiIgHy8zMvGKcu3v3bgCqVKmCYRgMGjQIwzCoU6eO/vGWG/LBBx/wyCOP8PDDD/Puu+/q/x83ogIoIuJBkpOTWbFihXOj5YSEBM6cOYOfnx+NGjWia9euGIZBVFQUZcqUsTquuLG3336bJ554gscff5y33npL12F2MyqAIiJubP/+/S6re+vXryczM5MiRYoQFRXFiBEjMAyDsLAwbcQr2eb111/nmWeeYcSIEbz66qsqf25IBVBExE1kZmayceNGl8K3d+9eAKpWrYphGAwePBjDMKhdu7bGcZIjXnzxRcaOHcvYsWN5/vnnVf7clAqgiEgedfbsWec4Nz4+nsTERM6ePYu/vz+NGzeme/fuznHuLbfcYnVc8XCmaTJ27FheeuklXnzxRcaMGWN1JMkCFUARkTxi7969LF++3GWca7fbKVasGFFRUYwaNQrDMGjSpAnBwcFWxxUvYpomzzzzDP/3f//H66+/ztNPP211JMkiFUAREQtkZGSwYcMGl3Hu/v37AahevTqGYfDQQw9hGAY1a9bUOFcsY5omTzzxBP/97395++23eeyxx6yOJNlABVBEJBecOXOGxMREZ9lbsWIFycnJBAQE0LhxY3r16uUc55YqVcrquCKA46owQ4cO5cMPP+SDDz7goYcesjqSZBMVQBGRbGaaJnv37nVZ3du4cSN2u53ixYtjGAZjxoxxjnODgoKsjixyBbvdzuDBg/niiy/47LPPGDRokNWRJBupAIqIZFFGRgbr1693KXwHDhwAoGbNmhiGwbBhwzAMgxo1auisScnzMjMzue+++/jmm2/48ssvueeee6yOJNlMBVBE5AadPn2ahIQEl3Hu+fPnCQgIICwsjL59+zrHuSVKlLA6rsgNycjI4J577mHq1KlMnDiR3r17Wx1JcoAKoIjIPzBNk927d7us7m3atAnTNClRogSGYfD8889jGAaNGzcmMDDQ6sgiNy09PZ0+ffowc+ZMvvvuO+666y6rI0kOUQEUEblMeno669atcyl8f/75JwC1atXCMAwef/xxDMOgevXqGueKx0hNTaVnz57MnTuX77//ns6dO1sdSXKQCqCIeLVTp065jHNX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cybBwcFWRxIRAq55z5AhsHcv/PADfPEF/PQTvP12zj+vu1ABFI/m7+/P5MmT6dGjB7169eLbb7+1OpK4oR9++IFu3brRoUMHvv/+ewIDA62OJOL19u3bx3ffzeHChSvL2Oefw8SJ8MEHEBICd94JjzwCI0bAypV/Pe777x0fcXGOz1et+uu2aysEuP9bP7QRtHiFzMxM7rvvPr755hvGjx9P//79rY6Up2gj6GubMmUKffv25a677uKbb77B39/f6kgiXiczM5MNGza4XD1k3759ACxfHkxExAVsF3eC2bgRwsMdJ4F8+eVfx0hNBcOA48cdl38rUgTn11zN1duRDYgGFmXL67KStoERr+Dr68v48eMJCAhgwIABpKenMyh73xAiHmjixIn079+fvn37Mn78ePz89C1TJDecPXuWxMREZ9lLTEwkOTkZf39/GjduTI8ePTAMg6ioKG655R3gDSADgNBQOH/+ymMGBjpW+C5340tgvoBn/JCs72biNXx8fPj4448JCAjg/vvvJy0tjYceesjqWJJHjR8/nkGDBjFgwAA+/fTT67weqYjcjL1797qs7m3YsAG73U7x4sWJiopizJgxREVF0aRJk6u8/7YP8GouJc24+HzuTwVQvIqPjw/vvfceAQEBPPzww6SlpfHYY49ZHUvymE8++YQhQ4YwZMgQPvjgA3xu/JpRInINGRkZrF+/3ln2li9ffvGSblCjRg0Mw+CRRx7BMAxq1qyJ7Z/mtADUBQxu9FrAN+7StYBDcvA5co8KoHgdm83GW2+9RUBAAI8//jhpaWk8/fTTVseSPOK9995j2LBhDBs2jP/+97/X8Y+PiPyT06dPu4xzV6xYwblz5wgICKBJkyb07t3bOc69+WtpjwQ6ZGfsq8i8+DyeQQVQvJLNZuPVV18lICCAESNGkJaWxpgxY6yOJRZ76623GD58OMOHD+f//u//VP5EbpBpmuzZs8dlnLtx40ZM06REiRJERUUxduxYDMOgcePGBAUFZdMztwd6A1NxFLXs5gv0BNrlwLGtoQIoXstms/HCCy8QEBDAs88+S1paGuPGjdM/+l7q1VdfZdSoUYwaNYqXXnpJ/x+IXIf09HSXcW58fDwHDx4EoFatWkRFRfHoo49iGAY1atTI4b9X7wGLgeNkbwn0BYpfPL7nUAEUrzdmzBiXlcBXX31V//h7EdM0eeGFF3j++ed5/vnnGTt2rP77i1zDqVOnSEhIYPny5c5x7vnz5wkMDCQsLIx+/fphGAaRkZGUKFEil9MVx7E9y23AObKnBPoC+S8et1g2HC/vUAEUAZ5++mnnewJTU1P5z3/+oxLgBUzTZMyYMbzyyiu88sorjBzpOe/vEckq0zTZtWuXy+re5s2bMU2TkiVLYhgG48aNwzAMGjVqlEc2SA8FfgVakfWVwEsrf4suHtezqACKXPTYY4+5nB383nvv6exPD2aaJk899RRvvfUWb775Jk8++aTVkUQslZ6eztq1a10K36FDhwCoXbs2hmHw5JNPYhgG1apVy8M/JIcCW4GhwGQcRe5GiuClx/cC3sXTVv4uUQEUucxDDz1EQEAADzzwAOnp6Xz88ccqgR7INE0effRR3nvvPd59912GDh1qdSSRXHfy5EkSEhKcZW/lypVcuHCBoKAgwsLCuPfee53j3OLFi1sd9wYVAyYBfXHsEfgrjsqTCVxt92cbjuKXgWOrl5F40gkfV6MCKPI3gwYNcl4xJC0tjS+++EKbAHsQu93OQw89xCeffMLHH3/M4MGDrY4kkuNM02THjh0uq3tbtmwBoFSpUhiGwYsvvugc5wYEXHl9XffU7uLHZhyrgSuAJODMZY8pBIThuMJHHzxln79/owIochX33HMP/v7+9OvXj/T0dL766itdBswDZGZmcv/99/Pll18yfvx4BgwYYHUkkRyRlpbGmjVrXDZbPnz4MAAhISHcdtttjBgxAsMwqFKlSh4e52aXEODli783gWQgDQgACuBYAfQu+hdN5Bp69+6Nv78/vXv3Jj09nUmTJuHv7291LLlJGRkZDBgwgMmTJ/P1119z9913Wx1JJNucOHHCeWZufHw8SUlJpKSkEBwcTNOmTbnvvvuc49yiRYtaHddiNqCg1SEspwIo8g/uuusu/P396d69O927d2fKlCl55Ew3uRHp6en069eP77//nsmTJ9OzZ0+rI4ncNNM0+eOPP1zGuVu3bgWgdOnSGIbBK6+8gmEYNGzYUD+4ylWpAIr8i86dOzNz5ky6detGt27dmD59ejbuXi85LS0tjd69ezNr1iymTZtG165drY4kckNSU1NZvXq1c5QbHx/P0aNHsdlshISEcPvttzNy5EgMw6By5cpeMM6V7KACKHId2rVrx6xZs+jUqROdOnVi5syZ5MuXz+pY8i9SU1Pp3r078+fPZ/r06XTs2NHqSCL/6tixYy7j3FWrVpGamkq+fPkIDw9n8ODBGIZBREQERYoUsTquuCkVQJHrFBsby9y5c+nQoQMdOnRg1qxZ5M+f3+pYcg0XLlygW7duLF26lB9//JG2bdtaHUnkCqZp8vvvv7uMc7dt2wZA2bJlMQyD119/HcMwqF+/vsa5km1UAEVuQMuWLZk/fz533HEHbdu2Ze7cuRQsqDcT5zXnzp2jc+fOLF++nNmzZxMTE2N1JBEAUlJSnOPcSyPdY8eOYbPZCA0NJTo6mmeffRbDMKhYsaLGuZJjVABFbtBtt93GwoULadu2La1bt+bnn3/WGCYPOXv2LB06dGD16tX8/PPPNG/e3OpI4sWOHj16xTg3LS2N/PnzEx4ezoMPPugc5xYuXNjquOJFVABFbkJERASLFi2idevWxMbGMn/+fIoV88zLBbmT06dP065dOzZu3MiCBQuIioqyOpJ4EdM0+e2331zGudu3bwegXLlyGIZBz549neNc7S0qVtL/fSI3qUmTJsTFxREbG0tMTAwLFy6kRIkSVsfyWidPnqRt27b8/vvvLFq0iKZNm1odSTzchQsXWLVqlcs498SJE/j4+FCvXj1at27NuHHjMAyDChUqWB1XxIUKoEgWNGjQgCVLlhATE0PLli1ZtGgRt9xyi9WxvM7x48eJjY1lz549LF68mEaNGlkdSTzQ4cOHXca5q1evJj09nQIFChAREcHQoUMxDIPw8HAKFSpkdVyRf6QCKJJFdevWZdmyZURHR9OiRQvi4uIoU6aM1bG8xpEjR2jVqhWHDh1iyZIl1KtXz+pI4gHsdjtbt251Wd37448/AChfvjyGYdC3b18MwyA0NFTjXHE7+j9WJBvUqlXLWQKbN29OXFwc5cqVszqWxzt06BAxMTEcP36cpUuXUqdOHasjiZs6f/48SUlJzsKXkJDAyZMn8fHxoX79+rRt2xbDMDAMg/Lly1sdVyTLVABFskn16tX55ZdfaNmyJbfffjtxcXFUqlTJ6lge68CBA0RHR5OcnMyyZcuoWbOm1ZHEjRw6dMjlZI01a9aQkZFBwYIFiYyM5LHHHiMqKorw8HBt9SQeSQVQJBtVrlz5ipXAqlWrWh3L4+zdu5fo6GjS0tJYtmwZ1apVszqS5GF2u50tW7a4FL6dO3cCULFiRQzDoH///hiGQd26dfH19bU4sUjOUwEUyWYVK1bkl19+cSmBNWrUsDqWx9i1axfR0dEA/PLLL1pllSucO3eOlStXOk/YSEhI4NSpU/j6+tKgQQM6dOjgHOfeeuutVscVsYQKoEgOuPXWW1m6dCmtWrWiefPmLF68WO9PywZ//PEHLVu2JCgoiLi4OL0XSwA4ePCgy+reunXryMjIoFChQkRGRvLEE09gGAZNmzalQIECVscVyRNUAEVySJkyZViyZAmtWrWiRYsWLF68mNDQUKtjua3ffvuN6OhoChUqRFxcHGXLlrU6klggMzOTzZs3uxS+3bt3A1CpUiUMw2DgwIEYhkFISIjGuSLXoAIokoNKlSrFkiVLiI2NpWXLlixcuJCGDRtaHcvtbNq0iZiYGEqWLMnixYu116IXOXfuHCtWrHA5O/fMmTP4+fnRsGFDunTpgmEYREVF6YcCkRugAiiSw4oXL87ixYtp06YN0dHRLFiwgLCwMKtjuY3169fTqlUrbr31VhYuXEjJkiWtjiQ56MCBA1eMczMzMylcuDBRUVE8/fTTGIZBWFgY+fPntzquiNtSARTJBUWLFmXhwoXccccdtGrVip9//lnXqb0Oq1evJjY2lipVqrBgwQJdb9nDZGZmsnHjRpfCt3fvXgCqVKmCYRjcf//9GIZBnTp18PHxsTixiOdQARTJJYULF2b+/Pl06NCBNm3aMGfOHG6//XarY+VZK1asoE2bNtSqVYt58+ZRpEgRqyNJFp09e9ZlnJuYmMjZs2fx8/OjUaNG3Hnnnc5xrq6mI5KzVABFclHBggWZO3cunTp14o477mDWrFnOLU3kL7/++ivt2rWjXr16zJ07V9dVdVP79u1zWd1bv349drudokWLEhUVxTPPPOMc5+bLl8/quCJeRQVQJJflz5+f2bNn07VrV9q3b8/MmTNp06aN1bHyjKVLl9KhQwfCwsKYNWuWtu1wExkZGWzYsMG59158fDz79u0DoFq1ahiGwYMPPohhGNSqVUvjXBGLqQCKWCA4OJiZM2fSvXt3OnXqxPTp0+nQoYPVsSy3aNEiOnXqhGEY/Pjjj1oVysPOnDlDYmKis+ytWLGC5ORk/P39ady4MT169HCOc3XWtkjeowIoYpGgoCCmT59Or1696NatG1OmTKFr165Wx7LMzz//TNeuXYmOjuaHH34gKCjI6khykWma7N2712Wcu3HjRux2O8WKFSMqKorRo0djGAZNmjQhODjY6sgi8i9UAEUsFBAQwJQpU7j77rvp3r07kydPpkePHlbHynU//fQT3bt3p23btkydOpXAwECrI3m1jIwM1q9f71L4Dhw4AED16tUxDINHHnkEwzCoWbOmxrkibkgFUMRi/v7+TJo0iYCAAHr37k16ejp9+/a1OlauubQK2rlzZyZPnkxAQIDVkbzO6dOnrxjnnjt3joCAAJo0aUKfPn2c41ztwyjiGVQARfIAPz8/vvzyS/z9/enXrx/p6ence++9VsfKcd9++y39+vWjR48efP311/j56VtSTjNNk927d7us7m3atAnTNClevDiGYTB27FgMw6Bx48YaxYt4KH23FckjfH19+fzzz/H392fAgAGkpaXxwAMPWB0rx3z99dcMGDCAu+++m/Hjx+uarTkkPT2ddevWOcve8uXLOXjwIAA1a9bEMAwee+wxDMOgRo0a2Gw2ixOLSG5QARTJQ3x8fPj4448JCAhg8ODBpKWl8cgjj1gdK9t98cUX3H///dx333188skneg9ZNjp16hQJCQnOwrdy5UrOnz9PYGAgTZo04e6773aOc0uUKGF1XBGxiAqgSB5js9l49913CQgIYOjQoaSlpfHEE09YHSvbfPTRRzz00EM8+OCDvP/++yp/WWCaJrt27XIZ527evBnTNClZsiSGYTBu3DiioqJo3LixTq4REScVQJE8yGaz8eabbxIYGMiTTz5JWloazzzzjNWxsuydd97hscce49FHH+Xtt9/WuPEGpaens3btWpfCd+jQIQBq166NYRg8+eSTGIZBtWrV9OcrItekAiiSR9lsNl5++WUCAgIYOXIkaWlpPPvss277j/obb7zB008/zVNPPcXrr7/utq8jN508edLlyhpJSUlcuHCBoKAgwsLCuPfeezEMg8jISIoXL251XBFxIyqAInmYzWbj+eefJyAggNGjR5OWlsaLL77oduXp5ZdfZsyYMYwZM4YXXnjB7fLnBtM02bFjh8vq3pYtWwAoVaoUhmHw4osvYhgGjRo10nY5IpIlKoAibmDUqFEEBATw1FNPkZaW5jYraKZp8vzzz/PCCy/wwgsv8Oyzz1odKc9IS0tjzZo1LmfnHj58GICQkBAMw+Dpp5/GMAyqVq3qFv+9RcR9qACKuInhw4cTEBDAo48+SlpaWra8hy41NRXTNElNTXV+npKSApDl/d9M02TUqFG89tprvPbaa4wYMSJLx3N3J06cuGKcm5KSQnBwME2bNuW+++5zjnOLFi1qdVwR8XA20zRNq0OIyPX7+OOPefDBB7N8Fu13331H7969r3n/+PHjGTBgwE0d2zRNnnzySd5++23+85//8Pjjj9/UcdyVaZps377dubIXHx/P1q1bAShdujSGYTg/GjRooHGuiOQ6rQCKuJkhQ4YQEBDAoEGDSEtL45NPPrmpTZTr1Knzj/eHhITcVD673c6wYcP44IMPeP/993n44Ydv6jjuJDU1ldWrV7uMc48ePYrNZiMkJITbb7+dkSNHYhgGlStX1jhXRCynAijihgYOHEhAQAD9+/cnLS2NCRMm3HAJrFevHl27dmXWrFlkZGQ4b/f19aVVq1Y0bdr0hnPZ7XYefPBBPvvsMz799FPuv//+Gz6GOzh27JjLOHfVqlWkpqYSHBxMeHg4DzzwgHOcW6RIEavjiohcQSNgETf23Xffcffdd9O9e3e+/vpr/P39AccJBjt37qRWrVr/+PUbNmygfv36V9y+YsWKfy2Av/32G5UqVXK+VzAzM5NBgwbx1VdfMX78eI+5lrFpmvz+++8uZ+du27YNgLJly7qMc+vXr+/8byAikpepAIq4uenTp9OrVy86d+7M5MmTMU2TLl26sGDBArZv306VKlX+8eu7devGTz/9RGZmpnP1b968ef/4NQcPHqRChQo0a9aMuXPn4u/vT//+/fnuu+/4+uuv6du3b3a+xFyVkpJyxTj32LFj2Gw2QkNDXQpfxYoVNc4VEbekAijiAWbNmsVdd91FbGwsAD///DMAL774IqNGjfrHr/37KuD1rP7997//5YknnsBmsxEdHU2hQoX48ccf+fbbb+nevXsWX03uOnr0qMvq3urVq0lLSyN//vyEh4c7y15ERASFCxe2Oq6ISLZQARTxEHPmzKFTp07Y7XbnbbVq1XKeffpPWrWKYeXKOKKiGjNvXhxQELj2ylbjxo1Zu3Ytl7592Gw2pkyZkufLn2ma/Pbbby6Fb/v27QDceuutV4xz/fz0NmkR8UwqgCIeIDMzk7vvvpspU6bw97/SGzdupG7dulf5qk3AZGAFGRkr8PM7d9l9hYAmQDjQB/jr63fs2EG1atVcjmSz2ejUqRPTpk3LU++Bu3DhAqtWrXIZ5544cQIfHx/q1auHYRhERUVhGAYVKlTQOFdEvIYKoIgHGDJkCJ988skVt/v6+jJixAhefvnly26dA7wKxOPYCCATuNq3ARvgC2QABjAKaMfLL7/M2LFjXVYaL+nbty8TJ07M6su5aYcPH3Y5O3f16tWkp6dToEABIiIinKt74eHhFCpUyLKcIiJWUwEU8QCxsbEsWrQIHx+fK4pZuXLl2Lt3LzbbCWAo8C3gA1xZ4K7t0uP7EBaWyKpVO13u9fX1JTMzk6ioKH799ddcWUmz2+1s3brVZXXvjz/+AKB8+fIu49zQ0FCNc0VELqMCKOIhtm/fzowZM5g6dSqrV6/GZrM5x8EJCZ8QEfEscBzHit/NMU0fjhyx06oVbN7sOH6DBg3o0aMHXbt2/ddtZ7Li/PnzJCUlOQtfQkICJ0+exMfHh/r167sUvvLly+dYDhERT6ACKOKB9u/fz8yZMxk/fjwZGWtZscKf4GA7WSl/l2RkQEqKDzNnDqdZs4eoWLFi1gNfxaFDh1xO1lizZg0ZGRkULFjwinFuwYIFcySDiIinUgEU8WjHsdtrY7OdwGbLevn7iy9QHNgKFHO55+jRo3z99dc88sgjBAYGXtfR7HY7W7ZscSl8O3c6xswVK1Z0Wd2rW7fuTV36TkRE/qI3xYi4ubVr1/LYY4+xbt06zpw5w9tvv81jjz128d6h+PicIKsrf6+8AnXqQJcul27JxDFOHgpMcj5u/fr1tG/fngMHDlC9enU6dep01eOdO3eOlStXOk/YSEhI4NSpU/j6+lKqVCn+/PNPpkyZQlRUFOXKlctSdhERuZJWAEXcXMOGDTl37hzvvPMORYsWpVKlSpQuXRrH2b4dsuU5ChSAu+6CL7+82r1zgHbMmDGDPn36kJ6eDsCTTz7J66+/DjiuHHL56t66devIyMigUKFCREZGOlf3mjZtyptvvsm4ceOu2M5GRESyj1YARdzcpk2buP/++7njjjv+ds+r3PjZvjfKF9N8lZdfXsOzzz7rcuLJ1KlTOXDgAPHx8ezevRuASpUqYRgGAwcOxDAMQkJCNM4VEbGAj9UBRLzR//73P2w2G99+++0V93399dfYbDaSkpL+8RhffvklNpuNjIwMPvroI2w2m3P7laNHf+Ghh+KpU8dOgQJQqhRER8P//nflcVJT4YUXoHZtCAqC4sWhZUtYvtxxv80G587BV185fm+zQYsWjvuefz4TH59f+fbbZwFcVu12797NunXr6Ny5M1OnTuXDDz+kevXqLF68mCeeeIKePXsyevRozp07h4iI5C4VQBELNGvWjIYNG/LBBx9ccd/7779PWFgYYWFh/3iM9u3bk5CQAMBdd91FQkKC8/MTJyYBNp57DubMgQkToEoVR3FbuvSvY2RkwB13wIsvQocOMGOGY8wbFQV79zoek5AAwcHQrp3j9wkJ8OGHrln69Ll6xnHjxvHf//6X7t27c/z4cdq1a8cXX3zBvHnzeOyxx5g6dSodO3b89z8wERHJVhoBi1hk2LBhDBgwgHXr1tGgQQMAkpKSSEpK4quvvvrXry9ZsiQlS5YE4JZbbiEiIsJ5X82af/Dhh3+txmVmQps2sHs3vPvuXyt4334LS5bAZ5/BoEF/HfvyThYRAT4+ULKk4/dXc+l2X19f7Ha7cyVw1apV3HnnnQCMGTPG+XjTNDEMg9q1a9O8eXM2bNhAvXr1/vU1i4hI9tAKoIhFevfuTalSpVxWAd977z1KlixJz549s3BkE1jFxx9Do0aOsa6fH/j7w+LFsHXrX4/8+WfH/QMHZuHpgOjoQvzyyzLGjRtHTEyM86obl7ZyufT7Pn36ULp0aXx9ffH396d58+YAbL08lIiI5DgVQBGLBAYGMnjwYCZPnsypU6c4evQoU6dOZdCgQde9f97VneU//znDgw9CeDhMnw6JiZCUBG3bwoULfz3y6FEoW9axwpcVNtsZmjVryOjRo1m4cCEff/wxAMOHDwcgOTmZZs2asWLFCl566SWWLl1KUlISP/zwAwAXLg8lIiI5TiNgEQs9+OCDvPbaa4wfP56UlBQyMjIYMmRIFo+axsSJjjHvRx+53nP2rOvnJUvCr7+C3X5zJTAoyPFraioEBqY5bz958uTF4ztG1HFxcRw8eJClS5c6V/0ATp06deNPKiIiWaYVQBELlSlThu7du/Phhx/y8ccf07FjRypUqJDFowZgs8HfFxE3bHCcwHG5O+6AlJRr7e/3l8BA15XDSypV+uvYEOC8fdasWS6Pu3R28t9XNj/55JN/fmIREckRWgEUsdijjz5KeHg4ABMmTMiGIxakQ4cAXnwxjeeeg+bNYds2x1YvlSs7zvy9pHdvxxnCQ4Y4HtOypWM1cMUKx7YwvXo5Hhca6jh7eNYsKFMGChaEmjUdZwYXKwb33efDCy8sws/Pny+//JJ9+/a5JIqKiqJo0aIMGTKE5557Dn9/fyZNmsT69euz4fWKiMiN0gqgiMWaNm1KpUqVqF27NjExMdlwRBujR0fx5JPwxRfQvj18/jl8/DHcdpvrI/38YO5cGDnSsQVM585wzz2OsXDFin897p13oHp1RyEMC4PBgx23FyoE8+ZBwYIFufvufgwZMoS6desyevRol+cpXrw4c+bMIV++fNx9990MHDiQAgUKMGXKlGx4vSIicqN0KTgRi23YsIH69evzwQcf8NBDD2XTUUcBbwAZ//bAbOAHPA28nAvPJSIi2UEFUMQiO3bsYM+ePYwaNYq9e/fyxx9/kC9fvmw6+iYgNJuOdb3PF5KLzyciIlmhEbCIRV588UViY2NJTk5m2rRpLuXPNE0yMjL+8eOff3arCxjk/F9xX+A2VP5ERNyLVgBF8qClS5fSsmXLf3zMhAkTuPfee//hEXOADtkZ6x+ep10uPI+IiGQXFUCRPOjs2bNs27btHx9TuXJlihcv/i9H6gNMBTKzK9plfIGewKQcOLaIiOQkFUARj3YcqHPx1+wsgb5AcWArUCwbjysiIrlB7wEU8WjFgUVAfhylLTv4XjzeIlT+RETckwqgiMcLBX7FUQazWgIvrfz9Su6eZSwiItlJBVDEK4TiGNf2vPj5jRbBS4/vdfE4Kn8iIu5MBVDEaxTDccLGHCDy4m1+gO0aj7fx19UiIy9+3UQ09hURcX86CUTEa20GJgMrgCTgzGX3FQLCgHAcZxJrnz8REU+iAigigAkkA2lAAFCAa68MioiIu1MBFBEREfEyeg+giIiIiJdRARQRERHxMiqAIiIiIl5GBVBERETEy6gAioiIiHgZFUARERERL6MCKCIiIuJlVABFREREvIwKoIiIiIiXUQEUERER8TIqgCIiIiJeRgVQRERExMuoAIqIiIh4GRVAERERES+jAigiIiLiZVQARURERLyMCqCIiIiIl1EBFBEREfEyKoAiIiIiXkYFUERERMTLqACKiIiIeBkVQBEREREvowIoIiIi4mVUAEVERES8jAqgiIiIiJdRARQRERHxMiqAIiIiIl5GBVBERETEy6gAioiIiHgZFUARERERL6MCKCIiIuJlVABFREREvIwKoIiIiIiX+X+Ou0hNSr3S7AAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -407,7 +387,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 11, "id": "2a35636e", "metadata": {}, "outputs": [ @@ -416,11 +396,11 @@ "output_type": "stream", "text": [ " x1 x2 x3 x4 y treatment Z\n", - "0 -2.167807 -0.081599 0.354765 -0.470893 0.950792 0 1\n", - "1 0.206365 1.144597 -1.338532 -0.237026 18.188874 1 1\n", - "2 -0.497604 1.264037 1.282048 1.036047 6.519928 0 0\n", - "3 1.092089 0.331639 -0.623374 0.321355 9.221536 0 0\n", - "4 -0.126635 -1.717113 0.645309 -1.320294 11.088779 1 1\n" + "0 -0.662658 1.124321 -1.699940 -0.379268 5.236122 0 0\n", + "1 -0.788565 1.336684 -0.539586 -0.785838 12.039615 1 1\n", + "2 -0.344655 -0.204201 -1.267158 0.898114 23.469351 1 1\n", + "3 0.125284 -0.557028 0.403744 0.579168 5.300115 0 0\n", + "4 0.356507 0.330607 0.430286 1.201554 12.855370 0 0\n" ] } ], @@ -441,7 +421,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 12, "id": "c9be746a", "metadata": {}, "outputs": [], @@ -457,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 13, "id": "0bfd06a6", "metadata": {}, "outputs": [ @@ -481,7 +461,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "0e738f3e", "metadata": {}, "outputs": [], @@ -495,21 +475,10 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 15, "id": "83f847f9", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHiCAYAAAB4GX3vAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACIPUlEQVR4nOzdd1iTZ9sG8DMsRcW9tU7ci4p74h6A8WsVFFeFqvWtu866rVq3ne9r3VoH0tY2KG5xTxw4UOuqewsOlkByfX9EUnEyEp6M83ccHNTkyXNfiL1z5R7XrRIRARERERHZDDulAyAiIiKizMUEkIiIiMjGMAEkIiIisjFMAImIiIhsDBNAIiIiIhvDBJCIiIjIxjABJCIiIrIxTACJiIiIbAwTQCIiIiIbwwSQiIiIyMYwASQiIiKyMUwAiYiIiGwME0AiIiIiG8MEkIiIiMjGMAEkIiIisjFMAImIiIhsDBNAIiIiIhvDBJCIiIjIxjABJCIiIrIxTACJiIiIbAwTQCIiIiIbwwSQiIiIyMYwASQiIiKyMUwAiYiIiGwME0AiIiIiG8MEkIiIiMjGMAEkIiIisjFMAImIiIhsDBNAIiIiIhvDBJCIiIjIxjABJCIiIrIxTACJiIiIbAwTQCIiIiIbwwSQiIiIyMY4KB0AEVHmEwDPASQAcALgAkClaERERJmJCSAR2YizANYAOALgGIBnrzyXE0AtAHUB+AGomunRERFlJpWIiNJBEBGZTgiAbwEcgP4zrxb6EcDXqQDYA0gC0BDA1wDaZ1KMRESZiwkgEVmpxwAGAlgL/XJnXRpem3y9H4AfAeQ1enREREpiAkhEVug0gFbQJ4HaDNzHHkA+ADsAVDNCXERE5oEJIBFZmdMAGgOIQcaSv2T2ALID2A8mgURkLZgAEpEVeQygMjI+8ve65JHA8+B0MBFZA9YBJCIrMhDGT/7w8n7JawqJiCwfE0AishIh0G/4SH3yt2MH0KoVULQokCULULAg0Lw5sGnT267WQl9G5q1PEhFZFCaARGQlvkVau7THj4EqVYD584Ft24BffgEcHQFPT2DVqre9wv5lO0RElo1rAInICpyFsTZoJCYCpUsDZcoAe/e+r70qRmmPiEgJHAEkIiuwBq8ebBQfD3z8MeDqCjx9+u9V9+4BhQsDHh6A9h0zxY6OQO7cgMM7z0lyeNkeEZHlYgJIRFbgCPQneOhlzQoEBQEPHgD+/vrHdDqgWzdABFi7FrC3//fVOh2QlATcuQNMnAhcvAh89dW72tK+bI+IyHLxLGAisnAC/dm+KZUrByxeDPj6At9/D0RGArt3A1u2AEWKpLy2fXtg61b9f+fMCaxbp18H+O72wl5+VxnrhyAiylRcA0hEFu4ZgFzvfPY//9Englot8PXXwDffvHnNpUvAkyfA3bv6zR9//QWsWAF07fqhdl0yFDkRkVKYABKRhXsEoMA7nz12DKhdG3ByAm7dAgq8+1KDdu2AI0eAR48Au3culHkEfXFoIiLLwzWARGThnN75TEwM0KMHUL484OwMfP556u5Ypw4QFQU8fJi+domIzB0TQCKycC4Acr71mS++AG7cANavB5YsAYKD9TX/3kcE2LNHvxM43zsH+HICyJH+kImIFMZNIERk4VQAagEITfHo4sX69XzLlumLPVepAgwYAIwaBTRsqB/lU6uBGjUANzd9snfnDrB8uT4B/Pnnd5WCUQGoDW4AISJLxjWARGQFvgYwG8mlYM6cAerWBXx89Aldshcv9Mnf48fAyZPAwoXA778Dly8Dz57pR/1q1QIGDnzfLmAHACMBTDPhz0NEZFpMAInIChjvJJDUt8eTQIjIcnENIBFZgaoAGsL0XZo9gEZg8kdElo4JIBFZiTEAdCZuQ/uyHSIiy8YEkIishCeArtCP0pmCPQA/AO1NdH8ioszDNYBEZEUeA6j88rvWiPe1h77o83kAeY14XyIiZXAEkIisSD4AOwBkh/FGAu1f3m8HmPwRkbVgAkhEVqYagP0A8kEko11c8sjffmTuLmMiItNiAkhEVqgagPPYs6cIAEAkraOBydd3gX7al8kfEVkXJoBEZJV27TqFZs1uY+/eUVCp6r981AHvPsFDhX8PR6oPIATAKnDal4isETeBEJHV0el0qF27NhwdHXHo0CGoVCoAEQDWADgCIAzAs1dekRP6493qQr/Tl3X+iMi68SxgIrI6q1evxokTJ7B///6XyR+gT+qSj28TANEAEgA4AcgBnu1LRLaEI4BEZFXi4uJQvnx51K1bF7///rvS4RARmSWuASQiqzJ//nzcu3cPM2bMUDoUIiKzxRFAIrIa9+/fh6urKwICAvDdd98pHQ4RkdliAkhEVuM///kP1q5di8uXLyNfvnxKh0NEZLa4CYSIrML58+excOFCzJw5k8kfEdEHcASQiKyCt7c3IiIicP78eWTJkkXpcIiIzBpHAInI4oWGhmLjxo1Yt24dkz8iolTgCCARWTSdTodatWrBycnplaLPRET0PhwBJCKLtmrVKpw8eRIHDhxg8kdElEocASQiixUbG4sKFSqgXr16+O2335QOh4jIYrAQNBFZrO+++w7379/Ht99+q3QoREQWhSOARGSRkos+f/7555g/f77S4RARWRQmgERkkfr374/AwEBcuXIFefPmVTocIiKLwk0gRGRxzp07h0WLFmHWrFlM/oiI0oEjgERkcby8vHDu3DkWfSYiSieOABKRRdm5cydCQkJY9JmIKAM4AkhEFkOn08Hd3R1Zs2bFwYMHWfePiCidOAJIRBZj1apVCA8PZ9FnIqIM4gggEVmE2NhYlC9fHvXr12fRZyKiDGIhaCKyCPPnz8eDBw8wY8YMpUMhIrJ4HAEkIrOXXPS5T58+mDdvntLhEBFZPCaARGT2vvjiC6xbt45Fn4mIjISbQIjIrCUXfZ49ezaTPyIiI+EIIBGZNS8vL5w/fx7nzp1j3T8iIiPhCCARma3kos9BQUFM/oiIjIgjgJQKAuA5gAQATgBcALAGG5mWVquFu7s7smXLxrp/RB/EfprShiOA9A5nAawBcATAMQDPXnkuJ4BaAOoC8ANQNdOjI+u3atUqnDp1iid+EL0T+2lKP44A0mtCAHwL4AD0nw+00H+yfJ0KgD2AJAANAXwNoH0mxUjWLrnoc4MGDRAUFKR0OERmhv00ZRwLQdNLj6H/lOgF4NDLx5Lw9k4FLx9PevnfhwB4AugGINKEMZKtmDdvHh48eIBvv/1W6VCIzAj7aTIejgASgNMAWkHfuWgzcB97APkA7ABQzQhxkS26d+8eXF1d0a9fP8ydO1fpcIjMBPtpMi4mgDbvNIDGAGKQsU4lmT2A7AD2g50LpccXX3yBoKAgXL58mXX/iACwnyZT4BSwTXsM/SdKY3UqeHmfGAAtwWkGSquIiAgsWrQI48ePZ/JHBID9NJkKRwBtmh+AIBivU3mVPQBfAKtNcG+yVp6envj7779x7tw5ODk5KR0OkRlgP02mwRFAmxUCYC0y0qmMGweoVEDVt1YX0EJfnmBTuu9PtmXHjh3YtGkTZsyYweSPCEB6+un164GuXQFXV8DZGShVCujWDbh06W1Xs5+2ZRwBtFmNoN8VpkvXq8PDgXr1gNy5gfz5gbNn33aVPYD6APalM0ayFSz6TPQ2ae+n69YFChcGOnYEypQBbt4Epk/Xfz98GKhS5fVXsJ+2VUwAbdJZZGThb1ISULs20KQJcOoU8OjRuxLAV9t7o9chMli+fDl69+6NgwcPon79+kqHQ2QG0tdPP3gAFCyY8rE7d/QjgT17AosXv6899tO2hFPANmkNXj0EJj4e+Phj/ZTB06f/XnXvnv6TpIcHoH1lBmLGDCAyEpg2LTVtObxsj+jtYmNjMXbsWPj4+DD5IzJIXz/9evIHAEWLAsWL60cB3479tC1iAmiTjuDf4qBA1qxAUJD+k6O/v/4xnU6/bkQEWLsWsLfXP37uHDB1KvC//wE5cqSmLe3L9ojebt68eXj48CGLPhOlkP5++nVXrwLXr79t+jcZ+2lbxLOAbY5Af2ZkSuXK6acGfH2B77/Xj/Dt3g1s2QIUKaK/RqfTdzyffAK0T/VpQgIg7OV3ruuilO7du4cZM2Zg4MCBKFOmjNLhEJmJ9PfTr0tKAgIC9B/Yhw59X3vsp20NE0Cb8xwpDwz/l4+PvjMZMUI/lfD110CrVv8+P2+efidZcHBa23wGIBqAS7oiJus1ceJEODk5Ydy4cUqHQmRG0t9Pv0pEn/zt2wf88Qfw0Ufva5P9tK3hFLDNSXjvs/7+QGIi4OAADBr07+M3bgATJgATJwJOTsCTJ/qvpCT9yOCTJ0BcXPrbJdsTERGBxYsXY8KECciTJ4/S4RCZkfT1068SAT7/HFi1Cli+HFCrM94uWRfuArY5zwDkeuszMTFArVr6hO7+faBpU0Cj0T+3ezfQrNn77zx4MPDdd+9rl58s6V/t27fHxYsXWfSZ6A3p66eTJSd/y5YBS5YAvXunpV3207aCU8A2xwVATrxteuGLL/QjfUePAhcuAJ06AfPn69eNuLkBu3a9ebchQ/Q70pYt0+8ye7ucAFK1Y4RsxPbt27F582b8/vvvTP6I3pC+fhrQJ399+uj75F9+SUvyx37a1nAE0Ca1ABCa4pHFi//tND77TP/YwIH6DmT/fqBOnbffycPjQ3UAVQCaA9hhjMDJCmi1WtSsWRM5cuTA/v37WfSZ6K3S108PHAj89JN+mrhPn5R3zJJFX0rmTeynbRETQJv0NYDZSC4xcOaMvnq8j49+rUiyFy+Ahg2Bx4+Bkyf1p3687sMJoAOAkQBSVTSQbMCyZcvg7++PQ4cOoV69ekqHQ2Sm0tdPu7npS768TcmSwLVrb3uG/bQtYgJokzJ2Ekj62mOFeQJiYmJQvnx5NGrUCOvWrVM6HCIzxn6aTIu7gG1SVQANYfpfvz30Z1myUyG9efPm4dGjR5gxY4bSoRCZOfbTZFpMAG3WGKTlgPH00b5shwi4e/cuZs6ciYEDB6J06dJKh0NkAdhPk+kwAbRZngC6Qv/pzxTsAfgBSPWRIWTlJk6ciCxZsmDs2LFKh0Jk9kQEP/xwBYGBqhRnsRsX+2lbxgTQpv0IIB+MnwTav7zvj0a+L1mqs2fPYsmSJSz6TJQKUVFR+PTTTzF48GCcOdMXdnYFwX6ajI2bQGzeGejXf8RAPxWQUfYAsgPYj8xdwEzmjEWfiVLnyJEj8PX1xdOnT7F8+XKo1WqwnyZT4AigzasGfSdgjJHA5E+U7FToX8lFn2fOnMnkj+gdRARz585Fo0aNUKRIEYSHh79M/gD202QKHAGklyIBDASwBvoOIi2fMpOv7wbgBwB5jR4dWabkos8uLi7Yt28fiz4TvcXjx4/x2WefYePGjRgxYgSmTZsGR0fHt1zJfpqMh0fB0Ut5AayGvnP4FvpPhw7Qdxhv+4yggr5DSQJQH/pdZFxITCmtXLkSp0+fxuHDh5n8Eb3FgQMH0KVLF8TFxWHjxo3w9PR8z9Xsp8l4OAJI7xAB/afMIwDCkPJMypwAagOoC/0OMtaPojfFxMSgXLlyaNKkCQIDA5UOh8is6HQ6zJo1C+PGjUP9+vWxdu1aFH/3gervwH6a0o8JIKWCwM3NFf/3f56YOHEa9AeGczSH3m/KlCmYNm0aLly4wLp/RK94+PAhevbsia1bt2LMmDGYPHkyHBwyOiEnAKIBJABwAvtp+hBOAVMqqBATY4fYWGcALkoHQxbg7t27mDVrFgYNGsTkj+gVe/bsgZ+fHxITE7Flyxa0bt3aSHdWgf0zpQV3AROR0U2YMAFZsmTB119/rXQoRGZBq9Xim2++QfPmzVG+fHmEh4cbMfkjSjuOABKRUZ05cwZLly7FvHnzWPSZCMC9e/fQvXt3hIaGYsKECRg/fjzs7U11ChNR6jABJCKjGjlyJMqUKYP+/fsrHQqR4nbu3Ilu3bpBpVJhx44daN68udIhEQHgFDARGdG2bduwZcsWFn0mm6fVajFx4kS0atUK1apVQ3h4OJM/MiscASQio9BqtRg+fDgaNWqE//u//1M6HCLF3LlzB35+fti3bx+++eYbjBkzBnZ2HG8h88IEkIiMYsWKFThz5gyLPpNN27p1K7p37w4nJyfs2rULTZo0UTokorfiRxIiyrCYmBiMGzcOXbp0Qd26dZUOhyjTJSUlYcyYMWjbti1q1aqF8PBwJn9k1jgCSEQZNmfOHDx+/BjTp09XOhSiTHfz5k107doVhw8fxsyZMzF8+HBO+ZLZYwJIRBmSXPR58ODBLPpMNickJAQ9e/ZE9uzZsXfvXjRo0EDpkIhShR9RiChDJkyYgKxZs7LoM9mUxMREDB8+HF5eXmjYsCFOnjzJ5I8sCkcAiSjdkos+z58/H7lz51Y6HKJMce3aNXTp0gXHjx/HvHnzMGTIEG58IovDBJCI0m3EiBEoU6YMvvjiC6VDIcoUf/31F3r37o3cuXPjwIEDqFOnjtIhEaULp4CJKF22bt2KrVu3YtasWSz6TFbvxYsXGDJkCP7v//4PzZo1w8mTJ5n8kUXjCCARpZlWq8WIESPQqFEjdOzYUelwiEzq6tWr8PHxwZkzZ/Djjz/iyy+/5JQvWTwmgESUZsuXL8eZM2dw5MgRvhGSVfv9998REBCAAgUK4ODBg3B3d1c6JCKj4BQwEaVJdHQ0xo8fj65du3IKjKxWfHw8/vOf/6Bz585o27YtTpw4weSPrApHAIkoTebOncuiz2TVLl26BB8fH5w/fx4LFixA3759OdJNVocjgESUanfu3DEUfS5VqpTS4RAZ3dq1a1GzZk3ExsbiyJEj6NevH5M/skpMAIko1SZMmABnZ2cWfSarExcXhz59+sDPzw9qtRrHjh1DjRo1lA6LyGQ4BUxEqXL69GksXboU33//PYs+k1U5f/48fHx8cOXKFSxZsgS9e/fmqB9ZPY4AElGqjBgxAq6urujXr5/SoRAZzcqVK1GrVi1otVocPXoU/v7+TP7IJjABJKIP2rp1K7Zt24aZM2ey6DNZhZiYGPTu3Ru9evWCj48PwsLCULVqVaXDIso0nAImovfSarUYPnw4GjduzKLPZBXOnj0LHx8fXL9+HStWrEDPnj2VDoko0zEBJKL3WrZsGc6ePcuiz2TxRARLly7FwIED4erqiuPHj6NixYpKh0WkCE4BE9E7segzWYvnz5+jR48e+Pzzz9G9e3ccOXKEyR/ZNI4AEtE7zZkzB1FRUSz6TBbt1KlT8PHxwZ07d7BmzRp07dpV6ZCIFMcRQCJ6qzt37mD27Nks+kwWS0SwYMEC1K1bF9myZcOJEyeY/BG9xASQiN5q/PjxcHZ2xpgxY5QOhSjNnj59ii5duqB///4ICAjAoUOHUK5cOaXDIjIbnAImojecPn0ay5Ytww8//MCiz2Rxjh8/Dl9fXzx8+BC//fYbOnXqpHRIRGaHI4BE9AYWfSZLJCL48ccf0aBBA+TJkwcnT55k8kf0DhwBJKIUtmzZgm3btuHPP/+Eo6Oj0uEQpUpUVBQCAgLw559/YvDgwZg5cyayZMmidFhEZosJIBEZJCUlGYo+q9VqpcMhSpWjR4/C19cXT548wZ9//smC5USpwASQiAyWL1+OiIgIHD16lEWfyeyJCObPn49Ro0bB3d0du3fvRsmSJZUOi8gicA0gEQH4t+izn58fateurXQ4RO8VGRkJtVqNr776CkOGDMG+ffuY/BGlAUcAiQgAMHv2bBZ9Jotw8OBBdOnSBbGxsdi4cSM8PT2VDonI4nAEkIhw+/ZtzJ49G0OGDOEoCpktnU6HmTNnokmTJihRogTCw8OZ/BGlExNAIsKECROQLVs2Fn0ms/Xw4UN4enpi9OjRGDlyJHbv3o3ixYsrHRaRxeIUMJGNO3XqlKHoc65cuZQOh+gNe/fuRdeuXZGYmIgtW7agTZs2SodEZPE4Akhkw0QEw4cPR7ly5Vj0mcyOVqvF1KlT0axZM5QvXx7h4eFM/oiMhCOARDZs69at2LFjB/766y8WfSazcv/+fXTv3h07d+7E+PHjMWHCBNjb2ysdFpHVYAJIZKOSiz43adIEHTp0UDocIoPQ0FD4+fkBALZv344WLVooHBGR9eEUMJGNWrZsGSIiIjB37lwWfSazoNVqMXHiRLRs2RJVq1ZFeHg4kz8iE+EIIJENSi763K1bN9SqVUvpcIhw584ddOvWDXv37sWUKVMwZswYTvkSmRATQCIbNGvWLDx58gTTpk1TOhQibNu2Dd27d4ejoyNCQ0PRtGlTpUMisnqcAiayMbdv38acOXNY9JkUl5SUhK+//hpt2rSBu7s7wsPDmfwRZRKOABLZmPHjxyN79uws+kyKunXrFrp27YpDhw5hxowZGDFiBOzsOCZBlFmYABLZkPDwcCxfvhw//vgjiz6TYkJCQtCrVy84Oztjz549aNiwodIhEdkcftwishHJRZ/Lly+Pvn37Kh0O2aDExESMGDECXl5eqF+/PsLDw5n8ESmEI4BENmLLli3YuXMnNBoNiz5Tprt+/Tq6dOmCY8eOYe7cuRg6dCjLDxEpiAkgkQ1ILvrctGlTeHt7Kx0O2RiNRoPPPvsMuXLlwv79+1G3bl2lQyKyeZwCJrIBS5cuxblz5zBnzhyOulCmSUhIwJAhQ9CxY0d4eHjg5MmTTP6IzARHAIms3PPnzzFhwgR0796dRZ8p01y9ehW+vr44ffo0fvjhBwwYMIAfPojMCBNAIis3e/ZsFn2mTPX7778jICAA+fPnx8GDB+Hu7q50SET0Gk4BE1mxW7duYc6cORg6dChKlCihdDhk5eLj4/Hll1+ic+fOaNOmDU6cOMHkj8hMcQSQyIolF30ePXq00qGQlbt06RJ8fX1x7tw5/O9//0O/fv045UtkxpgAElmp8PBwrFixAj/99BOLPpNJrV27Fn379kWRIkVw+PBhuLm5KR0SEX0Ap4CJrNCrRZ/79OmjdDhkpeLi4tC3b1/4+fmhQ4cOOH78OJM/IgvBEUAiK7R582YWfSaTunDhAnx8fHDp0iUsXrwY/v7+nPIlsiAcASSyMklJSRgxYgQ8PDxY9JlMYuXKlXB3d0dSUhLCwsIQEBDA5I/IwjABJLIyLPpMphITE4PevXujV69e6Ny5M8LCwlC1alWlwyKidOAUMJEVef78OcaPH4/u3buz/AYZVUREBHx8fHDt2jUsX74cvXr1UjokIsoAjgASWZFZs2bh2bNnLPpMRiMiWLp0KWrXrg07OzscO3aMyR+RFWACSGQlbt26hblz57LoMxlNdHQ0evTogYCAAHTr1g1HjhxBpUqVlA6LiIyAU8BEVmLcuHHIkSMHiz6TUZw6dQo+Pj64c+cOVq9eDT8/P6VDIiIj4gggkRU4efIkVq5ciUmTJiFnzpxKh0MWTETwyy+/oG7dunB2dsbx48eZ/BFZISaARBYuuehzhQoVWPSZMuTZs2fo2rUrvvjiCwQEBODw4cMoX7680mERkQlwCpjIwm3atAmhoaEIDg5m0WdKtxMnTsDHxwcPHz5EUFAQOnfurHRIRGRCHAEksmCvFn328vJSOhyyQCKCn376CfXr10fu3Llx4sQJJn9ENoAJIJEFW7JkCc6fP4+5c+ey6DOl2ZMnT9CpUycMHDgQX3zxBQ4cOICyZcsqHRYRZQJOARNZqOfPn2PChAno0aMHatasqXQ4ZGGOHj0KX19fPHnyBH/++Sc6duyodEhElIk4AkhkoWbOnMmiz5RmIoL58+ejUaNGKFSoEE6ePMnkj8gGMQEkskDJRZ+HDRuGjz76SOlwyEJERkZCrVZj2LBhGDRoEPbu3YtSpUopHRYRKYBTwEQWaNy4cXBxccGoUaOUDoUsxMGDB9GlSxfExMRgw4YN3DREZOM4AkhkYZKLPk+ePJlFn+mDdDodZs2ahSZNmqBEiRIIDw9n8kdETACJLImI4KuvvmLRZ0qVhw8fwsvLC6NGjcLIkSOxa9cuLhkgIgCcAiayKJs2bcKuXbuwYcMGODjwf196t71796Jr165ISEjAli1b0KZNG6VDIiIzwhFAIguRXPS5WbNm8PT0VDocMlM6nQ7Tpk1Ds2bNUK5cOZw6dYrJHxG9gUMIRBZi8eLFuHDhAlatWsWiz/RW9+/fR48ePbBjxw6MGzcOEyZM4EgxEb0VewYiC/Ds2TNMnDiRRZ/pnUJDQ9GtWzeICLZt24aWLVsqHRIRmTFOARNZgOSiz1OnTlU6FDIzWq0WkyZNQsuWLVGlShWEh4cz+SOiD+IIIJGZu3nzJubNm8eiz/SGu3fvws/PD3v37sXkyZPx9ddfw97eXumwiMgCMAEkMnPjxo1Dzpw5MXr0aKVDITOybds2dO/eHQ4ODggNDUXTpk2VDomILAingInM2IkTJ/Drr79i8uTJcHFxUTocMgNJSUkYO3Ys2rZti5o1ayI8PJzJHxGlGUcAicyUiGD48OGoWLEiPv/8c6XDITNw69Yt+Pn54eDBg5g+fTpGjhwJOzt+jieitGMCSGSmQkJCsGvXLmzcuJGlPAibNm1Cz5494ezsjN27d6NRo0ZKh0REFowfHYnMUHLR5+bNm6N9+/ZKh0MKSkxMxMiRI+Hp6Yn69esjPDycyR8RZRiHFYjM0KJFi/D3339jzZo1LPpsw65fv44uXbrg2LFjmDNnDoYNG8Z/D0RkFEwAiczMq0WfP/74Y6XDIYVoNBr07t0bOXPmxL59+1CvXj2lQyIiK8IpYCIzM3PmTDx//hzTpk1TOhRSQEJCAoYOHYqOHTuiadOmOHnyJJM/IjI6jgASmZHkos9fffUVihcvrnQ4lMn++ecf+Pr6Ijw8HN9//z0GDhzIKV8iMgkmgERmZOzYsciZMydGjhypdCiUyf744w8EBAQgX758OHjwIGrVqqV0SERkxTgFTGQmkos+T5kyBTlz5lQ6HMok8fHxGDBgADp16oRWrVrhxIkTTP6IyOQ4AkhkBkQEX331FSpVqoSAgAClw6FMcvnyZfj4+ODcuXP473//iy+++IJTvkSUKZgAEpmBjRs3Yvfu3Sz6bEMCAwPRt29fFC5cGIcPH4abm5vSIRGRDeEUMJHCEhMTMWLECLRo0YJFn21AXFwc+vXrh65du8LLywvHjx9n8kdEmY5DDUQKW7x4MS5evIjAwEBO/1m5CxcuwMfHB5cuXcKiRYsQEBDA3zkRKYIjgEQKSi763LNnT44CWblff/0VtWrVQmJiIo4ePYrPP/+cyR8RKYYJIJGCZsyYgejoaEydOlXpUMhEYmJi4O/vj549e6JTp044duwYqlWrpnRYRGTjOAVMpJAbN25g/vz5GD58OIs+W6mIiAj4+Pjg2rVrWL58OXr16qV0SEREADgCSKQYFn22XiKCZcuWoXbt2lCpVAgLC2PyR0RmhQkgkQKOHz+OVatWYcqUKXBxcVE6HDKi6Oho9OzZE/7+/ujWrRuOHj2KypUrKx0WEVEKnAImymQiguHDh6Ny5cos+mxlTp8+DR8fH9y+fRurV6+Gn5+f0iEREb0VE0CiTJZc9DkkJIRFn62EiGDRokUYNGgQKlasiOPHj6N8+fJKh0VE9E42PAUsAJ4BePTyuygbDtmEV4s+t2vXTulwyAiePXsGPz8/9OvXD71798bhw4eZ/BGZNb7/AzY3AngWwBoARwAcg/4XnywngFoA6gLwA1A106Mj67do0SIWfbYiJ0+ehI+PD+7fv49169bBx8dH6ZCI6K34/v86GxkBDAHQCEA1ALMB7ELKXz5e/nnXy+ervbx+UybGSNbu6dOnmDhxInr16sWizxZORPDzzz+jXr16yJUrlyERJCJzw/f/d7HyBPAx9Nm8F4BDLx9LwruHe+Xl83h5vSeAbgAiTRgj2YoZM2YgJiaGRZ8t3JMnT9C5c2cMGDAA/fr1w4EDB1C2bFmlwyKiFPj+/yFWPAV8GkAr6P8RAIAuja9Pvn4dgB0vv1i9n9InuejzyJEjUaxYMaXDoXQKCwuDr68voqKisH79evzf//2f0iER0Rv4/p8aVjoCeBpAY+h/+doM3kv78j6NAJzJ4L3IVo0dOxa5c+fGiBEjlA6F0kFE8N1336Fhw4YoUKAATp48yeSPyCzx/T+1rDABfAx95h+DjP/yk2lf3q8lrHk4mEzj2LFjLPpswSIjI9GxY0cMHToUgwYNwr59+1CqVCmlwyKiN/D9Py2sMAEcCONk/q9L/iQw0Mj3JWv2atFnf39/pcOhNDp06BA+/vhj7N+/H8HBwZgzZw6cnJyUDouI3ipt7/+3bgFDhgBNmwK5cwMqFbB8+duutM73f5MmgAcPHsSkSZPw5MkTUzbzihAAa/HqL/+//33XLzQ9tNBvIzfN7qA7d+5g0qRJCA8PN8n9KfNt2LABe/bswZw5c1j02YLodDrMnj0bTZo0QfHixXHy5El4e3srHRYRvdOb7/8fcvkysHo14OQEtG//oatN+/6vBJMngJMnT87EBPBbvP4jGTcBBAD7l+0Y3507dzB58mQmgFYiMTERI0eORMuWLdG2bVulw6FUevToEby9vTFy5Eh89dVX2L17N0qUKKF0WET0Xm++/39IkybAw4fA9u3AsGGpeYXp3v+VYDZTwHFxcRm8w1kAB5D23T5ppQWwH0CEidshS7dw4UJcvHgRc+bMYdFnC7Fv3z64ubnh6NGj2Lx5M2bMmAFHR0elwyKi90r5/h8fD3z8MeDqCjx9+u9V9+4BhQsDHh6AVgvYpTkDsq73f5MlgJMmTTLseCxdujRUKhVUKhV2796NUqVKwcvLC+vXr8fHH3+MrFmzYvLkyQCAe/fuoV+/fihevDicnJxQunRpTJ48GUlJSSnuP3nyZNStWxd58+ZFzpw5UbNmSyxZYgd5pcRPqVJARASwZ49+bl+l0j8GALt36/+8Zg0wahRQpAiQIwfg7Q3cvw88fw707Qvkz6//6t0biI5OvrMDgDUQEfz3v/+Fm5sbnJ2dkSdPHnTq1AlXr15NEauHhweqVq2KsLAwNG7cGNmyZUOZMmUwY8YM6HS6l/HsRu3atQEAvXv3Nvx9TZo0yWi/E8o8T58+xaRJk/DZZ5+hRo0aSodDH6DT6TB9+nQ0a9YMZcuWRXh4OEdtiSzGGrxa1S5rViAoCHjwAEheeq3TAd26ASLA2rWAvX1623J42Z7lM9mipM8//xyRkZH48ccfsX79ehQpUgQAULlyZQDAiRMncP78eYwbNw6lS5dG9uzZce/ePdSpUwd2dnaYMGECypYti0OHDmHq1Km4du0ali1bZrj/tWvX0K9fP8PUzOHDfTFwoA63bwMTJuiv+fNPoFMnIFcu/VQwAGTJkjLOr78GmjXTTxNfuwYMHw507Qo4OAA1auj/oZw8qb/OxQX44QdA/yngCPr164fly5dj0KBBmDlzJiIjIzFlyhQ0aNAAp06dQqFChQzt3Lt3D926dcNXX32FiRMn4s8//8SYMWNQtGhR9OzZEzVr1sSyZcvQu3dvjBs3Dp6engCA4sWLG/k3Q5khuejzN998o3Qo9AEPHjxA9+7dsWPHDowdOxYTJ07kek0ii3IE/xZx1itXDli8GPD1Bb7/HoiM1A/8bNmiH/BJP+3L9qyAmNDs2bMFgPzzzz8pHi9ZsqTY29vL33//neLxfv36SY4cOeT69espHp8zZ44AkIiIiLe2o9UmSWKii0yZAsmXD6LTQUT0X1WqQJo2/ffPyV+7dkEAiLd3yseHDNE/PmhQysc7doTkzfvvnw8dyiYAZO7cuSliuXnzpjg7O8vIkSMNjzVt2lQAyJEjR1JcW7lyZWnTpo3hz2FhYQJAli1b9u6/VIW4urqm+Jno3a5duyZZsmSR8ePHKx0KfUBoaKgULlxYChUqJNu3b1c6HCJKM52I5JTX3+OTv/r3hzg6QuzsIOPGvf0aEUhYGF6+/777mn+/cr5s17IptgawevXqKF++fIrHNm7ciGbNmqFo0aJISkoyfLVr1w4AsGfPHsO1oaGhaNmyJXLlygV7ewc4Oj7HhAnA48f6Yd/U8vJK+edKlfTfXw7ApXg8MvLfaeCNG2OhUqnQvXv3FLEWLlwYNWrUwO7du1O8vnDhwqhTp84bfwfXr19PfbBkEZKLPo8cOVLpUOgdtFotJk+ejJYtW6Jy5coIDw9Hy5YtlQ6LiNLsOd482/df/v5AYqJ+Vm/QIGO1+QxA9AevMneKzXMUecsY7P3797Fhw4Z3Lrp+9OgRAODo0aNo3bo1PDw8sGjRIhQvngNOTp746y9g2jQgLftJ8uZN+efkEl/vejw+Xr9W8P59fY23V6d5X1WmTJkUf86XL98b12TJksUIm1/InBw7dgyrV6/GwoULkSNHDqXDobe4e/cuunXrhj179mDixIkYO3Ys7NO/IIiIFJXwzmdiYoAePYDy5fXv2Z9/Dmg0pm/XUiiWAL5tV2T+/PlRvXp1TJs27a2vKVq0KAAgMDAQjo6O2LhxI7JmzYrk7P+vv0wV7Zvy59f/DPv27UOW1xcWAm99jKybiOCrr75ClSpV0Lt3b6XDobfYvn07unfvDnt7e+zcuRMeHh5Kh0REGfLuwuxffAHcuAEcPQpcuKDfEzB/PjB0qGnbtRQmTQCTk6DUjnJ5eXlh06ZNKFu2LPLkyfPO61QqFRwcHF751O6CuDgX/Prr87fEkLYRwdTy9MyGGTNisX79euTJkwfnzp0zTCP9oN8pkmZp/fsi8xIcHIy9e/di06ZN3ERgZpKSkjBp0iRMnz4drVq1wq+//oqCBQsqHRYRZZgLgJx4fRp48WJg1Spg2TKgShX914AB+qofDRsCySuyfv9d/z25eMexY/pZPkCfML5dTgCWP8Nj0nepatWqAQC+//579OrVC46OjqhQocI7r58yZQq2b9+OBg0aYNCgQahQoQLi4+Nx7do1bNq0CQsWLEDx4sXh6emJefPmwc/PD3379sXjx48xZ86bO3z1MQCBgcC6dUCZMvrt4S/DSjedDnjxIhYAMG/ePEPJFp1Ohzx58uA///kPqlWrhv79+6fpvmXLloWzszNWr16NSpUqIUeOHChatKhh5JPMV3LR51atWrF8iJm5desW/Pz8cPDgQUybNg2jRo2CXdoLgBGRmRERnDx5Erlz50WpUs8Mdf3OnNGv9+vVC/jss3+vnzMHOHRIvzP45En98W+dO6e8588/67/0939bqyoAtV9+t2wm7QU9PDwwZswYbNiwAY0aNULt2rVx/Pjxd15fpEgRHDt2DK1bt8bs2bPRtm1b9OjRA0uXLoWbm5thVLB58+ZYunQpzpw5A29vb4wdOxadOrlj9Og3f5zJk/Xn/PXpo8/4jXGak1YLHD78759FxFDP78qVK4iJiXljw0dqZMuWDUuXLsXjx4/RunVr1K5dGwsXLsx4wGRyCxcuxKVLlzB79mwWfTYjmzdvhpubG65evYrdu3djzJgxTP6ILFhCQgK2b9+OAQMGoGTJknB3d8eff96FyL/9brVqQGzsm6eAZcmiH+H75x998gfok7x3fb2dPYC6xv/BFKASefePaVnOAsjg0F4aVKkCnDuX8jGVSoUlS5bgk08+Qa5cuTItlsxQrlw5fPLJJ5g5c6bSoZidp0+fwtXVFd7e3li6dKnS4RD0I7Ljxo3DrFmz4OnpieXLlyN//vxKh0VE6fD06VNs3rwZGo0GmzdvxtOnT1GiRAmo1Wqo1Wo0aZIXjo41MzGiswCqZGJ7pmFFC5WqAmgI4BBMexycPUTqoW7d8jh37t/C1CqVCjly5IC/vz/69esHDw8PqNVqdOjQAR999JEJ4yGlffvtt4iNjWXRZzNx48YNdOnSBWFhYZg9ezaGDRvGUT8iC3Pz5k0EBwdDo9Fg9+7dSExMxMcff4yhQ4dCrVajRo0ar822ZM77P1Af1pD8AWZ0FrBxjEFmnAUcFdUfixYtwoABA1I8M3v2bFy/fh3z5s2DiGDIkCEoUaIE3N3dMWXKFJw6dQpWM+BKAIDr16/ju+++w/Dhw1GsWDGlw7F5wcHBcHNzw+3bt7Fv3z4MHz6cyR+RBRARnDp1ClOmTIG7uztKlCiBIUOGQEQwb948XL9+HSdOnMDEiRPh5ub2lqU2mfP+r2/HOljRFHAyPwBB0P+ijCspSb+ZpHt3IE+ePKhWrRpiYmIM6xpv376dYsPGkydPsGnTJsOw9fPnz1GqVCl06NABarUajRs3tpiD5jkF/HbdunVDaGgoLl26xLp/CkpISMDo0aMxf/58qNVqLF26FHlfL+ZJRGYlMTER+/btg0ajQXBwMK5duwYXFxe0b98earUa7dq1Q+7kxXqpYrr3f/3ony+A1Sa4tzKsMAF8DKDyy+/G+0eg09nh4UMdKlUCoqL+fdze3h5arRaVKlXCudcXBb7ixYsX2L17t+Ef+u3bt5EnTx54enpCrVajTZs2cHFxMVq8xsYE8E1hYWGoU6cOFi1ahM8//1zpcGzWP//8A19fX4SHh2P27NkYNGgQN+IQmannz59jy5Yt0Gg02LRpE6KiolCsWDHDej4PDw84OaW3xp5p3v/1yV8+AOcBWM8HSytMAAHgDIBGAGJgnH8E9hDJjtatnbFjx/0Uz6hUKmTNmhWnTp1CuXLlUnU3EcHx48eh0Wig0Whw5swZODk5oUWLFlCr1fD29ja70i9MAFMSEXh4eCAyMhLh4eE8SUIh69evh7+/P/LmzYt169ahdu3aSodERK+5c+eOYT1faGgoEhISUL16dUPSV7NmTSN+aDP++z+QHcB+ZOZG00yR2YcPZ57TIlJQROzlwwc7v+/L/uV9TsvixYsFwBtfa9asyVCkV69elfnz54uHh4fY29sLAKlTp45MmzZNzp49Kzqd8odOu7q6ysiRI5UOw2z8+eefAkA2b96sdCg2KT4+XgYMGCAApFOnTvLkyROlQyKil3Q6nZw5c0amTp0qtWvXFgBib28vzZo1k++++06uXr1q4giM//5vjax0BDBZJICBANZAn8Wn/tNAUpL+8GigG4AfAORFYmIiXF1dcfPmTYgIVCoVRAT/93//hyVLlrz39JJURxwZiZCQEGg0GmzZsgUxMTEoW7as4ZNSgwYNFDllgiOA/0pMTESVKlVQqlQpbN26ldONmezy5cvw9fXF2bNnMX/+fPTv35+/AyKFJSUl4cCBA4ZlTleuXEGOHDnQtm1bqNVqtG/fPpPX5ab//f/f6/99/7dKyuafmSVERBqJPqN3EH3e+7ZsX/Xyecj16yWkQweHNz6pLF26VACInZ2dVKpUSQIDAyV37txSqlQpOXz4sFGjjouLk5CQEOnbt68ULlxYAEi+fPmkV69esn79eomOjjZqe+/DEcB//fjjj6JSqeTUqVNKh2JzAgMDxcXFRVxdXeXEiRNKh0Nk06Kjo+WPP/6Qnj17Sr58+QSAFC5cWPr27SubNm2SuLg4pUOU9Lz/668PUSLYTGUjCWCysyLytYi0EJGckvKXn/Pl41+LyFmJjo6WIkWKiK+vb4o7JCYmSsmSJSVr1qxy/vx5ERH5559/pG7duuLg4CBz5841yZStVquVw4cPy5gxY6Ry5coCQLJmzSpeXl6yaNEiuXfvntHbfBUTQL2oqCjJly+f+Pv7Kx2KTYmNjZV+/foJAOnatas8e/ZM6ZCIbNK9e/dk0aJF4uXlJVmyZBEAUqVKFRkzZowcPnxYtFqt0iG+Q+rf/22FjSWAr9KJyDMRefTy+5tJ25IlSwSAHDp0KMXjERERcvTo0RSPvXjxQr766isBIF5eXvLo0SOTRS4icunSJZkzZ440btxY7OzsRKVSSf369WXGjBmGxNSYmADqjRw5UrJlyya3b99WOhSbceHCBalevbpkzZpVFi5caBZrYolsyfnz52XGjBlSv359UalUYmdnJ40bN5Y5c+bIpUuXlA4vHT78/m8LrHwNYMZotVrUrFkTLi4u2LdvX6rWGW3cuBG9evVC9uzZERgYiAYNGpg8zocPHxrWDW7btg2xsbEoX768Yd1gvXr1MrxLlWsAgWvXrqFixYoYPXo0Jk2apHQ4NmHVqlX44osvULx4cQQFBaF69epKh0Rk9bRaLQ4fPmyoVHHx4kVky5YNrVu3hlqthpeXF49WtAZKZ6Dmbtu2bQJA/vjjj1S/5saNG9KwYUOxt7eXGTNmZOqQeGxsrAQHB0tAQIAULFhQAEiBAgXE399fNBqNxMTEpOu+HAEU8fPzk8KFC8vz58+VDsXqxcTEiL+/vwCQHj168O+cyMRiYmJEo9GIv7+/FChQQABIwYIFJSAgQIKDgyU2NlbpEMnImACmQtu2bcXV1VVevHiR6tckJibKmDFjBIC0bdtWHjx4YMII3y4pKUkOHDggI0eOlAoVKggAcXZ2FrVaLUuXLk1TTLaeAB45ckQAyKJFi5QOxepFRERI5cqVJVu2bLJs2TKlwyGyWg8ePJClS5eKWq0WZ2dnASAVKlSQkSNHyoEDByQpKUnpEMmEOAWcCmfPnkWNGjUwb948DB48OE2v3bp1K3r06AFHR0esXbsWTZo0MVGUH/b3338bhvQPHToElUqFBg0aGKaK31fI2pangEUETZs2RVRUFIs+m5CIYPny5fjyyy9RpkwZBAUFoXLlykqHRWRVLl26ZHgfOHjwIEQE9evXN7wPVKhQQekQKbMomn5akD59+kjevHklMjIyza+9ffu2NG3aVOzs7OSbb74xi09V9+7dk8WLF4u3t7dkzZpVAEilSpVk9OjRcujQoTemrW15BDC56POWLVuUDsVqPX/+XHr06CEAJCAgIN1LFYgoJa1WK4cOHZLRo0dLpUqVDBUkvL29ZfHixSavIEHmiyOAqXTv3j24urriiy++wJw5c9L8+qSkJHzzzTf45ptv0KJFC6xatQqFChUyQaRpFxMTg+3bt0Oj0WDjxo149OgRChcuDG9vb6jVarRo0QLVqlWzyRHAhIQEVK1aFaVLl8bWrVuVDscqnT59Gr6+vrh58yZ++eUXdOvWTemQiCxafHw8du7cCY1Ggw0bNuDevXvInz8/vLy8oFar0apVK2TPnl3pMElhTADT4JtvvsHUqVNx/vx5lClTJl332Llzp+ENbvXq1WjRooUxQ8wwrVaLgwcPGqYILl++bOgomjZtipUrVyJfvnwKR5l5fvzxRwwePBjh4eHcgWpkIoJFixZh8ODBKF++PIKCgjj9RJROjx8/NlSD2Lp1K2JiYuDq6priFCkuX6FXMQFMg5iYGJQvXx6NGzdGYGBguu9z7949dO/eHaGhoRg/fjwmTJhglv9jigjOnz8PjUaDyZMn48WLF7C3t0ejRo0MnUp6E2FL8OTJE7i6uqJjx45YvHix0uFYlWfPnqFfv34IDAzEF198gXnz5sHZ2VnpsIgsytWrVw0f1vfv3w+tVou6desa+udKlSrxmER6JyaAabRs2TL4+/vj0KFDqFevXrrvo9VqMX36dEyaNAlNmjTB6tWrUbRoUSNGalzlypVD69atUaNGDWg0GuzcuRMvXrxA1apVDZ2Nu7s77OzslA7VaEaOHImff/4Zly5dMuvfjaU5efIkfHx8cP/+fSxatAi+vr5Kh0RkEXQ6HY4fP25I+s6ePYssWbKgRYsWUKvV8Pb2RpEiRZQOkywEE8A0Si4OnSNHDuzfvz/Dn6727NkDPz8/JCYm4tdff0WbNm2MFKlxvb4LODo6Glu3bjWsG4yKikLRokXRoUMHqNVqNGvWDFmyZFE46vS7du0aKlSogDFjxrDos5GICP73v/9h6NChqFq1KtatWwdXV1elwyIyay9evMCuXbug0WgQHByMO3fuIE+ePIb1fG3atEGOHDmUDpMskSJbTyzc9u3bBYD8/vvvRrnfgwcPpE2bNgJAxowZI4mJiUa5rzG9bxdwYmKi7Nq1S4YMGSKlS5cWAOLi4iKdO3eWVatWpWvntNK6du0qRYoUkejoaKVDsQpRUVHSqVMnASADBw6U+Ph4pUMiMluRkZGyatUq6dy5s7i4uAgAKV26tAwZMkR27dpllu8RZHk4AphO7du3x8WLF3Hu3Dk4OTll+H46nQ6zZs3CuHHjUL9+faxduxbFixc3QqTGkdo6gCKCs2fPGqYojh07BgcHBzRp0sQwVVyyZMlMijp9jh49irp162Lx4sUICAhQOhyLFxYWBl9fX0RGRmLp0qX45JNPlA6JyOxcv37d0G/u3bsXSUlJqFWrlqHfrFq1KtfzkVExAUyniIgIVK9eHXPnzsWQIUOMdt8DBw6gS5cuiIuLw4oVK+Dp6Wm0e2dEegtB37p1C8HBwdBoNNi1axcSExNRo0YNqNVqdOzYEW5ubmbVqYkImjRpgqdPn+LkyZNmuTnHUogIvv/+e4wcORJubm5Yt24dSpcurXRYRGZBRHDy5ElD0nfq1Ck4OjqiefPmhvV85jQIQFZIucFHy9e3b1/JkyeP0ac4Hz16JF5eXgJAhg8fLgkJCUa9f3oYoxD0kydPJDAwULp27Sq5cuUSAFKiRAkZMGCAbNu2LU1H7ZnK+vXrBYBs3bpV6VAs2uPHj0WtVgsAGTZsmFn8bomU9uLFC9m2bZt8+eWX8tFHHwkAyZUrl/j5+cm6devk6dOnSodINoQjgBmQ0eLQ7yMimD9/PkaNGoVatWohMDBQ0alTYx8Fl5iYiD179hg+/d68eRO5cuVC+/btoVar0a5dO+TMmdMobaVWQkICqlSpgrJly2LLli2Z2rY1OXz4MHx9ffH8+XOsWLEC3t7eSodEpJinT59i8+bN0Gg02Lx5M54+fYoSJUpArVajQ4cOaNq0KRwdHZUOk2yRwgmoxZsyZYo4OTnJlStXTHL/w4cPS8mSJSV37tzy119/maSN1DDlUXA6nU5OnDghEydOFDc3NwEgjo6O0rp1a/n555/lxo0bJmn3dd9//73Y2dnJ6dOnM6U9a6PVamXWrFni4OAg9evXl+vXrysdEpEibty4IT/99JO0atVKHB0dBYC4ubnJxIkT5eTJk6LT6ZQOkUiYAGZQTEyMFC1aVHx8fEzWRmRkpHTs2FEAyODBgxWZTsvMs4CvXbsmP/zwg7Ro0UIcHBwEgLi7u8uUKVPk1KlTJuk8o6KiJG/evBIQEGD0e9uChw8fiqenpwCQkSNHmsWyBaLMotPp5NSpUzJlyhRxd3cXAOLg4CAtWrSQH374Qa5du6Z0iERvYAJoBMuWLRMAcvDgQZO1odPp5PvvvxdHR0epVauWyUYc3yUzE8BXRUVFyerVq8XHx8dQDqFUqVIyePBgCQ0NNVo5hBEjRki2bNnkzp07RrmfLdm3b58UK1ZM8ufPL5s2bVI6HKJMkZiYKKGhoTJ48GApVaqUofyVj4+PrF69WqKiopQOkei9uAbQCLRaLdzd3ZEtWzYcOHDApLtajx07Bl9fXzx69AhLlixBp06dTNbWq4y9BjA9Xrx4gd27dxsKot6+fRt58uSBp6enoSCqi4tLmu/7zz//oGLFivj6668xceJEE0RunXQ6HWbOnInx48ejQYMGWLt2LYoVK6Z0WEQm8/z5c0MB/JCQEERFRaFYsWKGAvgeHh4WXQCfbIzSGai12LFjhwCQ3377zeRtPXnyRDp37iwA5D//+Y/ExcWZvE2lRgDfRafTSVhYmIwbN06qVasmAMTJyUnatWsnCxYsSNNIXpcuXVj0OY3u378vrVu3FpVKJePGjWNhWrJat2/flgULFki7du3EyclJAEi1atVk3LhxEhYWxvV8ZLE4AmhEnp6euHDhAs6fP2+U4tDvIyJYsGABhg4dikqVKiEoKAjlypUzWXvmMAL4PlevXjXUG9y3bx+0Wi3q1KljKKJauXLlt47MHjlyBPXq1cOSJUvg7++vQOSWZ/fu3fDz84NWq8WqVavQqlUrpUMiMhoRwblz5wwVCo4ePQp7e3s0btzY0J+wniVZAyaARmSq4tDvEx4eDh8fH9y9excLFy5E165dTdKOuSeAr3r8+DE2bdoEjUaDLVu2ICYmBmXLljV03g0aNICDgwOLPqeRVqvF1KlTMWXKFDRt2hSrV6/mwfNkFZKSknDw4EFD0nflyhVkz54dbdu2hVqthqenJ/Lmzat0mETGpeDoo1Xq16+f5MmTRx4/fpxpbT579kz8/PwEgPTp00diY2ON3oa5TQGnVlxcnISEhEjfvn2lcOHCAkDy5csnvXr1kpEjR7LocyrdvXtXmjdvLiqVSiZNmiRJSUlKh0SUIdHR0bJ+/Xrp1auX5MuXTwBI4cKFpW/fvhISEpIpS2uIlMQRQCO7d+8eypUrh759+2Lu3LmZ1q6IYOnSpRgwYADKlSuHoKAgVKxY0Wj3t6QRwHfR6XQICwuDRqPBX3/9hfPnz8POzs5QfNrb2xuFChVSOkyzs2PHDnTr1g12dnZYs2YNmjVrpnRIROly//59bNiwARqNBjt27EB8fDwqV65smB2oXbs27OzslA6TKFPwX7qRFS5cGKNGjcKPP/6Iq1evZlq7KpUKAQEBCAsLQ2JiItzd3bFy5cpMa98S2NnZoW7dupg+fTq++OIL2NnZYejQoXj69Cn69euHIkWKoEGDBpg5cyYuXLigdLiKS0pKwrhx49C6dWu4ubnh1KlTTP7I4ly4cAEzZ85EgwYNUKRIEfTr1w9Pnz7F1KlTcenSJURERGD69OmoW7cukz+yLQqPQFqlmJgYKVasmHTu3FmR9qOjo6VXr14CQD777DOj7G611Cngt4mMjJS8efPK559/bnjswYMHsmzZMunYsaM4OzsLAClfvryMGDFC9u/fb3NTnrdu3ZImTZqInZ2dTJs2TbRardIhEaVKUlKS7N+/X0aMGCHly5cXAOLs7CwdO3aUZcuWyYMHD5QOkcgsMAE0keXLl5u8OHRqYsiWLZtUrlxZzp49m6F7WVMCOHz4cMmePfs7S8XExsZKcHCwBAQESMGCBQWAFChQQPz9/UWj0ZhkjaU52bx5s+TPn1+KFSsme/fuVTocog+KjY0VjUYj/v7+UqBAAQEgBQsWlICAAAkODrb6/2eJ0oNrAE1Eq9WiVq1acHZ2Nnlx6Pc5d+4cfH19ceXKFfz000/o3bt3umKxhjWAwL9Fn8eOHYsJEyZ88HqtVosjR44Ydgf+/fffcHZ2RuvWraFWq+Hl5YUCBQpkQuSml5iYiPHjx2PmzJlo3749VqxYgfz58ysdFtFbPXz4EBs3boRGo8G2bdsQFxeHChUqGNbz1a1blzv7id5H6QzUmmVmcej3iYmJkc8//1wASLdu3eT58+dpvoe1jAD6+vpmqOjzhQsXZObMmdKgQQNRqVRiZ2cnjRo1ktmzZ8vFixeNHG3muX79ujRo0EAcHBxk1qxZnPIls3Tx4kWZPXu2NGrUSOzs7ESlUkmDBg1k5syZcuHCBaXDI7IoHAE0MS8vL5w/fx7nzp1T/IigNWvWoF+/fihatCiCgoJQo0aNVL/WGkYADx8+jPr16xut6PP9+/cNIxDbt29HfHw8KlWqZBiBqFOnjkUsKt+wYQN69eoFFxcXBAYGon79+kqHRARAv3P/6NGjhhH48+fPI2vWrGjVqpVhBJ4794nSSekM1NpFRESInZ2dzJs3T+lQRETk77//lho1akiWLFlkwYIFqT7GyNJHAHU6nTRs2FCqV69ukg0d76op1qdPH9m4caNZ1hR78eKFDBs2TABIhw4dMrV2JdG7xMXFycaNG6VPnz4pand+9tln8ueff/LIRiIjYQKYCZQoDv0+cXFx0r9/fwEgvr6+8vTp0w++xtITwD/++EMAyLZt20zeVmJiouzZs0eGDRsmZcuWFQCSPXt2+eSTT2TFihXy6NEjk8fwIVevXpU6deqIo6OjzJ8/n+eZkqIePXokK1askE8++USyZ88uAKRs2bLy1Vdfyd69e21uFz5RZuAUcCa4f/8+XF1d0adPH8ybN0/pcAyCgoLQp08fFChQAEFBQahZs+Y7r7XkKeCEhARUqVIFrq6u2Lx5c6a2Le84V7RRo0bo2LGjIueKrl+/Hv7+/sibNy/WrVuH2rVrZ2r7RID+/O7k/y/279+f6vO7ichIFE5AbcbUqVPF0dFRLl++rHQoKVy+fFnc3d3FyclJfvzxx3eOBFnyCOB3330ndnZ2cubMGaVDkdu3b8uCBQukXbt24uTkJACkWrVqMm7cOAkLCzPpSFx8fLwMGDBAAMinn34qUVFRJmuL6HU6nU6OHj0qY8eOlapVqwoAcXJyknbt2smCBQvk9u3bSodIZFOYAGYSpYtDv098fLwMGjRIAMgnn3zy1sTAUhPA5KLPffr0UTqUNzx79kx+++036d69u+TJk0cASLFixaR///6yZcsWiY+PN1pbly5dkpo1a4qTk5P89NNPnPKlTBEfHy9btmyR/v37S7FixQSA5MmTR7p37y6//fabPHv2TOkQiWwWE8BMtGLFCgEgBw4cUDqUt1q/fr3kzp1bSpUqJUeOHEnxnKUmgF999ZVkz55d7t69q3Qo75WQkCChoaEyePBgKVWqlAAQFxcX8fHxkdWrV2dotG7dunXi4uIirq6ucuLECeMFTfQWUVFRsnr1avHx8REXFxcBIKVKlZLBgwdLaGioJCQkKB0iEQnXAGYqnU4Hd3d3ZM2aFQcPHjTL9S3Xrl2Dr68vTp48iZkzZ2LIkCFQqVQWuQbw6tWrqFSpEsaNG4fx48crHU6qiQjOnDljWB91/PhxODg4oGnTplCr1ejQoQNKliz5wfvExcVh2LBhWLBgAbp06YJffvkFOXPmzISfgGzN9evXERwcDI1Ggz179iApKQnu7u6G9XzVqlUzy/6OyKYpnIDanJ07dwoACQoKUjqUd3rx4oV89dVXAkC8vb3l8ePHFjkC6OvrK0WLFrX4shE3b96Un3/+WVq3bi2Ojo4CQNzc3GTixIly4sSJt07nXrhwQapXry5Zs2aVX375hVO+ZFQ6nU5OnDghEydOFDc3NwEgjo6O0rp1a/n555/l5s2bSodIRB/AEUAFmFNx6PfZsGEDPvvsM2TPnh0iAj8/P4sZAUwu+rx06VL07t1b6XCM5unTp9iyZQs0Gg02bdqEp0+fokSJEujQoQPUajWaNm2KoKAg9OvXD8WLF0dQUBCqV6+udNhkBRITE7Fnzx5oNBoEBwfjxo0byJUrF9q3bw+1Wo22bdsiV65cSodJRKnEBFAB58+fR7Vq1TBr1iwMGzZM6XDe6+bNm+jSpQsOHjyIpk2bIjQ01OxPtxARNGrUCNHR0Thx4oTVngeakJCAvXv3GqaKb968CUdHRyQmJqJx48YIDAxE0aJFlQ6TLNizZ8+wefPmFB84PvroI8PUbpMmTeDk5KR0mESUDkwAFdK/f38EBgbiypUryJs3r9LhvFdiYiIKFSqEqKgotGvXDitWrECBAgWUDuud/vjjD3Tq1Anbt29Hy5YtlQ4nU0RERECtVuP69esoUqSIIRls1qyZYd1g8eLFlQ6TLMCtW7cM6/l27dqFxMREuLm5GZI+Nzc3rucjsgJMABVirsWh36VcuXJwc3PD7t274eTkhMDAQDRu3FjpsN6QkJCAypUro3z58ti0aZPS4WSK5cuX48svv0SpUqUQFBSEKlWqcFE+pZoYadMREVkYhdYekohMmzZNHB0d5dKlS0qH8kHJm0Bu3bolTZo0ETs7O5k6dapotVqlQ0th/vz5YmdnJ2fPnlU6FJN7/vy59OzZUwCIv7+/xMTEvPW6yMjI95blSExMzOTISWmJiYnvLTsUGRmpdIhEZGIcAVRQbGwsKlSogHr16uG3335TOpz3erUMTFJSEqZMmYKpU6eiZcuW+PXXX1GoUCGlQ0RUVBTKli2Lzp0745dfflE6HJM6c+YMfHx8cPPmTfzvf/9Djx49UvW6Fy9eYPfu3YaF/Ldv30aePHng6ekJtVqNNm3awMXFxcTRkxKeP3+OrVu3QqPRICQkBFFRUShWrJhhA5GHh4dZb0ojIiNTOgO1deZeHDrZ28rAbN++XQoVKiSFCxeWnTt3KhTZvyyl6HNG6HQ6WbhwoWTNmlWqVasm58+fz9C9wsLCZNy4cVKtWrU3jua6c+eOESMnJdy5c0exoweJyLwxAVSYVquVjz/+WOrVq2fWnfG76gDevXtXmjdvLiqVSiZOnChJSUkKRCdy5coVcXJykilTpijSfmZ49uyZdO3aVQBIv379JDY21qj3v3LlisyfP188PDzE3t5eAEidOnVk2rRpcvbsWbP+90l6Op1Ozp49K9OmTZM6deoIALG3txcPDw+ZP3++XLlyRekQichMMAE0A8nFodetW6d0KO/0vkLQSUlJMmXKFLGzs5NmzZopMnLk4+MjRYsWfec6OEt34sQJcXV1FRcXF1m7dq3J23v06JGsXLlSPv30U8mePbsAkLJly8qwYcNkz549iiX69KakpCTZs2ePDBs2TMqWLSsAJHv27PLpp5/KypUr5dGjR0qHSERmiGsAzYS3tzciIiJw/vx5s1yHk5qj4Hbv3g0/Pz8kJSVh1apVaN26dabEdujQITRo0ADLli3DZ599liltZhYRwf/+9z8MHToUVapUQVBQEFxdXTM1hvj4eISGhhrWDd67dw/58uWDl5cX1Go1WrdujezZs2dqTLYuJiYG27Ztg0ajwcaNG/H48WMULlzYsJ6vefPmyJo1q9JhEpE5UzgBpZfOnTsn9vb2MnfuXKVDeavUHgV3//59ad26tahUKvn6669NvsNUp9NJ/fr1pUaNGlY3KvXkyRPp1KmTAJABAwZIXFyc0iGJVquVw4cPy5gxY6Ry5coCQLJmzSpeXl6yaNEiuXfvntIhWq179+7JokWLxMvLS7JmzSoApFKlSjJ69Gg5dOiQ2e3IJyLzxgTQjPTv319y585tllM2aTkLWKvVyrfffiv29vbSuHFjk54L+ttvvwkA2b59u8naUEJYWJiULl1acuXKJb///rvS4bzTxYsXZc6cOdKoUSOxs7MTlUol9evXlxkzZmRogwrpnT9/XmbMmCH169cXlUoldnZ20qhRI5k9e7ZcvHhR6fCIyIJxCtiMPHjwAK6urvD398d3332ndDgppGYK+HX79+9H165dERcXh5UrV6J9+/ZGjSkhIQGVKlVCxYoVERISYtR7K0VE8MMPP2DEiBFwc3NDYGAgypQpo3RYqfLw4UNs3LgRGo0G27ZtQ1xcHMqXL28oPl2vXj2rPZbPWLRaLY4cOYK//voLGo0GFy9ehLOzM1q3bg21Wg0vLy+zPoWHiCyIwgkovcZci0OnZQTwVQ8fPhRPT08BICNGjJCEhASjxWRtRZ8jIyOlY8eOAkCGDBkiL168UDqkdIuJiRGNRiP+/v5SoEABASAFCxYUf39/0Wg0Rt/BbMliY2MNf1cFCxYUAFKgQAHD35W1bmwiImVxBNDMJI+a1K1bF7///rvS4RikZwQwmU6nw7x58zBmzBjUrl0bgYGBKFGiRIbiiYyMhKurq9UUfT58+DC6dOmCZ8+eYfny5ejQoYPSIRmNVqvF4cOHDUeNcVSLo6VEZAaUzkDpTStXrhQAsn//fqVDMUjvCOCrDh06JCVLlpQ8efKIRqPJ0L2GDRsmOXLksPiiz1qtVmbPni0ODg5Sr149uXbtmtIhmZytrmu7ePGizJ49m+slicgsMAE0Q1qtVmrWrCl169Y1m+K7xkgARYwzzXnlyhVxdHSUb775JsPxKOnRo0eG6fGRI0cadXrcUrxtZ2vlypVlzJgxcvjwYYve2cod00RkzpgAmqnQ0FABIIGBgUqHIiLGSwBF9KVbvv/+e3F0dJTatWvL1atX0/T6zp07S7FixSx6bdS+ffukePHiki9fPgkJCVE6HLMQHR0t69evl169ekm+fPkEgBQpUkT69u0rISEhZlEG50Pi4uIkJCRE+vbtK0WKFBEAki9fPunVq5esX79eoqOjlQ6RiEhEmACaNW9vbylVqpTEx8crHYpRE8BkYWFhUqZMGcmVK5f88ccfqXrNwYMHBYAsX77cqLFkFq1WK9OnTxd7e3tp1KiRSUvkWLLExMT3nm7x+PFjpUM0ePz48XtPTTF1LUwiovRgAmjGzp8/L/b29jJnzhylQzFJAiiStmLHyUWf3dzcLLLo86tFsseOHcvEIJU+dL5tWkeQjeHq1as8N5mILBp3AZu5L7/8EmvWrMHly5eRL18+xeLIyC7gDxERLFiwAEOHDkXlypXfedzZb7/9Bh8fH+zYsQMtWrQwehym9OoxeatXr0arVq2UDsli3blzBxs2bIBGo8HOnTuRkJCAatWqGXbQuru7Q6VSGbVNEcHx48cNO5nPnDkDJycntGjRAmq1Gt7e3ihatKhR2yQiMiUmgGbOXIpDmzIBTBYeHg4fHx/cu3cPixYtgq+vr+G5Fy9eoHLlyhZX9Fmr1WLatGmYPHkymjZtitWrV6NIkSJKh2U1nj9/jq1bt0Kj0SAkJARRUVEoVqyY4UzcZs2awcnJKV33TkhIwK5duwxnIN++fRt58uSBp6cn1Go12rRpAxcXFyP/REREmUTJ4UdKnenTp4uDg4OiJTJMNQX8umfPnknXrl0FgPTt29dQMHjevHliZ2cnERERJo/BWO7evSvNmzcXlUolEydOtMhpa0uSkJAgoaGhMnjwYClVqpQAEBcXF/Hx8ZHVq1dLVFTUB+8RFRUlq1evFh8fH3FxcREAUqpUKRk8eLCEhoba5E5tIrJOHAG0AHFxcahQoQJq166NP/74Q5EYMmMEMJmIYPHixRg0aBDKly+PhQsXol27dvDx8cGCBQtM3r4x7NixA927d4dKpcLq1avRvHlzpUOyKSKCM2fOGKZsjx8/DgcHBzRt2tQwVZxcjPzGjRuG6/bs2YOkpCS4u7sbrqtWrZrRp5SJiJTGBNBCrFq1Cj169MC+ffvQqFGjTG8/MxPAZGfOnIGPjw8uX74MBwcHXLt2DYUKFcq09tMjKSkJkydPxrRp09CyZUv8+uuvZh+zLbh16xaCg4Oh0WgQGhqKpKQkFCpUCCqVCvfu3YOjoyOaNWsGtVqNDh06oHjx4kqHTERkUnZKB0Cp4+fnB3d3d3z11VewlZy9WrVqWLduHXQ6HeLj4zFmzBjExsYqHdY73b59Gy1atMD06dPxzTffYMuWLUz+zEShQoVQvnx5lC9fHoULFwagP07w8ePHbzzP3xkR2QImgBbCzs4Oc+bMwdGjR7Fu3Tqlw8k0U6dORZEiRbBgwQKsW7cOtWvXRkREhNJhvWHLli1wc3PD5cuXsWvXLowdOxZ2dvzfS0nPnj3DunXr4OfnhwIFCqBVq1bQaDTo2LEjtm/fjujoaERHR2P79u3o2LEjNBoNWrVqhQIFCsDPzw/r1q3Ds2fPlP4xiIhMQ8H1h5QOHTp0kJIlS2b6qQiZtQnkVQcOHEhR9DkiIkKqVKkizs7OsnTpUrOotZaQkCCjRo0SANKuXTt58OCB0iHZtJs3b8rPP/8srVu3FkdHRwEgbm5uMnHiRDlx4sR7/83odDo5ceKETJw4Udzc3ASAODo6SuvWreXnn39m0W4isipcA2hhLly4gKpVq2LGjBkYPnx4prWb2WsARQQNGjRAfHw8jh8/bhhNi42NxaBBg7BkyRL06NED//3vf5EjR45Miel1N2/eRJcuXXDkyBFMnz4dw4cP56hfJpMPbPbw9vZGqVKl0nXva9euGeoNcnMIEVkdZfNPSo///Oc/kitXLnn48GGmtZnZI4BBQUECQHbu3PnW51etWiXZs2eXChUqyKlTpzItrmTBwcGSN29e+eijj+TAgQOZ3r4tS0xMNJR7KV26tACQHDlySOfOnWX16tUSGRlp9DYjIyNl9erV0rlzZ8mRI4cAkNKlSxvKw/BUFyKyNEwALdCDBw/ExcVFBg0alGltZmYCGB8fL6VLlxZPT8/3Xvf3339LjRo1JGvWrPLLL79kypTwixcvZNiwYQJAOnToYFZn0lqzZ8+eyW+//Sbdu3eXPHnyCAApVqyY9O/fXzZv3pyp52XHx8fL5s2b5YsvvpCiRYsKAMmTJ490795dfvvtN3n27FmmxUJElF5MAC3Ut99+m6nFoTMzAZw7d67Y29unquhzbGysfPHFFwJAunTpIk+fPjVZXP/884/UqVNHHB0dZd68eWaxBtGa3blzRxYsWCDt2rUTJycnASBVq1aVsWPHSlhYmFn8/Wu1Wjl69KiMHTtWqlatKgDEyclJ2rVrJwsWLJA7d+4oHSIR0VtxDaCFiouLQ8WKFeHu7o7169ebvL3MWgMYGRmJsmXLokuXLvjf//6X6tcFBQXh888/R6FChRAUFISPP/7YqHH9+eef8Pf3R+7cubFu3TrUqVPHqPcn/Xq+c+fOGdbzHT16FHZ2dmjcuLFh3V2ZMmWUDvO9rl69aoh/37590Ol0qFOnjiH+ypUrc90gEZkHhRNQyoBVq1YJANm7d6/J28qsEcAhQ4ZIjhw55N69e2l+7aVLl6RmzZri5OQkP/30k1FGiOLj42XgwIECQD755JNUHSdGqZeUlCR79+6VYcOGSdmyZQWAZM+eXT755BNZsWKFPHr0SOkQ0+3Ro0eyYsUK+eSTTyR79uwCQMqWLSvDhg2TvXv38mhAIlIUE0ALptVqxd3dXWrXri1ardakbWVGAnjp0iVxdHSUqVOnpvseryZsnTp1ylDCdvnyZXF3dxcnJyf58ccfzWLK0RpER0fLn3/+KZ999pnkz59fAEihQoWkT58+snHjxkwvcZQZ4uLiZOPGjdKnTx8pVKiQAJD8+fPLZ599Jn/++adER0crHSIR2RhOAVu4PXv2wMPDA2vXrkWXLl1M1k5mTAF37twZhw8fxt9//41s2bJl6F7r16+Hv78/8ubNayggnRa//fYbPv/8cxQoUABBQUGoWbNmhuKxdffv38fGjRuh0Wiwfft2xMfHo1KlSoap0Tp16thMCR2dToejR48aporPnz+PrFmzolWrVlCr1fDy8uJpJERkekpnoJRxarXa5MWhTT0CmFz0ecWKFUa759WrVw2bNubPn5+qEby4uDjp37+/ABBfX1+TbiqxdhcuXJCZM2dKgwYNRKVSiZ2dnTRq1Ehmz56daZuXLMHFixdl9uzZ0qhRI7GzsxOVSiUNGjSQmTNnyoULF5QOj4isFEcArcDff/+NKlWq4Ntvv8WIESNM0oYpRwDlZdHnFy9e4NixY0YdCUpISMCYMWMwb948dOjQAcuWLUPevHnfeu3Fixfh4+ODCxcu4Pvvv0ffvn25YD8NtFotjhw5YhjZ+vvvv+Hs7IzWrVsbRrYKFCigdJhm7eHDh4aR0m3btiEuLg4VKlQwjJTWrVsX9vb2SodJRNZA4QSUjOTLL780aXFoU44Arlu37r1Fn40hODhY8uTJIyVKlJCDBw++8XxyYeny5ctLeHi4yeKwNrGxsRIcHCwBAQFSsGBBASAFChQQf39/0Wg0EhMTo3SIFismJkY0Go34+/tLgQIFBIAULFhQAgICJDg4WGJjY5UOkYgsGBNAK/HgwQPJmTOnDBw40CT3N1UCmFz02cvLy+j3ft3169elQYMG4uDgILNmzRKtVisxMTESEBAgAKR79+7y/Plzk8dh6R4+fCjLli2Tjh07SrZs2QSAlC9fXkaMGCH79+/n7lYTSEpKkv3798uIESOkfPnyAkCyZcsmHTt2lGXLlmXqqUBEZB04BWxFZs6ciXHjxiEiIgLly5c36r1NNQU8d+5cjBo1CmfOnEGlSpWMeu+3SUxMxPjx4zFz5kw0adIEDx8+xLVr1/DTTz+hd+/enPJ9h8uXLxumdg8cOAARQb169QxTkxUrVlQ6RJty4cIFw+/j8OHDUKlUaNiwoeH34erqqnSIRGTmmABaEVMWhzZFAvj48WO4urqmueizMXz11VeYN28eHBwcsGTJEvTs2TNT2zd3Op0OYWFhhiTj3LlzyJIli2Gnqre3N3eqmol79+6l2GH94sULVK5c2ZAM1q5d22Z2WBNR6jEBtDKrV69G9+7dsWfPHjRp0sRo9zVFAjh06FAsWbIEly9fRsGCBY123/eJiYnBf/7zH6xcuRK+vr64desWDh8+jClTpmD06NE2/UYZHx+P0NBQaDQabNiwAXfv3kW+fPng5eUFtVqN1q1bI3v27EqHSe8RExODbdu2QaPRYOPGjXj8+DGKFCkCb29vqNVqNG/eHFmzZlU6TCIyA0wArYxOp0PdunWhUqlw+PBhoyU0xk4AL1++jMqVK2PSpEn4+uuvjXLPDzlz5gx8fHxw8+ZN/O9//0OPHj2QlJSEyZMnY9q0aWjVqhV+/fXXTEtGzUFkZCRCQkKg0WiwZcsWxMTEoGzZsobRowYNGsDBwUHpMCkdkpKScPDgQcMo7pUrV5A9e3a0bdsWarUanp6e79wRT0TWjwmgFUouDr1mzRp07drVKPc0dgLYqVMnHDlyxChFnz9ERLBkyRIMHDgQ5cqVQ1BQ0Btr1rZv347u3bvD3t4ea9asgYeHh0ljUtI///yT4rxarVbL82qtnLzlnGV7e/sU5yyXLl1a6TCJKDMpsvWETM7YxaGNuQt4//79AkBWrlxplPu9z7Nnz8TPz08ASN++fd9bOuPOnTvSrFkzsbOzk0mTJlnNbladTidhYWEybtw4qVatmgAQJycnadeunSxYsEBu376tdIiUyW7fvi0LFiyQdu3aiZOTkwCQatWqybhx4yQsLIzHHhLZAI4AWqmLFy+iSpUqmDZtGkaOHJnh+xlrBFBEUL9+fSQkJBi96PPrwsPD4ePjg7t372LRokWpOipPq9Vi2rRpmDx5Mjw8PLBq1SoUKVLEZDGaSkJCAnbt2gWNRoPg4GDcvn0befLkgaenJ9RqNdq0aQMXFxelwyQz8Pz5c2zduhUajQYhISGIiopCsWLF0KFDB6jVajRr1gxOTk5Kh0lExqZwAkomNGDAAMmZM6dRaoQZawQwMDBQAEhoaGiG7/UuOp1O/vvf/0qWLFnEzc0tXceO7dq1S4oUKSIFCxaUbdu2mSBK44uKipLVq1eLj4+PuLi4CAApVaqUDB48WEJDQyUhIUHpEMnMJSQkSGhoqAwePFhKliwpAMTFxUV8fHxk9erVEhUVpXSIRGQkTACtWHJx6AEDBmT4XsZIAOPj46VUqVLi7e2d4Xje5cmTJ9K5c2cBIF9++WWGpsDv378vrVu3FpVKJWPHjpXExEQjRmoc169flx9++EFatGghDg4OAkDc3d1lypQpcurUKU7lUbrpdDoJDw+XyZMnS82aNQWAODg4SIsWLeSHH36Q69evKx0iEWUAE0ArN3PmTHFwcMjwofLGSADnzJkj9vb2cu7cuQzd513CwsKkTJkykjNnTvntt9+Mck+tVivTp08Xe3t7ady4sdy6dcso900vnU4nJ06ckIkTJ4qbm5sAEEdHR2nVqpX89NNPcuPGDUXjI+t148YN+emnn6RVq1bi6OgoAMTNzU0mTpwoJ06c4IcNIgvDNYBWLj4+HhUqVEDNmjXx559/pvs+GV0DmFz0uWvXrvjvf/+b7jjeRkTw448/Yvjw4ahRowbWrVuHMmXKGLWN/fv3o0uXLnjx4gVWrlyJdu3aGfX+75OYmIg9e/YY1vPduHEDOXPmRPv27aFWq9GuXTvkypUr0+Ihevr0KTZv3gyNRoNNmzbh2bNnKFGihGHdYNOmTeHo6Kh0mET0PgonoJQJVq9eLQBk9+7d6b5HRkcABw8eLC4uLnL//v103+NtIiMjpWPHjgJAhgwZIi9evDDq/V/18OFDad++vQCQkSNHmnRN3dOnTyUwMFC6du0quXLlEgDy0UcfyZdffinbtm0z6c9JlBYvXryQbdu2yZdffikfffSRAJBcuXJJ165dJTAwUJ4+fap0iET0FhwBtAE6nQ716tWDiODIkSPp2nmbkRHAS5cuoXLlypgyZQrGjBmT5te/y5EjR+Dr64unT59i+fLlUKvVRrv3u+h0OsybNw9jxoxBnTp1sHbtWpQoUcIo97516xaCg4MRHByM0NBQJCYmokaNGoY6bR9//DHr85FZExGcPHnSUG/w1KlTcHR0RPPmzdGhQwd06NABxYsXVzpMIgILQduMvXv3omnTpli9ejX8/PzS/PqMJICffvopjh49iosXL8LZ2TnNr3+diGDevHkYPXo0atWqhcDAQJQsWTLD902LQ4cOoUuXLnj+/DlWrFgBb2/vNN9DRHD27FloNBr89ddfOH78OOzt7dG0aVOo1Wp06NABpUqVMn7wRJnk2rVrCA4OhkajwZ49e6DVauHu7o6OHTtCrVajatWq/FBDpBTlBh8ps3Xs2FFKlCjx3mLI75LeKeB9+/YZtejzo0ePxMvLSwDIiBEjFC1t8vjxY+nQoYMAkGHDhqVqWjYxMVF27dolQ4YMkdKlSwsAyZEjh3Tu3FlWrVolkZGRmRA5UeaLjIyUVatWSefOnSVHjhwCQEqXLi1DhgyRXbt2meUueyJrxhFAG5JcHHrq1KkYNWpUml6bnhFAEUG9evWQlJSEsLCwDBd9PnDgALp06YK4uDisWLECnp6eGbqfMYgIfvjhB4wYMQIff/wxAgMD3zhSKzo6OkWh3cjISBQtWjRFod0sWbIo9BMQZb4XL16kKFR+584d5M2bN0Wh8hw5cigdJpFVYwJoYwYNGoQVK1bg8uXLKFCgQKpfl54EcN26dejSpQtCQ0PRrFmz9IQLQL/ubtasWRg3bhzq16+PtWvXmt06orCwMPj6+iIyMhJLly5F/fr1sWHDBmg0GuzcuRMvXrxA1apVDev53N3dTXoKCpGl0Ol0OH78uGHd4NmzZ5ElSxa0aNECarUa3t7eFnkaD5G5YwJoYx49eoSyZcuiR48e+Omnn1L9urQmgPHx8ahUqRKqVauG4ODg9IaLBw8eoGfPnti6dSvGjBmDKVOmwMHBId33MxV5ucHm888/R0REBADAzs4OjRs3NiR9xi5NQ2SNrl69akgG9+3bB51Oh7p16xr+P6pUqRLXDRIZARNAGzRr1ix8/fXXiIiIQIUKFVL1mrQmgHPmzMHo0aNx9uxZVKxYMV1x7tmzB127dkVSUhJ+/fVXtGnTJl33MRWtVouDBw8a3qwuX76M7Nmzw9XVFWfPnkWVKlXwxx9/wNXVVelQiSzS48ePERISAo1Gg61btyImJgaurq6GZLBBgwawt7dXOkwii8Q5KBs0aNAgFC9ePM3rAFPr8ePHmDp1Kvr165eu5E+r1eKbb75B8+bNUaFCBYSHh5tN8hcbG4u//voLvXv3RuHChdGkSROsWrUKzZo1w8aNG/Ho0SOEh4cjLCwMsbGxqFmzJoKCgpQOm8gi5cuXDz179sQff/yBR48eYePGjWjWrBlWrVqFJk2aoHDhwujduzf++usvxMbGKh0ukWVRaPMJKWzNmjXvLQ4dFRUlxYsXl2zZskm2bNlEpVKJg4OD4c9du3Z9570HDRqU7qLPd+/elRYtWohKpZIJEyZIUlJSmu9hbPfv35fFixeLt7e3ZM2aVQBIpUqVZPTo0XLo0CHRarVvfd3Tp0+lS5cuAkD69euXrt3XRPQmrVYrhw4dktGjR0ulSpUEgGTNmlW8vb1l8eLFRi84T2SNmADaKK1WK7Vr1xZ3d3dJSkqSoKAgcXV1lW+//VZERBISEqRYsWIC4K1fX375peFedevWlTZt2sjZs2fl4sWL4uDgINOnT09zTDt27JBChQpJ4cKFZefOnUb7WdPjwoULMnPmTGnQoIGoVCpRqVTSqFEjmT17tly8eDHV99HpdLJw4ULJmjWrVK9ePcNnMhPRmy5evCizZ8+WRo0aGf5/bdCggcycOZP/zxG9AxNAG7Z3715DLa7kxM7Pz8/w/MKFC9+a/Dk6OsqtW7cM1yUfDK9SqaRUqVJStGjRNI12JSUlyfjx40WlUknLli3l3r17Rv05U0Or1cqBAwdk5MiRUqFCBQEgzs7OolarZenSpfLgwYMM3f/UqVNSoUIFyZ49u6xatcpIURPR6x48eCBLly4VtVotzs7OAkAqVKggI0eOlAMHDrxzxJ7I1jABtFGXL1+WTz/99I3krkOHDoZrXrx4IcWKFROVSmV43t7eXgYMGGC4JjEx8a0J4pQpUyQmJuaDcdy+fVuaNm0qdnZ2MnXq1Eyd8o2NjZXg4GAJCAiQggULCgApUKCA+Pv7i0ajSVX8afH8+XPp0aOHAJCAgACj35+IUoqJiRGNRiP+/v5SoEABASAFCxaUgIAACQ4O5rIMsmlMAG3Qb7/9Jg4ODuLg4PBG8ubh4ZHi2tdHAV8f/Xvy5MlbRwlVKpUUKlRI7ty58844Nm/eLPnz55eiRYvKnj17TPbzvurhw4eybNky6dixo2TLlk0ASPny5WXEiBGyf/9+kyegOp1Oli5dKs7OzlKlShWJiIgwaXtEpJeUlCT79u2TESNGSPny5QWAZMuWTTp27CjLli2Thw8fKh0iUaZiAmiD9u7dKy4uLmJvb/9G4ubu7p7i2uRRwOSk7tXRPxH9CN67EsDq1avL8ePHZd++fSlek5iYKKNHjxYA0rZt2wxPr37IpUuXZM6cOdK4cWOxs7MTlUol9evXlxkzZsj58+dN2va7RERESOXKlcXZ2VmWLVumSAxEtuz8+fMyY8YMqVevnqhUKrGzs5PGjRvLnDlz5NKlS0qHR2RyTABt1K1bt6Rly5ZvJG7ly5d/49qFC38RFxdIgQIquX37vIjoDM9dvHgxxevt7e3Fzs5OJkyYIPHx8VKhQgVxcHCQEydOiIjIjRs3pGHDhmJvby8zZswwyXocrVYrhw8fljFjxkjlypUFgGTJkkW8vLxk0aJFcvfuXaO3mR4xMTHi7+8vAKRnz57y/PlzpUMiskl3796VhQsXiqenp2TJkkUASOXKlWXMmDFy+PBhC1k3qBORpyLy8OV33fsvJ5vHBNCG6XQ6+d///idZs2YVOzs7ASCFChV6+ewZERkjIs1Fp8sp+n8qyV85RaS5iIyR8+d/SzHq5+rqKkePHhURkcDAQAEgdnZ2UqpUKVm3bp3kzZtXPvroIzlw4IBRf5a4uDgJCQmRvn37SpEiRQSA5MuXT3r16iXr16+X6Ohoo7ZnTL/++qtkz55dKlasKKdPn1Y6HCKb9vz5c/njjz+kZ8+ekjdvXgEgRYoUkb59+0pISIjExcUpHeIr/u2n9f3y2/tp/XVEKTEBJLl8+bLUqVPn5SYQexFpKPp/Gg4iopKUnUryl+rl85B9+yDt2kGGDBliWFSdlJQk5cqVM2wgSf7u5eUljx49Mkrcjx8/lpUrV8qnn34qOXLkEABStmxZGTZsmOzZs0cSExON0k5mOH/+vFSvXl2yZs0qCxcuFJ2On96JlJaYmCi7d++WoUOHSpkyZQSA5MiRQz799FNZuXKlPH78WKHINkpa+2n99SFKBEtmikfBEQBAq32AY8caoG7dK9AfEKNLw2sB/WlMfgB+BJAXa9euhZ+f3xvX/vLLL+jbt2+64/znn39SnBOq1WpRp04dw9FQlStXtthzQuPi4jB06FD88ssv6NKlC3755RfkzJlT6bCICPrzviMiIgz9T1hYGOzt7VOc9126dGkTR/EYwEAAa5HWfvrf6//tp8m2MQEkAKcBtIK+c9Fm4D72APJBq92KihU748qVK3j9n5eTkxOOHTuGatWqpeqOIoLjx49Do9EgODgYp0+fhpOTE1q0aAG1Wg1vb28ULVo0AzGbn8DAQPTt2xeFChVCUFAQPv74Y6VDIqLX3LlzB8HBwdBoNAgNDUVCQgKqV6+ODh06QK1Ww93d3cgfRo3bTwM7AKSuHybrxATQ5p0G0BhADDLWqSSzR0KCI9zd43H2bMpnHBwckJSUhNKlS+Pq1avvvENCQgJ2796Nv/76C8HBwbh9+zZy584NT09PqNVqtG3bFi4uLkaI1XxdvnwZvr6+OHv2LObPn4/+/ftb7MgmkbV7/vw5tmzZAo1Gg5CQEDx58gTFihVDhw4d0LFjR3h4eMDJySkDLRi/nwayA9gPJoG2iwmgTXsMoDIy/okypaQk4PFjoFIlICoKyJs3L2rUqIG4uDgcPnwYAHDlyhWUKVPG8JonT55g8+bN0Gg02Lx5M549e4aSJUsaplYaN24MR0dHo8VoCV68eIHhw4fjp59+QqdOnbB48WLkypVL6bCI6D0SExOxb98+w1Tx9evXkTNnTrRr1w5qtRrt2rVD7ty503BH0/TT/44Engeng20TE0Cb5gcgCMbtVPR0OhXu3/eAnd1aFCxYECNGjMDcuXMBAHZ2dpgzZw4+/fRTwxTK7t27kZSUhJo1axqSvurVq3PUC8Aff/yBgIAA5M2bF+vWrUPt2rWVDomIUkFEcPr0aUMyeOLECTg4OMDDwwNqtRodOnRAiRIlPnCX9/fTqekiJ04EJk162zP2AHwBrP7wTcjqMAG0WSEAvEzeik63AV9+GYIFCxakeDx79uyIiYmBo6Njis7wo48+MnlMluiff/6Br68vwsPDMXv2bAwaNIjJMZGFuXnzpuFD765du5CUlISPP/7Y8KG3Ro0ar/1//eF++uWkyhuSkoCePYHbt4F9+4A6dd53lxAA7dP2w5DFYwJosxoBOIS07SJLGxF7XLyYFxUrPnzr8wsXLoSPjw+nNVMpISEBo0ePxvz586FWq7F06VLkzcupGyJL9PTpU8Oyl02bNhmWvSRvImnSpAkcHZshvf30oEHAjz8Cv/wCvL/wgj2A+gD2pevnIMtlp3QApISzAA7gfZ3Kvn36qYW1a998buVK/XNhYe9vRaXSokKFh6hc+e3PZ8mShclfGjg5OWHevHnQaDTYu3cvPv74Y8OaSiKyLLly5UKXLl2wdu1aPHz4ENu2bYOXlxf+/PNPtGzZEk2b5sOH+ul3+fVXffIXEPCh5A/QTy3vBxCR5nbIsnEE0CZ9DWA2gKT3XlWzJpAtG7B/f8rHk6cSjh79cEuJicDcuXYYM0bfidnrCwZCq9WiY8eO+PPPP9MYOwHA9evX0bVrV4SFheHbb7/FsGHDYGfHz3NElk5EcPLkSURHD0KDBgfg4JC21588CTRsCFStqv8gnyVLal7lAGAkgGlpD5gsVhr/aZF1OIIPJX+Afgqhd28gPBxwc9M/Fham/1qxInUtOTqqMGqUBzp3Xohz587h3LlziIiIwKlTp5A/f/70/gA2r2TJktizZw/GjRuHESNGYPfu3Vi+fDn/ToksnEqlQs2aNQGkKnNL4dEj4P/+D8iRA/jjj9Qmf4B+FPBImtsjy8YRQJsjAHIDePbBK1+8AEqUADp0ABYt0j/WsyewZQtw82ZaOpecAJ4A4KYFU9i0aRN69uwJZ2dnrF27Fo0aNVI6JCLKkNT308m0WqBNG2D3bmD7dqBZs7S2yX7a1nDOyOY8R2o7lSxZgH79gDVrgCdPgIcPgaAg4PPP05L84WV70WkPlVKlffv2CA8PR6lSpeDh4YFvv/0WOp3pNvcQkamlvp9ONnIksHMnMHNmepI/gP207eEIoM15BKBAqq++excoWRKYMQOIjwcmTACuXtWPDKa93XxpfRGlQVJSEiZNmoTp06ejVatW+PXXX1GwYEGlwyKiNEtbP712LeDnB/j6AoGBGW2X/bStYAJoc54BSNvO227dgCNHgIQEwN0dSN++jWcArPv4NnOxfft2dOvWDQ4ODlizZg08PDyUDomI0iT1/fTp00D9+kCZMvqagNmzZ7Rd9tO2ggmgzUn72pKjR4G6dfX/vWMH0KJFGluUnLh48QgiIlJuAqlfvz6WLFmStptRqty9exfdunXDnj17MHHiRIwdO9awA5uIzF3q+umoKP2H8hs3gOXLAVfXt19XoABQtuyH2uQaQFvDBNAmtQAQmqZXlC4NODsD586lrSWdDti1C2jZUv9nBwcHiAi0Wi0++eQT/PHHH2m7IaWaVqvF1KlTMXnyZDRr1gyrV69G4cKFlQ6LiFLlw/307t2pW+/Xq5c+QXw3FYDmAHakNjiyAtwEYpPqIi0VgE6fBq5dAwYMSHtLWm3Ko4qSkpKg1erPtOzYsWPab0ipZm9vj4kTJ2Lnzp04d+4catSogR072METWYYP99MeHoDIh7/en/wB+tNA6holarIcTABtkh9SUwfwyhUgNFRfSb5IEeCzz9LekqOjfhfx28TExCAqKirtN6U0adasGcLDw1GjRg20bt0a48ePR1LSh3//RKSk1PXTxpH0sj2yJUwAbVJVAA3xoV//N98ArVoB0dHAb7/pTwVJG3uINETz5m8OHebIkQP9+/dHgQIF0Lx5c3z//fe4du1aWhugVCpUqBC2bNmCqVOnYvr06WjRogVu376tdFhE9E6p66czzh76s+GrmLgdMjdcA2izQgB4ZUo7Iu0wZswYzJw5E4C+0v28efPg4+ODDRs2QKPRYOfOnUhISED16tWhVquhVqtRs2ZNqFRckGxs+/btQ9euXfHixQv8+uuvaNu2rdIhEdFbZV4/DbTPhHbInDABtGl+AIKgPwbI2OwB+AJYDUB/vuW0adMwfvx4AMCVK1dQpkwZw9XPnz/Hli1boNFoEBISgidPnqB48eLo0KED1Go1PDw84OTkZII4bdOjR4/Qs2dPbN68GaNGjcI333wDR0dHpcMiojdkXj9NtoUJoE17DKDyy+/G7FzsoS8meh5A3hTP/Pe//8WJEyewePHid746MTER+/btg0ajgUajwfXr15EzZ060a9cOarUa7du3R65caatlSG/S6XSYO3cuxowZg7p16yIwMBAfffSR0mERUQqZ30+TbWACaPPOQL/+IwbG6VzsAWQHsB9AtQzfTURw+vRpQzJ44sQJODg4wMPDwzBVzKQlYw4dOgRfX1/ExMRg+fLl8Pb2VjokIkrBvPtpskxMAAn6zqUlMv4JM/kT5Q6YqlO5efMmgoODodFosGvXLiQlJaFmzZqGqeIaNWpw3WA6REZGonfv3ggODsawYcPw7bffcsqdyKxYTj9NloEJIL0UCWAggDXQdxBp6WCSr+8G4Adk1nTC06dPsXnzZmg0GmzatAnPnj1DyZIlDSODjRs35rq2NBARfPfddxg1ahQ+/vhjBAYGonTp0kqHRUQGltdPk/liAkiv2QTgW+inBhyg7zDe9k9EBX2HkgT91MQYKLmLLCEhAXv27DFMFd+6dQu5c+eGp6cn1Go12rRpg5w5cyoWnyU5evQofH19ERUVhWXLluH//u//lA6JiFKwzH6azAsTQHqHCOg/ZR4BEIaUZ1LmBFAb+srxfjC3+lEigpMnTxqSwVOnTsHJyQnNmzeHWq1Ghw4dULRoUaXDNGtPnjxBQEAA1q9fj4EDB2L27NnIkiWL0mERUQqW20+T8pgAUioIgGgACQCcAOSAJR0Yfu3aNcO6wT179kCr1aJ27dqGqeIqVapw3eBbiAh+/vlnfPXVV6hWrRrWrVuHsh8+UZ6IFGHZ/TRlPiaAZFOioqKwadMmaDQabN68GdHR0ShTpowhGWzYsCEcHFJ/TrItOHHiBHx8fPDgwQMsXrwYPj4+SodEREQZxASQbNaLFy+wa9cuaDQaBAcH486dO8ibNy+8vLygVqvRunVr5MiRQ+kwzcKzZ8/Qt29frFu3Dl988QXmz5+PrFmzKh0WERGlExNAIuiLIh8/fhwajQZ//fUXIiIikCVLFrRs2RJqtRre3t4oXLiw0mEqSkSwaNEiDBo0CBUrVkRQUBDKly+vdFhERJQOTACJ3uLKlSuGdYP79u2DiKBu3bqGqeKKFSva7LrB06dPo3Pnzrh9+zZ++eUXdOvWTemQiIgojZgAEn3A48ePERISgr/++gtbt25FbGwsypUrZ0gG69evD3t7e6XDzFTR0dHo378/Vq1ahYCAAPzwww/Ili2b0mEREVEqMQEkSoO4uDjs3LkTGo0GGzZswP3791GgQAHDusFWrVrZTCIkIli2bBkGDBiAMmXKICgoCJUrV1Y6LCIiSgUmgETppNPpcOTIEUO9wQsXLsDZ2RmtWrWCWq2Gl5cXChYsqHSYJhcREQEfHx9cu3YNP//8Mz777DOlQyIiog9gAkhkJBcvXjQkgwcPHgQANGjQwDBVbM0bJmJiYjBw4EAsW7YMPXv2xM8//8wd1EREZowJIJEJPHjwABs3boRGo8H27dsRFxeHihUrGpLBunXrws7OTukwje7XX39F//798dFHHyEoKAjVqvGweSIic8QEkMjEYmNjsX37dsO6wUePHqFQoULw9vaGWq1GixYt4OzsrHSYRnPhwgX4+Pjg0qVL+PHHHxEQEGCzO6aJiMwVE0CiTKTVanHo0CHDVPGlS5eQLVs2tGnTBmq1Gp6ensifP7/SYWZYXFwchgwZgoULF6Jr16745Zdf4OLionRYRET0EhNAIoWICC5cuGBIBg8fPgw7Ozs0atTIMFVs6WfvBgYGok+fPihSpAiCgoLg5uamdEhERAQmgERm4969e9iwYQM0Gg127NiBFy9eoEqVKoZksFatWha5bvDSpUvw9fXFuXPnMG/ePPTv359TwkRECmMCSGSGoqOjsW3bNmg0GmzcuBGRkZEoUqQIOnToALVajebNmyNLlixKh5lq8fHxGD58OH7++Wd06tQJixcvRq5cuZQOi4jIZjEBJDJzSUlJ2L9/v+FouqtXryJHjhxo27atYd1gnjx5lA4zVX7//XcEBAQgf/78WLduHWrVqqV0SERENokJIJEFERFERERAo9Hgr7/+wrFjx2Bvb48mTZoYpopLlSqldJjvdfXqVfj6+uLUqVOYPXs2Bg0axClhIqJMxgSQyILdvn0bwcHBCA4ORmhoKBISElC9enVDMlizZk2zTK4SEhIwatQofPfdd+jYsSOWLl1qMaOYRETWgAkgkZV49uwZtmzZAo1Gg02bNuHJkycoXry4Yd2gh4cHnJyclA4zBY1Gg88++wy5cuXCunXrULduXaVDIiKyCUwAiaxQYmIi9u7daygxc+PGDeTMmRPt2rWDWq1G+/btzWYTxvXr19GlSxccO3YMM2bMwNChQy1ytzMRkSVhAkhk5UQEp06dMiSDJ0+ehIODAzw8PAxTxR999JGiMSYmJmLs2LGYPXs2PD09sWLFCuTLl0/RmIiIrBkTQCIbc+PGDcOO4t27dyMpKQk1a9Y0TBXXqFFDsXWDISEh6NWrF5ydnREYGIiGDRsqEgcRkbVjAkhkw548eYLNmzdDo9Fg8+bNePbsGUqWLGkYGWzcuDEcHR0zNaZbt26ha9euOHToEL755huMGjWKU8JEREbGBJCIAOh35u7evRsajQbBwcG4desWcufODU9PT6jVarRp0wY5c+bMlFiSkpIwYcIEfPvtt2jTpg1WrlyJggULZkrbRES2gAkgEb1BRHDixAnDusHTp0/DyckJzZs3h1qtRocOHVC0aFGTx7F161b06NEDDg4OWLt2LZo2bWryNomIbAETQCL6oH/++cewbnDv3r3QarWoXbu2Yaq4SpUqJls3eOfOHXTr1g179+7FxIkTMXbsWNjb25ukLSIiW8EEkIjSJDIyEps2bYJGo8GWLVsQHR2NMmXKGJLBhg0bwsHBwahtarVafPPNN5gyZQqaN2+OVatWoXDhwhm4owB4DiABgBMAFwDmVzCbiMhUmAASUbrFx8dj165dhnWDd+/eRd68eeHl5QW1Wo3WrVsjR44cRmsvNDQU3bp1g4hg9erVaNGiRRpefRbAGgBHABwD8OyV53ICqAWgLgA/AFWNFTIRkVliAkhERqHT6XDs2DHDusGIiAhkyZIFLVu2hFqthre3dwZH7fTu37+P7t27Y+fOnRg3bhwmTJjwgRHHEADfAjgAwAGAFvoRwNepANgDSALQEMDXANpnOF4iInPEBJCITOLKlSuGZHD//v0QEdStW9cwVVyxYsV0rxvUarWYMWMGJkyYgEaNGmHt2rVv2ZTyGMBAAGsB2AHQpaGF5Ov9APwIIG+64iQiMldMAInI5B49eoSQkBBoNBps3boVsbGxKFeunCEZrF+/fro2duzduxddu3ZFQkICfv31V7Rt2/blM6cBtII+CdRmIHJ7APkA7ABQLQP3ISIyL0wAiShTxcXFYefOnYZ1gw8ePECBAgUM6wZbtWqFbNmypfp+Dx8+RM+ePbFlyxaMHj0aU6Z0gqNjcwAxyFjyl8weQHYA+8EkkIisBRNAIlKMTqfDkSNHDFPFFy5cgLOzM1q1agW1Wg0vL69UFYDW6XSYPXs25s79Ghcu2CNPHh1UKmMkf8mSRwLPg9PBRGQNmAASkdm4ePGiIRk8ePAgAKBBgwaGqeLy5cu/9/UPH7ZCnjw7kNYqNKVKAR4ewPLl77vKHoAvgNVpuzkRkRliAkhEZunBgwfYuHEjNBoNtm3bhvj4eFSsWNGQDNatW/e1M4JDAHilq63UJYCvtsPdwURk2ZgAEpHZiY2NTbEOMDY2Ftu3b4dGo8GGDRvw6NEjFCpUCN7e3lCr1WjRogWcnVsBOIS07fbVS30CaA+gPoB9aW6DiMic2H34EiIi05k0aRJUKhVOnDiBTp06IU+ePChbtiyOHTuGLl26oFSpUsiXLx8GDx6MuLg4HDlyBPv27UP37t2xe/dueHt7I1u2bNi16wD699chf34gXz7gk0+AO3dStpWYCIwcCRQuDGTLBjRqBBw9+va4zp4F1GogTx4ga1bAzQ1YsUIL/WaQCADA7t27oVKpsGbNGowaNQpFihRBjhw54O3tjfv37+P58+fo27cv8ufPj/z586N3796Ijo425V8nEVGqMAEkIrPwySefwNXVFb/99hsWLFiAa9euoUKFCvjuu++wdetWzJw5E3fv3kW9evVQsWJFzJkzBxcvXsTUqVMBAJ9/Djg6AmvWALNmAbt3A927p2yjTx9gzhygZ09AowE+/VSfKEZFpbzu77+BBg2AiAjghx+A9euBypWBzz4DZs2yg/5EkX99/fXXePDgAZYvX465c+di9+7d6Nq1Kz799FPkypULa9euxciRI/Hrr7/i66+/NtnfIRFRqgkRkYImTpwoAGTChAnvvS4pKUmio6Mle/bs8v333xseX7ZsmQCQ//wHIvLv16xZEABy967+z+fP6/88dGjK61av1j/eq9e/j3XpAsmSBXLjRspr27WDZMsGefKkqYiI7Nq1SwCIt7d3iliHDBkiAGTQoEEpHu/YsaPkzZs3/X9ZRERGwhFAIjILn376aYo/R0dHY9SoUXB1dYWDgwMcHByQI0cOxMTE4Pz5869cqV/G3KFDyvtVr67/fv26/vuuXfrv3bqlvM7HB2/sGg4NBVq0AD76KOXjn30GxMYChw6F4dXj5Ly8Um4+qVSpEgDA09PzjccjIyM5DUxEiktjsQQiItMoUqRIij/7+flh586dGD9+PGrXro2cOXNCpVKhffv2iIuLe+XKeAD6dX+vypJF/z350seP9d9fP47YweHN1z5+DLwWDgAg+bS5x49jAfybxOXNm7I2oJOT03sfj4+PR44cOd5sgIgokzABJCKz8Oq5wE+fPsXGjRsxceJEjB492vD4ixcvEBkZ+dork1J1/+Qk7949oFixV16d9G9y+Oq1d+++eY/kTSX58wNAQqraJSIyR5wCJiKzo1KpICLIkjyM99LixYuh1b5+wkfqPsd6eOi/r36tjnNQkD4JfFWLFvpp4Nd3Ea9cqd89XK8eADilql0iInPEEUAiMjs5c+ZEkyZNMHv2bOTPnx+lSpXCnj17sGTJEuTOnfu1q7Om6p6VKul3BX/3nX63cMuW+lIvc+YAOXOmvHbiRGDjRqBZM2DCBCBvXn3iGBKi32GcK1dOAJzCJSLLxRFAIjJLa9asQbNmzTBy5Eh88sknOHbsGLZv345cuXK9dqXqra9/myVLgGHD9AWfO3TQj/798Ye+1t+rKlQADh7Uf//yS6BjR32yuGwZMGKECkDtNLVLRGRueBIIEVmBrwHMRmrXA2aMA4CRAKZlQltERKbBBJCIrMBZANUyub0qmdgeEZFxcQqYiKxAVQANYfouzR5AIzD5IyJLxwSQiKzEGAA6E7ehfdkOEZFlYwJIRFbCE0BX6EfpTMEegB+A9ia6PxFR5uEaQCKyIo8BVH75/fV6gRlhDyAfgPMA8n7gWiIi88cRQCKyIvkA7ACQHcYbCbR/eb8dYPJHRNaCCSARWZlqAPZDnwxmNAlMHvnbj8zdZUxEZFpMAInIClWDfrrW9+Wf05oIJl/f5eV9mPwRkXVhAkhEViovgNUAQgDUf/mYA959gocK/56OWf/l61aB075EZI24CYSIbEQEgDUAjgAIA/DsledyQn+8W13od/qyzh8RWTcmgP/f3h0aAQwDMBAzCur+kxaVpIO8NMUD3xkIutvebd+2s+2Zb1+gRAACAMTYAAIAxAhAAIAYAQgAECMAAQBiBCAAQIwABACIEYAAADECEAAgRgACAMQIQACAGAEIABAjAAEAYgQgAECMAAQAiBGAAAAxAhAAIEYAAgDECEAAgBgBCAAQIwABAGIEIABAjAAEAIgRgAAAMQIQACBGAAIAxAhAAIAYAQgAECMAAQBiBCAAQIwABACIEYAAADECEAAgRgACAMT8zpqZBn47GLIAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ct.causal_model.view_model()" ] @@ -526,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 16, "id": "b1407bbb", "metadata": {}, "outputs": [ @@ -535,11 +504,11 @@ "output_type": "stream", "text": [ " T Y X1 X2 X3 X4 X5 propensity\n", - "0 1 0.651561 1.266634 -1.493090 -0.139367 -1.234455 0.115191 0.314804\n", - "1 1 1.499142 0.977774 0.426410 0.709403 -0.371737 -1.062126 0.656799\n", - "2 0 -1.504549 0.037244 0.522880 -0.896096 0.838664 -0.006262 0.705601\n", - "3 1 -2.231536 -1.008786 0.058282 0.322617 0.213959 0.256430 0.368792\n", - "4 1 1.108775 1.296887 -0.063358 -1.825230 0.541003 0.221827 0.774054\n" + "0 0 1.650705 0.521524 -1.393497 0.010672 -0.828778 1.019257 0.245100\n", + "1 0 -0.888552 -0.782541 -1.384920 -0.233656 0.150249 -0.495169 0.205945\n", + "2 0 -0.516344 -0.154831 -0.098985 2.335176 -1.888928 -0.594854 0.235870\n", + "3 1 0.601679 0.109516 0.092910 0.525252 -1.172202 -0.177947 0.439021\n", + "4 0 0.569122 -0.365630 -0.343061 -0.420554 -0.995160 1.548502 0.335151\n" ] } ], @@ -552,7 +521,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 17, "id": "1b906467", "metadata": {}, "outputs": [], @@ -568,7 +537,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 18, "id": "71394906", "metadata": {}, "outputs": [ @@ -592,10 +561,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "359fd218", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting a Propensity-Weighted scoring estimator to be used in scoring tasks\n", + "Propensity Model Fitted Successfully\n" + ] + } + ], "source": [ "ct = CausalTune(\n", " components_time_budget=5,\n", @@ -605,15 +583,121 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 20, "id": "08e0ee9c", "metadata": {}, + "outputs": [], + "source": [ + "ct.causal_model.view_model()" + ] + }, + { + "cell_type": "markdown", + "id": "818762bf-a3e7-426b-87e7-3cbcaa5d1ef8", + "metadata": {}, + "source": [ + "### Pre-processing of the test dataset based on the training set\n", + "You can also preprocess the data in the CausalityDataset using one of the popular category encoders: OneHot, WoE, Label, Target." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "fd26bb39-e55f-4f76-b225-838ddb16675b", + "metadata": {}, + "outputs": [], + "source": [ + "unique_values_1 = ['A', 'B', 'C', 'D', 'E']\n", + "unique_values_2 = ['F', 'G', 'H', 'I', 'J', 'K']\n", + "unique_values_3 = ['L', 'M', 'N', 'O', 'P', 'Q', 'R']" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "9354687b-6d4a-448a-813d-c8f21c761b8c", + "metadata": {}, "outputs": [ { "data": { - "image/png": "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8ccfE90mxlwC4MvOnTunPDw8VNasWZWdnZ0qV66csrOzU5cvX9a6NJOIjo5WX375pQLUd999JwsINBQSEqKmTp2qHB0dFaCqVKmiFi9erJ4/f651aUIIkaokAJrYrFmzlI2NTar0BTMYDGrkyJEKUAMHDkxUmxhzDICxHj9+rGbMmKHs7OwUoMqVK6dmz56d7JXPWnq5zYuXl5fW5aRZf/31l+rdu7fKmDGjSp8+veratavssSyESNPkHkAT69mzJ4ULF2bChAkpPpaNjQ3jx49n7ty5zJkzh1atWhEeHp7i46aUbNmyoZQCYPHixTg5OTFgwAAKFy7MN998w6VLlzSuMGnu3bvHZ599xpYtW/jtt99wc3PTuqQ0JSoqitWrV1O7dm0qVqzIli1bGDlyJNevX2fx4sWyx7IQIm3TOoFaI29vb2VjY6POnTuXamNu3rxZZcmSRX3yySdvbRNjzjOA4eHhKl++fKpnz55xz125ckV9++236r333ovrw7Z582azv4x64cIFVaJECZU3b1519OhRrctJU27dumWSPpRCCGHNZAYwBfTq1YtChQqlyixgrKZNm7J//35u3rxJtWrVOHfuXKqNbSpz5szh/v37jBgxIu45R0dHpk6dSnBwcNwqYmdnZ0qXLs0vv/zC48ePNaw4frFtXtKlS0dAQACVK1fWuiSrp5QiICCALl26ULRoUSZPnoyrqysnT55k7969tGnTBnt7e63LFEIIsyEBMAVkyJCBoUOHsmLFCi5cuJBq41asWJGAgACyZMlicW1inj17xo8//kiXLl3i7beWOXNmevfuzYkTJ9i/fz+VKlViyJAhFCpUCDc3N86ePatB1W9at24dn332GWXKlJE2L6ng+fPnLFq0iE8//ZTq1atz6NAhpkyZwo0bN5gzZw7ly5fXukQhhDBPWk9BWqtnz56pggULqm7duqX62A8fPlSfffaZSp8+vVq+fPkrr5nrJeBffvlF2draqgsXLiT6PTdu3FCjR49W+fLlU4D67LPP1IYNG1R0dHQKVpqw2DYvHTp0kDYvKezq1atq2LBhKnfu3ApQTZo0UZs2bdLs314IISyNBMAU9Ouvvyo7Ozt18eLFVB87IiJCde3aVQFqypQpcW1izDEAxoblrl27vtP7IyIi1LJly1T16tUVoIoWLaqmTJmi7t27Z+JK4/dym5fv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2IBoILyeji8iIroHUESuQiHwm/PPF9cLvBY2wB84BPhdoa2IiFwtjQCKyFXwBzKBFtTdSKDt/PEyUfgTEalfCoAicpXuB3ZihcFrDYHOkb+dNOwsYxER96QAKCLX4H6sy7VPnn9d2yDobB91/jgKfyIiDUEBUESukR+wFsgAHjq/zc6lV/Dw4MIqlA+d328NuuwrItJwNAlEROrYASAF+BzIAX6u9F4rrOXdemHN9FWdPxGR60EBUETqkQFOAb8CXkBLtLaviMj1pwAoIiIi4mZ0D6CIiIiIm1EAFBEREXEzCoAiIiIibkYBUERERMTNKACKiIiIuBkFQBERERE3owAoIiIi4mYUAEVERETcjAKgiIiIiJtRABQRERFxMwqAIiIiIm5GAVBERETEzSgAioiIiLgZBUARERERN6MAKCIiIuJmFABFRERE3IwCoIiIiIibUQAUERERcTMKgCIiIiJuRgFQRERExM0oAIqIiIi4GQVAERERETejACgiIiLiZhQARURERNyMAqCIiIiIm1EAFBEREXEzCoAiIiIibkYBUERERMTNKACKiIiIuBkFQBERERE3owAoIiIi4mYUAEVERETcjAKgiIiIiJv5f/Ni/kTzTPigAAAAAElFTkSuQmCC", + "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", + "
treatmenty_factualx1x2x3
015.599916-0.528603-0.3434551.128554
106.875856-1.736945-1.8020020.383828
202.996273-0.807451-0.202946-0.360898
301.3662060.3900830.596582-1.850350
401.963538-1.045229-0.6027100.011465
\n", + "
" + ], "text/plain": [ - "
" + " treatment y_factual x1 x2 x3\n", + "0 1 5.599916 -0.528603 -0.343455 1.128554\n", + "1 0 6.875856 -1.736945 -1.802002 0.383828\n", + "2 0 2.996273 -0.807451 -0.202946 -0.360898\n", + "3 0 1.366206 0.390083 0.596582 -1.850350\n", + "4 0 1.963538 -1.045229 -0.602710 0.011465" ] }, "metadata": {}, @@ -621,13 +705,1135 @@ } ], "source": [ - "ct.causal_model.view_model()" + "df_train = synth_ihdp(return_df=True).iloc[:,:5]\n", + "display(df_train.head())" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f22414f8-0624-4e04-9a3d-4dfe31e4f8f0", + "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", + "
treatmenty_factualx1x2x3
015.599916-0.528603-0.3434551.128554
106.875856-1.736945-1.8020020.383828
202.996273-0.807451-0.202946-0.360898
301.3662060.3900830.596582-1.850350
401.963538-1.045229-0.6027100.011465
\n", + "
" + ], + "text/plain": [ + " treatment y_factual x1 x2 x3\n", + "0 1 5.599916 -0.528603 -0.343455 1.128554\n", + "1 0 6.875856 -1.736945 -1.802002 0.383828\n", + "2 0 2.996273 -0.807451 -0.202946 -0.360898\n", + "3 0 1.366206 0.390083 0.596582 -1.850350\n", + "4 0 1.963538 -1.045229 -0.602710 0.011465" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_test = synth_ihdp(return_df=True).iloc[:,:5]\n", + "display(df_test.head())" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "70477eb1-9a14-4927-85ef-fb6888d432c7", + "metadata": {}, + "outputs": [], + "source": [ + "# Adding the category columns with random values\n", + "df_train['category_col1'] = np.random.choice(unique_values_1, len(df_train))\n", + "df_train['category_col2'] = np.random.choice(unique_values_2, len(df_train))\n", + "df_train['category_col3'] = np.random.choice(unique_values_3, len(df_train))\n", + "\n", + "df_test['category_col1'] = np.random.choice(unique_values_1, len(df_test))\n", + "df_test['category_col2'] = np.random.choice(unique_values_2, len(df_test))\n", + "df_test['category_col3'] = np.random.choice(unique_values_3, len(df_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "ba538a59-a875-4766-a41a-f9099f3add16", + "metadata": {}, + "outputs": [], + "source": [ + "cd_train = CausalityDataset(\n", + " data=df_train,\n", + " treatment='treatment',\n", + " outcomes=['y_factual'],\n", + " effect_modifiers=['x1', 'x2', 'x3', 'category_col1', 'category_col2', 'category_col3']\n", + ")\n", + "\n", + "cd_test = CausalityDataset(\n", + " data=df_test,\n", + " treatment='treatment',\n", + " outcomes=['y_factual'],\n", + " effect_modifiers=['x1', 'x2', 'x3', 'category_col1', 'category_col2', 'category_col3']\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "71fb2260-ca6e-4a7c-b220-8de92af82917", + "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", + "
treatmenty_factualx1x2x3category_col1category_col2category_col3random
015.599916-0.528603-0.3434551.128554EKR1
106.875856-1.736945-1.8020020.383828AFM1
202.996273-0.807451-0.202946-0.360898DHO0
301.3662060.3900830.596582-1.850350DKR0
401.963538-1.045229-0.6027100.011465CKQ0
\n", + "
" + ], + "text/plain": [ + " treatment y_factual x1 x2 x3 category_col1 \\\n", + "0 1 5.599916 -0.528603 -0.343455 1.128554 E \n", + "1 0 6.875856 -1.736945 -1.802002 0.383828 A \n", + "2 0 2.996273 -0.807451 -0.202946 -0.360898 D \n", + "3 0 1.366206 0.390083 0.596582 -1.850350 D \n", + "4 0 1.963538 -1.045229 -0.602710 0.011465 C \n", + "\n", + " category_col2 category_col3 random \n", + "0 K R 1 \n", + "1 F M 1 \n", + "2 H O 0 \n", + "3 K R 0 \n", + "4 K Q 0 " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cd_train.data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "78d7813b-cc59-4b49-a92a-fb41bae4bd9d", + "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", + "
treatmenty_factualx1x2x3category_col1category_col2category_col3random
015.599916-0.528603-0.3434551.128554BHM1
106.875856-1.736945-1.8020020.383828CIM0
202.996273-0.807451-0.202946-0.360898BKR0
301.3662060.3900830.596582-1.850350CHP1
401.963538-1.045229-0.6027100.011465AHO1
\n", + "
" + ], + "text/plain": [ + " treatment y_factual x1 x2 x3 category_col1 \\\n", + "0 1 5.599916 -0.528603 -0.343455 1.128554 B \n", + "1 0 6.875856 -1.736945 -1.802002 0.383828 C \n", + "2 0 2.996273 -0.807451 -0.202946 -0.360898 B \n", + "3 0 1.366206 0.390083 0.596582 -1.850350 C \n", + "4 0 1.963538 -1.045229 -0.602710 0.011465 A \n", + "\n", + " category_col2 category_col3 random \n", + "0 H M 1 \n", + "1 I M 0 \n", + "2 K R 0 \n", + "3 H P 1 \n", + "4 H O 1 " + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cd_test.data.head()" + ] + }, + { + "cell_type": "markdown", + "id": "2c4767e4-7aa2-47f5-ad9d-d830e77d78b0", + "metadata": {}, + "source": [ + "You can select one of the categorical encoders: `\"onehot\", \"label\", \"target\", \"woe\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "7c0b8f72-6efb-4812-80f7-164557e9eea6", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_processor = CausalityDatasetProcessor()\n", + "dataset_processor.fit(\n", + " cd=cd_train,\n", + " encoder_type=\"label\"\n", + ")\n", + "cd_train = dataset_processor.transform(cd_train)\n", + "cd_test = dataset_processor.transform(cd_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "7b9ee8de-ecfd-475c-9369-4bc9abd81454", + "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", + "
treatmenty_factualx1x2x3randomcategory_col1category_col2category_col3
015.599916-0.528603-0.3434551.1285541.0111
106.875856-1.736945-1.8020020.3838281.0222
202.996273-0.807451-0.202946-0.3608980.0333
301.3662060.3900830.596582-1.8503500.0311
401.963538-1.045228-0.6027100.0114650.0414
\n", + "
" + ], + "text/plain": [ + " treatment y_factual x1 x2 x3 random category_col1 \\\n", + "0 1 5.599916 -0.528603 -0.343455 1.128554 1.0 1 \n", + "1 0 6.875856 -1.736945 -1.802002 0.383828 1.0 2 \n", + "2 0 2.996273 -0.807451 -0.202946 -0.360898 0.0 3 \n", + "3 0 1.366206 0.390083 0.596582 -1.850350 0.0 3 \n", + "4 0 1.963538 -1.045228 -0.602710 0.011465 0.0 4 \n", + "\n", + " category_col2 category_col3 \n", + "0 1 1 \n", + "1 2 2 \n", + "2 3 3 \n", + "3 1 1 \n", + "4 1 4 " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cd_train.data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "82ba4136-d406-4b3d-9b13-4bc765ab925d", + "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", + "
treatmenty_factualx1x2x3randomcategory_col1category_col2category_col3
015.599916-0.528603-0.3434551.1285541.0532
106.875856-1.736945-1.8020020.3838280.0442
202.996273-0.807451-0.202946-0.3608980.0511
301.3662060.3900830.596582-1.8503501.0436
401.963538-1.045228-0.6027100.0114651.0233
\n", + "
" + ], + "text/plain": [ + " treatment y_factual x1 x2 x3 random category_col1 \\\n", + "0 1 5.599916 -0.528603 -0.343455 1.128554 1.0 5 \n", + "1 0 6.875856 -1.736945 -1.802002 0.383828 0.0 4 \n", + "2 0 2.996273 -0.807451 -0.202946 -0.360898 0.0 5 \n", + "3 0 1.366206 0.390083 0.596582 -1.850350 1.0 4 \n", + "4 0 1.963538 -1.045228 -0.602710 0.011465 1.0 2 \n", + "\n", + " category_col2 category_col3 \n", + "0 3 2 \n", + "1 4 2 \n", + "2 1 1 \n", + "3 3 6 \n", + "4 3 3 " + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cd_test.data.head()" + ] + }, + { + "cell_type": "markdown", + "id": "4ef24918-f676-4da8-b77a-ebf1347c7be9", + "metadata": {}, + "source": [ + "### Example of model training on transformed data\n", + "Now if `outcome_model=\"auto\"` in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by `outcome_model=\"nested\"` (Refitting AutoML for each estimator)." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "7016148c-d48e-4d1d-a951-160b29b6a37b", + "metadata": {}, + "outputs": [], + "source": [ + "# training configs\n", + "\n", + "# set evaluation metric\n", + "metric = \"energy_distance\"\n", + "\n", + "# it's best to specify either time_budget or components_time_budget, \n", + "# and let the other one be inferred; time in seconds\n", + "components_time_budget = 10\n", + "\n", + "# specify training set size\n", + "train_size = 0.7" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "3f6b2cfd-a26e-4c96-8504-7380459d1a3d", + "metadata": {}, + "outputs": [], + "source": [ + "ct = CausalTune(\n", + " estimator_list=[\n", + " \"DomainAdaptationLearner\",\n", + " \"CausalForestDML\",\n", + " \"ForestDRLearner\",\n", + " ],\n", + " metric=metric,\n", + " verbose=1,\n", + " components_time_budget=components_time_budget,\n", + " train_size=train_size,\n", + " outcome_model=\"auto\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "cbdc9c92-33c8-41c4-ab15-8e15703b5a56", + "metadata": {}, + "outputs": [], + "source": [ + "# run causaltune\n", + "ct.fit(data=cd_train, outcome=cd_train.outcomes[0])\n", + "\n", + "print('---------------------')\n", + "# return best estimator\n", + "print(f\"Best estimator: {ct.best_estimator}\")\n", + "# config of best estimator:\n", + "print(f\"Best config: {ct.best_config}\")\n", + "# best score:\n", + "print(f\"Best score: {ct.best_score}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "56d79fe7-bed7-4ccb-96bd-5b0843b149fb", + "metadata": {}, + "outputs": [], + "source": [ + "predictions = ct.predict(cd_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "27bab1dd-abd2-41a4-b30c-62b4722d0872", + "metadata": {}, + "outputs": [], + "source": [ + "predictions" + ] + }, + { + "cell_type": "markdown", + "id": "ef1b4809-cc89-4318-af18-671ba2c70dd5", + "metadata": {}, + "source": [ + "### Using pre-processing in the model object\n", + "- You can also use `preprocess = True` in the `CausalTune` fit method to do preprocessing automatically\n", + "- You should specify `encoder_type`\n", + "- You should also specify `encoder_outcome` (binary target column) for the `\"woe\", \"target\"` encoders, no need for `\"onehot\", \"label\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "7d251250-c64a-43b5-b804-1e3e672acb38", + "metadata": {}, + "outputs": [], + "source": [ + "unique_values_1 = ['A', 'B', 'C', 'D', 'E']\n", + "unique_values_2 = ['F', 'G', 'H', 'I', 'J', 'K']\n", + "unique_values_3 = ['L', 'M', 'N', 'O', 'P', 'Q', 'R']\n", + "\n", + "df_train = synth_ihdp(return_df=True).iloc[:,:5]\n", + "df_test = synth_ihdp(return_df=True).iloc[:,:5]\n", + "\n", + "df_train['category_col1'] = np.random.choice(unique_values_1, len(df_train))\n", + "df_train['category_col2'] = np.random.choice(unique_values_2, len(df_train))\n", + "df_train['category_col3'] = np.random.choice(unique_values_3, len(df_train))\n", + "\n", + "df_test['category_col1'] = np.random.choice(unique_values_1, len(df_test))\n", + "df_test['category_col2'] = np.random.choice(unique_values_2, len(df_test))\n", + "df_test['category_col3'] = np.random.choice(unique_values_3, len(df_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "fef7b317-08aa-45bb-8eb1-f8c8eacae428", + "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", + "
treatmenty_factualx1x2x3category_col1category_col2category_col3
015.599916-0.528603-0.3434551.128554AJN
106.875856-1.736945-1.8020020.383828BJP
202.996273-0.807451-0.202946-0.360898AJP
301.3662060.3900830.596582-1.850350EFM
401.963538-1.045229-0.6027100.011465DGQ
\n", + "
" + ], + "text/plain": [ + " treatment y_factual x1 x2 x3 category_col1 \\\n", + "0 1 5.599916 -0.528603 -0.343455 1.128554 A \n", + "1 0 6.875856 -1.736945 -1.802002 0.383828 B \n", + "2 0 2.996273 -0.807451 -0.202946 -0.360898 A \n", + "3 0 1.366206 0.390083 0.596582 -1.850350 E \n", + "4 0 1.963538 -1.045229 -0.602710 0.011465 D \n", + "\n", + " category_col2 category_col3 \n", + "0 J N \n", + "1 J P \n", + "2 J P \n", + "3 F M \n", + "4 G Q " + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_train.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "372e47a5-1da8-4273-80d1-ad8392720b4d", + "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", + "
treatmenty_factualx1x2x3category_col1category_col2category_col3
015.599916-0.528603-0.3434551.128554CKN
106.875856-1.736945-1.8020020.383828DIN
202.996273-0.807451-0.202946-0.360898AGP
301.3662060.3900830.596582-1.850350DJM
401.963538-1.045229-0.6027100.011465EHP
\n", + "
" + ], + "text/plain": [ + " treatment y_factual x1 x2 x3 category_col1 \\\n", + "0 1 5.599916 -0.528603 -0.343455 1.128554 C \n", + "1 0 6.875856 -1.736945 -1.802002 0.383828 D \n", + "2 0 2.996273 -0.807451 -0.202946 -0.360898 A \n", + "3 0 1.366206 0.390083 0.596582 -1.850350 D \n", + "4 0 1.963538 -1.045229 -0.602710 0.011465 E \n", + "\n", + " category_col2 category_col3 \n", + "0 K N \n", + "1 I N \n", + "2 G P \n", + "3 J M \n", + "4 H P " + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_test.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "d0f3ae9f-1f5d-44b8-8c50-953a4ce1e7ef", + "metadata": {}, + "outputs": [], + "source": [ + "cd_train = CausalityDataset(\n", + " data=df_train,\n", + " treatment='treatment',\n", + " outcomes=['y_factual'],\n", + " effect_modifiers=['x1', 'x2', 'x3', 'category_col1', 'category_col2', 'category_col3']\n", + ")\n", + "\n", + "cd_test = CausalityDataset(\n", + " data=df_test,\n", + " treatment='treatment',\n", + " outcomes=['y_factual'],\n", + " effect_modifiers=['x1', 'x2', 'x3', 'category_col1', 'category_col2', 'category_col3']\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "6c1da720-1ef6-4bba-8bb5-047c9bff01d4", + "metadata": {}, + "outputs": [], + "source": [ + "ct = CausalTune(\n", + " estimator_list=[\n", + " \"DomainAdaptationLearner\",\n", + " \"CausalForestDML\",\n", + " \"ForestDRLearner\",\n", + " ],\n", + " metric=metric,\n", + " verbose=1,\n", + " components_time_budget=components_time_budget,\n", + " train_size=train_size,\n", + " outcome_model=\"auto\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "82699ee7-aafb-45c9-994f-9a0296dfe30a", + "metadata": {}, + "outputs": [], + "source": [ + "# run causaltune\n", + "ct.fit(data=cd_train, outcome=cd_train.outcomes[0], preprocess=True, encoder_type = \"label\")\n", + "\n", + "print('---------------------')\n", + "# return best estimator\n", + "print(f\"Best estimator: {ct.best_estimator}\")\n", + "# config of best estimator:\n", + "print(f\"Best config: {ct.best_config}\")\n", + "# best score:\n", + "print(f\"Best score: {ct.best_score}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "92cbd4ad-ab7d-45dd-a13c-c7c99dacd63b", + "metadata": {}, + "outputs": [], + "source": [ + "predictions = ct.predict(cd_train, preprocess=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "d16777d6-f468-469d-813f-da1f90455d37", + "metadata": {}, + "outputs": [], + "source": [ + "predictions" ] }, { "cell_type": "code", "execution_count": null, - "id": "cef89ea2", + "id": "ffaa475c-2cd6-46c8-ab23-f64f0f5f1506", "metadata": {}, "outputs": [], "source": [] @@ -649,7 +1855,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.19" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/notebooks/ERUPT under simulated random assignment.ipynb b/notebooks/ERUPT under simulated random assignment.ipynb index 6ac2b20b..cf124cdc 100644 --- a/notebooks/ERUPT under simulated random assignment.ipynb +++ b/notebooks/ERUPT under simulated random assignment.ipynb @@ -1,7 +1,6 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "a34f30c6", "metadata": { @@ -15,18 +14,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 12, "id": "c37a7a94", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n" - ] - } - ], + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", @@ -91,31 +82,14 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 13, "id": "5ed9b5f7", "metadata": { "pycharm": { "name": "#%%\n" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - "// turn off scrollable windows for large output\n", - "IPython.OutputArea.prototype._should_scroll = function(lines) {\n", - " return false;\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "%%javascript\n", "\n", @@ -126,7 +100,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "af5333b0", "metadata": {}, @@ -188,62 +161,62 @@ " \n", " 0\n", " 0\n", - " 1.239308\n", - " 1.0\n", - " -0.847134\n", - " -0.398563\n", - " 0.176539\n", - " 0.957360\n", - " 1.122457\n", - " 0.328241\n", + " -0.529094\n", + " 0.0\n", + " -0.325404\n", + " -3.200259\n", + " -1.096231\n", + " 0.454945\n", + " -0.682950\n", + " 0.096673\n", " \n", " \n", " 1\n", " 0\n", - " 0.108442\n", - " 0.0\n", - " -0.583898\n", - " -0.899265\n", - " 1.177333\n", - " -0.563962\n", - " -0.614737\n", - " 0.195308\n", + " -2.673912\n", + " 1.0\n", + " -2.224641\n", + " 1.384133\n", + " 0.506485\n", + " 0.145684\n", + " -0.195266\n", + " 0.472952\n", " \n", " \n", " 2\n", " 1\n", - " -0.897310\n", + " -1.666444\n", " 0.0\n", - " -2.237590\n", - " 0.061438\n", - " -0.462519\n", - " 0.777278\n", - " -1.379022\n", - " 0.345805\n", + " 0.687121\n", + " -0.207614\n", + " 0.788699\n", + " 1.131345\n", + " -0.352091\n", + " 0.550413\n", " \n", " \n", " 3\n", - " 1\n", - " 0.757475\n", - " 1.0\n", - " -0.047319\n", - " 0.354603\n", - " -1.976429\n", - " 0.081945\n", - " 0.424041\n", - " 0.695707\n", + " 0\n", + " -1.619143\n", + " 0.0\n", + " 0.740413\n", + " -0.666263\n", + " 1.027818\n", + " -0.197965\n", + " -2.025220\n", + " 0.423549\n", " \n", " \n", " 4\n", " 0\n", - " 0.853478\n", + " 0.331106\n", " 1.0\n", - " -0.256832\n", - " 0.048748\n", - " 1.536085\n", - " -1.027415\n", - " 0.689733\n", - " 0.304767\n", + " -0.907719\n", + " -1.775581\n", + " 0.072270\n", + " -1.760379\n", + " 1.449668\n", + " 0.083704\n", " \n", " \n", "\n", @@ -251,18 +224,18 @@ ], "text/plain": [ " T Y random X1 X2 X3 X4 X5 \\\n", - "0 0 1.239308 1.0 -0.847134 -0.398563 0.176539 0.957360 1.122457 \n", - "1 0 0.108442 0.0 -0.583898 -0.899265 1.177333 -0.563962 -0.614737 \n", - "2 1 -0.897310 0.0 -2.237590 0.061438 -0.462519 0.777278 -1.379022 \n", - "3 1 0.757475 1.0 -0.047319 0.354603 -1.976429 0.081945 0.424041 \n", - "4 0 0.853478 1.0 -0.256832 0.048748 1.536085 -1.027415 0.689733 \n", + "0 0 -0.529094 0.0 -0.325404 -3.200259 -1.096231 0.454945 -0.682950 \n", + "1 0 -2.673912 1.0 -2.224641 1.384133 0.506485 0.145684 -0.195266 \n", + "2 1 -1.666444 0.0 0.687121 -0.207614 0.788699 1.131345 -0.352091 \n", + "3 0 -1.619143 0.0 0.740413 -0.666263 1.027818 -0.197965 -2.025220 \n", + "4 0 0.331106 1.0 -0.907719 -1.775581 0.072270 -1.760379 1.449668 \n", "\n", " propensity \n", - "0 0.328241 \n", - "1 0.195308 \n", - "2 0.345805 \n", - "3 0.695707 \n", - "4 0.304767 " + "0 0.096673 \n", + "1 0.472952 \n", + "2 0.550413 \n", + "3 0.423549 \n", + "4 0.083704 " ] }, "metadata": {}, @@ -299,15 +272,30 @@ "id": "33681e65-6dd4-4c7d-a62d-925572b39e81", "metadata": {}, "source": [ - "Now if outcome_model=\"auto\" in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by outcome_model=\"nested\" (the default for now)" + "Now if `outcome_model=\"auto\"` in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by `outcome_model=\"nested\"` (Refitting AutoML for each estimator).\n", + "\n", + "You can also preprocess the data in the CausalityDataset using one of the popular category encoders: OneHot, WoE, Label, Target." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "id": "a51c87f4", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting a Propensity-Weighted scoring estimator to be used in scoring tasks\n", + "Propensity Model Fitted Successfully\n", + "---------------------\n", + "Best estimator: backdoor.econml.dml.CausalForestDML\n", + "Best config: {'estimator': {'estimator_name': 'backdoor.econml.dml.CausalForestDML', 'drate': 1, 'n_estimators': 2, 'criterion': 'het', 'min_samples_split': 12, 'min_samples_leaf': 8, 'min_weight_fraction_leaf': 0.0, 'max_features': 'log2', 'min_impurity_decrease': 0, 'max_samples': 0.2884902061383809, 'min_balancedness_tol': 0.4585520111743354, 'honest': 1, 'fit_intercept': 1, 'subforest_size': 5}, 'outcome_estimator': {'alpha': 0.006205274971406812, 'fit_intercept': True, 'eps': 7.833744321548246e-15, 'estimator_name': 'lasso_lars'}}\n", + "Best score: 0.2952285030581425\n" + ] + } + ], "source": [ "ct = CausalTune(\n", " estimator_list=[\"CausalForestDML\", \"XLearner\"],\n", @@ -334,7 +322,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "19bcfc2e", "metadata": {}, @@ -343,7 +330,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "2bea4e38", "metadata": {}, @@ -438,13 +424,13 @@ " \n", " \n", " naive_ate\n", - " 0.218151\n", - " 0.124848\n", + " 0.030740\n", + " 0.139801\n", " \n", " \n", " random_erupt\n", - " 0.023141\n", - " 0.216845\n", + " -0.001059\n", + " 0.210618\n", " \n", " \n", "\n", @@ -452,8 +438,8 @@ ], "text/plain": [ " estimated_effect sd\n", - "naive_ate 0.218151 0.124848\n", - "random_erupt 0.023141 0.216845" + "naive_ate 0.030740 0.139801\n", + "random_erupt -0.001059 0.210618" ] }, "metadata": {}, @@ -467,7 +453,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "a54530bf", "metadata": {}, diff --git a/notebooks/Multiple treatments examples.ipynb b/notebooks/Multiple treatments examples.ipynb index 4242c362..69441483 100644 --- a/notebooks/Multiple treatments examples.ipynb +++ b/notebooks/Multiple treatments examples.ipynb @@ -25,18 +25,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 35, "id": "fbcf1af0-3ad3-4666-b465-633f950409be", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n" - ] - } - ], + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", @@ -239,7 +231,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAACYAAAAPCAYAAACInr1QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAABJ0AAASdAHeZh94AAABhUlEQVR4nM2Vvy8EQRTHP8cWJFfwB2glIgoaIqfxP1CdhASlKFQSntdpFBINdxdBr3L0Irn2Wko/Sh1BcU4xc3JZ83ZvL1d4zc7u9818vvvm7Wyu2WzyHyNqDVR1GThNyf8WkX5LVNUicOFv10SkHNM7ZkRtD+qAGslzwDxwk2BqBDgC3oC8kdYx49eYiNT9xBC05ocnhp7DVeIVuAS2QnlZGH2G+/YJE8AM8AJUjbQN3NuuAO9pa3bCSDUGrPtrRUQagUXHgH3gUERus5qyGInGVHUQKAINoBzQI1yzPwLb3TiyGJE5w8UiMARUReQpoO8Ck0BBRD66MWYx0rayVeLjuKCq07gqHYhILa5niCDDNKaq48As8Axcx7QIOAcegJ1uHSUxkrYyqenzwKgff6oGj6aSqpZwH8VmVkbQmKoOAEu4hqwEUr6M5wBTuL67A+6B4DanMayKLQDDwFWo6X2jrxrAPW/sLP5LysKweqxV4uBJ36NIZPwx5g/MAoGG7FV0wvgBj4OYCC1tHJMAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAACYAAAAPCAYAAACInr1QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAABJ0AAASdAHeZh94AAABhUlEQVR4nM2Vvy8EQRTHP8cWJFfwB2glIgoaIqfxP1CdhASlKFQSntdpFBINdxdBr3L0Irn2Wko/Sh1BcU4xc3JZ83ZvL1d4zc7u9818vvvm7Wyu2WzyHyNqDVR1GThNyf8WkX5LVNUicOFv10SkHNM7ZkRtD+qAGslzwDxwk2BqBDgC3oC8kdYx49eYiNT9xBC05ocnhp7DVeIVuAS2QnlZGH2G+/YJE8AM8AJUjbQN3NuuAO9pa3bCSDUGrPtrRUQagUXHgH3gUERus5qyGInGVHUQKAINoBzQI1yzPwLb3TiyGJE5w8UiMARUReQpoO8Ck0BBRD66MWYx0rayVeLjuKCq07gqHYhILa5niCDDNKaq48As8Axcx7QIOAcegJ1uHSUxkrYyqenzwKgff6oGj6aSqpZwH8VmVkbQmKoOAEu4hqwEUr6M5wBTuL67A+6B4DanMayKLQDDwFWo6X2jrxrAPW/sLP5LysKweqxV4uBJ36NIZPwx5g/MAoGG7FV0wvgBj4OYCC1tHJMAAAAASUVORK5CYII=", "text/latex": [ "$\\displaystyle 747$" ], @@ -374,7 +366,7 @@ " \n", " \n", " 0\n", - " 1\n", + " 2\n", " 5.599916\n", " -0.528603\n", " -0.343455\n", @@ -384,16 +376,16 @@ " 1.295216\n", " 1\n", " 0\n", - " 0.092336\n", - " 0.413007\n", - " 0.015841\n", - " 0.258568\n", - " 0.220248\n", - " 0.413007\n", + " 0.107949\n", + " 0.341507\n", + " 0.029807\n", + " 0.257914\n", + " 0.262823\n", + " 0.029807\n", " \n", " \n", " 1\n", - " 0\n", + " 3\n", " 6.875856\n", " -1.736945\n", " -1.802002\n", @@ -403,12 +395,12 @@ " 1.295216\n", " 0\n", " 0\n", - " 0.049768\n", - " 0.329509\n", - " 0.157864\n", - " 0.229702\n", - " 0.233157\n", - " 0.049768\n", + " 0.329860\n", + " 0.003811\n", + " 0.270932\n", + " 0.263306\n", + " 0.132091\n", + " 0.263306\n", " \n", " \n", " 2\n", @@ -422,16 +414,16 @@ " -0.526556\n", " 0\n", " 0\n", - " 0.161629\n", - " 0.143418\n", - " 0.144413\n", - " 0.305226\n", - " 0.245314\n", - " 0.143418\n", + " 0.295283\n", + " 0.082931\n", + " 0.219673\n", + " 0.200007\n", + " 0.202105\n", + " 0.082931\n", " \n", " \n", " 3\n", - " 0\n", + " 4\n", " 1.366206\n", " 0.390083\n", " 0.596582\n", @@ -441,16 +433,16 @@ " -0.857787\n", " 0\n", " 0\n", - " 0.188882\n", - " 0.121554\n", - " 0.210754\n", - " 0.217349\n", - " 0.261461\n", - " 0.188882\n", + " 0.343119\n", + " 0.191204\n", + " 0.041045\n", + " 0.227161\n", + " 0.197471\n", + " 0.197471\n", " \n", " \n", " 4\n", - " 1\n", + " 4\n", " 1.963538\n", " -1.045229\n", " -0.602710\n", @@ -460,12 +452,12 @@ " -0.360940\n", " 1\n", " 0\n", - " 0.251365\n", - " 0.321926\n", - " 0.215222\n", - " 0.008052\n", - " 0.203436\n", - " 0.321926\n", + " 0.269994\n", + " 0.057299\n", + " 0.402925\n", + " 0.036241\n", + " 0.233541\n", + " 0.233541\n", " \n", " \n", "\n", @@ -473,32 +465,32 @@ ], "text/plain": [ " treatment y_factual x1 x2 x3 x4 x5 \\\n", - "0 1 5.599916 -0.528603 -0.343455 1.128554 0.161703 -0.316603 \n", - "1 0 6.875856 -1.736945 -1.802002 0.383828 2.244320 -0.629189 \n", + "0 2 5.599916 -0.528603 -0.343455 1.128554 0.161703 -0.316603 \n", + "1 3 6.875856 -1.736945 -1.802002 0.383828 2.244320 -0.629189 \n", "2 1 2.996273 -0.807451 -0.202946 -0.360898 -0.879606 0.808706 \n", - "3 0 1.366206 0.390083 0.596582 -1.850350 -0.879606 -0.004017 \n", - "4 1 1.963538 -1.045229 -0.602710 0.011465 0.161703 0.683672 \n", + "3 4 1.366206 0.390083 0.596582 -1.850350 -0.879606 -0.004017 \n", + "4 4 1.963538 -1.045229 -0.602710 0.011465 0.161703 0.683672 \n", "\n", " x6 x7 x8 propensity_control propensity_treatment1 \\\n", - "0 1.295216 1 0 0.092336 0.413007 \n", - "1 1.295216 0 0 0.049768 0.329509 \n", - "2 -0.526556 0 0 0.161629 0.143418 \n", - "3 -0.857787 0 0 0.188882 0.121554 \n", - "4 -0.360940 1 0 0.251365 0.321926 \n", + "0 1.295216 1 0 0.107949 0.341507 \n", + "1 1.295216 0 0 0.329860 0.003811 \n", + "2 -0.526556 0 0 0.295283 0.082931 \n", + "3 -0.857787 0 0 0.343119 0.191204 \n", + "4 -0.360940 1 0 0.269994 0.057299 \n", "\n", " propensity_treatment2 propensity_treatment3 propensity_treatment4 \\\n", - "0 0.015841 0.258568 0.220248 \n", - "1 0.157864 0.229702 0.233157 \n", - "2 0.144413 0.305226 0.245314 \n", - "3 0.210754 0.217349 0.261461 \n", - "4 0.215222 0.008052 0.203436 \n", + "0 0.029807 0.257914 0.262823 \n", + "1 0.270932 0.263306 0.132091 \n", + "2 0.219673 0.200007 0.202105 \n", + "3 0.041045 0.227161 0.197471 \n", + "4 0.402925 0.036241 0.233541 \n", "\n", " propensity_selected_group \n", - "0 0.413007 \n", - "1 0.049768 \n", - "2 0.143418 \n", - "3 0.188882 \n", - "4 0.321926 " + "0 0.029807 \n", + "1 0.263306 \n", + "2 0.082931 \n", + "3 0.197471 \n", + "4 0.233541 " ] }, "execution_count": 7, @@ -614,6 +606,16 @@ "train_size = 0.7" ] }, + { + "cell_type": "markdown", + "id": "088b75a1-c390-495f-be80-b253bcbc2a38", + "metadata": {}, + "source": [ + "Now if `outcome_model=\"auto\"` in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by `outcome_model=\"nested\"` (Refitting AutoML for each estimator).\n", + "\n", + "You can also preprocess the data in the CausalityDataset using one of the popular category encoders: OneHot, WoE, Label, Target." + ] + }, { "cell_type": "code", "execution_count": 12, @@ -631,36 +633,16 @@ " verbose=1,\n", " components_time_budget=components_time_budget,\n", " train_size=train_size,\n", + " outcome_model=\"auto\",\n", ")" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 36, "id": "6e54c819-d1c4-488e-89dd-37320362f561", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[flaml.tune.tune: 04-04 21:11:06] {493} WARNING - Using CFO for search. To use BlendSearch, run: pip install flaml[blendsearch]\n", - "[flaml.tune.tune: 04-04 21:11:06] {636} INFO - trial 1 config: {'estimator': {'estimator_name': 'backdoor.econml.metalearners.DomainAdaptationLearner'}}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Fitting a Propensity-Weighted scoring estimator to be used in scoring tasks\n", - "Initial configs: [{'estimator': {'estimator_name': 'backdoor.econml.metalearners.DomainAdaptationLearner'}}, {'estimator': {'estimator_name': 'backdoor.econml.dr.ForestDRLearner', 'min_propensity': 1e-06, 'n_estimators': 100, 'min_samples_split': 5, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': True, 'subforest_size': 4}}, {'estimator': {'estimator_name': 'backdoor.econml.dml.CausalForestDML', 'drate': True, 'n_estimators': 100, 'criterion': 'mse', 'min_samples_split': 10, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': True, 'fit_intercept': True, 'subforest_size': 4}}]\n", - "---------------------\n", - "Best estimator: backdoor.econml.metalearners.DomainAdaptationLearner\n", - "Best config: {'estimator': {'estimator_name': 'backdoor.econml.metalearners.DomainAdaptationLearner'}}\n", - "Best score: 0.17874868883720296\n" - ] - } - ], + "outputs": [], "source": [ "# run causaltune\n", "ct.fit(data=cd, outcome=cd.outcomes[0])\n", @@ -693,13 +675,13 @@ { "data": { "text/plain": [ - "array([[-0.16751623, 0.10701928, 0.85091579, 0.77418554],\n", - " [-0.16751623, 0.10701928, 1.60185647, 0.30859345],\n", - " [ 0.7479797 , -2.05958891, -0.75960481, -0.05422062],\n", + "array([[-0.17528909, -0.10834053, -0.27350324, -0.27354165],\n", + " [ 0.19621234, 0.30247269, -0.1484149 , -0.25184741],\n", + " [ 0.11457749, 0.02436523, -0.04183348, 0.23708047],\n", " ...,\n", - " [ 0.44195521, 0.52434093, 0.19784707, 0.77418554],\n", - " [-0.35218936, 0.52434093, 0.85091579, 0.77418554],\n", - " [ 1.91686213, 0.10701928, 0.19784707, 0.77418554]])" + " [-0.96454594, -0.57960515, 0.08710834, -0.38235969],\n", + " [-0.69400728, -0.03214504, -0.0508105 , 0.27500816],\n", + " [-0.02277706, -0.39042558, 0.05169252, -0.22645511]])" ] }, "execution_count": 15, @@ -770,6 +752,16 @@ "metric = \"psw_energy_distance\"" ] }, + { + "cell_type": "markdown", + "id": "c1efc7ac-9530-4dfe-9e7b-0797ff9529a4", + "metadata": {}, + "source": [ + "Now if `outcome_model=\"auto\"` in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by `outcome_model=\"nested\"` (Refitting AutoML for each estimator).\n", + "\n", + "You can also preprocess the data in the CausalityDataset using one of the popular category encoders: OneHot, WoE, Label, Target." + ] + }, { "cell_type": "code", "execution_count": 19, @@ -787,40 +779,17 @@ " verbose=1,\n", " components_time_budget=components_time_budget,\n", " train_size=train_size,\n", - " propensity_model=propensity_model\n", + " propensity_model=propensity_model,\n", + " outcome_model=\"auto\"\n", ")" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 37, "id": "ed6ad9d8-efcd-4123-935e-ebac56b39143", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:root:Using energy_distance metric as psw_energy_distance is not in the list of supported metrics for this usecase (['energy_distance'])\n", - "WARNING:flaml.tune.tune:Using CFO for search. To use BlendSearch, run: pip install flaml[blendsearch]\n", - "INFO:flaml.tune.searcher.blendsearch:No low-cost partial config given to the search algorithm. For cost-frugal search, consider providing low-cost values for cost-related hps via 'low_cost_partial_config'. More info can be found at https://microsoft.github.io/FLAML/docs/FAQ#about-low_cost_partial_config-in-tune\n", - "INFO:flaml.tune.tune:trial 1 config: {'estimator': {'estimator_name': 'backdoor.econml.metalearners.DomainAdaptationLearner'}}\n", - "WARNING:dowhy.causal_estimator:Concatenating common_causes and effect_modifiers and providing a single list of variables to metalearner estimator method, DomainAdaptationLearner. EconML metalearners accept a single X argument.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Fitting a Propensity-Weighted scoring estimator to be used in scoring tasks\n", - "Initial configs: [{'estimator': {'estimator_name': 'backdoor.econml.metalearners.DomainAdaptationLearner'}}, {'estimator': {'estimator_name': 'backdoor.econml.dr.ForestDRLearner', 'min_propensity': 1e-06, 'n_estimators': 100, 'min_samples_split': 5, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': True, 'subforest_size': 4}}, {'estimator': {'estimator_name': 'backdoor.econml.dml.CausalForestDML', 'drate': True, 'n_estimators': 100, 'criterion': 'mse', 'min_samples_split': 10, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': True, 'fit_intercept': True, 'subforest_size': 4}}]\n", - "---------------------\n", - "Best estimator: backdoor.econml.metalearners.DomainAdaptationLearner\n", - "Best config: {'estimator': {'estimator_name': 'backdoor.econml.metalearners.DomainAdaptationLearner'}}\n", - "Best score: 0.271265592878807\n" - ] - } - ], + "outputs": [], "source": [ "# run causaltune\n", "ct2.fit(data=cd, outcome=cd.outcomes[0])\n", @@ -853,13 +822,13 @@ { "data": { "text/plain": [ - "array([[-0.51886928, -0.58574743, 0.20972794, -0.83253706],\n", - " [-0.51886928, -0.12708488, 0.78949869, -0.83253706],\n", - " [ 1.60285747, 0.31716518, 0.20972794, 0.75203586],\n", + "array([[-0.82748584, -0.38301612, -0.28167136, 0.59362769],\n", + " [-0.47553063, -1.32764429, -0.78241589, -0.11771117],\n", + " [-0.56505201, -2.38952635, -1.25667425, -1.26012244],\n", " ...,\n", - " [ 1.91001916, 0.1818637 , -1.19342971, 0.31739539],\n", - " [ 1.91001916, -0.06212608, 0.49456951, 1.64734221],\n", - " [ 1.60285747, 0.31716518, -1.19342971, 0.31739539]])" + " [ 0.35639461, 0.81618186, -0.33151397, -0.45705827],\n", + " [ 0.23314607, 0.54855842, 0.42367241, 2.13179076],\n", + " [ 0.52856153, 0.5723138 , 0.21125856, 0.57083639]])" ] }, "execution_count": 22, @@ -997,26 +966,7 @@ " \n", " \n", " 0\n", - " 1\n", - " 4.699637\n", - " -0.779523\n", - " -0.256349\n", - " 1.335451\n", - " -0.768957\n", - " 0.120305\n", - " 1.237136\n", - " 1.106944\n", - " 0.195616\n", - " 0.138687\n", - " 0.281208\n", - " 0.121657\n", - " 0.188873\n", - " 0.269574\n", - " 0.413007\n", - " \n", - " \n", - " 1\n", - " 3\n", + " 4\n", " 6.175675\n", " -0.835516\n", " -0.989058\n", @@ -1026,54 +976,16 @@ " 1.619043\n", " 0.140574\n", " 0.329478\n", - " 0.223528\n", - " 0.187895\n", - " 0.119354\n", - " 0.240913\n", - " 0.228309\n", - " 0.049768\n", + " 0.143508\n", + " 0.009668\n", + " 0.249150\n", + " 0.340022\n", + " 0.257652\n", + " 0.263306\n", " \n", " \n", - " 2\n", + " 1\n", " 2\n", - " 3.071435\n", - " -0.343463\n", - " 0.045530\n", - " -0.121917\n", - " 0.111269\n", - " 0.167218\n", - " -0.024201\n", - " -0.579786\n", - " -0.161331\n", - " 0.157534\n", - " 0.090592\n", - " 0.274681\n", - " 0.318941\n", - " 0.158252\n", - " 0.143418\n", - " \n", - " \n", - " 3\n", - " 1\n", - " 1.517791\n", - " 0.587400\n", - " -0.169622\n", - " -1.923362\n", - " -0.168214\n", - " 0.595990\n", - " -0.350051\n", - " 0.484543\n", - " 0.402195\n", - " 0.252037\n", - " 0.592256\n", - " 0.012872\n", - " 0.117746\n", - " 0.025090\n", - " 0.188882\n", - " \n", - " \n", - " 4\n", - " 1\n", " 2.253838\n", " -1.733191\n", " 0.276954\n", @@ -1083,12 +995,69 @@ " -0.205158\n", " 0.050398\n", " -0.178537\n", - " 0.044687\n", - " 0.409317\n", - " 0.021472\n", - " 0.096261\n", - " 0.428262\n", - " 0.321926\n", + " 0.219851\n", + " 0.395494\n", + " 0.271965\n", + " 0.040387\n", + " 0.072304\n", + " 0.233541\n", + " \n", + " \n", + " 2\n", + " 1\n", + " 3.796029\n", + " -0.220110\n", + " 0.052470\n", + " -0.006594\n", + " -0.711016\n", + " -0.148393\n", + " 2.766398\n", + " 0.709664\n", + " 0.009275\n", + " 0.273572\n", + " 0.169401\n", + " 0.030970\n", + " 0.247343\n", + " 0.278714\n", + " 0.151098\n", + " \n", + " \n", + " 3\n", + " 3\n", + " 1.417470\n", + " 0.951141\n", + " 1.584397\n", + " -0.937251\n", + " 0.432877\n", + " -1.439677\n", + " -0.090420\n", + " 0.522325\n", + " 0.322685\n", + " 0.372968\n", + " 0.098640\n", + " 0.180842\n", + " 0.307548\n", + " 0.040002\n", + " 0.059175\n", + " \n", + " \n", + " 4\n", + " 4\n", + " 1.630352\n", + " 0.019401\n", + " -0.362564\n", + " 0.066324\n", + " -0.650583\n", + " 0.240731\n", + " -1.512800\n", + " 0.389906\n", + " -0.923198\n", + " 0.021148\n", + " 0.021058\n", + " 0.361784\n", + " 0.550461\n", + " 0.045550\n", + " 0.073713\n", " \n", " \n", "\n", @@ -1096,32 +1065,32 @@ ], "text/plain": [ " treatment y_factual x1 x2 x3 x4 x5 \\\n", - "0 1 4.699637 -0.779523 -0.256349 1.335451 -0.768957 0.120305 \n", - "1 3 6.175675 -0.835516 -0.989058 0.720254 2.409933 0.096092 \n", - "2 2 3.071435 -0.343463 0.045530 -0.121917 0.111269 0.167218 \n", - "3 1 1.517791 0.587400 -0.169622 -1.923362 -0.168214 0.595990 \n", - "4 1 2.253838 -1.733191 0.276954 -0.228963 0.204594 0.789086 \n", + "0 4 6.175675 -0.835516 -0.989058 0.720254 2.409933 0.096092 \n", + "1 2 2.253838 -1.733191 0.276954 -0.228963 0.204594 0.789086 \n", + "2 1 3.796029 -0.220110 0.052470 -0.006594 -0.711016 -0.148393 \n", + "3 3 1.417470 0.951141 1.584397 -0.937251 0.432877 -1.439677 \n", + "4 4 1.630352 0.019401 -0.362564 0.066324 -0.650583 0.240731 \n", "\n", " x6 x7 x8 propensity_control propensity_treatment1 \\\n", - "0 1.237136 1.106944 0.195616 0.138687 0.281208 \n", - "1 1.619043 0.140574 0.329478 0.223528 0.187895 \n", - "2 -0.024201 -0.579786 -0.161331 0.157534 0.090592 \n", - "3 -0.350051 0.484543 0.402195 0.252037 0.592256 \n", - "4 -0.205158 0.050398 -0.178537 0.044687 0.409317 \n", + "0 1.619043 0.140574 0.329478 0.143508 0.009668 \n", + "1 -0.205158 0.050398 -0.178537 0.219851 0.395494 \n", + "2 2.766398 0.709664 0.009275 0.273572 0.169401 \n", + "3 -0.090420 0.522325 0.322685 0.372968 0.098640 \n", + "4 -1.512800 0.389906 -0.923198 0.021148 0.021058 \n", "\n", " propensity_treatment2 propensity_treatment3 propensity_treatment4 \\\n", - "0 0.121657 0.188873 0.269574 \n", - "1 0.119354 0.240913 0.228309 \n", - "2 0.274681 0.318941 0.158252 \n", - "3 0.012872 0.117746 0.025090 \n", - "4 0.021472 0.096261 0.428262 \n", + "0 0.249150 0.340022 0.257652 \n", + "1 0.271965 0.040387 0.072304 \n", + "2 0.030970 0.247343 0.278714 \n", + "3 0.180842 0.307548 0.040002 \n", + "4 0.361784 0.550461 0.045550 \n", "\n", " propensity_selected_group \n", - "0 0.413007 \n", - "1 0.049768 \n", - "2 0.143418 \n", - "3 0.188882 \n", - "4 0.321926 " + "0 0.263306 \n", + "1 0.233541 \n", + "2 0.151098 \n", + "3 0.059175 \n", + "4 0.073713 " ] }, "execution_count": 26, @@ -1209,7 +1178,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████████████████████████████████████| 10/10 [00:00<00:00, 476.18it/s]\n" + "100%|██████████████████████████████████████████| 10/10 [00:00<00:00, 528.26it/s]\n" ] } ], @@ -1247,12 +1216,12 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/latex": [ - "$\\displaystyle 3.66039178927153$" + "$\\displaystyle 2.87505182773168$" ], "text/plain": [ - "3.660391789271528" + "2.87505182773168" ] }, "execution_count": 33, @@ -1272,12 +1241,12 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/latex": [ - "$\\displaystyle 3.14724353956066$" + "$\\displaystyle 3.09562750665942$" ], "text/plain": [ - "3.1472435395606566" + "3.095627506659421" ] }, "execution_count": 34, @@ -1314,7 +1283,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/notebooks/Standard errors.ipynb b/notebooks/Standard errors.ipynb index 797fcea9..edc89c66 100644 --- a/notebooks/Standard errors.ipynb +++ b/notebooks/Standard errors.ipynb @@ -1,7 +1,6 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "a34f30c6", "metadata": { @@ -17,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 12, "id": "43b770ca", "metadata": {}, "outputs": [], @@ -81,25 +80,14 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 13, "id": "5ed9b5f7", "metadata": { "pycharm": { "name": "#%%\n" } }, - "outputs": [ - { - "data": { - "application/javascript": "\n// turn off scrollable windows for large output\nIPython.OutputArea.prototype._should_scroll = function(lines) {\n return false;\n}\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "%%javascript\n", "\n", @@ -125,7 +113,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "ab536d1b", "metadata": {}, @@ -252,7 +239,7 @@ " 2\n", " 0\n", " 2.996273\n", - " 1.0\n", + " 0.0\n", " -0.807451\n", " -0.202946\n", " -0.360898\n", @@ -276,7 +263,7 @@ " 3\n", " 0\n", " 1.366206\n", - " 0.0\n", + " 1.0\n", " 0.390083\n", " 0.596582\n", " -1.850350\n", @@ -300,7 +287,7 @@ " 4\n", " 0\n", " 1.963538\n", - " 1.0\n", + " 0.0\n", " -1.045228\n", " -0.602710\n", " 0.011465\n", @@ -329,9 +316,9 @@ " treatment y_factual random x1 x2 x3 x4 \\\n", "0 1 5.599916 1.0 -0.528603 -0.343455 1.128554 0.161703 \n", "1 0 6.875856 1.0 -1.736945 -1.802002 0.383828 2.244319 \n", - "2 0 2.996273 1.0 -0.807451 -0.202946 -0.360898 -0.879606 \n", - "3 0 1.366206 0.0 0.390083 0.596582 -1.850350 -0.879606 \n", - "4 0 1.963538 1.0 -1.045228 -0.602710 0.011465 0.161703 \n", + "2 0 2.996273 0.0 -0.807451 -0.202946 -0.360898 -0.879606 \n", + "3 0 1.366206 1.0 0.390083 0.596582 -1.850350 -0.879606 \n", + "4 0 1.963538 0.0 -1.045228 -0.602710 0.011465 0.161703 \n", "\n", " x5 x6 x7 ... x16 x17 x18 x19 x20 x21 x22 x23 x24 \\\n", "0 -0.316603 1.295216 1.0 ... 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 \n", @@ -360,7 +347,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "d4d1871f", "metadata": {}, @@ -390,12 +376,15 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "e0f63d12", "metadata": {}, "source": [ - "Note that in the example below, we are passing `'cheap_inference'` to `estimator_list`. This configuration will restrict the selection of estimators to the ones that have analytical standard errors." + "Note that in the example below, we are passing `'cheap_inference'` to `estimator_list`. This configuration will restrict the selection of estimators to the ones that have analytical standard errors.\n", + "\n", + "Now if `outcome_model=\"auto\"` in the CausalTune constructor, we search over a simultaneous search space for the EconML estimators and for FLAML wrappers for common regressors. The old behavior is now achieved by `outcome_model=\"nested\"` (Refitting AutoML for each estimator).\n", + "\n", + "You can also preprocess the data in the CausalityDataset using one of the popular category encoders: OneHot, WoE, Label, Target." ] }, { @@ -403,7 +392,6 @@ "execution_count": 8, "id": "097c923e", "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } @@ -414,11 +402,11 @@ "output_type": "stream", "text": [ "Fitting a Propensity-Weighted scoring estimator to be used in scoring tasks\n", - "Initial configs: [{'estimator': {'estimator_name': 'backdoor.econml.dr.ForestDRLearner', 'min_propensity': 1e-06, 'n_estimators': 100, 'min_samples_split': 5, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': True, 'subforest_size': 4}}, {'estimator': {'estimator_name': 'backdoor.econml.dr.LinearDRLearner', 'fit_cate_intercept': True, 'min_propensity': 1e-06}}, {'estimator': {'estimator_name': 'backdoor.econml.dr.SparseLinearDRLearner', 'fit_cate_intercept': True, 'n_alphas': 100, 'n_alphas_cov': 10, 'min_propensity': 1e-06, 'tol': 0.0001, 'max_iter': 10000, 'mc_agg': 'mean'}}, {'estimator': {'estimator_name': 'backdoor.econml.dml.LinearDML', 'fit_cate_intercept': True, 'mc_agg': 'mean'}}, {'estimator': {'estimator_name': 'backdoor.econml.dml.SparseLinearDML', 'fit_cate_intercept': True, 'n_alphas': 100, 'n_alphas_cov': 10, 'tol': 0.0001, 'max_iter': 10000, 'mc_agg': 'mean'}}, {'estimator': {'estimator_name': 'backdoor.econml.dml.CausalForestDML', 'drate': True, 'n_estimators': 100, 'criterion': 'mse', 'min_samples_split': 10, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': True, 'fit_intercept': True, 'subforest_size': 4}}]\n", + "Propensity Model Fitted Successfully\n", "---------------------\n", "Best estimator: backdoor.econml.dr.ForestDRLearner\n", - "Best config: {'estimator': {'estimator_name': 'backdoor.econml.dr.ForestDRLearner', 'min_propensity': 1e-06, 'n_estimators': 100, 'min_samples_split': 5, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'auto', 'min_impurity_decrease': 0.0, 'max_samples': 0.45, 'min_balancedness_tol': 0.45, 'honest': 1, 'subforest_size': 4}}\n", - "Best score: 0.28241795991132435\n" + "Best config: {'estimator': {'estimator_name': 'backdoor.econml.dr.ForestDRLearner', 'min_propensity': 4.1309041114224745e-06, 'n_estimators': 51, 'min_samples_split': 2, 'min_samples_leaf': 5, 'min_weight_fraction_leaf': 0.0, 'max_features': 'log2', 'min_impurity_decrease': 0, 'max_samples': 0.4714678358460523, 'min_balancedness_tol': 0.48107268073765275, 'honest': 1, 'subforest_size': 5}, 'outcome_estimator': {'alpha': 0.0680343251051132, 'fit_intercept': True, 'eps': 3.581001561497127e-16, 'estimator_name': 'lasso_lars'}}\n", + "Best score: 0.19782534210362535\n" ] } ], @@ -430,7 +418,8 @@ " components_verbose=0,\n", " time_budget=time_budget,\n", " components_time_budget=components_time_budget,\n", - " train_size=train_size\n", + " train_size=train_size,\n", + " outcome_model=\"auto\"\n", ")\n", "\n", "\n", @@ -455,11 +444,11 @@ { "data": { "text/plain": [ - "array([[3.08417039],\n", - " [4.10807041],\n", - " [4.32885751],\n", - " [4.53901377],\n", - " [4.19668172]])" + "array([[3.06847504],\n", + " [5.10172326],\n", + " [2.3049086 ],\n", + " [4.39115942],\n", + " [4.38397264]])" ] }, "metadata": {}, @@ -476,7 +465,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "8c819410", "metadata": {}, @@ -495,11 +483,11 @@ { "data": { "text/plain": [ - "array([[0.28758771],\n", - " [0.2267228 ],\n", - " [0.29267037],\n", - " [0.22686985],\n", - " [0.28054057]])" + "array([[0.74527346],\n", + " [0.76067972],\n", + " [0.48614067],\n", + " [0.42494167],\n", + " [0.52123297]])" ] }, "metadata": {}, @@ -513,7 +501,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "9a474ab5", "metadata": {}, @@ -568,48 +555,48 @@ " \n", " \n", " 0\n", - " 3.084\n", - " 0.288\n", - " 10.724\n", + " 3.068\n", + " 0.745\n", + " 4.117\n", " 0.0\n", - " 2.611\n", - " 3.557\n", + " 1.843\n", + " 4.294\n", " \n", " \n", " 1\n", - " 4.108\n", - " 0.227\n", - " 18.119\n", + " 5.102\n", + " 0.761\n", + " 6.707\n", " 0.0\n", - " 3.735\n", - " 4.481\n", + " 3.851\n", + " 6.353\n", " \n", " \n", " 2\n", - " 4.329\n", - " 0.293\n", - " 14.791\n", + " 2.305\n", + " 0.486\n", + " 4.741\n", " 0.0\n", - " 3.847\n", - " 4.810\n", + " 1.505\n", + " 3.105\n", " \n", " \n", " 3\n", - " 4.539\n", - " 0.227\n", - " 20.007\n", + " 4.391\n", + " 0.425\n", + " 10.334\n", " 0.0\n", - " 4.166\n", - " 4.912\n", + " 3.692\n", + " 5.090\n", " \n", " \n", " 4\n", - " 4.197\n", - " 0.281\n", - " 14.959\n", + " 4.384\n", + " 0.521\n", + " 8.411\n", " 0.0\n", - " 3.735\n", - " 4.658\n", + " 3.527\n", + " 5.241\n", " \n", " \n", "\n", @@ -618,11 +605,11 @@ "text/plain": [ " point_estimate stderr zstat pvalue ci_lower ci_upper\n", "X \n", - "0 3.084 0.288 10.724 0.0 2.611 3.557\n", - "1 4.108 0.227 18.119 0.0 3.735 4.481\n", - "2 4.329 0.293 14.791 0.0 3.847 4.810\n", - "3 4.539 0.227 20.007 0.0 4.166 4.912\n", - "4 4.197 0.281 14.959 0.0 3.735 4.658" + "0 3.068 0.745 4.117 0.0 1.843 4.294\n", + "1 5.102 0.761 6.707 0.0 3.851 6.353\n", + "2 2.305 0.486 4.741 0.0 1.505 3.105\n", + "3 4.391 0.425 10.334 0.0 3.692 5.090\n", + "4 4.384 0.521 8.411 0.0 3.527 5.241" ] }, "execution_count": 11, @@ -633,11 +620,19 @@ "source": [ "ct.effect_inference(test_df)[0].summary_frame(alpha=0.1, value=0, decimals=3).head()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b200c45-d652-42a8-b8f1-611a119143c3", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "causality", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -651,7 +646,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.10.14" } }, "nbformat": 4,