Spaces:
Sleeping
Sleeping
File size: 4,197 Bytes
33ff905 252bb11 33ff905 0d49c8b 33ff905 252bb11 33ff905 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
import streamlit as st
import pandas as pd
import joblib
from huggingface_hub import hf_hub_download
import os
from modelConnector import ModelConnector
# ===========================
# LOAD MODEL & DATASET
# ===========================
st.title("π Is Click Predictor")
# Download and load the trained model from Hugging Face
model_path = hf_hub_download(repo_id="chagu13/is_click", repo_type="space", filename="models/rf_model.pkl")
rf_model = joblib.load(model_path)
st.success("β
Model Loaded Successfully!")
# ===========================
# LOAD DATA FROM HUGGING FACE
# ===========================
st.sidebar.header("Dataset Selection")
# # Download required dataset files
# X_test_path = hf_hub_download(repo_id="taimax13/is_click_data", filename="X_test_1st(1).csv")
# y_test_path = hf_hub_download(repo_id="taimax13/is_click_data", filename="y_test_1st.csv")
# train_data_path = hf_hub_download(repo_id="taimax13/is_click_data", filename="train_dataset_full - train_dataset_full (1).csv")
base_dir = os.path.dirname(os.path.abspath(__file__)) # Get the directory of app.py
X_test_path = os.path.join(base_dir, "data", "X_test_1st.csv")
y_test_path = os.path.join(base_dir, "data", "y_test_1st (1).csv")
train_data_path = os.path.join(base_dir, "data", "train_dataset_full - train_dataset_full.csv")
# Load datasets
X_test = pd.read_csv(X_test_path)
y_test = pd.read_csv(y_test_path, header=None) # Ensure labels match test dataset index
train_data = pd.read_csv(train_data_path)
st.info(f"β
Loaded datasets: **Train: {len(train_data)} rows**, **Test: {len(X_test)} rows**")
# Initialize Model Connector
model_connector = ModelConnector()
st.title("π Is Click Predictor - Train, Retrain, and Predict")
# ===========================
# CHECK MODEL STATUS
# ===========================
if model_connector.model:
st.success("β
Model Loaded Successfully!")
else:
st.warning("β No model found. Please train one first.")
# ===========================
# TRAIN MODEL IF NOT FOUND
# ===========================
if st.button("π Train Model"):
st.info("π Training model...")
message = model_connector.train_model()
st.success(message)
# ===========================
# RETRAIN MODEL
# ===========================
if st.button("π Retrain Model"):
st.info("π Retraining model with latest data...")
message = model_connector.retrain_model()
st.success(message)
# ===========================
# SELECT A DATA SAMPLE
# ===========================
st.sidebar.header("Select a Test Sample for Prediction")
# Merge X_test with y_test for selection (without labels affecting prediction)
X_test["actual_click"] = y_test.values
# Allow user to pick a row
selected_index = st.sidebar.selectbox("Choose a test sample index", X_test.index)
selected_row = X_test.loc[selected_index].drop("actual_click") # Exclude actual label
# Display selected row
st.write("### Selected Data Sample:")
st.dataframe(selected_row.to_frame().T) # Display as a table
# ===========================
# MAKE PREDICTION & EXPORT CSV
# ===========================
if st.button("Predict Click"):
# Convert selected row to DataFrame for model input
input_data = selected_row.to_frame().T
# Make prediction
prediction = rf_model.predict(input_data)[0]
# Add prediction to DataFrame
input_data["is_click_predicted"] = prediction
# Save prediction as CSV
csv_filename = "prediction_result.csv"
input_data.to_csv(csv_filename, index=False)
# Display Prediction Result
st.subheader("Prediction Result")
if prediction == 1:
st.success("π’ The model predicts: **User WILL CLICK on the ad!**")
else:
st.warning("π΄ The model predicts: **User WILL NOT CLICK on the ad.**")
# Provide download button for prediction result
st.download_button(
label="π₯ Download Prediction Result",
data=input_data.to_csv(index=False).encode("utf-8"),
file_name="prediction_result.csv",
mime="text/csv",
)
st.markdown("---")
st.info("Select a test row from the **left panel**, click **'Predict Click'**, and download the prediction result as a CSV.")
|