def given_a_sleeping_dog_test():
    customer_segment = ('60602', 'male')
    classification_model = SimplisticClasses.DumbClassifier({
        ('control', ) + customer_segment:
        0.50,
        ('variant', ) + customer_segment:
        0.45,
    })
    regression_model = SimplisticClasses.AllCasesHaveSameProfitRegressionModel(
    )
    ad_name = SimplisticClasses.assign_ad_for(customer_segment,
                                              classification_model,
                                              regression_model)
    assert ad_name == 'control', "Should let sleeping dogs lie."
def given_a_variant_that_does_NOT_improve_on_probability_of_ordering_over_control_test(
):
    customer_segment = ('60626', 'male')
    classification_model = SimplisticClasses.DumbClassifier({
        ('control', ) + customer_segment:
        0.45,
        ('variant', ) + customer_segment:
        0.45,
    })
    regression_model = SimplisticClasses.AllCasesHaveSameProfitRegressionModel(
    )
    ad_name = SimplisticClasses.assign_ad_for(customer_segment,
                                              classification_model,
                                              regression_model)
    assert ad_name == 'control', "Should choose to NOT advertise"
def given_variant_improves_over_control_just_enough_to_warrant_advertising_cost_test(
):
    customer_segment = ('60626', 'female')
    classification_model = SimplisticClasses.DumbClassifier({
        ('control', ) + customer_segment:
        0.60,
        ('variant', ) + customer_segment:
        0.65,
    })
    regression_model = SimplisticClasses.AllCasesHaveSameProfitRegressionModel(
    )
    ad_name = SimplisticClasses.assign_ad_for(customer_segment,
                                              classification_model,
                                              regression_model,
                                              ad_cost=0.60)
    assert ad_name == 'variant', "Should choose to advertise"
def given_a_dumb_classifer_that_says_what_I_want_test():
    classifier = SimplisticClasses.DumbClassifier({
        ('control', '60626', 'female'):
        0.60,
    })
    order_probability = classifier.probability(('control', '60626', 'female'))
    assert order_probability == 0.60, "Should return probability I told it to."
def given_probability_to_order_remains_constant_but_expected_profit_increases_test(
):
    customer_segment = ('60626', 'female')
    classification_model = SimplisticClasses.DumbClassifier({
        ('control', ) + customer_segment:
        0.65,
        ('variant', ) + customer_segment:
        0.65,
    })
    regression_model = SimplisticClasses.DumbClassifier({
        ('control', ) + customer_segment:
        12.25,
        ('variant', ) + customer_segment:
        15.50,
    })
    ad_name = SimplisticClasses.assign_ad_for(customer_segment,
                                              classification_model,
                                              regression_model)
    assert ad_name == 'variant', "Should recommend using ad"
def given_any_input_test():
    regression_model = SimplisticClasses.AllCasesHaveSameProfitRegressionModel(
    )
    results = regression_model.predict(input=(42, 'hai'))
    assert results == 12.25, "Should be a constant amount regardless of the input."
def linear_regression_test():
    dummy_regression_model = DummyRegressionModel(value_predicted=33.12)
    model = SimplisticClasses.RegressionModel(dummy_regression_model)
    expected_profit_if_orders = model.predict([1, 5, 2])
    assert expected_profit_if_orders == 33.12
def logistic_regression_test():
    dummy_sklearn_model = DummySklearnModel(probability_of_ordering=0.42)
    model = SimplisticClasses.LogisticModel(dummy_sklearn_model)
    probability_of_ordering = model.probability([1, 2, 3])
    assert dummy_sklearn_model.predict_proba_call_arguments == [1, 2, 3]
    assert probability_of_ordering == 0.42
def given_a_never_before_seen_observation_test():
    classifier = SimplisticClasses.DumbClassifier({})
    probability = classifier.probability(('boo', 'bibbit'))
    assert probability == None, "Should return None"