Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| from huggingface_hub import hf_hub_download | |
| import joblib | |
| # Download and load the model | |
| model_path = hf_hub_download(repo_id="asvravi/asv-tourism-package", filename="best_toursim_package_model_v1.joblib") | |
| model = joblib.load(model_path) | |
| # Streamlit UI for Tourism Package Prediction | |
| st.title("Tourism Package Prediction") | |
| st.write(""" | |
| This application predicts the likelihood of a customer buying the new Tourism Package. | |
| Please enter the data below to get a prediction. | |
| """) | |
| # User input | |
| st.header("Section 1 β Basic Information") | |
| # ---------- Row 1 ---------- | |
| col1, col2, col3, col7 = st.columns(4) | |
| with col1: | |
| age = st.number_input( | |
| "Age", | |
| min_value=1, | |
| max_value=150, | |
| value=25 | |
| ) | |
| with col2: | |
| # Marital status alphabetically | |
| marital_status_options = sorted(["Married", "Single", "Divorced", "Unmarried"]) | |
| marital_status = st.selectbox( | |
| "Marital Status", | |
| marital_status_options, | |
| index=0 | |
| ) | |
| with col3: | |
| gender = st.radio( | |
| "Gender", | |
| ["Male", "Female"], | |
| index=0 | |
| ) | |
| with col7: | |
| own_car = st.selectbox( | |
| "Own a Car", | |
| ["Yes", "No"], | |
| index=0 | |
| ) | |
| # ---------- Row 2 ---------- | |
| col4, col5, col6 = st.columns(3) | |
| with col4: | |
| city_tier = st.selectbox( | |
| "City Tier", | |
| [1, 2, 3], | |
| index=0 | |
| ) | |
| with col5: | |
| total_family = st.number_input( | |
| "Total Family Members", | |
| min_value=1, | |
| max_value=50, | |
| value=1, | |
| step=1 | |
| ) | |
| with col6: | |
| children = st.number_input( | |
| "No. of Children (age > 5)", | |
| min_value=0, | |
| max_value=20, | |
| value=0, | |
| step=1 | |
| ) | |
| st.header("Section 2 β Professional Details") | |
| # ---------- Row 1 ---------- | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| occupation_options = sorted(["Free Lancer", "Salaried", "Large Business", "Small Business"]) | |
| occupation = st.selectbox( | |
| "Occupation", | |
| occupation_options, | |
| index=0 | |
| ) | |
| with col2: | |
| designation_options = sorted(["AVP", "Manager", "Senior Manager", "Executive", "VP"]) | |
| designation = st.selectbox( | |
| "Designation", | |
| designation_options, | |
| index=0 | |
| ) | |
| with col3: | |
| monthly_salary = st.number_input( | |
| "Monthly Salary", | |
| min_value=1000, | |
| max_value=100000, | |
| value=1000, | |
| step=100 | |
| ) | |
| st.header("Section 3 β Travel Preferences") | |
| # ---------- Row 1 ---------- | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| property_star = st.selectbox( | |
| "Preferred Property Star", | |
| [3, 4, 5], | |
| index=0 | |
| ) | |
| with col2: | |
| trips_per_year = st.number_input( | |
| "Number of Trips per Year", | |
| min_value=1, | |
| max_value=50, | |
| value=1, | |
| step=1 | |
| ) | |
| with col3: | |
| passport = st.selectbox( | |
| "Passport", | |
| ["Yes", "No"], | |
| index=0 | |
| ) | |
| st.header("Section 4 β Sales Interaction Details") | |
| # ---------- Row 1 ---------- | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| type_of_contact = st.selectbox( | |
| "Type of Contact", | |
| ["Company Invited", "Self Enquiry"], | |
| index=0 | |
| ) | |
| with col2: | |
| product_pitched = st.selectbox( | |
| "Product Pitched", | |
| ["Basic", "Deluxe", "King", "Standard", "Super Deluxe"], | |
| index=0 | |
| ) | |
| with col3: | |
| pitch_duration = st.number_input( | |
| "Duration of Pitch (minutes)", | |
| min_value=1, | |
| max_value=150, | |
| value=1, | |
| step=1 | |
| ) | |
| # ---------- Row 2 ---------- | |
| col4, col5, col6 = st.columns(3) | |
| with col4: | |
| followups = st.number_input( | |
| "Number of Follow-ups", | |
| min_value=1, | |
| max_value=10, | |
| value=1, | |
| step=1 | |
| ) | |
| with col5: | |
| pitch_satisfaction = st.selectbox( | |
| "Pitch Satisfaction Score", | |
| [1, 2, 3, 4, 5], | |
| index=0 | |
| ) | |
| own_car = 1 if own_car == "Yes" else 0 | |
| passport = 1 if passport == "Yes" else 0 | |
| # Assemble input into DataFrame | |
| input_data = pd.DataFrame([{ | |
| 'Age': age, | |
| 'DurationOfPitch': pitch_duration, | |
| 'NumberOfFollowups': followups, | |
| 'PitchSatisfactionScore': pitch_satisfaction, | |
| 'NumberOfPersonVisiting': total_family, | |
| 'PreferredPropertyStar': property_star, | |
| 'NumberOfTrips': trips_per_year, | |
| 'Passport': passport, | |
| 'OwnCar': own_car, | |
| 'NumberOfChildrenVisiting': children, | |
| 'MonthlyIncome': monthly_salary, | |
| 'CityTier': city_tier, | |
| 'TypeofContact': type_of_contact, | |
| 'Occupation': occupation, | |
| 'Gender': gender, | |
| 'ProductPitched': product_pitched, | |
| 'MaritalStatus': marital_status, | |
| 'Designation': designation | |
| }]) | |
| 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 = "likely to buy" if prediction == 1 else "not likely to buy" | |
| st.subheader("Prediction Result") | |
| st.markdown( | |
| f"Based on the information provided, the customer is **{result}** the new tourism package." | |
| ) | |