Spaces:
Sleeping
Sleeping
| 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= "rojasnath/tourism-package-model", filename="best_model_v1.joblib") | |
| #Load the model | |
| model = joblib.load(model_path) | |
| #Streamlit UI for Customer Purchase Prediction | |
| st.title("Tourism Package Purchase Prediction App") | |
| st.write("Tourism Package Purchase Prediction App is an internal tool for Visit With Us staff that predicts whether a customer will purchase the new Wellness Tourism Package based on their details.") | |
| st.write("Kindly enter the customer details to check whether they are likely to purchase the package.") | |
| #Collect user input | |
| Age= st.number_input("Age (customer's age in years)", min_value=18, max_value=120, value=30) | |
| TypeofContact= st.selectbox("How did the customer contact?", ["Company Invited", "Self Inquiry"]) | |
| CityTier= st.selectbox("Customer's City Tier", ["Tier 1", "Tier 2", "Tier 3"]) | |
| Occupation= st.selectbox("Customer's Occupation", ["Salaried", "Freelancer"]) | |
| Gender= st.selectbox("Gender", ["Male", "Female"]) | |
| NumberOfPersonVisiting= st.number_input("Total number of adult visitors", min_value=1, max_value=20, value=2) | |
| PreferredPropertyStar= st.number_input("Preferred hotel rating", min_value=3, max_value=5, value=4) | |
| MaritalStatus= st.selectbox("Marital status", ["Single", "Married", "Divorced"]) | |
| NumberOfTrips= st.number_input("Average number of trips in a year", min_value=0, max_value=15, value=2) | |
| Passport= st.selectbox("Valid passport holder?", ["Yes", "No"]) | |
| OwnCar= st.selectbox("Is customer a car owner?", ["Yes", "No"]) | |
| NumberOfChildrenVisiting= st.number_input("Number of children below 5 years age", min_value=0, max_value=10, value=2) | |
| Designation= st.selectbox("Customer's designation in their current organization", ["Executive", "Manager", "Senior Manager", "AVP", "VP"]) | |
| MonthlyIncome= st.number_input("Gross monthly income of the customer", min_value=5000, max_value=50000, value=15000) | |
| PitchSatisfactionScore= st.number_input("Customer Satisfaction Score (of the sales pitch)", min_value=1, max_value=5, value=5) | |
| ProductPitched= st.selectbox("Type of product pitched to the customer",["Basic", "Standard", "Deluxe", "Super Deluxe", "King"]) | |
| NumberOfFollowups= st.number_input("Total number of follow-ups by the salesperson", min_value=0, max_value=5, value=2) | |
| DurationOfPitch= st.number_input("Duration of the sales pitch (in mins)", min_value=5, max_value=50, value=15) | |
| #Convert categorical inputs to match model training | |
| input_data = pd.DataFrame([{ | |
| 'TypeofContact': TypeofContact, | |
| 'CityTier': CityTier, | |
| 'Occupation': Occupation, | |
| 'Gender': Gender, | |
| 'MaritalStatus': MaritalStatus, | |
| 'Designation': Designation, | |
| 'ProductPitched': ProductPitched | |
| }]) | |
| #Set the classification threshold | |
| classification_threshold = 0.45 | |
| #Make prediction | |
| 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}.") | |