shelfy / app.py
erikky's picture
Upload 3 files
0e152e1 verified
import gradio as gr
import pandas as pd
import joblib
# Load model
model = joblib.load("shelfy_purchase_rate_v2.joblib")
def predict_conversion(product_name, views, carts, unique_users, avg_price, carts_lag_1, carts_lag_3):
# Convert to float (Gradio passes strings)
views = float(views or 0)
carts = float(carts or 0)
unique_users = float(unique_users or 0)
avg_price = float(avg_price or 0)
carts_lag_1 = float(carts_lag_1 or 0)
carts_lag_3 = float(carts_lag_3 or 0)
# Calculate ratios (same as training)
cart_intent = carts / (views + 1)
user_intensity = unique_users / (views + 1)
data = pd.DataFrame({
'views': [views],
'carts': [carts],
'unique_users': [unique_users],
'avg_price': [avg_price],
'carts_lag_1': [carts_lag_1],
'carts_lag_3': [carts_lag_3],
'cart_intent': [cart_intent],
'user_intensity': [user_intensity]
})
future_rate = model.predict(data)[0]
return (
f"{future_rate:.2%}",
f"${future_rate * views * avg_price:.0f}",
"Good Demand" if future_rate >= 0.025 else "Medium Demand" if future_rate >= 0.015 else "Low Demand"
)
demo = gr.Interface(
fn=predict_conversion,
inputs=[
gr.Textbox("iPhone Case", label="Product Name"),
gr.Number(1500, label="Views (Today)"),
gr.Number(45, label="Carts (Today)"),
gr.Number(320, label="Unique Users"),
gr.Number(26, label="Avg Price $"),
gr.Number(40, label="Yesterday Carts"),
gr.Number(35, label="3 Days Ago Carts")
],
outputs=[
gr.Label(label="Predicted Conversion (Tomorrow)"),
gr.Label(label="Revenue Potential"),
gr.Label(label="Demand")
],
title="๐Ÿ›’ Shelfy: Tomorrow's Best Sellers",
description="Top 10% predictions captured 25.4% of sales!"
)
demo.launch()