Nashid-Noor commited on
Commit
ac96642
·
1 Parent(s): 9422ce5

Fix UI inference crash due to missing columns

Browse files
Files changed (2) hide show
  1. src/app.py +7 -0
  2. src/predict.py +7 -0
src/app.py CHANGED
@@ -139,6 +139,13 @@ def predict_risk(
139
  df = pd.DataFrame([record])
140
  from src.features import engineer_features
141
  df = engineer_features(df)
 
 
 
 
 
 
 
142
  X = predictor.preprocessor.transform(df)
143
  shap_factors = explain_prediction(
144
  X, model=predictor.model, feature_names=predictor.feature_names, top_k=8
 
139
  df = pd.DataFrame([record])
140
  from src.features import engineer_features
141
  df = engineer_features(df)
142
+
143
+ # Ensure all columns expected by the preprocessor are present (fill with NaN if missing)
144
+ expected_cols = getattr(predictor.preprocessor, "feature_names_in_", [])
145
+ for col in expected_cols:
146
+ if col not in df.columns:
147
+ df[col] = np.nan
148
+
149
  X = predictor.preprocessor.transform(df)
150
  shap_factors = explain_prediction(
151
  X, model=predictor.model, feature_names=predictor.feature_names, top_k=8
src/predict.py CHANGED
@@ -55,6 +55,13 @@ class GridRiskPredictor:
55
  labels : np.ndarray – binary prediction at 0.5 threshold
56
  """
57
  df = engineer_features(df)
 
 
 
 
 
 
 
58
  X = self.preprocessor.transform(df)
59
  probs = self.model.predict_proba(X)[:, 1]
60
  labels = (probs >= 0.5).astype(int)
 
55
  labels : np.ndarray – binary prediction at 0.5 threshold
56
  """
57
  df = engineer_features(df)
58
+
59
+ # Ensure that all feature names exist in df
60
+ expected_cols = getattr(self.preprocessor, "feature_names_in_", [])
61
+ for col in expected_cols:
62
+ if col not in df.columns:
63
+ df[col] = np.nan
64
+
65
  X = self.preprocessor.transform(df)
66
  probs = self.model.predict_proba(X)[:, 1]
67
  labels = (probs >= 0.5).astype(int)