MyApp / app.py
HOLYBOY's picture
ffsdfsd
eac22b0
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
# Load the dataset
df = pd.read_csv("Telco_Customer.csv")
# Separate the features and target variable
X = df.drop("Churn", axis=1)
y = df["Churn"]
# Encode the categorical variables
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
# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Define and train the AdaBoost classifier
adaboost = AdaBoostClassifier()
adaboost.fit(X_train, y_train)
# Save the trained model using pickle
model_filename = "adaboost_model.pkl"
with open(model_filename, "wb") as file:
pickle.dump(adaboost, file)
# Define prediction function using the loaded model
def predict_churn(*data):
# Load the saved model
with open(model_filename, "rb") as file:
loaded_model = pickle.load(file)
# Encode the inputs
encoded_data = []
for i, var in enumerate(categorical_vars):
encoder = encoders[var]
encoded_value = encoder.transform([data[i]])[0]
encoded_data.append(encoded_value)
# Make predictions on the encoded data
encoded_df = pd.DataFrame([encoded_data], columns=X.columns)
prediction = loaded_model.predict(encoded_df)
# Save inputs and output to CSV
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]
# Create the dropdown choices using raw data
dropdown_choices = {}
for var in categorical_vars:
dropdown_choices[var] = list(df[var].unique())
# Create the input interfaces using Gradio
input_interfaces = [gr.inputs.Dropdown(choices=dropdown_choices[col], label=col) for col in X.columns]
output_interface = gr.outputs.Textbox()
# Create the Gradio interface
iface = gr.Interface(fn=predict_churn, inputs=input_interfaces, outputs=output_interface, title = "Customer Churn Prediction App")
# Run the Gradio interface
iface.launch(share =True)