Anil28053's picture
Upload folder using huggingface_hub
f599f86 verified
import streamlit as st
import pandas as pd
from huggingface_hub import hf_hub_download
import joblib
# Download the model from the Model Hub
model_path = hf_hub_download(repo_id="Anil28053/tourism-model", filename="best_tourism_model_v1.joblib")
# Load the model
model = joblib.load(model_path)
# Streamlit UI for Tourism Package Prediction
st.title("Tourism Package Prediction App")
st.write("The Tourism Package Prediction App is an internal tool for comapany staff that predicts whether customers will buy the tourism package based on their details.")
st.write("Kindly enter the customer details to check whether they are likely to make purchase.")
# Collect user input
# Numeric features
Age = st.number_input("Age (years)", min_value=18, max_value=90, value=35)
DurationOfPitch = st.number_input("Duration of sales pitch (minutes)",min_value=0,max_value=200,value=15)
NumberOfPersonVisiting = st.number_input("Number of persons visiting with the customer",min_value=1,max_value=10,value=2)
NumberOfFollowups = st.number_input("Number of follow-ups done after the pitch",min_value=0,max_value=10,value=3)
PreferredPropertyStar = st.selectbox("Preferred hotel property star rating",[3, 4, 5],index=2)
NumberOfTrips = st.number_input("Average number of trips per year",min_value=0,max_value=30,value=1)
PitchSatisfactionScore = st.selectbox("Pitch satisfaction score (1–5)",[1, 2, 3, 4, 5],index=3)
NumberOfChildrenVisiting = st.number_input("Number of children visiting with the customer",min_value=0,max_value=10,value=0)
MonthlyIncome = st.number_input("Gross monthly income of the customer",min_value=0.0,value=100000.0,step=1000.0)
# Categorical features
TypeofContact = st.selectbox("Type of contact",["Self Enquiry", "Company Invited"])
CityTier = st.selectbox("City tier",[1, 2, 3],index=0)
Occupation = st.selectbox("Occupation",["Salaried", "Small Business", "Free Lancer", "Large Business"])
Gender = st.selectbox("Gender",["Male", "Female"])
ProductPitched = st.selectbox("Product pitched",["Basic", "Standard", "Deluxe", "Super Deluxe", "King"])
MaritalStatus = st.selectbox("Marital status",["Single", "Married", "Divorced", "Unmarried"])
Passport_display = st.selectbox("Does the customer have a passport?",["No", "Yes"])
Passport = 1 if Passport_display == "Yes" else 0
OwnCar_display = st.selectbox("Does the customer own a car?",["No", "Yes"])
OwnCar = 1 if OwnCar_display == "Yes" else 0
Designation = st.selectbox("Designation",["Executive", "Manager", "Senior Manager", "AVP", "VP"])
# Convert inputs to a single-row DataFrame matching model training features
input_data = pd.DataFrame([{
"Age": Age,
"DurationOfPitch": DurationOfPitch,
"NumberOfPersonVisiting": NumberOfPersonVisiting,
"NumberOfFollowups": NumberOfFollowups,
"PreferredPropertyStar": PreferredPropertyStar,
"NumberOfTrips": NumberOfTrips,
"PitchSatisfactionScore": PitchSatisfactionScore,
"NumberOfChildrenVisiting": NumberOfChildrenVisiting,
"MonthlyIncome": MonthlyIncome,
"TypeofContact": TypeofContact,
"CityTier": CityTier,
"Occupation": Occupation,
"Gender": Gender,
"ProductPitched": ProductPitched,
"MaritalStatus": MaritalStatus,
"Passport": Passport, # 0/1 as in training data
"OwnCar": OwnCar, # 0/1 as in training data
"Designation": Designation
}])
# Set the classification threshold
classification_threshold = 0.45
# Predict button
if st.button("Predict"):
prediction_proba = model.predict_proba(input_data)[0, 1]
prediction = (prediction_proba >= classification_threshold).astype(int)
result = "purchase" if prediction == 1 else "not purchase"
st.write(f"Based on the information provided, the customer is likely to {result}.")