scope_rl.ope.discrete.marginal_estimators.StateMarginalSNDR#
- class scope_rl.ope.discrete.marginal_estimators.StateMarginalSNDR(estimator_name='sm_sndr')[source]#
State Marginal Self-Normalized Doubly Robust (SM-SNDR) for discrete action spaces.
Bases:
scope_rl.ope.discrete.StateMarginalDR->scope_rl.ope.BaseStateMarginalOPEEstimator->scope_rl.ope.BaseOffPolicyEstimatorImported as:
scope_rl.ope.discrete.StateMarginalSNDRNote
SM-SNDR estimates the policy value using state marginal importance weighting. Following SOPE (Yuan et al., 2021), we combine state-marginal importance weighting and \(k\)-step PDIS as follows.
\[\begin{split}\hat{J}_{\mathrm{SM-SNDR}} (\pi; \mathcal{D}) &:= \frac{1}{n} \sum_{i=1}^n \sum_{a \in \mathcal{A}} \pi(a | s_0^{(i)}) \hat{Q}(s_0^{(i)}, a) \\ & \quad \quad + \sum_{i=1}^n \sum_{t=0}^{k-1} \gamma^t \frac{w_{0:t}^{(i)}}{\sum_{i'=1}^n w_{0:t}^{(i')}} \left(r_t^{(i)} + \gamma \sum_{a \in \mathcal{A}} \pi(a | s_t^{(i)}) \hat{Q}(s_{t+1}^{(i)}, a) - \hat{Q}(s_t^{(i)}, a_t^{(i)}) \right) \\ & \quad \quad + \sum_{i=1}^n \sum_{t=k}^{T-1} \gamma^t \frac{\rho(s_{t-k}^{(i)}) w_{t-k:t}^{(i)}}{\sum_{i'=1}^n \rho(s_{t-k}^{(i')}) w_{t-k:t}^{(i')}} \left(r_t^{(i)} + \gamma \sum_{a \in \mathcal{A}} \pi(a | s_t^{(i)}) \hat{Q}(s_{t+1}^{(i)}, a) - \hat{Q}(s_t^{(i)}, a_t^{(i)}) \right),\end{split}\]where \(w_{t_1:t_2} := \prod_{t=t_1}^{t_2} (\pi(a_t | s_t) / \pi_0(a_t | s_t))\) and \(\rho(s) \approx d^{\pi}(s) / d^{\pi_b}(s)\) is the state-marginal importance weight, where where \(d^{\pi}(s)\) is the marginal visitation probability of the policy \(\pi\) on \(s\). When \(k=0\), this estimator is reduced to the vanilla state marginal SNDR.
SM-SNDR is consistent when either the marginal importance weight or Q-function is estimated correctly. Moreover, SM-SNDR reduces the variance caused by trajectory-wise or per-decision importance weighting by considering the marginal distribution across various timesteps.
There are several ways to estimate the state(-action) marginal importance weight such as Augmented Lagrangian Method (ALM) (Yang et al., 2020) and Minimax Weight Learning (MWL) (Uehara et al., 2020).
See also
The implementations of such weight learning methods are available at
scope_rl.ope.weight_value_learning.- Parameters:
estimator_name (str, default="sm_sndr") – Name of the estimator.
References
Christina J. Yuan, Yash Chandak, Stephen Giguere, Philip S. Thomas, and Scott Niekum. “SOPE: Spectrum of Off-Policy Estimators.” 2021.
Masatoshi Uehara, Jiawei Huang, and Nan Jiang. “Minimax Weight and Q-Function Learning for Off-Policy Evaluation.” 2020.
Mengjiao Yang, Ofir Nachum, Bo Dai, Lihong Li, and Dale Schuurmans. “Off-Policy Evaluation via the Regularized Lagrangian.” 2020.
Qiang Liu, Lihong Li, Ziyang Tang, and Dengyong Zhou. “Breaking the Curse of Horizon: Infinite-Horizon Off-Policy Estimation.” 2018
Nan Jiang and Lihong Li. “Doubly Robust Off-policy Value Evaluation for Reinforcement Learning.” 2016.
Philip S. Thomas and Emma Brunskill. “Data-Efficient Off-Policy Policy Evaluation for Reinforcement Learning.” 2016.
Methods
estimate_interval(n_step_pdis, ...[, gamma, ...])Estimate the confidence interval of the policy value by nonparametric bootstrap.
estimate_policy_value(n_step_pdis, ...[, gamma])Estimate the policy value of the evaluation policy.
- estimate_interval(n_step_pdis, step_per_trajectory, action, reward, state_marginal_importance_weight, pscore, evaluation_policy_action_dist, state_action_value_prediction, initial_state_value_prediction, gamma=1.0, alpha=0.05, ci='bootstrap', n_bootstrap_samples=10000, random_state=None, **kwargs)#
Estimate the confidence interval of the policy value by nonparametric bootstrap.
- Parameters:
n_step_pdis (int (>= 0)) – Number of initial steps whose rewards are estimated by step-wise importance weighting. When set to zero, the estimator is reduced to the vanilla state marginal IS.
step_per_trajectory (int (> 0)) – Number of timesteps in an episode.
action (array-like of shape (n_trajectories * step_per_trajectory, )) – Action chosen by the behavior policy.
reward (array-like of shape (n_trajectories * step_per_trajectory, )) – Observed immediate rewards.
state_marginal_importance_weight (array-like of shape (n_trajectories * step_per_trajectory, )) – Importance weight wrt the state marginal distribution, i.e., \(d^{\pi}(s) / d^{\pi_b}(s)\)
pscore (array-like of shape (n_trajectories * step_per_trajectory, )) – Conditional action choice probability of the behavior policy, i.e., \(\pi_b(a | s)\)
evaluation_policy_action_dist (array-like of shape (n_trajectories * step_per_trajectory, n_action)) – Conditional action distribution induced by the evaluation policy, i.e., \(\pi(a | s) \forall a \in \mathcal{A}\)
state_action_value_prediction (array-like of shape (n_trajectories * step_per_trajectory, n_action)) – \(\hat{Q}\) for all actions, i.e., \(\hat{Q}(s_t, a) \forall a \in \mathcal{A}\).
initial_state_value_prediction (array-like of shape (n_trajectories, )) – Estimated initial state value.
gamma (float, default=1.0) – Discount factor. The value should be within (0, 1].
alpha (float, default=0.05) – Significance level. The value should be within [0, 1).
ci ({"bootstrap", "hoeffding", "bernstein", "ttest"}, default="bootstrap") – Method to estimate the confidence interval.
n_bootstrap_samples (int, default=10000 (> 0)) – Number of resampling performed in the bootstrap procedure.
random_state (int, default=None (>= 0)) – Random state.
- Returns:
estimated_confidence_interval – Dictionary storing the estimated mean and upper-lower confidence bounds.
key: [ mean, {100 * (1. - alpha)}% CI (lower), {100 * (1. - alpha)}% CI (upper), ]
- Return type:
- estimate_policy_value(n_step_pdis, step_per_trajectory, action, reward, state_marginal_importance_weight, pscore, evaluation_policy_action_dist, state_action_value_prediction, initial_state_value_prediction, gamma=1.0, **kwargs)#
Estimate the policy value of the evaluation policy.
- Parameters:
n_step_pdis (int (>= 0)) – Number of initial steps whose rewards are estimated by step-wise importance weighting. When set to zero, the estimator is reduced to the vanilla state marginal IS.
step_per_trajectory (int (> 0)) – Number of timesteps in an episode.
action (array-like of shape (n_trajectories * step_per_trajectory, )) – Action chosen by the behavior policy.
reward (array-like of shape (n_trajectories * step_per_trajectory, )) – Observed immediate rewards.
state_marginal_importance_weight (array-like of shape (n_trajectories * step_per_trajectory, )) – Importance weight wrt the state marginal distribution, i.e., \(d^{\pi}(s) / d^{\pi_b}(s)\)
pscore (array-like of shape (n_trajectories * step_per_trajectory, )) – Conditional action choice probability of the behavior policy, i.e., \(\pi_b(a | s)\)
evaluation_policy_action_dist (array-like of shape (n_trajectories * step_per_trajectory, n_action)) – Conditional action distribution induced by the evaluation policy, i.e., \(\pi(a | s) \forall a \in \mathcal{A}\)
state_action_value_prediction (array-like of shape (n_trajectories * step_per_trajectory, n_action)) – \(\hat{Q}\) for all actions, i.e., \(\hat{Q}(s_t, a) \forall a \in \mathcal{A}\).
initial_state_value_prediction (array-like of shape (n_trajectories, )) – Estimated initial state value.
gamma (float, default=1.0) – Discount factor. The value should be within (0, 1].
- Returns:
V_hat – Estimated policy value.
- Return type:
Methods