Spaces:
Sleeping
Sleeping
Update model_pipeline.py
Browse files- model_pipeline.py +27 -0
model_pipeline.py
CHANGED
@@ -261,6 +261,33 @@ class Predictor:
|
|
261 |
down = short([n for n in neg_pairs if n[1] < 0])
|
262 |
return (f"Classe **{final_class}** (spiegazione su P(y≥{k_thr})): "
|
263 |
f"in alto {up}; in basso {down}. Valore atteso {yhat:.1f}.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
264 |
|
265 |
def predict_dict(self, payload: dict, include_neg: bool=False):
|
266 |
rid = str(uuid.uuid4())
|
|
|
261 |
down = short([n for n in neg_pairs if n[1] < 0])
|
262 |
return (f"Classe **{final_class}** (spiegazione su P(y≥{k_thr})): "
|
263 |
f"in alto {up}; in basso {down}. Valore atteso {yhat:.1f}.")
|
264 |
+
|
265 |
+
def predict_class_fast(self, payload: dict):
|
266 |
+
"""Like predict_dict ma senza SHAP: restituisce solo classe, p100, probs ordinali e valore atteso."""
|
267 |
+
raw = {k: payload.get(k, None) for k in FEATURE_MAP.values()}
|
268 |
+
df_row_raw = pd.DataFrame([raw])
|
269 |
+
|
270 |
+
te_oh = self.preprocess_apply(df_row_raw)
|
271 |
+
X_df = te_oh.reindex(columns=self.feat_cols_full, fill_value=0.0)
|
272 |
+
X = X_df.values
|
273 |
+
|
274 |
+
p100 = float(self.stage1_final.predict_proba(X)[:,1][0])
|
275 |
+
prob_ord = self.stage2_final.predict_proba(X)[0]
|
276 |
+
prob_ord = prob_ord / (prob_ord.sum() or 1.0)
|
277 |
+
yhat = 100.0*p100 + (1.0-p100)*float((prob_ord @ MIDPOINTS))
|
278 |
+
|
279 |
+
if p100 >= P100_THR_AUTO:
|
280 |
+
final_class = "100%"
|
281 |
+
else:
|
282 |
+
k = int(np.argmax(prob_ord))
|
283 |
+
final_class = LABELS[k]
|
284 |
+
|
285 |
+
return {
|
286 |
+
"class": final_class,
|
287 |
+
"p100": p100,
|
288 |
+
"ordinal_probs": {LABELS[i]: float(prob_ord[i]) for i in range(len(LABELS))},
|
289 |
+
"expected_value": float(yhat)
|
290 |
+
}
|
291 |
|
292 |
def predict_dict(self, payload: dict, include_neg: bool=False):
|
293 |
rid = str(uuid.uuid4())
|