Customer_Churn / app.py
NewtonKimathi's picture
Customer Churn App
59e08fd
raw
history blame
No virus
3.5 kB
# IMPORT LIBRARIES
import gradio as gr
import numpy as np
import pandas as pd
import pickle
import xgboost as xgb
from xgboost import XGBClassifier
# Function to load ML toolkit
def load_ml_toolkit(file_path):
with open(file_path, "rb") as file:
loaded_toolkit = pickle.load(file)
return loaded_toolkit
# Importing the toolkit
loaded_toolkit = load_ml_toolkit(r"export/App_toolkit.pkl")
encoder = loaded_toolkit["encoder"]
scaler = loaded_toolkit["scaler"]
# Import the model
model = XGBClassifier()
model.load_model(r"xgb_model.json")
#Colmuns to work with
input_cols = ["tenure", "montant", "frequence_rech", "arpu_segment", "frequence", "data_volume", "regularity", "freq_top_pack"]
columns_to_scale = ["montant", "frequence_rech", "arpu_segment", "frequence", "data_volume", "regularity", "freq_top_pack"]
categoricals = ["tenure"]
# Function to process inputs and return prediction
def process_and_predict(*args, encoder=encoder, scaler=scaler, model=model):
# Convert inputs into a DataFrame
input_data = pd.DataFrame([args], columns=input_cols)
# Encode the categorical column
input_data["tenure"] = encoder.transform(input_data["tenure"])
# Scale the numeric columns
input_data[columns_to_scale] = scaler.transform(input_data[columns_to_scale])
# Making the prediction
model_output = model.predict(input_data)
return {"Prediction: CHURN": float(model_output[0]), "Prediction: STAY": 1-float(model_output[0])}
#App Interface
with gr.Blocks() as turn_on_the_gradio:
gr.Markdown("# πŸ“ž EXPRESSO TELECOM CUSTOMER CHURN ☎️")
gr.Markdown('''
## WELCOME CHERISHED USERπŸ‘‹
### PLEASE GO AHEAD AND MAKE A PREDICTION πŸ™‚''')
# Receiving Inputs
gr.Markdown("**SECTION ONE**")
gr.Markdown("**CUSTOMER NETWORK ACTTIVITIES**")
with gr.Row():
montant = gr.Slider(label="Top-up amount", minimum=20, step=1, interactive=True, value=1, maximum= 500000)
data_volume = gr.Slider(label="Number of connections", minimum=0, step=1, interactive=True, value=1, maximum= 2000000)
with gr.Row():
frequence_rech = gr.Slider(label="Recharge Frequency", minimum=1, step=1, interactive=True, value=1, maximum=220)
freq_top_pack = gr.Slider(label="Top Package Activation Frequency", minimum=1, step=1, interactive=True, value=1, maximum=1050)
regularity = gr.Slider(label="Regularity (out of 90 days)", minimum=1, step=1, interactive=True, value=1, maximum=90)
tenure = gr.Dropdown(label="Tenure (time on the network)", choices=["D 3-6 month", "E 6-9 month", "F 9-12 month", "G 12-15 month", "H 15-18 month", "I 18-21 month", "J 21-24 month", "K > 24 month"], value="K > 24 month")
gr.Markdown("**SECTION 2**")
gr.Markdown("**CUSTOMER INCOME DETAILS**")
with gr.Row():
arpu_segment = gr.Slider(label="Income over the last 90 days", step=1, maximum=287000, interactive=True)
frequence = gr.Slider(label="Number of times the customer has made an income", step=1, minimum=1, maximum=91, interactive=True)
# Output Prediction
output = gr.Label("...")
submit_button = gr.Button("Submit")
submit_button.click(fn = process_and_predict,
outputs = output,
inputs=[tenure, montant, frequence_rech, arpu_segment, frequence, data_volume, regularity, freq_top_pack])
turn_on_the_gradio.launch(inbrowser= True)