vatsal-p-wa commited on
Commit
d5562ee
·
verified ·
1 Parent(s): ca9b829

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -144
app.py CHANGED
@@ -38,9 +38,7 @@ from sklearn.model_selection import train_test_split, cross_val_score, Randomize
38
  import lightgbm as lgb
39
  from catboost import CatBoostRegressor
40
  from sklearn.ensemble import StackingRegressor
41
- from flask import Flask, render_template, request
42
- import pandas as pd
43
- import json # ✅ Add this line
44
 
45
  app = Flask(__name__)
46
 
@@ -82,45 +80,34 @@ os.makedirs(app.config['MODEL_FOLDER'], exist_ok=True)
82
  # ------------------------------
83
 
84
  # Prediction analysis models loaded from Hugging Face.
85
- src_path = hf_hub_download(
86
- repo_id="WebashalarForML/Diamond_model_",
87
- filename="models_list/mkble/DecisionTree_best_pipeline_mkble_1_to_1.49.pkl",
88
- cache_dir=MODEL_FOLDER
89
- )
90
- dst_path = os.path.join(MODEL_FOLDER, "DecisionTree_best_pipeline_mkble_1_to_1.49.pkl")
91
- shutil.copy(src_path, dst_path)
92
- makable_model = load(dst_path)
93
 
94
- '''
95
  src_path = hf_hub_download(
96
  repo_id="WebashalarForML/Diamond_model_",
97
- filename="models_list/grd/StackingRegressor_best_pipeline_grd_0_to_1.01.pkl",
98
  cache_dir=MODEL_FOLDER
99
  )
100
- dst_path = os.path.join(MODEL_FOLDER, "StackingRegressor_best_pipeline_grd_0_to_1.01.pkl")
101
  shutil.copy(src_path, dst_path)
102
- grade_model = load(dst_path)
103
-
104
 
105
  src_path = hf_hub_download(
106
  repo_id="WebashalarForML/Diamond_model_",
107
- filename="models_list/bygrad/StackingRegressor_best_pipeline_bygrad_0_to_1.01.pkl",
108
  cache_dir=MODEL_FOLDER
109
  )
110
- dst_path = os.path.join(MODEL_FOLDER, "StackingRegressor_best_pipeline_bygrad_0_to_1.01.pkl")
111
  shutil.copy(src_path, dst_path)
112
- bygrade_model = load(dst_path)
113
-
114
 
 
115
  src_path = hf_hub_download(
116
  repo_id="WebashalarForML/Diamond_model_",
117
- filename="models_list/gia/StackingRegressor_best_pipeline_gia_0_to_1.01.pkl",
118
  cache_dir=MODEL_FOLDER
119
  )
120
- dst_path = os.path.join(MODEL_FOLDER, "StackingRegressor_best_pipeline_gia_0_to_1.01.pkl")
121
  shutil.copy(src_path, dst_path)
122
- gia_model = load(dst_path)
123
- '''
124
 
125
  #classsification model on the task
126
  src_path = hf_hub_download(
@@ -132,49 +119,13 @@ dst_path = os.path.join(MODEL_FOLDER, "3_pipeline.pkl")
132
  shutil.copy(src_path, dst_path)
133
  mkble_amt_class_model = load(dst_path)
134
 
135
-
136
-
137
-
138
- print("makable_model type:", type(makable_model))
139
  #print("grade_model type:", type(grade_model))
140
  #print("bygrade_model type:", type(bygrade_model))
141
  #print("gia_model type:", type(gia_model))
142
  print("================================")
143
  print("mkble_amt_class_model type:", type(mkble_amt_class_model))
144
 
145
- #gia_model = load("models/StackingRegressor_best_pipeline_mkble_0_to_1.01.pkl")
146
- #grade_model = load("models/StackingRegressor_best_pipeline_grd_0_to_1.01.pkl")
147
- #bygrade_model = load("models/StackingRegressor_best_pipeline_bygrad_0_to_1.01.pkl")
148
- #makable_model = load("models/StackingRegressor_best_pipeline_gia_0_to_1.01.pkl")
149
-
150
-
151
- # Classification models loaded using joblib.
152
- '''
153
- col_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_col.joblib'))
154
- cts_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_cts.joblib'))
155
- cut_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_cut.joblib'))
156
- qua_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_qua.joblib'))
157
- shp_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_shp.joblib'))
158
-
159
- blk_eng_to_mkbl_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_mkbl_blk.joblib'))
160
- wht_eng_to_mkbl_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_mkbl_wht.joblib'))
161
- open_eng_to_mkbl_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_mkbl_open.joblib'))
162
- pav_eng_to_mkbl_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_mkbl_pav.joblib'))
163
- blk_eng_to_grade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_grade_blk.joblib'))
164
- wht_eng_to_grade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_grade_wht.joblib'))
165
- open_eng_to_grade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_grade_open.joblib'))
166
- pav_eng_to_grade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_grade_pav.joblib'))
167
- blk_eng_to_bygrade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_bygrade_blk.joblib'))
168
- wht_eng_to_bygrade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_bygrade_wht.joblib'))
169
- open_eng_to_bygrade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_bygrade_open.joblib'))
170
- pav_eng_to_bygrade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_bygrade_pav.joblib'))
171
- blk_eng_to_gia_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_gia_blk.joblib'))
172
- wht_eng_to_gia_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_gia_wht.joblib'))
173
- open_eng_to_gia_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_gia_open.joblib'))
174
- pav_eng_to_gia_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_gia_pav.joblib'))
175
- '''
176
-
177
-
178
  # List of label encoder names.
179
  encoder_list = [
180
  'Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo',
@@ -230,7 +181,6 @@ def predict():
230
  df = pd.read_csv(filepath)
231
  else:
232
  df = pd.read_excel(filepath)
233
-
234
  except Exception as e:
235
  print(f'Error reading file: {e}', 'error')
236
  return redirect(url_for('index'))
@@ -256,9 +206,11 @@ def predict():
256
  print('Invalid file type. Only CSV and Excel files are allowed.', 'error')
257
  return redirect(url_for('index'))
258
 
 
 
259
  def process_dataframe(df):
260
  try:
261
- df = df[df["MkblAmt"].notna()]
262
 
263
  # Define the columns needed for two parts.
264
  required_columns = ['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
@@ -269,8 +221,8 @@ def process_dataframe(df):
269
 
270
  # Create two DataFrames: one for prediction and one for classification.
271
  df_pred = df[required_columns].copy()
272
- df_pred = df_pred[(df_pred[['EngCts']] > 0.99).all(axis=1) & (df_pred[['EngCts']] < 1.50).all(axis=1)]
273
- df_pred[['EngBlk', 'EngWht', 'EngOpen', 'EngPav']]=df_pred[['EngBlk', 'EngWht', 'EngOpen', 'EngPav']].fillna("NA")
274
  df_class = df[required_columns_2].fillna("NA").copy()
275
 
276
  # Transform categorical columns for prediction DataFrame using the label encoders.
@@ -301,98 +253,65 @@ def process_dataframe(df):
301
  # Prediction Report Section
302
  # -------------------------
303
  try:
304
- x = df_pred.copy()
305
- #df_pred['GIA_Predicted'] = pd.DataFrame(np.expm1(gia_model.predict(x)), columns=["Predicted"])
306
- #df_pred['Grade_Predicted'] = pd.DataFrame(np.expm1(grade_model.predict(x)), columns=["Predicted"])
307
- #df_pred['ByGrade_Predicted'] = pd.DataFrame(np.expm1(bygrade_model.predict(x)), columns=["Predicted"])
308
- df_pred['change_in_amt_mkble'] = pd.DataFrame(mkble_amt_class_model.predict(x), columns=["pred_change_in_eng_to_mkble"])
309
- #print(df_pred.columns)
310
- df_pred = df_pred[['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
311
  'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngBlk', 'EngWht', 'EngOpen',
312
  'EngPav', 'EngAmt',
313
  'change_in_amt_mkble'
314
  ]]
315
- df_pred['Makable_Predicted'] = pd.DataFrame(np.expm1(makable_model.predict(df_pred)), columns=["Predicted"])
316
- print(df_pred.columns)
317
- #df_pred['GIA_Diff'] = df_pred['EngAmt'] - df_pred['GIA_Predicted']
318
- #df_pred['Grade_Diff'] = df_pred['EngAmt'] - df_pred['Grade_Predicted']
319
- #df_pred['ByGrade_Diff'] = df_pred['EngAmt'] - df_pred['ByGrade_Predicted']
320
- df_pred['Makable_Diff'] = df_pred['EngAmt'] - df_pred['Makable_Predicted']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
321
 
322
  for col in ['Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo', 'EngNts', 'EngMikly','EngBlk', 'EngWht', 'EngOpen', 'EngPav']:
323
  try:
324
- df_pred[col] = loaded_label_encoder[col].inverse_transform(df_pred[col].astype(int))
325
  except ValueError as e:
326
  print(f'inverse transform fails value in column {col}: {e}', 'error')
327
 
328
  except ValueError as e:
329
  print(f'pred model error----->: {e}', 'error')
330
-
331
- # -------------------------
332
- # Classification Report Section
333
- # -------------------------
334
- '''
335
- try:
336
- x2 = df_class.copy()
337
- dx = df_pred.copy() # Start with the prediction data.
338
- dx['col_change'] = col_model.predict(x2)
339
- dx['cts_change'] = cts_model.predict(x2)
340
- dx['cut_change'] = cut_model.predict(x2)
341
- dx['qua_change'] = qua_model.predict(x2)
342
- dx['shp_change'] = shp_model.predict(x2)
343
- except ValueError as e:
344
- print(f'class model error----->: {e}', 'error')
345
-
346
- try:
347
- dx['Change_Blk_Eng_to_Mkbl_value'] = blk_eng_to_mkbl_model.predict(x)
348
- dx['Change_Wht_Eng_to_Mkbl_value'] = wht_eng_to_mkbl_model.predict(x)
349
- dx['Change_Open_Eng_to_Mkbl_value'] = open_eng_to_mkbl_model.predict(x)
350
- dx['Change_Pav_Eng_to_Mkbl_value'] = pav_eng_to_mkbl_model.predict(x)
351
- dx['Change_Blk_Eng_to_Grd_value'] = blk_eng_to_grade_model.predict(x)
352
- dx['Change_Wht_Eng_to_Grd_value'] = wht_eng_to_grade_model.predict(x)
353
- dx['Change_Open_Eng_to_Grd_value'] = open_eng_to_grade_model.predict(x)
354
- dx['Change_Pav_Eng_to_Grd_value'] = pav_eng_to_grade_model.predict(x)
355
- dx['Change_Blk_Eng_to_ByGrd_value'] = blk_eng_to_bygrade_model.predict(x)
356
- dx['Change_Wht_Eng_to_ByGrd_value'] = wht_eng_to_bygrade_model.predict(x)
357
- dx['Change_Open_Eng_to_ByGrd_value'] = open_eng_to_bygrade_model.predict(x)
358
- dx['Change_Pav_Eng_to_ByGrd_value'] = pav_eng_to_bygrade_model.predict(x)
359
- dx['Change_Blk_Eng_to_Gia_value'] = blk_eng_to_gia_model.predict(x)
360
- dx['Change_Wht_Eng_to_Gia_value'] = wht_eng_to_gia_model.predict(x)
361
- dx['Change_Open_Eng_to_Gia_value'] = open_eng_to_gia_model.predict(x)
362
- dx['Change_Pav_Eng_to_Gia_value'] = pav_eng_to_gia_model.predict(x)
363
- except ValueError as e:
364
- print(f'grade_code model error----->: {e}', 'error')
365
-
366
- # Inverse transform classification predictions.
367
- dx['col_change'] = loaded_label_encoder['Change_color_value'].inverse_transform(dx['col_change'])
368
- dx['cts_change'] = loaded_label_encoder['Change_cts_value'].inverse_transform(dx['cts_change'])
369
- dx['cut_change'] = loaded_label_encoder['Change_cut_value'].inverse_transform(dx['cut_change'])
370
- dx['qua_change'] = loaded_label_encoder['Change_quality_value'].inverse_transform(dx['qua_change'])
371
- dx['shp_change'] = loaded_label_encoder['Change_shape_value'].inverse_transform(dx['shp_change'])
372
- dx['Change_Blk_Eng_to_Mkbl_value'] = loaded_label_encoder['Change_Blk_Eng_to_Mkbl_value'].inverse_transform(dx['Change_Blk_Eng_to_Mkbl_value'])
373
- dx['Change_Wht_Eng_to_Mkbl_value'] = loaded_label_encoder['Change_Wht_Eng_to_Mkbl_value'].inverse_transform(dx['Change_Wht_Eng_to_Mkbl_value'])
374
- dx['Change_Open_Eng_to_Mkbl_value'] = loaded_label_encoder['Change_Open_Eng_to_Mkbl_value'].inverse_transform(dx['Change_Open_Eng_to_Mkbl_value'])
375
- dx['Change_Pav_Eng_to_Mkbl_value'] = loaded_label_encoder['Change_Pav_Eng_to_Mkbl_value'].inverse_transform(dx['Change_Pav_Eng_to_Mkbl_value'])
376
- dx['Change_Blk_Eng_to_Grd_value'] = loaded_label_encoder['Change_Blk_Eng_to_Grd_value'].inverse_transform(dx['Change_Blk_Eng_to_Grd_value'])
377
- dx['Change_Wht_Eng_to_Grd_value'] = loaded_label_encoder['Change_Wht_Eng_to_Grd_value'].inverse_transform(dx['Change_Wht_Eng_to_Grd_value'])
378
- dx['Change_Open_Eng_to_Grd_value'] = loaded_label_encoder['Change_Open_Eng_to_Grd_value'].inverse_transform(dx['Change_Open_Eng_to_Grd_value'])
379
- dx['Change_Pav_Eng_to_Grd_value'] = loaded_label_encoder['Change_Pav_Eng_to_Grd_value'].inverse_transform(dx['Change_Pav_Eng_to_Grd_value'])
380
- dx['Change_Blk_Eng_to_ByGrd_value'] = loaded_label_encoder['Change_Blk_Eng_to_ByGrd_value'].inverse_transform(dx['Change_Blk_Eng_to_ByGrd_value'])
381
- dx['Change_Wht_Eng_to_ByGrd_value'] = loaded_label_encoder['Change_Wht_Eng_to_ByGrd_value'].inverse_transform(dx['Change_Wht_Eng_to_ByGrd_value'])
382
- dx['Change_Open_Eng_to_ByGrd_value'] = loaded_label_encoder['Change_Open_Eng_to_ByGrd_value'].inverse_transform(dx['Change_Open_Eng_to_ByGrd_value'])
383
- dx['Change_Pav_Eng_to_ByGrd_value'] = loaded_label_encoder['Change_Pav_Eng_to_ByGrd_value'].inverse_transform(dx['Change_Pav_Eng_to_ByGrd_value'])
384
- dx['Change_Blk_Eng_to_Gia_value'] = loaded_label_encoder['Change_Blk_Eng_to_Gia_value'].inverse_transform(dx['Change_Blk_Eng_to_Gia_value'])
385
- dx['Change_Wht_Eng_to_Gia_value'] = loaded_label_encoder['Change_Wht_Eng_to_Gia_value'].inverse_transform(dx['Change_Wht_Eng_to_Gia_value'])
386
- dx['Change_Open_Eng_to_Gia_value'] = loaded_label_encoder['Change_Open_Eng_to_Gia_value'].inverse_transform(dx['Change_Open_Eng_to_Gia_value'])
387
- dx['Change_Pav_Eng_to_Gia_value'] = loaded_label_encoder['Change_Pav_Eng_to_Gia_value'].inverse_transform(dx['Change_Pav_Eng_to_Gia_value'])
388
-
389
- '''
390
 
391
  # Final return with full data for pagination.
392
- # Final step to replace NaN or empty values with "-"
393
- df_pred = df_pred.fillna("-")
394
- df_pred = df_pred.replace(r'^\s*$', "-", regex=True)
395
- return df_pred, df_pred
396
  except Exception as e:
397
  print(f'Error processing file: {e}', 'error')
398
  return pd.DataFrame(), pd.DataFrame()
@@ -456,4 +375,4 @@ def download_class():
456
  return send_file(CLASS_OUTPUT_FILE, as_attachment=True)
457
 
458
  if __name__ == "__main__":
459
- app.run(debug=True)
 
38
  import lightgbm as lgb
39
  from catboost import CatBoostRegressor
40
  from sklearn.ensemble import StackingRegressor
41
+ import json
 
 
42
 
43
  app = Flask(__name__)
44
 
 
80
  # ------------------------------
81
 
82
  # Prediction analysis models loaded from Hugging Face.
 
 
 
 
 
 
 
 
83
 
 
84
  src_path = hf_hub_download(
85
  repo_id="WebashalarForML/Diamond_model_",
86
+ filename="models_list/mkble/DecisionTree_best_pipeline_mkble_0_to_0.99_al.pkl",
87
  cache_dir=MODEL_FOLDER
88
  )
89
+ dst_path = os.path.join(MODEL_FOLDER, "DecisionTree_best_pipeline_mkble_0_to_0.99_al.pkl")
90
  shutil.copy(src_path, dst_path)
91
+ makable_model_0 = load(dst_path)
 
92
 
93
  src_path = hf_hub_download(
94
  repo_id="WebashalarForML/Diamond_model_",
95
+ filename="models_list/mkble/DecisionTree_best_pipeline_mkble_1_to_1.49.pkl",
96
  cache_dir=MODEL_FOLDER
97
  )
98
+ dst_path = os.path.join(MODEL_FOLDER, "DecisionTree_best_pipeline_mkble_1_to_1.49.pkl")
99
  shutil.copy(src_path, dst_path)
100
+ makable_model_1 = load(dst_path)
 
101
 
102
+ # Prediction analysis models loaded from Hugging Face.
103
  src_path = hf_hub_download(
104
  repo_id="WebashalarForML/Diamond_model_",
105
+ filename="models_list/mkble/DecisionTree_best_pipeline_mkble_1.50_to_1.99.pkl",
106
  cache_dir=MODEL_FOLDER
107
  )
108
+ dst_path = os.path.join(MODEL_FOLDER, "DecisionTree_best_pipeline_mkble_1.50_to_1.99.pkl")
109
  shutil.copy(src_path, dst_path)
110
+ makable_model_2 = load(dst_path)
 
111
 
112
  #classsification model on the task
113
  src_path = hf_hub_download(
 
119
  shutil.copy(src_path, dst_path)
120
  mkble_amt_class_model = load(dst_path)
121
 
122
+ #print("makable_model type:", type(makable_model))
 
 
 
123
  #print("grade_model type:", type(grade_model))
124
  #print("bygrade_model type:", type(bygrade_model))
125
  #print("gia_model type:", type(gia_model))
126
  print("================================")
127
  print("mkble_amt_class_model type:", type(mkble_amt_class_model))
128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  # List of label encoder names.
130
  encoder_list = [
131
  'Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo',
 
181
  df = pd.read_csv(filepath)
182
  else:
183
  df = pd.read_excel(filepath)
 
184
  except Exception as e:
185
  print(f'Error reading file: {e}', 'error')
186
  return redirect(url_for('index'))
 
206
  print('Invalid file type. Only CSV and Excel files are allowed.', 'error')
207
  return redirect(url_for('index'))
208
 
209
+
210
+
211
  def process_dataframe(df):
212
  try:
213
+ #df = df[df["MkblAmt"].notna()]
214
 
215
  # Define the columns needed for two parts.
216
  required_columns = ['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
 
221
 
222
  # Create two DataFrames: one for prediction and one for classification.
223
  df_pred = df[required_columns].copy()
224
+ #df_pred = df_pred[(df_pred[['EngCts']] > 0.99).all(axis=1) & (df_pred[['EngCts']] < 1.50).all(axis=1)]
225
+ df_pred[['EngBlk', 'EngWht', 'EngOpen', 'EngPav']]=df_pred[['EngBlk', 'EngWht', 'EngOpen', 'EngPav']].fillna("-")
226
  df_class = df[required_columns_2].fillna("NA").copy()
227
 
228
  # Transform categorical columns for prediction DataFrame using the label encoders.
 
253
  # Prediction Report Section
254
  # -------------------------
255
  try:
256
+
257
+ # for model 0 to 0.99
258
+ df_pred_0 = df_pred[(df_pred[['EngCts']] > 0.00).all(axis=1) & (df_pred[['EngCts']] < 0.99).all(axis=1)]
259
+ df_pred_0['change_in_amt_mkble'] = pd.DataFrame(mkble_amt_class_model.predict(df_pred_0), columns=["pred_change_in_eng_to_mkble"])
260
+ print(df_pred_0.columns)
261
+ df_pred_0 = df_pred_0[['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
 
262
  'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngBlk', 'EngWht', 'EngOpen',
263
  'EngPav', 'EngAmt',
264
  'change_in_amt_mkble'
265
  ]]
266
+ df_pred_0['Makable_Predicted'] = pd.DataFrame(np.expm1(makable_model_0.predict(df_pred_0)), columns=["Predicted"])
267
+ print(df_pred_0.columns)
268
+
269
+ # for model 1 to 1.49
270
+
271
+ df_pred_1 = df_pred[(df_pred[['EngCts']] > 0.99).all(axis=1) & (df_pred[['EngCts']] < 1.50).all(axis=1)]
272
+ df_pred_1['change_in_amt_mkble'] = pd.DataFrame(mkble_amt_class_model.predict(df_pred_1), columns=["pred_change_in_eng_to_mkble"])
273
+ print(df_pred_1.columns)
274
+ df_pred_1 = df_pred_1[['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
275
+ 'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngBlk', 'EngWht', 'EngOpen',
276
+ 'EngPav', 'EngAmt',
277
+ 'change_in_amt_mkble'
278
+ ]]
279
+ df_pred_1['Makable_Predicted'] = pd.DataFrame(np.expm1(makable_model_1.predict(df_pred_1)), columns=["Predicted"])
280
+ print(df_pred_1.columns)
281
+
282
+ # for model 1.50 to 1.99
283
+
284
+ df_pred_2 = df_pred[(df_pred[['EngCts']] > 1.49).all(axis=1) & (df_pred[['EngCts']] < 2.00).all(axis=1)]
285
+ df_pred_2['change_in_amt_mkble'] = pd.DataFrame(mkble_amt_class_model.predict(df_pred_2), columns=["pred_change_in_eng_to_mkble"])
286
+ print(df_pred_2.columns)
287
+ df_pred_2 = df_pred_2[['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
288
+ 'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngBlk', 'EngWht', 'EngOpen',
289
+ 'EngPav', 'EngAmt',
290
+ 'change_in_amt_mkble'
291
+ ]]
292
+ df_pred_2['Makable_Predicted'] = pd.DataFrame(np.expm1(makable_model_2.predict(df_pred_2)), columns=["Predicted"])
293
+ print(df_pred_2.columns)
294
+
295
+ df_pred_main = pd.concat([df_pred_0, df_pred_1, df_pred_2])
296
+ df_pred_main['Makable_Diff'] = df_pred_main['EngAmt'] - df_pred_main['Makable_Predicted']
297
+
298
+ # Fill NaN or missing values in prediction columns
299
+ df_pred_main[['change_in_amt_mkble', 'Makable_Predicted', 'Makable_Diff']] = df_pred_main[['change_in_amt_mkble', 'Makable_Predicted', 'Makable_Diff']].fillna("-")
300
 
301
  for col in ['Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo', 'EngNts', 'EngMikly','EngBlk', 'EngWht', 'EngOpen', 'EngPav']:
302
  try:
303
+ df_pred_main[col] = loaded_label_encoder[col].inverse_transform(df_pred_main[col].astype(int))
304
  except ValueError as e:
305
  print(f'inverse transform fails value in column {col}: {e}', 'error')
306
 
307
  except ValueError as e:
308
  print(f'pred model error----->: {e}', 'error')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309
 
310
  # Final return with full data for pagination.
311
+ # # Final step to replace NaN or empty values with "-"
312
+ # df_pred_main = df_pred.fillna("-")
313
+ # df_pred_main = df_pred.replace(r'^\s*$', "-", regex=True)
314
+ return df_pred_main, df_pred_main
315
  except Exception as e:
316
  print(f'Error processing file: {e}', 'error')
317
  return pd.DataFrame(), pd.DataFrame()
 
375
  return send_file(CLASS_OUTPUT_FILE, as_attachment=True)
376
 
377
  if __name__ == "__main__":
378
+ app.run(debug=True)