策略估计 Policy


在策略评估的任务中,除了因果效应估计,我们还会考虑是否应该为每一个样例分配一个治疗方案,以及哪一个治疗方案对于该样例是最好的。如:Athey2020。YLearn为实现这样的目标提供了PolicyTree。当给定一个训练好的估计器模型或者估计的因果效应,PolicyTree 通过构建一个使每一个样例因果效应最大化的决策树模型,找到每一个样例的最优策略。

训练树的准则是

$$S = \sum_i\sum_k g_{ik}e_{ki}$$

其中 $g_{ik} = \phi(v_i)_k$ ,并且有 $\phi: \mathbb{R}^D \to \mathbb{R}^K$ 是一个映射,从$v_i\in \mathbb{R}^D$ 到一个仅有一个非零元素的在 $\mathbb{R}^K$ 中的基向量,并且 $e_{ki}$ 表明 对样本 $i$ 采取治疗 $k$-th 值的因果效应。

可参考 sklearn中 BaseDecisionTree

注意:可以使用 PolicyInterpreter 来解释策略模型的结果。

例子


    import numpy as np

    from ylearn.policy.policy_model import PolicyTree
    from ylearn.utils._common import to_df

    # build dataset
    v = np.random.normal(size=(1000, 10))
    y = np.hstack([v[:, [0]] < 0, v[:, [0]] > 0])

    data = to_df(v=v)
    covariate = data.columns

    est = PolicyTree(criterion='policy_reg')
    est.fit(data=data, covariate=covariate, effect_array=y.astype(float))  
    

    >>> 06-23 14:53:14 I ylearn.p.policy_model.py 452 - Start building the policy tree with criterion PRegCriteria
    >>> 06-23 14:53:14 I ylearn.p.policy_model.py 468 - Building the policy tree with splitter BestSplitter
    >>> 06-23 14:53:14 I ylearn.p.policy_model.py 511 - Building the policy tree with builder DepthFirstTreeBuilder
    >>> <ylearn.policy.policy_model.PolicyTree at 0x7ff1ee5f2eb0>