| | import streamlit as st |
| | import pandas as pd |
| | from huggingface_hub import hf_hub_download |
| | import joblib |
| |
|
| | |
| | |
| | |
| | st.set_page_config( |
| | page_title="Travel Conversion AI", |
| | page_icon="βοΈ", |
| | layout="centered" |
| | ) |
| |
|
| | |
| | |
| | |
| | @st.cache_resource |
| | def load_model(): |
| | model_path = hf_hub_download( |
| | repo_id="muthukumar22/tourism-package-mod", |
| | filename="best_tourism_model_rf.joblib" |
| | ) |
| | return joblib.load(model_path) |
| |
|
| | try: |
| | model = load_model() |
| | except Exception as e: |
| | st.error(f"Error loading model: {e}") |
| | st.stop() |
| |
|
| | |
| | |
| | |
| | st.title("βοΈ Intelligent Travel Sales Predictor") |
| |
|
| | |
| | |
| | |
| | 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. |
| | --- |
| | """) |
| |
|
| | |
| | |
| | |
| | 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) |
| |
|
| | |
| | |
| | |
| | |
| | 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 |
| | }]) |
| |
|
| | |
| | |
| | |
| | st.markdown("---") |
| | if st.button("Analyze Customer Potential", type="primary", use_container_width=True): |
| | |
| | |
| | |
| | try: |
| | prediction_prob = model.predict_proba(input_data)[0][1] |
| | prediction_class = model.predict(input_data)[0] |
| | except AttributeError: |
| | |
| | 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: |
| | |
| | st.metric(label="Purchase Probability", value=f"{prediction_prob:.1%}") |
| |
|
| | with r_col2: |
| | |
| | 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) |
| |
|