Spaces:
Runtime error
Runtime error
import os | |
import sys | |
from random import randint | |
import time | |
import uuid | |
import argparse | |
sys.path.append(os.path.abspath("../supv")) | |
from matumizi.util import * | |
from mcclf import * | |
import streamlit as st | |
def genVisitHistory(numUsers, convRate, label): | |
for i in range(numUsers): | |
userID = genID(12) | |
userSess = [] | |
userSess.append(userID) | |
conv = randint(0, 100) | |
if (conv < convRate): | |
#converted | |
if (label): | |
if (randint(0,100) < 90): | |
userSess.append("T") | |
else: | |
userSess.append("F") | |
numSession = randint(2, 20) | |
for j in range(numSession): | |
sess = randint(0, 100) | |
if (sess <= 15): | |
elapsed = "H" | |
elif (sess > 15 and sess <= 40): | |
elapsed = "M" | |
else: | |
elapsed = "L" | |
sess = randint(0, 100) | |
if (sess <= 15): | |
duration = "L" | |
elif (sess > 15 and sess <= 40): | |
duration = "M" | |
else: | |
duration = "H" | |
sessSummary = elapsed + duration | |
userSess.append(sessSummary) | |
else: | |
#not converted | |
if (label): | |
if (randint(0,100) < 90): | |
userSess.append("F") | |
else: | |
userSess.append("T") | |
numSession = randint(2, 12) | |
for j in range(numSession): | |
sess = randint(0, 100) | |
if (sess <= 20): | |
elapsed = "L" | |
elif (sess > 20 and sess <= 45): | |
elapsed = "M" | |
else: | |
elapsed = "H" | |
sess = randint(0, 100) | |
if (sess <= 20): | |
duration = "H" | |
elif (sess > 20 and sess <= 45): | |
duration = "M" | |
else: | |
duration = "L" | |
sessSummary = elapsed + duration | |
userSess.append(sessSummary) | |
st.write(",".join(userSess)) | |
def main(): | |
st.set_page_config(page_title="Customer Conversion Prediction", page_icon=":guardsman:", layout="wide") | |
st.title("Customer Conversion Prediction") | |
# # Add sidebar | |
# st.sidebar.title("Navigation") | |
# app_mode = st.sidebar.selectbox("Choose the app mode", | |
# ["Instructions", "Generate User Visit History", "Train Model", "Predict Conversion"]) | |
# Add sidebar | |
st.sidebar.title("Navigation") | |
app_mode = st.sidebar.selectbox("Choose the App Mode", | |
["Instructions", "Generate User Visit History", "Predict Conversion"]) | |
if app_mode == "Instructions": | |
st.write("Welcome to the Markov Chain Classifier app!") | |
# st.write("This app allows you to generate user visit history, train a Markov Chain Classifier model, and predict conversion.") | |
st.write("This app allows you to generate user visit history, train a Markov Chain Classifier model, and predict conversion.") | |
st.write("To get started, use the sidebar to navigate to the desired functionality.") | |
st.write("1. **Generate User Visit History**: Select the number of users and conversion rate, and click the 'Generate' button to generate user visit history.") | |
# st.write("2. **Train Model**: Upload an ML config file using the file uploader, and click the 'Train' button to train the Markov Chain Classifier model.") | |
st.write("2. **Predict Conversion**: Upload an ML config file using the file uploader, and click the 'Predict' button to make predictions with the trained model.") | |
elif app_mode == "Generate User Visit History": | |
st.subheader("Generate User Visit History") | |
num_users = st.number_input("Number of users", min_value=1, max_value=10000, value=100, step=1) | |
conv_rate = st.slider("Conversion rate", min_value=0, max_value=100, value=10, step=1) | |
add_label = st.checkbox("Add label", value=False) | |
if st.button("Generate"): | |
genVisitHistory(num_users, conv_rate, add_label) | |
# elif app_mode == "Train Model": | |
# st.subheader("Train Model") | |
# mlf_path = st.file_uploader("Upload ML config file") | |
# if st.button("Train"): | |
# if mlf_path is not None: | |
# model = MarkovChainClassifier(mlf_path) | |
# model.train() | |
elif app_mode == "Predict Conversion": | |
st.subheader("Predict Conversion") | |
# Create an instance of MarkovChainClassifier with the ML config file | |
model = MarkovChainClassifier("mcclf_cc.properties") | |
# Get user input for userID | |
user_id = st.text_input("Enter User ID") | |
# Check if the "Predict" button was clicked | |
if st.button("Predict"): | |
# Call the predict method of the MarkovChainClassifier instance | |
pred = model.predict() | |
if pred == 'T': | |
st.write(f"UserID: {user_id}, Prediction: Visitor is likely to convert into a customer.") | |
else: | |
st.write(f"UserID: {user_id}, Prediction: Visitor is unlikely to convert into a customer.") | |
# st.subheader("Predict Conversion") | |
# # Upload ML config file using Streamlit's file_uploader function | |
# mlf_file = st.file_uploader("Upload ML config file", type=["properties"]) | |
# # Check if ML config file was uploaded | |
# if mlf_file is not None: | |
# # Save the uploaded file to a local file | |
# with open("mcclf_cc.properties", "wb") as f: | |
# f.write(mlf_file.read()) | |
# # Create an instance of MarkovChainClassifier with the uploaded ML config file | |
# model = MarkovChainClassifier("mcclf_cc.properties") | |
# # # Load the model from cc.mod | |
# # model = MarkovChainClassifier.load_model("cc.mod") | |
# # Get user input for userID | |
# user_id = st.text_input("Enter User ID") | |
# # Check if the "Predict" button was clicked | |
# if st.button("Predict"): | |
# # Load the saved model | |
# # model.load_model("cc.mod") | |
# # Call the predict method of the MarkovChainClassifier instance | |
# pred = model.predict() | |
# if pred == 'T': | |
# st.write(f"UserID: {user_id}, Prediction: Visitor is likely to convert into a customer.") | |
# else: | |
# st.write(f"UserID: {user_id}, Prediction: Visitor is unlikely to convert into a customer.") | |
if __name__ == "__main__": | |
main() |