def test_param(self): """Testing the completion of the fit and effect estimation of an automated Parametric DML""" Y, T, X, _ = ihdp_surface_B() est = AutomatedLinearDML(model_y=automl_model_reg(), model_t=GradientBoostingClassifier(), featurizer=None, discrete_treatment=True) est.fit(Y, T, X=X) _ = est.effect(X)
def test_SLearner(self): """Testing the completion of the fit and effect estimation of an AutomatedSLearner""" # Test constant treatment effect with multi output Y # Test heterogeneous treatment effect # Need interactions between T and features Y, T, X, _ = ihdp_surface_B() est = AutomatedSLearner(overall_model=automl_model_reg()) est.fit(Y, T, X=X) _ = est.effect(X)
def test_TLearner(self): """Testing the completion of the fit and effect estimation of an AutomatedTLearner""" # TLearner test # Instantiate TLearner Y, T, X, _ = ihdp_surface_B() est = AutomatedTLearner(models=automl_model_reg()) # Test constant and heterogeneous treatment effect, single and multi output y est.fit(Y, T, X=X) _ = est.effect(X)
def test_nonparam(self): """Testing the completion of the fit and effect estimation of an automated Nonparametic DML""" Y, T, X, _ = ihdp_surface_B() est = AutomatedNonParamDML( model_y=automl_model_reg(), model_t=automl_model_clf(), model_final=automl_model_sample_weight_reg(), featurizer=None, discrete_treatment=True) est.fit(Y, T, X=X) _ = est.effect(X)
def simulate2(trial, std0=0, std1=0, scenario='A'): rct_res = [] adpt0_res = [] adpt1_res = [] true_res = [] for t in range(trial): if scenario == 'A': Y, T, X, true_ITE = dgps.ihdp_surface_A() elif scenario == 'B': Y, T, X, true_ITE = dgps.ihdp_surface_B() perm = np.random.permutation(len(Y)) Y = Y[perm] T = T[perm] X = X[perm] Y1 = Y.copy() Y1[T==0] += true_ITE[T==0] Y1 += np.random.normal(0, std1, size=len(Y1)) Y0 = Y.copy() Y0[T==1] -= true_ITE[T==1] Y0 += np.random.normal(0, std0, size=len(Y0)) rct = RCT() adpt0 = Adapt(pretraining=10) adpt1 = Adapt(pretraining=100) opt0 = OPT() opt1 = OPT() rct_temp = [] adpt0_temp = [] adpt1_temp = [] true_temp = [] for period_t in range(len(Y)): rct(period_t, X[period_t], Y0[period_t], Y1[period_t]) adpt0(period_t, X[period_t], Y0[period_t], Y1[period_t]) adpt1(period_t, X[period_t], Y0[period_t], Y1[period_t]) if period_t > 2: rct_temp.append(rct.effect()) adpt0_temp.append(adpt0.effect()) adpt1_temp.append(adpt1.effect()) true_temp.append(np.mean(true_ITE)) rct_res.append(rct_temp) adpt0_res.append(adpt0_temp) adpt1_res.append(adpt1_temp) true_res.append(true_temp) return rct_res, adpt0_res, adpt1_res, true_res
def test_forest_dml(self): """Testing the completion of the fit and effect estimation of an AutomatedForestDML""" Y, T, X, _ = ihdp_surface_B() est = AutomatedForestDML(model_y=automl_model_reg(), model_t=GradientBoostingClassifier(), discrete_treatment=True, n_estimators=1000, subsample_fr=.8, min_samples_leaf=10, min_impurity_decrease=0.001, verbose=0, min_weight_fraction_leaf=.01) est.fit(Y, T, X=X) _ = est.effect(X)
def automl_model_clf(): return copy.deepcopy(AUTOML_CONFIG_CLF) # Linear models are required for parametric dml def automl_model_linear_reg(): return copy.deepcopy(AUTOML_CONFIG_LINEAR_REG) # sample weighting models are required for nonparametric dml def automl_model_sample_weight_reg(): return copy.deepcopy(AUTOML_CONFIG_SAMPLE_WEIGHT_REG) # Test values Y, T, X, _ = ihdp_surface_B() except ImportError: pass # automl not installed @pytest.mark.automl class TestAutomatedDML(unittest.TestCase): @classmethod def setUpClass(cls): subscription_id = os.getenv("SUBSCRIPTION_ID") resource_group = os.getenv("RESOURCE_GROUP") workspace_name = os.getenv("WORKSPACE_NAME") auth = AzureCliAuthentication() setAutomatedMLWorkspace(auth=auth,