def test_model_prediction_differential(save_file='test_data_predictions.csv'):
    """
    This test compares the prediction result similarity of the
    current model with the previous model's results.
    """
    # given
    previous_model_df = load_dataset('test_data_predictions.csv')
    previous_model_predictions = previous_model_df.predictions.values
    data = load_dataset(file_name='lending_data.csv')
    data = clean_target_variable(data)
    _, X_validation, _, _ = split_dataset(data)

    # take a slice with no input validation issues
    multiple_test_json = X_validation[99:600]

    # when
    response = make_prediction(input_data=multiple_test_json)
    current_model_predictions = response.get('predictions')

    # then
    # difference the current model vs. the old model
    assert len(previous_model_predictions) == len(current_model_predictions)

    # perform differential test
    for previous_value, current_value in zip(previous_model_predictions,
                                             current_model_predictions):
        # convert numpy float to Python float
        previous_value = previous_value.item()
        current_value = current_value.item()

        assert math.isclose(previous_value,
                            current_value,
                            rel_tol=config.ACCEPTABLE_MODEL_DIFFERENCE)
예제 #2
0
def test_make_multiple_predictions():
    """Make multiple predictions on validation data"""
    # given
    data = load_dataset(file_name='lending_data.csv')
    data = clean_target_variable(data)
    _, X_validation, _, _ = split_dataset(data)
    multiple_validation_json = X_validation.to_json(orient='records')
    # when
    subject = make_prediction(input_data=multiple_validation_json)
    # then
    assert subject is not None
    assert len(subject.get('predictions')) == 44358
예제 #3
0
def test_prediction_endpoint_validation_200(flask_test_client):
    # given
    # get validation data from lending_model package
    data = load_dataset(file_name=config.TRAINING_DATA_FILE)
    data = clean_target_variable(data)
    _, X_validation, _, _ = split_dataset(data)
    post_json = X_validation.to_json(orient='records')
    # when
    response = flask_test_client.post('/v1/predict/lending_rate',
                                      json=post_json)
    # then
    assert response.status_code == 200
예제 #4
0
def test_make_single_prediction():
    """Make a single prediction on validation data."""
    # given
    data = load_dataset(file_name='lending_data.csv')
    data = clean_target_variable(data)
    _, X_validation, _, _ = split_dataset(data)
    single_validation_json = X_validation[0:1].to_json(orient='records')
    # when
    subject = make_prediction(input_data=single_validation_json)
    # then
    assert subject is not None
    assert isinstance(subject.get('predictions')[0], float)
    assert subject.get('predictions')[0] > 0
def capture_predictions(save_file='test_data_predictions.csv'):
    """Save test data predictions to a csv."""
    data = load_dataset(file_name='lending_data.csv')
    data = clean_target_variable(data)
    _, X_validation, _, _ = split_dataset(data)

    # take a slice with no input validation issues
    multiple_test_json = X_validation[99:600]

    predictions = make_prediction(input_data=multiple_test_json)
    predictions_df = pd.DataFrame(predictions)

    # save file to lending model package, not installed package
    predictions_df.to_csv(f'{config.PACKAGE_ROOT.parent}/'
                          f'lending_model/lending_model/datasets/{save_file}')
def test_prediction_endpoint_returns_prediction(flask_test_client):
    # given
    # load data from lending model package, & get validation set
    data = load_dataset(file_name=model_config.TRAINING_DATA_FILE)
    data = clean_target_variable(data)
    _, X_validation, _, _ = split_dataset(data)
    post_json = X_validation[0:1].to_json(orient='records')

    # when
    response = flask_test_client.post('/v1/predict/lending_rate',
                                      json=post_json)
    # then
    assert response.status_code == 200
    response_json = json.loads(response.data)
    prediction = response_json['predictions']
    response_version = response_json['version']
    assert prediction[0] > 0
    assert response_version == _version