\n",
"\n",
@@ -593,41 +617,34 @@
],
"text/plain": [
" relative-ee\n",
- "rm 0.096554"
+ "rm 0.118454"
]
},
+ "execution_count": 12,
"metadata": {},
- "execution_count": 11
+ "output_type": "execute_result"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 12,
"source": [
"# evaluate the estimation performance of OPE estimators \n",
- "# by comparing the estimated policy values of LinUCB and its ground-truth.\n",
+ "# by comparing the estimated policy values of LinTS t and its ground-truth.\n",
"# `summarize_estimators_comparison` returns a pandas dataframe containing estimation performances of given estimators \n",
- "relative_ee_lin_ucb = ope.summarize_estimators_comparison(\n",
- " ground_truth_policy_value=policy_value_lin_ucb,\n",
- " action_dist=action_dist_lin_ucb,\n",
+ "relative_ee_lin_ts = ope.summarize_estimators_comparison(\n",
+ " ground_truth_policy_value=policy_value_lin_ts,\n",
+ " action_dist=action_dist_lin_ts,\n",
" metric=\"relative-ee\", # \"relative-ee\" (relative estimation error) or \"se\" (squared error)\n",
")\n",
"\n",
"# estimation performances of the three estimators (lower means accurate)\n",
- "relative_ee_lin_ucb"
- ],
+ "relative_ee_lin_ts"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
- "name": "stderr",
- "text": [
- "WARNING:obp.ope.meta:`estimated_rewards_by_reg_model` is not given; model dependent estimators such as DM or DR cannot be used.\n"
- ]
- },
- {
- "output_type": "execute_result",
"data": {
"text/html": [
"
\n",
@@ -654,7 +671,7 @@
"
\n",
" \n",
" rm \n",
- " 0.097352 \n",
+ " 0.058522 \n",
" \n",
" \n",
"\n",
@@ -662,39 +679,52 @@
],
"text/plain": [
" relative-ee\n",
- "rm 0.097352"
+ "rm 0.058522"
]
},
+ "execution_count": 13,
"metadata": {},
- "execution_count": 12
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "# evaluate the estimation performance of OPE estimators \n",
+ "# by comparing the estimated policy values of LinUCB and its ground-truth.\n",
+ "# `summarize_estimators_comparison` returns a pandas dataframe containing estimation performances of given estimators \n",
+ "relative_ee_lin_ucb = ope.summarize_estimators_comparison(\n",
+ " ground_truth_policy_value=policy_value_lin_ucb,\n",
+ " action_dist=action_dist_lin_ucb,\n",
+ " metric=\"relative-ee\", # \"relative-ee\" (relative estimation error) or \"se\" (squared error)\n",
+ ")\n",
+ "\n",
+ "# estimation performances of the three estimators (lower means accurate)\n",
+ "relative_ee_lin_ucb"
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"Please see [../examples/online](../online) for a more sophisticated example of the evaluation of OPE with online bandit algorithms."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
}
],
"metadata": {
"kernelspec": {
- "name": "python3",
"display_name": "Python 3.8.2 64-bit ('3.8.2')",
"metadata": {
"interpreter": {
"hash": "a588998c237fcc28dc215a10a422972d26151263dec0bff02e1a95f6e2b22b77"
}
- }
+ },
+ "name": "python3"
},
"language_info": {
"codemirror_mode": {
@@ -706,9 +736,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.2-final"
+ "version": "3.9.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
-}
\ No newline at end of file
+}
diff --git a/examples/quickstart/opl.ipynb b/examples/quickstart/opl.ipynb
index 0f52fb7b..401f1537 100644
--- a/examples/quickstart/opl.ipynb
+++ b/examples/quickstart/opl.ipynb
@@ -2,33 +2,35 @@
"cells": [
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"# Quickstart Example with Off-Policy Learners\n",
"---\n",
"This notebook provides an example of implementing several off-policy learning methods with synthetic logged bandit data.\n",
"\n",
- "The example consists of the follwoing four major steps:\n",
+ "The example consists of the following four major steps:\n",
"- (1) Generating Synthetic Data\n",
"- (2) Off-Policy Learning\n",
"- (3) Evaluation of Off-Policy Learners\n",
"\n",
"Please see [../examples/opl](../opl) for a more sophisticated example of the evaluation of off-policy learners with synthetic bandit data."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
"source": [
"# needed when using Google Colab\n",
"# !pip install obp"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
"source": [
"from sklearn.ensemble import RandomForestClassifier as RandomForest\n",
"from sklearn.linear_model import LogisticRegression\n",
@@ -38,45 +40,44 @@
"from obp.dataset import (\n",
" SyntheticBanditDataset,\n",
" logistic_reward_function,\n",
- " linear_reward_function,\n",
- " linear_behavior_policy\n",
+ " linear_reward_function\n",
")\n",
"from obp.policy import (\n",
" IPWLearner, \n",
+ " QLearner,\n",
" NNPolicyLearner, \n",
" Random\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 2,
- "source": [
- "# obp version\n",
- "print(obp.__version__)"
- ],
+ "execution_count": 10,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "0.5.0\n"
+ "0.5.2\n"
]
}
],
- "metadata": {}
+ "source": [
+ "# obp version\n",
+ "print(obp.__version__)"
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (1) Generating Synthetic Data\n",
"`obp.dataset.SyntheticBanditDataset` is an easy-to-use synthetic data generator.\n",
@@ -84,66 +85,59 @@
"It takes \n",
"- number of actions (`n_actions`, $|\\mathcal{A}|$)\n",
"- dimension of context vectors (`dim_context`, $d$)\n",
- "- reward function (`reward_function`, $q(x,a)=\\mathbb{E}[r \\mid x,a]$)\n",
- "- behavior policy (`behavior_policy_function`, $\\pi_b(a|x)$) \n",
+ "- reward function (`reward_function`, $q(x,a)=\\mathbb{E}[r|x,a]$)\n",
"\n",
- "as inputs and generates a synthetic logged bandit data that can be used to evaluate the performance of decision making policies (obtained by `off-policy learning`)."
- ],
- "metadata": {}
+ "as inputs and generates synthetic logged bandit data that can be used to evaluate the performance of decision making policies (obtained by `off-policy learning`)."
+ ]
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 11,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
- "# generate a synthetic bandit dataset with 10 actions\n",
- "# we use `logistic function` as the reward function and `linear_behavior_policy` as the behavior policy.\n",
- "# one can define their own reward function and behavior policy such as nonlinear ones. \n",
+ "# generate synthetic logged bandit data with 10 actions\n",
+ "# we use `logistic function` as the reward function and control the behavior policy with `beta`\n",
+ "# one can define their own reward function and behavior policy function such as nonlinear ones. \n",
"dataset = SyntheticBanditDataset(\n",
" n_actions=10,\n",
" dim_context=5,\n",
- " tau=0.2, # temperature hyperparameter to control the entropy of the behavior policy\n",
+ " beta=-2, # inverse temperature parameter to control the optimality and entropy of the behavior policy\n",
" reward_type=\"binary\", # \"binary\" or \"continuous\"\n",
" reward_function=logistic_reward_function,\n",
- " behavior_policy_function=linear_behavior_policy,\n",
" random_state=12345,\n",
")"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
"source": [
"# obtain training and test sets of synthetic logged bandit data\n",
"n_rounds_train, n_rounds_test = 10000, 10000\n",
"bandit_feedback_train = dataset.obtain_batch_bandit_feedback(n_rounds=n_rounds_train)\n",
"bandit_feedback_test = dataset.obtain_batch_bandit_feedback(n_rounds=n_rounds_test)"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
- "the logged bandit data is collected by the behavior policy as follows.\n",
+ "the logged bandit dataset is collected by the behavior policy as follows.\n",
"\n",
- "$ \\mathcal{D}_b := \\{(x_i,a_i,r_i)\\}_{i=1}^n$ where $(x,a,r) \\sim p(x)\\pi_b(a \\mid x)p(r \\mid x,a) $"
- ],
- "metadata": {}
+ "$ \\mathcal{D}_b := \\{(x_i,a_i,r_i)\\}_{i=1}^n$ where $(x,a,r) \\sim p(x)\\pi_b(a | x)p(r | x,a) $"
+ ]
},
{
"cell_type": "code",
- "execution_count": 5,
- "source": [
- "# `bandit_feedback` is a dictionary storing synthetic logged bandit feedback\n",
- "bandit_feedback_train"
- ],
+ "execution_count": 13,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/plain": [
"{'n_rounds': 10000,\n",
@@ -165,75 +159,139 @@
" [0, 0, 0, 0, 0, 0, 0, 1, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0, 0, 1, 0],\n",
" [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]),\n",
- " 'action': array([6, 1, 1, ..., 0, 1, 6]),\n",
+ " 'action': array([9, 2, 1, ..., 0, 3, 7]),\n",
" 'position': None,\n",
- " 'reward': array([1, 1, 1, ..., 0, 0, 1]),\n",
- " 'expected_reward': array([[0.80210203, 0.73828559, 0.83199558, ..., 0.81190503, 0.70617705,\n",
- " 0.68985306],\n",
- " [0.94119582, 0.93473317, 0.91345213, ..., 0.94140688, 0.93152449,\n",
- " 0.90132868],\n",
- " [0.87248862, 0.67974991, 0.66965669, ..., 0.79229752, 0.82712978,\n",
- " 0.74923536],\n",
+ " 'reward': array([1, 0, 0, ..., 0, 0, 1]),\n",
+ " 'expected_reward': array([[0.81612381, 0.62585527, 0.3867853 , ..., 0.62527072, 0.58635322,\n",
+ " 0.38638404],\n",
+ " [0.52901819, 0.30298844, 0.47277431, ..., 0.67711224, 0.55584904,\n",
+ " 0.60472268],\n",
+ " [0.47070198, 0.44459997, 0.40016028, ..., 0.71193979, 0.49769816,\n",
+ " 0.71876507],\n",
" ...,\n",
- " [0.66717573, 0.81583571, 0.77012708, ..., 0.87757008, 0.57652468,\n",
- " 0.80629132],\n",
- " [0.52526986, 0.39952563, 0.61892038, ..., 0.53610389, 0.49392728,\n",
- " 0.58408936],\n",
- " [0.55375831, 0.11662199, 0.807396 , ..., 0.22532856, 0.42629292,\n",
- " 0.24120499]]),\n",
- " 'pscore': array([0.29815101, 0.30297159, 0.30297159, ..., 0.04788441, 0.30297159,\n",
- " 0.29815101])}"
+ " [0.85229627, 0.60343336, 0.18287765, ..., 0.54555271, 0.77112271,\n",
+ " 0.18843358],\n",
+ " [0.78101646, 0.68586084, 0.40700551, ..., 0.45177062, 0.63841605,\n",
+ " 0.48128186],\n",
+ " [0.88757249, 0.75954519, 0.82721872, ..., 0.3422384 , 0.33609074,\n",
+ " 0.84539856]]),\n",
+ " 'pi_b': array([[[0.05132742],\n",
+ " [0.07509562],\n",
+ " [0.12113457],\n",
+ " ...,\n",
+ " [0.07518346],\n",
+ " [0.08126913],\n",
+ " [0.12123183]],\n",
+ " \n",
+ " [[0.0913545 ],\n",
+ " [0.14356775],\n",
+ " [0.10223103],\n",
+ " ...,\n",
+ " [0.06793555],\n",
+ " [0.08658147],\n",
+ " [0.07851884]],\n",
+ " \n",
+ " [[0.11315543],\n",
+ " [0.1192195 ],\n",
+ " [0.13030082],\n",
+ " ...,\n",
+ " [0.06984557],\n",
+ " [0.1072079 ],\n",
+ " [0.06889862]],\n",
+ " \n",
+ " ...,\n",
+ " \n",
+ " [[0.04138881],\n",
+ " [0.0680836 ],\n",
+ " [0.15788198],\n",
+ " ...,\n",
+ " [0.07643935],\n",
+ " [0.04868435],\n",
+ " [0.15613733]],\n",
+ " \n",
+ " [[0.05611272],\n",
+ " [0.06787541],\n",
+ " [0.11855589],\n",
+ " ...,\n",
+ " [0.10840284],\n",
+ " [0.07463155],\n",
+ " [0.10218979]],\n",
+ " \n",
+ " [[0.04997525],\n",
+ " [0.06455919],\n",
+ " [0.05638682],\n",
+ " ...,\n",
+ " [0.14873944],\n",
+ " [0.15057953],\n",
+ " [0.05437344]]]),\n",
+ " 'pscore': array([0.12123183, 0.10223103, 0.1192195 , ..., 0.04138881, 0.11885694,\n",
+ " 0.14873944])}"
]
},
+ "execution_count": 13,
"metadata": {},
- "execution_count": 5
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "# `bandit_feedback` is a dictionary storing synthetic logged bandit data\n",
+ "bandit_feedback_train"
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (2) Off-Policy Learning\n",
"After generating synthetic data, we now train some decision making policies.\n",
"\n",
- "To train policies, we use\n",
+ "To train policies on logged bandit data, we use\n",
"\n",
"- `obp.policy.NNPolicyLearner` (Neural Network Policy Learner)\n",
"- `obp.policy.IPWLearner`\n",
"\n",
- "For NN Learner, we use \n",
+ "For `NN Learner`, we use \n",
"- Direct Method (\"dm\")\n",
"- InverseProbabilityWeighting (\"ipw\")\n",
"- DoublyRobust (\"dr\") \n",
"\n",
"as its objective functions (`off_policy_objective`). \n",
"\n",
- "For IPW Learner, we use *RandomForestClassifier* and *LogisticRegression* implemented in scikit-learn for base machine learning methods."
- ],
- "metadata": {}
+ "For `IPW Learner`, we use `RandomForestClassifier` and *LogisticRegression* implemented in scikit-learn for base ML methods."
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"A policy is trained by maximizing an OPE estimator as an objective function as follows.\n",
"\n",
"$$ \\hat{\\pi} \\in \\arg \\max_{\\pi \\in \\Pi} \\hat{V} (\\pi; \\mathcal{D}_{tr}) - \\lambda \\cdot \\Omega (\\pi) $$\n",
"\n",
"where $\\hat{V}(\\cdot; \\mathcal{D})$ is an off-policy objective and $\\mathcal{D}_{tr}$ is a training bandit dataset. $\\Omega (\\cdot)$ is a regularization term."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "q-func learning: 100%|██████████| 200/200 [00:17<00:00, 11.33it/s]\n",
+ "policy learning: 100%|██████████| 200/200 [00:47<00:00, 4.18it/s]\n"
+ ]
+ }
+ ],
"source": [
"# define NNPolicyLearner with DM as its objective function\n",
"nn_dm = NNPolicyLearner(\n",
@@ -255,22 +313,21 @@
"action_dist_nn_dm = nn_dm.predict_proba(\n",
" context=bandit_feedback_test[\"context\"]\n",
")"
- ],
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stderr",
+ "output_type": "stream",
"text": [
- "q-func learning: 100%|██████████| 200/200 [00:16<00:00, 11.99it/s]\n",
- "policy learning: 100%|██████████| 200/200 [00:40<00:00, 4.93it/s]\n"
+ "policy learning: 100%|██████████| 200/200 [00:41<00:00, 4.80it/s]\n"
]
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 7,
"source": [
"# define NNPolicyLearner with IPW as its objective function\n",
"nn_ipw = NNPolicyLearner(\n",
@@ -293,21 +350,22 @@
"action_dist_nn_ipw = nn_ipw.predict_proba(\n",
" context=bandit_feedback_test[\"context\"]\n",
")"
- ],
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stderr",
+ "output_type": "stream",
"text": [
- "policy learning: 100%|██████████| 200/200 [00:36<00:00, 5.50it/s]\n"
+ "q-func learning: 100%|██████████| 200/200 [00:18<00:00, 11.03it/s]\n",
+ "policy learning: 100%|██████████| 200/200 [00:56<00:00, 3.54it/s]\n"
]
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 8,
"source": [
"# define NNPolicyLearner with DR as its objective function\n",
"nn_dr = NNPolicyLearner(\n",
@@ -330,22 +388,15 @@
"action_dist_nn_dr = nn_dr.predict_proba(\n",
" context=bandit_feedback_test[\"context\"]\n",
")"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stderr",
- "text": [
- "q-func learning: 100%|██████████| 200/200 [00:15<00:00, 12.70it/s]\n",
- "policy learning: 100%|██████████| 200/200 [00:51<00:00, 3.85it/s]\n"
- ]
- }
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 17,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
"# define IPWLearner with Logistic Regression as its base ML model\n",
"ipw_lr = IPWLearner(\n",
@@ -365,15 +416,15 @@
"action_dist_ipw_lr = ipw_lr.predict(\n",
" context=bandit_feedback_test[\"context\"]\n",
")"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 18,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
"# define IPWLearner with Random Forest as its base ML model\n",
"ipw_rf = IPWLearner(\n",
@@ -395,15 +446,13 @@
"action_dist_ipw_rf = ipw_rf.predict(\n",
" context=bandit_feedback_test[\"context\"]\n",
")"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
"source": [
"# define Uniform Random Policy as a baseline evaluation policy\n",
"random = Random(n_actions=dataset.n_actions,)\n",
@@ -412,61 +461,76 @@
"action_dist_random = random.compute_batch_action_dist(\n",
" n_rounds=bandit_feedback_test[\"n_rounds\"]\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 12,
- "source": [
- "# action_dist is a probability distribution over actions (can be deterministic)\n",
- "action_dist_ipw_lr[:, :, 0]"
- ],
+ "execution_count": 20,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/plain": [
- "array([[0., 0., 0., ..., 1., 0., 0.],\n",
+ "array([[1., 0., 0., ..., 0., 0., 0.],\n",
" [0., 0., 1., ..., 0., 0., 0.],\n",
" [0., 0., 1., ..., 0., 0., 0.],\n",
" ...,\n",
- " [0., 0., 0., ..., 0., 0., 0.],\n",
- " [0., 0., 0., ..., 0., 1., 0.],\n",
- " [0., 0., 0., ..., 0., 0., 0.]])"
+ " [0., 0., 1., ..., 0., 0., 0.],\n",
+ " [0., 0., 0., ..., 0., 0., 1.],\n",
+ " [0., 0., 0., ..., 0., 1., 0.]])"
]
},
+ "execution_count": 20,
"metadata": {},
- "execution_count": 12
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "# action_dist is a probability distribution over actions (can be deterministic)\n",
+ "action_dist_ipw_lr[:, :, 0]"
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (3) Evaluation of Off-Policy Learners\n",
- "Our final step is the evaluation and comparison of the off-policy learnres.\n",
+ "Our final step is the evaluation and comparison of the off-policy learners.\n",
"\n",
"With synthetic data, we can calculate the policy value of the off-policy learners as follows. \n",
"\n",
"$$V(\\pi_e) \\approx \\frac{1}{|\\mathcal{D}_{te}|} \\sum_{i=1}^{|\\mathcal{D}_{te}|} \\mathbb{E}_{a \\sim \\pi_e(a|x_i)} [q(x_i, a)], \\; \\, where \\; \\, q(x,a) := \\mathbb{E}_{r \\sim p(r|x,a)} [r]$$\n",
"\n",
"where $\\mathcal{D}_{te}$ is the test set of logged bandit data."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 21,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "policy value of NN Policy Learner with DM: 0.7802291611331453\n",
+ "policy value of NN Policy Learner with IPW: 0.7606159767153489\n",
+ "policy value of NN Policy Learner with DR: 0.7639272034893267\n",
+ "policy value of IPW Learner with Logistic Regression: 0.7933299733929567\n",
+ "policy value of IPW Learner with Random Forest: 0.7050722711915117\n",
+ "policy value of Unifrom Random: 0.49992528545607745\n"
+ ]
+ }
+ ],
"source": [
"# we calculate the policy values of the trained policies based on the expected rewards of the test data\n",
"policy_names = [\n",
@@ -492,53 +556,39 @@
" action_dist=action_dist,\n",
" )\n",
" print(f'policy value of {name}: {true_policy_value}')"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "policy value of NN Policy Learner with DM: 0.7401610285643739\n",
- "policy value of NN Policy Learner with IPW: 0.7219954182377301\n",
- "policy value of NN Policy Learner with DR: 0.7239531174451277\n",
- "policy value of IPW Learner with Logistic Regression: 0.7225216225722526\n",
- "policy value of IPW Learner with Random Forest: 0.6826465969408197\n",
- "policy value of Unifrom Random: 0.6056038101021686\n"
- ]
- }
- ],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
- "In fact, NNPolicyLearner maximizing the DM estimator seems the best in this simple setting."
- ],
- "metadata": {}
+ "In fact, `IPWLearner` with `LogisticRegression` seems to be the best in this simple setting."
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
- "We can iterate the above process several times to get more relibale results.\n",
+ "We can iterate the above process several times to get more reliable results.\n",
"\n",
"Please see [../examples/opl](../opl) for a more sophisticated example of the evaluation of off-policy learners with synthetic bandit data."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
}
],
"metadata": {
+ "interpreter": {
+ "hash": "2983b6b3c1063922151fa571d104b6ca2cb14ad83ab0b1242d2b4dea4ead8697"
+ },
"kernelspec": {
- "name": "python3",
- "display_name": "Python 3.9.5 64-bit ('3.9.5': pyenv)"
+ "display_name": "Python 3.9.5 64-bit ('zr-obp': pyenv)",
+ "name": "python3"
},
"language_info": {
"codemirror_mode": {
@@ -551,11 +601,8 @@
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.5"
- },
- "interpreter": {
- "hash": "2ff39f3b22306140fd87fd114528320b56c4f8c8e196b421a3ea939a2b6b4692"
}
},
"nbformat": 4,
"nbformat_minor": 2
-}
\ No newline at end of file
+}
diff --git a/examples/quickstart/synthetic.ipynb b/examples/quickstart/synthetic.ipynb
index 764b6835..5dc3e4b3 100644
--- a/examples/quickstart/synthetic.ipynb
+++ b/examples/quickstart/synthetic.ipynb
@@ -1,59 +1,37 @@
{
- "metadata": {
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.5"
- },
- "orig_nbformat": 2,
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3.9.5 64-bit ('3.9.5': pyenv)"
- },
- "interpreter": {
- "hash": "2ff39f3b22306140fd87fd114528320b56c4f8c8e196b421a3ea939a2b6b4692"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2,
"cells": [
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"# Quickstart Example with Synthetic Bandit Data\n",
"---\n",
"This notebook provides an example of conducting OPE of several different evaluation policies with synthetic logged bandit data.\n",
"\n",
- "The example consists of the follwoing four major steps:\n",
+ "The example consists of the following four major steps:\n",
"- (1) Generating Synthetic Data\n",
"- (2) Off-Policy Learning\n",
"- (3) Off-Policy Evaluation\n",
"- (4) Evaluation of OPE Estimators\n",
"\n",
"Please see [../examples/synthetic](../synthetic) for a more sophisticated example of the evaluation of OPE with synthetic bandit data."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": 1,
+ "metadata": {},
+ "outputs": [],
"source": [
"# needed when using Google Colab\n",
"# !pip install obp"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
"source": [
"from sklearn.ensemble import RandomForestClassifier as RandomForest\n",
"from sklearn.linear_model import LogisticRegression\n",
@@ -63,8 +41,7 @@
"from obp.dataset import (\n",
" SyntheticBanditDataset,\n",
" logistic_reward_function,\n",
- " linear_reward_function,\n",
- " linear_behavior_policy\n",
+ " linear_reward_function\n",
")\n",
"from obp.policy import IPWLearner, Random\n",
"from obp.ope import (\n",
@@ -74,37 +51,36 @@
" DirectMethod,\n",
" DoublyRobust\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 2,
- "source": [
- "# obp version\n",
- "print(obp.__version__)"
- ],
+ "execution_count": 3,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "0.5.0\n"
+ "0.5.2\n"
]
}
],
- "metadata": {}
+ "source": [
+ "# obp version\n",
+ "print(obp.__version__)"
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (1) Generating Synthetic Data\n",
"`obp.dataset.SyntheticBanditDataset` is an easy-to-use synthetic data generator.\n",
@@ -112,66 +88,59 @@
"It takes \n",
"- number of actions (`n_actions`, $|\\mathcal{A}|$)\n",
"- dimension of context vectors (`dim_context`, $d$)\n",
- "- reward function (`reward_function`, $q(x,a)=\\mathbb{E}[r \\mid x,a]$)\n",
- "- behavior policy (`behavior_policy_function`, $\\pi_b(a|x)$) \n",
+ "- reward function (`reward_function`, $q(x,a)=\\mathbb{E}[r|x,a]$)\n",
"\n",
"as inputs and generates synthetic logged bandit data that can be used to evaluate the performance of decision making policies (obtained by `off-policy learning`) and OPE estimators."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 4,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
"# generate synthetic logged bandit data with 10 actions\n",
- "# we use `logistic function` as the reward function and `linear_behavior_policy` as the behavior policy.\n",
- "# one can define their own reward function and behavior policy such as nonlinear ones. \n",
+ "# we use `logistic function` as the reward function and control the behavior policy with `beta`\n",
+ "# one can define their own reward function and behavior policy function such as nonlinear ones. \n",
"dataset = SyntheticBanditDataset(\n",
" n_actions=10,\n",
" dim_context=5,\n",
- " tau=1.0, # temperature hyperparameter to control the entropy of the behavior policy\n",
+ " beta=1.0, # inverse temperature parameter to control the optimality and entropy of the behavior policy\n",
" reward_type=\"binary\", # \"binary\" or \"continuous\"\n",
" reward_function=logistic_reward_function,\n",
- " behavior_policy_function=linear_behavior_policy,\n",
" random_state=12345,\n",
")"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
"source": [
- "# obtain training and test sets of synthetic logged bandit feedback\n",
+ "# obtain training and test sets of synthetic logged bandit data\n",
"n_rounds_train, n_rounds_test = 100000, 100000\n",
"bandit_feedback_train = dataset.obtain_batch_bandit_feedback(n_rounds=n_rounds_train)\n",
"bandit_feedback_test = dataset.obtain_batch_bandit_feedback(n_rounds=n_rounds_test)"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
- "the logged bandit feedback is collected by the behavior policy as follows.\n",
+ "Note that a logged bandit dataset is collected by the behavior policy as follows.\n",
"\n",
"$ \\mathcal{D}_b := \\{(x_i,a_i,r_i)\\}$ where $(x,a,r) \\sim p(x)\\pi_b(a \\mid x)p(r \\mid x,a) $"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 5,
- "source": [
- "# `bandit_feedback` is a dictionary storing synthetic logged bandit data\n",
- "bandit_feedback_train"
- ],
+ "execution_count": 6,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/plain": [
"{'n_rounds': 100000,\n",
@@ -193,53 +162,110 @@
" [0, 0, 0, 0, 0, 0, 0, 1, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0, 0, 1, 0],\n",
" [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]),\n",
- " 'action': array([9, 2, 1, ..., 9, 1, 5]),\n",
+ " 'action': array([9, 3, 2, ..., 9, 1, 6]),\n",
" 'position': None,\n",
- " 'reward': array([0, 1, 1, ..., 0, 0, 0]),\n",
- " 'expected_reward': array([[0.80210203, 0.73828559, 0.83199558, ..., 0.81190503, 0.70617705,\n",
- " 0.68985306],\n",
- " [0.94119582, 0.93473317, 0.91345213, ..., 0.94140688, 0.93152449,\n",
- " 0.90132868],\n",
- " [0.87248862, 0.67974991, 0.66965669, ..., 0.79229752, 0.82712978,\n",
- " 0.74923536],\n",
+ " 'reward': array([1, 1, 0, ..., 1, 0, 1]),\n",
+ " 'expected_reward': array([[0.816903 , 0.62620894, 0.38626891, ..., 0.62562239, 0.58656774,\n",
+ " 0.38586634],\n",
+ " [0.52901931, 0.30223176, 0.47256314, ..., 0.6776292 , 0.5559511 ,\n",
+ " 0.60500302],\n",
+ " [0.47048308, 0.4442848 , 0.39968853, ..., 0.71255194, 0.49758072,\n",
+ " 0.71939402],\n",
+ " ...,\n",
+ " [0.59380127, 0.47008488, 0.86169364, ..., 0.24696277, 0.46450629,\n",
+ " 0.88492985],\n",
+ " [0.52537153, 0.60558918, 0.52818568, ..., 0.51244723, 0.69592556,\n",
+ " 0.29777665],\n",
+ " [0.69925393, 0.6911979 , 0.15701101, ..., 0.55612729, 0.70225288,\n",
+ " 0.47162585]]),\n",
+ " 'pi_b': array([[[0.13293841],\n",
+ " [0.10985836],\n",
+ " [0.08642283],\n",
+ " ...,\n",
+ " [0.10979394],\n",
+ " [0.10558863],\n",
+ " [0.08638804]],\n",
+ " \n",
+ " [[0.10165887],\n",
+ " [0.08103128],\n",
+ " [0.0960786 ],\n",
+ " ...,\n",
+ " [0.11794668],\n",
+ " [0.10443392],\n",
+ " [0.10968433]],\n",
+ " \n",
+ " [[0.09125127],\n",
+ " [0.08889169],\n",
+ " [0.08501455],\n",
+ " ...,\n",
+ " [0.11624334],\n",
+ " [0.09375777],\n",
+ " [0.11704142]],\n",
+ " \n",
" ...,\n",
- " [0.64856003, 0.38145901, 0.84476094, ..., 0.40962057, 0.77114661,\n",
- " 0.65752798],\n",
- " [0.73208527, 0.82012699, 0.78161352, ..., 0.72361416, 0.8652249 ,\n",
- " 0.82571751],\n",
- " [0.40348366, 0.24485417, 0.24037926, ..., 0.49613133, 0.30714854,\n",
- " 0.5527749 ]]),\n",
- " 'pscore': array([0.07250876, 0.10335615, 0.14110696, ..., 0.07250876, 0.14110696,\n",
- " 0.11360397])}"
+ " \n",
+ " [[0.10443557],\n",
+ " [0.09228244],\n",
+ " [0.13651885],\n",
+ " ...,\n",
+ " [0.07382754],\n",
+ " [0.09176907],\n",
+ " [0.13972817]],\n",
+ " \n",
+ " [[0.10905662],\n",
+ " [0.11816534],\n",
+ " [0.10936396],\n",
+ " ...,\n",
+ " [0.10765621],\n",
+ " [0.12933698],\n",
+ " [0.0868578 ]],\n",
+ " \n",
+ " [[0.11408153],\n",
+ " [0.11316618],\n",
+ " [0.06633187],\n",
+ " ...,\n",
+ " [0.09886811],\n",
+ " [0.11442417],\n",
+ " [0.09085686]]]),\n",
+ " 'pscore': array([0.08638804, 0.11574433, 0.08501455, ..., 0.13972817, 0.11816534,\n",
+ " 0.09218379])}"
]
},
+ "execution_count": 6,
"metadata": {},
- "execution_count": 5
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "# `bandit_feedback` is a dictionary storing synthetic logged bandit data\n",
+ "bandit_feedback_train"
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (2) Off-Policy Learning\n",
"After generating synthetic data, we now train some candidate evaluation policies using the training bandit dataset.
\n",
"\n",
"We use `obp.ope.IPWLearner` to train evaluation policies. \n",
- "We also use *RandomForestClassifier* and *LogisticRegression* implemented in scikit-learn for base machine learning methods."
- ],
- "metadata": {}
+ "We also use `RandomForestClassifier` and `LogisticRegression` implemented in scikit-learn for base ML methods."
+ ]
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 7,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
"# define IPWLearner with Logistic Regression as its base ML model\n",
"ipw_lr = IPWLearner(\n",
@@ -257,15 +283,15 @@
"\n",
"# obtains action choice probabilities for the test set\n",
"action_dist_ipw_lr = ipw_lr.predict(context=bandit_feedback_test[\"context\"])"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 8,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
"# define IPWLearner with Random Forest as its base ML model\n",
"ipw_rf = IPWLearner(\n",
@@ -283,15 +309,13 @@
"\n",
"# obtains action choice probabilities for the test set\n",
"action_dist_ipw_rf = ipw_rf.predict(context=bandit_feedback_test[\"context\"])"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
"source": [
"# define Uniform Random Policy as a baseline evaluation policy\n",
"random = Random(n_actions=dataset.n_actions,)\n",
@@ -300,49 +324,48 @@
"action_dist_random = random.compute_batch_action_dist(\n",
" n_rounds=bandit_feedback_test[\"n_rounds\"]\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 9,
- "source": [
- "# action_dist is a probability distribution over actions (can be deterministic)\n",
- "action_dist_ipw_lr[:, :, 0]"
- ],
+ "execution_count": 10,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/plain": [
"array([[0., 0., 1., ..., 0., 0., 0.],\n",
- " [0., 0., 0., ..., 0., 0., 1.],\n",
- " [0., 0., 0., ..., 0., 0., 0.],\n",
+ " [0., 0., 0., ..., 0., 1., 0.],\n",
+ " [1., 0., 0., ..., 0., 0., 0.],\n",
" ...,\n",
- " [0., 0., 0., ..., 0., 0., 1.],\n",
- " [0., 0., 0., ..., 0., 0., 1.],\n",
- " [0., 0., 0., ..., 0., 0., 1.]])"
+ " [0., 0., 0., ..., 0., 1., 0.],\n",
+ " [0., 0., 0., ..., 0., 0., 0.],\n",
+ " [0., 0., 0., ..., 0., 1., 0.]])"
]
},
+ "execution_count": 10,
"metadata": {},
- "execution_count": 9
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "# action_dist is a probability distribution over actions (can be deterministic)\n",
+ "action_dist_ipw_lr[:, :, 0]"
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (3) Off-Policy Evaluation (OPE)\n",
- "Our next step is OPE, which attempts to estimate the performance of evaluation policies using the logged bandit feedback and OPE estimators.\n",
+ "Our next step is OPE, which aims to estimate the performance of evaluation policies using logged bandit data and OPE estimators.\n",
"\n",
"Here, we use \n",
"- `obp.ope.InverseProbabilityWeighting` (IPW)\n",
@@ -350,37 +373,38 @@
"- `obp.ope.DoublyRobust` (DR)\n",
"\n",
"as OPE estimators and visualize the OPE results."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"### (3-1) Obtaining a reward estimator\n",
"A reward estimator $\\hat{q}(x,a)$ is needed for model dependent estimators such as DM or DR.\n",
"\n",
"$\\hat{q}(x,a) \\approx \\mathbb{E} [r \\mid x,a]$"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
"source": [
- "# estimate the expected reward by using an ML model (Logistic Regression here)\n",
+ "# estimate the expected rewards by using an ML model (Logistic Regression here)\n",
"# the estimated rewards are used by model-dependent estimators such as DM and DR\n",
"regression_model = RegressionModel(\n",
" n_actions=dataset.n_actions,\n",
" action_context=dataset.action_context,\n",
" base_model=LogisticRegression(random_state=12345),\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
"source": [
"estimated_rewards_by_reg_model = regression_model.fit_predict(\n",
" context=bandit_feedback_test[\"context\"],\n",
@@ -389,28 +413,30 @@
" n_folds=3, # use 3-fold cross-fitting\n",
" random_state=12345,\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"please refer to https://arxiv.org/abs/2002.08536 about the details of the cross-fitting procedure."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"### (3-2) Off-Policy Evaluation\n",
"$V(\\pi_e) \\approx \\hat{V} (\\pi_e; \\mathcal{D}_b, \\theta)$ using DM, IPW, and DR"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 13,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
"# estimate the policy value of the evaluation policies based on their action choice probabilities\n",
"# it is possible to set multiple OPE estimators to the `ope_estimators` argument\n",
@@ -418,15 +444,37 @@
" bandit_feedback=bandit_feedback_test,\n",
" ope_estimators=[InverseProbabilityWeighting(), DirectMethod(), DoublyRobust()]\n",
")"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 14,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " mean 95.0% CI (lower) 95.0% CI (upper)\n",
+ "ipw 0.794666 0.784136 0.810203\n",
+ "dm 0.598203 0.597871 0.598573\n",
+ "dr 0.794610 0.784466 0.802190 \n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"# estimate the policy value of IPWLearner with Logistic Regression\n",
"estimated_policy_value_a, estimated_interval_a = ope.summarize_off_policy_estimates(\n",
@@ -435,44 +483,44 @@
")\n",
"print(estimated_interval_a, '\\n')\n",
"\n",
- "# visualize policy values of IPWLearner with Logistic Regression estimated by the three OPE estimators\n",
+ "# visualize the estimated policy values of IPWLearner with Logistic Regression\n",
"ope.visualize_off_policy_estimates(\n",
" action_dist=action_dist_ipw_lr,\n",
" estimated_rewards_by_reg_model=estimated_rewards_by_reg_model,\n",
- " n_bootstrap_samples=1000, # number of resampling performed in the bootstrap procedure\n",
+ " n_bootstrap_samples=1000, # number of resampling performed in bootstrap sampling\n",
" random_state=12345,\n",
")"
- ],
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "tags": []
+ },
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
" mean 95.0% CI (lower) 95.0% CI (upper)\n",
- "ipw 0.784805 0.767594 0.803541\n",
- "dm 0.648009 0.646855 0.649021\n",
- "dr 0.770691 0.760420 0.778522 \n",
+ "ipw 0.731147 0.716350 0.743979\n",
+ "dm 0.592805 0.592405 0.593211\n",
+ "dr 0.728655 0.721025 0.736589 \n",
"\n"
]
},
{
- "output_type": "display_data",
"data": {
- "image/png": "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",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgIAAAGSCAYAAACRy6kSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABMp0lEQVR4nO3deVwTd/4/8Fc4AiSIgBFFUFFAEBQo3uCBCOoqVdt6dnufWrXftrq2u2611m4rrb3Wc9vKrrq1Kmrr0bUteKBCxQu1EhQUQYEioCB3AiS/P/yREiFhAgmIeT0fjz5qZj4z846dJq/MfD6fEanVajWIiIjILFm0dwFERETUfhgEiIiIzBiDABERkRljECAiIjJjDAJERERmjEGAiIjIjDEIEBERmTEGASIiIjPGIEBERGTGrIQ2zMvLw2+//Ya0tDQUFRWhrKwMYrEYDg4O8PDwgL+/PwYMGACxWGzKeomIiMiIRM1NMZyYmIhffvkFly9fbnZnUqkUYWFhmDhxIlxcXIxWJBEREZmGziBw6dIlbNmyBdnZ2ZBIJBgyZAh8fX3h6ekJR0dH2NvbQ6lUoqysDHl5eUhPT8fFixeRkZEBKysr/OlPf8Ljjz8OiUTS1u+JiIiIBNIZBGbNmoU+ffpg6tSpGDx4MKytrQXt8Pfff0dcXBzi4uIwdepUTJ8+3agFExERkfHoDAKnTp3C0KFDW7zjkpISFBQUoF+/fi3eBxEREZlWs30EiIiI6OEleNTAwyYvL6+9SyAiImoTPXr00LmO8wgQERGZMb1XBBYsWGDwDkUiEdasWdPigoiIiKjt6A0ChYWFbVUHERERtQO9nQVbGgS6du3a4oLaCvsIEBGRudDXR0DvFYGO8IVORERELcfOgkRERGZM7xUBlUqFL774AiKRCAsXLoSVVdPNa2trsWbNGohEIrzxxhumqJOIiIhMQO8VgeTkZCQnJ2Pw4ME6QwAAWFlZYciQIfj1119x8uRJoxdJREREpqE3CPz6669wdnbGyJEjm91RaGgonJ2dceLECaMVR0RERKalNwhcu3YN/v7+EIlEze5IJBJhwIAByMzMNFpxREREZFp6g0BJSQm6dOkieGfOzs64e/duq4siIiKitqE3CFhZWaGmpkbwzmpqavT2JSAiIqIHi95vbScnJ2RnZwveWXZ2NpycnFpdFLW/6OhoFBUVQSaT4e23327vcoiIyET0XhHw8fGBXC5Hfn5+szvKz8+HXC6Hr6+v0Yqj9lNUVIT8/HwUFRW1dylERGRCeoNAZGQkVCoVPvvsM733/ktLS/H5559DpVIhIiLC6EUSERGRaei9NeDl5YWIiAjEx8fjrbfeQmRkJAYMGABnZ2cAwJ07d3Dp0iXEx8ejrKwMkZGR8PLyapPCiYiIqPWa7dn3wgsvQKVS4fDhw/j+++/x/fffN9lu3LhxeOGFF4xeIBERUVPYl8k4mg0ClpaWePXVVxEWFoa4uDhcuXIFJSUlAABHR0f4+voiIiICPj4+pq6ViIhIo74vE7WO4LF+Pj4+/LInIiJ6yHDQv4F+/8tL7V1Cm6gtVP7/f98ym/fs+sk37V0CEVGbYxAgInrI/Lzv9/YuoU1UlNdq/m0u73nCFFej71Pv8EEiIiJ6uDEIEBERmTEGASIiIjPGIEBERGTG2FmQiIg6JHupk9a/qWVaFQQKCgqQk5MDAHB3d4eLi4tRiqL252QJAKL//28iogfPuNEvt3cJD4UWBYGqqips3LgRJ0+e1Fo+YsQIzJ07F7a2toL3lZOTg5iYGKSnp0MqlSI8PBwzZsyAhYXuuxY7d+7Erl27mlw3Z84cPPbYY4KPT0172Vnc3iUQEVEbaFEQ2LRpEy5evIiZM2eib9++qKmpwZkzZ5CQkAAbGxvMmzdP0H7Ky8uxcuVKuLu7Y8mSJcjPz8fWrVuhVqsxe/ZsnduNGzcOQUFBWstOnz6NvXv34pFHHmnJWyIiIjJLeoOAQqGAjY1No+WnT5/GSy+9hFGjRmmWDR06FAqFAqdOnRIcBOLi4qBUKrFo0SJIJBIEBASgqqoKsbGxmDJlCiQSSZPbdenSBV26dNFatnv3bri5ucHDw0PQsYmIiKiZUQOLFy/GpUuXGi2vq6uDnZ1do+V2dnZQqVSCD37+/HkEBgZqfeGHhoZCqVRCLpcL3k9ZWRkuXryI0NBQwdsQERFRM1cEvL29sXLlSowbNw5PP/205st/wIAB2LRpE6qrq9GnTx/U1NTg7NmzSEhIwKBBgwQfPDc3F/7+/lrLZDIZbGxskJeXJ3g/ycnJqKurYxAgIiIykN4g8Prrr2PkyJH4+uuvkZKSgldeeQWPPPIIXnrpJXzyySdYs2aNVvu+ffvihRdeEHzwiooKSKXSRsulUinKy8sF7ycxMRF9+vSBq6vuOZjj4+MRHx8PAFi1ahVkMpng/TdkHrNZm6eWnhNEDx5+Uj2sTPE51WxnweDgYHz66afYsmULVq1ahVGjRuG5555DdHQ0Ll68iNzcXAD3hg8OHDjQ6AU2p7i4GHK5HH/+85/1touIiEBERITmdVFRkalLow6G5wQRPeha+jnVo0cPnesEjRqQSCSYO3cuQkJC8NVXX2HRokV48cUXMXToUAQEBLSoKODeL//KyspGyysqKmBvby9oH7/++isAICQkpMV1EBERmSuDphgOCAjA6tWrMXToUHz66af4/PPPUVpa2uKDu7m5aa4o1CsqKoJCodCbXhpKTEyEr68vL+sSERG1gKAgUFpaiszMTJSWlsLW1hYvvvgi3nvvPWRlZeHNN9/EiRMnWnTwoKAgXLhwAVVVVZplSUlJEIvF8PPza3b7goICZGRksJMgERFRC+m9NVBdXY0NGzZozSA4bNgwvPbaa+jfvz8++eQTbN++HevWrUNSUhJeeeUVODo6Cj54ZGQkDh48iNWrV2Pq1KkoKChAbGwsoqKitIYULly4EH5+fo3mJ0hKSoKlpSWGDx8u+JhERET0B71XBLZt24aTJ09izJgxePHFFxEWFobk5GR8++23AACxWIxnnnkGK1euRH5+Pt58800cOXJE8MHt7e2xbNkyqFQqREdHY+fOnZg8eTJmzpyp1U6lUjU5P0FiYiIGDBgABwcHwcckIiKiP4jUarVa18p58+bB29sbb731lmbZZ599hoyMDGzYsEGrbW1tLXbt2oV9+/Zh27ZtpqvYSAyZp6Ch3//ykpEroQeF6yfftHcJREbx8z4OH3xYTZiie5i8Pi0eNaBQKBpN5dulS5cmZxu0srLC7NmzeZmeiIioA9F7a8Db2xvHjh3D5cuXUVtbi/T0dBw/fhze3t46t+Fc/0RERB2H3isCzz//PFasWIHly5drljk7O+O5554zdV1ERETUBvQGge7du+OLL77A2bNnUVRUBJlMhuDgYNja2rZVfURERGRCzc4saGNjw1n7iIiIHlIGzSxIREREDxdBzxpoypkzZ5CWlgaFQgEXFxeEhIRwml8iIqIORm8Q2LZtGwICAjBgwADNsoqKCnz88ce4fPmyVtsdO3bg1VdfxejRo01TKRERERmd3iCwd+9eiMVirSDwr3/9C5cvX4aLiwtCQ0Ph4OCA9PR0/Prrr9i4cSM8PDzQq1cvkxdORERErWfQrYH8/HwkJyejT58+WL58Oezs7AAAkyZNQnBwMNatW4f//e9/mDt3rkmKJSIiIuMyqLNgWloaAGDOnDmaEFBv9OjR8PLyglwuN151REREZFIGBYGSkhIAgKenZ5PrPT09cefOnVYXRURERG3DoCBQfxXA2tq6yfXW1tYQiUStr4qIiIjaRLN9BFJTUzV/zs/PBwAUFhbC3d29Udvbt2+jU6dORiyPiIiITKnZICCXyxvd9z937lyTQSAzMxNubm7Gq46IiIhMSm8QaPiwoYYcHBwaLcvMzERdXR0GDhxonMqIiIjI5PQGAT8/P8E76tu3L9atW9fqgoiIiKjt8FkDREREZsygCYXq6upw69YtVFRUQCQSoXPnzujataupaiMiIiITExQETp06hZ9//hlpaWmoq6vTWufg4IDQ0FBMmzYNjo6OpqiRiIiITERvEFCr1Vi/fj2OHTvWaJ1MJoOtrS3y8/Nx8OBBHD9+HH/5y1/g6+trsmKJiIjIuPQGgfj4eBw7dgzBwcGYNWsWunXrhlu3bmHnzp24cuUKli5diq5duyIxMRFbt25FdHQ0Pv30Uzg7O7dV/URERNQKejsLHj58GO7u7li8eDE8PDxgZ2cHDw8PLFq0CI6Ojti2bRusra0RFhaGd999F9XV1fjhhx/aqHQiIiJqLb1BICcnBwMHDoSlpaXWcktLSwwcOFBr1kEPDw8EBwcjJSXFNJUSERGR0ekNAiKRCEqlssl1SqUSNTU1Wsvc3Nz40CEiIqIORG8Q6NmzJ86cOYPy8nKt5eXl5Thz5gxcXV21lldXV0MsFhu/SiIiIjIJvZ0Fx44di6+//hp/+9vfEBUVBRcXFxQUFODHH3/E3bt3ERUVpdX+5s2b6N69u0kLJiIiIuPRGwQiIiIgl8uRmJiITZs2aa0LCgrSCgJVVVVQKpUICQkxTaVERERkdM1OKPT6669j+PDhOHXqFO7evYtOnTohODgYISEhsLD4486CnZ0d/vGPf5i0WCIiIjIuQTMLDh06FEOHDjVJATk5OYiJiUF6ejqkUinCw8MxY8YMrZChS3JyMn744QfcuHEDNjY28PT0xKJFi2Bra2uSWomIiB42Bj1rwNjKy8uxcuVKuLu7Y8mSJcjPz8fWrVuhVqsxe/ZsvdseOnQIMTExmDJlCp566ilUVFTg0qVLUKlUbVQ9ERFRx9euQSAuLg5KpRKLFi2CRCJBQEAAqqqqEBsbiylTpkAikTS5XWlpKTZv3oznn38eERERmuWmumpBRET0sGrXxxCfP38egYGBWl/4oaGhUCqVkMvlOrf79ddfAQBhYWGmLpGIiOih1q5XBHJzc+Hv76+1TCaTwcbGBnl5eTq3y8jIQI8ePXD48GHs2bMHd+/eRZ8+ffDss8/Cx8fH1GUTERE9NNo1CFRUVEAqlTZaLpVKG01i1NDdu3eRl5eH3bt346mnnkKnTp2wd+9efPjhh/jyyy+bfBxyfHw84uPjAQCrVq2CTCZrUc2/t2gr6ghaek4QPXj4SfWwMsXnVLsGgZZSq9Worq7GW2+9haCgIABAv379MH/+fPz0009NdjSMiIjQ6k9QVFTUVuVSB8FzgogedC39nOrRo4fOde3aR0AqlaKysrLR8oqKCtjb2+vdTiQSwc/PT7NMIpGgb9++yMnJMUmtRERED6N2vSLg5uaG3NxcrWVFRUVQKBR604ubmxvUanWj5Wq1WtD8A0QPkuc2/9reJZCJ/OfZEe1dAlGzDP7WlMvl2LVrl8HrmhIUFIQLFy6gqqpKsywpKQlisVjr1/79Bg0aBAC4dOmSZlllZSUyMzPRu3dvwccnIiIydwYHgdTUVMTGxhq8rimRkZGwtrbG6tWrcfHiRcTHxyM2NhZRUVFaQwoXLlyIDRs2aF57enpi8ODB2LhxI44ePYpz584hOjoalpaWmDBhgqFviYiIyGy1660Be3t7LFu2DJs2bUJ0dDSkUikmT56MmTNnarVTqVSNZgx8/fXXsXXrVmzZsgUKhQK+vr5Yvny53r4FREREpK3dRw24u7tj+fLletusW7eu0TJbW1u8/PLLePnll01VGhER0UOPPeuIiIjMmKArAg3HLVZUVDRaBnAyFiIioo5IUBCYP3++3mUikQjbt283XlVERETUJgQFgSeeeAIikQjAvSGCcrkc06dPN2lhREREZHqCgkDDXvyxsbGQy+WYMWOGyYoiIiKitsHOgkRERGaMQYCIiMiMMQgQERGZMYODQFMP+xGyjoiIiB48Bs8sOHPmzEZTAAtZR0RERA8e3hogIiIyYwwCREREZkxnEFAqla3euTH2QURERKajMwjMnz8f//vf/1BTU2PwTrOysvDxxx9j3759rSqOiIiITEtnZ8HAwEBs3rwZsbGxCAkJwYgRI9CvXz+IxeIm29+6dQsXLlxAQkICrl69CplMhilTppiscCIiImo9nUFgwYIFmDhxIrZv3474+HjEx8fDwsIC7u7ucHR0hFQqRU1NDcrLy5GXl4fS0lIAgIODA+bMmYPJkyfD2tq6zd4IERERGU7v8EEvLy/8/e9/x++//47Dhw/j0qVLyMrKwo0bN7TaOTg4YNiwYZp/rKwMHpVIRERE7UDQN7arqyv+/Oc/AwAUCgXu3LmDsrIyiMVidO7cGU5OTiYtkoiIiEzD4J/uNjY2cHV1haurqynqISIiojbEeQSIiIjMGIMAERGRGWMQICIiMmMMAkRERGaMQYCIiMiMMQgQERGZMQYBIiIiM2bwPAK1tbW4dOkScnJyUF1djenTpwO496TBqqoqdOrUCRYWzBdEREQdgUFB4Pz589iwYQNKSko0y+qDQFZWFt59910sXLgQI0eONGqRREREZBqCg8C1a9fwySefoFOnTnj22Wdx9epVJCYmatb369cPLi4uOHXqlEFBICcnBzExMUhPT4dUKkV4eDhmzJih96pCQUEBFixY0Gh5SEgI3njjDcHHJiIiMneCg8Du3bshFouxatUqODo6IjY2tlEbT09PXL9+XfDBy8vLsXLlSri7u2PJkiXIz8/H1q1boVarMXv27Ga3f/rpp+Hj46N57eDgIPjYREREZEAQuHLlCoYMGQJHR0edbWQyGVJSUgQfPC4uDkqlEosWLYJEIkFAQACqqqoQGxuLKVOmQCKR6N2+R48e6Nevn+DjERERkTbBvfqqq6ub/cWtUCigUqkEH/z8+fMIDAzU+sIPDQ2FUqmEXC4XvB8iIiJqGcFXBJydnXHz5k29bbKystCtWzfBB8/NzYW/v7/WMplMBhsbG+Tl5TW7/fr161FeXo7OnTsjNDQUc+bMgVgsFnx8IiIicyc4CAQFBSEuLg6XL1+Gr69vo/UpKSlIT0/H1KlTBR+8oqICUqm00XKpVIry8nKd21lbW2PChAkIDAyEnZ0dUlNTsXfvXty6dQtLlixpcpv4+HjEx8cDAFatWgWZTCa4zoZ+b9FW1BG09Jwg0qX9zil+Uj2sTHFOCQ4Cjz32GJKSkvDBBx9g4sSJKCwsBACcO3cOcrkcP//8MxwdHREVFWX0Iu/n5OSEF198UfPa398fjo6O+Oabb5CVlQUPD49G20RERCAiIkLzuqioyOR1UsfCc4KMjecUGVtLz6kePXroXCe4j4CzszOWLl0KJycn7N+/HydPngQAREdHY//+/XBycsLSpUsN6rkvlUpRWVnZaHlFRQXs7e0F7wcAhg8fDgDIzMw0aDsiIiJzZtCEQn379sWXX36Jc+fOIT09HWVlZZBIJPD29saQIUNgaWlp0MHd3NyQm5urtayoqAgKhUJvetFHJBK1aDsiIiJzZPAUwxYWFhg8eDAGDx7c6oMHBQVh3759qKqqgp2dHQAgKSkJYrEYfn5+Bu2r/gpF3759W10XERGRuTA4CBhTZGQkDh48iNWrV2Pq1KkoKChAbGwsoqKitIYULly4EH5+fpg3bx4AYOfOnaiuroaPjw/s7OyQlpaGffv2YejQoejdu3d7vR0iIqIOR3AQSEhIELzTMWPGCGpnb2+PZcuWYdOmTYiOjoZUKsXkyZMxc+ZMrXYqlUprfgI3Nzfs378fhw4dglKphEwmw5QpU/D4448LrpGIiIgMCALr168XvFOhQQAA3N3dsXz5cr1t1q1bp/U6NDQUoaGhgo9BRERETRMcBOovy9+vsrISV69eRVJSEoYOHYrg4GCjFUdERESmJTgIhIWF6V0/duxYrFq1CpMmTWptTURERNRGBM8j0JyBAwciMDAQO3bsMNYuiYiIyMSMFgSAezMXcUIfIiKijsOoQSAnJ8eYuyMiIiITa/U8AiqVCrdv38ahQ4eQkpKCRx55xBh1ERERURsQHARmzZrVbBt7e3s89dRTrSqIiIiI2o7gINC/f/8m5/EXiUSQSqXw8vLC2LFjDXroEBEREbUvwUHgvffeM2EZRERE1B6M2lmQiIiIOhYGASIiIjOm89aAIc8WaEgkEumcjpiIiIgeLDqDgCFPG7wfgwAREVHHoDMIrF27ti3rICIionagMwh07dq1LesgIiKidsDOgkRERGasRVMMq1QqlJaWora2tsn1MpmsVUURERFR2zAoCNy4cQPffvstUlNTUVNT02QbkUiE7du3G6U4IiIiMi3BQSAnJwd///vfAQABAQE4e/Ysevfujc6dO+P69esoKyuDv78/rwYQERF1IIKDwJ49e1BXV4ePPvoIvXr1wqxZszB06FBMnz4d1dXV+Pe//42UlBS89tprpqyXiIiIjEhwZ8HU1FQEBwejV69emmVqtRoAYGtri1deeQVSqRQ7duwwfpVERERkEoKDQFlZGVxdXf/Y0MICCoVC89rS0hL+/v64ePGicSskIiIikxEcBOzt7VFdXa157eDggKKiIq02VlZWqKysNF51REREZFKCg0C3bt1QUFCged2nTx/89ttvuHv3LgCguroaZ86cgYuLi/GrJCIiIpMQ3FkwMDAQe/fuRXV1NWxtbTF+/HikpKRgyZIl8PHxQWZmJgoLC/HMM8+Ysl4iIiIyIsFBYNy4cejRoweUSiVsbW0RHByMZ599FrGxsUhOToZYLMbUqVPxpz/9yZT1EhERkRHpDQJLlixBREQERo0aBScnJ4SEhGitnzRpEiZOnIjS0lJ07twZIpHIpMUSERGRcentI5CdnY1Nmzbh1VdfxcaNG5GRkdF4BxYWcHR0ZAggIiLqgPReEVi5ciXi4+Nx8uRJHDlyBEeOHEGvXr0wbtw4jB49GhKJpK3qJCIiIhPQGwT69euHfv364fnnn8fx48dx+PBhXL9+Hf/+97/x7bffYvjw4Rg3bhx8fX1bXEBOTg5iYmKQnp4OqVSK8PBwzJgxAxYWwgY0qFQq/O1vf0NmZibefvttDBo0qMW1EBERmRtBnQXt7Owwfvx4jB8/HllZWYiPj0diYiKOHTuGY8eOwd3dXXOVwN7eXvDBy8vLsXLlSri7u2PJkiXIz8/H1q1boVarMXv2bEH7OHz4MG7fvi34mERERPQHwfMI1PPw8MBLL72Ef/3rX3jttdfg4+ODnJwcbN68GXPnzsWaNWsE7ysuLg5KpRKLFi1CQEAAxo8fj+nTp+PAgQOCJiYqLy/Hd999hzlz5hj6NoiIiAgtCAL1xGIxxowZg/fffx+ff/45fH19UVNTgxMnTgjex/nz5xEYGKjV1yA0NBRKpRJyubzZ7Xfs2AEfHx8MGDCgRe+BiIjI3AmeR6Ap5eXlSEhIwOHDh5GTkwMABnUgzM3Nhb+/v9YymUwGGxsb5OXl6d02OzsbR44cwerVqw0vnIiIiAC0MAhcunQJ8fHxOH36NGprawEA3t7eiIiIaDTXgD4VFRWQSqWNlkulUpSXl+vdNiYmBhMnTkT37t21pj7WJT4+HvHx8QCAVatWQSaTCa6zod9btBV1BC09J4h0ab9zip9UDytTnFOCg0BJSQmOHDmCw4cPa754pVIpIiIiEBERgZ49exq9OF0SExORl5eHt99+W/A29XXWu/+BSUQ8J8jYeE6RsbX0nOrRo4fOdXqDgFqtxrlz53Do0CGkpKRApVIBAHx9fTFu3DgMHz4cYrG4RUUB94JEU50CKyoqdI4+qK2txX//+19MnToVarUaFRUVqKqqAgAoFApUVVXBzs6uxTURERGZE71B4LXXXsOdO3cA3HsM8ejRoxEREQE3NzejHNzNzQ25ublay4qKiqBQKHSmF4VCgdu3b2PLli3YsmWL1rovvvgC3bp1M2jkAhERkTnTGwTu3LkDPz8/za9/K6tW9S1sJCgoCPv27dP6FZ+UlASxWAw/P78mt7G1tcXy5cu1lpWUlODLL7/EnDlzOIKAiIjIAHq/2b/44gu4urqa7OCRkZE4ePAgVq9ejalTp6KgoACxsbGIiorSGn2wcOFC+Pn5Yd68ebC0tGw00qC+z0KvXr3g7e1tsnqJiIgeNnrnETBlCADu3W5YtmwZVCoVoqOjsXPnTkyePBkzZ87UaqdSqTT9E4iIiMh4jHutvwXc3d0bXeq/37p16/Sud3Fxwc6dO41ZFhERkVlo8cyCRERE1PExCBAREZkxBgEiIiIzxiBARERkxgQHgeTkZPbcJyIiesgIHjXw2WefwcnJCWPHjsW4ceP4gBYiIqKHgOArAhMmTIBCocCePXuwcOFCrFq1CmfPnoVarTZlfURERGRCgq8IvPDCC3jqqaeQlJSEuLg4pKSkICUlBc7Ozhg3bhzCw8Ph7OxsylqJiIjIyAyaUEgsFiMsLAxhYWG4ceMG4uPjcfz4ccTGxmL37t0IDg5GZGQkgoKCTFQuERERGVOLZxbs1auX1lWCHTt24MyZMzhz5gxkMhkmTJiA8ePHw9bW1pj1EhERkRG1avhgdXU1jh07hp9++knzuGIPDw+Ul5fj22+/xZtvvomsrCxj1ElEREQm0KIrAtevX0dcXBwSExNRXV0NsViM8PBwTJgwAR4eHqiursbPP/+MnTt34t///jdWrFhh7LqJiIjICAQHAYVCgcTERMTFxSEzMxMA4ObmhsjISIwZM0brscG2traYOnUqbt++jcOHDxu/aiIiIjIKwUHg1VdfRVVVFSwsLDBs2DBMmDAB/v7+erdxdnZGTU1Nq4skIiIi0xAcBOzs7BAVFYWIiAg4OjoK2mb8+PEIDQ1taW1ERERkYoKDwLp162BhYVjfQolEonXLgIiIiB4sgr/ZDQ0BRERE9OAT/O2+e/duzJkzRzNM8H537tzBnDlz8MMPPxirNiIiIjIxwUHg7Nmz8PPz0zmNsLOzMwYMGIDTp08brTgiIiIyLcFBID8/H+7u7nrbuLm5IT8/v9VFERERUdsQHASUSiVsbGz0thGLxaiurm51UURERNQ2BAeBLl26ICMjQ2+bjIwMPoGQiIioAxEcBAIDAyGXy5GUlNTk+sTERMjlcj55kIiIqAMRPI/AtGnTcOLECXz55ZdISkpCUFAQnJ2dcefOHaSkpODMmTOwt7fHtGnTTFguERERGZPgIODs7IylS5fis88+w+nTpxuNDujatSveeustdOnSxehFEhERkWkY9PRBT09PfPnllzh79iwyMjJQUVEBqVQKb29vDBo0CFZWLXqYIREREbUTg7+5raysMGzYMAwbNswU9RAREVEb4rzBREREZkznFYGEhAQAwNChQ2FnZ6d5LcSYMWNaXxkRERGZnM4gsH79egCAt7c37OzsNK+FMCQI5OTkICYmBunp6ZBKpQgPD8eMGTP0PuTo5s2b2LJlC27cuIGysjJ07twZgYGBmDVrFpycnAQfm4iIyNzpDALz5s0DAM0Xa/1rYyovL8fKlSvh7u6OJUuWID8/H1u3boVarcbs2bN1bldZWQkXFxeMGTMGTk5OKCgowK5du5CZmYmPPvoIlpaWRq+ViIjoYaQzCISFhel9bQxxcXFQKpVYtGgRJBIJAgICUFVVhdjYWEyZMgUSiaTJ7Xx8fODj46N57e/vjy5duuCDDz5AdnY2+vbta/RaiYiIHkbt2lnw/PnzCAwM1PrCDw0NhVKphFwuN2hf9vb2AIDa2lqj1khERPQwa9cgkJubix49emgtk8lksLGxQV5eXrPbq1Qq1NbWIi8vD9u2bYOnpye8vLxMVS4REdFDR+etgQULFrRohyKRCGvWrBHUtn5CovtJpVKUl5c3u/1HH32ECxcuAAD69u2Lv/71rzo7GcbHxyM+Ph4AsGrVKshkMkE13u/3Fm1FHUFLzwkiXdrvnOIn1cPKFOeUziCgVqtbtMOWbtcSL7zwAsrLy/H7779jz549+PDDD7Fy5UqIxeJGbSMiIhAREaF5XVRU1GZ1UsfAc4KMjecUGVtLz6n7r743pDMIrFu3rkUHM4RUKkVlZWWj5RUVFZp7/vq4uroCuDfEsX///liwYAFOnDiB8PBwo9dKRET0MGrXPgJubm7Izc3VWlZUVASFQqE3vTSla9eusLe3R0FBgTFLJCIieqi1OAhUVVWhqKioyV/0QgUFBeHChQuoqqrSLEtKSoJYLIafn59B+8rLy0NZWRlcXFxaXA8REZG5MeihQ3V1ddi/fz8OHTqk9cvbxcUF48aNw6OPPmrQZD6RkZE4ePAgVq9ejalTp6KgoACxsbGIiorSGlK4cOFC+Pn5aSY12rJlCywtLeHt7Q2JRILc3Fzs27cP3bp1Q0hIiCFviYiIyKwJDgK1tbX4xz/+AblcDpFIBJlMBkdHR5SUlKCwsBDfffcdzp8/j7///e+CH0dsb2+PZcuWYdOmTYiOjoZUKsXkyZMxc+ZMrXYqlQoqlUrz2tPTEz/99BPi4+NRU1MDmUyGYcOGYdq0abC1tRX6loiIiMye4CBw4MAByOVyBAcH45lnntF01AOA/Px8bNmyBWfPnsWBAwcwbdo0wQW4u7tj+fLletvc33ExNDQUoaGhgo9BRERETRPcR+DEiRPo2bMn/vKXv2iFAADo3r07Fi9ejJ49e+L48eNGL5KIiIhMQ3AQyM/PR1BQkM4JeywsLBAUFIRbt24ZrTgiIiIyLcFBwMrKCtXV1XrbKBQKPvmPiIioAxEcBHr37o3k5GSUlpY2ub60tBQnT56Eh4eHsWojIiIiExMcBCZMmIDS0lL89a9/xeHDh3Hr1i0olUoUFBTgyJEjWLp0KUpLSzFhwgRT1ktERERGJHjUQEhICLKysrB3717861//arLNlClTOI6fiIioAzFoQqEnn3wSgwcPxuHDh5GVlYXKykpIJBJ4eHggPDwc/fr1M1WdREREZAKCg0BZWRlEIhH69evHL3wiIqKHRLNB4PTp09iyZYtmSuHu3bvj6aefxuDBg01eHBEREZmW3s6C6enp+PTTT7WeK5Cfn49PP/0U6enpJi+OiIiITEtvEDhw4ADUajWeeOIJfP311/jqq6/w+OOPQ6VS4cCBA21VIxEREZmI3lsDGRkZ8PX11XoI0KxZsyCXy3lFgIiI6CGg94rA3bt34e3t3Wi5t7e3zomFiIiIqOPQGwTq6uqafKyvjY0N6urqTFYUERERtQ3BMwsSERHRw6fZ4YNHjx5Famqq1rLCwkIAwIoVKxq1F4lEWLZsmZHKIyIiIlNqNggUFhZqvvjvJ5fLjV4QERERtR29QWD58uVtVQcRERG1A71BwM/Pr63qICIionbAzoJERERmjEGAiIjIjDEIEBERmTEGASIiIjPGIEBERGTGGASIiIjMGIMAERGRGWMQICIiMmM6JxTatWtXi3c6ffr0Fm9LREREbUdnEIiNjW3xTg0JAjk5OYiJiUF6ejqkUinCw8MxY8YMWFjovlhx9epV/PLLL0hLS0NxcTG6dOmCkSNHYurUqRCLxS2um4iIyNzoDAJNPWfgwIEDSElJwahRo+Dn5wdHR0eUlJQgNTUVJ06cQHBwMCZPniz44OXl5Vi5ciXc3d2xZMkS5OfnY+vWrVCr1Zg9e7bO7ZKSknDr1i1MnToVrq6uyM7Oxo4dO5CdnY3FixcLPj4REZG50xkE7n/OQEJCAn777Tf84x//QN++fbXWhYWFYeLEiVi+fDmGDRsm+OBxcXFQKpVYtGgRJBIJAgICUFVVhdjYWEyZMgUSiaTJ7aZNmwYHBwfNa39/f4jFYnz11VcoLCxE165dBddARERkzgR3Fvzxxx8xYsSIRiGgnqenJ0aMGIEff/xR8MHPnz+PwMBArS/80NBQKJVKvY84bhgC6nl4eAAAiouLBR+fiIjI3AkOAnl5eXByctLbxsnJCXl5eYIPnpubix49emgtk8lksLGxMWg/AJCeng6RSIRu3boZtB0REZE50/sY4obs7Oxw5coVvW2uXLkCW1tbwQevqKiAVCpttFwqlaK8vFzwfkpKSrBnzx6MHj0anTt3brJNfHw84uPjAQCrVq2CTCYTvP+Gfm/RVtQRtPScINKl/c4pflI9rExxTgkOAsHBwTh69Ci2bNmCGTNmwM7OTrOu/r7+5cuXMXbsWKMXqU9tbS0+//xz2Nra4tlnn9XZLiIiAhEREZrXRUVFbVEedSA8J8jYeE6RsbX0nLr/6ntDgoPAk08+Cblcjh9//BGHDx+Gh4cHOnfujLt37yIrKwtVVVVwcXHBnDlzBBcmlUpRWVnZaHlFRQXs7e2b3V6tVmPt2rW4efMmVq5cKWgbIiIi+oPgINC5c2d8+OGH2LZtG06cOIG0tDTNOrFYjHHjxmHOnDno1KmT4IO7ubkhNzdXa1lRUREUCoXe9FLvP//5D06fPo13330Xbm5ugo9LRERE9wgOAgDQqVMnvPrqq3jppZeQm5uLyspKSCQSuLm5wdLS0uCDBwUFYd++faiqqtLcakhKSoJYLG40fPF+33//PX766Se8+eab8PX1NfjYREREZGAQqGdpaYlevXq1+uCRkZE4ePAgVq9ejalTp6KgoACxsbGIiorSGlK4cOFC+Pn5Yd68eQCAEydO4LvvvkNYWBicnZ2Rnp6uadu9e/cmhxcSERFRYwYHgdraWly6dAk5OTmorq7WTCesVCpRVVWFTp066Z0euCF7e3ssW7YMmzZtQnR0NKRSKSZPnoyZM2dqtVOpVFCpVJrXFy5cAAAcPXoUR48e1Wr72muvISwszNC3RUREZJYMCgLnz5/Hhg0bUFJSollWHwSysrLw7rvvYuHChRg5cqTgfbq7uzc5nXFD69at03o9f/58zJ8/X3jhRERE1CTBEwpdu3YNn3zyCUQiEZ599lmEhoZqre/Xrx9cXFxw6tQpoxdJREREpiE4COzevRtisRirVq3CpEmT4Orq2qiNp6cnsrOzjVogERERmY7gIHDlyhUMGTIEjo6OOtvIZDKt2wZERET0YBMcBKqrq5vtja9QKLQ69REREdGDTXAQcHZ2xs2bN/W2ycrK4kN/iIiIOhDBQSAoKAgXLlzA5cuXm1yfkpKC9PR0BAcHG604IiIiMi3Bwwcfe+wxJCUl4YMPPsDEiRNRWFgIADh37hzkcjl+/vlnODo6IioqymTFEhERkXEJDgLOzs5YunQpPv/8c+zfv1+zPDo6GgDQrVs3LF68mLP6ERERdSAGTSjUt29ffPnllzh37hzS09NRVlYGiUQCb29vDBkypEXPGyAiIqL2Y/AUwxYWFhg8eDAGDx5sinqIiIioDQnuLLhixQokJCTobXPs2DGsWLGi1UURERFR2xAcBORyuaaDoC5FRUWQy+WtLoqIiIjahuAgIIRSqWQ/ASIiog7E4D4CTVGr1SgqKkJKSgq6dOlijF0SERFRG9AbBGbNmqX1OjY2FrGxsXp3+Nhjj7W+KiIiImoTeoNA//79IRKJANzrIyCTyeDi4tKonYWFBezt7TFw4ECEh4ebplIiIiIyOr1B4L333tP8edasWRg7diymT59u6pqIiIiojQjuI7B27VpIpVJT1kJERERtTHAQ6Nq1qynrICIionZg8KiB4uJi/Pbbb7hz5w5qa2ubbMPbB0RERB2DQUFg586d+OGHH1BXV6e3HYMAERFRxyA4CBw/fhy7d+/GgAEDMGHCBHz66acYM2YMAgMDkZqaiiNHjmD48OGIjIw0Zb1ERERkRIKDwC+//AJnZ2f87W9/08we6OLigtDQUISGhmLo0KFYtWoVQkNDTVYsERERGZfgKYZv3LiBRx55RGsKYZVKpflzUFAQAgMDsX//fuNWSERERCYjOAjU1dWhU6dOmtdisRiVlZVabXr27ImsrCyjFUdERESmJTgIODk5obi4WPNaJpMhOztbq01xcTEfOkRERNSBCA4CHh4euHnzpua1v78/Ll++jGPHjqG6uhrnzp3DyZMn0adPH5MUSkRERMYnOAgMGjQIN2/eREFBAQBg2rRpkEgkWLduHZ599llER0cDaPygIiIiInpwCR41EBYWhrCwMM1rmUyGjz76CPv378etW7fQtWtXTJgwAb169TJFnURERGQCBs8s2JCLiwtefPHFVhWQk5ODmJgYpKenQyqVIjw8HDNmzICFhe6LFbW1tfjuu++QkZGBa9euoaamBjt37mxVHUREROZI8K0BUygvL8fKlSshEomwZMkSPPHEEzhw4ECzX+oKhQKHDx+GjY0NfHx82qhaIiKih4/BVwRUKhXu3Lmj91kDfn5+gvYVFxcHpVKJRYsWQSKRICAgAFVVVYiNjcWUKVMgkUia3E4qlSImJgYikQg//fQTLl26ZOjbICIiIhgYBPbt24f9+/ejtLRUb7sdO3YI2t/58+cRGBio9YUfGhqKb7/9FnK5HIMHD9a5rUgkElY0ERER6SQ4COzcuRO7d++Gvb09xowZA2dn51bPGZCbmwt/f3+tZTKZDDY2NsjLy2vVvomIiKh5goPAkSNH4OLigujoaJ2X7A1VUVEBqVTaaLlUKkV5eblRjlEvPj4e8fHxAIBVq1ZBJpO1aD+/G7MoeqC09Jwg0qX9zil+Uj2sTHFOCQ4CZWVliIyMNFoIaGsRERGIiIjQvC4qKmrHauhBxHOCjI3nFBlbS8+pHj166FwneNRA9+7dUVFR0aICdJFKpY2eVwDcu1Jgb29v1GMRERFRY4KDwPjx43H27FmUlJQY7eBubm7Izc3VWlZUVASFQqE3vRAREZFxCL41MH78ePz+++9499138cQTT6Bv3746bxMIvYcRFBSEffv2oaqqCnZ2dgCApKQkiMViwUMQiYiIqOUMGj7Yu3dvHD16FBs2bNDZRiQSYfv27YL2FxkZiYMHD2L16tWYOnUqCgoKEBsbi6ioKK2QsXDhQvj5+WHevHmaZSkpKVAoFJrHHp88eRIA4Onpia5duxrytoiIiMyW4CBw6NAhfPXVV7C0tIS/vz+cnJxaPXzQ3t4ey5Ytw6ZNmxAdHQ2pVIrJkydj5syZWu1UKhVUKpXWsm+++QaFhYWa15999hkA4LXXXtN6JgIRERHpJjgI7N+/H507d8YHH3wAFxcXoxXg7u6O5cuX622zbt06QcuIiIjIMII7CxYWFmL48OFGDQFERETUvgQHAWdnZ53PFiAiIqKOSXAQGDNmDFJSUlBVVWXKeoiIiKgNCQ4Cjz32GLy8vLBy5UqkpqYyEBARET0EBHcWfPLJJzV/fv/993W2M2T4IBEREbUvwUGgf//+fPQvERHRQ0ZwEHjvvfdMWAYRERG1B8F9BIiIiOjhwyBARERkxnTeGti1axcAYOLEibC3t9e8FmL69Omtr4yIiIhMTmcQiI2NBQCEhITA3t5e81oIBgEiIqKOQWcQqJ//v/6Rws09D4CIiIg6Hp1BwM/PT+9rIiIi6vgEdxZMSEhAdna23jY3btxAQkJCq4siIiKitiE4CKxfvx6nT5/W2+bMmTNYv359q4siIiKitmHU4YMqlYqzDxIREXUgRg0CeXl5kEqlxtwlERERmZDeKYbvv8x/+vRpFBQUNGqnUqlw+/ZtpKWlITg42LgVEhERkcnoDQL3d/zLyspCVlaWzvbe3t549tlnjVIYERERmZ7eILB27VoAgFqtxsKFCzFp0iRMmjSpUTsLCwtIpVLY2tqapkoiIiIyCb1BoGvXrpo/T58+Hf7+/lrLiIiIqGMT/BjiGTNmmLIOIiIiageCg8D169eRnp6OUaNGQSKRAACqq6vxzTff4MyZM7CxscHUqVObvHVAREREDybBwwf37t2LPXv2aEIAAGzbtg3Hjx+HWq1GWVkZNm/ejAsXLpikUCIiIjI+wUHg2rVr8Pf317yura1FQkICvLy88PXXX2Pt2rVwcHDAwYMHTVIoERERGZ/gIFBaWoouXbpoXmdmZqK6uhoREREQi8VwdnbG4MGDm30eARERET04DJpZsK6uTvPny5cvA9B+KqGDgwNKS0uNVBoRERGZmuAgIJPJkJGRoXl9+vRpdOnSBd26ddMsKy4uhr29vXErJCIiIpMRPGpgxIgRiI2Nxaeffgpra2ukp6dj8uTJWm1yc3O1ggERERE92AQHgaioKFy4cAGnTp0CAHh4eGD69Oma9QUFBbh69Soee+wxgwrIyclBTEwM0tPTIZVKER4ejhkzZsDCQv/FisrKSvznP//B6dOnoVKpMGjQIDz//PPo1KmTQccnIiIyZ4KDgK2tLVauXIkbN24AANzd3Rt9WS9evBienp6CD15eXo6VK1fC3d0dS5YsQX5+PrZu3Qq1Wo3Zs2fr3fbzzz9HXl4eXn31VVhYWODbb7/FJ598gvfff1/w8YmIiMyd4CBQr1evXk0ud3FxgYuLi0H7iouLg1KpxKJFiyCRSBAQEICqqirExsZiypQpWnMWNJSeno4LFy7gvffe03RWdHZ2xt/+9jdcvHgRAQEBhr0pIiIiM6X3+rtcLkdRUZHgnWVnZzd6YqE+58+fR2BgoNYXfmhoKJRKJeRyuc7tUlJS0LlzZ60RC15eXnBxccH58+cFH5+IiMjc6Q0CK1aswNGjR7WW/fDDD3jhhReabH/q1CmsX79e8MFzc3PRo0cPrWUymQw2NjbIy8vTu52bm1uj5W5ubsjNzRV8fCIiInNn8K2BmpoaVFRUGOXgFRUVkEqljZZLpVKUl5fr3a6p2wZSqRQFBQVNbhMfH4/4+HgAwKpVqxoFEKF6fPu/Fm1HpMsvf32ivUugh8zzc1v2+UbmyaAJhTqyiIgIrFq1CqtWrWrvUjqMd955p71LoIcMzykyNp5TrdeuQUAqlaKysrLR8oqKCr0TE0mlUlRVVTW5XVNXGIiIiKhp7RoEmrqnX1RUBIVCoffSva6+AHl5eU32HSAiIqKmtWsQCAoKwoULF7R+3SclJUEsFmuNCLjfI488gpKSEs3zDoB7T0e8desWgoKCTFmyWYmIiGjvEughw3OKjI3nVOu1axCIjIyEtbU1Vq9ejYsXLyI+Ph6xsbGIiorS6gy4cOFCbNiwQfO6X79+CAwMxNq1a5GcnIxTp07hn//8J3x9fTmHgBHxfzAyNp5TZGw8p1pPpFar1bpWzpo1q0U73bFjh+C2OTk52LRpk9YUwzNnztSatXD+/Pnw8/PD/PnzNcsqKiqwefNmnDp1Cmq1GsHBwXj++efh4ODQopqJiIjMUbsHASIiImo/eoMAERERPdwMnlCIOo6CggIsWLAAw4YNw6JFiwAA69at05oGWiQSwdbWFr169UJYWBjCw8MhEomQmpqKFStWICQkBG+88UajfS9duhQZGRmYOHFikzNNvv766ygoKEBMTIzOZ0ZQx1Z/fjVkY2MDe3t79OzZEwMGDEBYWFij23U7d+7Erl27AABPPvkkpk2b1uT+688xAFi9erXO55zQw8UY51XD7VxdXTF8+HBERUVBLBabvP6OiEHATI0fPx4ODg5QqVQoLCxEcnIyrly5guvXr+Oll16Ct7c3rK2tkZaW1mjb6upqZGZmQiQSNbn+zp07yM/PR9++fRkCzICbmxtGjBgBAFAqlSguLsbly5dx/vx57N69Gy+99BJGjRrVaDtLS0skJCQ0GQRycnKQkZEBS0tL1NXVmfot0AOopedVaGgoXF1dAQDFxcU4ffo0tm/fjtTUVLz77rtt+h46CgYBMzV+/HitX1jTpk3DX//6V8TFxeHRRx9Ft27d4OXlhbS0NOTn56N79+6atunp6airq8OQIUNw5swZlJeXa00AVf/AKH1DQOnh4e7ujpkzZ2otU6vVOHHiBL7++musXbsWUqkUwcHBWm0CAwNx7tw5XL16FV5eXlrrjh49CktLSwwcOJAPEjNTLT2vRo4ciUGDBmle//nPf8bixYvx22+/4dKlSxgwYECb1N+RmM0Uw6Rfz5494e/vD7VajczMTACAv78/ADR6EqRcLoe1tTWmTJkCtVrd6KpAffv67cn8iEQijBo1Ci+//DLUajW2bt2K+7sjhYSEwNrautGDzVQqFY4fP47AwEB07ty5DaumB52Q8+p+9vb2GDx4MABoPttIG4MANSISiQD88Yu+qSDg5eUFb29v2NnZNVqflpYGkUiE/v37t03B9MAaOXIkXFxckJubi+zsbK11UqkUgwcPRlJSEmprazXLL1y4gOLiYoSFhbVxtdRR6Duv9LG0tDRhVR0XgwABuHdPVi6XQyQSoW/fvgDuTdxkbW2t9UWvVCpx9epV9O/fHxYWFvDx8dFaX1JSgtzcXHh4eLB/AEEkEsHX1xdA07/GwsLCUF5ejjNnzmiWHT16VOtXHNH9mjuvGmp4fvXr18/ktXVE7CNgpn755Rc4ODhArVZrOgsqFApMnDgRLi4uAACxWKzpJ1BQUAAXFxekp6ejtrZW82vf19cXO3bsQGVlJSQSieY2AW8LUD0nJycAQFlZWaN1gYGBcHJyQkJCAoYPH46KigqcOXMG4eHhsLLixxPppuu8OnHiBK5duwbgj86CpaWliIyMhLe3d5vX2RHw/zQz9csvvwD4Y/igh4cHxo4di7Fjx2q18/PzQ1paGuRyOVxcXCCXy2FpaQkfHx/NerVajcuXLyM4OJgdBckgFhYWGDVqFH788UfcvXsXycnJqKmp4W0BarHExMRGyyIiIvDyyy+3QzUdA4OAmRI6LtvPzw+7d++GXC5HWFgY0tLS0KdPH9ja2gIAPD09NbcP6oMA+wdQQ8XFxQCgc/rvsLAw7Nu3D8ePH0dSUhJ69uwJT0/PtiyROiBd59Xbb7+NQYMGoba2Fjdv3kRMTAzi4+PRu3dvTJgwoT1KfeCxjwDp5ePjAysrK6SlpaGmpgbp6elaX/LW1tbw8vKCXC5HWVkZcnJy4OHhAalU2o5V04Oi/moRAE3fk/u5u7vD09MT+/fvx9WrVzFmzJi2LJE6ICHnlZWVFfr06YN33nkHnTt3xpYtW3D79u22LLPDYBAgver7Cdy6dUtz2fb+X/v9+/fH9evXkZKSArVazdsCpJGYmIiCggK4ubnpvQIVFhaG4uJiWFhYYPTo0W1YIXVEQs8r4N7olBkzZqCmpga7d+9uowo7FgYBalb9F/v333+v1Vu3Xv/+/VFXV4e9e/dqtSfzVT/xy1dffQWRSIRnnnlGMyy1KaNHj8bixYuxdOlSODo6tl2h1KEYel7VCw8PR5cuXXDkyBEUFRW1QaUdC/sIULP8/PywZ88e3Lx5E71799aaRRC4d/vAwsICN2/eZP8AM5STk4OdO3cCAGpqalBcXIy0tDQUFhbCzs4OCxYswCOPPKJ3H3Z2dhg6dGhblEsdhDHOq3pWVlaYNm0aNm3ahD179uCVV14xZekdDoMANau+n0DDYYMN2draok+fPrh27VqTQYEebrm5uZqHvTR8OMyECROafDgMkRDGPq/Cw8Px/fff4+jRo3j88cchk8lMUXaHxMcQExERmTH2ESAiIjJjDAJERERmjEGAiIjIjDEIEBERmTEGASIiIjPGIEBERGTGGASIiIjMGIMAEbWL1NRUzJw5EzNnzmzvUojMGmcWJLOnVCqRkJCAs2fPIjs7G6WlpbCysoKzszN8fX0RGhqKAQMG6N3H/PnzUVhY2Gi5ra0tunbtiv79+2PixIlwd3dv1Oa9996DXC4XVKufnx/ee+89QW2bq60pY8aMwfz58w3a//0qKirw448/AgAmT578UD6J8ujRoygoKIC/vz/8/f3buxyiVmEQILN28eJFbNiwQevxpHZ2dqitrUVubi5yc3Nx6NAhPPLII1iwYAE6deqkd3/W1taQSCQA7j0gpaysDDdv3sTNmzdx6NAhvPzyywgPD29yW0tLy2anZ27N9M0Na9OlufVCVFRUaKaGDQsL0xkEbGxs0KNHj1Yfrz0cPXpUE94YBKijYxAgs5WUlIQ1a9agrq4Ozs7OmDlzJoYOHar5ss3NzUVcXBx+/vlnpKSkYOnSpVi5ciU6d+6sc58hISFav6iVSiXOnj2LmJgY3L17F1999RU8PT3Ru3fvRtv6+PgY/GvfEPfX1t68vLzwxRdftHcZRGaPfQTILOXk5GDDhg2oq6tDr1698PHHHyM8PFzrF7ebmxuee+45/OUvf4GVlRXy8/Pxz3/+06DjiMVijBgxAgsXLgQAqFQq/PLLL0Z9L0RErcErAmSWtm/fDoVCAWtra7z11lt6n2QWHByMxx9/HDt37sRvv/2Gc+fOITg42KDjBQQEwMnJCcXFxbh27Vpry29Tt2/fxv79+3Hx4kUUFhairq4OnTp1gqOjI/r374+RI0fCy8sLQOP+DgsWLNDaV8M+DqmpqVixYgUAaB43W+/o0aNYv349unbtinXr1iEtLQ179+7F1atXoVAo4OrqiokTJ2rdZjl37hx+/PFHZGVlQaFQoGfPnnj00UcREhLS5PsqKChAUlISUlNTUVBQgDt37gAAZDIZAgMDERUV1egJdfV11du1a5fmNki9tWvXwsXFRfNapVLh6NGjOH78OG7cuIGqqip06tQJPj4+mDBhgs5bC/V/l9OnT8fjjz+OgwcPIjExEfn5+aisrMTy5cs12+bm5uLAgQOQy+W4ffs21Go1HBwc4OzsDH9/f4wZMwZubm5NHoeIQYDMTnFxMU6fPg0ACA0NFXSfOioqCvv370dVVRV+/vlng4MAADg7O6O4uBhVVVUGb9tesrKysGLFClRUVAAALCwsYGdnh5KSEhQXF+P69euoqKjQBAF7e3t06tQJZWVlAIBOnTrBwuKPC48t6eNw6NAhfPXVVwDu9d9QKBTIysrCxo0bkZ+fjyeffBI7d+7Erl27IBKJYGdnB6VSiWvXruGLL75AeXk5xo8f32i/69ev14QWKysr2NnZoby8XNM35OjRo3jnnXfg6+ur2UYsFqNz584oLy9HXV0dbGxsYGtrq7Xfhu+3srISn3zyCVJTUxv9/Z08eRInT57Eo48+iqefflrn+6+pqcGKFStw5coVWFpawtbWFiKRSLP+4sWLiI6ORk1NDQBo2ty+fRu3b99GRkYGrKysODqDdGIQILOTmpqK+qdvDxs2TNA2tra2CAgIQHJyMtLS0lBXVwdLS0uDjlvfc781Hf7a2tatW1FRUYE+ffrgxRdfhLe3N0QiEWpra1FYWIgzZ86g4ZPMFy9ejIKCAs2VgI8++kjr17GhSktLsWnTJkycOBFPPPEEHBwcUF5ejs2bNyMhIQF79+6FVCrFnj17MHv2bEycOBESiQTFxcXYsGEDzp8/j61bt2LkyJGNOkJ6eHhgxIgRCAgIQLdu3WBhYYG6ujpcv34dO3fuxPnz5/H5559jzZo1EIvFAO71swgJCdH8Wn/00Uf1fsFu2LABqampsLKywtNPP43w8HDY2NigpKQE3333HY4cOYL9+/ejW7duTYYVAPj5558BAK+99hpCQkIgFotRVlamCQNff/01ampqEBgYiKeffhq9evUCcK9/yq1bt5CcnNzoygZRQwwCZHZycnI0f+7Tp4/g7Tw8PJCcnIzq6moUFhaie/fugrc9efIkSktLAQDe3t5Ntrly5Qpefvllvft5/vnndV7qbk5SUhLOnz+vt83ixYvh4+OjVRMAvPjii+jXr59muZWVFVxdXfHoo4+2qBahFAoFwsPD8fzzz2uW2dvbY968eUhLS0NBQQG+/fZbzJ49G48//rimjZOTE9544w28+uqrUCgUOHPmDEaPHq217+eee67R8SwtLeHl5YV33nkHb7/9NrKzs3Hy5MlG2wqRkZGB5ORkAMALL7yAiIgIzTpHR0fMmzcPlZWVSE5Oxo4dOxAWFqYJHA1VV1djyZIlGDx4sGZZ/eiVu3fv4tatWwDuBQUnJydNG7FYjJ49e6Jnz54G107mhZ0FyezUX7YGDPt13nDoYHl5ebPt1Wo1CgsLcfDgQWzYsAHAvS/QCRMmNNm+rq4Od+/e1fuPUqkUXO/9ampqmt1/bW2t1jb1Q/+Ki4tbfNzWmjZtWqNlFhYWmrkdrK2tMWnSpEZtJBKJJrzcuHHDoGNaWFggMDAQAHD58mUDK74nKSkJANClSxedQ0ZnzZoF4N45efHixSbb9OzZUysENGRnZ6e5MtCe/42oY+MVASIjSkhIQEJCQpPrbG1tMX/+fLi6uja5viWTBRmiJZMFBQcH49ChQ1i3bh2uXLmCwYMHw9PTEzY2NiaqUpu9vb3OKy+Ojo4AAHd390b36evVD/XUFdzS0tJw+PBhZGRk4Pbt21AoFI3a1HciNFRmZiaAe/MMNOw30JC7uzucnZ1x584dZGZmNvmF3/AKzf3EYjEGDhyIixcv4sMPP0RkZCSCg4PRp08fWFnx452E4ZlCZuf+X/bOzs6CthNyJaHhpD0ikQg2NjaQyWTo378/xo0bhy5durSi8rb31FNPIT8/H6mpqThw4AAOHDgACwsLeHh4IDg4GBEREYL//lrCzs5O57r6L1d9ber7cdTV1TVa99///hf79u3T2p9UKtV8gVZXV0OhUDQZDoS4e/cuADT799OlSxfcuXNH0/5++ka0AMDcuXMRHR2N7Oxs7N69G7t374aVlRU8PT0xZMiQRsNiie7HIEBmp+E0v5mZmYK/yK5fvw7gj2mDm/KgTdrTWlKpFMuXL8fly5dx5swZXLlyBZmZmZp/9u3bh7lz52LkyJHtXapBLl68qAkB48ePx/jx4+Hu7q71y3379u3Ys2ePVmfI9qDrakI9mUyG6OhoXLx4ESkpKbhy5Qqys7Nx5coVXLlyBd9//z0WLVrU7DTZZL4YBMjs+Pv7QyQSQa1WIzk5Wef914aqq6vx22+/AQD69+9v8IiBjs7X11czjE6pVOLixYvYvn07bty4gQ0bNmDAgAGaS/UdQWJiIgAgMDAQL730UpNtSkpKWnWMzp07Iy8vT2v66qbUr9c3Y2VzLCwsEBQUhKCgIABAVVUVzp49i23btqGoqAhffvklNmzYwNsF1CR2FiSz4+TkhCFDhgC416ErLy+v2W0OHDigGf+va5iXuRCLxRg8eDAWL14M4F4nxIYd6pr7BfsgqP/y1TVqRK1Wa8b+N6XhOH5d+vbtC+DecFWVStVkm9zcXE0fBE9Pz2b3KZSdnR1GjhyJuXPnArh3m8LQDpNkPh78/2OJTGDWrFkQi8WoqanBZ599phna15SUlBTs2bMHwL2rCS2ZTKgjqqur0/kFBkBrqFvDL/+G9+zrJyJ60NT348jOzm5yfVxcnGZYXlPq36O+9xcaGgrgXmfDw4cPN9lmx44dAO71Wxk4cGDzhd/n/lEe92v430hIeCHzxCBAZqlnz56YO3cuLCwscOPGDbz99ts4fPiw1gd7Xl4eNm/ejI8//hi1tbXo1q0b/u///s9sPlBv376N//u//8Pu3btx/fp1rQ532dnZWLNmDYB7TxH08/PTrJNKpZp+F0eOHGmyo157q7+EnpKSgl27dqG6uhrAvS/2PXv2ICYmRu+TJusn7UlJSdE5qsDLy0szYVVMTAx++uknTcfDkpISbNy4ESdPngTwRzA11JUrV7B48WIcOHAAOTk5muCmVqtx5coVfPPNNwDudUhs6kFXRAD7CJAZGzlyJOzt7TWPId64cSM2btwIiUSCmpoazZStwL17yQsXLmy2B3drCJlQCLg3k1xLCJlQSCaT4aOPPtK8vnXrFnbs2IEdO3bAwsICEokE1dXVml+iVlZWmD9/fqNe6ZGRkdixYwd++uknHDp0CA4ODrCwsIC3tzfeeOONFtVvTKNHj0ZCQgLS0tKwc+dOxMbGQiKRoLKyEmq1GsHBwfDw8NBcCbrfmDFjsH//fuTn52PevHlwcHDQfJG///77mtEh8+bNQ1lZGeRyOWJiYrB582bY2tpqjgMAjz76aKtuN924cQNbtmzBli1bYGlpqXkf9QHMzs4Or7/+eoe4ZUPtg0GAzFpQUBDWrFmDo0eP4uzZs8jOzkZZWRmsrKw0w/5CQ0NbdNnWUPUTCplK/YRC+jT8Vers7IwlS5YgNTUV6enpmiFulpaW6N69O/z9/TFp0qQm50V47LHHYGdnh+PHj2vug6vVap2jLdqalZUVli5dih9++AGJiYma6Z+9vLwwZswYRERENHqYUEOurq5Yvnw5fvjhB2RkZGiePQBoD1WUSCRYtmyZ5qFDWVlZqK6uhqOjI/r164eJEyfqfOiQEJ6ennjzzTeRmpqKq1evori4GKWlpbC2tkbPnj0REBCASZMmmXSIJ3V8InV7j40hIiKidsNrRURERGaMQYCIiMiMMQgQERGZMQYBIiIiM8YgQEREZMYYBIiIiMwYgwAREZEZYxAgIiIyYwwCREREZoxBgIiIyIz9P43nAEPOcDS0AAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "metadata": {
- "tags": []
- }
- },
- {
- "cell_type": "code",
- "execution_count": 14,
"source": [
"# estimate the policy value of IPWLearner with Random Forest\n",
"estimated_policy_value_b, estimated_interval_b = ope.summarize_off_policy_estimates(\n",
@@ -481,44 +529,44 @@
")\n",
"print(estimated_interval_b, '\\n')\n",
"\n",
- "# visualize policy values of IPWLearner with Random Forest estimated by the three OPE estimators\n",
+ "# visualize the estimated policy values of IPWLearner with Random Forest\n",
"ope.visualize_off_policy_estimates(\n",
" action_dist=action_dist_ipw_rf,\n",
" estimated_rewards_by_reg_model=estimated_rewards_by_reg_model,\n",
- " n_bootstrap_samples=1000, # number of resampling performed in the bootstrap procedure\n",
+ " n_bootstrap_samples=1000, # number of resampling performed in bootstrap sampling\n",
" random_state=12345,\n",
")"
- ],
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "tags": []
+ },
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
" mean 95.0% CI (lower) 95.0% CI (upper)\n",
- "ipw 0.707511 0.691352 0.725633\n",
- "dm 0.627372 0.626142 0.628639\n",
- "dr 0.703989 0.695135 0.712832 \n",
+ "ipw 0.500488 0.497832 0.503318\n",
+ "dm 0.527341 0.526954 0.527765\n",
+ "dr 0.500927 0.498359 0.504220 \n",
"\n"
]
},
{
- "output_type": "display_data",
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgIAAAGSCAYAAACRy6kSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABNAUlEQVR4nO3deVxU9f4/8NewDDCDCDiiCCoKCIICIW5gigjqVVIr1zZbbDG1b6XZrpktkrZd11vpverVVNRy6aqBCyokioImg6AiKBACCrKvM78//DE5wgxnYAbEeT0fjx46n/P5fM6bOnHec85nESmVSiWIiIjIKJm0dQBERETUdpgIEBERGTEmAkREREaMiQAREZERYyJARERkxJgIEBERGTEmAkREREaMiQAREZERYyJARERkxMyEVszJycGff/6JlJQUFBQUoKSkBGKxGDY2NnBxcYG3tzf69esHsVhsyHiJiIhIj0RNLTEcGxuL33//HZcuXWqyM6lUiuDgYIwdOxYODg56C5KIiIgMQ2MicPHiRWzatAmZmZmQSCQYOHAgPD094erqCltbW1hbW6O6uholJSXIyclBWloaLly4gMuXL8PMzAz/+Mc/8MQTT0AikbT2z0REREQCaUwEpk2bhl69emHixIkICAiAubm5oA7/+usvREVFISoqChMnTsTkyZP1GjARERHpj8ZE4PTp0xg0aFCzOy4qKkJeXh769OnT7D6IiIjIsJocI0BEREQPL8GzBh42OTk5bR0CERFRq+jWrZvGY1xHgIiIyIhpfSIwd+5cnTsUiURYuXJlswMiIiKi1qM1EcjPz2+tOIiIiKgNaB0s2NxEoHPnzs0OqLVwjAARERkLbWMEtD4RaA83dCIiImo+DhYkIiIyYlqfCCgUCnz33XcQiUSYN28ezMwar15bW4uVK1dCJBLhzTffNEScREREZABanwjEx8cjPj4eAQEBGpMAADAzM8PAgQPxxx9/4NSpU3oPkoiIiAxDayLwxx9/wN7eHsOGDWuyo6CgINjb2+PkyZN6C46IiIgMS2sicPXqVXh7e0MkEjXZkUgkQr9+/ZCenq634IiIiMiwtCYCRUVF6NSpk+DO7O3tcefOnRYHRURERK1DayJgZmaGmpoawZ3V1NRoHUtAREREDxatd207OztkZmYK7iwzMxN2dnYtDoraXkREBAoKCiCTyfDuu++2dThERGQgWp8IeHh4QC6XIzc3t8mOcnNzIZfL4enpqbfgqO0UFBQgNzcXBQUFbR0KEREZkNZEICwsDAqFAt98843Wd//FxcX49ttvoVAoEBoaqvcgiYiIyDC0vhpwc3NDaGgooqOj8fbbbyMsLAz9+vWDvb09AOD27du4ePEioqOjUVJSgrCwMLi5ubVK4ERERNRyTY7se/HFF6FQKHDkyBH88ssv+OWXXxqtN2rUKLz44ot6D5CIiIgMp8lEwNTUFK+++iqCg4MRFRWF1NRUFBUVAQBsbW3h6emJ0NBQeHh4GDpWIiIi0jPBc/08PDx4syciogcGZzfpR5tP+s/KysKGDRuQlpYGqVSKkJAQTJkyBSYmmscx7tixAzt37mz02IwZM/D4448bKlwiInpA1M9uopZp00SgtLQUS5cuhbOzMxYuXIjc3Fxs3rwZSqUS06dP19hu1KhR8PPzUys7c+YM9uzZg0ceecTAURMRET082jQRiIqKQnV1NebPnw+JRAIfHx9UVFQgMjISEyZMgEQiabRdp06dGix9vGvXLjg5OcHFxcWgMf/1ziyD9v+gqM2v/v9/3jSan9lx+U9tHQIRUatr00QgKSkJvr6+ajf8oKAgbNmyBXK5HAEBAYL6KSkpwYULF/Dkk08aKlQionbj0N6/2jqEVlFWWqv601h+5jETHPXep9YFhQwtOzsb3bp1UyuTyWSwsLBATk6O4H7i4+NRV1eHoKAgfYdIRET0UGvTJwJlZWWQSqUNyqVSKUpLSwX3Exsbi169esHRUXOmFB0djejoaADAsmXLIJPJdA8YgHHknMapudcE0YOHv6keVob4PdXmswZaqrCwEHK5HE8//bTWeqGhoWrLH3MNfbofrwkietA19/fU/U/f79WiRCAvLw9ZWVkAAGdnZzg4OOjUXiqVory8vEF5WVkZrK2tBfXxxx9/AAACAwN1OjcRERE1MxGoqKjAunXrcOrUKbXyoUOH4rXXXoOlpaWgfpycnJCdna1WVlBQgKqqKq3Zy71iY2Ph6enJx7pEREbGWmqn9ic1T7MSgfXr1+PChQuYOnUqevfujZqaGiQkJCAmJgYWFhaYPXu2oH78/Pywd+9eVFRUwMrKCgAQFxcHsVgMLy+vJtvn5eXh8uXLmDXLOKa3ERHR30YNf7mtQ3goaE0EqqqqYGFh0aD8zJkzmDVrFh599FFV2aBBg1BVVYXTp08LTgTCwsJw4MABrFixAhMnTkReXh4iIyMRHh6uNqVw3rx58PLyatBvXFwcTE1NMWTIEEHnI+HsTAFA9P//JCKih5XW6YMLFizAxYsXG5TX1dWpvsHfy8rKCgqFQvDJra2tsWjRIigUCkRERGDHjh0YP348pk6dqlZPoVA02m9sbCz69esHGxsbweckYV62F2NhZzFethe3dShERGRAWp8IuLu7Y+nSpRg1ahSeffZZ1c2/X79+WL9+PSorK9GrVy/U1NTg7NmziImJwYABA3QKwNnZGYsXL9ZaZ/Xq1Y2WL1++XKdzERERkTqticAbb7yBYcOG4ccff0RiYiJeeeUVPPLII5g1axaWL1+OlStXqtXv3bs3XnzxRYMGTERERPrT5GBBf39/fP3119i0aROWLVuGRx99FM8//zwiIiJw4cIF1ah/Z2dn9O/f3+ABExERkf4ImjUgkUjw2muvITAwED/88APmz5+Pl156CYMGDYKPj4+hYyQiIiID0WmvAR8fH6xYsQKDBg3C119/jW+//RbFxcWGio2IiIgMTFAiUFxcjPT0dBQXF8PS0hIvvfQSPvnkE2RkZOCtt97CyZMnDR0nERERGYDWVwOVlZVYu3at2gqCgwcPxuuvv46+ffti+fLl2LZtG1avXo24uDi88sorsLW1NXTMREREpCdanwhs3boVp06dwogRI/DSSy8hODgY8fHx2LJlCwBALBbjueeew9KlS5Gbm4u33noLR48ebZXAiYiIqOW0PhE4c+aM6glAvYqKCiQkJOCll15Slbm5ueGrr77Czp078eOPP2LkyJGGi5iIiIj0psklhjt16qRW1qlTp0ZXGzQzM8P06dO53C8REVE7ovXVgLu7O44fP45Lly6htrYWaWlpOHHiBNzd3TW2cXFx0XeMREREZCBanwi88MILWLJkidoSwPb29nj++ecNHRcRERG1Aq2JQNeuXfHdd9/h7NmzKCgogEwmg7+/PywtLVsrPiIiIjKgJlcWtLCwQGBgYGvEQkRERK1Mp5UFiYiI6OEiaK+BxiQkJCAlJQVVVVVwcHBAYGAgZDKZPmMjIiIiA9OaCGzduhU+Pj7o16+fqqysrAxfffUVLl26pFZ3+/btePXVVzF8+HDDREpERER6pzUR2LNnD8RisVoi8K9//QuXLl2Cg4MDgoKCYGNjg7S0NPzxxx9Yt24dXFxc0KNHD4MHTkRERC2n06uB3NxcxMfHo1evXli8eDGsrKwAAOPGjYO/vz9Wr16N//3vf3jttdcMEiwRERHpl06DBVNSUgAAM2bMUCUB9YYPHw43NzfI5XL9RUdEREQGpVMiUFRUBABwdXVt9Lirqytu377d4qCIiIiodeiUCNQ/BTA3N2/0uLm5OUQiUcujIiIiolbR5BiB5ORk1d9zc3MBAPn5+XB2dm5Q99atW+jQoYMewyMiIiJDajIRkMvlDd77nzt3rtFEID09HU5OTvqLjogeGhEREaqlyt999922DoeI/j+ticC9mw3dy8bGpkFZeno66urq0L9/f/1ERmQknt/4R1uH0Crq0m8A5XeQW1xhND/zf2YObesQiJqkNRHw8vIS3FHv3r2xevXqFgdERERErafZSwwTEenEsoP6n0T0QNApEairq8PNmzdRVlYGkUiEjh07onPnzoaKjYgeIqb+E9o6BCJqhKBE4PTp0zh06BBSUlJQV1endszGxgZBQUGYNGkSbG1tDREjERERGYjWRECpVGLNmjU4fvx4g2MymQyWlpbIzc3FgQMHcOLECbzzzjvw9PQ0WLBERESkX1oTgejoaBw/fhz+/v6YNm0aunTpgps3b2LHjh1ITU3Fhx9+iM6dOyM2NhabN29GREQEvv76a9jb27dW/ERERNQCWlcWPHLkCJydnbFgwQK4uLjAysoKLi4umD9/PmxtbbF161aYm5sjODgYH3/8MSorK/Hrr7/qFEBWVhY+/fRTPPPMM3j11Vexfft2KBQKQW3j4+Px/vvv4+mnn8aLL76Izz//HJWVlTqdn4iIyJhpfSKQlZWFUaNGwdTUVK3c1NQU/fv3R0xMjKrMxcUF/v7+SExMFHzy0tJSLF26FM7Ozli4cCFyc3OxefNmKJVKTJ8+XWvbw4cPY8OGDZgwYQKeeeYZlJWV4eLFi4KTCCIiImoiERCJRKiurm70WHV1NWpqatTKnJyckJSUJPjkUVFRqK6uxvz58yGRSODj44OKigpERkZiwoQJkEgkjbYrLi7Gxo0b8cILLyA0NFRVPmjQIMHnJiIioiZeDXTv3h0JCQkoLS1VKy8tLUVCQgIcHR3VyisrKyEWiwWfPCkpCb6+vmo3/KCgIFRXV2vdzviPP+6uShYcHCz4XERERNSQ1icCI0eOxI8//ogPPvgA4eHhcHBwQF5eHn777TfcuXMH4eHhavVv3LiBrl27Cj55dnY2vL291cpkMhksLCyQk5Ojsd3ly5fRrVs3HDlyBLt378adO3fQq1cvzJw5Ex4eHoLPT0REZOy0JgKhoaGQy+WIjY3F+vXr1Y75+fmpJQIVFRWorq5GYGCg4JOXlZVBKpU2KJdKpQ2eQtzrzp07yMnJwa5du/DMM8+gQ4cO2LNnD7744gt8//33ja5nEB0djejoaADAsmXLIJPJBMd5r7+a1Yrag+ZeE0SatN01xd9UDytDXFNNLij0xhtvYMiQITh9+jTu3LmDDh06wN/fH4GBgTAx+fvNgpWVFT7//HO9B9gYpVKJyspKvP322/Dz8wMA9OnTB3PmzMHBgwcbHWgYGhqqNp6goKCgVWKl9oPXBOkbrynSt+ZeU926ddN4TNDKgoMGDTLIQDypVIry8vIG5WVlZbC2ttbaTiQSqW2KJJFI0Lt3b2RlZek9TiIiooeV1sGChubk5ITs7Gy1soKCAlRVVWnNXpycnKBUKhuUK5VKtacUREREpF2b3jX9/Pxw/vx5VFRUqMri4uIgFou1boE8YMAAAMDFixdVZeXl5UhPT0fPnj0NFzAREdFDpk0TgbCwMJibm2PFihW4cOECoqOjERkZifDwcLUphfPmzcPatWtVn11dXREQEIB169bh2LFjOHfuHCIiImBqaooxY8a0xY9CRETULum0DbG+WVtbY9GiRVi/fj0iIiIglUoxfvx4TJ06Va2eQqFosGLgG2+8gc2bN2PTpk2oqqqCp6cnFi9erHVsAREREalr00QAAJydnbF48WKtdVavXt2gzNLSEi+//DJefvllQ4VGRET00OPIOiIiIiPGRICIiMiIMREgIiIyYjonAnK5HDt37tT5GBERET14dE4EkpOTERkZqfMxIiIievDw1QAREZERYyJARERkxJgIEBERGTFBCwrdu+1hWVlZgzKAe7kTERG1R4ISgTlz5mgtE4lE2LZtm/6iIiIiolYhKBF48sknIRKJANydIiiXyzF58mSDBkZERESGJygRuHcToMjISMjlckyZMsVgQREREVHr4GBBIiIiI8ZEgIiIyIgxESAiIjJiOicCSqWyWceIiIjowSNosOC9pk6dqjZ4UOgxIiIievDw1QAREZERYyJA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",
+ "image/png": "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",
"text/plain": [
""
]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "metadata": {
- "tags": []
- }
- },
- {
- "cell_type": "code",
- "execution_count": 15,
"source": [
"# estimate the policy value of Uniform Random\n",
"estimated_policy_value_c, estimated_interval_c = ope.summarize_off_policy_estimates(\n",
@@ -527,80 +575,68 @@
")\n",
"print(estimated_interval_c, '\\n')\n",
"\n",
- "# visualize policy values of Uniform Random estimated by the three OPE estimators\n",
+ "# visualize the estimated policy values of Uniform Random\n",
"ope.visualize_off_policy_estimates(\n",
" action_dist=action_dist_random,\n",
" estimated_rewards_by_reg_model=estimated_rewards_by_reg_model,\n",
- " n_bootstrap_samples=1000, # number of resampling performed in the bootstrap procedure\n",
+ " n_bootstrap_samples=1000, # number of resampling performed in bootstrap sampling\n",
" random_state=12345,\n",
")"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- " mean 95.0% CI (lower) 95.0% CI (upper)\n",
- "ipw 0.605677 0.602447 0.608713\n",
- "dm 0.605383 0.604123 0.606918\n",
- "dr 0.605225 0.602239 0.608934 \n",
- "\n"
- ]
- },
- {
- "output_type": "display_data",
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {}
- }
- ],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
- "OPE procedure estimates that IPWLearners largely outperform the Uniform Random policy.\n",
+ "OPE procedure estimates that IPWLearners outperform the Uniform Random policy by a large margin.\n",
"\n",
"Moreover, IPWLearner with Logistic Regression seems to be the best one."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (4) Evaluation of OPE estimators\n",
"Our final step is **the evaluation of OPE**, which evaluates and compares the estimation accuracy of OPE estimators."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"### (4-1) Approximate the Ground-truth Policy Value \n",
"With synthetic data, we can calculate the ground-truth policy value of the evaluation policies as follows.\n",
"\n",
"$$V(\\pi_e) \\approx \\frac{1}{|\\mathcal{D}_{te}|} \\sum_{i=1}^{|\\mathcal{D}_{te}|} \\mathbb{E}_{a \\sim \\pi_e(a|x_i)} [q(x_i, a)], \\; \\, where \\; \\, q(x,a) := \\mathbb{E}_{r \\sim p(r|x,a)} [r]$$"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": 17,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "policy value of IPW Learner with Logistic Regression: 0.7976472840228284\n",
+ "policy value of IPWLearner with Random Forest: 0.7246527951245796\n",
+ "policy value of Unifrom Random: 0.4999098979105803\n"
+ ]
+ }
+ ],
"source": [
- "# we first calculate the policy values of the three evaluation policies based on the expected rewards of the test data\n",
+ "# we first calculate the true policy values of the three evaluation policies based on the expected rewards of the test data\n",
"policy_names = [\"IPW Learner with Logistic Regression\", \"IPWLearner with Random Forest\", \"Unifrom Random\"]\n",
"for name, action_dist in zip(policy_names, [action_dist_ipw_lr, action_dist_ipw_rf, action_dist_random]):\n",
" true_policy_value = dataset.calc_ground_truth_policy_value(\n",
@@ -608,33 +644,20 @@
" action_dist=action_dist,\n",
" )\n",
" print(f'policy value of {name}: {true_policy_value}')"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "policy value of IPW Learner with Logistic Regression: 0.7745466707388633\n",
- "policy value of IPWLearner with Random Forest: 0.7083979540442642\n",
- "policy value of Unifrom Random: 0.6061787431111193\n"
- ]
- }
- ],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"In fact, IPWLearner with Logistic Regression reveals the best performance among the three evaluation policies.\n",
"\n",
- "Using the above policy values, we evaluate the estimation accuracy of the OPE estimators."
- ],
- "metadata": {}
+ "Using the true policy values, we evaluate the estimation accuracy of the OPE estimators."
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"### (4-2) Evaluation of OPE\n",
"\n",
@@ -642,31 +665,14 @@
"\n",
"- $\\textit{relative-ee} (\\hat{V}; \\mathcal{D}_b) := \\left| \\frac{V(\\pi_e) - \\hat{V} (\\pi_e; \\mathcal{D}_b)}{V(\\pi_e)} \\right|$ (relative estimation error; relative-ee)\n",
"- $\\textit{SE} (\\hat{V}; \\mathcal{D}_b) := \\left( V(\\pi_e) - \\hat{V} (\\pi_e; \\mathcal{D}_b) \\right)^2$ (squared error; se)"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 17,
- "source": [
- "# evaluate the estimation performances of OPE estimators for IPWLearner with Logistic Regression\n",
- "# `summarize_estimators_comparison` returns a pandas dataframe containing estimation performances of given estimators \n",
- "relative_ee_for_ipw_lr = ope.summarize_estimators_comparison(\n",
- " ground_truth_policy_value=dataset.calc_ground_truth_policy_value(\n",
- " expected_reward=bandit_feedback_test[\"expected_reward\"],\n",
- " action_dist=action_dist_ipw_lr,\n",
- " ),\n",
- " action_dist=action_dist_ipw_lr,\n",
- " estimated_rewards_by_reg_model=estimated_rewards_by_reg_model,\n",
- " metric=\"relative-ee\", # \"relative-ee\" (relative estimation error) or \"se\" (squared error)\n",
- ")\n",
- "\n",
- "# estimation performance of the estimators (lower means accurate)\n",
- "relative_ee_for_ipw_lr"
- ],
+ "execution_count": 18,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/html": [
"\n",
@@ -693,15 +699,15 @@
"
\n",
" \n",
" ipw \n",
- " 0.013322 \n",
+ " 0.005126 \n",
" \n",
" \n",
" dm \n",
- " 0.163305 \n",
+ " 0.250047 \n",
" \n",
" \n",
" dr \n",
- " 0.005725 \n",
+ " 0.004002 \n",
" \n",
" \n",
"\n",
@@ -709,38 +715,39 @@
],
"text/plain": [
" relative-ee\n",
- "ipw 0.013322\n",
- "dm 0.163305\n",
- "dr 0.005725"
+ "ipw 0.005126\n",
+ "dm 0.250047\n",
+ "dr 0.004002"
]
},
+ "execution_count": 18,
"metadata": {},
- "execution_count": 17
+ "output_type": "execute_result"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 18,
"source": [
- "# evaluate the estimation performance of OPE estimators for IPW with Random Forest\n",
- "relative_ee_for_ipw_rf = ope.summarize_estimators_comparison(\n",
+ "# evaluate the estimation performances of OPE estimators for IPWLearner with Logistic Regression\n",
+ "# `summarize_estimators_comparison` returns a pandas dataframe containing estimation performances of given estimators \n",
+ "relative_ee_for_ipw_lr = ope.summarize_estimators_comparison(\n",
" ground_truth_policy_value=dataset.calc_ground_truth_policy_value(\n",
" expected_reward=bandit_feedback_test[\"expected_reward\"],\n",
- " action_dist=action_dist_ipw_rf,\n",
+ " action_dist=action_dist_ipw_lr,\n",
" ),\n",
- " action_dist=action_dist_ipw_rf,\n",
+ " action_dist=action_dist_ipw_lr,\n",
" estimated_rewards_by_reg_model=estimated_rewards_by_reg_model,\n",
" metric=\"relative-ee\", # \"relative-ee\" (relative estimation error) or \"se\" (squared error)\n",
")\n",
"\n",
"# estimation performance of the estimators (lower means accurate)\n",
- "relative_ee_for_ipw_rf"
- ],
+ "relative_ee_for_ipw_lr"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/html": [
"
\n",
@@ -767,15 +774,15 @@
"
\n",
" \n",
" ipw \n",
- " 0.000467 \n",
+ " 0.010095 \n",
" \n",
" \n",
" dm \n",
- " 0.114327 \n",
+ " 0.181911 \n",
" \n",
" \n",
" dr \n",
- " 0.006050 \n",
+ " 0.005120 \n",
" \n",
" \n",
"\n",
@@ -783,38 +790,38 @@
],
"text/plain": [
" relative-ee\n",
- "ipw 0.000467\n",
- "dm 0.114327\n",
- "dr 0.006050"
+ "ipw 0.010095\n",
+ "dm 0.181911\n",
+ "dr 0.005120"
]
},
+ "execution_count": 19,
"metadata": {},
- "execution_count": 18
+ "output_type": "execute_result"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 19,
"source": [
- "# evaluate the estimation performance of OPE estimators for Uniform Random\n",
- "relative_ee_for_random = ope.summarize_estimators_comparison(\n",
+ "# evaluate the estimation performance of OPE estimators for IPW with Random Forest\n",
+ "relative_ee_for_ipw_rf = ope.summarize_estimators_comparison(\n",
" ground_truth_policy_value=dataset.calc_ground_truth_policy_value(\n",
" expected_reward=bandit_feedback_test[\"expected_reward\"],\n",
- " action_dist=action_dist_random,\n",
+ " action_dist=action_dist_ipw_rf,\n",
" ),\n",
- " action_dist=action_dist_random,\n",
+ " action_dist=action_dist_ipw_rf,\n",
" estimated_rewards_by_reg_model=estimated_rewards_by_reg_model,\n",
" metric=\"relative-ee\", # \"relative-ee\" (relative estimation error) or \"se\" (squared error)\n",
")\n",
"\n",
"# estimation performance of the estimators (lower means accurate)\n",
- "relative_ee_for_random"
- ],
+ "relative_ee_for_ipw_rf"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/html": [
"
\n",
@@ -841,15 +848,15 @@
"
\n",
" \n",
" ipw \n",
- " 0.001566 \n",
+ " 0.001533 \n",
" \n",
" \n",
" dm \n",
- " 0.001440 \n",
+ " 0.054871 \n",
" \n",
" \n",
" dr \n",
- " 0.001492 \n",
+ " 0.002189 \n",
" \n",
" \n",
"\n",
@@ -857,32 +864,71 @@
],
"text/plain": [
" relative-ee\n",
- "ipw 0.001566\n",
- "dm 0.001440\n",
- "dr 0.001492"
+ "ipw 0.001533\n",
+ "dm 0.054871\n",
+ "dr 0.002189"
]
},
+ "execution_count": 20,
"metadata": {},
- "execution_count": 19
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "# evaluate the estimation performance of OPE estimators for Uniform Random\n",
+ "relative_ee_for_random = ope.summarize_estimators_comparison(\n",
+ " ground_truth_policy_value=dataset.calc_ground_truth_policy_value(\n",
+ " expected_reward=bandit_feedback_test[\"expected_reward\"],\n",
+ " action_dist=action_dist_random,\n",
+ " ),\n",
+ " action_dist=action_dist_random,\n",
+ " estimated_rewards_by_reg_model=estimated_rewards_by_reg_model,\n",
+ " metric=\"relative-ee\", # \"relative-ee\" (relative estimation error) or \"se\" (squared error)\n",
+ ")\n",
+ "\n",
+ "# estimation performance of the estimators (lower means accurate)\n",
+ "relative_ee_for_random"
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
- "We can iterate the above process several times to get more relibale results.\n",
+ "We can iterate the above process several times to get more reliable results.\n",
"\n",
"Please see [../examples/synthetic](../synthetic) for a more sophisticated example of the evaluation of OPE with synthetic bandit data."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
}
- ]
-}
\ No newline at end of file
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "2ff39f3b22306140fd87fd114528320b56c4f8c8e196b421a3ea939a2b6b4692"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.9.5 64-bit ('3.9.5': pyenv)",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.5"
+ },
+ "orig_nbformat": 2
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/quickstart/synthetic_slate.ipynb b/examples/quickstart/synthetic_slate.ipynb
index 7b28d5e4..f1398b2c 100644
--- a/examples/quickstart/synthetic_slate.ipynb
+++ b/examples/quickstart/synthetic_slate.ipynb
@@ -2,36 +2,36 @@
"cells": [
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"# Quickstart Example with Synthetic Slate Bandit Data\n",
"---\n",
- "This notebook provides an example of conducting OPE of several different evaluation policies with synthetic slate bandit feedback data.\n",
+ "This notebook provides an example of conducting OPE of several different evaluation policies with synthetic slate bandit data.\n",
"\n",
- "Our example with synthetic bandit data contains the follwoing four major steps:\n",
+ "Our example with synthetic bandit data contains the following four major steps:\n",
"- (1) Synthetic Slate Data Generation\n",
- "- (2) Defining Evaluation Policy\n",
+ "- (2) Defining Evaluation Policies\n",
"- (3) Off-Policy Evaluation\n",
"- (4) Evaluation of OPE Estimators\n",
"\n",
- "The second step could be replaced by some Off-Policy Learning (OPL) step, but obp still does not implement any OPL module for slate bandit data. Implementing OPL for slate bandit data is our future work.\n",
- "\n",
- ""
- ],
- "metadata": {}
+ "The second step could be replaced by some Off-Policy Learning (OPL) method, but obp still does not implement any OPL module for slate bandit data. Implementing OPL for slate bandits is our future work."
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
"source": [
"# needed when using Google Colab\n",
"# !pip install obp"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
@@ -43,67 +43,66 @@
" logistic_reward_function,\n",
" SyntheticSlateBanditDataset,\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
"source": [
"from itertools import product\n",
"from copy import deepcopy"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 4,
- "source": [
- "# obp version\n",
- "print(obp.__version__)"
- ],
+ "execution_count": 5,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "0.4.0\n"
+ "0.5.2\n"
]
}
],
- "metadata": {}
+ "source": [
+ "# obp version\n",
+ "print(obp.__version__)"
+ ]
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (1) Synthetic Slate Data Generation\n",
"We prepare easy-to-use synthetic slate data generator: `SyntheticSlateBanditDataset` class in the dataset module.\n",
@@ -119,12 +118,15 @@
"- behavior policy (`behavior_policy_function`)\n",
"\n",
"We use a uniform random policy as a behavior policy here."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 7,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
"# generate a synthetic bandit dataset with 10 actions\n",
"# we use `logistic_reward_function` as the reward function and `linear_behavior_policy_logit` as the behavior policy.\n",
@@ -139,17 +141,37 @@
"random_state=12345\n",
"base_reward_function=logistic_reward_function\n",
"\n",
- "# obtain test sets of synthetic logged bandit feedback\n",
+ "# obtain test sets of synthetic logged bandit data\n",
"n_rounds_test = 10000"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[sample_action_and_obtain_pscore]: 100%|██████████| 10000/10000 [00:03<00:00, 2821.57it/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1.6461\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
"source": [
"# define Uniform Random Policy as a baseline behavior policy\n",
"dataset_with_random_behavior = SyntheticSlateBanditDataset(\n",
@@ -164,7 +186,7 @@
" base_reward_function=base_reward_function,\n",
")\n",
"\n",
- "# compute the factual action choice probabililties for the test set of the synthetic logged bandit feedback\n",
+ "# compute the factual action choice probabililties for the test set of the synthetic logged bandit data\n",
"bandit_feedback_with_random_behavior = dataset_with_random_behavior.obtain_batch_bandit_feedback(\n",
" n_rounds=n_rounds_test,\n",
" return_pscore_item_position=True,\n",
@@ -176,164 +198,144 @@
" slate_id=bandit_feedback_with_random_behavior[\"slate_id\"],\n",
")\n",
"print(random_policy_value)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stderr",
- "text": [
- "[sample_action_and_obtain_pscore]: 100%|██████████| 10000/10000 [00:01<00:00, 6149.51it/s]"
- ]
- },
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "1.8366\n"
- ]
- },
- {
- "output_type": "stream",
- "name": "stderr",
- "text": [
- "\n"
- ]
- }
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (2) Evaluation Policy Definition (Off-Policy Learning)\n",
- " After generating synthetic data, we now define the evaluation policy as follows:\n",
- " \n",
- "1. Generate logit values of three valuation policies (`random`, `optimal`, and `anti-optimal`).\n",
- " - A `optimal` policy is defined by a policy that samples actions using`3 * base_expected_reward`.\n",
- " - An `anti-optimal` policy is defined by a policy that samples actions using the sign inversion of `-3 * base_expected_reward`.\n",
- "2. Obtain pscores of the evaluation policies by `obtain_pscore_given_evaluation_policy_logit` method."
- ],
- "metadata": {}
+ "After generating synthetic slate bandit data, we now define some evaluation policies in the following."
+ ]
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
"source": [
"random_policy_logit_ = np.zeros((n_rounds_test, n_unique_action))"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
"source": [
"base_expected_reward = dataset_with_random_behavior.base_reward_function(\n",
" context=bandit_feedback_with_random_behavior[\"context\"],\n",
" action_context=dataset_with_random_behavior.action_context,\n",
" random_state=dataset_with_random_behavior.random_state,\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
"source": [
"optimal_policy_logit_ = base_expected_reward * 3\n",
"anti_optimal_policy_logit_ = -3 * base_expected_reward"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[obtain_pscore_given_evaluation_policy_logit]: 100%|██████████| 10000/10000 [00:12<00:00, 782.75it/s]\n"
+ ]
+ }
+ ],
"source": [
"random_policy_pscores = dataset_with_random_behavior.obtain_pscore_given_evaluation_policy_logit(\n",
" action=bandit_feedback_with_random_behavior[\"action\"],\n",
" evaluation_policy_logit_=random_policy_logit_\n",
")"
- ],
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stderr",
+ "output_type": "stream",
"text": [
- "[obtain_pscore_given_evaluation_policy_logit]: 100%|██████████| 10000/10000 [00:09<00:00, 1037.09it/s]\n"
+ "[obtain_pscore_given_evaluation_policy_logit]: 100%|██████████| 10000/10000 [00:14<00:00, 707.16it/s]\n"
]
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 12,
"source": [
"optimal_policy_pscores = dataset_with_random_behavior.obtain_pscore_given_evaluation_policy_logit(\n",
" action=bandit_feedback_with_random_behavior[\"action\"],\n",
" evaluation_policy_logit_=optimal_policy_logit_\n",
")"
- ],
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stderr",
+ "output_type": "stream",
"text": [
- "[obtain_pscore_given_evaluation_policy_logit]: 100%|██████████| 10000/10000 [00:10<00:00, 995.15it/s]\n"
+ "[obtain_pscore_given_evaluation_policy_logit]: 100%|██████████| 10000/10000 [00:14<00:00, 706.80it/s]\n"
]
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 13,
"source": [
"anti_optimal_policy_pscores = dataset_with_random_behavior.obtain_pscore_given_evaluation_policy_logit(\n",
" action=bandit_feedback_with_random_behavior[\"action\"],\n",
" evaluation_policy_logit_=anti_optimal_policy_logit_\n",
")"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stderr",
- "text": [
- "[obtain_pscore_given_evaluation_policy_logit]: 100%|██████████| 10000/10000 [00:10<00:00, 996.97it/s]\n"
- ]
- }
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (3) Off-Policy Evaluation (OPE)\n",
- "Our next step is OPE which attempts to estimate the performance of evaluation policies using the logged bandit feedback and OPE estimators.\n",
+ "Our next step is OPE, which aims to estimate the performance of evaluation policies using logged bandit data and OPE estimators.\n",
"\n",
- "Here, we use the **SlateStandardIPS (SIPS)**, **SlateIndependentIPS (IIPS)**, and **SlateRewardInteractionIPS (RIPS)** estimators and visualize the OPE results."
- ],
- "metadata": {}
+ "Here, we use \n",
+ "- `SlateStandardIPS` (SIPS)\n",
+ "- `SlateIndependentIPS` (IIPS)\n",
+ "- `SlateRewardInteractionIPS` (RIPS)\n",
+ "\n",
+ "and visualize the OPE results."
+ ]
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 15,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
"source": [
"# estimate the policy value of the evaluation policies based on their action choice probabilities\n",
"# it is possible to set multiple OPE estimators to the `ope_estimators` argument\n",
@@ -346,15 +348,35 @@
" bandit_feedback=bandit_feedback_with_random_behavior,\n",
" ope_estimators=[sips, iips, rips]\n",
")"
- ],
- "outputs": [],
- "metadata": {
- "tags": []
- }
+ ]
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " mean 95.0% CI (lower) 95.0% CI (upper) policy_name\n",
+ "sips 1.646317 1.631293 1.662105 random\n",
+ "iips 1.646317 1.631293 1.662105 random\n",
+ "rips 1.646317 1.631293 1.662105 random \n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"_, estimated_interval_random = ope.summarize_off_policy_estimates(\n",
" evaluation_policy_pscore=random_policy_pscores[0],\n",
@@ -374,38 +396,38 @@
" evaluation_policy_pscore_item_position=random_policy_pscores[1],\n",
" evaluation_policy_pscore_cascade=random_policy_pscores[2],\n",
" alpha=0.05,\n",
- " n_bootstrap_samples=1000, # number of resampling performed in the bootstrap procedure\n",
+ " n_bootstrap_samples=1000, # number of resampling performed in bootstrap sampling\n",
" random_state=dataset_with_random_behavior.random_state,\n",
")"
- ],
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
" mean 95.0% CI (lower) 95.0% CI (upper) policy_name\n",
- "sips 1.836816 1.8205 1.852505 random\n",
- "iips 1.836816 1.8205 1.852505 random\n",
- "rips 1.836816 1.8205 1.852505 random \n",
+ "sips 1.629474 1.585960 1.675414 optimal\n",
+ "iips 1.674750 1.655507 1.692978 optimal\n",
+ "rips 1.626834 1.594925 1.658154 optimal \n",
"\n"
]
},
{
- "output_type": "display_data",
"data": {
- "image/png": "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",
+ "image/png": "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BjMzM1y/fl1tnevXr8PU1FSrAJycnBodL/GkLVu2KB0HBQUhKChIUPsBAQEICAjQKiYiIiJSJviVhL+/P1JTU7Fr1y5UVFQonauoqMCuXbtw7do19O3bV+dBEhERkX4J7mF49dVXkZKSgl9++QXHjx+Hs7MzrKysUFRUhPT0dFRUVMDOzg4zZsxozniJiIhIDwQnDFZWVvi///s//Pjjjzh79ixSU1MV58RiMUaMGIEZM2agQ4cOzRIoERER6Y9WS0N36NABb731Ft58801kZWWhvLwc5ubmcHR0hKGhYXPFSERERHr2THtJGBoaolu3brqOhYiIiFoprROGR48e4erVq8jMzERlZaViTYPq6mpUVFSgQ4cOMDDQ667ZREREpGNaJQyXL1/Gtm3bUFhYqCirTxjS09Px0UcfYdGiRRg8eLBOgyQiIiL9EtwVcOvWLaxbtw4ikQizZs1qsA6Cu7s77OzscP78eZ0HSURERPolOGHYu3cvxGIxwsLCMGbMGDg4ODSo4+LigoyMDJ0GSERERPonOGG4fv06+vfvD2tra5V1bG1tlV5XEBERUdsgOGGorKyEpaWl2jpVVVVKez4QERFR2yA4YZBKpbh3757aOunp6bC3t29yUERERNS6CE4YfH19ceXKFVy7dq3R8zKZDGlpafD399dZcERERNQ6CJ5WOXHiRMTFxeHvf/87Ro8ejfv37wMALl26hJSUFBw+fBjW1tYYO3ZsswVLRERE+iE4YZBKpVixYgU2bNiAgwcPKsrXrl0LALC3t8fSpUs1jnMgIiKi549WCzf16NEDGzduxKVLl5CWloaSkhKYm5vDzc0N/fv3534SREREbZTWS0MbGBigX79+6NevX3PEQ0RERK2Q4EGPq1evxqlTp9TWOX36NFavXt3koIiIiKh1EZwwpKSkKAY6qpKfn4+UlJQmB0VERESti063layuruY4BiIiojZI6zEMjZHL5cjPz4dMJkPHjh110SQRERG1ImoThunTpysdR0VFISoqSm2DEydObHpURERE1KqoTRh69eoFkUgE4PEYBltbW9jZ2TWoZ2BgAAsLC/Tu3RvDhw9vnkiJiIhIb9QmDKtWrVL8e/r06XjxxRcxZcqU5o6JiIiIWhnBYxg2b94MiUTSnLEQERFRKyU4YejUqVNzxkFEREStmNazJAoKCvD777/j4cOH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E5GXl9egXl1dHR48eIDU1FT4+/vrNkIiIiLSO7UJw9MDGNPT05Genq6yvpubG2bNmqWTwIiIiKj1UJswbN68GQAgl8uxaNEijBkzBmPGjGlQz8DAABKJBKamps0TJREREemV2oShU6dOin9PmTIFXl5eSmVERETUPgje3nrq1KnNGQcRERG1YoIThjt37iAtLQ1DhgyBubk5AKCyshLffvstLly4ABMTE4wfP77RVxZERET0fBM8rXL//v3Yt2+fIlkAgB9//BFnzpyBXC5HSUkJdu7ciStXrjRLoERERKQ/ghOGW7duwcvLS3H86NEjnDp1Cq6urvjmm2+wefNmWFpa4tdff22WQImIiEh/BCcMxcXF6Nixo+L49u3bqKysREhICMRiMaRSKfr166dxvwkiIiJ6/mi10mNtba3i39euXQOgvIulpaUliouLdRQaERERtRaCEwZbW1vcuHFDcZyYmIiOHTvC3t5eUVZQUAALCwvdRkhERER6J3iWxKBBgxAVFYXw8HAYGxsjLS0NL730klKdrKwspQSCiIiI2gbBCcPYsWNx5coVnD9/HgDg7OyMKVOmKM7n5eXh5s2bmDhxolYBZGZmYvv27UhLS4NEIsHw4cMxdepUGBio7/woLy/Hjh07kJiYiLq6OvTt2xezZ89Ghw4dlOolJiZiz549yMnJgZ2dHaZOnYrAwECtYiQiImrvBCcMpqamWLNmDe7evQsAcHJyavCjvnTpUri4uAi+eWlpKdasWQMnJycsW7YMOTk5+P777yGXy/HKK6+ovXbDhg3Izs7GW2+9BQMDA+zevRvr1q3DJ598oqhz7do1hIeHY+TIkZg9ezZkMhk2btwIiUQCHx8fwXESERG1d4IThnrdunVrtNzOzg52dnZatXX06FFUV1djyZIlMDc3R58+fVBRUYGoqCiMGzdOac2HJ6WlpeHKlStYtWqVYtClVCrF8uXLkZSUhD59+gAA9u7di169emHOnDkAAG9vb2RmZiI6OpoJAxERkRbU9vunpKQgPz9fcGMZGRkNdrhU5/Lly/Dx8VFKDIKCglBdXY2UlBSV18lkMlhZWSnN0HB1dYWdnR0uX74MAKipqcHVq1cxaNAgpWsDAwORlpaG8vJywXESERG1d2oThtWrV+PkyZNKZT///LPiL/annT9/Hlu3bhV886ysLHTp0kWpzNbW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",
"text/plain": [
""
]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 16,
"source": [
"_, estimated_interval_optimal = ope.summarize_off_policy_estimates(\n",
" evaluation_policy_pscore=optimal_policy_pscores[0],\n",
@@ -426,38 +448,38 @@
" evaluation_policy_pscore_item_position=optimal_policy_pscores[1],\n",
" evaluation_policy_pscore_cascade=optimal_policy_pscores[2],\n",
" alpha=0.05,\n",
- " n_bootstrap_samples=1000, # number of resampling performed in the bootstrap procedure\n",
+ " n_bootstrap_samples=1000, # number of resampling performed in bootstrap sampling\n",
" random_state=dataset_with_random_behavior.random_state,\n",
")"
- ],
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- " mean 95.0% CI (lower) 95.0% CI (upper) policy_name\n",
- "sips 1.830555 1.803695 1.860548 optimal\n",
- "iips 1.843117 1.825576 1.859695 optimal\n",
- "rips 1.838866 1.815574 1.862451 optimal \n",
+ " mean 95.0% CI (lower) 95.0% CI (upper) policy_name\n",
+ "sips 1.691671 1.647720 1.737568 anti-optimal\n",
+ "iips 1.602862 1.584707 1.623184 anti-optimal\n",
+ "rips 1.687415 1.654940 1.722200 anti-optimal \n",
"\n"
]
},
{
- "output_type": "display_data",
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgwAAAGSCAYAAACPApmhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABS/UlEQVR4nO3deVhU1/kH8O+wDMsgsomyaFAWEYgg7mDUKC41xn2JaYxb2sSo+SVqbGoWNTYNatDauKRJtJpUq4AkLolRUXEBQdRRIiC4gQICouwwA8L8/vBh6ggzc0cGBuH7eZ4+j/fcc899p72deTn3LCKFQqEAERERkQZGhg6AiIiIWj4mDERERKQVEwYiIiLSigkDERERacWEgYiIiLRiwkBERERaMWEgIiIirZgwEBERkVZMGIiIiEgrE6EVc3Jy8PvvvyM1NRUFBQUoLS2FWCyGtbU13Nzc4OvrCz8/P4jF4qaMl4iIiAxApG1p6NjYWBw9ehTXrl3T2phEIsHQoUMxevRoODo66i1IIiIiMiy1CcPVq1fxww8/IDMzE5aWlujbty+8vb3h7u4OGxsbWFlZoaqqCqWlpcjJyUF6ejqSkpJw/fp1mJiY4A9/+AMmTZoES0vL5v5MREREpGdqE4bp06eja9euGD9+PPr06QNTU1NBDd67dw/Hjh3DsWPHMH78eEyZMkWvARMREVHzU5swnD9/Hv369XvmhouKipCfnw8vL69nboOIiIhaBq1jGIiIiIgEz5Joq3JycgwdAhERUbNwdnZWe47rMBAREZFWGnsYFi5cqHODIpEIX3/99TMHRERERC2PxoTh/v37zRUHERERtWAaBz0+a8LQoUOHZw6opeEYBiIiais0jWHQ2MPQmn74iYiI6Nlx0CMRERFppbGHoba2Fv/4xz8gEomwaNEimJg0XP3Ro0f4+uuvIRKJ8P777zdFnERERGRAGnsYEhISkJCQgD59+qhNFgDAxMQEffv2xblz5xAfH6/3IImIiMiwNCYM586dg52dHQYNGqS1oeDgYNjZ2eHs2bN6C46IiIhaBo0Jw82bN+Hr6wuRSKS1IZFIBD8/P9y6dUtvwREREVHLoDFhKCoqgr29veDG7OzsUFxc3OigiIiIqGXRmDCYmJigurpacGPV1dUaxzoQERHR80ljwmBra4vMzEzBjWVmZsLW1rbRQREREVHLojFh6N69O1JSUpCbm6u1odzcXKSkpMDb21tvwdHzZ8qUKZgyZYqhwyCiNozfQ01DY8IwYsQI1NbWYv369RrHJpSUlGDDhg2ora1FSEiI3oMkIiIiw9I44MDDwwMhISGIjo7G4sWLMWLECPj5+cHOzg4A8PDhQ1y9ehXR0dEoLS3FiBEj4OHh0SyBE1HrVPeXYWRkpIEjIaInaR2hOHfuXNTW1uLEiRP46aef8NNPPzVYb/jw4Zg7d67eAyQiIiLD05owGBsb4+2338bQoUNx7NgxpKWloaioCABgY2MDb29vhISEoHv37k0dKxG1clFRUbh48SKqqqrQr18/fPTRR5g0aZKhwyIiCEgY6nTv3p1JARE1maioKCxbtgxVVVUAgOzsbCxbtgwAmDSQYEw6mw53qySiFiE0NBSVlZUqZZWVlQgNDTVQRPS8UZd0RkVFGTiy1kGkUCgUhg6iJcvJyTF0CM+NqKgoLFmyBFVVVXBxcWFm3wRm7zxn6BCazLHlUwE09HUkwoi/RzR3OM1ix6yBhg6hVenXrx+ys7Prlbu4uOD8+fMGiOj54+zsrPYcl2UkvWB3MjWWuY09ZEUFDZaT/hw5cM/QITSZ7OyG/8DLzs5ptZ971DinZrsXX0mQXrA7mRrLY8TrMDIVq5QZmYrhMeJ1A0VEzxt7u446lZNu2MPQjO59+JahQ2gyOQ10A9aVt9bP7bTue0OH0Ko49RoMAEiJ2oLamkcwt3GAx4jXleVE2kwavwA7d32BqiqZskwsNsek8QsMGFXrwYSB9KKjpTlyK2QNlhMJ5dRrMLIvRAMA+vzpcwNHQ8+bgf3+AAD494+f49GjatjbdcKk8QuU5dQ4fCVBerHA3wvmxqqPk7mxERb4exkoIiJqiwb2+wPcu76I7p6BWPfFISYLetSoHob8/HxkZWUBAFxdXeHo6KiXoOj584euLgCAzxOuorq2Fp0szbHA30tZTiQUexaIWqZnShgqKyvxzTffID4+XqV84MCBeOedd2Buzm7otugPXV3w083HCeS3If0NHA0REenTMyUM27ZtQ1JSEqZNm4Zu3bqhuroaFy5cwKlTp2BmZob58+frO04iIiIyII0Jg1wuh5mZWb3yxMREvPXWW3jppZeUZf369YNcLsf58+eZMBARkcH8ZfG3hg6hVdI46HHp0qW4evVqvfKamhpYWFjUK7ewsEBtba3+oiMiIqIWQWMPg6enJ1avXo3hw4dj5syZyiTBz88P27Ztg0wmQ9euXVFdXY2LFy/i1KlT6N27t04B5Obm4sCBA0hPT8fdu3fRo0cPrFy5UuM14eHhiIyMbPDcjBkzMHHiRADA5s2bcerUqXp1NmzYABcXDsYjIiISSmPC8N5772HQoEH47rvvIJVK8ec//xm9evXCW2+9hXXr1uHrr79Wqd+tWzfMnTtXpwDu3r0LqVQKT09P1NTUCLpm+PDhCAgIUClLTEzE/v370atXL5VyFxeXeq9IOnTooFOMJBwHOxIRtU5aBz0GBgYiLCwMP/zwA0JDQ/HSSy9h9uzZWLNmDZKSkpQbfbi6uuLFF1/UOYDevXujb9++AICwsDCUlpZqvcbe3h729qrry+/btw8uLi5wc3NTKTczM4OXF9cCICIiagxBsyQsLS3xzjvvICgoCN9++y2WLFmCefPmoV+/fujZs2ejAjAyavzaUaWlpUhKSsLkyZMb3RYRERHVp9O0yp49e+Krr77Crl27EBYWhgEDBmDevHmwtrZuqvgESUhIQE1NDYKDg+udy8rKwqxZs1BdXQ13d3fMmDEDPj4+BoiSiIjo+SUoYSgpKUFBQQEcHBxgbW2NefPmISgoCN988w0++OADzJkzB4MGDWrqWNWKjY1F165d4eSkus1n165d4enpCVdXV5SUlODgwYNYvXo1Vq9eDQ8Pjwbbio6ORnT047XsQ0ND4eDgoLc4W+fmqm2XPp8NapsM8wzxm6g1ac5nSGPCIJPJsHXrVpUVHfv37493330XPXr0wLp167Bnzx5s3rwZcXFx+POf/wwbG5umjllFYWEhUlJS8Mc//rHeuTFjxqgc9+rVC4sXL0ZUVBSWLVvWYHshISEICQlRHhcUFOg3YGo1+GxQY/EZosbS9zPk7Oys9pzGAQS7d+9GfHw8hgwZgnnz5mHo0KFISEjArl27AABisRhvvvkmVq9ejdzcXHzwwQc4efKkXoPX5ty5cwCAoKAgrXXNzMzQq1cv3L59u6nDIiIialU09jAkJiYqexTqVFZW4sKFC5g3b56yzMPDA2vXrkVkZCS+++47vPzyy00X8VNiY2Ph7e0tuFtGJBJBJBI1cVRERESti8YeBrlcXm/6or29PeRyeb26JiYmeO211/D3v/9dvxFqkJ+fj+vXrzc42LEhVVVVuHTpErp169bEkREREbUuWld6PH36NPr37w8PDw/cunULZ86cgaenp9prnl4HQRu5XA6pVAoAePjwISorK5VjJnr16gUzMzMsWrQIPj4+9RZgiouLg7GxMQYMGFCv3YqKCuW6EZ06dUJpaSl++eUXFBYWYvHixTrFSERE1NZpTBjmzJmDVatWYcWKFcoyOzs7zJ49W28BFBcXY/369SpldcebNm2Co6MjamtrG9yjIjY2Fn5+fg1O6zQxMYG1tTWioqJQXFwMU1NTeHl5YeXKlXB3d9db/ERERG2BSKFQKDRVkMvluHjxonJaZWBgIMzNzZsrPoPLycnRW1v3PnxLb22R4Tmt+77Z7zl757lmvyc1nR2zBjb7PY8c4LTK1mTUOCftlXSgaZaE1nUYzMzMBM1AICIiotar8esyExERUaun09LQT7pw4QJSU1Mhl8vh6OiIoKAgrnxHRETUSmlMGHbv3o2ePXvCz89PWVZeXo61a9fi2rVrKnX37t2Lt99+G4MHD26aSImIiMhgNCYM+/fvh1gsVkkY/vWvf+HatWtwdHREcHAwrK2tkZ6ejnPnzuGbb76Bm5sbunTp0uSBExERUfPR6ZVEbm4uEhIS0LVrV6xYsQIWFhYAHu/ZEBgYiM2bN+PXX3/FO++80yTBEhERkWHoNOgxNTUVADBjxgxlslBn8ODB8PDwQEpKiv6iIyIiohZBp4ShqKgIANQufOTu7o6HDx82OigiIiJqWXRKGOp6FUxNTRs8b2pqyo2diIiIWiGtYxiSk5OV/87NzQUA3L9/H66urvXqPnjwAO3atdNjeERERNQSaE0YUlJS6o1LuHTpUoMJw61bt+Di4qK/6IiIiKhF0JgwPLnp1JMa2uzp1q1bqKmpwYsvvqifyIiIiKjF0Jgw+Pj4CG6oW7du2Lx5c6MDIiIiopaHe0kQERGRVjot3FRTU4O8vDyUl5dDJBKhffv26NChQ1PFRkRERC2EoITh/PnzOHLkCFJTU1FTU6NyztraGsHBwZgwYQJsbGyaIkYiIiIyMI0Jg0KhwJYtW3D69Ol65xwcHGBubo7c3FwcPnwYZ86cwYcffghvb+8mC5aIiIgMQ2PCEB0djdOnTyMwMBDTp09Hx44dkZeXh/DwcKSlpeHjjz9Ghw4dEBsbix9//BFr1qxBWFgY7Ozsmit+IiIiagYaBz2eOHECrq6uWLp0Kdzc3GBhYQE3NzcsWbIENjY22L17N0xNTTF06FB8+umnkMlk+Pnnn5spdCIiImouGhOGrKwsvPjiizA2NlYpNzY2xosvvqiyCqSbmxsCAwMhlUqbJlIiIiIyGI0Jg0gkQlVVVYPnqqqqUF1drVLm4uLCzaeIiIhaIY0JQ+fOnXHhwgWUlZWplJeVleHChQtwcnJSKZfJZBCLxfqPkoiIiAxK46DHl19+Gd999x2WL1+OsWPHwtHREfn5+fjll19QXFyMsWPHqtS/e/cuOnXq1KQBExERUfPTmDCEhIQgJSUFsbGx2LZtm8q5gIAAlYShsrISVVVVCAoKappIiYiIyGC0Ltz03nvvYcCAATh//jyKi4vRrl07BAYGIigoCEZG/3ujYWFhgS+++KJJgyUiIiLDELTSY79+/dCvX7+mjoWIiIhaKG4+RURERFoxYSAiIiKtdNqtsink5ubiwIEDSE9Px927d9GjRw+sXLlS4zX5+flYuHBhvfKgoCC8//77KmWJiYnYs2cPcnNz4ejoiKlTp3JgJhERkY4MnjDcvXsXUqkUnp6e9XbC1GbmzJno3r278tja2lrl/LVr1xAWFoaRI0dizpw5kEql2LhxIyQSCfz9/fUSPxERUVtg8IShd+/e6Nu3LwAgLCwMpaWlgq91dnaGl5eX2vP79u1Djx49MHfuXACAn58fsrKyEBkZyYSBiIhIBwYfw/Dk1Ex9qq6uxtWrVzFw4ECV8qCgIKSnp6OioqJJ7ktERNQaGbyHoTG2bNmCsrIytG/fHsHBwZgxY4Zyaeq8vDzU1NTAxcVF5RoXFxcoFArk5OTAw8PDEGETERE9d57LhMHU1BSjRo2Cv78/LCwskJycjP379yMvLw/Lli0DAOX+FxKJROVaKysrAEB5eXmDbUdHRyM6OhoAEBoaCgcHB73FfU9vLVFLoM9ng9omwzxD/CZqTZrzGdI5YUhJSUFKSgqmTJmi0zl9srW1xbx585THvr6+sLGxwffff4+MjAy4ubk9c9shISEICQlRHhcUFDQmVGrF+GxQY/EZosbS9zPk7Oys9pzOAwiSk5MRERGh87mmNmDAAADArVu3APyvJ+HpsQrqeh6IiIhIPYMPetQ3kUgEAOjYsSOMjY2RnZ2tcj4nJwcikUhjFkVERESqWk3CEB8fDwDo1q0bgMfjHPz8/JTldeLi4uDl5QVLS8tmj5GIiOh5ZfBBj3K5HFKpFADw8OFDVFZWKn/ke/XqBTMzMyxatAg+Pj6YP38+ACA8PBwymQzdu3eHhYUFUlNTceDAAfTr1w8vvPCCsu3Jkydj5cqV2LFjB/r27QupVAqpVIrly5c3/wclIiJ6jglKGJ4cVFE3u+DpgRbPOlKzuLgY69evVymrO960aRMcHR1RW1uL2tpa5XkXFxccPHgQx48fR1VVFRwcHDBu3DhMmjRJpR1vb28sXrwYe/fuxdGjR+Ho6Ij33nuPizYRERHpSFDCsGDBAo1lIpEIe/bseaYAHB0dER4errHO5s2bVY6Dg4MRHBwsqH1uzU1ERNR4ghKGyZMnKwcTNtfUSSIiImo5BCUM06ZNU/47IiICKSkpmDp1apMFRURERC1Lq5klQURERE2HCQMRERFpxYSBiIiItNI5YVAoFM90joiIiJ5fOi/cNG3aNJVBkELPERER0fOLrySIiIhIKyYMREREpJXahKGqqqrRjeujDSIiIjI8tQnDggUL8Ouvv6K6ulrnRjMyMrB27VocOHCgUcERERFRy6B20KO/vz927tyJiIgIBAUFYeDAgfDy8oJYLG6wfl5eHq5cuYJTp07hxo0byg2hiIiI6PmnNmFYuHAhRo8ejT179iA6OhrR0dEwMjKCq6srbGxsIJFIUF1djbKyMuTk5KCkpAQAYG1tjRkzZuCVV16Bqalps30QIiIiajoap1V6eHjgk08+wb1793DixAlcvXoVGRkZuHPnjko9a2tr9O/fX/kfExOdZ2sSERFRCybol93JyQl//OMfAQByuRwPHz5EaWkpxGIx2rdvD1tb2yYNkoiIiAxL564AMzMzODk5wcnJqSniISIiohaI6zAQERGRVkwYiIiISCsmDERERKQVEwYiIiLSigkDERERacWEgYiIiLRiwkBERERa6bwOw6NHj3D16lVkZWVBJpNhypQpAB7vTFlZWYl27drByIh5CBERUWuiU8Jw+fJlbN26FUVFRcqyuoQhIyMDn376KRYtWoRBgwbpNUgiIiIyLMFdATdv3sS6desgEokwa9YsBAcHq5z38vKCo6Mjzp8/r/cgiYiIyLAEJwz79u2DWCxGaGgoxowZ0+DS0O7u7sjMzNRrgERERGR4ghOGtLQ09O3bFzY2NmrrODg4qLyuICIiotZB8BgGmUwGa2trjXXkcjlqa2t1CiA3NxcHDhxAeno67t69ix49emDlypUar7lx4waOHj2K1NRUFBYWwt7eHoMGDcL48eMhFouV9cLDwxEZGVnv+uXLlyMgIECnOImIiNoywQmDnZ0d7t69q7FORkYGOnbsqFMAd+/ehVQqhaenJ2pqagRdExcXh7y8PIwfPx5OTk7IzMzE3r17kZmZiaVLl6rUtbS0xPLly1XKXF1ddYqRiIiorROcMAQEBODYsWO4du0avL29652XSqVIT0/H+PHjdQqgd+/e6Nu3LwAgLCwMpaWlWq+ZMGGCSm+Hr68vxGIxvv32W9y/fx8dOnRQnjM2NoaXl5dOMREREZEqwQnDxIkTERcXh7/97W8YPXo07t+/DwC4dOkSUlJScOTIEdjY2GDs2LE6BfAsazY09GrEzc0NAFBYWKiSMBAREVHj6fRK4uOPP8aGDRtw8OBBZfmaNWsAAB07dsTSpUu1jnNoKunp6RCJRPVeiZSXl2PevHmoqKhA586dMXnyZPTv398gMRIRET2vdFq4qVu3bti4cSMuXbqE9PR0lJaWwtLSEp6enujbty+MjY2bKk6NioqKEBUVhcGDB6N9+/bK8k6dOuGNN96Am5sbZDIZjh07hrCwMCxZskRt0hAdHY3o6GgAQGhoKBwcHPQW5z29tUQtgT6fDWqbDPMM8ZuoNWnOZ0jnpaGNjIzQp08f9OnTpyni0dmjR4+wYcMGmJubY9asWSrnBg8erHLcu3dvfPLJJ4iMjFSbMISEhCAkJER5XFBQoP+gqVXgs0GNxWeIGkvfz5Czs7Pac8/1pg8KhQKbNm3C3bt38de//hVWVlYa64tEIvTv3x937tzRefonERFRWya4h+HUqVOCGx0yZMgzBaOrHTt2IDExEZ9++ilcXFya5Z5ERERtkeCEYcuWLYIbbY6E4aeffsJvv/2GDz74oMFpng1RKBRISEiAm5sbd9QkIiLSgeCEYf78+Q2WV1RU4MaNG4iLi0O/fv0QGBioUwByuRxSqRQA8PDhQ1RWViI+Ph4A0KtXL5iZmWHRokXw8fFRxnD27Fn897//xdChQ2FnZ4f09HRle506dVLO1FixYgX69+8PFxcXyOVyHD9+HDdu3MCHH36oU4xERERtneCEYejQoRrPv/zyy8qNqXRRXFyM9evXq5TVHW/atAmOjo6ora1VGXNw5coVAEBMTAxiYmJUrn333XeVsXbq1Am//vorCgsLYWRkhK5du+Kjjz5Cr169dIqRiIiorRMpFAqFvhpbu3YtKisrsWLFCn01aXA5OTl6a+veh2/prS0yPKd13zf7PWfvPNfs96Sms2PWwGa/55EDnFbZmowaV3/n6MZotlkSzs7OuHXrlj6bJCIiohZArwlDVlaWPpsjIiKiFkLnhZueVltbiwcPHuD48eOQSqUcH0BERNQKCU4Ypk+frrWOlZUV3njjjUYFRERERC2P4IShR48eEIlE9cpFIhEkEgk8PDzw8ssvG2zzKSIiImo6ghOGlStXNmEYRERE1JJxuUMiIiLSigkDERERaaX2lYQue0c8SSQSqV1GmoiIiJ5PahMGXXanfBoTBiIiotZFbcKwadOm5oyDiIiIWjC1CUOHDh2aMw4iIiJqwTjokYiIiLR6pqWha2trUVJSgkePHjV43sHBoVFBERERUcuiU8Jw584d7Nq1C8nJyaiurm6wjkgkwp49e/QSHBEREbUMghOGrKwsfPLJJwCAnj174uLFi3jhhRfQvn173L59G6WlpfD19WXvAhERUSskOGGIiopCTU0NvvzyS3Tp0gXTp09Hv379MGXKFMhkMvz73/+GVCrFu+++25TxEhERkQEIHvSYnJyMwMBAdOnSRVmmUCgAAObm5vjzn/8MiUSCvXv36j9KIiIiMijBCUNpaSmcnJz+d6GREeRyufLY2NgYvr6+SEpK0m+EREREZHCCEwYrKyvIZDLlsbW1NQoKClTqmJiYoKKiQn/RERERUYsgOGHo2LEj8vPzlcddu3bF77//juLiYgCATCbDhQsX4OjoqP8oiYiIyKAED3r09/fH/v37IZPJYG5ujpEjR0IqlWLZsmXo3r07bt26hfv37+PNN99syniJiIjIAAQnDMOHD4ezszOqqqpgbm6OwMBAzJo1CxEREUhISIBYLMb48ePxhz/8oSnjJSIiIgPQmDAsW7YMISEheOmll2Bra4ugoCCV82PGjMHo0aNRUlKC9u3bQyQSNWmwREREZBgaxzBkZmZi27ZtePvtt/HNN9/g+vXr9RswMoKNjQ2TBSIiolZMYw/D6tWrER0djfj4eJw8eRInT55Ely5dMHz4cAwePBiWlpbNFScREREZkMaEwcvLC15eXpgzZw7OnDmDEydO4Pbt2/j3v/+NXbt2YcCAARg+fDi8vb2bK14iIiIyAEGDHi0sLDBy5EiMHDkSGRkZiI6ORmxsLE6fPo3Tp0/D1dVV2etgZWXV1DETERFRM9N5e2s3Nze89dZbePPNN3Hu3DkcP34caWlp2LlzJ3bv3o3+/ftj0aJFgtvLzc3FgQMHkJ6ejrt376JHjx5YuXKl1usqKiqwY8cOJCYmora2Fr1798acOXPQrl07lXqJiYnYs2cPcnNz4ejoiKlTp9YbvElERESaCV646WlisRhDhgzB559/jg0bNsDb2xvV1dU4e/asTu3cvXsXUqkUzs7OcHZ2Fnzdhg0bkJycjLfffhsLFizAzZs3sW7dOpU6165dQ1hYGHx9ffHXv/4VgYGB2LhxI65cuaJTjERERG2dzj0MTyorK8OpU6dw4sQJZGVlAYDOAyF79+6Nvn37AgDCwsJQWlqq9Zr09HRcuXIFK1euhI+PDwDAzs4Oy5cvR1JSEnr27AkA2LdvH3r06IG5c+cCAPz8/JCVlYXIyEj4+/vrFCcREVFb9kwJw9WrVxEdHY3ExEQ8evQIAODp6YmQkBCdu/uNjHTv5JBKpWjfvr0yWQAADw8PODo64vLly+jZsyeqq6tx9epVzJkzR+XaoKAgbNmyBRUVFZzlQUREJJDghKGoqAgnT57EiRMnlHtKSCQShISEICQkBJ07d26yIJ+WnZ0NFxeXeuUuLi7Izs4GAOTl5aGmpqZePRcXFygUCuTk5MDDw6NZ4iUiInreaUwYFAoFLl26hOPHj0MqlaK2thYA4O3tjeHDh2PAgAEQi8XNEuiTysvLG+wdkEgkymSmrKxMWfakulkc5eXlDbYdHR2N6OhoAEBoaCgcHBz0Fvc9vbVELYE+nw1qmwzzDPGbqDVpzmdIY8Lw7rvv4uHDhwAe/9AOHjwYISEhDf5131rU9ZjUeXoLb6I6fDaosfgMUWPp+xnSNPlAY8Lw8OFD+Pj4KHsTTEwaNUZSbyQSSYODI8vLy5U9CnU9CRUVFSp11PU8EBERkXoaM4B//OMfcHJyaq5YBHNxccHx48frlefk5ChnXHTs2BHGxsbIzs5WGRyZk5MDkUik0xROIiKitk7jFIWWmCwAQK9evVBUVIRr164py27evIm8vDwEBAQAAExNTeHn54f4+HiVa+Pi4uDl5cUZEkRERDp45oWb9EUulyM+Ph7x8fF4+PAhSkpKlMdyuRwAsGjRImzdulV5jZeXF/z9/bFp0yYkJCTg/Pnz+Oc//wlvb2/lGgwAMHnyZCQnJ2PHjh1ITk7Gf/7zH0ilUkyZMqXZPycREdHzzOCDEoqLi7F+/XqVsrrjTZs2wdHREbW1tcoZGnXef/997Ny5E1u3boVCoUBgYGC9NRe8vb2xePFi7N27F0ePHoWjoyPee+89LtpERESkI5FCoVAYOoiWLCcnR29t3fvwLb21RYbntO77Zr/n7J3nmv2e1HR2zBrY7Pc8coDTKluTUeP0O3RA0/g+g7+SICIiopaPCQMRERFpJThhSEhIqDeOgIiIiNoGwYMe169fD1tbW7z88ssYPnw4l8UlIiJqQwT3MIwaNQpyuRxRUVFYtGgRQkNDcfHiRXDMJBERUesnuIdh7ty5eOONNxAXF4djx45BKpVCKpXCzs4Ow4cPx7Bhw2BnZ9eUsRIREZGB6LQOg1gsxtChQzF06FDcuXMH0dHROHPmDCIiIrBv3z4EBgZixIgRytUWiYiIqHV45oWbunTpotLrsHfvXly4cAEXLlyAg4MDRo0ahZEjR8Lc3Fyf8RIREZEBNGpapUwmw+nTp/Hbb78pt8F2c3NDWVkZdu3ahQ8++AAZGRn6iJOIiIgM6Jl6GG7fvo1jx44hNjYWMpkMYrEYw4YNw6hRo+Dm5gaZTIYjR44gPDwc//73v7Fq1Sp9x01ERETNSHDCIJfLERsbi2PHjuHWrVsAHm8zPWLECAwZMkRl90dzc3OMHz8eDx48wIkTJ/QfNRERETUrwQnD22+/jcrKShgZGaF///4YNWoUfH19NV5jZ2eH6urqRgdJREREhiU4YbCwsMDYsWMREhICGxsbQdeMHDkSwcHBzxobERERtRCCE4bNmzfDyEi3MZKWlpYqryqIiIjo+SQ4A9A1WSAiIqLWQ3AWsG/fPsyYMUM5ffJpDx8+xIwZM/Dzzz/rKzYiIiJqIQQnDBcvXoSPj4/a5Z/t7Ozg5+eHxMREvQVHRERELYPghCE3Nxeurq4a67i4uCA3N7fRQREREVHLIjhhqKqqgpmZmcY6YrEYMpms0UERERFRyyI4YbC3t8f169c11rl+/Tp3rCQiImqFBCcM/v7+SElJQVxcXIPnY2NjkZKSwp0qiYiIWiHB6zBMmDABZ8+excaNGxEXF4eAgADY2dnh4cOHkEqluHDhAqysrDBhwoQmDJeIiIgMQXDCYGdnh48//hjr169HYmJivdkQHTp0wOLFi2Fvb6/3IImIiMiwdNqt0t3dHRs3bsTFixdx/fp1lJeXQyKRwNPTE71794aJyTNtfklEREQtnM6/8CYmJujfvz/69+/fFPEQERFRC8T1nomIiEgrtT0Mp06dAgD069cPFhYWymMhhgwZ0vjIiIiIqMVQmzBs2bIFAODp6QkLCwvlsRBMGIiIiFoXtQnD/PnzAQC2trYqx/qWlZWF7du3Iz09HRKJBMOGDcPUqVM17o4ZHh6OyMjIBs/NmDEDEydOBPB4S+6GekY2bNgAFxcX/XwAIiKiNkBtwjB06FCNx/pQVlaG1atXw9XVFcuWLUNubi5+/PFHKBQKvPbaa2qvGz58eL0FohITE7F//3706tVLpdzFxaVestOhQwe9fQYiIqK2wKDzII8dO4aqqiosWbIElpaW6NmzJyorKxEREYFx48bB0tKywevs7e3rrfewb98+uLi4wM3NTaXczMwMXl5eTfURiIiI2gSDzpK4fPky/P39VRKD4OBgVFVVISUlRXA7paWlSEpKQnBwcFOESURE1Oap7WFYuHDhMzUoEonw9ddfC6qbnZ0NX19flTIHBweYmZkhJydH8D0TEhJQU1PTYMKQlZWFWbNmobq6Gu7u7pgxYwZ8fHwEt01EREQaEgaFQvFMDepyXd1KkU+TSCQoKysT3E5sbCy6du0KJycnlfKuXbvC09MTrq6uKCkpwcGDB7F69WqsXr0aHh4eDbYVHR2N6OhoAEBoaCgcHBwEx6HNPb21RC2BPp8NapsM8wzxm6g1ac5nSG3CsHnz5mYLojEKCwuRkpKCP/7xj/XOjRkzRuW4V69eWLx4MaKiorBs2bIG2wsJCUFISIjyuKCgQL8BU6vBZ4Mai88QNZa+nyFnZ2e15ww6hkEikaCioqJeeXl5OaysrAS1ce7cOQBAUFCQ1rpmZmbo1asXbt++rVugREREbdwzJwyVlZUoKCho8AdfKBcXF2RnZ6uUFRQUQC6Xa8xynhQbGwtvb2/B3TIikQgikUjnWImIiNoynaZV1tTU4ODBgzh+/Djy8/OV5Y6Ojhg+fDheffVVGBsbC24vICAABw4cQGVlJSwsLAAAcXFxEIvFggYm5ufn4/r163jrrbcE3a+qqgqXLl1Ct27dBMdIREREOiQMjx49whdffIGUlBSIRCI4ODjAxsYGRUVFuH//Pv773//i8uXL+OSTTwRvcz1ixAgcPnwYX331FcaPH4/8/HxERERg7NixKlMtFy1aBB8fn3oLMMXFxcHY2BgDBgyo13ZFRQVCQ0Px0ksvoVOnTigtLcUvv/yCwsJCLF68WOjHJiIiIuiQMBw6dAgpKSkIDAzEm2++qTIjITc3Fz/88AMuXryIQ4cOYcKECYLatLKywmeffYZt27ZhzZo1kEgkeOWVVzBt2jSVerW1taitra13fWxsLPz8/GBtbV3/g5mYwNraGlFRUSguLoapqSm8vLywcuVKuLu7C/3YREREBECkEDgPcunSpQCAtWvXNrjPQ21tLZYtWwaFQoGwsDD9RmlAuqwHoc29D4W9OqHng9O675v9nrN3nmv2e1LT2TFrYLPf88gBTqtsTUaNc9JeSQd6mSWRm5uLgIAAtZtCGRkZISAgAHl5ebpHSERERC2a4ITBxMQEMplMYx25XK7ToEciIiJ6PghOGF544QUkJCSgpKSkwfMlJSWIj4+vt/kTERERPf8EJwyjRo1CSUkJ/vrXv+LEiRPIy8tDVVUV8vPzcfLkSXz88ccoKSnBqFGjmjJeIiIiMgDBsySCgoKQkZGB/fv341//+leDdcaNGydoxUUiIiJ6vui0cNPrr7+OPn364MSJE8jIyEBFRQUsLS3h5uaGYcOGwcvLq6niJCIiIgMSnDCUlpZCJBLBy8uLiQEREVEbozVhSExMxA8//KBcCrpTp06YOXMm+vTp0+TBERERUcugcdBjeno6wsLCVPaNyM3NRVhYGNLT05s8OCIiImoZNCYMhw4dgkKhwOTJk/Hdd9/h22+/xaRJk1BbW4tDhw41V4xERERkYBpfSVy/fh3e3t4qeztMnz4dKSkp7GEgIiJqQzT2MBQXF8PT07Neuaenp9oFnIiIiKj10Zgw1NTUwNzcvF65mZkZampqmiwoIiIialkEr/RIREREbZfWaZUxMTFITk5WKbt//z4AYNWqVfXqi0QifPbZZ3oKj4iIiFoCrQnD/fv3lQnC01JSUvQeEBEREbU8GhOGFStWNFccRERE1IJpTBh8fHyaKw4iIiJqwTjokYiIiLRiwkBERERaMWEgIiIirZgwEBERkVZMGIiIiEgrJgxERESkFRMGIiIi0ooJAxEREWmlduGmyMjIZ250ypQpz3wtERERtTxqE4aIiIhnbpQJAxERUeuiNmFoaB+JQ4cOQSqV4qWXXoKPjw9sbGxQVFSE5ORknD17FoGBgXjllVd0CiArKwvbt29Heno6JBIJhg0bhqlTp8LISP3bkvz8fCxcuLBeeVBQEN5//32VssTEROzZswe5ublwdHTE1KlTERQUpFOMREREbZ3ahOHpfSROnTqF33//HV988QW6deumcm7o0KEYPXo0VqxYgf79+wu+eVlZGVavXg1XV1csW7YMubm5+PHHH6FQKPDaa69pvX7mzJno3r278tja2lrl/LVr1xAWFoaRI0dizpw5kEql2LhxIyQSCfz9/QXHSURE1NZp3d66zi+//IKBAwfWSxbquLu7Y+DAgfjll18wePBgQW0eO3YMVVVVWLJkCSwtLdGzZ09UVlYiIiIC48aNg6WlpcbrnZ2d4eXlpfb8vn370KNHD8ydOxcA4Ofnh6ysLERGRjJhICIi0oHgWRI5OTmwtbXVWMfW1hY5OTmCb3758mX4+/urJAbBwcGoqqpCSkqK4HYaUl1djatXr2LgwIEq5UFBQUhPT0dFRUWj2iciImpLBPcwWFhYIC0tTWOdtLQ0mJubC755dnY2fH19VcocHBxgZmYmKPHYsmULysrK0L59ewQHB2PGjBkQi8UAgLy8PNTU1MDFxUXlGhcXFygUCuTk5MDDw0NwrERERG2Z4IQhMDAQMTEx+OGHHzB16lRYWFgoz9W9Rrh27RpefvllwTcvLy+HRCKpVy6RSFBWVqb2OlNTU4waNQr+/v6wsLBAcnIy9u/fj7y8PCxbtgwAlNc/3b6VlZXy3kRERCSM4ITh9ddfR0pKCn755RecOHECbm5uaN++PYqLi5GRkYHKyko4OjpixowZTRkvgMevPubNm6c89vX1hY2NDb7//ntkZGTAzc3tmduOjo5GdHQ0ACA0NBQODg6NDVfpnt5aopZAn88GtU2GeYb4TdSaNOczJDhhaN++Pf7+979j9+7dOHv2LFJTU5XnxGIxhg8fjhkzZqBdu3aCby6RSBocS1BeXq7sCRBqwIAB+P7773Hr1i24ubkpr3+6fXU9D3VCQkIQEhKiPC4oKNApDmo7+GxQY/EZosbS9zPk7Oys9pzghAEA2rVrh7fffhtvvfUWsrOzUVFRAUtLS7i4uMDY2FjnwFxcXJCdna1SVlBQALlcrjFoTUQiEQCgY8eOMDY2RnZ2tsoU0ZycHIhEomdun4iIqC16pr0kjI2N0aVLF3h7e6NLly7PlCwAQEBAAK5cuYLKykplWVxcHMRicb11ILSJj48HAOW0T1NTU/j5+SnLn2zfy8tL65RNIiIi+h+dehgA4NGjR7h69SqysrIgk8mUy0BXVVWhsrIS7dq107hK45NGjBiBw4cP46uvvsL48eORn5+PiIgIjB07VuUHfdGiRfDx8cH8+fMBAOHh4ZDJZOjevTssLCyQmpqKAwcOoF+/fnjhhReU102ePBkrV67Ejh070LdvX0ilUkilUixfvlzXj01ERNSm6ZQwXL58GVu3bkVRUZGyrC5hyMjIwKeffopFixZh0KBBgtqzsrLCZ599hm3btmHNmjWQSCR45ZVXMG3aNJV6tbW1qK2tVR67uLjg4MGDOH78OKqqquDg4IBx48Zh0qRJKtd5e3tj8eLF2Lt3L44ePQpHR0e89957XLSJiIhIR4IThps3b2LdunVo164dZs2ahRs3biA2NlZ53svLC46Ojjh//rzghAEAXF1dG9y34kmbN29WOQ4ODkZwcLCg9vv164d+/foJjoeIiIjqEzyGYd++fRCLxQgNDcWYMWPg5ORUr467uzsyMzP1GiAREREZnuCEIS0tDX379oWNjY3aOg4ODiqvK4iIiKh1EJwwyGSyertBPk0ul6uMNSAiIqLWQXDCYGdnh7t372qsk5GRgY4dOzY6KCIiImpZBCcMdWsmXLt2rcHzUqkU6enpCAwM1FtwRERE1DIIniUxceJExMXF4W9/+xtGjx6N+/fvAwAuXbqElJQUHDlyBDY2Nhg7dmyTBUtERESGIThhsLOzw8cff4wNGzbg4MGDyvI1a9YAeLwU89KlS7WOcyAiIqLnj04LN3Xr1g0bN27EpUuXkJ6ejtLSUlhaWsLT0xN9+/Z95iWiiYiIqGXTeWloIyMj9OnTB3369GmKeIiIiKgFEjzocdWqVTh16pTGOqdPn8aqVasaHRQRERG1LIIThpSUFOVAR3UKCgqQkpLS6KCIiIioZXmm7a3Vqaqq4jgGIiKiVkjnMQwNUSgUKCgogFQqhb29vT6aJCIiohZEY8Iwffp0leOIiAhERERobHDixImNj4qIiIhaFI0JQ48ePSASiQA8HsPg4OAAR0fHevWMjIxgZWWFF198EcOGDWuaSImIiMhgNCYMK1euVP57+vTpePnllzFlypSmjomIiIhaGMFjGDZt2gSJRNKUsRAREVELJThh6NChQ1PGQURERC2YzrMkCgsL8fvvv+Phw4d49OhRg3X42oKIiKh10SlhCA8Px88//4yamhqN9ZgwEBERtS6CE4YzZ85g37598PPzw6hRoxAWFoYhQ4bA398fycnJOHnyJAYMGIARI0Y0ZbxERERkAIIThqNHj8LOzg7Lly9Xrubo6OiI4OBgBAcHo1+/fggNDUVwcHCTBUtERESGIXhp6Dt37qBXr14qSz/X1tYq/x0QEAB/f38cPHhQvxESERGRwQlOGGpqatCuXTvlsVgsRkVFhUqdzp07IyMjQ2/BERERUcsgOGGwtbVFYWGh8tjBwQGZmZkqdQoLC7n5FBERUSskOGFwc3PD3bt3lce+vr64du0aTp8+DZlMhkuXLiE+Ph5du3ZtkkCJiIjIcAQnDL1798bdu3eRn58PAJgwYQIsLS2xefNmzJo1C2vWrAFQf8MqIiIiev4JniUxdOhQDB06VHns4OCAL7/8EgcPHkReXh46dOiAUaNGoUuXLk0RJxERERmQzis9PsnR0RHz5s1rVABZWVnYvn070tPTIZFIMGzYMEydOhVGRuo7P27cuIGjR48iNTUVhYWFsLe3x6BBgzB+/HiIxWJlvfDwcERGRta7fvny5QgICGhU3ERERG1JoxKGxiorK8Pq1avh6uqKZcuWITc3Fz/++CMUCgVee+01tdfFxcUhLy8P48ePh5OTEzIzM7F3715kZmZi6dKlKnUtLS2xfPlylTJXV9cm+TxEREStlc4JQ21tLR4+fKhxLwkfHx9BbR07dgxVVVVYsmQJLC0t0bNnT1RWViIiIgLjxo2DpaVlg9dNmDAB1tbWymNfX1+IxWJ8++23uH//vspGWcbGxvDy8tLhExIREdHTdEoYDhw4gIMHD6KkpERjvb179wpq7/Lly/D391dJDIKDg7Fr1y6kpKSgT58+DV73ZLJQx83NDcDjqZ3cWZOIiEi/BCcM4eHh2LdvH6ysrDBkyBDY2dk1es2F7Oxs+Pr6qpQ5ODjAzMwMOTk5OrWVnp4OkUiEjh07qpSXl5dj3rx5qKioQOfOnTF58mT079+/UXETERG1NYIThpMnT8LR0RFr1qxR+6pAV+Xl5ZBIJPXKJRIJysrKBLdTVFSEqKgoDB48GO3bt1eWd+rUCW+88Qbc3Nwgk8lw7NgxhIWFYcmSJUwaiIiIdCA4YSgtLcWIESP0lizoy6NHj7BhwwaYm5tj1qxZKucGDx6scty7d2988skniIyMVJswREdHIzo6GgAQGhoKBwcHvcV6T28tUUugz2eD2ibDPEP8JmpNmvMZEpwwdOrUCeXl5Xq9uUQiqbcfBfC458HKykrr9QqFAps2bcLdu3exevVqrdeIRCL0798fu3btQm1tbYNTN0NCQhASEqI8LigoEPBJqC3is0GNxWeIGkvfz5Czs7Pac4JXehw5ciQuXryIoqIifcQEAHBxcUF2drZKWUFBAeRyucag6+zYsQOJiYlYtmwZXFxc9BYXERERqRLcwzBy5Ejcu3cPn376KSZPnoxu3bqpfT0htIskICAABw4cQGVlJSwsLAA8XmNBLBZrnZr5008/4bfffsMHH3wAb29vQfdTKBRISEiAm5ubxoWhiIiISJVO0ypfeOEFxMTEYOvWrWrriEQi7NmzR1B7I0aMwOHDh/HVV19h/PjxyM/PR0REBMaOHauSjCxatAg+Pj6YP38+AODs2bP473//i6FDh8LOzg7p6enKup06dVJOu1yxYgX69+8PFxcXyOVyHD9+HDdu3MCHH36oy8cmIiJq8wQnDMePH8e3334LY2Nj+Pr6wtbWttHTKq2srPDZZ59h27ZtWLNmDSQSCV555RVMmzZNpV5tbS1qa2uVx1euXAEAxMTEICYmRqXuu+++q9zzolOnTvj1119RWFgIIyMjdO3aFR999BF69erVqLiJiIjaGpFCoVAIqfj++++joqICf/vb3+Do6NjUcbUYuq4Hocm9D9/SW1tkeE7rvm/2e87eea7Z70lNZ8esgc1+zyMHOEuiNRk1zkmv7ell0OP9+/cxYMCANpUsEBER0WOCEwY7Ozu1e0cQERFR6yY4YRgyZAikUikqKyubMh4iIiJqgQQnDBMnToSHhwdWr16N5ORkJg5ERERtiOBZEq+//rry359//rnaerpMqyQiIqLng+CEoUePHhCJRE0ZCxEREbVQghOGlStXNmEYRERE1JJxfWQiIiLSigkDERERaaX2lURkZCQAYPTo0bCyslIeCzFlypTGR0ZEREQthtqEISIiAgAQFBQEKysr5bEQTBiIiIhaF7UJw4oVKwD8b6vqumMiIiJqe9QmDD4+PhqPiYiIqO0QPOjx1KlTyMzM1Fjnzp07OHXqVKODIiIiopZFcMKwZcsWJCYmaqxz4cIFbNmypdFBERERUcui12mVtbW1XA2SiIioFdJrwpCTkwOJRKLPJomIiKgF0Lg09NOvFxITE5Gfn1+vXm1tLR48eIDU1FQEBgbqN0IiIiIyOI0Jw9MDGDMyMpCRkaG2vqenJ2bNmqWXwIiIiKjl0JgwbNq0CQCgUCiwaNEijBkzBmPGjKlXz8jICBKJBObm5k0TJRERERmUxoShQ4cOyn9PmTIFvr6+KmVERETUNgje3nrq1KlNGQcRERG1YIIThtu3byM9PR0vvfQSLC0tAQAymQzff/89Lly4ADMzM4wfP77BVxZERET0fBM8rXL//v2IiopSJgsAsHv3bpw5cwYKhQKlpaXYuXMnrly50iSBEhERkeEIThhu3rwJX19f5fGjR49w6tQpeHh44LvvvsOmTZtgbW2Nw4cPN0mgREREZDiCE4aSkhLY29srj2/dugWZTIaQkBCIxWLY2dmhT58+WvebICIiouePTis91tTUKP997do1AKq7WFpbW6OkpERPoREREVFLIThhcHBwwPXr15XHiYmJsLe3R8eOHZVlhYWFsLKy0m+EREREZHCCZ0kMHDgQERERCAsLg6mpKdLT0/HKK6+o1MnOzlZJIIiIiKh1EJwwjB07FleuXMH58+cBAG5ubpgyZYryfH5+Pm7cuIGJEyfqFEBWVha2b9+O9PR0SCQSDBs2DFOnToWRkebOj4qKCuzYsQOJiYmora1F7969MWfOHLRr106lXmJiIvbs2YPc3Fw4Ojpi6tSpCAoK0ilGIiKitk5wwmBubo7Vq1fjzp07AABXV9d6P+pLly6Fu7u74JuXlZVh9erVcHV1xbJly5Cbm4sff/wRCoUCr732msZrN2zYgJycHLz99tswMjLCrl27sG7dOnz++efKOteuXUNYWBhGjhyJOXPmQCqVYuPGjZBIJPD39xccJxERUVsnOGGo06VLlwbLHR0d4ejoqFNbx44dQ1VVFZYsWQJLS0v07NkTlZWViIiIwLhx41TWfHhSeno6rly5gpUrVyoHXdrZ2WH58uVISkpCz549AQD79u1Djx49MHfuXACAn58fsrKyEBkZyYSBiIhIBxr7/VNSUlBQUCC4sczMzHo7XGpy+fJl+Pv7qyQGwcHBqKqqQkpKitrrpFIp2rdvrzJDw8PDA46Ojrh8+TIAoLq6GlevXsXAgQNVrg0KCkJ6ejoqKioEx0lERNTWaUwYVq1ahZiYGJWyn3/+WfkX+9POnz+PLVu2CL55dnY2nJ2dVcocHBxgZmaGnJwcjde5uLjUK3dxcUF2djYAIC8vDzU1NfXqubi4QKFQaGyfiIiIVOn8SqK6uhrl5eV6uXl5eTkkEkm9colEgrKyMo3XNfS6QiKRID8/HwCU1z/dft20T3WfITo6GtHR0QCA0NDQeglNYzjv+lVvbVHbdPSvkw0dAj3n5ryjv+80alt0WripLQgJCUFoaChCQ0MNHcpz66OPPjJ0CPSc4zNEjcVnSP8MmjBIJJIGxxKUl5drXABKIpGgsrKywevqehTqrn+6fXU9D0RERKSeQROGJ8cc1CkoKIBcLtf4KqCh6wAgJydHOWahY8eOMDY2rlcvJycHIpFIr68aiIiIWjuDJgwBAQG4cuWKSm9BXFwcxGKxygyIp/Xq1QtFRUXK/SyAx7tp5uXlISAgAABgamoKPz8/xMfHq1wbFxcHLy8vtVM2qfFCQkIMHQI95/gMUWPxGdI/gyYMI0aMgKmpKb766iskJSUhOjoaERERGDt2rMoP+qJFi7B161blsZeXF/z9/bFp0yYkJCTg/Pnz+Oc//wlvb2/lGgwAMHnyZCQnJ2PHjh1ITk7Gf/7zH0ilUpUVKkn/+H9Uaiw+Q9RYfIb0T6RQKBTqTk6fPv2ZGt27d6/gullZWdi2bZvK0tDTpk1TWUVywYIF8PHxwYIFC5Rl5eXl2LlzJ86fPw+FQoHAwEDMmTMH1tbWKu2fP38ee/fuxb1795RLQwcHBz/T5yIiImqrDJ4wEBERUcunMWEgelpMTAy2bNmCd999F0OHDjV0ONSCJScnY9WqVZgyZQqmTZsGAJg2bRp8fHywcuVKwwZHzzV+DxkG12EgIiIirdjDQDqpqKhAYWEhbG1tOdOENJLL5SgoKEC7du2UY4uys7NhZmYGBwcHA0dHzzN+DxkGEwYiIiLSSue9JKh1i42NxeHDh3Hv3j3IZDJYW1ujW7dumDx5Mrp169bgu8P8/HwsXLgQQ4YMwZgxY/Cf//wH169fh7GxMQICAjBz5kzY2dmp3OfGjRuIiorCzZs3UVpaColEAmdnZ4wYMQKDBg0ywCcnfRM6hmHlypVISUnBjz/+iN27dyM+Ph5lZWXo0qULpkyZgt69e6u0W1ZWhv379+P8+fN48OABTExMYGdnBz8/P7z55pswMeHXWmvw5PPj4+ODiIgI3L59Gx07dsQrr7zC7yED4BgGUjp8+DA2btyI4uJiBAcHY8yYMfDx8cHNmzeRnp6u9fq8vDysXLkSJiYmGD16NLy8vBAbG4tPP/1UZTOxW7du4dNPP0Vqair8/f0xduxY9O7dG5WVlTh//nxTfkRqwdavX49Lly4hODgYQ4YMQU5ODtauXauy+JpCocAXX3yBAwcOoGPHjhg9ejSGDBmCDh064Pjx43j06JEBPwE1hbS0NHzxxRewtLTEyJEj8eKLL2qsz++hpsNUnJRiYmJga2uLr776CmZmZsry2traBvf8eNq1a9cwbdo0lYWxIiMjER4ejsjISMyePRsAcObMGdTU1GDFihVwc3NTaaO0tFQvn4WePw8ePMC6detgbm4OABg7diyWLVuGbdu2oU+fPjAxMcGdO3dw8+ZNjBkzRvk81SkvL4dYLDZA5NSUfv/9d7z33nsqf/HHxMSorc/voabDHgZSYWpqCmNjY5UyIyMjjZuB1bGyssKrr76qUvbqq69CIpHg7Nmz9erX/TA8qV27djpGTK3FxIkTVZ4JZ2dnDB48GMXFxUhKSlKp29CzI5FIVBZ8o9bB3d1dp9cD/B5qOvx/FykNHDgQ+fn5WLJkCcLDw5GcnIyqqirB13ft2lWlZwIAzMzM0LVrV5SUlKCwsFB5H5FIhOXLl2P79u1ITExU6Sqktsnb21ttWWZmJgDA1dUVnTt3xk8//YTQ0FAcPXq0wY3oqPXo1q2bTvX5PdR0+EqClMaPHw+JRIKjR48iMjISkZGRMDMzw0svvYSZM2fCwsJC4/XqsvK6KXWVlZWwtbWFl5cXPvvsM0RFReHYsWP47bffIBKJ4O/vj9mzZ3Mn0Tbq6WXdnyyr26DO2NgYK1aswN69e5GQkIBLly4BeLw77ZQpUzBkyJDmC5iaRfv27XWqz++hpsOEgZREIhFGjBiBESNGoKioCFevXsXx48cRHR2NqqoqLFy4UOP16t77lZSUAIBKwuHr6wtfX1/IZDJcu3YN586dQ0xMDL788kts2LCBI93boJKSEtjb29crA1SfHWtra/zpT3/CvHnzcOfOHVy+fBm//vorNm/eDDs7O62D4qh14/dQ0+ErCWqQjY0NBg0ahE8++QR2dna4ePGi1mtu374NuVyuUiaXy3H79m1YW1vD1ta23jXm5uYICAjA/PnzMXDgQOTl5SErK0tvn4OeH09uV/902QsvvFDvnJGREdzc3DBhwgS8++67ACDoOaXWjd9DTYcJAymlpKTUK5PJZJDL5YIy7bKyMhw8eFCl7ODBgygvL1cZtJSeno7q6mqVegqFAsXFxQAeD7yktuenn36CTCZTHufk5OD06dNo3769ctv6/Px83L9/v961RUVFAPjsEL+HmhL7W0hp7dq1kEgk8PT0hIODA+RyOS5cuIDy8nK8/vrrWq/39vbGwYMHcf36dbzwwgvIzMyEVCpFhw4dVKY4/fzzz0hNTUWPHj3g6OgIIyMjpKam4ubNm+jVqxdcXFya8mNSC2Vvb48PP/wQffv2hUwmQ1xcHKqrq7Fw4UJlwpqRkYGwsDB4eXnBxcUF1tbWyM3NxYULF2BhYYFhw4YZ+FOQofF7qOkwYSCl119/HZcuXUJaWhoSExNhaWkJV1dXzJkzB/369dN6fceOHTF79mzs2rULv/32G4yMjBAUFISZM2eqTMscOXIkLC0tcf36dfz+++8wNjaGo6Mj3nzzTYwcObIpPyK1YIsXL8bu3btx9uxZlJeXw9XVFVOnTkWfPn2Uddzd3TFu3DhcvXoViYmJkMlksLOzw+DBgzFhwgR06tTJgJ+AWgJ+DzUd7iVBjfbkkqwLFiwwdDj0nKlbGjo8PNzQodBzjN9DTY9jGIiIiEgrJgxERESkFRMGIiIi0opjGIiIiEgr9jAQERGRVkwYiIiISCsmDERERKQVEwYiatGSk5Mxbdo0TJs2zdChELVpXOmRSKCqqiqcOnUKFy9eRGZmJkpKSmBiYgI7Ozt4e3sjODgYfn5+GttYsGBBg3shmJubo0OHDujRowdGjx4NV1fXenXqFjgSwsfHBytXrhRUV1tsDdHH4jjl5eX45ZdfAACvvPIKJBJJo9priWJiYpCfn6/cFZHoecaEgUiApKQkbN26FQ8ePFCWWVhY4NGjR8jOzkZ2djaOHz+OXr16YeHChWjXrp3G9kxNTWFpaQng8YY3paWluHv3Lu7evYvjx4/jT3/6k9p9EYyNjVWWuG2ItvNCY1NH23khysvLERkZCQAYOnSo2oTBzMwMzs7Ojb6fIcTExCiTPCYM9LxjwkCkRVxcHL7++mvU1NTAzs4O06ZNQ79+/ZQ/ytnZ2Th27BiOHDkCqVSKjz/+GKtXr0b79u3VthkUFKTyF3pVVRUuXryI7du3o7i4GN9++y3c3d0b3Na5e/fuOvce6OLp2AzNw8MD//jHPwwdBlGbxzEMRBpkZWVh69atqKmpQZcuXbB27VoMGzZM5S94FxcXzJ49Gx9++CFMTEyQm5uLf/7znzrdRywWY+DAgVi0aBEAoLa2FkePHtXrZyEiagz2MBBpsGfPHsjlcpiammLx4sWwtrZWWzcwMBCTJk1CeHg4fv/9d1y6dAmBgYE63a9nz56wtbVFYWEhbt682djwm9WDBw9w8OBBJCUl4f79+6ipqUG7du1gY2ODHj16YNCgQfDw8ABQfzzGwoULVdp6cgxGcnIyVq1aBQD1NqiKiYnBli1b0KFDB2zevBmpqanYv38/bty4AblcDicnJ4wePVrl9c6lS5fwyy+/ICMjA3K5HJ07d8arr76KoKCgBj9Xfn4+4uLikJycjPz8fDx8+BAA4ODgAH9/f4wdOxYODg4NxlUnMjJS+fqlzqZNm+Do6Kg8rq2tRUxMDM6cOYM7d+6gsrIS7dq1Q/fu3TFq1Ci1rzTq/rucMmUKJk2ahMOHDyM2Nha5ubmoqKjAihUrlNdmZ2fj0KFDSElJwYMHD6BQKGBtbQ07Ozv4+vpiyJAh3NaZ1GLCQKRGYWEhEhMTAQDBwcGC3qOPHTsWBw8eRGVlJY4cOaJzwgAAdnZ2KCwsRGVlpc7XGkpGRgZWrVqF8vJyAICRkREsLCxQVFSEwsJC3L59G+Xl5cqEwcrKCu3atUNpaSkAoF27djAy+l+H57OMwTh+/Di+/fZbAI/Hl8jlcmRkZOCbb75Bbm4uXn/9dYSHhyMyMhIikQgWFhaoqqrCzZs38Y9//ANlZWUNbmu8ZcsWZXJjYmICCwsLlJWVKceuxMTE4KOPPoK3t7fyGrFYjPbt26OsrAw1NTUwMzODubm5SrtPft6KigqsW7cOycnJ9f77i4+PR3x8PF599VXMnDlT7eevrq7GqlWrkJaWBmNjY5ibm0MkEinPJyUlYc2aNaiurgYAZZ0HDx7gwYMHuH79OkxMTDgbhdRiwkCkRnJyMupWTu/fv7+ga8zNzdGzZ08kJCQgNTUVNTU1MDY21um+dTMVGjNwsbn9+OOPKC8vR9euXTFv3jx4enpCJBLh0aNHuH//Pi5cuIAnV6FfunSpcjtiAPjyyy9V/trWVUlJCbZt24bRo0dj8uTJsLa2RllZGXbu3IlTp05h//79kEgkiIqKwmuvvYbRo0fD0tIShYWF2Lp1Ky5fvowff/wRgwYNqjeg083NDQMHDkTPnj3RsWNHGBkZoaamBrdv30Z4eDguX76MDRs24Ouvv4ZYLAbweBxIUFCQ8q//V199VeMP8datW5GcnAwTExPMnDkTw4YNg5mZGYqKivDf//4XJ0+exMGDB9GxY8cGkxoAOHLkCADg3XffRVBQEMRiMUpLS5VJw3fffYfq6mr4+/tj5syZ6NKlC4DH42fy8vKQkJBQr6eE6ElMGIjUyMrKUv67a9eugq9zc3NDQkICZDIZ7t+/j06dOgm+Nj4+HiUlJQAAT0/PBuukpaXhT3/6k8Z25syZo7aLXZu4uDhcvnxZY52lS5eie/fuKjEBwLx58+Dl5aUsNzExgZOTE1599dVnikUouVyOYcOGYc6cOcoyKysrzJ8/H6mpqcjPz8euXbvw2muvYdKkSco6tra2eP/99/H2229DLpfjwoULGDx4sErbs2fPrnc/Y2NjeHh44KOPPsJf/vIXZGZmIj4+vt61Qly/fh0JCQkAgLlz5yIkJER5zsbGBvPnz0dFRQUSEhKwd+9eDB06VJmYPEkmk2HZsmXo06ePsqxutk5xcTHy8vIAPE4obG1tlXXEYjE6d+6Mzp076xw7tS0c9EikRl13OaDbX/tPTqksKyvTWl+hUOD+/fs4fPgwtm7dCuDxD+2oUaMarF9TU4Pi4mKN/6mqqhIc79Oqq6u1tv/o0SOVa+qmRBYWFj7zfRtrwoQJ9cqMjIyUa2OYmppizJgx9epYWloqk5w7d+7odE8jIyP4+/sDAK5du6ZjxI/FxcUBAOzt7dVOpZ0+fTqAx89kUlJSg3U6d+6skiw8ycLCQtnTYMj/jej5xh4GIgM4deoUTp061eA5c3NzLFiwAE5OTg2ef5ZFmXTxLIsyBQYG4vjx49i8eTPS0tLQp08fuLu7w8zMrImiVGVlZaW2J8fGxgYA4OrqWm8cQZ26KbDqErzU1FScOHEC169fx4MHDyCXy+vVqRsMqatbt24BeLxOw5PjGp7k6uoKOzs7PHz4ELdu3WowMXiyx+dpYrEYL774IpKSkvD3v/8dI0aMQGBgILp27QoTE/4MkDB8UojUeLqnwM7OTtB1QnomnlwcSSQSwczMDA4ODujRoweGDx8Oe3v7RkTe/N544w3k5uYiOTkZhw4dwqFDh2BkZAQ3NzcEBgYiJCRE8H9/z8LCwkLtubofYU116saZ1NTU1Dv3n//8BwcOHFBpTyKRKH9oZTIZ5HJ5g0mEEMXFxQCg9b8fe3t7PHz4UFn/aZpm8ADAO++8gzVr1iAzMxP79u3Dvn37YGJiAnd3d/Tt27fedGGipzFhIFLjyeWZb926JfgH7/bt2wD+t9xzQ1ra4kiNJZFIsGLFCly7dg0XLlxAWloabt26pfzPgQMH8M4772DQoEGGDlUnSUlJymRh5MiRGDlyJFxdXVV6Avbs2YOoqCiVQZ2GoK53oo6DgwPWrFmDpKQkSKVSpKWlITMzE2lpaUhLS8NPP/2EJUuWaF3enNouJgxEavj6+kIkEkGhUCAhIUHt++EnyWQy/P777wCAHj166DxD4nnn7e2tnF5YVVWFpKQk7NmzB3fu3MHWrVvh5+enfEXwPIiNjQUA+Pv746233mqwTlFRUaPu0b59e+Tk5KgsO96QuvOaVhDVxsjICAEBAQgICAAAVFZW4uLFi9i9ezcKCgqwceNGbN26la8pqEEc9Eikhq2tLfr27Qvg8cC0nJwcrdccOnRIuX6CuulvbYVYLEafPn2wdOlSAI8HUz45MFDbX8QtQd2PtLpZMgqFQrl2QkOeXAdBnW7dugF4PI23tra2wTrZ2dnKMRLu7u5a2xTKwsICgwYNwjvvvAPg8esRXQd+UtvR8v8fS2RA06dPh1gsRnV1NdavX6+c8tgQqVSKqKgoAI97J55l0abnUU1NjdofOgAqUwCfTBKeHFNQt+BTS1M3ziQzM7PB88eOHVNOV2xI3WfU9PmCg4MBPB40eeLEiQbr7N27F8DjcTUvvvii9sCf8vSslqc9+b+RkCSH2iYmDEQadO7cGe+88w6MjIxw584d/OUvf8GJEydUfgBycnKwc+dOrF27Fo8ePULHjh3xf//3f23mi/fBgwf4v//7P+zbtw+3b99WGTiYmZmJr7/+GsDjXSd9fHyU5yQSiXJcyMmTJxsccGhodV33UqkUkZGRkMlkAB4nAFFRUdi+fbvGnUnrFkeSSqVqZ1F4eHgoFwbbvn07fvvtN+UAyqKiInzzzTeIj48H8L8EVldpaWlYunQpDh06hKysLGWCp1AokJaWhu+//x7A44GVDW14RgRwDAORVoMGDYKVlZVye+tvvvkG33zzDSwtLVFdXa1cahd4/K570aJFWkesN4aQhZuAxyv7PQshCzc5ODjgyy+/VB7n5eVh79692Lt3L4yMjGBpaQmZTKb8y9bExAQLFiyoNwp/xIgR2Lt3L3777TccP34c1tbWMDIygqenJ95///1nil+fBg8ejFOnTiE1NRXh4eGIiIiApaUlKioqoFAoEBgYCDc3N2XP0tOGDBmCgwcPIjc3F/Pnz4e1tbXyB//zzz9XzoaZP38+SktLkZKSgu3bt2Pnzp0wNzdX3gcAXn311Ua95rpz5w5++OEH/PDDDzA2NlZ+jrpEzcLCAu+9995z8aqIDIMJA5EAAQEB+PrrrxETE4OLFy8iMzMTpaWlMDExUU6HDA4OfqbuYl3VLdzUVOoWbtLkyb9y7ezssGzZMiQnJyM9PV059c/Y2BidOnWCr68vxowZ0+C6EhMnToSFhQXOnDmjfE+vUCjUzi5pbiYmJvj444/x888/IzY2Vrlst4eHB4YMGYKQkJB6m0o9ycnJCStWrMDPP/+M69evK/eWAFSncFpaWuKzzz5Tbj6VkZEBmUwGGxsbeHl5YfTo0Wo3nxLC3d0dH3zwAZKTk3Hjxg0UFhaipKQEpqam6Ny5M3r27IkxY8Y06dRXev6JFIaeC0REREQtHvueiIiISCsmDERERKQVEwYiIiLSigkDERERacWEgYiIiLRiwkBERERaMWEgIiIirZgwEBERkVZMGIiIiEgrJgxERESk1f8DRVTffyq9tWEAAAAASUVORK5CYII=",
+ "image/png": "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i4sLAKCoqKilIREREdETdN7DoC0ZGRkQiURwcHBQKK+oqMD8+fNRWVmJLl26YOrUqRgwYICOoiQiIno+tYmEobi4GIcOHcLQoUNhZWUlL+/UqRNef/11uLi4oLq6GsePH0doaCiWLVumNGloXKQKAEJCQmBnZ6e1OP/QWkukD7R5b1D7pJt7iJ9EbcmzvIee+4Th4cOH2LRpE0xNTTFnzhyFc0OHDlU47tOnD95//31ERkYqTRiCgoIQFBQkPy4sLNR+0NQm8N6gluI9RC2l7Xuoc+fOSs9pPIDg4cOHuHTpEo4ePaowZbG2thYlJSVoaGh4uiifgkwmw9atW3H37l3885//hIWFhcr6IpEIAwYMwJ07d55pnERERM87jXoYLl26hB07dqC4uFheNm3aNACPdqj84IMPEBwcjMGDB2s1SGX27NmDpKQkfPDBB3Bycnomr0lERNQeCe5huHnzJjZs2ACRSIQ5c+YgMDBQ4byHhwfs7e1x7tw5rQfZnO+//x6//PILgoOD4enpKegamUyGxMREuLi4PNXsDCIiovZKcA/DwYMHIRaLERISAmtra0RERDSp4+rqitu3b2sUQE1NDZKTkwEADx48QFVVFRISEgAAvXv3homJCYKDg+Hl5YWFCxcCAM6cOYP//ve/GD58OKRSKTIyMuTtderUST7tcvXq1RgwYACcnJxQU1ODEydO4MaNG3j33Xc1ipGIiKi9E5wwXLt2Df369YO1tbXSOnZ2dvIvf6FKSkqwceNGhbLG461bt8Le3h4NDQ0KYw4uX74MAIiJiUFMTIzCtYsWLcLw4cMBPEoefvrpJxQVFcHAwADdunXDe++9h969e2sUIxERUXsnOGGorq5udsGkx9XU1Gg8mNDe3h7h4eEq62zbtk3hePHixVi8eLHatht7JIiIiKhlBD/Il0qluHv3rso6mZmZTRZOIiIiouef4ITBz88Ply9fRnp6erPnk5OTkZGRAX9/f60FR0RERPpB8COJyZMnIz4+Hv/+978xduxY3Lt3DwBw8eJFpKWl4ddff4W1tTXGjx/fasESERGRbghOGKRSKVatWoVNmzYhKipKXr5+/XoAgIODA5YvX652nAMRERE9fzRauKl79+7YvHkzLl68iIyMDJSVlcHc3Bzu7u7o168fDA0NWytOIiIi0iGN95IwMDBA37590bdv39aI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",
"text/plain": [
""
]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 17,
"source": [
"_, estimated_interval_anti_optimal = ope.summarize_off_policy_estimates(\n",
" evaluation_policy_pscore=anti_optimal_policy_pscores[0],\n",
@@ -477,152 +499,130 @@
" evaluation_policy_pscore_item_position=anti_optimal_policy_pscores[1],\n",
" evaluation_policy_pscore_cascade=anti_optimal_policy_pscores[2],\n",
" alpha=0.05,\n",
- " n_bootstrap_samples=1000, # number of resampling performed in the bootstrap procedure\n",
+ " n_bootstrap_samples=1000, # number of resampling performed in bootstrap sampling\n",
" random_state=dataset_with_random_behavior.random_state,\n",
")"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- " mean 95.0% CI (lower) 95.0% CI (upper) policy_name\n",
- "sips 1.854516 1.829643 1.877320 anti-optimal\n",
- "iips 1.832793 1.815842 1.848599 anti-optimal\n",
- "rips 1.844397 1.824965 1.864795 anti-optimal \n",
- "\n"
- ]
- },
- {
- "output_type": "display_data",
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {}
- }
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"## (4) Evaluation of OPE estimators\n",
"Our final step is **the evaluation of OPE**, which evaluates and compares the estimation accuracy of OPE estimators.\n",
"\n",
- "With synthetic slate data, we can calculate the policy value of the evaluation policies. \n",
+ "With synthetic slate bandit data, we can calculate the policy value of the evaluation policies. \n",
"Therefore, we can compare the policy values estimated by OPE estimators with the ground-turths to evaluate the accuracy of OPE."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 18,
- "source": [
- "ground_truth_policy_value_random = dataset_with_random_behavior.calc_ground_truth_policy_value(\n",
- " context=bandit_feedback_with_random_behavior[\"context\"],\n",
- " evaluation_policy_logit_=random_policy_logit_\n",
- ")\n",
- "ground_truth_policy_value_random"
- ],
+ "execution_count": 19,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stderr",
+ "output_type": "stream",
"text": [
- "[calc_ground_truth_policy_value (pscore)]: 100%|██████████| 10000/10000 [00:04<00:00, 2268.03it/s]\n",
- "[calc_ground_truth_policy_value (expected reward), batch_size=3334]: 100%|██████████| 3/3 [00:01<00:00, 1.64it/s]\n"
+ "[calc_ground_truth_policy_value (pscore)]: 100%|██████████| 10000/10000 [00:05<00:00, 1703.90it/s]\n",
+ "[calc_ground_truth_policy_value (expected reward), batch_size=3334]: 100%|██████████| 3/3 [00:02<00:00, 1.13it/s]\n"
]
},
{
- "output_type": "execute_result",
"data": {
"text/plain": [
- "1.837144428308276"
+ "1.644826072014703"
]
},
+ "execution_count": 19,
"metadata": {},
- "execution_count": 18
+ "output_type": "execute_result"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 19,
"source": [
- "ground_truth_policy_value_optimal = dataset_with_random_behavior.calc_ground_truth_policy_value(\n",
+ "ground_truth_policy_value_random = dataset_with_random_behavior.calc_ground_truth_policy_value(\n",
" context=bandit_feedback_with_random_behavior[\"context\"],\n",
- " evaluation_policy_logit_=optimal_policy_logit_\n",
+ " evaluation_policy_logit_=random_policy_logit_\n",
")\n",
- "ground_truth_policy_value_optimal"
- ],
+ "ground_truth_policy_value_random"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stderr",
+ "output_type": "stream",
"text": [
- "[calc_ground_truth_policy_value (pscore)]: 100%|██████████| 10000/10000 [00:04<00:00, 2177.17it/s]\n",
- "[calc_ground_truth_policy_value (expected reward), batch_size=3334]: 100%|██████████| 3/3 [00:01<00:00, 1.71it/s]\n"
+ "[calc_ground_truth_policy_value (pscore)]: 100%|██████████| 10000/10000 [00:06<00:00, 1639.37it/s]\n",
+ "[calc_ground_truth_policy_value (expected reward), batch_size=3334]: 100%|██████████| 3/3 [00:02<00:00, 1.16it/s]\n"
]
},
{
- "output_type": "execute_result",
"data": {
"text/plain": [
- "1.8474242800908984"
+ "1.6125410474183628"
]
},
+ "execution_count": 20,
"metadata": {},
- "execution_count": 19
+ "output_type": "execute_result"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 20,
"source": [
- "ground_truth_policy_value_anti_optimal = dataset_with_random_behavior.calc_ground_truth_policy_value(\n",
+ "ground_truth_policy_value_optimal = dataset_with_random_behavior.calc_ground_truth_policy_value(\n",
" context=bandit_feedback_with_random_behavior[\"context\"],\n",
- " evaluation_policy_logit_=anti_optimal_policy_logit_\n",
+ " evaluation_policy_logit_=optimal_policy_logit_\n",
")\n",
- "ground_truth_policy_value_anti_optimal"
- ],
+ "ground_truth_policy_value_optimal"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stderr",
+ "output_type": "stream",
"text": [
- "[calc_ground_truth_policy_value (pscore)]: 100%|██████████| 10000/10000 [00:04<00:00, 2176.73it/s]\n",
- "[calc_ground_truth_policy_value (expected reward), batch_size=3334]: 100%|██████████| 3/3 [00:01<00:00, 1.71it/s]\n"
+ "[calc_ground_truth_policy_value (pscore)]: 100%|██████████| 10000/10000 [00:06<00:00, 1637.62it/s]\n",
+ "[calc_ground_truth_policy_value (expected reward), batch_size=3334]: 100%|██████████| 3/3 [00:02<00:00, 1.16it/s]\n"
]
},
{
- "output_type": "execute_result",
"data": {
"text/plain": [
- "1.8352871486686428"
+ "1.6893330966600806"
]
},
+ "execution_count": 21,
"metadata": {},
- "execution_count": 20
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "ground_truth_policy_value_anti_optimal = dataset_with_random_behavior.calc_ground_truth_policy_value(\n",
+ " context=bandit_feedback_with_random_behavior[\"context\"],\n",
+ " evaluation_policy_logit_=anti_optimal_policy_logit_\n",
+ ")\n",
+ "ground_truth_policy_value_anti_optimal"
+ ]
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
"source": [
"estimated_interval_random[\"ground_truth\"] = ground_truth_policy_value_random\n",
"estimated_interval_optimal[\"ground_truth\"] = ground_truth_policy_value_optimal\n",
@@ -635,19 +635,14 @@
" estimated_interval_anti_optimal\n",
" ]\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 22,
- "source": [
- "estimated_intervals"
- ],
+ "execution_count": 23,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/html": [
"\n",
@@ -678,75 +673,75 @@
"
\n",
" \n",
" sips \n",
- " 1.836816 \n",
- " 1.820500 \n",
- " 1.852505 \n",
+ " 1.646317 \n",
+ " 1.631293 \n",
+ " 1.662105 \n",
" random \n",
- " 1.837144 \n",
+ " 1.644826 \n",
" \n",
" \n",
" iips \n",
- " 1.836816 \n",
- " 1.820500 \n",
- " 1.852505 \n",
+ " 1.646317 \n",
+ " 1.631293 \n",
+ " 1.662105 \n",
" random \n",
- " 1.837144 \n",
+ " 1.644826 \n",
" \n",
" \n",
" rips \n",
- " 1.836816 \n",
- " 1.820500 \n",
- " 1.852505 \n",
+ " 1.646317 \n",
+ " 1.631293 \n",
+ " 1.662105 \n",
" random \n",
- " 1.837144 \n",
+ " 1.644826 \n",
" \n",
" \n",
" sips \n",
- " 1.830555 \n",
- " 1.803695 \n",
- " 1.860548 \n",
+ " 1.629474 \n",
+ " 1.585960 \n",
+ " 1.675414 \n",
" optimal \n",
- " 1.847424 \n",
+ " 1.612541 \n",
" \n",
" \n",
" iips \n",
- " 1.843117 \n",
- " 1.825576 \n",
- " 1.859695 \n",
+ " 1.674750 \n",
+ " 1.655507 \n",
+ " 1.692978 \n",
" optimal \n",
- " 1.847424 \n",
+ " 1.612541 \n",
" \n",
" \n",
" rips \n",
- " 1.838866 \n",
- " 1.815574 \n",
- " 1.862451 \n",
+ " 1.626834 \n",
+ " 1.594925 \n",
+ " 1.658154 \n",
" optimal \n",
- " 1.847424 \n",
+ " 1.612541 \n",
" \n",
" \n",
" sips \n",
- " 1.854516 \n",
- " 1.829643 \n",
- " 1.877320 \n",
+ " 1.691671 \n",
+ " 1.647720 \n",
+ " 1.737568 \n",
" anti-optimal \n",
- " 1.835287 \n",
+ " 1.689333 \n",
" \n",
" \n",
" iips \n",
- " 1.832793 \n",
- " 1.815842 \n",
- " 1.848599 \n",
+ " 1.602862 \n",
+ " 1.584707 \n",
+ " 1.623184 \n",
" anti-optimal \n",
- " 1.835287 \n",
+ " 1.689333 \n",
" \n",
" \n",
" rips \n",
- " 1.844397 \n",
- " 1.824965 \n",
- " 1.864795 \n",
+ " 1.687415 \n",
+ " 1.654940 \n",
+ " 1.722200 \n",
" anti-optimal \n",
- " 1.835287 \n",
+ " 1.689333 \n",
" \n",
" \n",
"\n",
@@ -754,51 +749,41 @@
],
"text/plain": [
" mean 95.0% CI (lower) 95.0% CI (upper) policy_name ground_truth\n",
- "sips 1.836816 1.820500 1.852505 random 1.837144\n",
- "iips 1.836816 1.820500 1.852505 random 1.837144\n",
- "rips 1.836816 1.820500 1.852505 random 1.837144\n",
- "sips 1.830555 1.803695 1.860548 optimal 1.847424\n",
- "iips 1.843117 1.825576 1.859695 optimal 1.847424\n",
- "rips 1.838866 1.815574 1.862451 optimal 1.847424\n",
- "sips 1.854516 1.829643 1.877320 anti-optimal 1.835287\n",
- "iips 1.832793 1.815842 1.848599 anti-optimal 1.835287\n",
- "rips 1.844397 1.824965 1.864795 anti-optimal 1.835287"
+ "sips 1.646317 1.631293 1.662105 random 1.644826\n",
+ "iips 1.646317 1.631293 1.662105 random 1.644826\n",
+ "rips 1.646317 1.631293 1.662105 random 1.644826\n",
+ "sips 1.629474 1.585960 1.675414 optimal 1.612541\n",
+ "iips 1.674750 1.655507 1.692978 optimal 1.612541\n",
+ "rips 1.626834 1.594925 1.658154 optimal 1.612541\n",
+ "sips 1.691671 1.647720 1.737568 anti-optimal 1.689333\n",
+ "iips 1.602862 1.584707 1.623184 anti-optimal 1.689333\n",
+ "rips 1.687415 1.654940 1.722200 anti-optimal 1.689333"
]
},
+ "execution_count": 23,
"metadata": {},
- "execution_count": 22
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "estimated_intervals"
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"We can confirm that the three OPE estimators return the same results when the behavior policy and the evaluation policy is the same, and the estimates are quite similar to the `random_policy_value` calcurated above.\n",
"\n",
"We can also observe that the performance of OPE estimators are as follows in this simulation: `IIPS > RIPS > SIPS`."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 23,
- "source": [
- "# evaluate the estimation performances of OPE estimators \n",
- "# by comparing the estimated policy values and its ground-truth.\n",
- "# `summarize_estimators_comparison` returns a pandas dataframe containing estimation performances of given estimators \n",
- "\n",
- "relative_ee_for_random_evaluation_policy = ope.summarize_estimators_comparison(\n",
- " ground_truth_policy_value=ground_truth_policy_value_random,\n",
- " evaluation_policy_pscore=random_policy_pscores[0],\n",
- " evaluation_policy_pscore_item_position=random_policy_pscores[1],\n",
- " evaluation_policy_pscore_cascade=random_policy_pscores[2],\n",
- ")\n",
- "relative_ee_for_random_evaluation_policy"
- ],
+ "execution_count": 24,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/html": [
"
\n",
@@ -819,58 +804,58 @@
" \n",
" \n",
" \n",
- " relative-ee \n",
+ " se \n",
" \n",
" \n",
"
\n",
" \n",
" sips \n",
- " 0.000296 \n",
+ " 0.000002 \n",
" \n",
" \n",
" iips \n",
- " 0.000296 \n",
+ " 0.000002 \n",
" \n",
" \n",
" rips \n",
- " 0.000296 \n",
+ " 0.000002 \n",
" \n",
" \n",
"\n",
""
],
"text/plain": [
- " relative-ee\n",
- "sips 0.000296\n",
- "iips 0.000296\n",
- "rips 0.000296"
+ " se\n",
+ "sips 0.000002\n",
+ "iips 0.000002\n",
+ "rips 0.000002"
]
},
+ "execution_count": 24,
"metadata": {},
- "execution_count": 23
+ "output_type": "execute_result"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 24,
"source": [
"# evaluate the estimation performances of OPE estimators \n",
"# by comparing the estimated policy values and its ground-truth.\n",
"# `summarize_estimators_comparison` returns a pandas dataframe containing estimation performances of given estimators \n",
"\n",
- "relative_ee_for_optimal_evaluation_policy = ope.summarize_estimators_comparison(\n",
- " ground_truth_policy_value=ground_truth_policy_value_optimal,\n",
- " evaluation_policy_pscore=optimal_policy_pscores[0],\n",
- " evaluation_policy_pscore_item_position=optimal_policy_pscores[1],\n",
- " evaluation_policy_pscore_cascade=optimal_policy_pscores[2],\n",
+ "relative_ee_for_random_evaluation_policy = ope.summarize_estimators_comparison(\n",
+ " ground_truth_policy_value=ground_truth_policy_value_random,\n",
+ " evaluation_policy_pscore=random_policy_pscores[0],\n",
+ " evaluation_policy_pscore_item_position=random_policy_pscores[1],\n",
+ " evaluation_policy_pscore_cascade=random_policy_pscores[2],\n",
")\n",
- "relative_ee_for_optimal_evaluation_policy"
- ],
+ "relative_ee_for_random_evaluation_policy"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/html": [
"
\n",
@@ -891,58 +876,58 @@
" \n",
" \n",
" \n",
- " relative-ee \n",
+ " se \n",
" \n",
" \n",
"
\n",
" \n",
" sips \n",
- " 0.009303 \n",
+ " 0.000283 \n",
" \n",
" \n",
" iips \n",
- " 0.002470 \n",
+ " 0.003849 \n",
" \n",
" \n",
" rips \n",
- " 0.004732 \n",
+ " 0.000201 \n",
" \n",
" \n",
"\n",
""
],
"text/plain": [
- " relative-ee\n",
- "sips 0.009303\n",
- "iips 0.002470\n",
- "rips 0.004732"
+ " se\n",
+ "sips 0.000283\n",
+ "iips 0.003849\n",
+ "rips 0.000201"
]
},
+ "execution_count": 25,
"metadata": {},
- "execution_count": 24
+ "output_type": "execute_result"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 25,
"source": [
"# evaluate the estimation performances of OPE estimators \n",
"# by comparing the estimated policy values and its ground-truth.\n",
"# `summarize_estimators_comparison` returns a pandas dataframe containing estimation performances of given estimators \n",
"\n",
- "relative_ee_for_anti_optimal_evaluation_policy = ope.summarize_estimators_comparison(\n",
- " ground_truth_policy_value=ground_truth_policy_value_anti_optimal,\n",
- " evaluation_policy_pscore=anti_optimal_policy_pscores[0],\n",
- " evaluation_policy_pscore_item_position=anti_optimal_policy_pscores[1],\n",
- " evaluation_policy_pscore_cascade=anti_optimal_policy_pscores[2],\n",
+ "relative_ee_for_optimal_evaluation_policy = ope.summarize_estimators_comparison(\n",
+ " ground_truth_policy_value=ground_truth_policy_value_optimal,\n",
+ " evaluation_policy_pscore=optimal_policy_pscores[0],\n",
+ " evaluation_policy_pscore_item_position=optimal_policy_pscores[1],\n",
+ " evaluation_policy_pscore_cascade=optimal_policy_pscores[2],\n",
")\n",
- "relative_ee_for_anti_optimal_evaluation_policy"
- ],
+ "relative_ee_for_optimal_evaluation_policy"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/html": [
"
\n",
@@ -963,123 +948,119 @@
" \n",
" \n",
" \n",
- " relative-ee \n",
+ " se \n",
" \n",
" \n",
"
\n",
" \n",
" sips \n",
- " 0.010281 \n",
+ " 0.000006 \n",
" \n",
" \n",
" iips \n",
- " 0.001506 \n",
+ " 0.007534 \n",
" \n",
" \n",
" rips \n",
- " 0.004751 \n",
+ " 0.000005 \n",
" \n",
" \n",
"\n",
""
],
"text/plain": [
- " relative-ee\n",
- "sips 0.010281\n",
- "iips 0.001506\n",
- "rips 0.004751"
+ " se\n",
+ "sips 0.000006\n",
+ "iips 0.007534\n",
+ "rips 0.000005"
]
},
+ "execution_count": 26,
"metadata": {},
- "execution_count": 25
+ "output_type": "execute_result"
}
],
- "metadata": {}
+ "source": [
+ "# evaluate the estimation performances of OPE estimators \n",
+ "# by comparing the estimated policy values and its ground-truth.\n",
+ "# `summarize_estimators_comparison` returns a pandas dataframe containing estimation performances of given estimators \n",
+ "\n",
+ "relative_ee_for_anti_optimal_evaluation_policy = ope.summarize_estimators_comparison(\n",
+ " ground_truth_policy_value=ground_truth_policy_value_anti_optimal,\n",
+ " evaluation_policy_pscore=anti_optimal_policy_pscores[0],\n",
+ " evaluation_policy_pscore_item_position=anti_optimal_policy_pscores[1],\n",
+ " evaluation_policy_pscore_cascade=anti_optimal_policy_pscores[2],\n",
+ ")\n",
+ "relative_ee_for_anti_optimal_evaluation_policy"
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"The variance of OPE estimators is as follows: `SIPS > RIPS > IIPS`."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
"source": [
"estimated_intervals[\"errbar_length\"] = (\n",
" estimated_intervals.drop([\"mean\", \"policy_name\", \"ground_truth\"], axis=1).diff(axis=1).iloc[:, -1].abs()\n",
")"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 27,
- "source": [
- "alpha = 0.05\n",
- "plt.style.use(\"ggplot\")\n",
- "\n",
- "def errplot(x, y, yerr, **kwargs):\n",
- " ax = plt.gca()\n",
- " data = kwargs.pop(\"data\")\n",
- " data.plot(x=x, y=y, yerr=yerr, kind=\"bar\", ax=ax, **kwargs)\n",
- " ax.hlines(data[\"ground_truth\"].iloc[0], -1, len(x)+1)\n",
- "# ax.set_xlabel(\"OPE estimator\")\n",
- " \n",
- "g = sns.FacetGrid(\n",
- " estimated_intervals.reset_index().rename(columns={\"index\": \"OPE estimator\", \"mean\": \"Policy value\"}),\n",
- " col=\"policy_name\"\n",
- ")\n",
- "g.map_dataframe(errplot, \"OPE estimator\", \"Policy value\", \"errbar_length\")\n",
- "plt.ylim((1.7, 1.9))"
- ],
+ "execution_count": 28,
+ "metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/plain": [
- "(1.7, 1.9)"
+ "
"
]
},
+ "execution_count": 28,
"metadata": {},
- "execution_count": 27
+ "output_type": "execute_result"
},
{
- "output_type": "display_data",
"data": {
- "image/png": "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",
+ "image/png": "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",
"text/plain": [
""
]
},
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "source": [],
- "outputs": [],
- "metadata": {}
- },
- {
- "cell_type": "markdown",
"source": [
- "It is surprising that `RIPS` estimator does not achieve the best performance even if the reward structure is not independent. If we run a simulation where the reward of each position depends heavily on those of other positions, `RIPS`estimator could achieve the best performance.\n",
- ""
- ],
- "metadata": {}
+ "alpha = 0.05\n",
+ "plt.style.use(\"ggplot\")\n",
+ "\n",
+ "def errplot(x, y, yerr, **kwargs):\n",
+ " ax = plt.gca()\n",
+ " data = kwargs.pop(\"data\")\n",
+ " data.plot(x=x, y=y, yerr=yerr, kind=\"bar\", ax=ax, **kwargs)\n",
+ " ax.hlines(data[\"ground_truth\"].iloc[0], -1, len(x)+1)\n",
+ " \n",
+ "g = sns.FacetGrid(\n",
+ " estimated_intervals.reset_index().rename(columns={\"index\": \"OPE estimator\", \"mean\": \"Policy value\"}),\n",
+ " col=\"policy_name\"\n",
+ ")\n",
+ "g.map_dataframe(errplot, \"OPE estimator\", \"Policy value\", \"errbar_length\")"
+ ]
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
}
],
"metadata": {
@@ -1098,9 +1079,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.9.1"
+ "version": "3.9.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
-}
\ No newline at end of file
+}
diff --git a/examples/synthetic/README.md b/examples/synthetic/README.md
index b6a77705..9f25429b 100644
--- a/examples/synthetic/README.md
+++ b/examples/synthetic/README.md
@@ -1,14 +1,13 @@
-# Example with Synthetic Bandit Data
-
+# Example Experiment with Synthetic Bandit Data
## Description
-Here, we use synthetic bandit datasets to evaluate OPE estimators.
-Specifically, we evaluate the estimation performances of well-known off-policy estimators using the ground-truth policy value of an evaluation policy calculable with synthetic data.
+We use synthetic bandit datasets to evaluate OPE estimators. Specifically, we evaluate the estimation performance of well-known estimators using the ground-truth policy value of an evaluation policy calculable with synthetic data.
## Evaluating Off-Policy Estimators
-In the following, we evaluate the estimation performances of
+In the following, we evaluate the estimation performance of
+
- Direct Method (DM)
- Inverse Probability Weighting (IPW)
- Self-Normalized Inverse Probability Weighting (SNIPW)
@@ -17,12 +16,12 @@ In the following, we evaluate the estimation performances of
- Switch Doubly Robust (Switch-DR)
- Doubly Robust with Optimistic Shrinkage (DRos)
-For Switch-IPW, Switch-DR, and DRos, we try some different values of hyperparameters.
+For Switch-DR and DRos, we tune the built-in hyperparameters using SLOPE, a data-driven hyperparameter tuning method for OPE estimators.
See [our documentation](https://zr-obp.readthedocs.io/en/latest/estimators.html) for the details about these estimators.
### Files
-- [`./evaluate_off_policy_estimators.py`](./evaluate_off_policy_estimators.py) implements the evaluation of OPE estimators using synthetic bandit feedback data.
-- [`./conf/hyperparams.yaml`](./conf/hyperparams.yaml) defines hyperparameters of some machine learning methods used to define regression model and IPWLearner.
+- [`./evaluate_off_policy_estimators.py`](./evaluate_off_policy_estimators.py) implements the evaluation of OPE estimators using synthetic bandit data.
+- [`./conf/hyperparams.yaml`](./conf/hyperparams.yaml) defines hyperparameters of some ML methods used to define regression model and IPWLearner.
### Scripts
@@ -33,48 +32,58 @@ python evaluate_off_policy_estimators.py\
--n_rounds $n_rounds\
--n_actions $n_actions\
--dim_context $dim_context\
+ --beta $beta\
--base_model_for_evaluation_policy $base_model_for_evaluation_policy\
--base_model_for_reg_model $base_model_for_reg_model\
--n_jobs $n_jobs\
--random_state $random_state
```
- `$n_runs` specifies the number of simulation runs in the experiment to estimate standard deviations of the performance of OPE estimators.
-- `$n_rounds` and `$n_actions` specify the number of rounds (or samples) and the number of actions of the synthetic bandit data.
+- `$n_rounds` and `$n_actions` specify the sample size and the number of actions of the synthetic bandit data, respectively.
- `$dim_context` specifies the dimension of context vectors.
+- `$beta` specifies the inverse temperature parameter to control the behavior policy.
- `$base_model_for_evaluation_policy` specifies the base ML model for defining evaluation policy and should be one of "logistic_regression", "random_forest", or "lightgbm".
- `$base_model_for_reg_model` specifies the base ML model for defining regression model and should be one of "logistic_regression", "random_forest", or "lightgbm".
- `$n_jobs` is the maximum number of concurrently running jobs.
-For example, the following command compares the estimation performances (relative estimation error; relative-ee) of the OPE estimators using the synthetic bandit feedback data with 100,000 rounds, 30 actions, five dimensional context vectors.
+For example, the following command compares the estimation performance (relative estimation error; relative-ee) of the OPE estimators using synthetic bandit data with 10,000 samples, 30 actions, five dimensional context vectors.
```bash
python evaluate_off_policy_estimators.py\
--n_runs 20\
- --n_rounds 100000\
+ --n_rounds 10000\
--n_actions 30\
--dim_context 5\
+ --beta -3\
--base_model_for_evaluation_policy logistic_regression\
--base_model_for_reg_model logistic_regression\
--n_jobs -1\
--random_state 12345
# relative-ee of OPE estimators and their standard deviations (lower means accurate).
-# It appears that the performances of some OPE estimators depend on the choice of their hyperparameters.
# =============================================
# random_state=12345
# ---------------------------------------------
-# mean std
-# dm 0.194715 0.011648
-# ipw 0.017928 0.013640
-# snipw 0.006098 0.004345
-# dr 0.005692 0.005207
-# sndr 0.004725 0.003328
-# switch-dr (tau=1) 0.194715 0.011648
-# switch-dr (tau=100) 0.005692 0.005207
-# dr-os (lambda=1) 0.194484 0.011651
-# dr-os (lambda=100) 0.174531 0.011997
+# mean std
+# dm 0.074390 0.024525
+# ipw 0.009481 0.006899
+# snipw 0.006665 0.004541
+# dr 0.006175 0.004245
+# sndr 0.006118 0.003997
+# switch-dr 0.006175 0.004245
+# dr-os 0.021951 0.013337
# =============================================
```
-The above result can change with different situations.
-You can try the evaluation of OPE with other experimental settings easily.
+The above result can change with different situations. You can try the evaluation of OPE with other experimental settings easily.
+
+## References
+
+- Yi Su, Pavithra Srinath, Akshay Krishnamurthy. [Adaptive Estimator Selection for Off-Policy Evaluation](https://arxiv.org/abs/2002.07729), ICML2020.
+- Yi Su, Maria Dimakopoulou, Akshay Krishnamurthy, Miroslav Dudík. [Doubly Robust Off-policy Evaluation with Shrinkage](https://arxiv.org/abs/1907.09623), ICML2020.
+- George Tucker and Jonathan Lee. [Improved Estimator Selection for Off-Policy Evaluation](https://lyang36.github.io/icml2021_rltheory/camera_ready/79.pdf), Workshop on Reinforcement Learning
+Theory at ICML2021.
+- Yu-Xiang Wang, Alekh Agarwal, Miroslav Dudik. [Optimal and Adaptive Off-policy Evaluation in Contextual Bandits](https://arxiv.org/abs/1612.01205), ICML2017.
+- Miroslav Dudik, John Langford, Lihong Li. [Doubly Robust Policy Evaluation and Learning](https://arxiv.org/abs/1103.4601). ICML2011.
+- Yuta Saito, Shunsuke Aihara, Megumi Matsutani, Yusuke Narita. [Open Bandit Dataset and Pipeline: Towards Realistic and Reproducible Off-Policy Evaluation](https://arxiv.org/abs/2008.07146). NeurIPS2021 Track on Datasets and Benchmarks.
+
diff --git a/examples/synthetic/evaluate_off_policy_estimators.py b/examples/synthetic/evaluate_off_policy_estimators.py
index c93e6415..f429d5bc 100644
--- a/examples/synthetic/evaluate_off_policy_estimators.py
+++ b/examples/synthetic/evaluate_off_policy_estimators.py
@@ -10,18 +10,17 @@
from sklearn.linear_model import LogisticRegression
import yaml
-from obp.dataset import linear_behavior_policy
from obp.dataset import logistic_reward_function
from obp.dataset import SyntheticBanditDataset
from obp.ope import DirectMethod
from obp.ope import DoublyRobust
-from obp.ope import DoublyRobustWithShrinkage
+from obp.ope import DoublyRobustWithShrinkageTuning
from obp.ope import InverseProbabilityWeighting
from obp.ope import OffPolicyEvaluation
from obp.ope import RegressionModel
from obp.ope import SelfNormalizedDoublyRobust
from obp.ope import SelfNormalizedInverseProbabilityWeighting
-from obp.ope import SwitchDoublyRobust
+from obp.ope import SwitchDoublyRobustTuning
from obp.policy import IPWLearner
@@ -42,15 +41,15 @@
SelfNormalizedInverseProbabilityWeighting(),
DoublyRobust(),
SelfNormalizedDoublyRobust(),
- SwitchDoublyRobust(lambda_=1.0, estimator_name="switch-dr (lambda=1)"),
- SwitchDoublyRobust(lambda_=100.0, estimator_name="switch-dr (lambda=100)"),
- DoublyRobustWithShrinkage(lambda_=1.0, estimator_name="dr-os (lambda=1)"),
- DoublyRobustWithShrinkage(lambda_=100.0, estimator_name="dr-os (lambda=100)"),
+ SwitchDoublyRobustTuning(lambdas=[10, 50, 100, 500, 1000, 5000, 10000, np.inf]),
+ DoublyRobustWithShrinkageTuning(
+ lambdas=[10, 50, 100, 500, 1000, 5000, 10000, np.inf]
+ ),
]
if __name__ == "__main__":
parser = argparse.ArgumentParser(
- description="evaluate off-policy estimators with synthetic bandit data."
+ description="evaluate the accuracy of OPE estimators on synthetic bandit data."
)
parser.add_argument(
"--n_runs", type=int, default=1, help="number of simulations in the experiment."
@@ -59,19 +58,25 @@
"--n_rounds",
type=int,
default=10000,
- help="number of rounds for synthetic bandit feedback.",
+ help="sample size of logged bandit data.",
)
parser.add_argument(
"--n_actions",
type=int,
default=10,
- help="number of actions for synthetic bandit feedback.",
+ help="number of actions.",
)
parser.add_argument(
"--dim_context",
type=int,
default=5,
- help="dimensions of context vectors characterizing each round.",
+ help="dimensions of context vectors.",
+ )
+ parser.add_argument(
+ "--beta",
+ type=float,
+ default=3,
+ help="inverse temperature parameter to control the behavior policy.",
)
parser.add_argument(
"--base_model_for_evaluation_policy",
@@ -102,6 +107,7 @@
n_rounds = args.n_rounds
n_actions = args.n_actions
dim_context = args.dim_context
+ beta = args.beta
base_model_for_evaluation_policy = args.base_model_for_evaluation_policy
base_model_for_reg_model = args.base_model_for_reg_model
n_jobs = args.n_jobs
@@ -113,7 +119,7 @@ def process(i: int):
n_actions=n_actions,
dim_context=dim_context,
reward_function=logistic_reward_function,
- behavior_policy_function=linear_behavior_policy,
+ beta=beta,
random_state=i,
)
# define evaluation policy using IPWLearner
@@ -123,21 +129,21 @@ def process(i: int):
**hyperparams[base_model_for_evaluation_policy]
),
)
- # sample new training and test sets of synthetic logged bandit feedback
+ # sample new training and test sets of synthetic logged bandit data
bandit_feedback_train = dataset.obtain_batch_bandit_feedback(n_rounds=n_rounds)
bandit_feedback_test = dataset.obtain_batch_bandit_feedback(n_rounds=n_rounds)
- # train the evaluation policy on the training set of the synthetic logged bandit feedback
+ # train the evaluation policy on the training set of the synthetic logged bandit data
evaluation_policy.fit(
context=bandit_feedback_train["context"],
action=bandit_feedback_train["action"],
reward=bandit_feedback_train["reward"],
pscore=bandit_feedback_train["pscore"],
)
- # predict the action decisions for the test set of the synthetic logged bandit feedback
- action_dist = evaluation_policy.predict(
+ # predict the action decisions for the test set of the synthetic logged bandit data
+ action_dist = evaluation_policy.predict_proba(
context=bandit_feedback_test["context"],
)
- # estimate the mean reward function of the test set of synthetic bandit feedback with ML model
+ # estimate the reward function of the test set of synthetic bandit feedback with ML model
regression_model = RegressionModel(
n_actions=dataset.n_actions,
action_context=dataset.action_context,
@@ -157,37 +163,38 @@ def process(i: int):
bandit_feedback=bandit_feedback_test,
ope_estimators=ope_estimators,
)
- relative_ee_i = ope.evaluate_performance_of_estimators(
+ metric_i = ope.evaluate_performance_of_estimators(
ground_truth_policy_value=dataset.calc_ground_truth_policy_value(
expected_reward=bandit_feedback_test["expected_reward"],
action_dist=action_dist,
),
action_dist=action_dist,
estimated_rewards_by_reg_model=estimated_rewards_by_reg_model,
+ metric="relative-ee",
)
- return relative_ee_i
+ return metric_i
processed = Parallel(
n_jobs=n_jobs,
verbose=50,
)([delayed(process)(i) for i in np.arange(n_runs)])
- relative_ee_dict = {est.estimator_name: dict() for est in ope_estimators}
- for i, relative_ee_i in enumerate(processed):
+ metric_dict = {est.estimator_name: dict() for est in ope_estimators}
+ for i, metric_i in enumerate(processed):
for (
estimator_name,
relative_ee_,
- ) in relative_ee_i.items():
- relative_ee_dict[estimator_name][i] = relative_ee_
- relative_ee_df = DataFrame(relative_ee_dict).describe().T.round(6)
+ ) in metric_i.items():
+ metric_dict[estimator_name][i] = relative_ee_
+ results_df = DataFrame(metric_dict).describe().T.round(6)
print("=" * 45)
print(f"random_state={random_state}")
print("-" * 45)
- print(relative_ee_df[["mean", "std"]])
+ print(results_df[["mean", "std"]])
print("=" * 45)
- # save results of the evaluation of off-policy estimators in './logs' directory.
+ # save results of the evaluation of OPE in './logs' directory.
log_path = Path("./logs")
log_path.mkdir(exist_ok=True, parents=True)
- relative_ee_df.to_csv(log_path / "relative_ee_of_ope_estimators.csv")
+ results_df.to_csv(log_path / "evaluation_of_ope_results.csv")
diff --git a/examples/synthetic/obtain_slate_bandit_feedback.py b/examples/synthetic/obtain_slate_bandit_feedback.py
deleted file mode 100644
index d13518a8..00000000
--- a/examples/synthetic/obtain_slate_bandit_feedback.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import argparse
-
-from obp.dataset import linear_behavior_policy_logit
-from obp.dataset import logistic_reward_function
-from obp.dataset import SyntheticSlateBanditDataset
-
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="run slate dataset.")
- parser.add_argument(
- "--n_unique_action", type=int, default=10, help="number of unique actions."
- )
- parser.add_argument(
- "--len_list", type=int, default=3, help="number of item positions."
- )
- parser.add_argument("--n_rounds", type=int, default=100, help="number of slates.")
- parser.add_argument(
- "--clip_logit_value",
- type=float,
- default=None,
- help="a float parameter to clip logit value.",
- )
- parser.add_argument(
- "--is_factorizable",
- type=bool,
- default=False,
- help="a boolean parameter whether to use factorizable evaluation policy.",
- )
- parser.add_argument(
- "--return_pscore_item_position",
- type=bool,
- default=True,
- help="a boolean parameter whether `pscore_item_position` is returned or not",
- )
- parser.add_argument("--random_state", type=int, default=12345)
- args = parser.parse_args()
- dataset = SyntheticSlateBanditDataset(
- n_unique_action=args.n_unique_action,
- dim_context=5,
- len_list=args.len_list,
- base_reward_function=logistic_reward_function,
- behavior_policy_function=linear_behavior_policy_logit,
- reward_type="binary",
- reward_structure="cascade_additive",
- click_model="cascade",
- random_state=12345,
- is_factorizable=args.is_factorizable,
- )
- bandit_feedback = dataset.obtain_batch_bandit_feedback(
- n_rounds=args.n_rounds,
- return_pscore_item_position=args.return_pscore_item_position,
- clip_logit_value=args.clip_logit_value,
- )
diff --git a/obd/README.md b/obd/README.md
index 710bb6d4..0dc81351 100644
--- a/obd/README.md
+++ b/obd/README.md
@@ -23,7 +23,7 @@ When using this dataset, please cite the paper with following bibtex:
## Data description
Open Bandit Dataset is constructed in an A/B test of two multi-armed bandit policies on a large-scale fashion e-commerce platform, [ZOZOTOWN](https://zozo.jp/).
It currently consists of a total of about 26M rows, each one representing a user impression with some feature values, selected items as actions, true propensity scores, and click indicators as an outcome.
-This is especially suitable for evaluating *off-policy evaluation* (OPE), which attempts to estimate the counterfactual performance of hypothetical algorithms using data generated by a different algorithm.
+This is especially suitable for evaluating *off-policy evaluation* (OPE), which aims to estimate the counterfactual performance of hypothetical algorithms using data generated by a different algorithm.
## Fields
diff --git a/obp/version.py b/obp/version.py
index dd9b22cc..72251527 100644
--- a/obp/version.py
+++ b/obp/version.py
@@ -1 +1 @@
-__version__ = "0.5.1"
+__version__ = "0.5.2"
diff --git a/poetry.lock b/poetry.lock
index f3ea071b..60c0ab8e 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -293,11 +293,11 @@ six = "*"
[[package]]
name = "pillow"
-version = "8.3.2"
+version = "9.0.0"
description = "Python Imaging Library (Fork)"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pingouin"
@@ -455,7 +455,7 @@ python-versions = "*"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -473,31 +473,31 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "scikit-learn"
-version = "0.24.2"
+version = "1.0.2"
description = "A set of python modules for machine learning and data mining"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
joblib = ">=0.11"
-numpy = ">=1.13.3"
-scipy = ">=0.19.1"
+numpy = ">=1.14.6"
+scipy = ">=1.1.0"
threadpoolctl = ">=2.0.0"
[package.extras]
-benchmark = ["matplotlib (>=2.1.1)", "pandas (>=0.25.0)", "memory-profiler (>=0.57.0)"]
-docs = ["matplotlib (>=2.1.1)", "scikit-image (>=0.13)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)", "memory-profiler (>=0.57.0)", "sphinx (>=3.2.0)", "sphinx-gallery (>=0.7.0)", "numpydoc (>=1.0.0)", "Pillow (>=7.1.2)", "sphinx-prompt (>=1.3.0)"]
-examples = ["matplotlib (>=2.1.1)", "scikit-image (>=0.13)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)"]
-tests = ["matplotlib (>=2.1.1)", "scikit-image (>=0.13)", "pandas (>=0.25.0)", "pytest (>=5.0.1)", "pytest-cov (>=2.9.0)", "flake8 (>=3.8.2)", "mypy (>=0.770)", "pyamg (>=4.0.0)"]
+benchmark = ["matplotlib (>=2.2.3)", "pandas (>=0.25.0)", "memory-profiler (>=0.57.0)"]
+docs = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)", "memory-profiler (>=0.57.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "numpydoc (>=1.0.0)", "Pillow (>=7.1.2)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"]
+examples = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)"]
+tests = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "pytest (>=5.0.1)", "pytest-cov (>=2.9.0)", "flake8 (>=3.8.2)", "black (>=21.6b0)", "mypy (>=0.770)", "pyamg (>=4.0.0)"]
[[package]]
name = "scipy"
-version = "1.7.1"
+version = "1.7.3"
description = "SciPy: Scientific Library for Python"
category = "main"
optional = false
-python-versions = ">=3.7,<3.10"
+python-versions = ">=3.7,<3.11"
[package.dependencies]
numpy = ">=1.16.5,<1.23.0"
@@ -669,7 +669,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
[metadata]
lock-version = "1.1"
python-versions = ">=3.7.1,<3.10"
-content-hash = "b6b471713e1b952220bcf91c61cadd1ba024c2bc9d3356d48bda6c603a9e8a19"
+content-hash = "e4d2959b18e1b6fd5f213a56ac87377422bc04958248696096c6f0962bd69719"
[metadata.files]
atomicwrites = [
@@ -882,47 +882,38 @@ patsy = [
{file = "patsy-0.5.1.tar.gz", hash = "sha256:f115cec4201e1465cd58b9866b0b0e7b941caafec129869057405bfe5b5e3991"},
]
pillow = [
- {file = "Pillow-8.3.2-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:c691b26283c3a31594683217d746f1dad59a7ae1d4cfc24626d7a064a11197d4"},
- {file = "Pillow-8.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f514c2717012859ccb349c97862568fdc0479aad85b0270d6b5a6509dbc142e2"},
- {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be25cb93442c6d2f8702c599b51184bd3ccd83adebd08886b682173e09ef0c3f"},
- {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d675a876b295afa114ca8bf42d7f86b5fb1298e1b6bb9a24405a3f6c8338811c"},
- {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59697568a0455764a094585b2551fd76bfd6b959c9f92d4bdec9d0e14616303a"},
- {file = "Pillow-8.3.2-cp310-cp310-win32.whl", hash = "sha256:2d5e9dc0bf1b5d9048a94c48d0813b6c96fccfa4ccf276d9c36308840f40c228"},
- {file = "Pillow-8.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:11c27e74bab423eb3c9232d97553111cc0be81b74b47165f07ebfdd29d825875"},
- {file = "Pillow-8.3.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:11eb7f98165d56042545c9e6db3ce394ed8b45089a67124298f0473b29cb60b2"},
- {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f23b2d3079522fdf3c09de6517f625f7a964f916c956527bed805ac043799b8"},
- {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19ec4cfe4b961edc249b0e04b5618666c23a83bc35842dea2bfd5dfa0157f81b"},
- {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5a31c07cea5edbaeb4bdba6f2b87db7d3dc0f446f379d907e51cc70ea375629"},
- {file = "Pillow-8.3.2-cp36-cp36m-win32.whl", hash = "sha256:4abc247b31a98f29e5224f2d31ef15f86a71f79c7f4d2ac345a5d551d6393073"},
- {file = "Pillow-8.3.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a048dad5ed6ad1fad338c02c609b862dfaa921fcd065d747194a6805f91f2196"},
- {file = "Pillow-8.3.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:06d1adaa284696785375fa80a6a8eb309be722cf4ef8949518beb34487a3df71"},
- {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd24054aaf21e70a51e2a2a5ed1183560d3a69e6f9594a4bfe360a46f94eba83"},
- {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a330bf7014ee034046db43ccbb05c766aa9e70b8d6c5260bfc38d73103b0ba"},
- {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13654b521fb98abdecec105ea3fb5ba863d1548c9b58831dd5105bb3873569f1"},
- {file = "Pillow-8.3.2-cp37-cp37m-win32.whl", hash = "sha256:085a90a99404b859a4b6c3daa42afde17cb3ad3115e44a75f0d7b4a32f06a6c9"},
- {file = "Pillow-8.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:18a07a683805d32826c09acfce44a90bf474e6a66ce482b1c7fcd3757d588df3"},
- {file = "Pillow-8.3.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4e59e99fd680e2b8b11bbd463f3c9450ab799305d5f2bafb74fefba6ac058616"},
- {file = "Pillow-8.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4d89a2e9219a526401015153c0e9dd48319ea6ab9fe3b066a20aa9aee23d9fd3"},
- {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fd98c8294f57636084f4b076b75f86c57b2a63a8410c0cd172bc93695ee979"},
- {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b11c9d310a3522b0fd3c35667914271f570576a0e387701f370eb39d45f08a4"},
- {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0412516dcc9de9b0a1e0ae25a280015809de8270f134cc2c1e32c4eeb397cf30"},
- {file = "Pillow-8.3.2-cp38-cp38-win32.whl", hash = "sha256:ce2e5e04bb86da6187f96d7bab3f93a7877830981b37f0287dd6479e27a10341"},
- {file = "Pillow-8.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:35d27687f027ad25a8d0ef45dd5208ef044c588003cdcedf05afb00dbc5c2deb"},
- {file = "Pillow-8.3.2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:04835e68ef12904bc3e1fd002b33eea0779320d4346082bd5b24bec12ad9c3e9"},
- {file = "Pillow-8.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:10e00f7336780ca7d3653cf3ac26f068fa11b5a96894ea29a64d3dc4b810d630"},
- {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cde7a4d3687f21cffdf5bb171172070bb95e02af448c4c8b2f223d783214056"},
- {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c3ff00110835bdda2b1e2b07f4a2548a39744bb7de5946dc8e95517c4fb2ca6"},
- {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d409030bf3bd05fa66fb5fdedc39c521b397f61ad04309c90444e893d05f7d"},
- {file = "Pillow-8.3.2-cp39-cp39-win32.whl", hash = "sha256:963ebdc5365d748185fdb06daf2ac758116deecb2277ec5ae98139f93844bc09"},
- {file = "Pillow-8.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:cc9d0dec711c914ed500f1d0d3822868760954dce98dfb0b7382a854aee55d19"},
- {file = "Pillow-8.3.2-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2c661542c6f71dfd9dc82d9d29a8386287e82813b0375b3a02983feac69ef864"},
- {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:838eb85de6d9307c19c655c726f8d13b8b646f144ca6b3771fa62b711ebf7624"},
- {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:feb5db446e96bfecfec078b943cc07744cc759893cef045aa8b8b6d6aaa8274e"},
- {file = "Pillow-8.3.2-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:fc0db32f7223b094964e71729c0361f93db43664dd1ec86d3df217853cedda87"},
- {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cb3dd7f23b044b0737317f892d399f9e2f0b3a02b22b2c692851fb8120d82c6"},
- {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a66566f8a22561fc1a88dc87606c69b84fa9ce724f99522cf922c801ec68f5c1"},
- {file = "Pillow-8.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ce651ca46d0202c302a535d3047c55a0131a720cf554a578fc1b8a2aff0e7d96"},
- {file = "Pillow-8.3.2.tar.gz", hash = "sha256:dde3f3ed8d00c72631bc19cbfff8ad3b6215062a5eed402381ad365f82f0c18c"},
+ {file = "Pillow-9.0.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:113723312215b25c22df1fdf0e2da7a3b9c357a7d24a93ebbe80bfda4f37a8d4"},
+ {file = "Pillow-9.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bb47a548cea95b86494a26c89d153fd31122ed65255db5dcbc421a2d28eb3379"},
+ {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31b265496e603985fad54d52d11970383e317d11e18e856971bdbb86af7242a4"},
+ {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d154ed971a4cc04b93a6d5b47f37948d1f621f25de3e8fa0c26b2d44f24e3e8f"},
+ {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fe92813d208ce8aa7d76da878bdc84b90809f79ccbad2a288e9bcbeac1d9bd"},
+ {file = "Pillow-9.0.0-cp310-cp310-win32.whl", hash = "sha256:d5dcea1387331c905405b09cdbfb34611050cc52c865d71f2362f354faee1e9f"},
+ {file = "Pillow-9.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:52abae4c96b5da630a8b4247de5428f593465291e5b239f3f843a911a3cf0105"},
+ {file = "Pillow-9.0.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:72c3110228944019e5f27232296c5923398496b28be42535e3b2dc7297b6e8b6"},
+ {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b6d21771da41497b81652d44191489296555b761684f82b7b544c49989110f"},
+ {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72f649d93d4cc4d8cf79c91ebc25137c358718ad75f99e99e043325ea7d56100"},
+ {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aaf07085c756f6cb1c692ee0d5a86c531703b6e8c9cae581b31b562c16b98ce"},
+ {file = "Pillow-9.0.0-cp37-cp37m-win32.whl", hash = "sha256:03b27b197deb4ee400ed57d8d4e572d2d8d80f825b6634daf6e2c18c3c6ccfa6"},
+ {file = "Pillow-9.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a09a9d4ec2b7887f7a088bbaacfd5c07160e746e3d47ec5e8050ae3b2a229e9f"},
+ {file = "Pillow-9.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:490e52e99224858f154975db61c060686df8a6b3f0212a678e5d2e2ce24675c9"},
+ {file = "Pillow-9.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:500d397ddf4bbf2ca42e198399ac13e7841956c72645513e8ddf243b31ad2128"},
+ {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ebd8b9137630a7bbbff8c4b31e774ff05bbb90f7911d93ea2c9371e41039b52"},
+ {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd0e5062f11cb3e730450a7d9f323f4051b532781026395c4323b8ad055523c4"},
+ {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f3b4522148586d35e78313db4db0df4b759ddd7649ef70002b6c3767d0fdeb7"},
+ {file = "Pillow-9.0.0-cp38-cp38-win32.whl", hash = "sha256:0b281fcadbb688607ea6ece7649c5d59d4bbd574e90db6cd030e9e85bde9fecc"},
+ {file = "Pillow-9.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5050d681bcf5c9f2570b93bee5d3ec8ae4cf23158812f91ed57f7126df91762"},
+ {file = "Pillow-9.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c2067b3bb0781f14059b112c9da5a91c80a600a97915b4f48b37f197895dd925"},
+ {file = "Pillow-9.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d16b6196fb7a54aff6b5e3ecd00f7c0bab1b56eee39214b2b223a9d938c50af"},
+ {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98cb63ca63cb61f594511c06218ab4394bf80388b3d66cd61d0b1f63ee0ea69f"},
+ {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc462d24500ba707e9cbdef436c16e5c8cbf29908278af053008d9f689f56dee"},
+ {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3586e12d874ce2f1bc875a3ffba98732ebb12e18fb6d97be482bd62b56803281"},
+ {file = "Pillow-9.0.0-cp39-cp39-win32.whl", hash = "sha256:68e06f8b2248f6dc8b899c3e7ecf02c9f413aab622f4d6190df53a78b93d97a5"},
+ {file = "Pillow-9.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:6579f9ba84a3d4f1807c4aab4be06f373017fc65fff43498885ac50a9b47a553"},
+ {file = "Pillow-9.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:47f5cf60bcb9fbc46011f75c9b45a8b5ad077ca352a78185bd3e7f1d294b98bb"},
+ {file = "Pillow-9.0.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fd8053e1f8ff1844419842fd474fc359676b2e2a2b66b11cc59f4fa0a301315"},
+ {file = "Pillow-9.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c5439bfb35a89cac50e81c751317faea647b9a3ec11c039900cd6915831064d"},
+ {file = "Pillow-9.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95545137fc56ce8c10de646074d242001a112a92de169986abd8c88c27566a05"},
+ {file = "Pillow-9.0.0.tar.gz", hash = "sha256:ee6e2963e92762923956fe5d3479b1fdc3b76c83f290aad131a2f98c3df0593e"},
]
pingouin = [
{file = "pingouin-0.4.0.tar.gz", hash = "sha256:24249c4c98e4334736938ccb337f486b6a203206c68cfbee37b82c0f89c1ed88"},
@@ -1041,64 +1032,73 @@ regex = [
{file = "regex-2021.8.28.tar.gz", hash = "sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
scikit-learn = [
- {file = "scikit-learn-0.24.2.tar.gz", hash = "sha256:d14701a12417930392cd3898e9646cf5670c190b933625ebe7511b1f7d7b8736"},
- {file = "scikit_learn-0.24.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:d5bf9c863ba4717b3917b5227463ee06860fc43931dc9026747de416c0a10fee"},
- {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5beaeb091071625e83f5905192d8aecde65ba2f26f8b6719845bbf586f7a04a1"},
- {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:06ffdcaaf81e2a3b1b50c3ac6842cfb13df2d8b737d61f64643ed61da7389cde"},
- {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:fec42690a2eb646b384eafb021c425fab48991587edb412d4db77acc358b27ce"},
- {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:5ff3e4e4cf7592d36541edec434e09fb8ab9ba6b47608c4ffe30c9038d301897"},
- {file = "scikit_learn-0.24.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:3cbd734e1aefc7c5080e6b6973fe062f97c26a1cdf1a991037ca196ce1c8f427"},
- {file = "scikit_learn-0.24.2-cp36-cp36m-win32.whl", hash = "sha256:f74429a07fedb36a03c159332b914e6de757176064f9fed94b5f79ebac07d913"},
- {file = "scikit_learn-0.24.2-cp36-cp36m-win_amd64.whl", hash = "sha256:dd968a174aa82f3341a615a033fa6a8169e9320cbb46130686562db132d7f1f0"},
- {file = "scikit_learn-0.24.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:49ec0b1361da328da9bb7f1a162836028e72556356adeb53342f8fae6b450d47"},
- {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f18c3ed484eeeaa43a0d45dc2efb4d00fc6542ccdcfa2c45d7b635096a2ae534"},
- {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cdf24c1b9bbeb4936456b42ac5bd32c60bb194a344951acb6bfb0cddee5439a4"},
- {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d177fe1ff47cc235942d628d41ee5b1c6930d8f009f1a451c39b5411e8d0d4cf"},
- {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f3ec00f023d84526381ad0c0f2cff982852d035c921bbf8ceb994f4886c00c64"},
- {file = "scikit_learn-0.24.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:ae19ac105cf7ce8c205a46166992fdec88081d6e783ab6e38ecfbe45729f3c39"},
- {file = "scikit_learn-0.24.2-cp37-cp37m-win32.whl", hash = "sha256:f0ed4483c258fb23150e31b91ea7d25ff8495dba108aea0b0d4206a777705350"},
- {file = "scikit_learn-0.24.2-cp37-cp37m-win_amd64.whl", hash = "sha256:39b7e3b71bcb1fe46397185d6c1a5db1c441e71c23c91a31e7ad8cc3f7305f9a"},
- {file = "scikit_learn-0.24.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:90a297330f608adeb4d2e9786c6fda395d3150739deb3d42a86d9a4c2d15bc1d"},
- {file = "scikit_learn-0.24.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:f1d2108e770907540b5248977e4cff9ffaf0f73d0d13445ee938df06ca7579c6"},
- {file = "scikit_learn-0.24.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1eec963fe9ffc827442c2e9333227c4d49749a44e592f305398c1db5c1563393"},
- {file = "scikit_learn-0.24.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:2db429090b98045d71218a9ba913cc9b3fe78e0ba0b6b647d8748bc6d5a44080"},
- {file = "scikit_learn-0.24.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:62214d2954377fcf3f31ec867dd4e436df80121e7a32947a0b3244f58f45e455"},
- {file = "scikit_learn-0.24.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8fac72b9688176922f9f54fda1ba5f7ffd28cbeb9aad282760186e8ceba9139a"},
- {file = "scikit_learn-0.24.2-cp38-cp38-win32.whl", hash = "sha256:ae426e3a52842c6b6d77d00f906b6031c8c2cfdfabd6af7511bb4bc9a68d720e"},
- {file = "scikit_learn-0.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:038f4e9d6ef10e1f3fe82addc3a14735c299866eb10f2c77c090410904828312"},
- {file = "scikit_learn-0.24.2-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:48f273836e19901ba2beecd919f7b352f09310ce67c762f6e53bc6b81cacf1f0"},
- {file = "scikit_learn-0.24.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a2a47449093dcf70babc930beba2ca0423cb7df2fa5fd76be5260703d67fa574"},
- {file = "scikit_learn-0.24.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:0e71ce9c7cbc20f6f8b860107ce15114da26e8675238b4b82b7e7cd37ca0c087"},
- {file = "scikit_learn-0.24.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2754c85b2287333f9719db7f23fb7e357f436deed512db3417a02bf6f2830aa5"},
- {file = "scikit_learn-0.24.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:7be1b88c23cfac46e06404582215a917017cd2edaa2e4d40abe6aaff5458f24b"},
- {file = "scikit_learn-0.24.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:4e6198675a6f9d333774671bd536668680eea78e2e81c0b19e57224f58d17f37"},
- {file = "scikit_learn-0.24.2-cp39-cp39-win32.whl", hash = "sha256:cbdb0b3db99dd1d5f69d31b4234367d55475add31df4d84a3bd690ef017b55e2"},
- {file = "scikit_learn-0.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:40556bea1ef26ef54bc678d00cf138a63069144a0b5f3a436eecd8f3468b903e"},
+ {file = "scikit-learn-1.0.2.tar.gz", hash = "sha256:b5870959a5484b614f26d31ca4c17524b1b0317522199dc985c3b4256e030767"},
+ {file = "scikit_learn-1.0.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:da3c84694ff693b5b3194d8752ccf935a665b8b5edc33a283122f4273ca3e687"},
+ {file = "scikit_learn-1.0.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:75307d9ea39236cad7eea87143155eea24d48f93f3a2f9389c817f7019f00705"},
+ {file = "scikit_learn-1.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f14517e174bd7332f1cca2c959e704696a5e0ba246eb8763e6c24876d8710049"},
+ {file = "scikit_learn-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9aac97e57c196206179f674f09bc6bffcd0284e2ba95b7fe0b402ac3f986023"},
+ {file = "scikit_learn-1.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:d93d4c28370aea8a7cbf6015e8a669cd5d69f856cc2aa44e7a590fb805bb5583"},
+ {file = "scikit_learn-1.0.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:85260fb430b795d806251dd3bb05e6f48cdc777ac31f2bcf2bc8bbed3270a8f5"},
+ {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a053a6a527c87c5c4fa7bf1ab2556fa16d8345cf99b6c5a19030a4a7cd8fd2c0"},
+ {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:245c9b5a67445f6f044411e16a93a554edc1efdcce94d3fc0bc6a4b9ac30b752"},
+ {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158faf30684c92a78e12da19c73feff9641a928a8024b4fa5ec11d583f3d8a87"},
+ {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08ef968f6b72033c16c479c966bf37ccd49b06ea91b765e1cc27afefe723920b"},
+ {file = "scikit_learn-1.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16455ace947d8d9e5391435c2977178d0ff03a261571e67f627c8fee0f9d431a"},
+ {file = "scikit_learn-1.0.2-cp37-cp37m-win32.whl", hash = "sha256:2f3b453e0b149898577e301d27e098dfe1a36943f7bb0ad704d1e548efc3b448"},
+ {file = "scikit_learn-1.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:46f431ec59dead665e1370314dbebc99ead05e1c0a9df42f22d6a0e00044820f"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:ff3fa8ea0e09e38677762afc6e14cad77b5e125b0ea70c9bba1992f02c93b028"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9369b030e155f8188743eb4893ac17a27f81d28a884af460870c7c072f114243"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7d6b2475f1c23a698b48515217eb26b45a6598c7b1840ba23b3c5acece658dbb"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:285db0352e635b9e3392b0b426bc48c3b485512d3b4ac3c7a44ec2a2ba061e66"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb33fe1dc6f73dc19e67b264dbb5dde2a0539b986435fdd78ed978c14654830"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1391d1a6e2268485a63c3073111fe3ba6ec5145fc957481cfd0652be571226d"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc3744dabc56b50bec73624aeca02e0def06b03cb287de26836e730659c5d29c"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-win32.whl", hash = "sha256:a999c9f02ff9570c783069f1074f06fe7386ec65b84c983db5aeb8144356a355"},
+ {file = "scikit_learn-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:7626a34eabbf370a638f32d1a3ad50526844ba58d63e3ab81ba91e2a7c6d037e"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:a90b60048f9ffdd962d2ad2fb16367a87ac34d76e02550968719eb7b5716fd10"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7a93c1292799620df90348800d5ac06f3794c1316ca247525fa31169f6d25855"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:eabceab574f471de0b0eb3f2ecf2eee9f10b3106570481d007ed1c84ebf6d6a1"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:55f2f3a8414e14fbee03782f9fe16cca0f141d639d2b1c1a36779fa069e1db57"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80095a1e4b93bd33261ef03b9bc86d6db649f988ea4dbcf7110d0cded8d7213d"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa38a1b9b38ae1fad2863eff5e0d69608567453fdfc850c992e6e47eb764e846"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff746a69ff2ef25f62b36338c615dd15954ddc3ab8e73530237dd73235e76d62"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-win32.whl", hash = "sha256:e174242caecb11e4abf169342641778f68e1bfaba80cd18acd6bc84286b9a534"},
+ {file = "scikit_learn-1.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:b54a62c6e318ddbfa7d22c383466d38d2ee770ebdb5ddb668d56a099f6eaf75f"},
]
scipy = [
- {file = "scipy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2a0eeaab01258e0870c4022a6cd329aef3b7c6c2b606bd7cf7bb2ba9820ae561"},
- {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f52470e0548cdb74fb8ddf06773ffdcca7c97550f903b1c51312ec19243a7f7"},
- {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:787749110a23502031fb1643c55a2236c99c6b989cca703ea2114d65e21728ef"},
- {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3304bd5bc32e00954ac4b3f4cc382ca8824719bf348aacbec6347337d6b125fe"},
- {file = "scipy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:d1388fbac9dd591ea630da75c455f4cc637a7ca5ecb31a6b6cef430914749cde"},
- {file = "scipy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d648aa85dd5074b1ed83008ae987c3fbb53d68af619fce1dee231f4d8bd40e2f"},
- {file = "scipy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc61e3e5ff92d2f32bb263621d54a9cff5e3f7c420af3d1fa122ce2529de2bd9"},
- {file = "scipy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a496b42dbcd04ea9924f5e92be63af3d8e0f43a274b769bfaca0a297327d54ee"},
- {file = "scipy-1.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d13f31457f2216e5705304d9f28e2826edf75487410a57aa99263fa4ffd792c2"},
- {file = "scipy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:90c07ba5f34f33299a428b0d4fa24c30d2ceba44d63f8385b2b05be460819fcb"},
- {file = "scipy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:efdd3825d54c58df2cc394366ca4b9166cf940a0ebddeb87b6c10053deb625ea"},
- {file = "scipy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:71cfc96297617eab911e22216e8a8597703202e95636d9406df9af5c2ac99a2b"},
- {file = "scipy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ee952f39a4a4c7ba775a32b664b1f4b74818548b65f765987adc14bb78f5802"},
- {file = "scipy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:611f9cb459d0707dd8e4de0c96f86e93f61aac7475fcb225e9ec71fecdc5cebf"},
- {file = "scipy-1.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e101bceeb9e65a90dadbc5ca31283403a2d4667b9c178db29109750568e8d112"},
- {file = "scipy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4729b41a4cdaf4cd011aeac816b532f990bdf97710cef59149d3e293115cf467"},
- {file = "scipy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:c9951e3746b68974125e5e3445008a4163dd6d20ae0bbdae22b38cb8951dc11b"},
- {file = "scipy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:da9c6b336e540def0b7fd65603da8abeb306c5fc9a5f4238665cbbb5ff95cf58"},
- {file = "scipy-1.7.1.tar.gz", hash = "sha256:6b47d5fa7ea651054362561a28b1ccc8da9368a39514c1bbf6c0977a1c376764"},
+ {file = "scipy-1.7.3-1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9e04d7e9b03a8a6ac2045f7c5ef741be86727d8f49c45db45f244bdd2bcff17"},
+ {file = "scipy-1.7.3-1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b0e0aeb061a1d7dcd2ed59ea57ee56c9b23dd60100825f98238c06ee5cc4467e"},
+ {file = "scipy-1.7.3-1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b78a35c5c74d336f42f44106174b9851c783184a85a3fe3e68857259b37b9ffb"},
+ {file = "scipy-1.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:173308efba2270dcd61cd45a30dfded6ec0085b4b6eb33b5eb11ab443005e088"},
+ {file = "scipy-1.7.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:21b66200cf44b1c3e86495e3a436fc7a26608f92b8d43d344457c54f1c024cbc"},
+ {file = "scipy-1.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceebc3c4f6a109777c0053dfa0282fddb8893eddfb0d598574acfb734a926168"},
+ {file = "scipy-1.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7eaea089345a35130bc9a39b89ec1ff69c208efa97b3f8b25ea5d4c41d88094"},
+ {file = "scipy-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:304dfaa7146cffdb75fbf6bb7c190fd7688795389ad060b970269c8576d038e9"},
+ {file = "scipy-1.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:033ce76ed4e9f62923e1f8124f7e2b0800db533828c853b402c7eec6e9465d80"},
+ {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4d242d13206ca4302d83d8a6388c9dfce49fc48fdd3c20efad89ba12f785bf9e"},
+ {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8499d9dd1459dc0d0fe68db0832c3d5fc1361ae8e13d05e6849b358dc3f2c279"},
+ {file = "scipy-1.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca36e7d9430f7481fc7d11e015ae16fbd5575615a8e9060538104778be84addf"},
+ {file = "scipy-1.7.3-cp37-cp37m-win32.whl", hash = "sha256:e2c036492e673aad1b7b0d0ccdc0cb30a968353d2c4bf92ac8e73509e1bf212c"},
+ {file = "scipy-1.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:866ada14a95b083dd727a845a764cf95dd13ba3dc69a16b99038001b05439709"},
+ {file = "scipy-1.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:65bd52bf55f9a1071398557394203d881384d27b9c2cad7df9a027170aeaef93"},
+ {file = "scipy-1.7.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:f99d206db1f1ae735a8192ab93bd6028f3a42f6fa08467d37a14eb96c9dd34a3"},
+ {file = "scipy-1.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5f2cfc359379c56b3a41b17ebd024109b2049f878badc1e454f31418c3a18436"},
+ {file = "scipy-1.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb7ae2c4dbdb3c9247e07acc532f91077ae6dbc40ad5bd5dca0bb5a176ee9bda"},
+ {file = "scipy-1.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c2d250074cfa76715d58830579c64dff7354484b284c2b8b87e5a38321672c"},
+ {file = "scipy-1.7.3-cp38-cp38-win32.whl", hash = "sha256:87069cf875f0262a6e3187ab0f419f5b4280d3dcf4811ef9613c605f6e4dca95"},
+ {file = "scipy-1.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:7edd9a311299a61e9919ea4192dd477395b50c014cdc1a1ac572d7c27e2207fa"},
+ {file = "scipy-1.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eef93a446114ac0193a7b714ce67659db80caf940f3232bad63f4c7a81bc18df"},
+ {file = "scipy-1.7.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:eb326658f9b73c07081300daba90a8746543b5ea177184daed26528273157294"},
+ {file = "scipy-1.7.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93378f3d14fff07572392ce6a6a2ceb3a1f237733bd6dcb9eb6a2b29b0d19085"},
+ {file = "scipy-1.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edad1cf5b2ce1912c4d8ddad20e11d333165552aba262c882e28c78bbc09dbf6"},
+ {file = "scipy-1.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d1cc2c19afe3b5a546ede7e6a44ce1ff52e443d12b231823268019f608b9b12"},
+ {file = "scipy-1.7.3-cp39-cp39-win32.whl", hash = "sha256:2c56b820d304dffcadbbb6cbfbc2e2c79ee46ea291db17e288e73cd3c64fefa9"},
+ {file = "scipy-1.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:3f78181a153fa21c018d346f595edd648344751d7f03ab94b398be2ad083ed3e"},
+ {file = "scipy-1.7.3.tar.gz", hash = "sha256:ab5875facfdef77e0a47d5fd39ea178b58e60e454a4c85aa1e52fcb80db7babf"},
]
seaborn = [
{file = "seaborn-0.11.2-py3-none-any.whl", hash = "sha256:85a6baa9b55f81a0623abddc4a26b334653ff4c6b18c418361de19dbba0ef283"},
diff --git a/pyproject.toml b/pyproject.toml
index e60b78d9..74795d14 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,24 +1,25 @@
[tool.poetry]
name = "obp"
-version = "0.5.1"
-description = "Open Bandit Pipeline: a python library for bandit algorithms and off-policy evaluation"
+version = "0.5.2"
+description = "Open Bandit Pipeline: a python library for off-policy evaluation and learning"
authors = ["Yuta Saito "]
license = "Apache License 2.0"
[tool.poetry.dependencies]
python = ">=3.7.1,<3.10"
torch = "^1.9.0"
-scikit-learn = "^0.24.2"
+scikit-learn = "1.0.2"
pandas = "^1.3.2"
numpy = "^1.21.2"
matplotlib = "^3.4.3"
tqdm = "^4.62.2"
-scipy = "^1.7.1"
+scipy = "1.7.3"
PyYAML = "^5.4.1"
seaborn = "^0.11.2"
pyieoe = "^0.1.1"
pingouin = "^0.4.0"
mypy-extensions = "^0.4.3"
+Pillow = "9.0.0"
[tool.poetry.dev-dependencies]
flake8 = "^3.9.2"
diff --git a/setup.py b/setup.py
index 5e8177b7..2fd7bc38 100644
--- a/setup.py
+++ b/setup.py
@@ -25,16 +25,16 @@
long_description=long_description,
long_description_content_type="text/markdown",
install_requires=[
- "matplotlib>=3.2.2",
+ "matplotlib>=3.4.3",
"mypy-extensions>=0.4.3",
"numpy>=1.21.2",
"pandas>=1.3.2",
"pyyaml>=5.1",
"seaborn>=0.10.1",
- "scikit-learn>=0.24.2",
- "scipy>=1.4.1",
+ "scikit-learn>=1.0.2",
+ "scipy>=1.7.3",
"torch>=1.9.0",
- "tqdm>=4.41.1",
+ "tqdm>=4.62.2",
"pyieoe>=0.1.1",
"pingouin>=0.4.0",
],
diff --git a/tests/dataset/test_synthetic.py b/tests/dataset/test_synthetic.py
index dace8db3..ff80caee 100644
--- a/tests/dataset/test_synthetic.py
+++ b/tests/dataset/test_synthetic.py
@@ -25,7 +25,7 @@
None,
12345,
TypeError,
- "`n_actions` must be an instance of , not .",
+ "n_actions must be an instance of , not .",
),
(
1, #
@@ -37,7 +37,7 @@
None,
12345,
ValueError,
- "`n_actions`= 1, must be >= 2.",
+ "n_actions == 1, must be >= 2.",
),
(
3,
@@ -49,7 +49,7 @@
None,
12345,
TypeError,
- "`dim_context` must be an instance of , not .",
+ "dim_context must be an instance of , not .",
),
(
3,
@@ -61,7 +61,7 @@
None,
12345,
ValueError,
- "`dim_context`= 0, must be >= 1.",
+ "dim_context == 0, must be >= 1.",
),
(
3,
@@ -85,7 +85,7 @@
None,
12345,
TypeError,
- r"`reward_std` must be an instance of \(, \), not .",
+ r"reward_std must be an instance of \(, \), not .",
),
(
3,
@@ -97,7 +97,7 @@
None,
12345,
ValueError,
- "`reward_std`= -1.0, must be >= 0.",
+ "reward_std == -1.0, must be >= 0.",
),
(
3,
@@ -109,7 +109,7 @@
None,
12345,
TypeError,
- r"`beta` must be an instance of \(, \), not .",
+ r"beta must be an instance of \(, \), not .",
),
(
3,
@@ -121,7 +121,7 @@
None,
12345,
TypeError,
- "`n_deficient_actions` must be an instance of , not .",
+ "n_deficient_actions must be an instance of , not .",
),
(
3,
@@ -133,7 +133,7 @@
None,
12345,
TypeError,
- "`n_deficient_actions` must be an instance of , not .",
+ "n_deficient_actions must be an instance of , not .",
),
(
3,
@@ -145,7 +145,7 @@
None,
12345,
ValueError,
- "`n_deficient_actions`= 10, must be <= 2.",
+ "n_deficient_actions == 10, must be <= 2.",
),
(
3,
diff --git a/tests/dataset/test_synthetic_continuous.py b/tests/dataset/test_synthetic_continuous.py
index fe01fc8e..88384062 100644
--- a/tests/dataset/test_synthetic_continuous.py
+++ b/tests/dataset/test_synthetic_continuous.py
@@ -20,7 +20,7 @@
1.0,
12345,
ValueError,
- "`dim_context`= 0, must be >= 1.",
+ "dim_context == 0, must be >= 1.",
),
(
1.0, #
@@ -30,7 +30,7 @@
1.0,
12345,
TypeError,
- "`dim_context` must be an instance of , not .",
+ "dim_context must be an instance of , not .",
),
(
"3", #
@@ -40,7 +40,7 @@
1.0,
12345,
TypeError,
- "`dim_context` must be an instance of , not .",
+ "dim_context must be an instance of , not .",
),
(
None, #
@@ -50,7 +50,7 @@
1.0,
12345,
TypeError,
- "`dim_context` must be an instance of , not .",
+ "dim_context must be an instance of , not .",
),
(
3,
@@ -60,7 +60,7 @@
1.0,
12345,
ValueError,
- "`action_noise`= -1.0, must be >= 0.",
+ "action_noise == -1.0, must be >= 0.",
),
(
3,
@@ -70,7 +70,7 @@
1.0,
12345,
TypeError,
- r"`action_noise` must be an instance of \(, \), not .",
+ r"action_noise must be an instance of \(, \), not .",
),
(
3,
@@ -80,7 +80,7 @@
1.0,
12345,
TypeError,
- r"`action_noise` must be an instance of \(, \), not .",
+ r"action_noise must be an instance of \(, \), not .",
),
(
3,
@@ -90,7 +90,7 @@
1.0,
12345,
ValueError,
- "`reward_noise`= -1.0, must be >= 0.",
+ "reward_noise == -1.0, must be >= 0.",
),
(
3,
@@ -100,7 +100,7 @@
1.0,
12345,
TypeError,
- r"`reward_noise` must be an instance of \(, \), not .",
+ r"reward_noise must be an instance of \(, \), not .",
),
(
3,
@@ -110,7 +110,7 @@
1.0,
12345,
TypeError,
- r"`reward_noise` must be an instance of \(, \), not .",
+ r"reward_noise must be an instance of \(, \), not .",
),
(
3,
@@ -120,7 +120,7 @@
1.0,
12345,
TypeError,
- r"`min_action_value` must be an instance of \(, \), not .",
+ r"min_action_value must be an instance of \(, \), not .",
),
(
3,
@@ -130,7 +130,7 @@
1.0,
12345,
TypeError,
- r"`min_action_value` must be an instance of \(, \), not .",
+ r"min_action_value must be an instance of \(, \), not .",
),
(
3,
@@ -140,7 +140,7 @@
"3", #
12345,
TypeError,
- r"`max_action_value` must be an instance of \(, \), not .",
+ r"max_action_value must be an instance of \(, \), not .",
),
(
3,
@@ -150,7 +150,7 @@
None, #
12345,
TypeError,
- r"`max_action_value` must be an instance of \(, \), not .",
+ r"max_action_value must be an instance of \(, \), not .",
),
(
3,
@@ -215,22 +215,22 @@ def test_synthetic_continuous_init_using_invalid_inputs(
(
0, #
ValueError,
- "`n_rounds`= 0, must be >= 1.",
+ "n_rounds == 0, must be >= 1.",
),
(
1.0, #
TypeError,
- "`n_rounds` must be an instance of , not .",
+ "n_rounds must be an instance of , not .",
),
(
"3", #
TypeError,
- "`n_rounds` must be an instance of , not .",
+ "n_rounds must be an instance of , not .",
),
(
None, #
TypeError,
- "`n_rounds` must be an instance of , not .",
+ "n_rounds must be an instance of , not .",
),
]
diff --git a/tests/dataset/test_synthetic_multi.py b/tests/dataset/test_synthetic_multi.py
index 00f25b3e..9f507774 100644
--- a/tests/dataset/test_synthetic_multi.py
+++ b/tests/dataset/test_synthetic_multi.py
@@ -17,7 +17,7 @@
None,
12345,
TypeError,
- "`n_actions` must be an instance of , not .",
+ "n_actions must be an instance of , not .",
),
(
1, #
@@ -30,7 +30,7 @@
None,
12345,
ValueError,
- "`n_actions`= 1, must be >= 2.",
+ "n_actions == 1, must be >= 2.",
),
(
3,
@@ -43,7 +43,7 @@
None,
12345,
TypeError,
- "`dim_context` must be an instance of , not .",
+ "dim_context must be an instance of , not .",
),
(
3,
@@ -56,7 +56,7 @@
None,
12345,
ValueError,
- "`dim_context`= 0, must be >= 1.",
+ "dim_context == 0, must be >= 1.",
),
(
3,
@@ -82,7 +82,7 @@
None,
12345,
TypeError,
- r"`reward_std` must be an instance of \(, \), not .",
+ r"reward_std must be an instance of \(, \), not .",
),
(
3,
@@ -95,7 +95,7 @@
None,
12345,
ValueError,
- "`reward_std`= -1.0, must be >= 0.",
+ "reward_std == -1.0, must be >= 0.",
),
(
3,
@@ -134,7 +134,7 @@
None,
12345,
TypeError,
- r"`betas\[0\]` must be an instance of \(, \), not .",
+ r"betas\[0\] must be an instance of \(, \), not .",
),
(
3,
@@ -173,7 +173,7 @@
None,
12345,
TypeError,
- r"`rhos\[0\]` must be an instance of \(, \), not .",
+ r"rhos\[0\] must be an instance of \(, \), not .",
),
(
3,
@@ -186,7 +186,7 @@
None,
12345,
ValueError,
- r"`rhos\[2\]`= -1, must be >= 0.0.",
+ r"rhos\[2\] == -1, must be >= 0.0.",
),
(
3,
@@ -212,7 +212,7 @@
None,
12345,
TypeError,
- "`n_deficient_actions` must be an instance of , not .",
+ "n_deficient_actions must be an instance of , not .",
),
(
3,
@@ -225,7 +225,7 @@
None,
12345,
TypeError,
- "`n_deficient_actions` must be an instance of , not .",
+ "n_deficient_actions must be an instance of , not .",
),
(
3,
@@ -238,7 +238,7 @@
None,
12345,
ValueError,
- "`n_deficient_actions`= 10, must be <= 2.",
+ "n_deficient_actions == 10, must be <= 2.",
),
(
3,
diff --git a/tests/dataset/test_synthetic_slate.py b/tests/dataset/test_synthetic_slate.py
index 8b764941..3e043340 100644
--- a/tests/dataset/test_synthetic_slate.py
+++ b/tests/dataset/test_synthetic_slate.py
@@ -24,7 +24,7 @@
1.0,
1,
TypeError,
- "`n_unique_action` must be an instance of , not .",
+ "n_unique_action must be an instance of , not .",
),
(
1,
@@ -37,7 +37,7 @@
1.0,
1,
ValueError,
- "`n_unique_action`= 1, must be >= 2.",
+ "n_unique_action == 1, must be >= 2.",
),
(
5,
@@ -50,7 +50,7 @@
1.0,
1,
TypeError,
- "`len_list` must be an instance of , not .",
+ "len_list must be an instance of , not .",
),
(
5,
@@ -63,7 +63,7 @@
1.0,
1,
ValueError,
- "`len_list`= -1, must be >= 2.",
+ "len_list == -1, must be >= 2.",
),
(
5,
@@ -76,7 +76,7 @@
1.0,
1,
ValueError,
- "`len_list`= 10, must be <= 5.",
+ "len_list == 10, must be <= 5.",
),
(
5,
@@ -89,7 +89,7 @@
1.0,
1,
ValueError,
- "`dim_context`= 0, must be >= 1.",
+ "dim_context == 0, must be >= 1.",
),
(
5,
@@ -102,7 +102,7 @@
1.0,
1,
TypeError,
- "`dim_context` must be an instance of , not .",
+ "dim_context must be an instance of , not .",
),
(
5,
@@ -167,7 +167,7 @@
"aaa",
1,
TypeError,
- "`eta` must be an instance of , not .",
+ "eta must be an instance of , not .",
),
(
5,
@@ -180,7 +180,7 @@
-1.0,
1,
ValueError,
- "`eta`= -1.0, must be >= 0.0.",
+ "eta == -1.0, must be >= 0.0.",
),
(
5,
@@ -1228,7 +1228,7 @@ def test_calc_on_policy_policy_value_using_valid_input_data(
np.ones([5, 2]),
np.tile(np.arange(3), 5),
TypeError,
- "`epsilon` must be an instance of , not .",
+ "epsilon must be an instance of , not .",
),
(
"optimal",
@@ -1236,7 +1236,7 @@ def test_calc_on_policy_policy_value_using_valid_input_data(
np.ones([5, 2]),
np.tile(np.arange(3), 5),
ValueError,
- "`epsilon`= -1.0, must be >= 0.0.",
+ "epsilon == -1.0, must be >= 0.0.",
),
(
"optimal",
@@ -1244,7 +1244,7 @@ def test_calc_on_policy_policy_value_using_valid_input_data(
np.ones([5, 2]),
np.tile(np.arange(3), 5),
ValueError,
- "`epsilon`= 2.0, must be <= 1.0.",
+ "epsilon == 2.0, must be <= 1.0.",
),
]
diff --git a/tests/ope/test_all_estimators.py b/tests/ope/test_all_estimators.py
index 762654e0..c9b99cf3 100644
--- a/tests/ope/test_all_estimators.py
+++ b/tests/ope/test_all_estimators.py
@@ -352,22 +352,22 @@ def test_estimation_of_all_estimators_using_valid_input_data(
ValueError,
"'s' cannot be used to seed a numpy.random.RandomState instance",
),
- (0.05, -1, 1, ValueError, "`n_bootstrap_samples`= -1, must be >= 1"),
+ (0.05, -1, 1, ValueError, "n_bootstrap_samples == -1, must be >= 1"),
(
0.05,
"s",
1,
TypeError,
- "`n_bootstrap_samples` must be an instance of , not ",
+ "n_bootstrap_samples must be an instance of , not ",
),
- (-1.0, 1, 1, ValueError, "`alpha`= -1.0, must be >= 0.0"),
- (2.0, 1, 1, ValueError, "`alpha`= 2.0, must be <= 1.0"),
+ (-1.0, 1, 1, ValueError, "alpha == -1.0, must be >= 0.0"),
+ (2.0, 1, 1, ValueError, "alpha == 2.0, must be <= 1.0"),
(
"0",
1,
1,
TypeError,
- "`alpha` must be an instance of , not ",
+ "alpha must be an instance of , not ",
),
]
diff --git a/tests/ope/test_bipw_estimators.py b/tests/ope/test_bipw_estimators.py
index bb4d7853..0159da1f 100644
--- a/tests/ope/test_bipw_estimators.py
+++ b/tests/ope/test_bipw_estimators.py
@@ -13,14 +13,14 @@
(
"",
TypeError,
- r"`lambda_` must be an instance of \(, \), not .",
+ r"lambda_ must be an instance of \(, \), not .",
),
(
None,
TypeError,
- r"`lambda_` must be an instance of \(, \), not .",
+ r"lambda_ must be an instance of \(, \), not .",
),
- (-1.0, ValueError, "`lambda_`= -1.0, must be >= 0.0."),
+ (-1.0, ValueError, "lambda_ == -1.0, must be >= 0.0."),
(np.nan, ValueError, "`lambda_` must not be nan"),
]
diff --git a/tests/ope/test_dr_estimators.py b/tests/ope/test_dr_estimators.py
index 6f3469d6..06a031d7 100644
--- a/tests/ope/test_dr_estimators.py
+++ b/tests/ope/test_dr_estimators.py
@@ -23,15 +23,15 @@
"",
False,
TypeError,
- r"`lambda_` must be an instance of \(, \), not .",
+ r"lambda_ must be an instance of \(, \), not .",
),
(
None,
False,
TypeError,
- r"`lambda_` must be an instance of \(, \), not .",
+ r"lambda_ must be an instance of \(, \), not .",
),
- (-1.0, False, ValueError, "`lambda_`= -1.0, must be >= 0.0."),
+ (-1.0, False, ValueError, "lambda_ == -1.0, must be >= 0.0."),
(np.nan, False, ValueError, "`lambda_` must not be nan"),
(
1.0,
@@ -93,7 +93,7 @@ def test_dr_init_using_invalid_inputs(
0.05,
False,
TypeError,
- r"`an element of lambdas` must be an instance of \(, \), not