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)
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
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
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