File size: 5,157 Bytes
0a6e40c
 
 
 
 
1363867
 
0a6e40c
 
 
1363867
0a6e40c
 
 
 
 
 
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
 
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
 
 
1363867
 
0a6e40c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
1363867
0a6e40c
 
1363867
0a6e40c
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import streamlit as st
import pandas as pd
from huggingface_hub import hf_hub_download
import joblib

# Download and load the model from Hugging Face Hub.
# The model will be used for making predictions in the Streamlit app.
model_path = hf_hub_download(repo_id="Garg06/Tourism-Package-Model", filename="best_machine_failure_model_v1.joblib")
model = joblib.load(model_path)

# Set the title and description for the Streamlit web application.
st.title("Tourism Package Prediction App")
st.write("""
This application predicts whether a customer will purchase the newly introduced Wellness Tourism Package.
Please enter the customer details and interaction data below to get a prediction.
""")

# User input fields for customer details, organized under a header.
st.header("Customer Details")
# Numerical input for Age, with defined min/max values and a default.
age = st.number_input("Age", min_value=18, max_value=90, value=30)
# Dropdown for Type of Contact, with string options.
typeofcontact = st.selectbox("Type of Contact", options=['Company Invited', 'Self Inquiry'])
# Numerical input for City Tier.
citytier = st.number_input("City Tier (1, 2, or 3)", min_value=1, max_value=3, value=1)
# Dropdown for Occupation.
occupation = st.selectbox("Occupation", options=['Freelancer', 'Large Business', 'Salaried', 'Small Business', 'Unemployed'])
# Dropdown for Gender.
gender = st.selectbox("Gender", options=['Female', 'Male'])
# Numerical input for Number of Persons Visiting.
numberofpersonvisiting = st.number_input("Number of Persons Visiting", min_value=1, max_value=10, value=1)
# Numerical input for Preferred Property Star rating.
preferredpropertystar = st.number_input("Preferred Property Star (e.g., 3, 4, 5)", min_value=1, max_value=5, value=3)
# Dropdown for Marital Status.
maritalstatus = st.selectbox("Marital Status", options=['Divorced', 'Married', 'Single'])
# Numerical input for Number of Trips Annually.
numberoftrips = st.number_input("Number of Trips Annually", min_value=0, max_value=50, value=5)
# Dropdown for Passport, with custom display for 0/1.
passport = st.selectbox("Passport", options=[0, 1], format_func=lambda x: "Yes" if x == 1 else "No")
# Dropdown for Own Car, with custom display for 0/1.
owncar = st.selectbox("Own Car", options=[0, 1], format_func=lambda x: "Yes" if x == 1 else "No")
# Numerical input for Number of Children Visiting.
numberofchildrenvisiting = st.number_input("Number of Children Visiting (below age 5)", min_value=0, max_value=5, value=0)
# Dropdown for Designation.
designation = st.selectbox("Designation", options=['Director', 'Executive', 'Manager', 'Senior Executive', 'VP'])
# Numerical input for Monthly Income.
monthlyincome = st.number_input("Monthly Income", min_value=0.0, max_value=1000000.0, value=50000.0, step=100.0)

# User input fields for customer interaction data, organized under a header.
st.header("Customer Interaction Data")
# Numerical input for Pitch Satisfaction Score.
pitchsatisfactionscore = st.number_input("Pitch Satisfaction Score (1-5)", min_value=1, max_value=5, value=3)
# Dropdown for Product Pitched.
productpitched = st.selectbox("Product Pitched", options=['Basic', 'Deluxe', 'King', 'Standard', 'Super Deluxe'])
# Numerical input for Number of Follow-ups.
numberoffollowups = st.number_input("Number of Follow-ups", min_value=0, max_value=20, value=3)
# Numerical input for Duration of Pitch.
durationofpitch = st.number_input("Duration of Pitch (minutes)", min_value=0.0, max_value=60.0, value=15.0, step=0.5)


# Assemble the user input into a Pandas DataFrame.
# The column names must exactly match those expected by the trained model.
input_data = pd.DataFrame([{
    'Age': age,
    'TypeofContact': typeofcontact,
    'CityTier': citytier,
    'DurationOfPitch': durationofpitch,
    'Occupation': occupation,
    'Gender': gender,
    'NumberOfPersonVisiting': numberofpersonvisiting,
    'PreferredPropertyStar': preferredpropertystar,
    'MaritalStatus': maritalstatus,
    'NumberOfTrips': numberoftrips,
    'Passport': passport,
    'PitchSatisfactionScore': pitchsatisfactionscore,
    'OwnCar': owncar,
    'NumberOfChildrenVisiting': numberofchildrenvisiting,
    'Designation': designation,
    'MonthlyIncome': monthlyincome,
    'NumberOfFollowups': numberoffollowups,
    'ProductPitched': productpitched,
}])


# When the "Predict Purchase" button is clicked:
if st.button("Predict Purchase"):
    # Get prediction probabilities from the model.
    prediction_proba = model.predict_proba(input_data)[:, 1]
    # Define the classification threshold (as used during model evaluation).
    classification_threshold = 0.45
    # Convert probabilities to binary predictions based on the threshold.
    prediction = (prediction_proba >= classification_threshold).astype(int)[0]

    # Display the prediction result to the user.
    result = "Customer WILL purchase the Wellness Tourism Package" if prediction == 1 else "Customer will NOT purchase the Wellness Tourism Package"
    st.subheader("Prediction Result:")
    st.success(f"The model predicts: **{result}**")
    st.info(f"Probability of purchase: {prediction_proba[0]:.2f}")