|
|
import pandas as pd |
|
|
import gradio as gr |
|
|
from sklearn.model_selection import train_test_split |
|
|
from sklearn.preprocessing import LabelEncoder |
|
|
from sklearn.ensemble import AdaBoostClassifier |
|
|
from PIL import Image |
|
|
import pickle |
|
|
|
|
|
df = pd.read_csv("Telco_Customer.csv") |
|
|
|
|
|
|
|
|
X = df.drop("Churn", axis=1) |
|
|
y = df["Churn"] |
|
|
|
|
|
|
|
|
categorical_vars = X.select_dtypes(include="object").columns.tolist() |
|
|
encoders = {} |
|
|
for var in categorical_vars: |
|
|
encoder = LabelEncoder() |
|
|
X[var] = encoder.fit_transform(X[var]) |
|
|
encoders[var] = encoder |
|
|
|
|
|
|
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
|
|
|
|
|
|
|
|
adaboost = AdaBoostClassifier() |
|
|
adaboost.fit(X_train, y_train) |
|
|
|
|
|
|
|
|
model_filename = "adaboost_model.pkl" |
|
|
with open(model_filename, "wb") as file: |
|
|
pickle.dump(adaboost, file) |
|
|
|
|
|
|
|
|
def predict_churn(*data): |
|
|
|
|
|
with open(model_filename, "rb") as file: |
|
|
loaded_model = pickle.load(file) |
|
|
|
|
|
|
|
|
encoded_data = [] |
|
|
for i, var in enumerate(categorical_vars): |
|
|
encoder = encoders[var] |
|
|
encoded_value = encoder.transform([data[i]])[0] |
|
|
encoded_data.append(encoded_value) |
|
|
|
|
|
|
|
|
encoded_df = pd.DataFrame([encoded_data], columns=X.columns) |
|
|
prediction = loaded_model.predict(encoded_df) |
|
|
|
|
|
|
|
|
input_data = pd.DataFrame([data], columns=X.columns) |
|
|
input_data["Churn Prediction"] = prediction[0] |
|
|
input_data.to_csv("history.csv", index=False) |
|
|
|
|
|
return "Churn Prediction: " + prediction[0] |
|
|
|
|
|
|
|
|
dropdown_choices = {} |
|
|
for var in categorical_vars: |
|
|
dropdown_choices[var] = list(df[var].unique()) |
|
|
|
|
|
|
|
|
|
|
|
input_interfaces = [gr.inputs.Dropdown(choices=dropdown_choices[col], label=col) for col in X.columns] |
|
|
output_interface = gr.outputs.Textbox() |
|
|
|
|
|
|
|
|
iface = gr.Interface(fn=predict_churn, inputs=input_interfaces, outputs=output_interface, title = "Customer Churn Prediction App") |
|
|
|
|
|
|
|
|
|
|
|
iface.launch(share =True) |