|
|
| import numpy as np
|
| import joblib
|
| import pandas as pd
|
| from flask import Flask, request, jsonify
|
| import os
|
|
|
|
|
| revenue_forecast_predictor_api = Flask("Superkart Revenue Forecast Predictor")
|
|
|
|
|
| model_path = os.path.join(os.path.dirname(__file__), "superkart_best_pipeline.joblib")
|
| model = joblib.load(model_path)
|
|
|
|
|
| @revenue_forecast_predictor_api.get('/')
|
| def home():
|
| return "Welcome to the Superkart Revenue Forecast Predictor!"
|
|
|
|
|
| @revenue_forecast_predictor_api.post('/v1/predict')
|
| def predict_revenue_single():
|
| """
|
| Handles POST requests to the '/v1/predict' endpoint.
|
| Expects JSON payload with product-store details and returns predicted sales.
|
| """
|
|
|
| property_data = request.get_json()
|
|
|
|
|
| df = pd.DataFrame([property_data])
|
|
|
|
|
| product_id = property_data.get("Product_Id", None)
|
| store_id = property_data.get("Store_Id", None)
|
|
|
|
|
| features_df = df.drop(columns=["Product_Id", "Store_Id"], errors="ignore")
|
|
|
|
|
| predicted_sales = model.predict(df)[0]
|
| predicted_sales = round(float(predicted_sales), 2)
|
|
|
|
|
| response = {
|
| "Predicted_Revenue": predicted_sales
|
| }
|
| if product_id and store_id:
|
| response["Product_Id"] = product_id
|
| response["Store_Id"] = store_id
|
|
|
| return jsonify(response)
|
|
|
|
|
| @revenue_forecast_predictor_api.post('/v1/predictbatch')
|
| def predict_revenue_batch():
|
| """
|
| Handles POST requests to the '/v1/predictbatch' endpoint.
|
| Expects a CSV file containing multiple product-store records.
|
| Returns predicted revenue for all rows in the file.
|
| """
|
|
|
| file = request.files['file']
|
| df = pd.read_csv(file)
|
|
|
|
|
| ids = None
|
| if "Product_Id" in df.columns and "Store_Id" in df.columns:
|
| ids = df["Product_Id"].astype(str) + "_" + df["Store_Id"].astype(str)
|
|
|
|
|
| features_df = df.drop(columns=["Product_Id", "Store_Id"], errors="ignore")
|
|
|
|
|
| predicted_sales = model.predict(features_df).tolist()
|
| predicted_sales = [round(float(val), 2) for val in predicted_sales]
|
|
|
|
|
| if ids is not None:
|
| output_dict = dict(zip(ids, predicted_sales))
|
| else:
|
| output_dict = {"Row_" + str(i): val for i, val in enumerate(predicted_sales)}
|
|
|
| return jsonify(output_dict)
|
|
|
|
|
| if __name__ == '__main__':
|
| revenue_forecast_predictor_api.run(debug=True)
|
|
|