def test_oracle_maxutil_classifier_is_stable(self): env = lending.DelayedImpactEnv() agent_params = classifier_agents.ScoringAgentParams( feature_keys=['applicant_features'], group_key='group', default_action_fn=(lambda: 1), burnin=1, threshold_policy=threshold_policies.ThresholdPolicy.SINGLE_THRESHOLD, convert_one_hot_to_integer=True, cost_matrix=params.CostMatrix( fn=0, fp=-1, tp=env.initial_params.interest_rate, tn=0)) agent = oracle_lending_agent.OracleThresholdAgent( action_space=env.action_space, observation_space=env.observation_space, reward_fn=rewards.BinarizedScalarDeltaReward('bank_cash'), params=agent_params, env=env) test_util.run_test_simulation(env=env, agent=agent) # Drop 0 threshold associated with burn-in. first_nonzero_threshold = None for thresh in agent.global_threshold_history: if thresh > 0: if first_nonzero_threshold is None: first_nonzero_threshold = thresh self.assertAlmostEqual(first_nonzero_threshold, thresh) # Make sure there is at least one non-zero threshold. self.assertIsNotNone(first_nonzero_threshold)
def scenario_builder(self): """Returns an agent and environment pair.""" env_params = lending_params.DelayedImpactParams( applicant_distribution=lending_params.two_group_credit_clusters( cluster_probabilities=self.cluster_probabilities, group_likelihoods=[self.group_0_prob, 1 - self.group_0_prob]), bank_starting_cash=self.bank_starting_cash, interest_rate=self.interest_rate, cluster_shift_increment=self.cluster_shift_increment, ) env = lending.DelayedImpactEnv(env_params) agent_params = classifier_agents.ScoringAgentParams( feature_keys=['applicant_features'], group_key='group', default_action_fn=(lambda: 1), burnin=self.burnin, convert_one_hot_to_integer=True, threshold_policy=self.threshold_policy, skip_retraining_fn=lambda action, observation: action == 0, cost_matrix=params.CostMatrix( fn=0, fp=-1, tp=env_params.interest_rate, tn=0)) agent = oracle_lending_agent.OracleThresholdAgent( action_space=env.action_space, reward_fn=rewards.BinarizedScalarDeltaReward( 'bank_cash', baseline=env.initial_params.bank_starting_cash), observation_space=env.observation_space, params=agent_params, env=env) agent.seed(100) return env, agent
def test_oracle_lending_agent_interacts(self): env = lending.DelayedImpactEnv() agent_params = classifier_agents.ScoringAgentParams( feature_keys=['applicant_features'], group_key='group', default_action_fn=(lambda: 1), burnin=1, convert_one_hot_to_integer=True, cost_matrix=params.CostMatrix( fn=0, fp=-1, tp=env.initial_params.interest_rate, tn=0)) agent = oracle_lending_agent.OracleThresholdAgent( action_space=env.action_space, observation_space=env.observation_space, reward_fn=rewards.BinarizedScalarDeltaReward('bank_cash'), params=agent_params, env=env) test_util.run_test_simulation(env=env, agent=agent)