Spaces:
Runtime error
Runtime error
import streamlit as st | |
import pandas as pd | |
import streamlit.components.v1 as components | |
metrics_path = "assets/model_metrics.csv" | |
metrics_df = pd.read_csv(metrics_path) | |
def metrics_ui(): | |
st.image("data:image/jpeg;base64,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",width=500) | |
st.title("Model Evaluation Metrics") | |
st.subheader("Performance Metrics of Trained Models") | |
st.dataframe(metrics_df) | |
best_model_name = metrics_df.loc[metrics_df['F1 Score'].idxmax(), 'Model'] | |
st.write(f"Best Model: {best_model_name} with an F1 Score of {metrics_df['F1 Score'].max():.2f}") | |
st.header("What is data drift ?") | |
st.write( | |
""" | |
Data Drift is a name for data change that can affect the Machine Learning model performance. There are different types | |
of drift.There can be change in target distribution. | |
For example you have a model that predicts house price based on the property description (no.of rooms,location,etc.,) | |
but there is a change in the market and all properities prices go up. | |
If you don't detect the drift in the target distribution and don't update the model with new targets then your model will predict too low pricies. | |
The chnage in the target distribution is so-called **target distribution.** | |
The next type of drift is **covariate drift**.it is a change in the input data distribution. For example, you have | |
a categorical feature that will start to have new category. | |
""" | |
) | |
st.header("what to do after data drift detection ?") | |
st.write( | |
""" | |
When data drift is detected that ML model should be updated. There are many ways in which it can be done - all depends on the | |
data. The most striaght forward way is to use all avaiable data samples to train a new model. The other approach might be to use just | |
a new data samples to train the model. | |
There might be also approaches with sample weighting - giving higher weight for fresh data samples and lower weights for old samples. | |
it depends on the data. | |
""" | |
) | |
st.header("How to detect data drift ?") | |
st.write(""" | |
The data drift can be detected in different ways. The simplest approach is to use statistical tests that compare | |
the distribution of the trainig data and live data (production data). If the differnec between two distribution is significantly then a drift occured. | |
The most popular test are **two-sample, kolmogorov-Smirnov test,Chi square test, jensen-shannon divergence, Wasserstein distance.** | |
The alternative approach might be use Machine Learning model to monitar the data quality. There can be also hybrid approaches. | |
""") | |
st.subheader("Dataset Drift") | |
html = "frontend/reports/report.html" | |
with open(html,'r') as f: | |
html_data= f.read() | |
st.components.v1.html(html_data,scrolling = True,height=700,width= 800) | |
st.subheader("Decison Tree Model Report") | |
html = "frontend/reports/model_report_1.html" | |
with open(html,'r') as f: | |
html_data= f.read() | |
st.components.v1.html(html_data,scrolling = True,height=700,width= 800) | |
st.subheader("RandomForest Model Drift") | |
html = "frontend/reports/model_report_2.html" | |
with open(html,'r') as f: | |
html_data= f.read() | |
st.components.v1.html(html_data,scrolling = True,height=700,width= 800) | |