def test_story_cid_examples(self) -> None: get_fitness_tracker() get_introduced_bias() get_car_accident_predictor() get_content_recommender() get_content_recommender2() get_modified_content_recommender() get_grade_predictor()
def test_updated_decision_names(self) -> None: cid = get_introduced_bias() self.assertEqual(cid.get_cpds('D').state_names['D'], [0, 1]) cid.impute_conditional_expectation_decision('D', 'Y') self.assertNotEqual(cid.get_cpds('D').state_names['D'], [0, 1]) cid.impute_random_policy() self.assertNotEqual(cid.get_cpds('D').state_names['D'], [0, 1])
def test_impute_cond_expectation_decision(self) -> None: cid = get_introduced_bias() cid.impute_conditional_expectation_decision('D', 'Y') eu_ce = cid.expected_utility({}) self.assertAlmostEqual(eu_ce, -0.1666, 2) cid.impute_optimal_policy() eu_opt = cid.expected_utility({}) self.assertEqual(eu_ce, eu_opt)
def test_total_effect(self) -> None: cid = get_minimal_cid() cid.impute_random_policy() self.assertEqual(total_effect(cid, 'A', 'B', 0, 1), 1) cid = get_introduced_bias() cid.impute_random_policy() self.assertEqual(total_effect(cid, 'A', 'X', 0, 1), 0.5) self.assertEqual(total_effect(cid, 'A', 'D', 0, 1), 0) self.assertEqual(total_effect(cid, 'A', 'Y', 0, 1), 0.5)
def test_updated_decision_names(self) -> None: cid = get_introduced_bias() self.assertEqual(cid.get_cpds('D').state_names['D'], [0, 1]) cid.impute_conditional_expectation_decision('D', 'Y') self.assertNotEqual(cid.get_cpds('D').state_names['D'], [0, 1]) cid.impute_random_policy() self.assertNotEqual(cid.get_cpds('D').state_names['D'], [0, 1]) cid.impute_optimal_policy() eu = cid.expected_utility({}) self.assertGreater(eu, -0.2)
def test_value_of_information(self) -> None: cid = get_introduced_bias() self.assertTrue(admits_voi(cid, 'D', 'A')) self.assertEqual(set(admits_voi_list(cid, 'D')), {'A', 'X', 'Z', 'Y'}) cid2 = get_grade_predictor() self.assertCountEqual(admits_voi_list(cid2, 'P'), ['HS', 'E', 'Gr']) self.assertFalse(admits_voi(cid2, 'P', 'Ge')) with self.assertRaises(Exception): admits_voi(cid2, 'P', 'A') with self.assertRaises(Exception): admits_voi(cid2, 'B', 'Ge') cid2.remove_edge('HS', 'P') self.assertCountEqual(admits_voi_list(cid2, 'P'), ['R', 'HS', 'E', 'Gr'])
def test_introduced_total_effect(self) -> None: cid = get_introduced_bias() cid.impute_random_policy() self.assertEqual(introduced_total_effect(cid, 'A', 'D', 'Y', 0, 1), -0.5) cid.impute_conditional_expectation_decision('D', 'Y') self.assertAlmostEqual(introduced_total_effect(cid, 'A', 'D', 'Y', 0, 1), 0.3333, 2) # Try modified model where X doesn't depend on Z cid = get_introduced_bias() cid.impute_random_policy() cid.add_cpds(FunctionCPD('X', lambda a, z: a, evidence=['A', 'Z'])) cid.impute_conditional_expectation_decision('D', 'Y') self.assertAlmostEqual(introduced_total_effect(cid, 'A', 'D', 'Y', 0, 1), 0, 2) # Try modified model where Y doesn't depend on Z cid = get_introduced_bias() cid.impute_random_policy() cid.add_cpds(FunctionCPD('Y', lambda x, z: x, evidence=['X', 'Z'])) cid.impute_conditional_expectation_decision('D', 'Y') self.assertAlmostEqual(introduced_total_effect(cid, 'A', 'D', 'Y', 0, 1), 0, 2) # Try modified model where Y doesn't depend on X cid = get_introduced_bias() cid.impute_random_policy() cid.add_cpds(FunctionCPD('Y', lambda x, z: z, evidence=['X', 'Z'])) cid.impute_conditional_expectation_decision('D', 'Y') self.assertAlmostEqual(introduced_total_effect(cid, 'A', 'D', 'Y', 0, 1), 0.333, 2)