AlbieCofie's picture
Upload 6 files
deb6a65
import gradio as gr
import pandas as pd
import pickle
# Load the model and encoder and scaler
model = pickle.load(open("model.pkl", "rb"))
encoder = pickle.load(open("encoder.pkl", "rb"))
scaler = pickle.load(open("scaler.pkl", "rb"))
# Load the data
data = pd.read_csv('data.csv')
# Define the input and output interfaces for the Gradio app
def create_gradio_inputs(data):
input_components = []
for column in data.columns:
if data[column].dtype == 'object' and len(data[column].unique()) > 3:
input_components.append(gr.Dropdown(choices=list(data[column].unique()), label=column))
elif data[column].dtype == 'object' and len(data[column].unique()) <= 3:
input_components.append(gr.Radio(choices=list(data[column].unique()), label=column))
elif data[column].dtype in ['int64', 'float64']:
if data[column].min() == 1:
input_components.append(gr.Slider(minimum=1, maximum=data[column].max(), step=1, label=column))
else:
input_components.append(gr.Slider(maximum=data[column].max(), step=0.5, label=column))
return input_components
input_components = create_gradio_inputs(data)
output_components = [
gr.Label(label="Churn Prediction"),
]
# Convert the input values to a pandas DataFrame with the appropriate column names
def input_df_creator(gender, SeniorCitizen, Partner, Dependents, tenure,
PhoneService, InternetService, OnlineBackup, TechSupport,
Contract, PaperlessBilling, PaymentMethod, MonthlyCharges,
TotalCharges, StreamingService, SecurityService):
input_data = pd.DataFrame({
"gender": [gender],
"SeniorCitizen": [SeniorCitizen],
"Partner": [Partner],
"Dependents": [Dependents],
"tenure": [int(tenure)],
"PhoneService": [PhoneService],
"InternetService": [InternetService],
"OnlineBackup": [OnlineBackup],
"TechSupport": [TechSupport],
"Contract": [Contract],
"PaperlessBilling": [PaperlessBilling],
"PaymentMethod": [PaymentMethod],
"StreamingService": [StreamingService],
"SecurityService": [SecurityService],
"MonthlyCharges": [float(MonthlyCharges)],
"TotalCharges": [float(TotalCharges)],
})
return input_data
# Define the function to be called when the Gradio app is run
def predict_churn(gender, SeniorCitizen, Partner, Dependents, tenure,
PhoneService, InternetService, OnlineBackup, TechSupport,
Contract, PaperlessBilling, PaymentMethod, MonthlyCharges,
TotalCharges, StreamingService, SecurityService):
input_df = input_df_creator(gender, SeniorCitizen, Partner, Dependents, tenure,
PhoneService, InternetService, OnlineBackup, TechSupport,
Contract, PaperlessBilling, PaymentMethod, MonthlyCharges,
TotalCharges, StreamingService, SecurityService)
# Encode categorical variables
cat_cols = data.select_dtypes(include=['object']).columns
cat_encoded = encoder.transform(input_df[cat_cols])
# Scale numerical variables
num_cols = data.select_dtypes(include=['int64', 'float64']).columns
num_scaled = scaler.transform(input_df[num_cols])
# joining encoded and scaled columns back together
processed_df = pd.concat([num_scaled, cat_encoded], axis=1)
# Make prediction
prediction = model.predict(processed_df)
return "Churn" if prediction[0] == 1 else "No Churn"
# Launch the Gradio app
iface = gr.Interface(predict_churn, inputs=input_components, outputs=output_components)
iface.launch(inbrowser= True, show_error= True)