saifhmb
added round function to value args in st.metric
797a43b unverified
# importing libraries
from datasets import load_dataset, load_dataset_builder
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, accuracy_score, precision_score, recall_score, classification_report
from transformers import Trainer, TrainingArguments
from skops import hub_utils
import pickle
from skops.card import Card, metadata_from_config
from pathlib import Path
from tempfile import mkdtemp, mkstemp
import streamlit as st
from PIL import Image
# Loading the dataset
dataset_name = "saifhmb/social-network-ads"
dataset = load_dataset(dataset_name, split = 'train')
dataset = pd.DataFrame(dataset)
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
# Spliting the datset into Training and Test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
# Feature Scaling
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# Training Logit Reg Model using the Training set
model = LogisticRegression()
model.fit(X_train, y_train)
# Predicting the Test result
y_pred = model.predict(X_test)
# Making the Confusion Matrix and evaluating performance
cm = confusion_matrix(y_pred, y_test, labels=model.classes_)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=model.classes_)
disp.plot()
plt.show()
acc = accuracy_score(y_test, y_pred)
ps = precision_score(y_test, y_pred)
rs = recall_score(y_test, y_pred)
# Pickling the model
pickle_out = open("model.pkl", "wb")
pickle.dump(model, pickle_out)
pickle_out.close()
# Loading the model to predict on the data
pickle_in = open('model.pkl', 'rb')
model = pickle.load(pickle_in)
def welcome():
return 'welcome all'
# defining the function which will make the prediction using the data which the user inputs
def prediction(Age, EstimatedSalary):
prediction = model.predict(sc.transform([[Age, EstimatedSalary]]))
print(prediction)
return prediction
# this is the main function in which we define our webpage
def main():
# giving the webpage a title
st.title("Customer Purchase Prediction ML App")
st.header("Model Description", divider = "gray")
multi = '''This is a logistic regression classifier trained on social network ads dataset to predict customer purchasing behavior
based on their Age and Estimated Salary.
For more details on the model please refer to the model card at https://huggingface.co/saifhmb/social-network-ads-logit-model
'''
st.markdown(multi)
st.header("Model Metrics", divider = "gray")
st.metric(label = "Accuracy", value = round(acc, 2))
st.metric(label = "Precision", value = round(ps, 2))
st.metric(label = "Recall", value = round(rs, 2))
st.markdown("To determine whether a customer will make a purchase, please **enter** the Age and Estimated Salary:")
Age = st.number_input("Age")
EstimatedSalary = st.number_input("Estimated Salary")
result = ""
if st.button("Predict"):
result = prediction(Age, EstimatedSalary)
if result == 0:
st.success("The output is {}".format(result) + " and thus the customer is NOT likely to complete a purchase")
if result == 1:
st.success("The output is {}".format(result) + " and thus the customer is likely to complete a purchase")
if __name__=='__main__':
main()