adeyemi001's picture
Create app.py
e94eb3e verified
Raw
History Blame Contribute Delete
2.06 kB
from flask import Flask, render_template, request, jsonify
import pandas as pd
import joblib
import os
app = Flask(__name__)
MODEL_PATH = os.environ.get("MODEL_PATH", "random_over_sampling_model.pkl")
def load_model():
try:
return joblib.load(MODEL_PATH)
except FileNotFoundError:
return None
model = load_model()
def preprocess_input(data):
data['IMAGES_AND_REVIEWS'] = ((data['IMAGES'] > 0) & (data['REVIEWS'] > 0)).astype(int)
data['SPECS_AND_REVIEWS'] = ((data['SPECS'] > 0) & (data['REVIEWS'] > 0)).astype(int)
data['FAQ_AND_IMAGES'] = ((data['FAQ'] > 0) & (data['IMAGES'] > 0)).astype(int)
data['WARRANTY_AND_SPECS'] = ((data['WARRANTY'] > 0) & (data['SPECS'] > 0)).astype(int)
data['COMPARE_SIMILAR_AND_SPONSORED_LINKS'] = ((data['COMPARE_SIMILAR'] > 0) & (data['SPONSORED_LINKS'] > 0)).astype(int)
return data
@app.route("/")
def index():
return render_template("index.html")
@app.route("/predict", methods=["POST"])
def predict():
if model is None:
return jsonify({"error": "Model not loaded. Please ensure the model file exists."}), 500
try:
body = request.get_json()
features = [
"IMAGES", "REVIEWS", "FAQ", "SPECS", "SHIPPING",
"BRO_TOGETHER", "COMPARE_SIMILAR", "VIEW_SIMILAR",
"WARRANTY", "SPONSORED_LINKS"
]
input_data = pd.DataFrame([{f: int(body.get(f, 0)) for f in features}])
processed = preprocess_input(input_data.copy())
prediction = int(model.predict(processed)[0])
probability = None
if hasattr(model, "predict_proba"):
proba = model.predict_proba(processed)[0]
probability = float(proba[1]) if prediction == 1 else float(proba[0])
return jsonify({
"prediction": prediction,
"probability": probability
})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == "__main__":
port = int(os.environ.get("PORT", 7860))
app.run(host="0.0.0.0", port=port)