|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0) |
|
|
|
|
|
sc = StandardScaler() |
|
X_train = sc.fit_transform(X_train) |
|
X_test = sc.transform(X_test) |
|
|
|
|
|
model = LogisticRegression() |
|
model.fit(X_train, y_train) |
|
|
|
|
|
y_pred = model.predict(X_test) |
|
|
|
|
|
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) |
|
|
|
|
|
pickle_out = open("model.pkl", "wb") |
|
pickle.dump(model, pickle_out) |
|
pickle_out.close() |
|
|
|
|
|
pickle_in = open('model.pkl', 'rb') |
|
model = pickle.load(pickle_in) |
|
|
|
def welcome(): |
|
return 'welcome all' |
|
|
|
|
|
def prediction(Age, EstimatedSalary): |
|
prediction = model.predict(sc.transform([[Age, EstimatedSalary]])) |
|
print(prediction) |
|
return prediction |
|
|
|
|
|
def main(): |
|
|
|
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() |
|
|