Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -15,7 +15,7 @@ import matplotlib.pyplot as plt
|
|
| 15 |
from matplotlib.ticker import FuncFormatter
|
| 16 |
|
| 17 |
import plotly.graph_objects as go
|
| 18 |
-
from sklearn.metrics import mean_squared_error
|
| 19 |
|
| 20 |
# =========================
|
| 21 |
# Constants (Ts variant)
|
|
@@ -135,6 +135,13 @@ def pearson_r(y_true, y_pred) -> float:
|
|
| 135 |
if np.all(a == a[0]) or np.all(p == p[0]): return float("nan")
|
| 136 |
return float(np.corrcoef(a, p)[0, 1])
|
| 137 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
@st.cache_resource(show_spinner=False)
|
| 139 |
def load_model(model_path: str):
|
| 140 |
return joblib.load(model_path)
|
|
@@ -730,12 +737,12 @@ if st.session_state.app_step == "dev":
|
|
| 730 |
st.session_state.results["m_train"]={
|
| 731 |
"R": pearson_r(tr[TARGET], tr[PRED_COL]),
|
| 732 |
"RMSE": rmse(tr[TARGET], tr[PRED_COL]),
|
| 733 |
-
"
|
| 734 |
}
|
| 735 |
st.session_state.results["m_test"]={
|
| 736 |
"R": pearson_r(te[TARGET], te[PRED_COL]),
|
| 737 |
"RMSE": rmse(te[TARGET], te[PRED_COL]),
|
| 738 |
-
"
|
| 739 |
}
|
| 740 |
|
| 741 |
tr_min = tr[FEATURES].min().to_dict(); tr_max = tr[FEATURES].max().to_dict()
|
|
@@ -744,12 +751,14 @@ if st.session_state.app_step == "dev":
|
|
| 744 |
|
| 745 |
def _dev_block(df, m):
|
| 746 |
c1,c2,c3 = st.columns(3)
|
| 747 |
-
c1.metric("R", f"{m['R']:.3f}")
|
|
|
|
|
|
|
| 748 |
st.markdown("""
|
| 749 |
<div style='text-align: left; font-size: 0.8em; color: #6b7280; margin-top: -16px; margin-bottom: 8px;'>
|
| 750 |
<strong>R:</strong> Pearson Correlation Coefficient<br>
|
| 751 |
<strong>RMSE:</strong> Root Mean Square Error<br>
|
| 752 |
-
<strong>
|
| 753 |
</div>
|
| 754 |
""", unsafe_allow_html=True)
|
| 755 |
col_track, col_cross = st.columns([2, 3], gap="large")
|
|
@@ -808,7 +817,7 @@ if st.session_state.app_step == "validate":
|
|
| 808 |
st.session_state.results["m_val"]={
|
| 809 |
"R": pearson_r(df[TARGET], df[PRED_COL]),
|
| 810 |
"RMSE": rmse(df[TARGET], df[PRED_COL]),
|
| 811 |
-
"
|
| 812 |
}
|
| 813 |
st.session_state.results["sv_val"]={"n":len(df), "pred_min":float(df[PRED_COL].min()), "pred_max":float(df[PRED_COL].max()), "oor":oor_pct}
|
| 814 |
st.session_state.results["oor_tbl"]=tbl
|
|
@@ -816,12 +825,12 @@ if st.session_state.app_step == "validate":
|
|
| 816 |
if "Validate" in st.session_state.results:
|
| 817 |
m = st.session_state.results["m_val"]
|
| 818 |
c1,c2,c3 = st.columns(3)
|
| 819 |
-
c1.metric("R", f"{m['R']:.3f}"); c2.metric("RMSE", f"{m['RMSE']:.2f}"); c3.metric("
|
| 820 |
st.markdown("""
|
| 821 |
<div style='text-align: left; font-size: 0.8em; color: #6b7280; margin-top: -16px; margin-bottom: 8px;'>
|
| 822 |
<strong>R:</strong> Pearson Correlation Coefficient<br>
|
| 823 |
<strong>RMSE:</strong> Root Mean Square Error<br>
|
| 824 |
-
<strong>
|
| 825 |
</div>
|
| 826 |
""", unsafe_allow_html=True)
|
| 827 |
|
|
|
|
| 15 |
from matplotlib.ticker import FuncFormatter
|
| 16 |
|
| 17 |
import plotly.graph_objects as go
|
| 18 |
+
from sklearn.metrics import mean_squared_error
|
| 19 |
|
| 20 |
# =========================
|
| 21 |
# Constants (Ts variant)
|
|
|
|
| 135 |
if np.all(a == a[0]) or np.all(p == p[0]): return float("nan")
|
| 136 |
return float(np.corrcoef(a, p)[0, 1])
|
| 137 |
|
| 138 |
+
def mape(y_true, y_pred, eps: float = 1e-8) -> float:
|
| 139 |
+
"""Mean Absolute Percentage Error in percent; ignores near-zero actuals."""
|
| 140 |
+
a = np.asarray(y_true, dtype=float)
|
| 141 |
+
p = np.asarray(y_pred, dtype=float)
|
| 142 |
+
denom = np.where(np.abs(a) < eps, np.nan, np.abs(a))
|
| 143 |
+
return float(np.nanmean(np.abs(a - p) / denom) * 100.0)
|
| 144 |
+
|
| 145 |
@st.cache_resource(show_spinner=False)
|
| 146 |
def load_model(model_path: str):
|
| 147 |
return joblib.load(model_path)
|
|
|
|
| 737 |
st.session_state.results["m_train"]={
|
| 738 |
"R": pearson_r(tr[TARGET], tr[PRED_COL]),
|
| 739 |
"RMSE": rmse(tr[TARGET], tr[PRED_COL]),
|
| 740 |
+
"MAPE": mape(tr[TARGET], tr[PRED_COL])
|
| 741 |
}
|
| 742 |
st.session_state.results["m_test"]={
|
| 743 |
"R": pearson_r(te[TARGET], te[PRED_COL]),
|
| 744 |
"RMSE": rmse(te[TARGET], te[PRED_COL]),
|
| 745 |
+
"MAPE": mape(te[TARGET], te[PRED_COL])
|
| 746 |
}
|
| 747 |
|
| 748 |
tr_min = tr[FEATURES].min().to_dict(); tr_max = tr[FEATURES].max().to_dict()
|
|
|
|
| 751 |
|
| 752 |
def _dev_block(df, m):
|
| 753 |
c1,c2,c3 = st.columns(3)
|
| 754 |
+
c1.metric("R", f"{m['R']:.3f}")
|
| 755 |
+
c2.metric("RMSE", f"{m['RMSE']:.2f}")
|
| 756 |
+
c3.metric("MAPE (%)", f"{m['MAPE']:.2f}")
|
| 757 |
st.markdown("""
|
| 758 |
<div style='text-align: left; font-size: 0.8em; color: #6b7280; margin-top: -16px; margin-bottom: 8px;'>
|
| 759 |
<strong>R:</strong> Pearson Correlation Coefficient<br>
|
| 760 |
<strong>RMSE:</strong> Root Mean Square Error<br>
|
| 761 |
+
<strong>MAPE:</strong> Mean Absolute Percentage Error
|
| 762 |
</div>
|
| 763 |
""", unsafe_allow_html=True)
|
| 764 |
col_track, col_cross = st.columns([2, 3], gap="large")
|
|
|
|
| 817 |
st.session_state.results["m_val"]={
|
| 818 |
"R": pearson_r(df[TARGET], df[PRED_COL]),
|
| 819 |
"RMSE": rmse(df[TARGET], df[PRED_COL]),
|
| 820 |
+
"MAPE": mape(df[TARGET], df[PRED_COL])
|
| 821 |
}
|
| 822 |
st.session_state.results["sv_val"]={"n":len(df), "pred_min":float(df[PRED_COL].min()), "pred_max":float(df[PRED_COL].max()), "oor":oor_pct}
|
| 823 |
st.session_state.results["oor_tbl"]=tbl
|
|
|
|
| 825 |
if "Validate" in st.session_state.results:
|
| 826 |
m = st.session_state.results["m_val"]
|
| 827 |
c1,c2,c3 = st.columns(3)
|
| 828 |
+
c1.metric("R", f"{m['R']:.3f}"); c2.metric("RMSE", f"{m['RMSE']:.2f}"); c3.metric("MAPE (%)", f"{m['MAPE']:.2f}")
|
| 829 |
st.markdown("""
|
| 830 |
<div style='text-align: left; font-size: 0.8em; color: #6b7280; margin-top: -16px; margin-bottom: 8px;'>
|
| 831 |
<strong>R:</strong> Pearson Correlation Coefficient<br>
|
| 832 |
<strong>RMSE:</strong> Root Mean Square Error<br>
|
| 833 |
+
<strong>MAPE:</strong> Mean Absolute Percentage Error
|
| 834 |
</div>
|
| 835 |
""", unsafe_allow_html=True)
|
| 836 |
|