import os import sys from random import randint import time import uuid import argparse import streamlit as st sys.path.append(os.path.abspath("../supv")) from matumizi.util import * from mcclf import * 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) print(",".join(userSess)) def trainModel(mlfpath): model = MarkovChainClassifier(mlfpath) model.train() def predictModel(mlfpath): model = MarkovChainClassifier(mlfpath) model.predict() def main(): st.title("Markov Chain Classifier") # Add input fields for command line arguments op = st.selectbox("Operation", ["gen", "train", "pred"]) numUsers = st.slider("Number of Users", 1, 1000, 100) convRate = st.slider("Conversion Rate", 1, 100, 10) label = st.checkbox("Add Label") mlfpath = st.text_input("ML Config File Path", value="false") # Call functions based on selected operation if op == "gen": st.button("Generate Visit History", on_click=lambda: genVisitHistory(numUsers, convRate, label)) elif op == "train": st.button("Train Model", on_click=lambda: trainModel(mlfpath)) elif op == "pred": st.button("Predict Model", on_click=lambda: predictModel(mlfpath)) if __name__ == "__main__": main()