GiusMagi commited on
Commit
58796c7
·
verified ·
1 Parent(s): 94b4ff5

Update model_pipeline.py

Browse files
Files changed (1) hide show
  1. 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())