muthukumar22's picture
Upload folder using huggingface_hub
bfe46dc verified
import streamlit as st
import pandas as pd
from huggingface_hub import hf_hub_download
import joblib
# -----------------------------
# Page Configuration
# -----------------------------
st.set_page_config(
page_title="Travel Conversion AI",
page_icon="✈️",
layout="centered"
)
# -----------------------------
# Download and Load Model
# -----------------------------
@st.cache_resource
def load_model():
model_path = hf_hub_download(
repo_id="muthukumar22/tourism-package-mod",
filename="best_tourism_model_rf.joblib" # Updated to match the RF model name
)
return joblib.load(model_path)
try:
model = load_model()
except Exception as e:
st.error(f"Error loading model: {e}")
st.stop()
# -----------------------------
# 1. New Title Section
# -----------------------------
st.title("✈️ Intelligent Travel Sales Predictor")
# -----------------------------
# 2. New Comments/Description Section
# -----------------------------
st.markdown("""
---
### 🎯 Optimize Your Sales Strategy
Welcome to the **Customer Conversion Dashboard**. This tool utilizes a **Random Forest** machine learning model to analyze customer demographics and interaction history.
**How to use:**
1. Input the customer's profile details below.
2. Click **Analyze Customer Potential**.
3. Receive a probability score indicating the likelihood of a sale.
---
""")
# -----------------------------
# User Inputs (Organized with Columns)
# -----------------------------
st.subheader("πŸ“ Customer Profile")
col1, col2 = st.columns(2)
with col1:
Age = st.number_input("Age", 18, 80, 35)
CityTier = st.selectbox("City Tier", [1, 2, 3])
Occupation = st.selectbox("Occupation", ["Salaried", "Freelancer", "Small Business", "Large Business"])
Gender = st.selectbox("Gender", ["Male", "Female"])
MaritalStatus = st.selectbox("Marital Status", ["Single", "Married", "Divorced", "Unmarried"])
NumberOfPersonVisiting = st.number_input("Persons Visiting", 1, 10, 2)
NumberOfChildrenVisiting = st.number_input("Children Visiting", 0, 5, 0)
MonthlyIncome = st.number_input("Monthly Income", 10000, 200000, 50000)
with col2:
TypeofContact = st.selectbox("Contact Method", ["Company Invited", "Self Inquiry"])
Designation = st.selectbox("Job Designation", ["Executive", "Manager", "Senior Manager", "AVP", "VP"])
ProductPitched = st.selectbox("Product Pitched", ["Basic", "Deluxe", "Standard", "Super Deluxe", "King"])
PreferredPropertyStar = st.selectbox("Preferred Property Star", [3, 4, 5])
NumberOfTrips = st.number_input("Trips per Year", 0, 20, 2)
Passport = st.selectbox("Has Passport?", [0, 1], format_func=lambda x: "Yes" if x == 1 else "No")
OwnCar = st.selectbox("Owns Car?", [0, 1], format_func=lambda x: "Yes" if x == 1 else "No")
st.subheader("πŸ“ž Interaction Details")
col3, col4 = st.columns(2)
with col3:
PitchSatisfactionScore = st.slider("Pitch Satisfaction (1-5)", 1, 5, 3)
with col4:
NumberOfFollowups = st.number_input("Follow-ups Made", 0, 10, 3)
DurationOfPitch = st.number_input("Pitch Duration (mins)", 1, 120, 20)
# -----------------------------
# Assemble Input Data
# -----------------------------
# Note: Keys must match the training column names exactly
input_data = pd.DataFrame([{
"Age": Age,
"CityTier": CityTier,
"TypeofContact": TypeofContact,
"Occupation": Occupation,
"Gender": Gender,
"NumberOfPersonVisiting": NumberOfPersonVisiting,
"PreferredPropertyStar": PreferredPropertyStar,
"MaritalStatus": MaritalStatus,
"NumberOfTrips": NumberOfTrips,
"Passport": Passport,
"OwnCar": OwnCar,
"NumberOfChildrenVisiting": NumberOfChildrenVisiting,
"Designation": Designation,
"MonthlyIncome": MonthlyIncome,
"PitchSatisfactionScore": PitchSatisfactionScore,
"ProductPitched": ProductPitched,
"NumberOfFollowups": NumberOfFollowups,
"DurationOfPitch": DurationOfPitch
}])
# -----------------------------
# 3. New Prediction Section
# -----------------------------
st.markdown("---")
if st.button("Analyze Customer Potential", type="primary", use_container_width=True):
# Get the probability of class 1 (Purchase)
# Most sklearn classifiers support predict_proba
try:
prediction_prob = model.predict_proba(input_data)[0][1]
prediction_class = model.predict(input_data)[0]
except AttributeError:
# Fallback if model doesn't support proba (unlikely for RF)
prediction_class = model.predict(input_data)[0]
prediction_prob = 1.0 if prediction_class == 1 else 0.0
st.subheader("πŸ“Š Analysis Results")
r_col1, r_col2 = st.columns([1, 2])
with r_col1:
# Display simple metric
st.metric(label="Purchase Probability", value=f"{prediction_prob:.1%}")
with r_col2:
# Display logic with visuals
if prediction_prob > 0.65:
st.success("βœ… **High Conversion Chance**")
st.write("This customer shows strong interest signals. **Recommended Action:** Close the deal immediately.")
st.progress(prediction_prob)
elif prediction_prob > 0.35:
st.warning("⚠️ **Medium Conversion Chance**")
st.write("The customer is on the fence. **Recommended Action:** Offer a discount or follow up.")
st.progress(prediction_prob)
else:
st.error("πŸ”» **Low Conversion Chance**")
st.write("This customer is unlikely to purchase. **Recommended Action:** Do not prioritize.")
st.progress(prediction_prob)