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/logistic.pkl b/logistic.pkl new file mode 100644 index 0000000..7688027 Binary files /dev/null and b/logistic.pkl differ 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 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) diff --git a/request.py b/request.py index e69de29..a7665fa 100644 --- a/request.py +++ b/request.py @@ -0,0 +1,10 @@ +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()) +''' + +''' 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