| import gradio as gr
|
| import pandas as pd
|
| import joblib
|
|
|
|
|
| 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):
|
|
|
| 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)
|
|
|
|
|
| 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()
|
|
|