From 91a2aaa6c73efe3b682c45471c04df90dab2880a Mon Sep 17 00:00:00 2001 From: onothoja marho Date: Fri, 6 Mar 2020 00:16:01 +0100 Subject: [PATCH 1/6] ml request customization --- Pipfile | 11 +++++++++++ Pipfile.lock | 20 +++++++++++++++++++ app.py | 33 ------------------------------- predict.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 33 deletions(-) create mode 100644 Pipfile create mode 100644 Pipfile.lock delete mode 100644 app.py create mode 100644 predict.py diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..9534830 --- /dev/null +++ b/Pipfile @@ -0,0 +1,11 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] + +[requires] +python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..419c7ab --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,20 @@ +{ + "_meta": { + "hash": { + "sha256": "415dfdcb118dd9bdfef17671cb7dcd78dbd69b6ae7d4f39e8b44e71d60ca72e7" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.6" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": {}, + "develop": {} +} diff --git a/app.py b/app.py deleted file mode 100644 index 4a9329d..0000000 --- a/app.py +++ /dev/null @@ -1,33 +0,0 @@ -import numpy as np -from flask import Flask, request, jsonify, render_template -import pickle - -app = Flask(__name__) -model = pickle.load(open('final_prediction.pkl', 'rb')) - -@app.route('/') -def home(): - return render_template('index.html') - -@app.route('/predict',methods=['POST']) -def predict(): - - int_features = [int(x) for x in request.form.values()] - final_features = [np.array(int_features)] - prediction = model.predict(final_features) - - output = round(prediction[0], 2) - - return render_template('index.html', prediction_text='This transaction is likely to be fraud in percentage by $ {}'.format(output)) - -@app.route('/results',methods=['POST']) -def results(): - - data = request.get_json(force=True) - prediction = model.predict([np.array(list(data.values()))]) - - output = prediction[0] - return jsonify(output) - -if __name__ == "__main__": - app.run(debug=True) \ No newline at end of file diff --git a/predict.py b/predict.py new file mode 100644 index 0000000..2bfe6d9 --- /dev/null +++ b/predict.py @@ -0,0 +1,55 @@ +import numpy as np +import sys +import pickle + +model = pickle.load(open('final_prediction.pickle', 'rb')) + + +def predict(argv): + + int_features = [int(x) for x in argv[1:]] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + return output + + +if __name__ == '__main__': + predict(sys.argv) + + +# app = Flask(__name__) +# from flask import Flask, request, jsonify, render_template + + +# @app.route('/') +# def home(): +# return render_template('index.html') + + +# @app.route('/predict', methods=['POST']) +# def predict(): + +# int_features = [int(x) for x in request.form.values()] +# final_features = [np.array(int_features)] +# prediction = model.predict(final_features) + +# output = round(prediction[0], 2) + +# return render_template('index.html', prediction_text='This transaction is likely to be fraud in percentage by $ {}'.format(output)) + + +# @app.route('/results', methods=['POST']) +# def results(): + +# data = request.get_json(force=True) +# prediction = model.predict([np.array(list(data.values()))]) + +# output = prediction[0] +# return jsonify(output) + + +# if __name__ == "__main__": +# app.run(debug=True) From a85ea4a9c0095af0f35de91fc788dc4b4c3b5a62 Mon Sep 17 00:00:00 2001 From: E-STAT Date: Fri, 6 Mar 2020 01:52:36 +0100 Subject: [PATCH 2/6] .. --- request.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/request.py b/request.py index e69de29..03ca3d2 100644 --- a/request.py +++ b/request.py @@ -0,0 +1,7 @@ +import requests + +url = 'http://localhost:5000/results' +r = requests.post(url,json={'step':205, 'type':1, 'oldbalanceOrg':0, 'newbalanceOrig': 0, 'oldbalanceDest': 1853683.32, + 'newbalanceDest': 1916926.76, 'errorBalanceOrig': 63243.44, 'errorBalanceDest':0}) + +print(r.json()) \ No newline at end of file From d3448a11a58b6d32916e0d6a15e7d40460eac4c5 Mon Sep 17 00:00:00 2001 From: E-STAT Date: Fri, 6 Mar 2020 08:46:23 +0100 Subject: [PATCH 3/6] .. --- request.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/request.py b/request.py index 03ca3d2..a7665fa 100644 --- a/request.py +++ b/request.py @@ -4,4 +4,7 @@ r = requests.post(url,json={'step':205, 'type':1, 'oldbalanceOrg':0, 'newbalanceOrig': 0, 'oldbalanceDest': 1853683.32, 'newbalanceDest': 1916926.76, 'errorBalanceOrig': 63243.44, 'errorBalanceDest':0}) -print(r.json()) \ No newline at end of file +print(r.json()) +''' + +''' From e107dd3d5306ebf7d697bd03cb64a649cb476f5b Mon Sep 17 00:00:00 2001 From: E-STAT Date: Fri, 6 Mar 2020 09:22:10 +0100 Subject: [PATCH 4/6] .. --- requirements.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e059abf --- /dev/null +++ b/requirements.txt @@ -0,0 +1,18 @@ +astroid==2.3.3 +Click==7.0 +colorama==0.4.3 +Flask==1.1.1 +isort==4.3.21 +itsdangerous==1.1.0 +Jinja2==2.11.1 +lazy-object-proxy==1.4.3 +MarkupSafe==1.1.1 +mccabe==0.6.1 +numpy==1.18.1 +pandas==1.0.1 +pylint==2.4.4 +python-dateutil==2.8.1 +pytz==2019.3 +six==1.14.0 +Werkzeug==1.0.0 +wrapt==1.11.2 From f8e86ab72b64261f55987095ae5dc8ba5d035d9a Mon Sep 17 00:00:00 2001 From: E-STAT Date: Fri, 6 Mar 2020 12:13:17 +0100 Subject: [PATCH 5/6] .. --- logistic.pkl | Bin 0 -> 888 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 logistic.pkl diff --git a/logistic.pkl b/logistic.pkl new file mode 100644 index 0000000000000000000000000000000000000000..768802734e9e026a98a0ccb1a0f6125e1b885a70 GIT binary patch literal 888 zcmZuwJ#5oJ6t^(D;3`5M&~1n9Tw;S`=bbNY144qK zlq^haFau&jLSk%Gu^>hyCI+N30#X+?BsgDE7~lf~umKOoSnNl4+bD+U!(r!1C}- z-wa?6rx<1zX-I%!ujN%r<*I7=l&Av2pwy@;m=eqP0!AwqQy|fZQoMZQ6!vM-8uVpl z6Z+R-K!?GkCTo#3*xwAyvuc?rFeLi!%)+oHY4SRZ=x`vZMManAVKkS^UH!#HESkjN zpjpfIaC$<*QG^1A7#ucHD_1R_6fhjI6Sg35)aK~NbT}TO%UbLKB<%)dVHU<3kSBCV zaY*}Lu#+5Y@yU<=pYhl0^&6{3-{R(Qec9>)DbS=BR@%Y_G5vRV4+l9>528=UMP0{?n4+Bo^Fr5gQPU Date: Fri, 6 Mar 2020 12:13:40 +0100 Subject: [PATCH 6/6] .. --- model.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/model.py b/model.py index fd90d1f..f21608b 100644 --- a/model.py +++ b/model.py @@ -1,17 +1,19 @@ +''' + + + + + + + +''' import pandas as pd import numpy as np -%matplotlib inline -import matplotlib.pyplot as plt -import matplotlib.lines as mlines -from mpl_toolkits.mplot3d import Axes3D -import seaborn as sns from sklearn.model_selection import train_test_split, learning_curve from sklearn.metrics import average_precision_score -from xgboost.sklearn import XGBClassifier -from xgboost import plot_importance, to_graphviz +from sklearn.linear_model import LogisticRegression import pickle - df = pd.read_csv('Fraud_data_kaggle.csv') X = df.loc[(df.type == 'TRANSFER') | (df.type == 'CASH_OUT')] @@ -57,11 +59,9 @@ random_state = randomState) # Long computation in this cell (~1.8 minutes) -weights = (Y == 0).sum() / (1.0 * (Y == 1).sum()) -clf = XGBClassifier(max_depth = 3, scale_pos_weight = weights, \ - n_jobs = 4) -probabilities = clf.fit(trainX, trainY).predict_proba(testX) -print('AUPRC = {}'.format(average_precision_score(testY, \ - probabilities[:, 1]))) - -pickle.dump(clf, open('final_prediction.pkl', 'wb')) \ No newline at end of file +# weights = (Y == 0).sum() / (1.0 * (Y == 1).sum()) +clf = LogisticRegression() +log = clf.fit(trainX, trainY) +predict = log.predict(testX) + +pickle.dump(log, open('logistic.pkl', 'wb')) \ No newline at end of file