Upload folder using huggingface_hub
Browse files- Random_Forest_Model.pkl +2 -2
- __pycache__/custom_transformer.cpython-311.pyc +0 -0
- app.py +42 -8
- custom_transformer.py +36 -0
- requirements.txt +1 -2
Random_Forest_Model.pkl
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d39188f07d0b74e2aae8f6127bf6a6adf0b7d030d929eaabefbff0825484e7fa
|
| 3 |
+
size 86814371
|
__pycache__/custom_transformer.cpython-311.pyc
ADDED
|
Binary file (2.64 kB). View file
|
|
|
app.py
CHANGED
|
@@ -1,19 +1,53 @@
|
|
| 1 |
# Backend_files/app.y
|
|
|
|
| 2 |
import pandas as pd
|
| 3 |
from flask import Flask, request, jsonify
|
| 4 |
from flask_cors import CORS
|
| 5 |
-
import
|
| 6 |
-
|
| 7 |
# Import the classes so joblib can find them during unpickling
|
| 8 |
-
from custom_transformers import StoreAgeAdder, OutlierCapper
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
# Initialize flas app with name
|
| 14 |
Superkart_Sales_Predictor_API = Flask("Superkart Sales Predictor")
|
| 15 |
CORS(Superkart_Sales_Predictor_API) # Enable CORS for frontend integration (optional)
|
| 16 |
|
|
|
|
|
|
|
|
|
|
| 17 |
# Define a route for the home page (GET request)
|
| 18 |
@Superkart_Sales_Predictor_API.get('/')
|
| 19 |
def home():
|
|
@@ -99,4 +133,4 @@ def predict_batch():
|
|
| 99 |
|
| 100 |
# Run flask in debug mode
|
| 101 |
if __name__ == '__main__':
|
| 102 |
-
Superkart_Sales_Predictor_API.run(debug=False, host='0.0.0.0', port=7860)
|
|
|
|
| 1 |
# Backend_files/app.y
|
| 2 |
+
import joblib
|
| 3 |
import pandas as pd
|
| 4 |
from flask import Flask, request, jsonify
|
| 5 |
from flask_cors import CORS
|
| 6 |
+
from sklearn.base import BaseEstimator, TransformerMixin
|
|
|
|
| 7 |
# Import the classes so joblib can find them during unpickling
|
| 8 |
+
#from backend.files.custom_transformers import StoreAgeAdder, OutlierCapper
|
| 9 |
+
|
| 10 |
+
class StoreAgeAdder(BaseEstimator, TransformerMixin):
|
| 11 |
+
def __init__(self, current_year=2025):
|
| 12 |
+
self.current_year = current_year
|
| 13 |
+
|
| 14 |
+
def fit(self, X, y=None):
|
| 15 |
+
return self
|
| 16 |
+
|
| 17 |
+
def transform(self, X):
|
| 18 |
+
X = X.copy()
|
| 19 |
+
X['store_age'] = self.current_year - X['Store_Establishment_Year']
|
| 20 |
+
return X.drop(columns='Store_Establishment_Year')
|
| 21 |
+
|
| 22 |
+
class OutlierCapper(BaseEstimator, TransformerMixin):
|
| 23 |
+
def __init__(self, factor=1.5):
|
| 24 |
+
self.factor = factor
|
| 25 |
+
self.bounds = {}
|
| 26 |
+
|
| 27 |
+
def fit(self, X, y=None):
|
| 28 |
+
for col in X.columns:
|
| 29 |
+
Q1 = X[col].quantile(0.25)
|
| 30 |
+
Q3 = X[col].quantile(0.75)
|
| 31 |
+
IQR = Q3 - Q1
|
| 32 |
+
lower = Q1 - self.factor * IQR
|
| 33 |
+
upper = Q3 + self.factor * IQR
|
| 34 |
+
self.bounds[col] = (lower, upper)
|
| 35 |
+
return self
|
| 36 |
+
|
| 37 |
+
def transform(self, X):
|
| 38 |
+
X = X.copy()
|
| 39 |
+
for col in X.columns:
|
| 40 |
+
lower, upper = self.bounds[col]
|
| 41 |
+
X[col] = np.clip(X[col], lower, upper)
|
| 42 |
+
return X
|
| 43 |
+
|
| 44 |
# Initialize flas app with name
|
| 45 |
Superkart_Sales_Predictor_API = Flask("Superkart Sales Predictor")
|
| 46 |
CORS(Superkart_Sales_Predictor_API) # Enable CORS for frontend integration (optional)
|
| 47 |
|
| 48 |
+
# Load the trained model
|
| 49 |
+
Random_Forest_Loaded_Model = joblib.load('Random_Forest_Model.pkl')
|
| 50 |
+
|
| 51 |
# Define a route for the home page (GET request)
|
| 52 |
@Superkart_Sales_Predictor_API.get('/')
|
| 53 |
def home():
|
|
|
|
| 133 |
|
| 134 |
# Run flask in debug mode
|
| 135 |
if __name__ == '__main__':
|
| 136 |
+
Superkart_Sales_Predictor_API.run(debug=False, host='0.0.0.0', port=7860)
|
custom_transformer.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy as np
|
| 2 |
+
from sklearn.base import BaseEstimator, TransformerMixin
|
| 3 |
+
|
| 4 |
+
class StoreAgeAdder(BaseEstimator, TransformerMixin):
|
| 5 |
+
def __init__(self, current_year=2025):
|
| 6 |
+
self.current_year = current_year
|
| 7 |
+
|
| 8 |
+
def fit(self, X, y=None):
|
| 9 |
+
return self
|
| 10 |
+
|
| 11 |
+
def transform(self, X):
|
| 12 |
+
X = X.copy()
|
| 13 |
+
X['store_age'] = self.current_year - X['Store_Establishment_Year']
|
| 14 |
+
return X.drop(columns='Store_Establishment_Year')
|
| 15 |
+
|
| 16 |
+
class OutlierCapper(BaseEstimator, TransformerMixin):
|
| 17 |
+
def __init__(self, factor=1.5):
|
| 18 |
+
self.factor = factor
|
| 19 |
+
self.bounds = {}
|
| 20 |
+
|
| 21 |
+
def fit(self, X, y=None):
|
| 22 |
+
for col in X.columns:
|
| 23 |
+
Q1 = X[col].quantile(0.25)
|
| 24 |
+
Q3 = X[col].quantile(0.75)
|
| 25 |
+
IQR = Q3 - Q1
|
| 26 |
+
lower = Q1 - self.factor * IQR
|
| 27 |
+
upper = Q3 + self.factor * IQR
|
| 28 |
+
self.bounds[col] = (lower, upper)
|
| 29 |
+
return self
|
| 30 |
+
|
| 31 |
+
def transform(self, X):
|
| 32 |
+
X = X.copy()
|
| 33 |
+
for col in X.columns:
|
| 34 |
+
lower, upper = self.bounds[col]
|
| 35 |
+
X[col] = np.clip(X[col], lower, upper)
|
| 36 |
+
return X
|
requirements.txt
CHANGED
|
@@ -1,11 +1,10 @@
|
|
| 1 |
Flask==3.1.1
|
| 2 |
flask-cors==6.0.1
|
| 3 |
geopandas==1.0.1
|
| 4 |
-
joblib==1.
|
| 5 |
pandas==2.2.2
|
| 6 |
pandas-datareader==0.10.0
|
| 7 |
pandas-gbq==0.29.1
|
| 8 |
pandas-stubs==1.2.0.62
|
| 9 |
scikit-learn==1.6.1
|
| 10 |
sklearn-pandas==2.2.0
|
| 11 |
-
gunicorn==21.2.0 # or latest
|
|
|
|
| 1 |
Flask==3.1.1
|
| 2 |
flask-cors==6.0.1
|
| 3 |
geopandas==1.0.1
|
| 4 |
+
joblib==1.4.2
|
| 5 |
pandas==2.2.2
|
| 6 |
pandas-datareader==0.10.0
|
| 7 |
pandas-gbq==0.29.1
|
| 8 |
pandas-stubs==1.2.0.62
|
| 9 |
scikit-learn==1.6.1
|
| 10 |
sklearn-pandas==2.2.0
|
|
|