import gradio as gr import numpy as np from PIL import Image import requests import xgboost import pandas as pd from app_funcs import * import hopsworks import joblib project = hopsworks.login() fs = project.get_feature_store() X_columns_to_drop = ["percentage_future", "cohort_first_month", "month", "cohort_first_product"] feature_view = fs.get_feature_view(name="cohorts_fv", version=1) mr = project.get_model_registry() model = mr.get_model("cohort_model", version=1) model_dir = model.download() model = joblib.load(model_dir + "/xgb_.pkl") # Get feature view in a dataframe data, labels = feature_view.get_training_data(training_dataset_version=1) data["percentage_future"] = labels # Convert it to pandas datetime data["cohort_first_month"] = pd.to_datetime(data["cohort_first_month"]) data["month"] = pd.to_datetime(data["month"]) # Sort and assert data = data.sort_values(by=["cohort_first_product", "cohort_first_month", "month"]) def cohort_predict(cohort_start, start_date, product): new_seq = generate_new_data(data, cohort_start, start_date, product, model, X_columns_to_drop, 12) hist_seq = get_sequence(data, cohort_start, product) print(hist_seq.head()) fig = plot_example_from_case(hist_seq, new_seq, 25, product) fig.canvas.draw() arr = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8) arr = arr.reshape(fig.canvas.get_width_height()[::-1] + (3,)) return Image.fromarray(arr) demo = gr.Interface( fn=cohort_predict, title="Cohort Active Percentage Prediction", description="Predicts active user percentage in a future month for a cohort that started in specific date with specific product", allow_flagging="never", inputs=[ gr.Textbox(default='2022-04-01', label="Cohort Start Date"), gr.Textbox(default='2022-04-01', label="Prediction Start Date"), gr.Textbox(default="3m", label="Product (1m, 3m, 4m)"), ], outputs=gr.Image(type="pil")) demo.launch()