File size: 5,382 Bytes
b48f9b8
 
 
 
 
 
 
 
 
e4e04a8
b48f9b8
0ba77fc
b48f9b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3e5d933
b48f9b8
 
 
0ba77fc
b48f9b8
 
0ba77fc
 
 
 
 
b48f9b8
 
0ba77fc
 
b48f9b8
c1dad72
 
0ba77fc
c1dad72
 
 
0ba77fc
c1dad72
b48f9b8
 
 
 
 
 
 
 
 
0ba77fc
 
 
 
 
 
 
b48f9b8
 
 
0ba77fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b48f9b8
 
 
 
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
135
136
137
138
139
140
141
142
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("Markov Chain Classifier")

    # # 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("3. **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")
        # 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")

            # Check if the "Predict" button was clicked
            if st.button("Predict"):
            # Call the predict method of the MarkovChainClassifier instance
                model.predict()

if __name__ == "__main__":
    main()