Spaces:
Sleeping
Sleeping
File size: 7,170 Bytes
ce55ba8 fd6b0af ce55ba8 f9a5f05 ce55ba8 f9a5f05 |
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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
import gradio as gr
import pandas as pd
import numpy as np
import joblib, os
gr.load("models/iiiorg/piiranha-v1-detect-personal-information")
script_dir = os.path.dirname(os.path.abspath(__file__))
pipeline_path = os.path.join(script_dir, 'toolkit', 'pipeline.joblib')
model_path = os.path.join(script_dir, 'toolkit', 'Random Forest Classifier.joblib')
# Load transformation pipeline and model
pipeline = joblib.load(pipeline_path)
model = joblib.load(model_path)
# Create a function to calculate TotalCharges
def calculate_total_charges(tenure, monthly_charges):
return tenure * monthly_charges
# Create a function that applies the ML pipeline and makes predictions
def predict(SeniorCitizen, Partner, Dependents, tenure,
InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, TechSupport,
StreamingTV, StreamingMovies, Contract, PaperlessBilling, PaymentMethod,
MonthlyCharges):
# Calculate TotalCharges
TotalCharges = calculate_total_charges(tenure, MonthlyCharges)
# Create a dataframe with the input data
input_df = pd.DataFrame({
'SeniorCitizen': [SeniorCitizen],
'Partner': [Partner],
'Dependents': [Dependents],
'tenure': [tenure],
'InternetService': [InternetService],
'OnlineSecurity': [OnlineSecurity],
'OnlineBackup': [OnlineBackup],
'DeviceProtection': [DeviceProtection],
'TechSupport': [TechSupport],
'StreamingTV': [StreamingTV],
'StreamingMovies': [StreamingMovies],
'Contract': [Contract],
'PaperlessBilling': [PaperlessBilling],
'PaymentMethod': [PaymentMethod],
'MonthlyCharges': [MonthlyCharges],
'TotalCharges': [TotalCharges]
})
# Selecting categorical and numerical columns separately
cat_cols = [col for col in input_df.columns if input_df[col].dtype == 'object']
num_cols = [col for col in input_df.columns if input_df[col].dtype != 'object']
X_processed = pipeline.transform(input_df)
# Extracting feature names for categorical columns after one-hot encoding
cat_encoder = pipeline.named_steps['preprocessor'].named_transformers_['cat'].named_steps['onehot']
cat_feature_names = cat_encoder.get_feature_names_out(cat_cols)
# Concatenating numerical and categorical feature names
feature_names = num_cols + list(cat_feature_names)
# Convert X_processed to DataFrame
final_df = pd.DataFrame(X_processed, columns=feature_names)
# Extract the first three columns and remaining columns, then merge
first_three_columns = final_df.iloc[:, :3]
remaining_columns = final_df.iloc[:, 3:]
final_df = pd.concat([remaining_columns, first_three_columns], axis=1)
# Make predictions using the model
prediction_probs = model.predict_proba(final_df)[0]
prediction_label = {
"Prediction: CHURN 🔴": prediction_probs[1],
"Prediction: STAY ✅": prediction_probs[0]
}
return prediction_label
input_interface = []
with gr.Blocks(theme=gr.themes.Soft()) as app:
Title = gr.Label('Customer Churn Prediction App')
with gr.Row():
Title
with gr.Row():
gr.Markdown("This app predicts likelihood of a customer to leave or stay with the company")
with gr.Row():
with gr.Column():
input_interface_column_1 = [
gr.components.Radio(['Yes', 'No'], label="Are you a Seniorcitizen?"),
gr.components.Radio(['Yes', 'No'], label='Do you have Partner?'),
gr.components.Radio(['No', 'Yes'], label='Do you have any Dependents?'),
gr.components.Slider(label='Enter lenghth of Tenure in Months', minimum=1, maximum=73, step=1),
gr.components.Radio(['DSL', 'Fiber optic', 'No Internet'], label='What is your Internet Service?'),
gr.components.Radio(['No', 'Yes'], label='Do you have Online Security?'),
gr.components.Radio(['No', 'Yes'], label='Do you have Online Backup?'),
gr.components.Radio(['No', 'Yes'], label='Do you have Device Protection?')
]
with gr.Column():
input_interface_column_2 = [
gr.components.Radio(['No', 'Yes'], label='Do you have Tech Support?'),
gr.components.Radio(['No', 'Yes'], label='Do you have Streaming TV?'),
gr.components.Radio(['No', 'Yes'], label='Do you have Streaming Movies?'),
gr.components.Radio(['Month-to-month', 'One year', 'Two year'], label='What is your Contract Type?'),
gr.components.Radio(['Yes', 'No'], label='Do you prefer Paperless Billing?'),
gr.components.Radio(['Electronic check', 'Mailed check', 'Bank transfer (automatic)', 'Credit card (automatic)'], label='Which PaymentMethod do you prefer?'),
gr.components.Slider(label="Enter monthly charges", minimum=18.40, maximum=118.65)
]
with gr.Row():
input_interface.extend(input_interface_column_1)
input_interface.extend(input_interface_column_2)
with gr.Row():
predict_btn = gr.Button('Predict')
output_interface = gr.Label(label="churn")
with gr.Accordion("Open for information on inputs", open=False):
gr.Markdown("""This app receives the following as inputs and processes them to return the prediction on whether a customer, will churn or not.
- SeniorCitizen: Whether a customer is a senior citizen or not
- Partner: Whether the customer has a partner or not (Yes, No)
- Dependents: Whether the customer has dependents or not (Yes, No)
- Tenure: Number of months the customer has stayed with the company
- InternetService: Customer's internet service provider (DSL, Fiber Optic, No)
- OnlineSecurity: Whether the customer has online security or not (Yes, No, No Internet)
- OnlineBackup: Whether the customer has online backup or not (Yes, No, No Internet)
- DeviceProtection: Whether the customer has device protection or not (Yes, No, No internet service)
- TechSupport: Whether the customer has tech support or not (Yes, No, No internet)
- StreamingTV: Whether the customer has streaming TV or not (Yes, No, No internet service)
- StreamingMovies: Whether the customer has streaming movies or not (Yes, No, No Internet service)
- Contract: The contract term of the customer (Month-to-Month, One year, Two year)
- PaperlessBilling: Whether the customer has paperless billing or not (Yes, No)
- Payment Method: The customer's payment method (Electronic check, mailed check, Bank transfer(automatic), Credit card(automatic))
- MonthlyCharges: The amount charged to the customer monthly
""")
predict_btn.click(fn=predict, inputs=input_interface, outputs=output_interface)
app.launch(share=True)
|