Nausad's picture
Update app.py
ce5135e verified
from flask import Flask, request, jsonify, render_template
import joblib
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# Compatibility patch for sklearn 1.6.1 pickles on newer sklearn
from sklearn.compose import _column_transformer
class _RemainderColsList(list):
def __init__(self, columns, future_dtype=None):
super().__init__(columns)
self.future_dtype = future_dtype
_column_transformer._RemainderColsList = _RemainderColsList
app = Flask(__name__)
preprocessor = joblib.load('preprocessor1.pkl')
model = joblib.load('randomforestmodel.pkl')
TRANSACTION_TYPES = ['CASH_IN', 'CASH_OUT', 'DEBIT', 'PAYMENT', 'TRANSFER']
@app.route('/')
def index():
return render_template('index.html')
@app.route('/predict', methods=['POST'])
def predict():
try:
d = request.get_json()
old_org = float(d['oldbalanceOrg'])
new_org = float(d['newbalanceOrig'])
old_dest = float(d['oldbalanceDest'])
new_dest = float(d['newbalanceDest'])
amount = float(d['amount'])
err_orig = old_org - amount - new_org
err_dest = new_dest - old_dest - amount
df = pd.DataFrame([{
'step': float(d['step']),
'type': d['type'],
'amount': amount,
'oldbalanceOrg': old_org,
'newbalanceOrig': new_org,
'oldbalanceDest': old_dest,
'newbalanceDest': new_dest,
'errorBalanceOrig': err_orig,
'errorBalanceDest': err_dest,
}])
X = preprocessor.transform(df)
proba = model.predict_proba(X)[0]
return jsonify({
'legit_prob': round(float(proba[0]) * 100, 2),
'fraud_prob': round(float(proba[1]) * 100, 2),
'error_balance_orig': round(err_orig, 2),
'error_balance_dest': round(err_dest, 2),
})
except Exception as e:
return jsonify({'error': str(e)}), 400
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False)