techavenger123 commited on
Commit
f919f67
·
1 Parent(s): f3608b3

Changes after Testing

Browse files
Files changed (9) hide show
  1. Dockerfile +1 -1
  2. app.py +81 -271
  3. app3.py +738 -0
  4. test.py +192 -0
  5. test_mismatches_lgbm.csv +1906 -0
  6. test_mismatches_rf.csv +915 -0
  7. test_results_lgbm.csv +0 -0
  8. test_results_rf.csv +0 -0
  9. testing_results.txt +91 -0
Dockerfile CHANGED
@@ -14,4 +14,4 @@ COPY --chown=user . /app
14
  USER user
15
 
16
  EXPOSE 7860
17
- CMD ["python", "-m", "gunicorn", "--bind", "0.0.0.0:7860", "--workers", "2", "--timeout", "120", "app:app"]
 
14
  USER user
15
 
16
  EXPOSE 7860
17
+ CMD ["python", "-m", "gunicorn", "--bind", "0.0.0.0:7860", "--workers", "2", "--timeout", "120", "app:app3"]
app.py CHANGED
@@ -1,6 +1,8 @@
1
  """
2
- FaultSense — LightGBM + Random Forest Fault Prediction App
3
- Both models trained at startup; UI lets user switch between them.
 
 
4
  """
5
 
6
  import os
@@ -18,7 +20,6 @@ from sklearn.metrics import (
18
  from sklearn.preprocessing import OneHotEncoder
19
  from sklearn.compose import ColumnTransformer
20
  from sklearn.pipeline import Pipeline
21
- from sklearn.ensemble import RandomForestClassifier
22
  import joblib
23
  from lightgbm import LGBMClassifier
24
  from flask import Flask, request, jsonify, render_template_string
@@ -28,8 +29,7 @@ from flask import Flask, request, jsonify, render_template_string
28
  # ─────────────────────────────────────────────
29
 
30
  DATA_PATH = "synthetic_nim_parallel_10000.csv"
31
- LGBM_PATH = "/tmp/faultsense_lgbm.joblib"
32
- RF_PATH = "/tmp/faultsense_rf.joblib"
33
 
34
  DROP_COLS = ["location"]
35
  TARGET = "faulty"
@@ -39,7 +39,7 @@ NUM_COLS = ["temperature", "pressure", "vibration", "humidity"]
39
  RANDOM_STATE = 42
40
  THRESHOLD = 0.5
41
 
42
- LGBM_PARAMS = dict(
43
  max_depth=8,
44
  num_leaves=50,
45
  min_child_samples=20,
@@ -48,24 +48,14 @@ LGBM_PARAMS = dict(
48
  class_weight="balanced",
49
  random_state=RANDOM_STATE,
50
  verbose=-1,
51
- learning_rate=0.05,
52
- n_estimators=100,
53
- )
54
-
55
- RF_PARAMS = dict(
56
- n_estimators=200,
57
- max_depth=10,
58
- min_samples_split=10,
59
- min_samples_leaf=5,
60
- class_weight="balanced",
61
- random_state=RANDOM_STATE,
62
- n_jobs=-1,
63
  )
64
 
65
  BEST_CONFIG = {
66
- "train_ratio": 0.50,
67
- "val_ratio": 0.20,
68
- "test_ratio": 0.30,
 
 
69
  }
70
 
71
  EQUIPMENT_OPTIONS = ["pump", "compressor", "motor", "valve", "sensor"]
@@ -80,11 +70,13 @@ def make_preprocessor():
80
  ("num", "passthrough", NUM_COLS),
81
  ])
82
 
83
- def load_data(cfg):
 
84
  df_raw = pd.read_csv(DATA_PATH)
85
  df_raw = df_raw.drop(columns=DROP_COLS, errors="ignore")
86
  X = df_raw.drop(columns=[TARGET])
87
  y = df_raw[TARGET]
 
88
  train_r, val_r, test_r = cfg["train_ratio"], cfg["val_ratio"], cfg["test_ratio"]
89
  X_trainval, X_test, y_trainval, y_test = train_test_split(
90
  X, y, test_size=test_r, stratify=y, random_state=RANDOM_STATE
@@ -94,70 +86,43 @@ def load_data(cfg):
94
  X_trainval, y_trainval, test_size=val_relative,
95
  stratify=y_trainval, random_state=RANDOM_STATE
96
  )
97
- return X_train, X_val, X_test, y_train, y_val, y_test
98
 
99
- def compute_metrics(pipeline, X_test, y_test):
 
 
 
 
 
 
 
 
 
100
  y_prob = pipeline.predict_proba(X_test)[:, 1]
101
  y_pred = (y_prob >= THRESHOLD).astype(int)
102
- return {
 
103
  "test_auc": round(roc_auc_score(y_test, y_prob), 4),
104
  "test_accuracy": round(accuracy_score(y_test, y_pred), 4),
105
  "test_precision": round(precision_score(y_test, y_pred, zero_division=0), 4),
106
  "test_recall": round(recall_score(y_test, y_pred, zero_division=0), 4),
107
  "test_f1": round(f1_score(y_test, y_pred, zero_division=0), 4),
108
  "test_logloss": round(log_loss(y_test, y_prob), 4),
109
- }, confusion_matrix(y_test, y_pred).tolist()
110
-
111
- def train_lgbm(X_train, X_test, y_train, y_test):
112
- print("Training LightGBM...")
113
- pipeline = Pipeline([
114
- ("pre", make_preprocessor()),
115
- ("clf", LGBMClassifier(**LGBM_PARAMS))
116
- ])
117
- pipeline.fit(X_train, y_train)
118
- metrics, cm = compute_metrics(pipeline, X_test, y_test)
119
- print(f"LGBM AUC={metrics['test_auc']} F1={metrics['test_f1']}")
120
- return {"pipeline": pipeline, "test_metrics": metrics, "cm": cm,
121
- "config": {**BEST_CONFIG, "model": "LightGBM",
122
- "learning_rate": LGBM_PARAMS["learning_rate"],
123
- "n_estimators": LGBM_PARAMS["n_estimators"]}}
124
-
125
- def train_rf(X_train, X_test, y_train, y_test):
126
- print("Training Random Forest...")
127
- pipeline = Pipeline([
128
- ("pre", make_preprocessor()),
129
- ("clf", RandomForestClassifier(**RF_PARAMS))
130
- ])
131
- pipeline.fit(X_train, y_train)
132
- metrics, cm = compute_metrics(pipeline, X_test, y_test)
133
- print(f"RF AUC={metrics['test_auc']} F1={metrics['test_f1']}")
134
- return {"pipeline": pipeline, "test_metrics": metrics, "cm": cm,
135
- "config": {**BEST_CONFIG, "model": "Random Forest",
136
- "n_estimators": RF_PARAMS["n_estimators"],
137
- "max_depth": RF_PARAMS["max_depth"]}}
138
-
139
- def load_or_train_all():
140
- X_train, X_val, X_test, y_train, y_val, y_test = load_data(BEST_CONFIG)
141
- if os.path.exists(LGBM_PATH):
142
- print(f"Loading LGBM from {LGBM_PATH}")
143
- lgbm_artifact = joblib.load(LGBM_PATH)
144
- else:
145
- lgbm_artifact = train_lgbm(X_train, X_test, y_train, y_test)
146
- joblib.dump(lgbm_artifact, LGBM_PATH)
147
-
148
- if os.path.exists(RF_PATH):
149
- print(f"Loading RF from {RF_PATH}")
150
- rf_artifact = joblib.load(RF_PATH)
151
- else:
152
- rf_artifact = train_rf(X_train, X_test, y_train, y_test)
153
- joblib.dump(rf_artifact, RF_PATH)
154
-
155
- return {"lgbm": lgbm_artifact, "rf": rf_artifact}
156
 
157
  # ─────────────────────────────────────────────
158
- # LOAD MODELS AT MODULE LEVEL
159
  # ─────────────────────────────────────────────
160
- ARTIFACTS = load_or_train_all()
161
 
162
  # ─────────────────────────────────────────────
163
  # FLASK APP
@@ -177,8 +142,7 @@ HTML = r"""<!DOCTYPE html>
177
  :root {
178
  --bg: #0a0c10; --surface: #111318; --surface2: #181c24;
179
  --border: #232838; --accent: #00e5a0; --accent2: #ff4d6d;
180
- --accent3: #4d9fff; --accent4: #f59e0b;
181
- --text: #e8eaf0; --muted: #6b7280;
182
  --mono: 'Space Mono', monospace; --sans: 'DM Sans', sans-serif;
183
  }
184
  html { font-size: 16px; }
@@ -192,30 +156,14 @@ body::before {
192
  .blob-1 { background: var(--accent); top: -200px; left: -200px; }
193
  .blob-2 { background: var(--accent3); bottom: -200px; right: -100px; animation-delay: -6s; }
194
  @keyframes drift { from { transform: translate(0,0) scale(1); } to { transform: translate(40px,30px) scale(1.05); } }
195
- .wrapper { position: relative; z-index: 1; max-width: 1200px; margin: 0 auto; padding: 40px 24px 80px; }
196
- header { display: flex; align-items: center; gap: 16px; margin-bottom: 32px; border-bottom: 1px solid var(--border); padding-bottom: 24px; }
197
  .logo-mark { width: 44px; height: 44px; background: var(--accent); border-radius: 10px; display: grid; place-items: center; font-family: var(--mono); font-weight: 700; font-size: 18px; color: var(--bg); flex-shrink: 0; }
198
  header h1 { font-family: var(--mono); font-size: 1.5rem; letter-spacing: -.5px; }
199
  header p { font-size: .85rem; color: var(--muted); margin-top: 2px; }
200
  .badge { margin-left: auto; font-family: var(--mono); font-size: .7rem; background: rgba(0,229,160,.12); color: var(--accent); border: 1px solid rgba(0,229,160,.3); border-radius: 6px; padding: 4px 10px; white-space: nowrap; }
201
-
202
- /* MODEL SELECTOR TABS */
203
- .model-tabs { display: flex; gap: 10px; margin-bottom: 24px; }
204
- .model-tab {
205
- flex: 1; padding: 14px 20px; border-radius: 12px; border: 1px solid var(--border);
206
- background: var(--surface); cursor: pointer; font-family: var(--mono);
207
- font-size: .8rem; color: var(--muted); transition: all .2s; text-align: center;
208
- display: flex; flex-direction: column; gap: 4px; align-items: center;
209
- }
210
- .model-tab:hover { border-color: var(--accent); color: var(--text); }
211
- .model-tab.active.lgbm { border-color: var(--accent); background: rgba(0,229,160,.08); color: var(--accent); }
212
- .model-tab.active.rf { border-color: var(--accent4); background: rgba(245,158,11,.08); color: var(--accent4); }
213
- .model-tab .tab-name { font-size: .95rem; font-weight: 700; }
214
- .model-tab .tab-desc { font-size: .65rem; color: inherit; opacity: .7; }
215
- .tab-auc { font-size: .7rem; opacity: .85; margin-top: 2px; }
216
-
217
- .main-grid { display: grid; grid-template-columns: 1fr 400px; gap: 24px; align-items: start; }
218
- @media (max-width: 900px) { .main-grid { grid-template-columns: 1fr; } }
219
  .card { background: var(--surface); border: 1px solid var(--border); border-radius: 16px; padding: 28px; }
220
  .card-title { font-family: var(--mono); font-size: .75rem; letter-spacing: 1.5px; text-transform: uppercase; color: var(--muted); margin-bottom: 20px; display: flex; align-items: center; gap: 8px; }
221
  .card-title::before { content: ''; display: inline-block; width: 6px; height: 6px; background: var(--accent); border-radius: 50%; }
@@ -257,23 +205,16 @@ input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 16px;
257
  input[type=range]::-webkit-slider-thumb:hover { transform: scale(1.3); }
258
  input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: var(--accent); border: none; }
259
  .slider-val { font-family: var(--mono); font-size: .85rem; color: var(--accent); min-width: 60px; text-align: right; }
260
-
261
  .btn-predict { margin-top: 24px; width: 100%; padding: 14px; background: var(--accent); color: var(--bg); border: none; border-radius: 12px; font-family: var(--mono); font-size: 1rem; font-weight: 700; letter-spacing: 1px; cursor: pointer; transition: transform .15s, box-shadow .2s; }
262
  .btn-predict:hover { transform: translateY(-2px); box-shadow: 0 0 32px rgba(0,229,160,.5); }
263
- .btn-predict.rf-active { background: var(--accent4); }
264
- .btn-predict.rf-active:hover { box-shadow: 0 0 32px rgba(245,158,11,.5); }
265
- .btn-predict:disabled { background: var(--muted); cursor: not-allowed; transform: none; box-shadow: none; }
266
-
267
  .result-card { border-radius: 16px; padding: 28px; border: 1px solid var(--border); background: var(--surface); transition: border-color .4s; }
268
  .result-card.faulty { border-color: var(--accent2); background: rgba(255,77,109,.06); }
269
  .result-card.healthy { border-color: var(--accent); background: rgba(0,229,160,.06); }
270
  .verdict { font-family: var(--mono); font-size: 2rem; font-weight: 700; letter-spacing: -1px; margin-bottom: 6px; }
271
  .verdict.faulty { color: var(--accent2); }
272
  .verdict.healthy { color: var(--accent); }
273
- .verdict-sub { font-size: .85rem; color: var(--muted); margin-bottom: 8px; }
274
- .model-used-tag { display: inline-block; font-family: var(--mono); font-size: .65rem; padding: 3px 8px; border-radius: 6px; margin-bottom: 20px; }
275
- .model-used-tag.lgbm { background: rgba(0,229,160,.12); color: var(--accent); border: 1px solid rgba(0,229,160,.3); }
276
- .model-used-tag.rf { background: rgba(245,158,11,.12); color: var(--accent4); border: 1px solid rgba(245,158,11,.3); }
277
  .prob-bar-wrap { margin-bottom: 24px; }
278
  .prob-label { font-family: var(--mono); font-size: .72rem; color: var(--muted); margin-bottom: 6px; display: flex; justify-content: space-between; }
279
  .prob-track { height: 10px; background: var(--border); border-radius: 10px; overflow: hidden; }
@@ -284,39 +225,17 @@ input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius:
284
  .mini-metric { background: var(--surface2); border-radius: 10px; padding: 12px; border: 1px solid var(--border); }
285
  .mini-metric .mm-val { font-family: var(--mono); font-size: 1.1rem; font-weight: 700; color: var(--accent3); }
286
  .mini-metric .mm-key { font-size: .7rem; color: var(--muted); margin-top: 2px; font-family: var(--mono); }
287
-
288
- /* METRICS COMPARISON TABLE */
289
- .compare-table { width: 100%; border-collapse: collapse; }
290
- .compare-table th { font-family: var(--mono); font-size: .65rem; letter-spacing: 1px; text-transform: uppercase; color: var(--muted); padding: 8px 10px; text-align: left; border-bottom: 1px solid var(--border); }
291
- .compare-table th.lgbm-col { color: var(--accent); }
292
- .compare-table th.rf-col { color: var(--accent4); }
293
- .compare-table td { font-family: var(--mono); font-size: .78rem; padding: 9px 10px; border-bottom: 1px solid var(--border); }
294
- .compare-table tr:last-child td { border-bottom: none; }
295
- .compare-table td.metric-name { color: var(--muted); font-size: .7rem; }
296
- .compare-table td.win { font-weight: 700; }
297
- .compare-table td.win.lgbm { color: var(--accent); }
298
- .compare-table td.win.rf { color: var(--accent4); }
299
- .win-tag { font-size: .55rem; padding: 1px 5px; border-radius: 4px; margin-left: 5px; vertical-align: middle; }
300
- .win-tag.lgbm { background: rgba(0,229,160,.15); color: var(--accent); }
301
- .win-tag.rf { background: rgba(245,158,11,.15); color: var(--accent4); }
302
-
303
  .info-row { display: flex; justify-content: space-between; align-items: center; padding: 9px 0; border-bottom: 1px solid var(--border); font-size: .82rem; }
304
  .info-row:last-child { border-bottom: none; }
305
  .info-key { color: var(--muted); font-family: var(--mono); font-size: .72rem; }
306
  .info-val { font-family: var(--mono); color: var(--text); font-weight: 700; }
307
  .info-val.green { color: var(--accent); }
308
- .info-val.amber { color: var(--accent4); }
309
-
310
  .history-list { max-height: 260px; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
311
  .hist-item { background: var(--surface2); border: 1px solid var(--border); border-radius: 10px; padding: 10px 14px; display: flex; justify-content: space-between; align-items: center; font-size: .78rem; }
312
  .hist-equip { color: var(--muted); font-family: var(--mono); font-size: .7rem; }
313
  .hist-badge { font-family: var(--mono); font-size: .68rem; padding: 3px 8px; border-radius: 6px; font-weight: 700; }
314
  .hist-badge.faulty { background: rgba(255,77,109,.2); color: var(--accent2); }
315
  .hist-badge.healthy { background: rgba(0,229,160,.2); color: var(--accent); }
316
- .hist-model-tag { font-family: var(--mono); font-size: .58rem; padding: 2px 6px; border-radius: 4px; margin-top: 3px; display: inline-block; }
317
- .hist-model-tag.lgbm { background: rgba(0,229,160,.1); color: var(--accent); }
318
- .hist-model-tag.rf { background: rgba(245,158,11,.1); color: var(--accent4); }
319
-
320
  .spinner { display: none; width: 20px; height: 20px; border: 2px solid rgba(10,12,16,.3); border-top-color: var(--bg); border-radius: 50%; animation: spin .6s linear infinite; margin: 0 auto; }
321
  @keyframes spin { to { transform: rotate(360deg); } }
322
  .btn-predict.loading .btn-text { display: none; }
@@ -335,25 +254,11 @@ input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius:
335
  <div class="logo-mark">FS</div>
336
  <div>
337
  <h1>FaultSense</h1>
338
- <p>Multi-Model Equipment Fault Predictor</p>
339
  </div>
340
- <div class="badge" id="model-badge">Loading Models…</div>
341
  </header>
342
 
343
- <!-- MODEL SELECTOR TABS -->
344
- <div class="model-tabs" id="model-tabs">
345
- <div class="model-tab active lgbm" id="tab-lgbm" onclick="selectModel('lgbm')">
346
- <span class="tab-name">⚡ LightGBM</span>
347
- <span class="tab-desc">Gradient Boosting</span>
348
- <span class="tab-auc" id="lgbm-tab-auc">Loading…</span>
349
- </div>
350
- <div class="model-tab rf" id="tab-rf" onclick="selectModel('rf')">
351
- <span class="tab-name">🌲 Random Forest</span>
352
- <span class="tab-desc">Ensemble Trees</span>
353
- <span class="tab-auc" id="rf-tab-auc">Loading…</span>
354
- </div>
355
- </div>
356
-
357
  <div class="main-grid">
358
  <div style="display:flex;flex-direction:column;gap:20px;">
359
  <div class="card">
@@ -415,20 +320,12 @@ input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius:
415
  </div>
416
 
417
  </div>
418
- <button class="btn-predict lgbm-active" id="predict-btn" onclick="runPredict()">
419
  <span class="btn-text">⚡ Run Prediction</span>
420
  <div class="spinner"></div>
421
  </button>
422
  </div>
423
 
424
- <!-- METRICS COMPARISON -->
425
- <div class="card">
426
- <div class="card-title">Model Comparison</div>
427
- <div id="compare-content">
428
- <div style="color:var(--muted);font-size:.8rem;font-family:var(--mono);text-align:center;padding:12px 0;">Loading…</div>
429
- </div>
430
- </div>
431
-
432
  <div class="card">
433
  <div class="card-title">Prediction History</div>
434
  <div class="history-list" id="history-list">
@@ -441,12 +338,11 @@ input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius:
441
  <div class="result-card" id="result-card">
442
  <div class="idle-state" id="idle-state">
443
  <div class="idle-icon">🔬</div>
444
- <p>Select a model, enter sensor<br>readings, and run a prediction<br>to see results here.</p>
445
  </div>
446
  <div id="result-content" style="display:none;">
447
  <div class="verdict" id="verdict-text"></div>
448
  <div class="verdict-sub" id="verdict-sub"></div>
449
- <div id="model-used-tag" class="model-used-tag lgbm"></div>
450
  <div class="prob-bar-wrap">
451
  <div class="prob-label"><span>Fault Probability</span><span id="prob-pct"></span></div>
452
  <div class="prob-track"><div class="prob-fill" id="prob-fill" style="width:0%"></div></div>
@@ -456,7 +352,7 @@ input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius:
456
  </div>
457
 
458
  <div class="card">
459
- <div class="card-title" id="model-config-title">Active Model Config</div>
460
  <div id="model-info">
461
  <div style="color:var(--muted);font-size:.8rem;font-family:var(--mono);text-align:center;padding:12px 0;">Loading…</div>
462
  </div>
@@ -469,19 +365,6 @@ input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius:
469
 
470
  <script>
471
  let csOpen = false;
472
- let activeModel = 'lgbm';
473
- let modelData = {};
474
-
475
- function selectModel(model) {
476
- activeModel = model;
477
- document.getElementById('tab-lgbm').className = 'model-tab' + (model === 'lgbm' ? ' active lgbm' : '');
478
- document.getElementById('tab-rf').className = 'model-tab' + (model === 'rf' ? ' active rf' : '');
479
- const btn = document.getElementById('predict-btn');
480
- btn.className = model === 'lgbm' ? 'btn-predict lgbm-active' : 'btn-predict rf-active';
481
- btn.querySelector('.btn-text').textContent = model === 'lgbm' ? '⚡ Run Prediction' : '🌲 Run Prediction';
482
- updateModelInfo(model);
483
- }
484
-
485
  function toggleDropdown() {
486
  csOpen = !csOpen;
487
  document.getElementById('cs-trigger').classList.toggle('open', csOpen);
@@ -503,86 +386,30 @@ document.addEventListener('click', function(e) {
503
  document.getElementById('cs-options').classList.remove('open');
504
  }
505
  });
506
-
507
  async function loadModelInfo() {
508
  try {
509
  const res = await fetch('/model_info');
510
- modelData = await res.json();
511
- if (modelData.error) { showToast('Model error: ' + modelData.error); return; }
512
-
513
- const lg = modelData.lgbm, rf = modelData.rf;
514
- document.getElementById('lgbm-tab-auc').textContent = 'AUC ' + (lg.test_metrics.test_auc * 100).toFixed(1) + '%';
515
- document.getElementById('rf-tab-auc').textContent = 'AUC ' + (rf.test_metrics.test_auc * 100).toFixed(1) + '%';
516
- document.getElementById('model-badge').textContent = '2 Models Ready';
517
-
518
- // Build comparison table
519
- const metrics = [
520
- ['AUC', 'test_auc'],
521
- ['Accuracy', 'test_accuracy'],
522
- ['Precision', 'test_precision'],
523
- ['Recall', 'test_recall'],
524
- ['F1 Score', 'test_f1'],
525
- ['Log Loss', 'test_logloss'],
526
  ];
527
- const rows = metrics.map(([label, key]) => {
528
- const lv = lg.test_metrics[key], rv = rf.test_metrics[key];
529
- const higherBetter = key !== 'test_logloss';
530
- const lgWins = higherBetter ? lv > rv : lv < rv;
531
- const rfWins = higherBetter ? rv > lv : rv < lv;
532
- const fmt = v => key === 'test_logloss' ? v.toFixed(4) : (v * 100).toFixed(2) + '%';
533
- return `<tr>
534
- <td class="metric-name">${label}</td>
535
- <td class="${lgWins ? 'win lgbm' : ''}">${fmt(lv)}${lgWins ? '<span class="win-tag lgbm">▲</span>' : ''}</td>
536
- <td class="${rfWins ? 'win rf' : ''}">${fmt(rv)}${rfWins ? '<span class="win-tag rf">▲</span>' : ''}</td>
537
- </tr>`;
538
- }).join('');
539
- document.getElementById('compare-content').innerHTML = `
540
- <table class="compare-table">
541
- <thead><tr>
542
- <th>Metric</th>
543
- <th class="lgbm-col">⚡ LightGBM</th>
544
- <th class="rf-col">🌲 Random Forest</th>
545
- </tr></thead>
546
- <tbody>${rows}</tbody>
547
- </table>`;
548
-
549
- updateModelInfo('lgbm');
550
- } catch(e) {
551
- document.getElementById('model-badge').textContent = 'Load Error';
552
- }
553
- }
554
-
555
- function updateModelInfo(model) {
556
- if (!modelData[model]) return;
557
- const d = modelData[model];
558
- const isLgbm = model === 'lgbm';
559
- const color = isLgbm ? 'green' : 'amber';
560
-
561
- const rows = isLgbm ? [
562
- ['Model', 'LightGBM'],
563
- ['Learning Rate', d.config.learning_rate],
564
- ['N Estimators', d.config.n_estimators],
565
- ['Split', d.config.train_ratio + '/' + d.config.val_ratio + '/' + d.config.test_ratio],
566
- ] : [
567
- ['Model', 'Random Forest'],
568
- ['N Estimators', d.config.n_estimators],
569
- ['Max Depth', d.config.max_depth],
570
- ['Split', d.config.train_ratio + '/' + d.config.val_ratio + '/' + d.config.test_ratio],
571
- ];
572
-
573
- const metricRows = [
574
- ['Test AUC', (d.test_metrics.test_auc * 100).toFixed(2) + '%'],
575
- ['Test F1', (d.test_metrics.test_f1 * 100).toFixed(2) + '%'],
576
- ['Test Accuracy', (d.test_metrics.test_accuracy * 100).toFixed(2) + '%'],
577
- ['Precision', (d.test_metrics.test_precision * 100).toFixed(2) + '%'],
578
- ['Recall', (d.test_metrics.test_recall * 100).toFixed(2) + '%'],
579
- ];
580
-
581
- document.getElementById('model-info').innerHTML =
582
- [...rows, ...metricRows].map(([k, v], i) =>
583
  '<div class="info-row"><span class="info-key">' + k + '</span>' +
584
- '<span class="info-val' + (i >= rows.length ? ' ' + color : '') + '">' + v + '</span></div>'
585
  ).join('');
 
 
 
586
  }
587
 
588
  async function runPredict() {
@@ -590,7 +417,6 @@ async function runPredict() {
590
  btn.classList.add('loading');
591
  btn.disabled = true;
592
  const payload = {
593
- model: activeModel,
594
  equipment: document.getElementById('equipment').value,
595
  temperature: parseFloat(document.getElementById('temperature').value),
596
  pressure: parseFloat(document.getElementById('pressure').value),
@@ -619,7 +445,6 @@ function showResult(data, payload) {
619
  const isFaulty = data.prediction === 1;
620
  const prob = (data.probability * 100).toFixed(1);
621
  const cls = isFaulty ? 'faulty' : 'healthy';
622
- const isLgbm = data.model === 'lgbm';
623
  document.getElementById('result-card').className = 'result-card ' + cls;
624
  document.getElementById('idle-state').style.display = 'none';
625
  document.getElementById('result-content').style.display = 'block';
@@ -629,9 +454,6 @@ function showResult(data, payload) {
629
  document.getElementById('verdict-sub').textContent = isFaulty
630
  ? 'High fault probability — immediate inspection recommended.'
631
  : 'Equipment readings within normal operating range.';
632
- const tag = document.getElementById('model-used-tag');
633
- tag.className = 'model-used-tag ' + (isLgbm ? 'lgbm' : 'rf');
634
- tag.textContent = isLgbm ? '⚡ LightGBM' : '🌲 Random Forest';
635
  document.getElementById('prob-pct').textContent = prob + '%';
636
  const fill = document.getElementById('prob-fill');
637
  fill.className = 'prob-fill ' + cls;
@@ -649,17 +471,13 @@ function showResult(data, payload) {
649
  function addHistory(data, payload) {
650
  const isFaulty = data.prediction === 1;
651
  const cls = isFaulty ? 'faulty' : 'healthy';
652
- const isLgbm = data.model === 'lgbm';
653
  const list = document.getElementById('history-list');
654
- if (list.children.length === 1 && list.firstElementChild.style.color !== undefined
655
- && list.firstElementChild.querySelector) list.innerHTML = '';
656
- if (list.children.length === 1 && !list.firstElementChild.classList.contains('hist-item')) list.innerHTML = '';
657
  const item = document.createElement('div');
658
  item.className = 'hist-item';
659
  item.innerHTML =
660
  '<div><div style="font-family:var(--mono);font-size:.78rem;">' + payload.equipment + '</div>' +
661
- '<div class="hist-equip">T=' + payload.temperature + '° P=' + payload.pressure + 'bar V=' + payload.vibration + '</div>' +
662
- '<span class="hist-model-tag ' + (isLgbm ? 'lgbm' : 'rf') + '">' + (isLgbm ? '⚡ LGBM' : '🌲 RF') + '</span></div>' +
663
  '<span class="hist-badge ' + cls + '">' + (isFaulty ? 'FAULT' : 'OK') + ' · ' + (data.probability*100).toFixed(1) + '%</span>';
664
  list.prepend(item);
665
  if (list.children.length > 20) list.removeChild(list.lastChild);
@@ -684,30 +502,24 @@ loadModelInfo();
684
 
685
  @app.route("/")
686
  def index():
687
- return render_template_string(HTML)
 
 
 
 
688
 
689
  @app.route("/model_info")
690
  def model_info():
 
691
  return jsonify({
692
- "lgbm": {
693
- "config": ARTIFACTS["lgbm"]["config"],
694
- "test_metrics": ARTIFACTS["lgbm"]["test_metrics"],
695
- "cm": ARTIFACTS["lgbm"]["cm"],
696
- },
697
- "rf": {
698
- "config": ARTIFACTS["rf"]["config"],
699
- "test_metrics": ARTIFACTS["rf"]["test_metrics"],
700
- "cm": ARTIFACTS["rf"]["cm"],
701
- },
702
  })
703
 
704
  @app.route("/predict", methods=["POST"])
705
  def predict():
706
  body = request.get_json(force=True)
707
- model_key = body.get("model", "lgbm")
708
- if model_key not in ARTIFACTS:
709
- return jsonify({"error": f"Unknown model '{model_key}'. Use 'lgbm' or 'rf'."}), 400
710
-
711
  try:
712
  row = pd.DataFrame([{
713
  "equipment": body["equipment"],
@@ -719,13 +531,11 @@ def predict():
719
  except (KeyError, ValueError) as e:
720
  return jsonify({"error": f"Bad input: {e}"}), 400
721
 
722
- artifact = ARTIFACTS[model_key]
723
- prob = float(artifact["pipeline"].predict_proba(row)[0, 1])
724
  pred = int(prob >= THRESHOLD)
725
  confidence = "HIGH" if prob > 0.85 or prob < 0.15 else "MEDIUM" if prob > 0.65 or prob < 0.35 else "LOW"
726
 
727
  return jsonify({
728
- "model": model_key,
729
  "prediction": pred,
730
  "probability": round(prob, 4),
731
  "confidence": confidence,
 
1
  """
2
+ FaultSense — LightGBM Fault Prediction App
3
+ Fixes applied:
4
+ 1. Model loads at module level so gunicorn workers pick it up
5
+ 2. Select dropdown works cross-platform
6
  """
7
 
8
  import os
 
20
  from sklearn.preprocessing import OneHotEncoder
21
  from sklearn.compose import ColumnTransformer
22
  from sklearn.pipeline import Pipeline
 
23
  import joblib
24
  from lightgbm import LGBMClassifier
25
  from flask import Flask, request, jsonify, render_template_string
 
29
  # ─────────────────────────────────────────────
30
 
31
  DATA_PATH = "synthetic_nim_parallel_10000.csv"
32
+ MODEL_PATH = "/tmp/faultsense_model.joblib"
 
33
 
34
  DROP_COLS = ["location"]
35
  TARGET = "faulty"
 
39
  RANDOM_STATE = 42
40
  THRESHOLD = 0.5
41
 
42
+ FIXED_PARAMS = dict(
43
  max_depth=8,
44
  num_leaves=50,
45
  min_child_samples=20,
 
48
  class_weight="balanced",
49
  random_state=RANDOM_STATE,
50
  verbose=-1,
 
 
 
 
 
 
 
 
 
 
 
 
51
  )
52
 
53
  BEST_CONFIG = {
54
+ "learning_rate": 0.05,
55
+ "n_estimators": 10,
56
+ "train_ratio": 0.50,
57
+ "val_ratio": 0.20,
58
+ "test_ratio": 0.30,
59
  }
60
 
61
  EQUIPMENT_OPTIONS = ["pump", "compressor", "motor", "valve", "sensor"]
 
70
  ("num", "passthrough", NUM_COLS),
71
  ])
72
 
73
+ def train_model(cfg: dict):
74
+ print(f"Training: lr={cfg['learning_rate']}, n_est={cfg['n_estimators']}")
75
  df_raw = pd.read_csv(DATA_PATH)
76
  df_raw = df_raw.drop(columns=DROP_COLS, errors="ignore")
77
  X = df_raw.drop(columns=[TARGET])
78
  y = df_raw[TARGET]
79
+
80
  train_r, val_r, test_r = cfg["train_ratio"], cfg["val_ratio"], cfg["test_ratio"]
81
  X_trainval, X_test, y_trainval, y_test = train_test_split(
82
  X, y, test_size=test_r, stratify=y, random_state=RANDOM_STATE
 
86
  X_trainval, y_trainval, test_size=val_relative,
87
  stratify=y_trainval, random_state=RANDOM_STATE
88
  )
 
89
 
90
+ pipeline = Pipeline([
91
+ ("pre", make_preprocessor()),
92
+ ("clf", LGBMClassifier(
93
+ n_estimators=cfg["n_estimators"],
94
+ learning_rate=cfg["learning_rate"],
95
+ **FIXED_PARAMS
96
+ ))
97
+ ])
98
+ pipeline.fit(X_train, y_train)
99
+
100
  y_prob = pipeline.predict_proba(X_test)[:, 1]
101
  y_pred = (y_prob >= THRESHOLD).astype(int)
102
+
103
+ test_metrics = {
104
  "test_auc": round(roc_auc_score(y_test, y_prob), 4),
105
  "test_accuracy": round(accuracy_score(y_test, y_pred), 4),
106
  "test_precision": round(precision_score(y_test, y_pred, zero_division=0), 4),
107
  "test_recall": round(recall_score(y_test, y_pred, zero_division=0), 4),
108
  "test_f1": round(f1_score(y_test, y_pred, zero_division=0), 4),
109
  "test_logloss": round(log_loss(y_test, y_prob), 4),
110
+ }
111
+ cm = confusion_matrix(y_test, y_pred).tolist()
112
+ artifact = {"pipeline": pipeline, "config": cfg, "test_metrics": test_metrics, "cm": cm}
113
+ print(f"Model saved → {MODEL_PATH} AUC={test_metrics['test_auc']} F1={test_metrics['test_f1']}")
114
+ return artifact
115
+
116
+ def load_or_train():
117
+ if os.path.exists(MODEL_PATH):
118
+ print(f"Loading saved model from {MODEL_PATH}")
119
+ return joblib.load(MODEL_PATH)
120
+ return train_model(BEST_CONFIG)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
 
122
  # ─────────────────────────────────────────────
123
+ # LOAD MODEL AT MODULE LEVEL (runs under gunicorn)
124
  # ─────────────────────────────────────────────
125
+ ARTIFACT = load_or_train()
126
 
127
  # ─────────────────────────────────────────────
128
  # FLASK APP
 
142
  :root {
143
  --bg: #0a0c10; --surface: #111318; --surface2: #181c24;
144
  --border: #232838; --accent: #00e5a0; --accent2: #ff4d6d;
145
+ --accent3: #4d9fff; --text: #e8eaf0; --muted: #6b7280;
 
146
  --mono: 'Space Mono', monospace; --sans: 'DM Sans', sans-serif;
147
  }
148
  html { font-size: 16px; }
 
156
  .blob-1 { background: var(--accent); top: -200px; left: -200px; }
157
  .blob-2 { background: var(--accent3); bottom: -200px; right: -100px; animation-delay: -6s; }
158
  @keyframes drift { from { transform: translate(0,0) scale(1); } to { transform: translate(40px,30px) scale(1.05); } }
159
+ .wrapper { position: relative; z-index: 1; max-width: 1100px; margin: 0 auto; padding: 40px 24px 80px; }
160
+ header { display: flex; align-items: center; gap: 16px; margin-bottom: 48px; border-bottom: 1px solid var(--border); padding-bottom: 24px; }
161
  .logo-mark { width: 44px; height: 44px; background: var(--accent); border-radius: 10px; display: grid; place-items: center; font-family: var(--mono); font-weight: 700; font-size: 18px; color: var(--bg); flex-shrink: 0; }
162
  header h1 { font-family: var(--mono); font-size: 1.5rem; letter-spacing: -.5px; }
163
  header p { font-size: .85rem; color: var(--muted); margin-top: 2px; }
164
  .badge { margin-left: auto; font-family: var(--mono); font-size: .7rem; background: rgba(0,229,160,.12); color: var(--accent); border: 1px solid rgba(0,229,160,.3); border-radius: 6px; padding: 4px 10px; white-space: nowrap; }
165
+ .main-grid { display: grid; grid-template-columns: 1fr 380px; gap: 24px; align-items: start; }
166
+ @media (max-width: 860px) { .main-grid { grid-template-columns: 1fr; } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  .card { background: var(--surface); border: 1px solid var(--border); border-radius: 16px; padding: 28px; }
168
  .card-title { font-family: var(--mono); font-size: .75rem; letter-spacing: 1.5px; text-transform: uppercase; color: var(--muted); margin-bottom: 20px; display: flex; align-items: center; gap: 8px; }
169
  .card-title::before { content: ''; display: inline-block; width: 6px; height: 6px; background: var(--accent); border-radius: 50%; }
 
205
  input[type=range]::-webkit-slider-thumb:hover { transform: scale(1.3); }
206
  input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: var(--accent); border: none; }
207
  .slider-val { font-family: var(--mono); font-size: .85rem; color: var(--accent); min-width: 60px; text-align: right; }
 
208
  .btn-predict { margin-top: 24px; width: 100%; padding: 14px; background: var(--accent); color: var(--bg); border: none; border-radius: 12px; font-family: var(--mono); font-size: 1rem; font-weight: 700; letter-spacing: 1px; cursor: pointer; transition: transform .15s, box-shadow .2s; }
209
  .btn-predict:hover { transform: translateY(-2px); box-shadow: 0 0 32px rgba(0,229,160,.5); }
210
+ .btn-predict:disabled { background: var(--muted); cursor: not-allowed; transform: none; }
 
 
 
211
  .result-card { border-radius: 16px; padding: 28px; border: 1px solid var(--border); background: var(--surface); transition: border-color .4s; }
212
  .result-card.faulty { border-color: var(--accent2); background: rgba(255,77,109,.06); }
213
  .result-card.healthy { border-color: var(--accent); background: rgba(0,229,160,.06); }
214
  .verdict { font-family: var(--mono); font-size: 2rem; font-weight: 700; letter-spacing: -1px; margin-bottom: 6px; }
215
  .verdict.faulty { color: var(--accent2); }
216
  .verdict.healthy { color: var(--accent); }
217
+ .verdict-sub { font-size: .85rem; color: var(--muted); margin-bottom: 24px; }
 
 
 
218
  .prob-bar-wrap { margin-bottom: 24px; }
219
  .prob-label { font-family: var(--mono); font-size: .72rem; color: var(--muted); margin-bottom: 6px; display: flex; justify-content: space-between; }
220
  .prob-track { height: 10px; background: var(--border); border-radius: 10px; overflow: hidden; }
 
225
  .mini-metric { background: var(--surface2); border-radius: 10px; padding: 12px; border: 1px solid var(--border); }
226
  .mini-metric .mm-val { font-family: var(--mono); font-size: 1.1rem; font-weight: 700; color: var(--accent3); }
227
  .mini-metric .mm-key { font-size: .7rem; color: var(--muted); margin-top: 2px; font-family: var(--mono); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  .info-row { display: flex; justify-content: space-between; align-items: center; padding: 9px 0; border-bottom: 1px solid var(--border); font-size: .82rem; }
229
  .info-row:last-child { border-bottom: none; }
230
  .info-key { color: var(--muted); font-family: var(--mono); font-size: .72rem; }
231
  .info-val { font-family: var(--mono); color: var(--text); font-weight: 700; }
232
  .info-val.green { color: var(--accent); }
 
 
233
  .history-list { max-height: 260px; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
234
  .hist-item { background: var(--surface2); border: 1px solid var(--border); border-radius: 10px; padding: 10px 14px; display: flex; justify-content: space-between; align-items: center; font-size: .78rem; }
235
  .hist-equip { color: var(--muted); font-family: var(--mono); font-size: .7rem; }
236
  .hist-badge { font-family: var(--mono); font-size: .68rem; padding: 3px 8px; border-radius: 6px; font-weight: 700; }
237
  .hist-badge.faulty { background: rgba(255,77,109,.2); color: var(--accent2); }
238
  .hist-badge.healthy { background: rgba(0,229,160,.2); color: var(--accent); }
 
 
 
 
239
  .spinner { display: none; width: 20px; height: 20px; border: 2px solid rgba(10,12,16,.3); border-top-color: var(--bg); border-radius: 50%; animation: spin .6s linear infinite; margin: 0 auto; }
240
  @keyframes spin { to { transform: rotate(360deg); } }
241
  .btn-predict.loading .btn-text { display: none; }
 
254
  <div class="logo-mark">FS</div>
255
  <div>
256
  <h1>FaultSense</h1>
257
+ <p>LightGBM Equipment Fault Predictor</p>
258
  </div>
259
+ <div class="badge" id="model-badge">Model Loading…</div>
260
  </header>
261
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
  <div class="main-grid">
263
  <div style="display:flex;flex-direction:column;gap:20px;">
264
  <div class="card">
 
320
  </div>
321
 
322
  </div>
323
+ <button class="btn-predict" id="predict-btn" onclick="runPredict()">
324
  <span class="btn-text">⚡ Run Prediction</span>
325
  <div class="spinner"></div>
326
  </button>
327
  </div>
328
 
 
 
 
 
 
 
 
 
329
  <div class="card">
330
  <div class="card-title">Prediction History</div>
331
  <div class="history-list" id="history-list">
 
338
  <div class="result-card" id="result-card">
339
  <div class="idle-state" id="idle-state">
340
  <div class="idle-icon">🔬</div>
341
+ <p>Enter sensor readings<br>and run a prediction<br>to see results here.</p>
342
  </div>
343
  <div id="result-content" style="display:none;">
344
  <div class="verdict" id="verdict-text"></div>
345
  <div class="verdict-sub" id="verdict-sub"></div>
 
346
  <div class="prob-bar-wrap">
347
  <div class="prob-label"><span>Fault Probability</span><span id="prob-pct"></span></div>
348
  <div class="prob-track"><div class="prob-fill" id="prob-fill" style="width:0%"></div></div>
 
352
  </div>
353
 
354
  <div class="card">
355
+ <div class="card-title">Model Configuration</div>
356
  <div id="model-info">
357
  <div style="color:var(--muted);font-size:.8rem;font-family:var(--mono);text-align:center;padding:12px 0;">Loading…</div>
358
  </div>
 
365
 
366
  <script>
367
  let csOpen = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
368
  function toggleDropdown() {
369
  csOpen = !csOpen;
370
  document.getElementById('cs-trigger').classList.toggle('open', csOpen);
 
386
  document.getElementById('cs-options').classList.remove('open');
387
  }
388
  });
 
389
  async function loadModelInfo() {
390
  try {
391
  const res = await fetch('/model_info');
392
+ const data = await res.json();
393
+ if (data.error) { showToast('Model not ready: ' + data.error); return; }
394
+ document.getElementById('model-badge').textContent =
395
+ 'LR=' + data.config.learning_rate + ' · N=' + data.config.n_estimators;
396
+ const rows = [
397
+ ['Learning Rate', data.config.learning_rate],
398
+ ['N Estimators', data.config.n_estimators],
399
+ ['Split', data.config.train_ratio + '/' + data.config.val_ratio + '/' + data.config.test_ratio],
400
+ ['Test AUC', (data.test_metrics.test_auc * 100).toFixed(2) + '%'],
401
+ ['Test F1', (data.test_metrics.test_f1 * 100).toFixed(2) + '%'],
402
+ ['Test Accuracy', (data.test_metrics.test_accuracy * 100).toFixed(2) + '%'],
403
+ ['Precision', (data.test_metrics.test_precision* 100).toFixed(2) + '%'],
404
+ ['Recall', (data.test_metrics.test_recall * 100).toFixed(2) + '%'],
 
 
 
405
  ];
406
+ document.getElementById('model-info').innerHTML = rows.map(([k,v],i) =>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
  '<div class="info-row"><span class="info-key">' + k + '</span>' +
408
+ '<span class="info-val' + (i >= 3 ? ' green' : '') + '">' + v + '</span></div>'
409
  ).join('');
410
+ } catch(e) {
411
+ document.getElementById('model-badge').textContent = 'Model Error';
412
+ }
413
  }
414
 
415
  async function runPredict() {
 
417
  btn.classList.add('loading');
418
  btn.disabled = true;
419
  const payload = {
 
420
  equipment: document.getElementById('equipment').value,
421
  temperature: parseFloat(document.getElementById('temperature').value),
422
  pressure: parseFloat(document.getElementById('pressure').value),
 
445
  const isFaulty = data.prediction === 1;
446
  const prob = (data.probability * 100).toFixed(1);
447
  const cls = isFaulty ? 'faulty' : 'healthy';
 
448
  document.getElementById('result-card').className = 'result-card ' + cls;
449
  document.getElementById('idle-state').style.display = 'none';
450
  document.getElementById('result-content').style.display = 'block';
 
454
  document.getElementById('verdict-sub').textContent = isFaulty
455
  ? 'High fault probability — immediate inspection recommended.'
456
  : 'Equipment readings within normal operating range.';
 
 
 
457
  document.getElementById('prob-pct').textContent = prob + '%';
458
  const fill = document.getElementById('prob-fill');
459
  fill.className = 'prob-fill ' + cls;
 
471
  function addHistory(data, payload) {
472
  const isFaulty = data.prediction === 1;
473
  const cls = isFaulty ? 'faulty' : 'healthy';
 
474
  const list = document.getElementById('history-list');
475
+ if (list.children.length === 1 && list.firstElementChild.style.color) list.innerHTML = '';
 
 
476
  const item = document.createElement('div');
477
  item.className = 'hist-item';
478
  item.innerHTML =
479
  '<div><div style="font-family:var(--mono);font-size:.78rem;">' + payload.equipment + '</div>' +
480
+ '<div class="hist-equip">T=' + payload.temperature + '° P=' + payload.pressure + 'bar V=' + payload.vibration + '</div></div>' +
 
481
  '<span class="hist-badge ' + cls + '">' + (isFaulty ? 'FAULT' : 'OK') + ' · ' + (data.probability*100).toFixed(1) + '%</span>';
482
  list.prepend(item);
483
  if (list.children.length > 20) list.removeChild(list.lastChild);
 
502
 
503
  @app.route("/")
504
  def index():
505
+ options = "\n".join(
506
+ f'<option value="{e}">{e.capitalize()}</option>'
507
+ for e in EQUIPMENT_OPTIONS
508
+ )
509
+ return render_template_string(HTML, equipment_options=options)
510
 
511
  @app.route("/model_info")
512
  def model_info():
513
+ cfg = ARTIFACT["config"]
514
  return jsonify({
515
+ "config": cfg,
516
+ "test_metrics": ARTIFACT["test_metrics"],
517
+ "cm": ARTIFACT["cm"],
 
 
 
 
 
 
 
518
  })
519
 
520
  @app.route("/predict", methods=["POST"])
521
  def predict():
522
  body = request.get_json(force=True)
 
 
 
 
523
  try:
524
  row = pd.DataFrame([{
525
  "equipment": body["equipment"],
 
531
  except (KeyError, ValueError) as e:
532
  return jsonify({"error": f"Bad input: {e}"}), 400
533
 
534
+ prob = float(ARTIFACT["pipeline"].predict_proba(row)[0, 1])
 
535
  pred = int(prob >= THRESHOLD)
536
  confidence = "HIGH" if prob > 0.85 or prob < 0.15 else "MEDIUM" if prob > 0.65 or prob < 0.35 else "LOW"
537
 
538
  return jsonify({
 
539
  "prediction": pred,
540
  "probability": round(prob, 4),
541
  "confidence": confidence,
app3.py ADDED
@@ -0,0 +1,738 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ FaultSense — LightGBM + Random Forest Fault Prediction App
3
+ Both models trained at startup; UI lets user switch between them.
4
+ """
5
+
6
+ import os
7
+ import warnings
8
+ import numpy as np
9
+ import pandas as pd
10
+
11
+ warnings.filterwarnings("ignore")
12
+
13
+ from sklearn.model_selection import train_test_split
14
+ from sklearn.metrics import (
15
+ roc_auc_score, accuracy_score, precision_score,
16
+ recall_score, f1_score, log_loss, confusion_matrix
17
+ )
18
+ from sklearn.preprocessing import OneHotEncoder
19
+ from sklearn.compose import ColumnTransformer
20
+ from sklearn.pipeline import Pipeline
21
+ from sklearn.ensemble import RandomForestClassifier
22
+ import joblib
23
+ from lightgbm import LGBMClassifier
24
+ from flask import Flask, request, jsonify, render_template_string
25
+
26
+ # ─────────────────────────────────────────────
27
+ # CONFIG
28
+ # ─────────────────────────────────────────────
29
+
30
+ DATA_PATH = "synthetic_nim_parallel_10000.csv"
31
+ LGBM_PATH = "faultsense_lgbm.joblib"
32
+ RF_PATH = "faultsense_rf.joblib"
33
+
34
+ DROP_COLS = ["location"]
35
+ TARGET = "faulty"
36
+ CAT_COLS = ["equipment"]
37
+ NUM_COLS = ["temperature", "pressure", "vibration", "humidity"]
38
+
39
+ RANDOM_STATE = 42
40
+ THRESHOLD = 0.5
41
+
42
+ LGBM_PARAMS = dict(
43
+ max_depth=8,
44
+ num_leaves=50,
45
+ min_child_samples=20,
46
+ subsample=0.8,
47
+ colsample_bytree=0.8,
48
+ class_weight="balanced",
49
+ random_state=RANDOM_STATE,
50
+ verbose=-1,
51
+ learning_rate=0.05,
52
+ n_estimators=100,
53
+ )
54
+
55
+ RF_PARAMS = dict(
56
+ n_estimators=200,
57
+ max_depth=10,
58
+ min_samples_split=10,
59
+ min_samples_leaf=5,
60
+ class_weight="balanced",
61
+ random_state=RANDOM_STATE,
62
+ n_jobs=-1,
63
+ )
64
+
65
+ BEST_CONFIG = {
66
+ "train_ratio": 0.50,
67
+ "val_ratio": 0.20,
68
+ "test_ratio": 0.30,
69
+ }
70
+
71
+ EQUIPMENT_OPTIONS = ["pump", "compressor", "motor", "valve", "sensor"]
72
+
73
+ # ─────────────────────────────────────────────
74
+ # MODEL TRAINING / LOADING
75
+ # ─────────────────────────────────────────────
76
+
77
+ def make_preprocessor():
78
+ return ColumnTransformer([
79
+ ("cat", OneHotEncoder(handle_unknown="ignore", sparse_output=False), CAT_COLS),
80
+ ("num", "passthrough", NUM_COLS),
81
+ ])
82
+
83
+ def load_data(cfg):
84
+ df_raw = pd.read_csv(DATA_PATH)
85
+ df_raw = df_raw.drop(columns=DROP_COLS, errors="ignore")
86
+ X = df_raw.drop(columns=[TARGET])
87
+ y = df_raw[TARGET]
88
+ train_r, val_r, test_r = cfg["train_ratio"], cfg["val_ratio"], cfg["test_ratio"]
89
+ X_trainval, X_test, y_trainval, y_test = train_test_split(
90
+ X, y, test_size=test_r, stratify=y, random_state=RANDOM_STATE
91
+ )
92
+ val_relative = val_r / (train_r + val_r)
93
+ X_train, X_val, y_train, y_val = train_test_split(
94
+ X_trainval, y_trainval, test_size=val_relative,
95
+ stratify=y_trainval, random_state=RANDOM_STATE
96
+ )
97
+ return X_train, X_val, X_test, y_train, y_val, y_test
98
+
99
+ def compute_metrics(pipeline, X_test, y_test):
100
+ y_prob = pipeline.predict_proba(X_test)[:, 1]
101
+ y_pred = (y_prob >= THRESHOLD).astype(int)
102
+ return {
103
+ "test_auc": round(roc_auc_score(y_test, y_prob), 4),
104
+ "test_accuracy": round(accuracy_score(y_test, y_pred), 4),
105
+ "test_precision": round(precision_score(y_test, y_pred, zero_division=0), 4),
106
+ "test_recall": round(recall_score(y_test, y_pred, zero_division=0), 4),
107
+ "test_f1": round(f1_score(y_test, y_pred, zero_division=0), 4),
108
+ "test_logloss": round(log_loss(y_test, y_prob), 4),
109
+ }, confusion_matrix(y_test, y_pred).tolist()
110
+
111
+ def train_lgbm(X_train, X_test, y_train, y_test):
112
+ print("Training LightGBM...")
113
+ pipeline = Pipeline([
114
+ ("pre", make_preprocessor()),
115
+ ("clf", LGBMClassifier(**LGBM_PARAMS))
116
+ ])
117
+ pipeline.fit(X_train, y_train)
118
+ metrics, cm = compute_metrics(pipeline, X_test, y_test)
119
+ print(f"LGBM AUC={metrics['test_auc']} F1={metrics['test_f1']}")
120
+ return {"pipeline": pipeline, "test_metrics": metrics, "cm": cm,
121
+ "config": {**BEST_CONFIG, "model": "LightGBM",
122
+ "learning_rate": LGBM_PARAMS["learning_rate"],
123
+ "n_estimators": LGBM_PARAMS["n_estimators"]}}
124
+
125
+ def train_rf(X_train, X_test, y_train, y_test):
126
+ print("Training Random Forest...")
127
+ pipeline = Pipeline([
128
+ ("pre", make_preprocessor()),
129
+ ("clf", RandomForestClassifier(**RF_PARAMS))
130
+ ])
131
+ pipeline.fit(X_train, y_train)
132
+ metrics, cm = compute_metrics(pipeline, X_test, y_test)
133
+ print(f"RF AUC={metrics['test_auc']} F1={metrics['test_f1']}")
134
+ return {"pipeline": pipeline, "test_metrics": metrics, "cm": cm,
135
+ "config": {**BEST_CONFIG, "model": "Random Forest",
136
+ "n_estimators": RF_PARAMS["n_estimators"],
137
+ "max_depth": RF_PARAMS["max_depth"]}}
138
+
139
+ def load_or_train_all():
140
+ X_train, X_val, X_test, y_train, y_val, y_test = load_data(BEST_CONFIG)
141
+ if os.path.exists(LGBM_PATH):
142
+ print(f"Loading LGBM from {LGBM_PATH}")
143
+ lgbm_artifact = joblib.load(LGBM_PATH)
144
+ else:
145
+ lgbm_artifact = train_lgbm(X_train, X_test, y_train, y_test)
146
+ joblib.dump(lgbm_artifact, LGBM_PATH)
147
+
148
+ if os.path.exists(RF_PATH):
149
+ print(f"Loading RF from {RF_PATH}")
150
+ rf_artifact = joblib.load(RF_PATH)
151
+ else:
152
+ rf_artifact = train_rf(X_train, X_test, y_train, y_test)
153
+ joblib.dump(rf_artifact, RF_PATH)
154
+
155
+ return {"lgbm": lgbm_artifact, "rf": rf_artifact}
156
+
157
+ # ─────────────────────────────────────────────
158
+ # LOAD MODELS AT MODULE LEVEL
159
+ # ─────────────────────────────────────────────
160
+ ARTIFACTS = load_or_train_all()
161
+
162
+ # ─────────────────────────────────────────────
163
+ # FLASK APP
164
+ # ─────────────────────────────────────────────
165
+
166
+ app = Flask(__name__)
167
+
168
+ HTML = r"""<!DOCTYPE html>
169
+ <html lang="en">
170
+ <head>
171
+ <meta charset="UTF-8">
172
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
173
+ <title>FaultSense — Equipment Fault Predictor</title>
174
+ <link href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&family=DM+Sans:wght@300;500;700&display=swap" rel="stylesheet">
175
+ <style>
176
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
177
+ :root {
178
+ --bg: #0a0c10; --surface: #111318; --surface2: #181c24;
179
+ --border: #232838; --accent: #00e5a0; --accent2: #ff4d6d;
180
+ --accent3: #4d9fff; --accent4: #f59e0b;
181
+ --text: #e8eaf0; --muted: #6b7280;
182
+ --mono: 'Space Mono', monospace; --sans: 'DM Sans', sans-serif;
183
+ }
184
+ html { font-size: 16px; }
185
+ body { background: var(--bg); color: var(--text); font-family: var(--sans); min-height: 100vh; overflow-x: hidden; }
186
+ body::before {
187
+ content: ''; position: fixed; inset: 0;
188
+ background-image: linear-gradient(rgba(0,229,160,.04) 1px, transparent 1px), linear-gradient(90deg, rgba(0,229,160,.04) 1px, transparent 1px);
189
+ background-size: 40px 40px; pointer-events: none; z-index: 0;
190
+ }
191
+ .blob { position: fixed; width: 600px; height: 600px; border-radius: 50%; filter: blur(120px); opacity: .15; pointer-events: none; animation: drift 12s ease-in-out infinite alternate; z-index: 0; }
192
+ .blob-1 { background: var(--accent); top: -200px; left: -200px; }
193
+ .blob-2 { background: var(--accent3); bottom: -200px; right: -100px; animation-delay: -6s; }
194
+ @keyframes drift { from { transform: translate(0,0) scale(1); } to { transform: translate(40px,30px) scale(1.05); } }
195
+ .wrapper { position: relative; z-index: 1; max-width: 1200px; margin: 0 auto; padding: 40px 24px 80px; }
196
+ header { display: flex; align-items: center; gap: 16px; margin-bottom: 32px; border-bottom: 1px solid var(--border); padding-bottom: 24px; }
197
+ .logo-mark { width: 44px; height: 44px; background: var(--accent); border-radius: 10px; display: grid; place-items: center; font-family: var(--mono); font-weight: 700; font-size: 18px; color: var(--bg); flex-shrink: 0; }
198
+ header h1 { font-family: var(--mono); font-size: 1.5rem; letter-spacing: -.5px; }
199
+ header p { font-size: .85rem; color: var(--muted); margin-top: 2px; }
200
+ .badge { margin-left: auto; font-family: var(--mono); font-size: .7rem; background: rgba(0,229,160,.12); color: var(--accent); border: 1px solid rgba(0,229,160,.3); border-radius: 6px; padding: 4px 10px; white-space: nowrap; }
201
+
202
+ /* MODEL SELECTOR TABS */
203
+ .model-tabs { display: flex; gap: 10px; margin-bottom: 24px; }
204
+ .model-tab {
205
+ flex: 1; padding: 14px 20px; border-radius: 12px; border: 1px solid var(--border);
206
+ background: var(--surface); cursor: pointer; font-family: var(--mono);
207
+ font-size: .8rem; color: var(--muted); transition: all .2s; text-align: center;
208
+ display: flex; flex-direction: column; gap: 4px; align-items: center;
209
+ }
210
+ .model-tab:hover { border-color: var(--accent); color: var(--text); }
211
+ .model-tab.active.lgbm { border-color: var(--accent); background: rgba(0,229,160,.08); color: var(--accent); }
212
+ .model-tab.active.rf { border-color: var(--accent4); background: rgba(245,158,11,.08); color: var(--accent4); }
213
+ .model-tab .tab-name { font-size: .95rem; font-weight: 700; }
214
+ .model-tab .tab-desc { font-size: .65rem; color: inherit; opacity: .7; }
215
+ .tab-auc { font-size: .7rem; opacity: .85; margin-top: 2px; }
216
+
217
+ .main-grid { display: grid; grid-template-columns: 1fr 400px; gap: 24px; align-items: start; }
218
+ @media (max-width: 900px) { .main-grid { grid-template-columns: 1fr; } }
219
+ .card { background: var(--surface); border: 1px solid var(--border); border-radius: 16px; padding: 28px; }
220
+ .card-title { font-family: var(--mono); font-size: .75rem; letter-spacing: 1.5px; text-transform: uppercase; color: var(--muted); margin-bottom: 20px; display: flex; align-items: center; gap: 8px; }
221
+ .card-title::before { content: ''; display: inline-block; width: 6px; height: 6px; background: var(--accent); border-radius: 50%; }
222
+ .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
223
+ @media (max-width: 560px) { .form-grid { grid-template-columns: 1fr; } }
224
+ .field { display: flex; flex-direction: column; gap: 8px; }
225
+ .field label { font-size: .78rem; font-family: var(--mono); color: var(--muted); letter-spacing: .5px; }
226
+
227
+ /* CUSTOM DROPDOWN */
228
+ .custom-select { position: relative; width: 100%; }
229
+ .cs-trigger {
230
+ background: var(--surface2); border: 1px solid var(--border);
231
+ border-radius: 10px; color: var(--text); font-family: var(--mono);
232
+ font-size: .9rem; padding: 11px 14px; width: 100%; cursor: pointer;
233
+ display: flex; justify-content: space-between; align-items: center;
234
+ transition: border-color .2s;
235
+ }
236
+ .cs-trigger:hover, .cs-trigger.open { border-color: var(--accent); }
237
+ .cs-arrow { font-size: 10px; color: var(--muted); transition: transform .2s; }
238
+ .cs-trigger.open .cs-arrow { transform: rotate(180deg); }
239
+ .cs-options {
240
+ position: absolute; top: calc(100% + 4px); left: 0; right: 0;
241
+ background: #1a1e2a; border: 1px solid var(--accent);
242
+ border-radius: 10px; z-index: 999; overflow: hidden;
243
+ display: none; flex-direction: column;
244
+ }
245
+ .cs-options.open { display: flex; }
246
+ .cs-option {
247
+ padding: 11px 14px; font-family: var(--mono); font-size: .9rem;
248
+ color: var(--text); cursor: pointer; transition: background .15s;
249
+ }
250
+ .cs-option:hover { background: rgba(0,229,160,.15); color: var(--accent); }
251
+ .cs-option.selected { color: var(--accent); background: rgba(0,229,160,.08); }
252
+
253
+ .slider-wrap { display: flex; flex-direction: column; gap: 6px; }
254
+ .slider-row { display: flex; align-items: center; gap: 10px; }
255
+ input[type=range] { flex: 1; -webkit-appearance: none; height: 4px; border-radius: 4px; background: var(--border); outline: none; cursor: pointer; }
256
+ input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--accent); transition: transform .15s; }
257
+ input[type=range]::-webkit-slider-thumb:hover { transform: scale(1.3); }
258
+ input[type=range]::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: var(--accent); border: none; }
259
+ .slider-val { font-family: var(--mono); font-size: .85rem; color: var(--accent); min-width: 60px; text-align: right; }
260
+
261
+ .btn-predict { margin-top: 24px; width: 100%; padding: 14px; background: var(--accent); color: var(--bg); border: none; border-radius: 12px; font-family: var(--mono); font-size: 1rem; font-weight: 700; letter-spacing: 1px; cursor: pointer; transition: transform .15s, box-shadow .2s; }
262
+ .btn-predict:hover { transform: translateY(-2px); box-shadow: 0 0 32px rgba(0,229,160,.5); }
263
+ .btn-predict.rf-active { background: var(--accent4); }
264
+ .btn-predict.rf-active:hover { box-shadow: 0 0 32px rgba(245,158,11,.5); }
265
+ .btn-predict:disabled { background: var(--muted); cursor: not-allowed; transform: none; box-shadow: none; }
266
+
267
+ .result-card { border-radius: 16px; padding: 28px; border: 1px solid var(--border); background: var(--surface); transition: border-color .4s; }
268
+ .result-card.faulty { border-color: var(--accent2); background: rgba(255,77,109,.06); }
269
+ .result-card.healthy { border-color: var(--accent); background: rgba(0,229,160,.06); }
270
+ .verdict { font-family: var(--mono); font-size: 2rem; font-weight: 700; letter-spacing: -1px; margin-bottom: 6px; }
271
+ .verdict.faulty { color: var(--accent2); }
272
+ .verdict.healthy { color: var(--accent); }
273
+ .verdict-sub { font-size: .85rem; color: var(--muted); margin-bottom: 8px; }
274
+ .model-used-tag { display: inline-block; font-family: var(--mono); font-size: .65rem; padding: 3px 8px; border-radius: 6px; margin-bottom: 20px; }
275
+ .model-used-tag.lgbm { background: rgba(0,229,160,.12); color: var(--accent); border: 1px solid rgba(0,229,160,.3); }
276
+ .model-used-tag.rf { background: rgba(245,158,11,.12); color: var(--accent4); border: 1px solid rgba(245,158,11,.3); }
277
+ .prob-bar-wrap { margin-bottom: 24px; }
278
+ .prob-label { font-family: var(--mono); font-size: .72rem; color: var(--muted); margin-bottom: 6px; display: flex; justify-content: space-between; }
279
+ .prob-track { height: 10px; background: var(--border); border-radius: 10px; overflow: hidden; }
280
+ .prob-fill { height: 100%; border-radius: 10px; transition: width .6s cubic-bezier(.4,0,.2,1); }
281
+ .prob-fill.faulty { background: linear-gradient(90deg, #ff4d6d, #ff8fa3); }
282
+ .prob-fill.healthy { background: linear-gradient(90deg, #00e5a0, #5eead4); }
283
+ .mini-metrics { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
284
+ .mini-metric { background: var(--surface2); border-radius: 10px; padding: 12px; border: 1px solid var(--border); }
285
+ .mini-metric .mm-val { font-family: var(--mono); font-size: 1.1rem; font-weight: 700; color: var(--accent3); }
286
+ .mini-metric .mm-key { font-size: .7rem; color: var(--muted); margin-top: 2px; font-family: var(--mono); }
287
+
288
+ /* METRICS COMPARISON TABLE */
289
+ .compare-table { width: 100%; border-collapse: collapse; }
290
+ .compare-table th { font-family: var(--mono); font-size: .65rem; letter-spacing: 1px; text-transform: uppercase; color: var(--muted); padding: 8px 10px; text-align: left; border-bottom: 1px solid var(--border); }
291
+ .compare-table th.lgbm-col { color: var(--accent); }
292
+ .compare-table th.rf-col { color: var(--accent4); }
293
+ .compare-table td { font-family: var(--mono); font-size: .78rem; padding: 9px 10px; border-bottom: 1px solid var(--border); }
294
+ .compare-table tr:last-child td { border-bottom: none; }
295
+ .compare-table td.metric-name { color: var(--muted); font-size: .7rem; }
296
+ .compare-table td.win { font-weight: 700; }
297
+ .compare-table td.win.lgbm { color: var(--accent); }
298
+ .compare-table td.win.rf { color: var(--accent4); }
299
+ .win-tag { font-size: .55rem; padding: 1px 5px; border-radius: 4px; margin-left: 5px; vertical-align: middle; }
300
+ .win-tag.lgbm { background: rgba(0,229,160,.15); color: var(--accent); }
301
+ .win-tag.rf { background: rgba(245,158,11,.15); color: var(--accent4); }
302
+
303
+ .info-row { display: flex; justify-content: space-between; align-items: center; padding: 9px 0; border-bottom: 1px solid var(--border); font-size: .82rem; }
304
+ .info-row:last-child { border-bottom: none; }
305
+ .info-key { color: var(--muted); font-family: var(--mono); font-size: .72rem; }
306
+ .info-val { font-family: var(--mono); color: var(--text); font-weight: 700; }
307
+ .info-val.green { color: var(--accent); }
308
+ .info-val.amber { color: var(--accent4); }
309
+
310
+ .history-list { max-height: 260px; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
311
+ .hist-item { background: var(--surface2); border: 1px solid var(--border); border-radius: 10px; padding: 10px 14px; display: flex; justify-content: space-between; align-items: center; font-size: .78rem; }
312
+ .hist-equip { color: var(--muted); font-family: var(--mono); font-size: .7rem; }
313
+ .hist-badge { font-family: var(--mono); font-size: .68rem; padding: 3px 8px; border-radius: 6px; font-weight: 700; }
314
+ .hist-badge.faulty { background: rgba(255,77,109,.2); color: var(--accent2); }
315
+ .hist-badge.healthy { background: rgba(0,229,160,.2); color: var(--accent); }
316
+ .hist-model-tag { font-family: var(--mono); font-size: .58rem; padding: 2px 6px; border-radius: 4px; margin-top: 3px; display: inline-block; }
317
+ .hist-model-tag.lgbm { background: rgba(0,229,160,.1); color: var(--accent); }
318
+ .hist-model-tag.rf { background: rgba(245,158,11,.1); color: var(--accent4); }
319
+
320
+ .spinner { display: none; width: 20px; height: 20px; border: 2px solid rgba(10,12,16,.3); border-top-color: var(--bg); border-radius: 50%; animation: spin .6s linear infinite; margin: 0 auto; }
321
+ @keyframes spin { to { transform: rotate(360deg); } }
322
+ .btn-predict.loading .btn-text { display: none; }
323
+ .btn-predict.loading .spinner { display: block; }
324
+ .idle-state { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; padding: 32px 0; color: var(--muted); text-align: center; }
325
+ .idle-icon { font-size: 2.5rem; opacity: .4; }
326
+ .toast { position: fixed; bottom: 24px; right: 24px; background: var(--surface2); border: 1px solid var(--accent2); color: var(--accent2); border-radius: 10px; padding: 12px 18px; font-family: var(--mono); font-size: .8rem; transform: translateY(80px); opacity: 0; transition: all .3s; z-index: 999; }
327
+ .toast.show { transform: translateY(0); opacity: 1; }
328
+ </style>
329
+ </head>
330
+ <body>
331
+ <div class="blob blob-1"></div>
332
+ <div class="blob blob-2"></div>
333
+ <div class="wrapper">
334
+ <header>
335
+ <div class="logo-mark">FS</div>
336
+ <div>
337
+ <h1>FaultSense</h1>
338
+ <p>Multi-Model Equipment Fault Predictor</p>
339
+ </div>
340
+ <div class="badge" id="model-badge">Loading Models…</div>
341
+ </header>
342
+
343
+ <!-- MODEL SELECTOR TABS -->
344
+ <div class="model-tabs" id="model-tabs">
345
+ <div class="model-tab active lgbm" id="tab-lgbm" onclick="selectModel('lgbm')">
346
+ <span class="tab-name">⚡ LightGBM</span>
347
+ <span class="tab-desc">Gradient Boosting</span>
348
+ <span class="tab-auc" id="lgbm-tab-auc">Loading…</span>
349
+ </div>
350
+ <div class="model-tab rf" id="tab-rf" onclick="selectModel('rf')">
351
+ <span class="tab-name">🌲 Random Forest</span>
352
+ <span class="tab-desc">Ensemble Trees</span>
353
+ <span class="tab-auc" id="rf-tab-auc">Loading…</span>
354
+ </div>
355
+ </div>
356
+
357
+ <div class="main-grid">
358
+ <div style="display:flex;flex-direction:column;gap:20px;">
359
+ <div class="card">
360
+ <div class="card-title">Sensor Readings</div>
361
+ <div class="form-grid">
362
+
363
+ <div class="field" style="grid-column:1/-1">
364
+ <label>Equipment Type</label>
365
+ <div class="custom-select" id="equipment-wrapper">
366
+ <div class="cs-trigger" id="cs-trigger" onclick="toggleDropdown()">
367
+ <span id="cs-selected">Pump</span>
368
+ <span class="cs-arrow">▼</span>
369
+ </div>
370
+ <div class="cs-options" id="cs-options">
371
+ <div class="cs-option selected" onclick="selectOption('pump','Pump')">Pump</div>
372
+ <div class="cs-option" onclick="selectOption('compressor','Compressor')">Compressor</div>
373
+ <div class="cs-option" onclick="selectOption('motor','Motor')">Motor</div>
374
+ <div class="cs-option" onclick="selectOption('valve','Valve')">Valve</div>
375
+ <div class="cs-option" onclick="selectOption('sensor','Sensor')">Sensor</div>
376
+ </div>
377
+ </div>
378
+ <input type="hidden" id="equipment" value="pump">
379
+ </div>
380
+
381
+ <div class="field slider-wrap">
382
+ <label>Temperature (°C)</label>
383
+ <div class="slider-row">
384
+ <input type="range" id="temperature" min="-20" max="120" step="0.5" value="40"
385
+ oninput="document.getElementById('temperature-val').textContent=parseFloat(this.value).toFixed(1)+'°C'">
386
+ <span class="slider-val" id="temperature-val">40.0°C</span>
387
+ </div>
388
+ </div>
389
+
390
+ <div class="field slider-wrap">
391
+ <label>Pressure (bar)</label>
392
+ <div class="slider-row">
393
+ <input type="range" id="pressure" min="0" max="20" step="0.1" value="5"
394
+ oninput="document.getElementById('pressure-val').textContent=parseFloat(this.value).toFixed(1)+' bar'">
395
+ <span class="slider-val" id="pressure-val">5.0 bar</span>
396
+ </div>
397
+ </div>
398
+
399
+ <div class="field slider-wrap">
400
+ <label>Vibration (mm/s)</label>
401
+ <div class="slider-row">
402
+ <input type="range" id="vibration" min="0" max="50" step="0.1" value="5"
403
+ oninput="document.getElementById('vibration-val').textContent=parseFloat(this.value).toFixed(1)+' mm/s'">
404
+ <span class="slider-val" id="vibration-val">5.0 mm/s</span>
405
+ </div>
406
+ </div>
407
+
408
+ <div class="field slider-wrap">
409
+ <label>Humidity (%)</label>
410
+ <div class="slider-row">
411
+ <input type="range" id="humidity" min="0" max="100" step="1" value="50"
412
+ oninput="document.getElementById('humidity-val').textContent=parseInt(this.value)+'%'">
413
+ <span class="slider-val" id="humidity-val">50%</span>
414
+ </div>
415
+ </div>
416
+
417
+ </div>
418
+ <button class="btn-predict lgbm-active" id="predict-btn" onclick="runPredict()">
419
+ <span class="btn-text">⚡ Run Prediction</span>
420
+ <div class="spinner"></div>
421
+ </button>
422
+ </div>
423
+
424
+ <!-- METRICS COMPARISON -->
425
+ <div class="card">
426
+ <div class="card-title">Model Comparison</div>
427
+ <div id="compare-content">
428
+ <div style="color:var(--muted);font-size:.8rem;font-family:var(--mono);text-align:center;padding:12px 0;">Loading…</div>
429
+ </div>
430
+ </div>
431
+
432
+ <div class="card">
433
+ <div class="card-title">Prediction History</div>
434
+ <div class="history-list" id="history-list">
435
+ <div style="color:var(--muted);font-size:.8rem;font-family:var(--mono);text-align:center;padding:16px 0;">No predictions yet</div>
436
+ </div>
437
+ </div>
438
+ </div>
439
+
440
+ <div style="display:flex;flex-direction:column;gap:20px;">
441
+ <div class="result-card" id="result-card">
442
+ <div class="idle-state" id="idle-state">
443
+ <div class="idle-icon">🔬</div>
444
+ <p>Select a model, enter sensor<br>readings, and run a prediction<br>to see results here.</p>
445
+ </div>
446
+ <div id="result-content" style="display:none;">
447
+ <div class="verdict" id="verdict-text"></div>
448
+ <div class="verdict-sub" id="verdict-sub"></div>
449
+ <div id="model-used-tag" class="model-used-tag lgbm"></div>
450
+ <div class="prob-bar-wrap">
451
+ <div class="prob-label"><span>Fault Probability</span><span id="prob-pct"></span></div>
452
+ <div class="prob-track"><div class="prob-fill" id="prob-fill" style="width:0%"></div></div>
453
+ </div>
454
+ <div class="mini-metrics" id="mini-metrics"></div>
455
+ </div>
456
+ </div>
457
+
458
+ <div class="card">
459
+ <div class="card-title" id="model-config-title">Active Model Config</div>
460
+ <div id="model-info">
461
+ <div style="color:var(--muted);font-size:.8rem;font-family:var(--mono);text-align:center;padding:12px 0;">Loading…</div>
462
+ </div>
463
+ </div>
464
+ </div>
465
+ </div>
466
+ </div>
467
+
468
+ <div class="toast" id="toast"></div>
469
+
470
+ <script>
471
+ let csOpen = false;
472
+ let activeModel = 'lgbm';
473
+ let modelData = {};
474
+
475
+ function selectModel(model) {
476
+ activeModel = model;
477
+ document.getElementById('tab-lgbm').className = 'model-tab' + (model === 'lgbm' ? ' active lgbm' : '');
478
+ document.getElementById('tab-rf').className = 'model-tab' + (model === 'rf' ? ' active rf' : '');
479
+ const btn = document.getElementById('predict-btn');
480
+ btn.className = model === 'lgbm' ? 'btn-predict lgbm-active' : 'btn-predict rf-active';
481
+ btn.querySelector('.btn-text').textContent = model === 'lgbm' ? '⚡ Run Prediction' : '🌲 Run Prediction';
482
+ updateModelInfo(model);
483
+ }
484
+
485
+ function toggleDropdown() {
486
+ csOpen = !csOpen;
487
+ document.getElementById('cs-trigger').classList.toggle('open', csOpen);
488
+ document.getElementById('cs-options').classList.toggle('open', csOpen);
489
+ }
490
+ function selectOption(value, label) {
491
+ document.getElementById('equipment').value = value;
492
+ document.getElementById('cs-selected').textContent = label;
493
+ document.querySelectorAll('.cs-option').forEach(o => o.classList.remove('selected'));
494
+ event.target.classList.add('selected');
495
+ csOpen = false;
496
+ document.getElementById('cs-trigger').classList.remove('open');
497
+ document.getElementById('cs-options').classList.remove('open');
498
+ }
499
+ document.addEventListener('click', function(e) {
500
+ if (!document.getElementById('equipment-wrapper').contains(e.target)) {
501
+ csOpen = false;
502
+ document.getElementById('cs-trigger').classList.remove('open');
503
+ document.getElementById('cs-options').classList.remove('open');
504
+ }
505
+ });
506
+
507
+ async function loadModelInfo() {
508
+ try {
509
+ const res = await fetch('/model_info');
510
+ modelData = await res.json();
511
+ if (modelData.error) { showToast('Model error: ' + modelData.error); return; }
512
+
513
+ const lg = modelData.lgbm, rf = modelData.rf;
514
+ document.getElementById('lgbm-tab-auc').textContent = 'AUC ' + (lg.test_metrics.test_auc * 100).toFixed(1) + '%';
515
+ document.getElementById('rf-tab-auc').textContent = 'AUC ' + (rf.test_metrics.test_auc * 100).toFixed(1) + '%';
516
+ document.getElementById('model-badge').textContent = '2 Models Ready';
517
+
518
+ // Build comparison table
519
+ const metrics = [
520
+ ['AUC', 'test_auc'],
521
+ ['Accuracy', 'test_accuracy'],
522
+ ['Precision', 'test_precision'],
523
+ ['Recall', 'test_recall'],
524
+ ['F1 Score', 'test_f1'],
525
+ ['Log Loss', 'test_logloss'],
526
+ ];
527
+ const rows = metrics.map(([label, key]) => {
528
+ const lv = lg.test_metrics[key], rv = rf.test_metrics[key];
529
+ const higherBetter = key !== 'test_logloss';
530
+ const lgWins = higherBetter ? lv > rv : lv < rv;
531
+ const rfWins = higherBetter ? rv > lv : rv < lv;
532
+ const fmt = v => key === 'test_logloss' ? v.toFixed(4) : (v * 100).toFixed(2) + '%';
533
+ return `<tr>
534
+ <td class="metric-name">${label}</td>
535
+ <td class="${lgWins ? 'win lgbm' : ''}">${fmt(lv)}${lgWins ? '<span class="win-tag lgbm">▲</span>' : ''}</td>
536
+ <td class="${rfWins ? 'win rf' : ''}">${fmt(rv)}${rfWins ? '<span class="win-tag rf">▲</span>' : ''}</td>
537
+ </tr>`;
538
+ }).join('');
539
+ document.getElementById('compare-content').innerHTML = `
540
+ <table class="compare-table">
541
+ <thead><tr>
542
+ <th>Metric</th>
543
+ <th class="lgbm-col">⚡ LightGBM</th>
544
+ <th class="rf-col">🌲 Random Forest</th>
545
+ </tr></thead>
546
+ <tbody>${rows}</tbody>
547
+ </table>`;
548
+
549
+ updateModelInfo('lgbm');
550
+ } catch(e) {
551
+ document.getElementById('model-badge').textContent = 'Load Error';
552
+ }
553
+ }
554
+
555
+ function updateModelInfo(model) {
556
+ if (!modelData[model]) return;
557
+ const d = modelData[model];
558
+ const isLgbm = model === 'lgbm';
559
+ const color = isLgbm ? 'green' : 'amber';
560
+
561
+ const rows = isLgbm ? [
562
+ ['Model', 'LightGBM'],
563
+ ['Learning Rate', d.config.learning_rate],
564
+ ['N Estimators', d.config.n_estimators],
565
+ ['Split', d.config.train_ratio + '/' + d.config.val_ratio + '/' + d.config.test_ratio],
566
+ ] : [
567
+ ['Model', 'Random Forest'],
568
+ ['N Estimators', d.config.n_estimators],
569
+ ['Max Depth', d.config.max_depth],
570
+ ['Split', d.config.train_ratio + '/' + d.config.val_ratio + '/' + d.config.test_ratio],
571
+ ];
572
+
573
+ const metricRows = [
574
+ ['Test AUC', (d.test_metrics.test_auc * 100).toFixed(2) + '%'],
575
+ ['Test F1', (d.test_metrics.test_f1 * 100).toFixed(2) + '%'],
576
+ ['Test Accuracy', (d.test_metrics.test_accuracy * 100).toFixed(2) + '%'],
577
+ ['Precision', (d.test_metrics.test_precision * 100).toFixed(2) + '%'],
578
+ ['Recall', (d.test_metrics.test_recall * 100).toFixed(2) + '%'],
579
+ ];
580
+
581
+ document.getElementById('model-info').innerHTML =
582
+ [...rows, ...metricRows].map(([k, v], i) =>
583
+ '<div class="info-row"><span class="info-key">' + k + '</span>' +
584
+ '<span class="info-val' + (i >= rows.length ? ' ' + color : '') + '">' + v + '</span></div>'
585
+ ).join('');
586
+ }
587
+
588
+ async function runPredict() {
589
+ const btn = document.getElementById('predict-btn');
590
+ btn.classList.add('loading');
591
+ btn.disabled = true;
592
+ const payload = {
593
+ model: activeModel,
594
+ equipment: document.getElementById('equipment').value,
595
+ temperature: parseFloat(document.getElementById('temperature').value),
596
+ pressure: parseFloat(document.getElementById('pressure').value),
597
+ vibration: parseFloat(document.getElementById('vibration').value),
598
+ humidity: parseFloat(document.getElementById('humidity').value),
599
+ };
600
+ try {
601
+ const res = await fetch('/predict', {
602
+ method: 'POST',
603
+ headers: {'Content-Type': 'application/json'},
604
+ body: JSON.stringify(payload)
605
+ });
606
+ const data = await res.json();
607
+ if (data.error) { showToast('Error: ' + data.error); return; }
608
+ showResult(data, payload);
609
+ addHistory(data, payload);
610
+ } catch(e) {
611
+ showToast('Network error — please try again.');
612
+ } finally {
613
+ btn.classList.remove('loading');
614
+ btn.disabled = false;
615
+ }
616
+ }
617
+
618
+ function showResult(data, payload) {
619
+ const isFaulty = data.prediction === 1;
620
+ const prob = (data.probability * 100).toFixed(1);
621
+ const cls = isFaulty ? 'faulty' : 'healthy';
622
+ const isLgbm = data.model === 'lgbm';
623
+ document.getElementById('result-card').className = 'result-card ' + cls;
624
+ document.getElementById('idle-state').style.display = 'none';
625
+ document.getElementById('result-content').style.display = 'block';
626
+ const vt = document.getElementById('verdict-text');
627
+ vt.className = 'verdict ' + cls;
628
+ vt.textContent = isFaulty ? '⚠ FAULT DETECTED' : '✓ HEALTHY';
629
+ document.getElementById('verdict-sub').textContent = isFaulty
630
+ ? 'High fault probability — immediate inspection recommended.'
631
+ : 'Equipment readings within normal operating range.';
632
+ const tag = document.getElementById('model-used-tag');
633
+ tag.className = 'model-used-tag ' + (isLgbm ? 'lgbm' : 'rf');
634
+ tag.textContent = isLgbm ? '⚡ LightGBM' : '🌲 Random Forest';
635
+ document.getElementById('prob-pct').textContent = prob + '%';
636
+ const fill = document.getElementById('prob-fill');
637
+ fill.className = 'prob-fill ' + cls;
638
+ setTimeout(() => fill.style.width = prob + '%', 50);
639
+ document.getElementById('mini-metrics').innerHTML = [
640
+ ['Probability', prob + '%'],
641
+ ['Confidence', data.confidence],
642
+ ['Equipment', payload.equipment],
643
+ ['Threshold', (data.threshold * 100).toFixed(0) + '%'],
644
+ ].map(([k,v]) =>
645
+ '<div class="mini-metric"><div class="mm-val">' + v + '</div><div class="mm-key">' + k + '</div></div>'
646
+ ).join('');
647
+ }
648
+
649
+ function addHistory(data, payload) {
650
+ const isFaulty = data.prediction === 1;
651
+ const cls = isFaulty ? 'faulty' : 'healthy';
652
+ const isLgbm = data.model === 'lgbm';
653
+ const list = document.getElementById('history-list');
654
+ if (list.children.length === 1 && list.firstElementChild.style.color !== undefined
655
+ && list.firstElementChild.querySelector) list.innerHTML = '';
656
+ if (list.children.length === 1 && !list.firstElementChild.classList.contains('hist-item')) list.innerHTML = '';
657
+ const item = document.createElement('div');
658
+ item.className = 'hist-item';
659
+ item.innerHTML =
660
+ '<div><div style="font-family:var(--mono);font-size:.78rem;">' + payload.equipment + '</div>' +
661
+ '<div class="hist-equip">T=' + payload.temperature + '° P=' + payload.pressure + 'bar V=' + payload.vibration + '</div>' +
662
+ '<span class="hist-model-tag ' + (isLgbm ? 'lgbm' : 'rf') + '">' + (isLgbm ? '⚡ LGBM' : '🌲 RF') + '</span></div>' +
663
+ '<span class="hist-badge ' + cls + '">' + (isFaulty ? 'FAULT' : 'OK') + ' · ' + (data.probability*100).toFixed(1) + '%</span>';
664
+ list.prepend(item);
665
+ if (list.children.length > 20) list.removeChild(list.lastChild);
666
+ }
667
+
668
+ function showToast(msg) {
669
+ const t = document.getElementById('toast');
670
+ t.textContent = msg;
671
+ t.classList.add('show');
672
+ setTimeout(() => t.classList.remove('show'), 3500);
673
+ }
674
+
675
+ loadModelInfo();
676
+ </script>
677
+ </body>
678
+ </html>"""
679
+
680
+
681
+ # ─────────────────────────────────────────────
682
+ # ROUTES
683
+ # ─────────────────────────────────────────────
684
+
685
+ @app.route("/")
686
+ def index():
687
+ return render_template_string(HTML)
688
+
689
+ @app.route("/model_info")
690
+ def model_info():
691
+ return jsonify({
692
+ "lgbm": {
693
+ "config": ARTIFACTS["lgbm"]["config"],
694
+ "test_metrics": ARTIFACTS["lgbm"]["test_metrics"],
695
+ "cm": ARTIFACTS["lgbm"]["cm"],
696
+ },
697
+ "rf": {
698
+ "config": ARTIFACTS["rf"]["config"],
699
+ "test_metrics": ARTIFACTS["rf"]["test_metrics"],
700
+ "cm": ARTIFACTS["rf"]["cm"],
701
+ },
702
+ })
703
+
704
+ @app.route("/predict", methods=["POST"])
705
+ def predict():
706
+ body = request.get_json(force=True)
707
+ model_key = body.get("model", "lgbm")
708
+ if model_key not in ARTIFACTS:
709
+ return jsonify({"error": f"Unknown model '{model_key}'. Use 'lgbm' or 'rf'."}), 400
710
+
711
+ try:
712
+ row = pd.DataFrame([{
713
+ "equipment": body["equipment"],
714
+ "temperature": float(body["temperature"]),
715
+ "pressure": float(body["pressure"]),
716
+ "vibration": float(body["vibration"]),
717
+ "humidity": float(body["humidity"]),
718
+ }])
719
+ except (KeyError, ValueError) as e:
720
+ return jsonify({"error": f"Bad input: {e}"}), 400
721
+
722
+ artifact = ARTIFACTS[model_key]
723
+ prob = float(artifact["pipeline"].predict_proba(row)[0, 1])
724
+ pred = int(prob >= THRESHOLD)
725
+ confidence = "HIGH" if prob > 0.85 or prob < 0.15 else "MEDIUM" if prob > 0.65 or prob < 0.35 else "LOW"
726
+
727
+ return jsonify({
728
+ "model": model_key,
729
+ "prediction": pred,
730
+ "probability": round(prob, 4),
731
+ "confidence": confidence,
732
+ "threshold": THRESHOLD,
733
+ "label": "FAULTY" if pred == 1 else "HEALTHY",
734
+ })
735
+
736
+
737
+ if __name__ == "__main__":
738
+ app.run(debug=False, host="0.0.0.0", port=7860)
test.py ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ FaultSense — ULTRA FAST Dataset Test Script
3
+ Optimized with:
4
+ ✔ requests.Session (connection reuse)
5
+ ✔ ThreadPoolExecutor (parallel requests)
6
+ ✔ itertuples (fast iteration)
7
+ ✔ Same features, no removal
8
+ """
9
+
10
+ import argparse
11
+ import time
12
+ import requests
13
+ import pandas as pd
14
+ import numpy as np
15
+ from concurrent.futures import ThreadPoolExecutor, as_completed
16
+
17
+ from sklearn.metrics import (
18
+ accuracy_score, precision_score, recall_score,
19
+ f1_score, roc_auc_score, confusion_matrix
20
+ )
21
+
22
+ # ─────────────────────────────────────────────
23
+ # CONFIG
24
+ # ─────────────────────────────────────────────
25
+ MODELS = ["lgbm", "rf"]
26
+ THRESHOLD = 0.5
27
+ BATCH_PRINT = 500
28
+ MAX_WORKERS = 50 # 🔥 increase to 50 if strong CPU
29
+ REQUEST_DELAY = 0.0
30
+
31
+
32
+ # ─────────────────────────────────────────────
33
+ # FAST REQUEST FUNCTION
34
+ # ─────────────────────────────────────────────
35
+ def send_predict(session, base_url, model, row):
36
+ payload = {
37
+ "model": model,
38
+ "equipment": row.equipment,
39
+ "temperature": float(row.temperature),
40
+ "pressure": float(row.pressure),
41
+ "vibration": float(row.vibration),
42
+ "humidity": float(row.humidity),
43
+ }
44
+ try:
45
+ resp = session.post(f"{base_url}/predict", json=payload, timeout=10)
46
+ resp.raise_for_status()
47
+ return resp.json()
48
+ except:
49
+ return None
50
+
51
+
52
+ # ─────────────────────────────────────────────
53
+ # PARALLEL PROCESSING
54
+ # ─────────────────────────────────────────────
55
+ def process_row(session, base_url, model, i, row):
56
+ result = send_predict(session, base_url, model, row)
57
+
58
+ if result is None or "error" in result:
59
+ return {
60
+ "index": i,
61
+ "equipment": row.equipment,
62
+ "true_label": int(row.faulty),
63
+ "pred_label": -1,
64
+ "probability": None,
65
+ "confidence": "ERROR",
66
+ "correct": False,
67
+ }
68
+
69
+ pred = result["prediction"]
70
+ prob = result["probability"]
71
+ true = int(row.faulty)
72
+
73
+ return {
74
+ "index": i,
75
+ "equipment": row.equipment,
76
+ "true_label": true,
77
+ "pred_label": pred,
78
+ "probability": prob,
79
+ "confidence": result.get("confidence", ""),
80
+ "correct": pred == true,
81
+ }
82
+
83
+
84
+ # ─────────────────────────────────────────────
85
+ # METRICS
86
+ # ─────────────────────────────────────────────
87
+ def evaluate(y_true, y_pred, y_prob, model_name):
88
+ acc = accuracy_score(y_true, y_pred)
89
+ prec = precision_score(y_true, y_pred, zero_division=0)
90
+ rec = recall_score(y_true, y_pred, zero_division=0)
91
+ f1 = f1_score(y_true, y_pred, zero_division=0)
92
+ auc = roc_auc_score(y_true, y_prob)
93
+ cm = confusion_matrix(y_true, y_pred)
94
+ tn, fp, fn, tp = cm.ravel()
95
+
96
+ print("\n" + "═"*50)
97
+ print(f"MODEL: {model_name.upper()}")
98
+ print("═"*50)
99
+ print(f"Accuracy : {acc:.4f}")
100
+ print(f"Precision: {prec:.4f}")
101
+ print(f"Recall : {rec:.4f}")
102
+ print(f"F1 Score : {f1:.4f}")
103
+ print(f"AUC : {auc:.4f}")
104
+ print(f"TP={tp} TN={tn} FP={fp} FN={fn}")
105
+ print("═"*50)
106
+
107
+ return {"accuracy": acc, "precision": prec, "recall": rec,
108
+ "f1": f1, "auc": auc, "tp": tp, "tn": tn, "fp": fp, "fn": fn}
109
+
110
+
111
+ # ─────────────────────────────────────────────
112
+ # MAIN
113
+ # ─────────────────────────────────────────────
114
+ def main():
115
+ parser = argparse.ArgumentParser()
116
+ parser.add_argument("--url", default="http://localhost:7860")
117
+ parser.add_argument("--csv", default="synthetic_nim_parallel_10000.csv")
118
+ parser.add_argument("--limit", type=int, default=None)
119
+ args = parser.parse_args()
120
+
121
+ print("\n🚀 FAST TEST STARTING...\n")
122
+
123
+ df = pd.read_csv(args.csv)
124
+ if args.limit:
125
+ df = df.head(args.limit)
126
+
127
+ total = len(df)
128
+ print(f"Rows: {total}")
129
+
130
+ # check server
131
+ try:
132
+ requests.get(f"{args.url}/model_info", timeout=5)
133
+ print("✅ Server reachable\n")
134
+ except:
135
+ print("❌ Server not reachable")
136
+ return
137
+
138
+ all_metrics = {}
139
+
140
+ for model in MODELS:
141
+ print(f"\n🔥 Testing {model.upper()}...\n")
142
+
143
+ session = requests.Session()
144
+ start = time.time()
145
+ records = []
146
+
147
+ # FAST ITERATION
148
+ rows = list(enumerate(df.itertuples(index=False)))
149
+
150
+ with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
151
+ futures = [
152
+ executor.submit(process_row, session, args.url, model, i, row)
153
+ for i, row in rows
154
+ ]
155
+
156
+ for i, future in enumerate(as_completed(futures), 1):
157
+ records.append(future.result())
158
+
159
+ if i % BATCH_PRINT == 0 or i == total:
160
+ elapsed = time.time() - start
161
+ speed = i / elapsed
162
+ print(f"[{i}/{total}] Speed: {speed:.0f} req/sec")
163
+
164
+ elapsed = time.time() - start
165
+ print(f"\n⏱ Finished in {elapsed:.2f}s ({total/elapsed:.0f} req/sec)\n")
166
+
167
+ df_results = pd.DataFrame(records)
168
+ valid = df_results[df_results["pred_label"] != -1]
169
+
170
+ y_true = valid["true_label"].values
171
+ y_pred = valid["pred_label"].values
172
+ y_prob = valid["probability"].astype(float).values
173
+
174
+ metrics = evaluate(y_true, y_pred, y_prob, model)
175
+ all_metrics[model] = metrics
176
+
177
+ # SAVE FILES
178
+ df_results.to_csv(f"test_results_{model}.csv", index=False)
179
+ valid[valid["correct"] == False].to_csv(f"test_mismatches_{model}.csv", index=False)
180
+
181
+ print("\n🏁 FINAL COMPARISON\n")
182
+
183
+ for metric in ["accuracy", "precision", "recall", "f1", "auc"]:
184
+ lv = all_metrics["lgbm"][metric]
185
+ rv = all_metrics["rf"][metric]
186
+
187
+ winner = "LGBM ⚡" if lv > rv else "RF 🌲"
188
+ print(f"{metric.upper():<10} LGBM={lv:.4f} RF={rv:.4f} → {winner}")
189
+
190
+
191
+ if __name__ == "__main__":
192
+ main()
test_mismatches_lgbm.csv ADDED
@@ -0,0 +1,1906 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ index,equipment,true_label,pred_label,probability,confidence,correct
2
+ 14,Pump,0,1,0.5316,LOW,False
3
+ 27,Compressor,0,1,0.5633,LOW,False
4
+ 21,Compressor,0,1,0.5843,LOW,False
5
+ 3,Pump,0,1,0.5376,LOW,False
6
+ 0,Turbine,0,1,0.5045,LOW,False
7
+ 1,Compressor,1,0,0.3958,LOW,False
8
+ 8,Compressor,0,1,0.5517,LOW,False
9
+ 44,Pump,0,1,0.5545,LOW,False
10
+ 51,Turbine,1,0,0.4362,LOW,False
11
+ 52,Turbine,1,0,0.4388,LOW,False
12
+ 53,Pump,0,1,0.5548,LOW,False
13
+ 63,Pump,0,1,0.5177,LOW,False
14
+ 64,Compressor,0,1,0.5855,LOW,False
15
+ 72,Pump,1,0,0.1652,MEDIUM,False
16
+ 86,Compressor,0,1,0.5424,LOW,False
17
+ 85,Compressor,0,1,0.5223,LOW,False
18
+ 84,Compressor,0,1,0.5745,LOW,False
19
+ 83,Compressor,0,1,0.5446,LOW,False
20
+ 80,Pump,1,0,0.3037,MEDIUM,False
21
+ 79,Compressor,0,1,0.5476,LOW,False
22
+ 91,Compressor,0,1,0.7048,MEDIUM,False
23
+ 93,Pump,1,0,0.3643,LOW,False
24
+ 97,Pump,1,0,0.0892,HIGH,False
25
+ 104,Compressor,0,1,0.6098,LOW,False
26
+ 119,Pump,0,1,0.6043,LOW,False
27
+ 133,Pump,1,0,0.2852,MEDIUM,False
28
+ 137,Compressor,0,1,0.5114,LOW,False
29
+ 143,Compressor,0,1,0.5435,LOW,False
30
+ 150,Compressor,0,1,0.616,LOW,False
31
+ 160,Turbine,1,0,0.0424,HIGH,False
32
+ 169,Turbine,0,1,0.532,LOW,False
33
+ 187,Compressor,0,1,0.5485,LOW,False
34
+ 193,Compressor,0,1,0.5382,LOW,False
35
+ 210,Compressor,0,1,0.5398,LOW,False
36
+ 209,Compressor,1,0,0.304,MEDIUM,False
37
+ 218,Compressor,0,1,0.6265,LOW,False
38
+ 229,Pump,0,1,0.7645,MEDIUM,False
39
+ 232,Turbine,0,1,0.5544,LOW,False
40
+ 236,Pump,0,1,0.6206,LOW,False
41
+ 240,Compressor,0,1,0.5018,LOW,False
42
+ 234,Turbine,1,0,0.298,MEDIUM,False
43
+ 248,Turbine,0,1,0.6216,LOW,False
44
+ 258,Turbine,0,1,0.5028,LOW,False
45
+ 262,Compressor,0,1,0.5397,LOW,False
46
+ 270,Compressor,0,1,0.5461,LOW,False
47
+ 278,Pump,0,1,0.6031,LOW,False
48
+ 280,Compressor,0,1,0.5323,LOW,False
49
+ 281,Turbine,0,1,0.5034,LOW,False
50
+ 291,Pump,0,1,0.5843,LOW,False
51
+ 300,Pump,0,1,0.5053,LOW,False
52
+ 308,Compressor,0,1,0.6379,LOW,False
53
+ 313,Turbine,1,0,0.3113,MEDIUM,False
54
+ 318,Compressor,0,1,0.5378,LOW,False
55
+ 321,Turbine,0,1,0.6159,LOW,False
56
+ 338,Turbine,0,1,0.6365,LOW,False
57
+ 353,Turbine,0,1,0.5096,LOW,False
58
+ 354,Turbine,1,0,0.2184,MEDIUM,False
59
+ 357,Pump,1,0,0.3922,LOW,False
60
+ 372,Compressor,1,0,0.2491,MEDIUM,False
61
+ 377,Compressor,1,0,0.1706,MEDIUM,False
62
+ 375,Pump,0,1,0.5083,LOW,False
63
+ 399,Pump,0,1,0.566,LOW,False
64
+ 391,Pump,0,1,0.5394,LOW,False
65
+ 393,Pump,0,1,0.5846,LOW,False
66
+ 395,Compressor,0,1,0.5155,LOW,False
67
+ 405,Turbine,0,1,0.7105,MEDIUM,False
68
+ 410,Pump,1,0,0.244,MEDIUM,False
69
+ 407,Pump,1,0,0.4228,LOW,False
70
+ 411,Compressor,1,0,0.3236,MEDIUM,False
71
+ 416,Turbine,1,0,0.3291,MEDIUM,False
72
+ 431,Pump,0,1,0.5132,LOW,False
73
+ 438,Compressor,0,1,0.6437,LOW,False
74
+ 448,Turbine,0,1,0.5733,LOW,False
75
+ 453,Pump,1,0,0.183,MEDIUM,False
76
+ 467,Pump,1,0,0.2474,MEDIUM,False
77
+ 472,Turbine,0,1,0.5218,LOW,False
78
+ 471,Compressor,0,1,0.61,LOW,False
79
+ 487,Pump,0,1,0.5309,LOW,False
80
+ 489,Compressor,0,1,0.5236,LOW,False
81
+ 521,Turbine,0,1,0.6349,LOW,False
82
+ 535,Compressor,0,1,0.6236,LOW,False
83
+ 540,Compressor,0,1,0.5827,LOW,False
84
+ 539,Pump,1,0,0.3032,MEDIUM,False
85
+ 543,Turbine,1,0,0.459,LOW,False
86
+ 544,Pump,0,1,0.5142,LOW,False
87
+ 546,Pump,1,0,0.1899,MEDIUM,False
88
+ 549,Turbine,0,1,0.6636,MEDIUM,False
89
+ 550,Pump,0,1,0.6013,LOW,False
90
+ 555,Pump,0,1,0.5711,LOW,False
91
+ 570,Pump,1,0,0.3442,MEDIUM,False
92
+ 580,Compressor,0,1,0.5389,LOW,False
93
+ 585,Pump,0,1,0.5443,LOW,False
94
+ 590,Turbine,0,1,0.5246,LOW,False
95
+ 593,Compressor,0,1,0.5168,LOW,False
96
+ 599,Turbine,0,1,0.655,MEDIUM,False
97
+ 601,Compressor,0,1,0.7141,MEDIUM,False
98
+ 602,Turbine,1,0,0.1591,MEDIUM,False
99
+ 603,Turbine,0,1,0.5415,LOW,False
100
+ 607,Pump,1,0,0.4073,LOW,False
101
+ 616,Pump,0,1,0.5584,LOW,False
102
+ 634,Pump,0,1,0.5264,LOW,False
103
+ 632,Pump,0,1,0.5473,LOW,False
104
+ 641,Turbine,1,0,0.1794,MEDIUM,False
105
+ 647,Pump,0,1,0.6085,LOW,False
106
+ 650,Compressor,0,1,0.5236,LOW,False
107
+ 657,Pump,0,1,0.5084,LOW,False
108
+ 654,Pump,1,0,0.35,MEDIUM,False
109
+ 658,Compressor,1,0,0.3262,MEDIUM,False
110
+ 653,Pump,0,1,0.5342,LOW,False
111
+ 677,Pump,0,1,0.523,LOW,False
112
+ 678,Turbine,1,0,0.1028,HIGH,False
113
+ 681,Compressor,0,1,0.5332,LOW,False
114
+ 684,Pump,1,0,0.3839,LOW,False
115
+ 688,Compressor,1,0,0.1659,MEDIUM,False
116
+ 692,Turbine,0,1,0.5009,LOW,False
117
+ 691,Turbine,0,1,0.5113,LOW,False
118
+ 694,Turbine,1,0,0.4888,LOW,False
119
+ 693,Pump,1,0,0.2666,MEDIUM,False
120
+ 703,Pump,0,1,0.5274,LOW,False
121
+ 705,Turbine,1,0,0.3311,MEDIUM,False
122
+ 732,Turbine,1,0,0.2121,MEDIUM,False
123
+ 739,Turbine,0,1,0.5834,LOW,False
124
+ 737,Pump,0,1,0.5767,LOW,False
125
+ 745,Pump,1,0,0.2796,MEDIUM,False
126
+ 752,Turbine,0,1,0.5103,LOW,False
127
+ 763,Turbine,1,0,0.2503,MEDIUM,False
128
+ 769,Turbine,0,1,0.6952,MEDIUM,False
129
+ 771,Turbine,0,1,0.5218,LOW,False
130
+ 777,Compressor,0,1,0.6126,LOW,False
131
+ 776,Compressor,0,1,0.5017,LOW,False
132
+ 781,Compressor,0,1,0.5489,LOW,False
133
+ 774,Pump,0,1,0.5531,LOW,False
134
+ 782,Compressor,0,1,0.6468,LOW,False
135
+ 789,Compressor,0,1,0.536,LOW,False
136
+ 797,Compressor,1,0,0.2086,MEDIUM,False
137
+ 798,Compressor,0,1,0.6271,LOW,False
138
+ 799,Pump,0,1,0.5051,LOW,False
139
+ 800,Turbine,0,1,0.5595,LOW,False
140
+ 805,Turbine,1,0,0.1081,HIGH,False
141
+ 807,Turbine,0,1,0.5001,LOW,False
142
+ 811,Turbine,0,1,0.6152,LOW,False
143
+ 804,Turbine,0,1,0.5026,LOW,False
144
+ 817,Compressor,0,1,0.5802,LOW,False
145
+ 821,Turbine,0,1,0.5206,LOW,False
146
+ 828,Pump,0,1,0.6175,LOW,False
147
+ 832,Pump,0,1,0.5468,LOW,False
148
+ 824,Pump,1,0,0.1857,MEDIUM,False
149
+ 839,Turbine,1,0,0.4294,LOW,False
150
+ 841,Compressor,0,1,0.7406,MEDIUM,False
151
+ 846,Compressor,0,1,0.5591,LOW,False
152
+ 847,Turbine,1,0,0.4824,LOW,False
153
+ 852,Compressor,1,0,0.0922,HIGH,False
154
+ 853,Compressor,0,1,0.5173,LOW,False
155
+ 865,Pump,1,0,0.2081,MEDIUM,False
156
+ 869,Turbine,0,1,0.5487,LOW,False
157
+ 878,Pump,0,1,0.5785,LOW,False
158
+ 875,Compressor,0,1,0.5907,LOW,False
159
+ 877,Turbine,1,0,0.4534,LOW,False
160
+ 893,Pump,1,0,0.2995,MEDIUM,False
161
+ 885,Pump,0,1,0.5019,LOW,False
162
+ 889,Turbine,0,1,0.7652,MEDIUM,False
163
+ 899,Pump,0,1,0.6268,LOW,False
164
+ 895,Compressor,0,1,0.5516,LOW,False
165
+ 908,Turbine,1,0,0.4338,LOW,False
166
+ 922,Pump,0,1,0.5011,LOW,False
167
+ 931,Pump,1,0,0.4235,LOW,False
168
+ 930,Compressor,0,1,0.5097,LOW,False
169
+ 942,Compressor,1,0,0.4913,LOW,False
170
+ 957,Pump,0,1,0.6148,LOW,False
171
+ 959,Compressor,0,1,0.6621,MEDIUM,False
172
+ 964,Pump,0,1,0.5063,LOW,False
173
+ 970,Compressor,0,1,0.5776,LOW,False
174
+ 979,Pump,0,1,0.7,MEDIUM,False
175
+ 981,Compressor,0,1,0.6414,LOW,False
176
+ 985,Pump,1,0,0.0401,HIGH,False
177
+ 991,Pump,1,0,0.3187,MEDIUM,False
178
+ 1005,Pump,0,1,0.5462,LOW,False
179
+ 1007,Compressor,0,1,0.5136,LOW,False
180
+ 1011,Compressor,0,1,0.5061,LOW,False
181
+ 1013,Pump,0,1,0.6215,LOW,False
182
+ 1012,Pump,0,1,0.5883,LOW,False
183
+ 1032,Compressor,0,1,0.708,MEDIUM,False
184
+ 1033,Compressor,0,1,0.6103,LOW,False
185
+ 1036,Turbine,0,1,0.5152,LOW,False
186
+ 1048,Turbine,1,0,0.4762,LOW,False
187
+ 1055,Pump,0,1,0.5425,LOW,False
188
+ 1078,Compressor,0,1,0.5348,LOW,False
189
+ 1080,Turbine,1,0,0.4666,LOW,False
190
+ 1086,Pump,0,1,0.5201,LOW,False
191
+ 1093,Compressor,0,1,0.5694,LOW,False
192
+ 1104,Compressor,0,1,0.5091,LOW,False
193
+ 1109,Compressor,0,1,0.5362,LOW,False
194
+ 1101,Pump,0,1,0.5687,LOW,False
195
+ 1103,Compressor,0,1,0.5401,LOW,False
196
+ 1115,Compressor,0,1,0.5877,LOW,False
197
+ 1111,Pump,0,1,0.5759,LOW,False
198
+ 1114,Compressor,0,1,0.5193,LOW,False
199
+ 1125,Turbine,0,1,0.5855,LOW,False
200
+ 1133,Compressor,1,0,0.2408,MEDIUM,False
201
+ 1134,Turbine,0,1,0.5674,LOW,False
202
+ 1147,Turbine,0,1,0.5159,LOW,False
203
+ 1149,Pump,0,1,0.5154,LOW,False
204
+ 1150,Pump,0,1,0.5183,LOW,False
205
+ 1156,Pump,1,0,0.4914,LOW,False
206
+ 1155,Pump,0,1,0.5283,LOW,False
207
+ 1171,Turbine,1,0,0.0647,HIGH,False
208
+ 1179,Pump,0,1,0.5049,LOW,False
209
+ 1189,Turbine,0,1,0.5104,LOW,False
210
+ 1191,Compressor,0,1,0.6609,MEDIUM,False
211
+ 1193,Turbine,0,1,0.5246,LOW,False
212
+ 1202,Turbine,1,0,0.4579,LOW,False
213
+ 1203,Turbine,0,1,0.5394,LOW,False
214
+ 1221,Pump,0,1,0.5415,LOW,False
215
+ 1225,Pump,1,0,0.4898,LOW,False
216
+ 1224,Turbine,0,1,0.5166,LOW,False
217
+ 1228,Pump,1,0,0.465,LOW,False
218
+ 1240,Pump,0,1,0.5455,LOW,False
219
+ 1247,Compressor,0,1,0.5403,LOW,False
220
+ 1263,Pump,1,0,0.3962,LOW,False
221
+ 1265,Pump,0,1,0.5278,LOW,False
222
+ 1269,Pump,0,1,0.5531,LOW,False
223
+ 1285,Compressor,0,1,0.5399,LOW,False
224
+ 1290,Compressor,0,1,0.5745,LOW,False
225
+ 1287,Turbine,0,1,0.617,LOW,False
226
+ 1301,Compressor,0,1,0.5781,LOW,False
227
+ 1306,Compressor,0,1,0.5156,LOW,False
228
+ 1307,Pump,0,1,0.6469,LOW,False
229
+ 1308,Turbine,0,1,0.522,LOW,False
230
+ 1314,Pump,0,1,0.5586,LOW,False
231
+ 1312,Compressor,0,1,0.5771,LOW,False
232
+ 1325,Pump,0,1,0.577,LOW,False
233
+ 1323,Pump,1,0,0.4626,LOW,False
234
+ 1324,Pump,0,1,0.7709,MEDIUM,False
235
+ 1333,Compressor,1,0,0.3732,LOW,False
236
+ 1343,Compressor,0,1,0.5189,LOW,False
237
+ 1341,Compressor,0,1,0.7471,MEDIUM,False
238
+ 1344,Pump,1,0,0.4796,LOW,False
239
+ 1362,Turbine,1,0,0.2046,MEDIUM,False
240
+ 1365,Turbine,0,1,0.5299,LOW,False
241
+ 1372,Turbine,0,1,0.549,LOW,False
242
+ 1382,Compressor,0,1,0.5713,LOW,False
243
+ 1375,Turbine,1,0,0.4508,LOW,False
244
+ 1378,Compressor,0,1,0.7089,MEDIUM,False
245
+ 1391,Compressor,0,1,0.5588,LOW,False
246
+ 1387,Compressor,0,1,0.5578,LOW,False
247
+ 1386,Pump,1,0,0.494,LOW,False
248
+ 1396,Pump,0,1,0.5554,LOW,False
249
+ 1395,Compressor,0,1,0.585,LOW,False
250
+ 1402,Pump,0,1,0.5085,LOW,False
251
+ 1403,Compressor,0,1,0.6532,MEDIUM,False
252
+ 1407,Turbine,1,0,0.2024,MEDIUM,False
253
+ 1412,Compressor,1,0,0.1382,HIGH,False
254
+ 1417,Compressor,0,1,0.503,LOW,False
255
+ 1421,Turbine,1,0,0.2026,MEDIUM,False
256
+ 1427,Pump,1,0,0.1057,HIGH,False
257
+ 1424,Turbine,0,1,0.5355,LOW,False
258
+ 1436,Pump,0,1,0.6817,MEDIUM,False
259
+ 1439,Turbine,0,1,0.5813,LOW,False
260
+ 1441,Compressor,0,1,0.7032,MEDIUM,False
261
+ 1437,Pump,0,1,0.5031,LOW,False
262
+ 1446,Compressor,0,1,0.6421,LOW,False
263
+ 1444,Compressor,0,1,0.535,LOW,False
264
+ 1449,Compressor,0,1,0.5491,LOW,False
265
+ 1453,Compressor,0,1,0.5485,LOW,False
266
+ 1467,Turbine,1,0,0.4487,LOW,False
267
+ 1465,Compressor,0,1,0.5274,LOW,False
268
+ 1471,Turbine,0,1,0.6335,LOW,False
269
+ 1476,Compressor,1,0,0.4942,LOW,False
270
+ 1475,Pump,1,0,0.4857,LOW,False
271
+ 1480,Compressor,0,1,0.5652,LOW,False
272
+ 1482,Compressor,0,1,0.6355,LOW,False
273
+ 1495,Turbine,1,0,0.3364,MEDIUM,False
274
+ 1502,Compressor,0,1,0.5017,LOW,False
275
+ 1509,Compressor,0,1,0.6599,MEDIUM,False
276
+ 1508,Turbine,0,1,0.5307,LOW,False
277
+ 1506,Compressor,0,1,0.6483,LOW,False
278
+ 1510,Pump,1,0,0.4005,LOW,False
279
+ 1515,Compressor,0,1,0.5334,LOW,False
280
+ 1519,Compressor,0,1,0.6166,LOW,False
281
+ 1522,Turbine,0,1,0.5689,LOW,False
282
+ 1537,Turbine,0,1,0.5335,LOW,False
283
+ 1535,Compressor,0,1,0.5191,LOW,False
284
+ 1543,Compressor,1,0,0.0867,HIGH,False
285
+ 1546,Compressor,0,1,0.5807,LOW,False
286
+ 1555,Turbine,0,1,0.5088,LOW,False
287
+ 1553,Pump,0,1,0.5171,LOW,False
288
+ 1560,Turbine,0,1,0.5047,LOW,False
289
+ 1574,Pump,1,0,0.4665,LOW,False
290
+ 1581,Turbine,0,1,0.5791,LOW,False
291
+ 1585,Turbine,1,0,0.1408,HIGH,False
292
+ 1591,Compressor,0,1,0.5145,LOW,False
293
+ 1593,Turbine,1,0,0.3941,LOW,False
294
+ 1594,Turbine,1,0,0.077,HIGH,False
295
+ 1598,Turbine,0,1,0.5118,LOW,False
296
+ 1605,Compressor,0,1,0.5566,LOW,False
297
+ 1606,Pump,0,1,0.6059,LOW,False
298
+ 1613,Pump,1,0,0.2086,MEDIUM,False
299
+ 1634,Compressor,0,1,0.5078,LOW,False
300
+ 1633,Pump,0,1,0.6163,LOW,False
301
+ 1636,Pump,0,1,0.5141,LOW,False
302
+ 1635,Compressor,0,1,0.6369,LOW,False
303
+ 1646,Compressor,0,1,0.5593,LOW,False
304
+ 1649,Pump,1,0,0.3063,MEDIUM,False
305
+ 1654,Compressor,0,1,0.5094,LOW,False
306
+ 1661,Pump,0,1,0.5343,LOW,False
307
+ 1659,Pump,1,0,0.2537,MEDIUM,False
308
+ 1663,Pump,0,1,0.5288,LOW,False
309
+ 1676,Compressor,0,1,0.5071,LOW,False
310
+ 1683,Turbine,0,1,0.6459,LOW,False
311
+ 1682,Pump,0,1,0.5433,LOW,False
312
+ 1688,Compressor,0,1,0.5479,LOW,False
313
+ 1691,Compressor,0,1,0.5148,LOW,False
314
+ 1692,Compressor,0,1,0.5516,LOW,False
315
+ 1699,Pump,0,1,0.61,LOW,False
316
+ 1702,Turbine,0,1,0.5199,LOW,False
317
+ 1703,Compressor,0,1,0.5247,LOW,False
318
+ 1726,Compressor,0,1,0.6073,LOW,False
319
+ 1729,Compressor,0,1,0.5002,LOW,False
320
+ 1728,Turbine,0,1,0.6902,MEDIUM,False
321
+ 1747,Compressor,0,1,0.5338,LOW,False
322
+ 1752,Compressor,0,1,0.7089,MEDIUM,False
323
+ 1758,Compressor,0,1,0.5727,LOW,False
324
+ 1756,Compressor,1,0,0.4462,LOW,False
325
+ 1755,Compressor,0,1,0.5045,LOW,False
326
+ 1762,Turbine,0,1,0.5125,LOW,False
327
+ 1760,Compressor,1,0,0.3242,MEDIUM,False
328
+ 1774,Turbine,0,1,0.5484,LOW,False
329
+ 1786,Compressor,1,0,0.3284,MEDIUM,False
330
+ 1783,Compressor,0,1,0.5148,LOW,False
331
+ 1796,Pump,0,1,0.5465,LOW,False
332
+ 1795,Turbine,0,1,0.5355,LOW,False
333
+ 1804,Pump,0,1,0.503,LOW,False
334
+ 1809,Turbine,0,1,0.5467,LOW,False
335
+ 1812,Turbine,0,1,0.5328,LOW,False
336
+ 1821,Compressor,0,1,0.5431,LOW,False
337
+ 1818,Pump,0,1,0.5079,LOW,False
338
+ 1826,Turbine,0,1,0.5333,LOW,False
339
+ 1828,Pump,0,1,0.617,LOW,False
340
+ 1837,Compressor,1,0,0.4784,LOW,False
341
+ 1840,Turbine,0,1,0.5022,LOW,False
342
+ 1844,Turbine,1,0,0.2926,MEDIUM,False
343
+ 1846,Compressor,0,1,0.51,LOW,False
344
+ 1869,Pump,1,0,0.3355,MEDIUM,False
345
+ 1874,Pump,1,0,0.4249,LOW,False
346
+ 1877,Turbine,0,1,0.5109,LOW,False
347
+ 1891,Turbine,1,0,0.4626,LOW,False
348
+ 1892,Turbine,0,1,0.5254,LOW,False
349
+ 1898,Pump,0,1,0.5147,LOW,False
350
+ 1896,Pump,0,1,0.5206,LOW,False
351
+ 1897,Turbine,0,1,0.5765,LOW,False
352
+ 1900,Pump,1,0,0.3817,LOW,False
353
+ 1901,Compressor,0,1,0.652,MEDIUM,False
354
+ 1907,Pump,0,1,0.517,LOW,False
355
+ 1913,Turbine,0,1,0.5749,LOW,False
356
+ 1928,Pump,0,1,0.5207,LOW,False
357
+ 1932,Compressor,0,1,0.5414,LOW,False
358
+ 1930,Compressor,0,1,0.5477,LOW,False
359
+ 1938,Turbine,0,1,0.624,LOW,False
360
+ 1948,Turbine,1,0,0.4146,LOW,False
361
+ 1951,Pump,0,1,0.5031,LOW,False
362
+ 1961,Turbine,0,1,0.5103,LOW,False
363
+ 1962,Pump,0,1,0.5317,LOW,False
364
+ 1970,Compressor,0,1,0.5231,LOW,False
365
+ 1972,Pump,0,1,0.5443,LOW,False
366
+ 1971,Turbine,0,1,0.5441,LOW,False
367
+ 1978,Pump,0,1,0.5188,LOW,False
368
+ 1983,Turbine,1,0,0.4771,LOW,False
369
+ 1984,Pump,0,1,0.5329,LOW,False
370
+ 1988,Compressor,0,1,0.5351,LOW,False
371
+ 1992,Compressor,0,1,0.6943,MEDIUM,False
372
+ 1991,Turbine,0,1,0.7222,MEDIUM,False
373
+ 1998,Pump,0,1,0.6693,MEDIUM,False
374
+ 1997,Pump,0,1,0.5619,LOW,False
375
+ 1995,Pump,0,1,0.5007,LOW,False
376
+ 2000,Compressor,0,1,0.5787,LOW,False
377
+ 2007,Compressor,0,1,0.8454,MEDIUM,False
378
+ 2008,Turbine,0,1,0.5098,LOW,False
379
+ 2009,Compressor,1,0,0.4976,LOW,False
380
+ 2026,Turbine,1,0,0.1877,MEDIUM,False
381
+ 2029,Pump,0,1,0.5698,LOW,False
382
+ 2027,Turbine,0,1,0.5028,LOW,False
383
+ 2028,Turbine,0,1,0.5015,LOW,False
384
+ 2036,Turbine,0,1,0.5264,LOW,False
385
+ 2048,Turbine,0,1,0.5796,LOW,False
386
+ 2046,Pump,0,1,0.5437,LOW,False
387
+ 2050,Turbine,1,0,0.334,MEDIUM,False
388
+ 2052,Turbine,1,0,0.476,LOW,False
389
+ 2056,Compressor,0,1,0.6625,MEDIUM,False
390
+ 2069,Turbine,0,1,0.5087,LOW,False
391
+ 2065,Compressor,1,0,0.346,MEDIUM,False
392
+ 2068,Pump,0,1,0.5655,LOW,False
393
+ 2081,Turbine,0,1,0.522,LOW,False
394
+ 2083,Compressor,1,0,0.1618,MEDIUM,False
395
+ 2084,Turbine,0,1,0.5066,LOW,False
396
+ 2089,Pump,0,1,0.5672,LOW,False
397
+ 2098,Compressor,0,1,0.6184,LOW,False
398
+ 2102,Turbine,0,1,0.5873,LOW,False
399
+ 2101,Compressor,1,0,0.4229,LOW,False
400
+ 2106,Turbine,1,0,0.4864,LOW,False
401
+ 2114,Turbine,0,1,0.5157,LOW,False
402
+ 2124,Compressor,0,1,0.5355,LOW,False
403
+ 2119,Compressor,0,1,0.5395,LOW,False
404
+ 2122,Pump,0,1,0.5733,LOW,False
405
+ 2120,Turbine,1,0,0.399,LOW,False
406
+ 2126,Turbine,0,1,0.537,LOW,False
407
+ 2132,Pump,0,1,0.6042,LOW,False
408
+ 2128,Turbine,0,1,0.505,LOW,False
409
+ 2136,Compressor,0,1,0.5094,LOW,False
410
+ 2138,Pump,0,1,0.5864,LOW,False
411
+ 2144,Compressor,0,1,0.5292,LOW,False
412
+ 2146,Compressor,1,0,0.2572,MEDIUM,False
413
+ 2148,Compressor,0,1,0.5122,LOW,False
414
+ 2158,Turbine,1,0,0.3134,MEDIUM,False
415
+ 2160,Compressor,0,1,0.5697,LOW,False
416
+ 2163,Compressor,0,1,0.5342,LOW,False
417
+ 2165,Pump,0,1,0.5513,LOW,False
418
+ 2171,Compressor,0,1,0.7299,MEDIUM,False
419
+ 2177,Turbine,1,0,0.1917,MEDIUM,False
420
+ 2174,Turbine,1,0,0.2286,MEDIUM,False
421
+ 2182,Pump,0,1,0.5697,LOW,False
422
+ 2185,Turbine,1,0,0.1704,MEDIUM,False
423
+ 2191,Compressor,0,1,0.5556,LOW,False
424
+ 2188,Compressor,0,1,0.5527,LOW,False
425
+ 2197,Compressor,0,1,0.5637,LOW,False
426
+ 2195,Compressor,0,1,0.508,LOW,False
427
+ 2194,Turbine,0,1,0.5168,LOW,False
428
+ 2199,Pump,0,1,0.5262,LOW,False
429
+ 2214,Turbine,0,1,0.531,LOW,False
430
+ 2217,Compressor,0,1,0.513,LOW,False
431
+ 2222,Pump,0,1,0.6922,MEDIUM,False
432
+ 2223,Pump,0,1,0.6961,MEDIUM,False
433
+ 2226,Turbine,0,1,0.5167,LOW,False
434
+ 2229,Pump,1,0,0.4995,LOW,False
435
+ 2233,Pump,0,1,0.6308,LOW,False
436
+ 2240,Pump,0,1,0.5349,LOW,False
437
+ 2247,Compressor,1,0,0.4711,LOW,False
438
+ 2243,Pump,0,1,0.5792,LOW,False
439
+ 2248,Compressor,0,1,0.5802,LOW,False
440
+ 2252,Compressor,0,1,0.5388,LOW,False
441
+ 2270,Compressor,0,1,0.5839,LOW,False
442
+ 2278,Turbine,0,1,0.5634,LOW,False
443
+ 2281,Pump,1,0,0.2832,MEDIUM,False
444
+ 2286,Compressor,1,0,0.4606,LOW,False
445
+ 2283,Turbine,0,1,0.7134,MEDIUM,False
446
+ 2294,Turbine,0,1,0.5941,LOW,False
447
+ 2310,Pump,0,1,0.5991,LOW,False
448
+ 2309,Compressor,0,1,0.5464,LOW,False
449
+ 2315,Turbine,0,1,0.5479,LOW,False
450
+ 2314,Pump,1,0,0.4795,LOW,False
451
+ 2328,Turbine,0,1,0.5986,LOW,False
452
+ 2330,Pump,0,1,0.541,LOW,False
453
+ 2346,Turbine,0,1,0.525,LOW,False
454
+ 2348,Pump,0,1,0.6421,LOW,False
455
+ 2357,Turbine,0,1,0.5146,LOW,False
456
+ 2354,Compressor,0,1,0.6326,LOW,False
457
+ 2366,Compressor,0,1,0.6063,LOW,False
458
+ 2362,Pump,0,1,0.5189,LOW,False
459
+ 2368,Turbine,0,1,0.522,LOW,False
460
+ 2374,Pump,0,1,0.5342,LOW,False
461
+ 2384,Turbine,0,1,0.612,LOW,False
462
+ 2381,Pump,0,1,0.5767,LOW,False
463
+ 2392,Compressor,0,1,0.509,LOW,False
464
+ 2400,Turbine,1,0,0.3945,LOW,False
465
+ 2404,Compressor,1,0,0.4918,LOW,False
466
+ 2407,Compressor,1,0,0.3793,LOW,False
467
+ 2421,Pump,0,1,0.634,LOW,False
468
+ 2425,Pump,1,0,0.4323,LOW,False
469
+ 2441,Turbine,1,0,0.315,MEDIUM,False
470
+ 2439,Pump,0,1,0.5226,LOW,False
471
+ 2446,Compressor,0,1,0.5239,LOW,False
472
+ 2454,Turbine,0,1,0.7028,MEDIUM,False
473
+ 2455,Pump,1,0,0.3474,MEDIUM,False
474
+ 2456,Turbine,0,1,0.5039,LOW,False
475
+ 2474,Compressor,0,1,0.5223,LOW,False
476
+ 2488,Turbine,0,1,0.5286,LOW,False
477
+ 2482,Pump,0,1,0.5572,LOW,False
478
+ 2485,Compressor,0,1,0.5525,LOW,False
479
+ 2502,Turbine,0,1,0.5269,LOW,False
480
+ 2507,Pump,1,0,0.2302,MEDIUM,False
481
+ 2525,Compressor,0,1,0.5084,LOW,False
482
+ 2536,Compressor,1,0,0.3268,MEDIUM,False
483
+ 2540,Turbine,0,1,0.5055,LOW,False
484
+ 2542,Compressor,1,0,0.3743,LOW,False
485
+ 2541,Compressor,0,1,0.6266,LOW,False
486
+ 2547,Compressor,0,1,0.6109,LOW,False
487
+ 2553,Pump,0,1,0.6757,MEDIUM,False
488
+ 2551,Pump,0,1,0.5526,LOW,False
489
+ 2561,Pump,0,1,0.5521,LOW,False
490
+ 2564,Compressor,0,1,0.5218,LOW,False
491
+ 2566,Turbine,0,1,0.6478,LOW,False
492
+ 2575,Compressor,0,1,0.6063,LOW,False
493
+ 2589,Compressor,1,0,0.059,HIGH,False
494
+ 2597,Turbine,0,1,0.6978,MEDIUM,False
495
+ 2594,Turbine,0,1,0.6111,LOW,False
496
+ 2608,Pump,1,0,0.236,MEDIUM,False
497
+ 2607,Compressor,0,1,0.5377,LOW,False
498
+ 2612,Turbine,0,1,0.506,LOW,False
499
+ 2620,Compressor,0,1,0.546,LOW,False
500
+ 2629,Pump,0,1,0.515,LOW,False
501
+ 2625,Compressor,0,1,0.5358,LOW,False
502
+ 2654,Pump,0,1,0.5734,LOW,False
503
+ 2658,Pump,0,1,0.5015,LOW,False
504
+ 2665,Pump,0,1,0.739,MEDIUM,False
505
+ 2674,Compressor,0,1,0.5106,LOW,False
506
+ 2680,Turbine,0,1,0.5556,LOW,False
507
+ 2682,Compressor,0,1,0.545,LOW,False
508
+ 2684,Compressor,0,1,0.5337,LOW,False
509
+ 2686,Compressor,0,1,0.6184,LOW,False
510
+ 2696,Compressor,0,1,0.5584,LOW,False
511
+ 2688,Pump,0,1,0.5612,LOW,False
512
+ 2702,Turbine,0,1,0.7067,MEDIUM,False
513
+ 2708,Turbine,0,1,0.5228,LOW,False
514
+ 2714,Pump,0,1,0.577,LOW,False
515
+ 2739,Turbine,1,0,0.3999,LOW,False
516
+ 2743,Turbine,0,1,0.6405,LOW,False
517
+ 2750,Compressor,0,1,0.5027,LOW,False
518
+ 2755,Pump,0,1,0.5394,LOW,False
519
+ 2762,Compressor,0,1,0.672,MEDIUM,False
520
+ 2765,Turbine,1,0,0.0344,HIGH,False
521
+ 2782,Compressor,0,1,0.5664,LOW,False
522
+ 2784,Pump,0,1,0.5769,LOW,False
523
+ 2788,Pump,1,0,0.191,MEDIUM,False
524
+ 2786,Compressor,1,0,0.2175,MEDIUM,False
525
+ 2794,Pump,0,1,0.5912,LOW,False
526
+ 2806,Compressor,0,1,0.5926,LOW,False
527
+ 2808,Turbine,1,0,0.3387,MEDIUM,False
528
+ 2813,Compressor,0,1,0.6136,LOW,False
529
+ 2818,Turbine,0,1,0.6134,LOW,False
530
+ 2822,Compressor,0,1,0.5549,LOW,False
531
+ 2821,Compressor,0,1,0.6867,MEDIUM,False
532
+ 2832,Turbine,0,1,0.6806,MEDIUM,False
533
+ 2831,Pump,0,1,0.6685,MEDIUM,False
534
+ 2835,Compressor,1,0,0.4102,LOW,False
535
+ 2840,Pump,0,1,0.5905,LOW,False
536
+ 2841,Compressor,0,1,0.5296,LOW,False
537
+ 2848,Compressor,0,1,0.504,LOW,False
538
+ 2851,Turbine,1,0,0.1183,HIGH,False
539
+ 2859,Compressor,1,0,0.0641,HIGH,False
540
+ 2862,Compressor,0,1,0.5151,LOW,False
541
+ 2878,Pump,0,1,0.5694,LOW,False
542
+ 2872,Compressor,0,1,0.528,LOW,False
543
+ 2884,Compressor,0,1,0.5304,LOW,False
544
+ 2888,Pump,0,1,0.6226,LOW,False
545
+ 2890,Turbine,0,1,0.5228,LOW,False
546
+ 2896,Pump,0,1,0.5503,LOW,False
547
+ 2895,Compressor,0,1,0.6185,LOW,False
548
+ 2891,Pump,0,1,0.5551,LOW,False
549
+ 2899,Turbine,0,1,0.5096,LOW,False
550
+ 2902,Compressor,0,1,0.5226,LOW,False
551
+ 2908,Compressor,0,1,0.5541,LOW,False
552
+ 2913,Compressor,0,1,0.5063,LOW,False
553
+ 2917,Compressor,0,1,0.5407,LOW,False
554
+ 2920,Compressor,1,0,0.3175,MEDIUM,False
555
+ 2923,Pump,0,1,0.567,LOW,False
556
+ 2927,Compressor,0,1,0.5766,LOW,False
557
+ 2935,Turbine,0,1,0.5364,LOW,False
558
+ 2937,Turbine,1,0,0.4886,LOW,False
559
+ 2941,Compressor,0,1,0.5354,LOW,False
560
+ 2944,Pump,0,1,0.5102,LOW,False
561
+ 2951,Pump,0,1,0.5086,LOW,False
562
+ 2960,Turbine,0,1,0.5441,LOW,False
563
+ 2962,Compressor,1,0,0.4509,LOW,False
564
+ 2970,Compressor,0,1,0.511,LOW,False
565
+ 2973,Compressor,0,1,0.6026,LOW,False
566
+ 2969,Turbine,0,1,0.7009,MEDIUM,False
567
+ 2977,Pump,1,0,0.3737,LOW,False
568
+ 2976,Compressor,1,0,0.4832,LOW,False
569
+ 2978,Pump,0,1,0.5712,LOW,False
570
+ 2980,Pump,0,1,0.6221,LOW,False
571
+ 2981,Compressor,0,1,0.5177,LOW,False
572
+ 2986,Pump,0,1,0.521,LOW,False
573
+ 2988,Turbine,0,1,0.5969,LOW,False
574
+ 2990,Pump,1,0,0.3653,LOW,False
575
+ 2997,Turbine,1,0,0.1211,HIGH,False
576
+ 2994,Compressor,0,1,0.6084,LOW,False
577
+ 3004,Pump,1,0,0.4699,LOW,False
578
+ 3003,Compressor,0,1,0.5824,LOW,False
579
+ 3010,Compressor,1,0,0.1487,HIGH,False
580
+ 3020,Pump,0,1,0.5709,LOW,False
581
+ 3018,Turbine,0,1,0.5933,LOW,False
582
+ 3021,Pump,0,1,0.6123,LOW,False
583
+ 3025,Turbine,0,1,0.5357,LOW,False
584
+ 3034,Pump,0,1,0.5023,LOW,False
585
+ 3033,Compressor,0,1,0.6172,LOW,False
586
+ 3031,Pump,0,1,0.547,LOW,False
587
+ 3028,Compressor,0,1,0.6054,LOW,False
588
+ 3038,Pump,0,1,0.5736,LOW,False
589
+ 3048,Pump,0,1,0.5275,LOW,False
590
+ 3049,Turbine,0,1,0.6206,LOW,False
591
+ 3057,Compressor,1,0,0.3189,MEDIUM,False
592
+ 3056,Compressor,0,1,0.6622,MEDIUM,False
593
+ 3063,Pump,1,0,0.346,MEDIUM,False
594
+ 3066,Turbine,0,1,0.5145,LOW,False
595
+ 3079,Compressor,0,1,0.6498,LOW,False
596
+ 3085,Compressor,0,1,0.631,LOW,False
597
+ 3091,Compressor,1,0,0.1711,MEDIUM,False
598
+ 3107,Compressor,1,0,0.266,MEDIUM,False
599
+ 3111,Compressor,0,1,0.5183,LOW,False
600
+ 3119,Turbine,0,1,0.5746,LOW,False
601
+ 3131,Compressor,1,0,0.2521,MEDIUM,False
602
+ 3134,Turbine,0,1,0.5698,LOW,False
603
+ 3141,Turbine,0,1,0.5925,LOW,False
604
+ 3137,Compressor,0,1,0.5283,LOW,False
605
+ 3133,Pump,1,0,0.3355,MEDIUM,False
606
+ 3136,Pump,0,1,0.5281,LOW,False
607
+ 3140,Compressor,1,0,0.4129,LOW,False
608
+ 3148,Turbine,1,0,0.2342,MEDIUM,False
609
+ 3150,Pump,0,1,0.5774,LOW,False
610
+ 3186,Pump,0,1,0.5957,LOW,False
611
+ 3189,Turbine,0,1,0.5304,LOW,False
612
+ 3188,Pump,0,1,0.5268,LOW,False
613
+ 3192,Pump,0,1,0.557,LOW,False
614
+ 3205,Compressor,0,1,0.5514,LOW,False
615
+ 3215,Compressor,0,1,0.6267,LOW,False
616
+ 3216,Pump,0,1,0.5445,LOW,False
617
+ 3223,Turbine,0,1,0.501,LOW,False
618
+ 3236,Turbine,0,1,0.7373,MEDIUM,False
619
+ 3237,Pump,0,1,0.6064,LOW,False
620
+ 3246,Compressor,0,1,0.7539,MEDIUM,False
621
+ 3254,Pump,0,1,0.5229,LOW,False
622
+ 3251,Pump,0,1,0.5467,LOW,False
623
+ 3261,Compressor,0,1,0.708,MEDIUM,False
624
+ 3265,Pump,0,1,0.5214,LOW,False
625
+ 3274,Compressor,0,1,0.5472,LOW,False
626
+ 3273,Pump,0,1,0.5748,LOW,False
627
+ 3271,Compressor,0,1,0.6131,LOW,False
628
+ 3284,Compressor,0,1,0.5502,LOW,False
629
+ 3293,Pump,0,1,0.5592,LOW,False
630
+ 3288,Pump,1,0,0.4068,LOW,False
631
+ 3301,Pump,0,1,0.6194,LOW,False
632
+ 3300,Turbine,0,1,0.5171,LOW,False
633
+ 3304,Compressor,0,1,0.5586,LOW,False
634
+ 3307,Turbine,0,1,0.5313,LOW,False
635
+ 3313,Pump,1,0,0.3252,MEDIUM,False
636
+ 3316,Pump,0,1,0.6501,MEDIUM,False
637
+ 3315,Pump,1,0,0.4714,LOW,False
638
+ 3330,Compressor,0,1,0.6713,MEDIUM,False
639
+ 3336,Turbine,0,1,0.5258,LOW,False
640
+ 3346,Compressor,0,1,0.5045,LOW,False
641
+ 3342,Pump,0,1,0.5686,LOW,False
642
+ 3345,Compressor,0,1,0.5722,LOW,False
643
+ 3344,Turbine,0,1,0.5985,LOW,False
644
+ 3351,Pump,0,1,0.6467,LOW,False
645
+ 3358,Compressor,0,1,0.6394,LOW,False
646
+ 3364,Turbine,0,1,0.5959,LOW,False
647
+ 3366,Turbine,0,1,0.5285,LOW,False
648
+ 3379,Compressor,0,1,0.5794,LOW,False
649
+ 3388,Pump,1,0,0.4711,LOW,False
650
+ 3392,Turbine,0,1,0.5708,LOW,False
651
+ 3397,Compressor,0,1,0.5242,LOW,False
652
+ 3394,Turbine,0,1,0.5061,LOW,False
653
+ 3395,Pump,1,0,0.2455,MEDIUM,False
654
+ 3396,Turbine,0,1,0.5338,LOW,False
655
+ 3399,Compressor,0,1,0.5725,LOW,False
656
+ 3405,Compressor,0,1,0.5971,LOW,False
657
+ 3403,Compressor,0,1,0.529,LOW,False
658
+ 3401,Compressor,0,1,0.6578,MEDIUM,False
659
+ 3420,Pump,0,1,0.5294,LOW,False
660
+ 3429,Pump,0,1,0.5028,LOW,False
661
+ 3435,Turbine,0,1,0.5315,LOW,False
662
+ 3441,Pump,0,1,0.558,LOW,False
663
+ 3440,Turbine,1,0,0.2249,MEDIUM,False
664
+ 3442,Turbine,0,1,0.5215,LOW,False
665
+ 3439,Compressor,0,1,0.5341,LOW,False
666
+ 3450,Turbine,0,1,0.5357,LOW,False
667
+ 3452,Compressor,0,1,0.5452,LOW,False
668
+ 3458,Pump,0,1,0.5047,LOW,False
669
+ 3456,Compressor,1,0,0.3356,MEDIUM,False
670
+ 3460,Pump,0,1,0.5483,LOW,False
671
+ 3469,Pump,0,1,0.5151,LOW,False
672
+ 3495,Turbine,0,1,0.6138,LOW,False
673
+ 3498,Pump,0,1,0.6011,LOW,False
674
+ 3500,Pump,0,1,0.6078,LOW,False
675
+ 3507,Turbine,1,0,0.3815,LOW,False
676
+ 3514,Pump,0,1,0.575,LOW,False
677
+ 3517,Turbine,0,1,0.5374,LOW,False
678
+ 3520,Pump,1,0,0.4091,LOW,False
679
+ 3521,Pump,0,1,0.5661,LOW,False
680
+ 3533,Compressor,0,1,0.5293,LOW,False
681
+ 3531,Compressor,0,1,0.5013,LOW,False
682
+ 3536,Compressor,0,1,0.5036,LOW,False
683
+ 3545,Turbine,1,0,0.2859,MEDIUM,False
684
+ 3547,Compressor,0,1,0.5427,LOW,False
685
+ 3553,Turbine,0,1,0.5327,LOW,False
686
+ 3570,Compressor,1,0,0.2917,MEDIUM,False
687
+ 3580,Compressor,0,1,0.6093,LOW,False
688
+ 3593,Pump,0,1,0.535,LOW,False
689
+ 3597,Compressor,0,1,0.6113,LOW,False
690
+ 3605,Pump,0,1,0.5407,LOW,False
691
+ 3610,Pump,1,0,0.1609,MEDIUM,False
692
+ 3618,Turbine,0,1,0.5339,LOW,False
693
+ 3623,Pump,0,1,0.5656,LOW,False
694
+ 3608,Pump,1,0,0.2673,MEDIUM,False
695
+ 3630,Compressor,1,0,0.3113,MEDIUM,False
696
+ 3637,Compressor,0,1,0.5592,LOW,False
697
+ 3633,Turbine,0,1,0.5446,LOW,False
698
+ 3641,Compressor,0,1,0.5583,LOW,False
699
+ 3644,Compressor,0,1,0.5114,LOW,False
700
+ 3645,Compressor,0,1,0.5098,LOW,False
701
+ 3650,Pump,0,1,0.5608,LOW,False
702
+ 3656,Turbine,0,1,0.5571,LOW,False
703
+ 3658,Compressor,0,1,0.5001,LOW,False
704
+ 3657,Turbine,0,1,0.5832,LOW,False
705
+ 3660,Turbine,0,1,0.5757,LOW,False
706
+ 3665,Compressor,0,1,0.5338,LOW,False
707
+ 3674,Turbine,0,1,0.7025,MEDIUM,False
708
+ 3675,Turbine,0,1,0.5167,LOW,False
709
+ 3679,Compressor,0,1,0.5222,LOW,False
710
+ 3676,Turbine,0,1,0.5557,LOW,False
711
+ 3687,Turbine,0,1,0.515,LOW,False
712
+ 3688,Turbine,0,1,0.5349,LOW,False
713
+ 3695,Turbine,1,0,0.1111,HIGH,False
714
+ 3709,Pump,0,1,0.5201,LOW,False
715
+ 3715,Turbine,0,1,0.5338,LOW,False
716
+ 3720,Pump,0,1,0.6168,LOW,False
717
+ 3728,Turbine,0,1,0.6406,LOW,False
718
+ 3727,Pump,1,0,0.2217,MEDIUM,False
719
+ 3733,Compressor,1,0,0.4174,LOW,False
720
+ 3741,Compressor,0,1,0.5243,LOW,False
721
+ 3742,Turbine,0,1,0.5635,LOW,False
722
+ 3736,Pump,0,1,0.6132,LOW,False
723
+ 3744,Turbine,0,1,0.5174,LOW,False
724
+ 3752,Pump,0,1,0.526,LOW,False
725
+ 3756,Turbine,0,1,0.5219,LOW,False
726
+ 3759,Compressor,0,1,0.5566,LOW,False
727
+ 3777,Pump,0,1,0.5959,LOW,False
728
+ 3789,Turbine,0,1,0.5234,LOW,False
729
+ 3783,Pump,0,1,0.5247,LOW,False
730
+ 3778,Compressor,0,1,0.5174,LOW,False
731
+ 3791,Turbine,0,1,0.5081,LOW,False
732
+ 3793,Compressor,0,1,0.6669,MEDIUM,False
733
+ 3794,Pump,0,1,0.5571,LOW,False
734
+ 3799,Compressor,0,1,0.5623,LOW,False
735
+ 3804,Compressor,1,0,0.4878,LOW,False
736
+ 3822,Turbine,0,1,0.5678,LOW,False
737
+ 3837,Turbine,0,1,0.5113,LOW,False
738
+ 3836,Pump,0,1,0.5204,LOW,False
739
+ 3841,Compressor,1,0,0.39,LOW,False
740
+ 3845,Turbine,1,0,0.3973,LOW,False
741
+ 3851,Pump,0,1,0.5523,LOW,False
742
+ 3871,Pump,0,1,0.5498,LOW,False
743
+ 3872,Pump,0,1,0.5671,LOW,False
744
+ 3874,Turbine,0,1,0.5136,LOW,False
745
+ 3886,Pump,0,1,0.5535,LOW,False
746
+ 3883,Turbine,0,1,0.6689,MEDIUM,False
747
+ 3888,Pump,0,1,0.5297,LOW,False
748
+ 3887,Turbine,1,0,0.1988,MEDIUM,False
749
+ 3900,Pump,0,1,0.5139,LOW,False
750
+ 3909,Pump,0,1,0.5053,LOW,False
751
+ 3902,Compressor,1,0,0.4464,LOW,False
752
+ 3918,Compressor,0,1,0.55,LOW,False
753
+ 3916,Pump,0,1,0.5126,LOW,False
754
+ 3924,Pump,0,1,0.5624,LOW,False
755
+ 3922,Pump,0,1,0.5392,LOW,False
756
+ 3925,Compressor,0,1,0.7303,MEDIUM,False
757
+ 3939,Pump,0,1,0.5185,LOW,False
758
+ 3943,Pump,0,1,0.5755,LOW,False
759
+ 3937,Compressor,1,0,0.4781,LOW,False
760
+ 3951,Pump,1,0,0.456,LOW,False
761
+ 3952,Turbine,0,1,0.5978,LOW,False
762
+ 3953,Pump,0,1,0.6641,MEDIUM,False
763
+ 3956,Pump,0,1,0.6241,LOW,False
764
+ 3969,Compressor,1,0,0.3342,MEDIUM,False
765
+ 3967,Turbine,0,1,0.5039,LOW,False
766
+ 3972,Turbine,1,0,0.4958,LOW,False
767
+ 3984,Turbine,1,0,0.2696,MEDIUM,False
768
+ 3995,Pump,1,0,0.3865,LOW,False
769
+ 3988,Turbine,0,1,0.6049,LOW,False
770
+ 3993,Pump,0,1,0.5922,LOW,False
771
+ 4001,Turbine,0,1,0.6474,LOW,False
772
+ 4006,Turbine,0,1,0.5303,LOW,False
773
+ 4003,Turbine,0,1,0.5777,LOW,False
774
+ 4009,Turbine,0,1,0.6231,LOW,False
775
+ 4014,Turbine,0,1,0.5283,LOW,False
776
+ 4010,Pump,0,1,0.5557,LOW,False
777
+ 4016,Pump,1,0,0.1813,MEDIUM,False
778
+ 4025,Turbine,0,1,0.513,LOW,False
779
+ 4030,Pump,0,1,0.6644,MEDIUM,False
780
+ 4032,Compressor,0,1,0.584,LOW,False
781
+ 4036,Compressor,0,1,0.5627,LOW,False
782
+ 4051,Compressor,0,1,0.6024,LOW,False
783
+ 4054,Pump,0,1,0.5366,LOW,False
784
+ 4059,Turbine,0,1,0.5056,LOW,False
785
+ 4070,Pump,1,0,0.3986,LOW,False
786
+ 4071,Pump,0,1,0.5663,LOW,False
787
+ 4077,Turbine,0,1,0.5558,LOW,False
788
+ 4074,Compressor,0,1,0.5711,LOW,False
789
+ 4082,Pump,0,1,0.5284,LOW,False
790
+ 4099,Compressor,0,1,0.5877,LOW,False
791
+ 4093,Turbine,0,1,0.5369,LOW,False
792
+ 4107,Turbine,0,1,0.528,LOW,False
793
+ 4113,Compressor,0,1,0.5557,LOW,False
794
+ 4118,Turbine,0,1,0.6355,LOW,False
795
+ 4127,Turbine,1,0,0.1988,MEDIUM,False
796
+ 4131,Turbine,0,1,0.5469,LOW,False
797
+ 4151,Compressor,0,1,0.7179,MEDIUM,False
798
+ 4156,Pump,0,1,0.6901,MEDIUM,False
799
+ 4161,Turbine,0,1,0.5311,LOW,False
800
+ 4165,Turbine,0,1,0.5474,LOW,False
801
+ 4166,Pump,1,0,0.1765,MEDIUM,False
802
+ 4175,Compressor,0,1,0.615,LOW,False
803
+ 4179,Compressor,0,1,0.5915,LOW,False
804
+ 4180,Turbine,0,1,0.6214,LOW,False
805
+ 4195,Turbine,0,1,0.5318,LOW,False
806
+ 4194,Pump,0,1,0.5094,LOW,False
807
+ 4198,Compressor,0,1,0.5543,LOW,False
808
+ 4209,Pump,0,1,0.5053,LOW,False
809
+ 4215,Turbine,0,1,0.5264,LOW,False
810
+ 4224,Compressor,0,1,0.6372,LOW,False
811
+ 4235,Pump,0,1,0.5272,LOW,False
812
+ 4238,Pump,0,1,0.7106,MEDIUM,False
813
+ 4244,Compressor,0,1,0.5506,LOW,False
814
+ 4246,Pump,0,1,0.5219,LOW,False
815
+ 4243,Turbine,0,1,0.5167,LOW,False
816
+ 4252,Pump,0,1,0.5003,LOW,False
817
+ 4264,Pump,0,1,0.5718,LOW,False
818
+ 4258,Pump,0,1,0.5666,LOW,False
819
+ 4266,Turbine,0,1,0.5837,LOW,False
820
+ 4267,Turbine,0,1,0.506,LOW,False
821
+ 4273,Pump,0,1,0.5447,LOW,False
822
+ 4271,Compressor,1,0,0.449,LOW,False
823
+ 4275,Pump,0,1,0.5455,LOW,False
824
+ 4277,Pump,0,1,0.5161,LOW,False
825
+ 4297,Compressor,0,1,0.5271,LOW,False
826
+ 4308,Compressor,0,1,0.6054,LOW,False
827
+ 4306,Pump,0,1,0.5574,LOW,False
828
+ 4309,Compressor,0,1,0.5838,LOW,False
829
+ 4305,Compressor,0,1,0.5742,LOW,False
830
+ 4310,Compressor,0,1,0.5462,LOW,False
831
+ 4312,Turbine,0,1,0.562,LOW,False
832
+ 4321,Turbine,0,1,0.5903,LOW,False
833
+ 4324,Compressor,0,1,0.6361,LOW,False
834
+ 4329,Compressor,0,1,0.7362,MEDIUM,False
835
+ 4337,Turbine,0,1,0.5532,LOW,False
836
+ 4341,Compressor,1,0,0.3505,LOW,False
837
+ 4359,Pump,1,0,0.4567,LOW,False
838
+ 4356,Pump,0,1,0.5192,LOW,False
839
+ 4363,Compressor,0,1,0.5516,LOW,False
840
+ 4369,Pump,0,1,0.5726,LOW,False
841
+ 4364,Pump,1,0,0.4616,LOW,False
842
+ 4373,Pump,0,1,0.6017,LOW,False
843
+ 4387,Turbine,1,0,0.0916,HIGH,False
844
+ 4390,Compressor,0,1,0.6876,MEDIUM,False
845
+ 4399,Turbine,0,1,0.5856,LOW,False
846
+ 4398,Turbine,0,1,0.5551,LOW,False
847
+ 4401,Pump,0,1,0.5097,LOW,False
848
+ 4403,Pump,0,1,0.5283,LOW,False
849
+ 4406,Turbine,1,0,0.076,HIGH,False
850
+ 4418,Pump,1,0,0.3871,LOW,False
851
+ 4419,Compressor,0,1,0.5047,LOW,False
852
+ 4429,Compressor,0,1,0.5159,LOW,False
853
+ 4428,Pump,1,0,0.0652,HIGH,False
854
+ 4427,Compressor,0,1,0.6488,LOW,False
855
+ 4432,Pump,1,0,0.2116,MEDIUM,False
856
+ 4438,Compressor,0,1,0.572,LOW,False
857
+ 4446,Pump,0,1,0.5417,LOW,False
858
+ 4448,Pump,1,0,0.3538,LOW,False
859
+ 4439,Compressor,0,1,0.5092,LOW,False
860
+ 4450,Turbine,0,1,0.5914,LOW,False
861
+ 4456,Compressor,1,0,0.3248,MEDIUM,False
862
+ 4454,Compressor,0,1,0.5989,LOW,False
863
+ 4469,Compressor,0,1,0.5156,LOW,False
864
+ 4472,Compressor,0,1,0.5283,LOW,False
865
+ 4455,Compressor,0,1,0.592,LOW,False
866
+ 4476,Pump,0,1,0.6561,MEDIUM,False
867
+ 4475,Pump,0,1,0.6142,LOW,False
868
+ 4461,Compressor,0,1,0.5144,LOW,False
869
+ 4483,Turbine,0,1,0.5836,LOW,False
870
+ 4477,Pump,0,1,0.548,LOW,False
871
+ 4490,Pump,0,1,0.6024,LOW,False
872
+ 4494,Compressor,0,1,0.5124,LOW,False
873
+ 4504,Compressor,0,1,0.5002,LOW,False
874
+ 4511,Compressor,0,1,0.5001,LOW,False
875
+ 4516,Pump,0,1,0.5604,LOW,False
876
+ 4515,Pump,0,1,0.7213,MEDIUM,False
877
+ 4528,Compressor,0,1,0.5099,LOW,False
878
+ 4539,Compressor,0,1,0.5506,LOW,False
879
+ 4542,Pump,0,1,0.6648,MEDIUM,False
880
+ 4540,Compressor,0,1,0.5296,LOW,False
881
+ 4545,Pump,0,1,0.5192,LOW,False
882
+ 4550,Compressor,0,1,0.5291,LOW,False
883
+ 4552,Turbine,1,0,0.1503,MEDIUM,False
884
+ 4554,Pump,0,1,0.5551,LOW,False
885
+ 4557,Compressor,0,1,0.5132,LOW,False
886
+ 4567,Turbine,1,0,0.3872,LOW,False
887
+ 4574,Turbine,0,1,0.5007,LOW,False
888
+ 4584,Compressor,0,1,0.5179,LOW,False
889
+ 4578,Compressor,0,1,0.5871,LOW,False
890
+ 4572,Compressor,0,1,0.6042,LOW,False
891
+ 4587,Pump,0,1,0.527,LOW,False
892
+ 4600,Pump,0,1,0.5159,LOW,False
893
+ 4602,Pump,0,1,0.599,LOW,False
894
+ 4608,Compressor,0,1,0.6086,LOW,False
895
+ 4624,Turbine,0,1,0.5086,LOW,False
896
+ 4636,Turbine,0,1,0.5709,LOW,False
897
+ 4638,Pump,0,1,0.6059,LOW,False
898
+ 4637,Compressor,0,1,0.5604,LOW,False
899
+ 4631,Pump,0,1,0.5445,LOW,False
900
+ 4644,Pump,0,1,0.7995,MEDIUM,False
901
+ 4642,Pump,1,0,0.4228,LOW,False
902
+ 4648,Pump,0,1,0.7226,MEDIUM,False
903
+ 4652,Compressor,0,1,0.6018,LOW,False
904
+ 4660,Pump,0,1,0.5917,LOW,False
905
+ 4667,Compressor,0,1,0.5111,LOW,False
906
+ 4668,Compressor,1,0,0.3728,LOW,False
907
+ 4681,Turbine,1,0,0.2344,MEDIUM,False
908
+ 4677,Turbine,0,1,0.5364,LOW,False
909
+ 4683,Turbine,0,1,0.5558,LOW,False
910
+ 4684,Pump,0,1,0.5003,LOW,False
911
+ 4693,Turbine,0,1,0.5594,LOW,False
912
+ 4694,Turbine,1,0,0.3173,MEDIUM,False
913
+ 4695,Compressor,0,1,0.5102,LOW,False
914
+ 4696,Compressor,0,1,0.7258,MEDIUM,False
915
+ 4702,Pump,1,0,0.4804,LOW,False
916
+ 4706,Compressor,0,1,0.5397,LOW,False
917
+ 4708,Turbine,0,1,0.5412,LOW,False
918
+ 4714,Pump,0,1,0.5241,LOW,False
919
+ 4712,Pump,0,1,0.5348,LOW,False
920
+ 4724,Compressor,0,1,0.6015,LOW,False
921
+ 4728,Turbine,1,0,0.3626,LOW,False
922
+ 4732,Compressor,0,1,0.5858,LOW,False
923
+ 4742,Compressor,0,1,0.6168,LOW,False
924
+ 4748,Turbine,0,1,0.5219,LOW,False
925
+ 4751,Compressor,0,1,0.63,LOW,False
926
+ 4763,Compressor,0,1,0.5915,LOW,False
927
+ 4764,Pump,0,1,0.7758,MEDIUM,False
928
+ 4773,Compressor,0,1,0.5512,LOW,False
929
+ 4785,Turbine,0,1,0.5039,LOW,False
930
+ 4777,Pump,1,0,0.4094,LOW,False
931
+ 4789,Compressor,0,1,0.5123,LOW,False
932
+ 4795,Compressor,0,1,0.5432,LOW,False
933
+ 4802,Turbine,0,1,0.5031,LOW,False
934
+ 4811,Compressor,0,1,0.5146,LOW,False
935
+ 4814,Pump,0,1,0.5344,LOW,False
936
+ 4808,Compressor,0,1,0.5343,LOW,False
937
+ 4812,Turbine,1,0,0.096,HIGH,False
938
+ 4825,Compressor,0,1,0.5647,LOW,False
939
+ 4829,Turbine,1,0,0.2328,MEDIUM,False
940
+ 4844,Compressor,0,1,0.5004,LOW,False
941
+ 4847,Pump,1,0,0.4294,LOW,False
942
+ 4852,Pump,0,1,0.5537,LOW,False
943
+ 4855,Compressor,0,1,0.5903,LOW,False
944
+ 4853,Pump,1,0,0.3464,MEDIUM,False
945
+ 4859,Compressor,0,1,0.5198,LOW,False
946
+ 4877,Compressor,0,1,0.7141,MEDIUM,False
947
+ 4883,Compressor,0,1,0.6069,LOW,False
948
+ 4894,Pump,0,1,0.5324,LOW,False
949
+ 4900,Pump,0,1,0.5205,LOW,False
950
+ 4907,Pump,0,1,0.6753,MEDIUM,False
951
+ 4918,Compressor,0,1,0.6565,MEDIUM,False
952
+ 4915,Turbine,0,1,0.5759,LOW,False
953
+ 4927,Compressor,1,0,0.1583,MEDIUM,False
954
+ 4925,Compressor,0,1,0.6212,LOW,False
955
+ 4932,Pump,0,1,0.5489,LOW,False
956
+ 4945,Turbine,0,1,0.5444,LOW,False
957
+ 4954,Pump,0,1,0.5462,LOW,False
958
+ 4957,Pump,0,1,0.6042,LOW,False
959
+ 4961,Compressor,0,1,0.6288,LOW,False
960
+ 4960,Pump,1,0,0.2479,MEDIUM,False
961
+ 4983,Turbine,0,1,0.5041,LOW,False
962
+ 4979,Turbine,0,1,0.5315,LOW,False
963
+ 4985,Compressor,0,1,0.5137,LOW,False
964
+ 4990,Pump,0,1,0.6027,LOW,False
965
+ 4992,Turbine,1,0,0.0562,HIGH,False
966
+ 4997,Compressor,0,1,0.5648,LOW,False
967
+ 5003,Compressor,0,1,0.546,LOW,False
968
+ 5000,Pump,1,0,0.3079,MEDIUM,False
969
+ 5010,Compressor,1,0,0.3418,MEDIUM,False
970
+ 5012,Compressor,0,1,0.5833,LOW,False
971
+ 5021,Compressor,1,0,0.2391,MEDIUM,False
972
+ 5028,Pump,1,0,0.0617,HIGH,False
973
+ 5029,Pump,1,0,0.3005,MEDIUM,False
974
+ 5030,Compressor,0,1,0.5552,LOW,False
975
+ 5050,Turbine,0,1,0.587,LOW,False
976
+ 5051,Turbine,1,0,0.4422,LOW,False
977
+ 5055,Turbine,0,1,0.5153,LOW,False
978
+ 5063,Pump,0,1,0.6096,LOW,False
979
+ 5061,Turbine,0,1,0.5826,LOW,False
980
+ 5066,Compressor,0,1,0.6041,LOW,False
981
+ 5073,Compressor,0,1,0.5256,LOW,False
982
+ 5071,Compressor,0,1,0.6201,LOW,False
983
+ 5082,Turbine,0,1,0.5005,LOW,False
984
+ 5088,Pump,0,1,0.5163,LOW,False
985
+ 5089,Compressor,0,1,0.5364,LOW,False
986
+ 5097,Compressor,0,1,0.5591,LOW,False
987
+ 5107,Turbine,0,1,0.6461,LOW,False
988
+ 5120,Pump,0,1,0.7095,MEDIUM,False
989
+ 5122,Compressor,0,1,0.5133,LOW,False
990
+ 5124,Turbine,0,1,0.5612,LOW,False
991
+ 5128,Turbine,0,1,0.5777,LOW,False
992
+ 5125,Turbine,0,1,0.5696,LOW,False
993
+ 5143,Compressor,0,1,0.6586,MEDIUM,False
994
+ 5142,Turbine,1,0,0.4509,LOW,False
995
+ 5144,Pump,0,1,0.51,LOW,False
996
+ 5148,Pump,1,0,0.2622,MEDIUM,False
997
+ 5146,Pump,0,1,0.5195,LOW,False
998
+ 5153,Turbine,0,1,0.5953,LOW,False
999
+ 5151,Compressor,0,1,0.5305,LOW,False
1000
+ 5159,Turbine,0,1,0.5019,LOW,False
1001
+ 5155,Pump,0,1,0.5461,LOW,False
1002
+ 5158,Pump,0,1,0.6462,LOW,False
1003
+ 5172,Pump,0,1,0.5348,LOW,False
1004
+ 5176,Pump,0,1,0.5626,LOW,False
1005
+ 5182,Compressor,1,0,0.4555,LOW,False
1006
+ 5189,Pump,0,1,0.5046,LOW,False
1007
+ 5192,Pump,0,1,0.5151,LOW,False
1008
+ 5194,Compressor,1,0,0.4907,LOW,False
1009
+ 5203,Pump,0,1,0.5731,LOW,False
1010
+ 5207,Turbine,0,1,0.5906,LOW,False
1011
+ 5216,Pump,1,0,0.4519,LOW,False
1012
+ 5224,Compressor,1,0,0.1191,HIGH,False
1013
+ 5227,Compressor,0,1,0.5045,LOW,False
1014
+ 5225,Pump,0,1,0.5102,LOW,False
1015
+ 5229,Turbine,0,1,0.665,MEDIUM,False
1016
+ 5235,Turbine,0,1,0.5558,LOW,False
1017
+ 5239,Turbine,0,1,0.6673,MEDIUM,False
1018
+ 5244,Pump,1,0,0.453,LOW,False
1019
+ 5249,Compressor,0,1,0.5083,LOW,False
1020
+ 5248,Compressor,0,1,0.5389,LOW,False
1021
+ 5247,Pump,0,1,0.6973,MEDIUM,False
1022
+ 5252,Compressor,0,1,0.5403,LOW,False
1023
+ 5257,Pump,0,1,0.5474,LOW,False
1024
+ 5273,Turbine,0,1,0.602,LOW,False
1025
+ 5260,Turbine,0,1,0.6729,MEDIUM,False
1026
+ 5270,Compressor,0,1,0.5026,LOW,False
1027
+ 5276,Compressor,0,1,0.7837,MEDIUM,False
1028
+ 5268,Turbine,0,1,0.5089,LOW,False
1029
+ 5280,Turbine,0,1,0.6109,LOW,False
1030
+ 5287,Turbine,1,0,0.3617,LOW,False
1031
+ 5288,Compressor,1,0,0.3886,LOW,False
1032
+ 5294,Turbine,0,1,0.5451,LOW,False
1033
+ 5299,Pump,1,0,0.4927,LOW,False
1034
+ 5306,Turbine,0,1,0.5361,LOW,False
1035
+ 5307,Turbine,0,1,0.5188,LOW,False
1036
+ 5311,Turbine,0,1,0.5094,LOW,False
1037
+ 5316,Turbine,1,0,0.4011,LOW,False
1038
+ 5327,Turbine,1,0,0.174,MEDIUM,False
1039
+ 5312,Turbine,1,0,0.2945,MEDIUM,False
1040
+ 5323,Compressor,0,1,0.6938,MEDIUM,False
1041
+ 5326,Turbine,0,1,0.6318,LOW,False
1042
+ 5334,Compressor,0,1,0.5185,LOW,False
1043
+ 5339,Turbine,0,1,0.5252,LOW,False
1044
+ 5338,Turbine,0,1,0.649,LOW,False
1045
+ 5348,Turbine,0,1,0.6983,MEDIUM,False
1046
+ 5351,Turbine,0,1,0.5216,LOW,False
1047
+ 5353,Turbine,1,0,0.3154,MEDIUM,False
1048
+ 5354,Compressor,1,0,0.4369,LOW,False
1049
+ 5363,Compressor,1,0,0.3844,LOW,False
1050
+ 5365,Compressor,0,1,0.507,LOW,False
1051
+ 5373,Turbine,0,1,0.5001,LOW,False
1052
+ 5385,Turbine,1,0,0.2251,MEDIUM,False
1053
+ 5381,Compressor,1,0,0.4484,LOW,False
1054
+ 5393,Compressor,0,1,0.5547,LOW,False
1055
+ 5392,Compressor,0,1,0.5081,LOW,False
1056
+ 5391,Pump,0,1,0.5334,LOW,False
1057
+ 5396,Compressor,0,1,0.5892,LOW,False
1058
+ 5400,Pump,1,0,0.4599,LOW,False
1059
+ 5401,Turbine,0,1,0.5858,LOW,False
1060
+ 5425,Compressor,0,1,0.6758,MEDIUM,False
1061
+ 5448,Compressor,1,0,0.3219,MEDIUM,False
1062
+ 5455,Pump,0,1,0.519,LOW,False
1063
+ 5456,Pump,0,1,0.6456,LOW,False
1064
+ 5461,Pump,0,1,0.523,LOW,False
1065
+ 5463,Turbine,0,1,0.5182,LOW,False
1066
+ 5464,Compressor,0,1,0.6406,LOW,False
1067
+ 5482,Pump,0,1,0.6565,MEDIUM,False
1068
+ 5491,Compressor,0,1,0.6321,LOW,False
1069
+ 5495,Turbine,0,1,0.6345,LOW,False
1070
+ 5502,Pump,0,1,0.5164,LOW,False
1071
+ 5505,Compressor,0,1,0.6814,MEDIUM,False
1072
+ 5509,Turbine,0,1,0.5085,LOW,False
1073
+ 5508,Pump,0,1,0.5644,LOW,False
1074
+ 5523,Pump,1,0,0.3253,MEDIUM,False
1075
+ 5522,Turbine,0,1,0.5388,LOW,False
1076
+ 5521,Pump,0,1,0.5103,LOW,False
1077
+ 5535,Compressor,0,1,0.5299,LOW,False
1078
+ 5538,Pump,0,1,0.602,LOW,False
1079
+ 5559,Pump,1,0,0.0441,HIGH,False
1080
+ 5571,Compressor,0,1,0.5856,LOW,False
1081
+ 5566,Compressor,0,1,0.565,LOW,False
1082
+ 5582,Compressor,0,1,0.5866,LOW,False
1083
+ 5593,Compressor,0,1,0.585,LOW,False
1084
+ 5596,Pump,0,1,0.5092,LOW,False
1085
+ 5608,Pump,0,1,0.6988,MEDIUM,False
1086
+ 5611,Compressor,0,1,0.5726,LOW,False
1087
+ 5633,Turbine,1,0,0.1426,HIGH,False
1088
+ 5638,Compressor,0,1,0.5823,LOW,False
1089
+ 5648,Pump,0,1,0.6481,LOW,False
1090
+ 5647,Compressor,0,1,0.6646,MEDIUM,False
1091
+ 5651,Pump,0,1,0.576,LOW,False
1092
+ 5658,Compressor,0,1,0.6052,LOW,False
1093
+ 5655,Pump,0,1,0.5027,LOW,False
1094
+ 5678,Pump,1,0,0.4636,LOW,False
1095
+ 5683,Compressor,0,1,0.517,LOW,False
1096
+ 5691,Pump,0,1,0.5015,LOW,False
1097
+ 5695,Pump,1,0,0.4447,LOW,False
1098
+ 5697,Pump,1,0,0.4393,LOW,False
1099
+ 5696,Turbine,0,1,0.5334,LOW,False
1100
+ 5709,Turbine,0,1,0.6218,LOW,False
1101
+ 5711,Pump,0,1,0.6394,LOW,False
1102
+ 5715,Turbine,1,0,0.3697,LOW,False
1103
+ 5726,Compressor,0,1,0.6002,LOW,False
1104
+ 5741,Pump,0,1,0.5274,LOW,False
1105
+ 5738,Pump,0,1,0.5165,LOW,False
1106
+ 5737,Compressor,0,1,0.6039,LOW,False
1107
+ 5745,Turbine,0,1,0.5098,LOW,False
1108
+ 5749,Compressor,0,1,0.5265,LOW,False
1109
+ 5750,Compressor,0,1,0.5405,LOW,False
1110
+ 5752,Compressor,0,1,0.5845,LOW,False
1111
+ 5751,Pump,0,1,0.6404,LOW,False
1112
+ 5760,Turbine,0,1,0.5376,LOW,False
1113
+ 5764,Turbine,0,1,0.5431,LOW,False
1114
+ 5774,Turbine,0,1,0.6652,MEDIUM,False
1115
+ 5768,Pump,0,1,0.5419,LOW,False
1116
+ 5772,Pump,0,1,0.5132,LOW,False
1117
+ 5783,Turbine,1,0,0.2993,MEDIUM,False
1118
+ 5786,Turbine,1,0,0.4474,LOW,False
1119
+ 5787,Compressor,0,1,0.5712,LOW,False
1120
+ 5790,Pump,0,1,0.5987,LOW,False
1121
+ 5799,Compressor,0,1,0.6855,MEDIUM,False
1122
+ 5812,Turbine,0,1,0.5941,LOW,False
1123
+ 5804,Turbine,1,0,0.2804,MEDIUM,False
1124
+ 5817,Compressor,0,1,0.5067,LOW,False
1125
+ 5818,Compressor,0,1,0.5006,LOW,False
1126
+ 5819,Turbine,1,0,0.3967,LOW,False
1127
+ 5830,Pump,0,1,0.5232,LOW,False
1128
+ 5833,Pump,0,1,0.5583,LOW,False
1129
+ 5841,Compressor,0,1,0.5582,LOW,False
1130
+ 5849,Pump,0,1,0.553,LOW,False
1131
+ 5851,Turbine,0,1,0.548,LOW,False
1132
+ 5854,Pump,0,1,0.5048,LOW,False
1133
+ 5858,Pump,0,1,0.6382,LOW,False
1134
+ 5853,Compressor,1,0,0.27,MEDIUM,False
1135
+ 5857,Turbine,1,0,0.3493,MEDIUM,False
1136
+ 5861,Compressor,0,1,0.5125,LOW,False
1137
+ 5870,Pump,0,1,0.6077,LOW,False
1138
+ 5876,Turbine,0,1,0.7156,MEDIUM,False
1139
+ 5872,Turbine,0,1,0.5682,LOW,False
1140
+ 5869,Compressor,0,1,0.5707,LOW,False
1141
+ 5878,Turbine,0,1,0.6063,LOW,False
1142
+ 5891,Turbine,0,1,0.5666,LOW,False
1143
+ 5912,Compressor,1,0,0.2123,MEDIUM,False
1144
+ 5904,Pump,1,0,0.0468,HIGH,False
1145
+ 5914,Pump,0,1,0.5302,LOW,False
1146
+ 5915,Pump,0,1,0.5449,LOW,False
1147
+ 5921,Turbine,0,1,0.5768,LOW,False
1148
+ 5929,Compressor,0,1,0.519,LOW,False
1149
+ 5935,Compressor,1,0,0.175,MEDIUM,False
1150
+ 5937,Pump,0,1,0.5468,LOW,False
1151
+ 5934,Compressor,0,1,0.5414,LOW,False
1152
+ 5946,Turbine,0,1,0.7032,MEDIUM,False
1153
+ 5944,Compressor,0,1,0.5249,LOW,False
1154
+ 5945,Turbine,1,0,0.4643,LOW,False
1155
+ 5943,Pump,0,1,0.5619,LOW,False
1156
+ 5951,Turbine,0,1,0.6145,LOW,False
1157
+ 5955,Turbine,0,1,0.5187,LOW,False
1158
+ 5979,Turbine,0,1,0.5499,LOW,False
1159
+ 5972,Turbine,0,1,0.5249,LOW,False
1160
+ 5985,Pump,0,1,0.6492,LOW,False
1161
+ 5984,Compressor,1,0,0.2312,MEDIUM,False
1162
+ 5993,Compressor,1,0,0.3176,MEDIUM,False
1163
+ 5992,Compressor,0,1,0.5591,LOW,False
1164
+ 6010,Turbine,1,0,0.1972,MEDIUM,False
1165
+ 6009,Compressor,0,1,0.5219,LOW,False
1166
+ 6008,Turbine,1,0,0.0954,HIGH,False
1167
+ 6002,Pump,0,1,0.6733,MEDIUM,False
1168
+ 6017,Pump,0,1,0.5802,LOW,False
1169
+ 6040,Pump,0,1,0.5263,LOW,False
1170
+ 6055,Compressor,1,0,0.44,LOW,False
1171
+ 6068,Compressor,0,1,0.5383,LOW,False
1172
+ 6059,Compressor,1,0,0.472,LOW,False
1173
+ 6078,Compressor,0,1,0.5969,LOW,False
1174
+ 6084,Compressor,0,1,0.5377,LOW,False
1175
+ 6077,Pump,1,0,0.397,LOW,False
1176
+ 6081,Compressor,0,1,0.5338,LOW,False
1177
+ 6086,Turbine,0,1,0.5617,LOW,False
1178
+ 6089,Turbine,0,1,0.5117,LOW,False
1179
+ 6087,Compressor,0,1,0.5336,LOW,False
1180
+ 6104,Pump,0,1,0.5216,LOW,False
1181
+ 6109,Compressor,0,1,0.5067,LOW,False
1182
+ 6117,Compressor,0,1,0.5539,LOW,False
1183
+ 6119,Turbine,1,0,0.3442,MEDIUM,False
1184
+ 6116,Turbine,0,1,0.5004,LOW,False
1185
+ 6124,Compressor,0,1,0.506,LOW,False
1186
+ 6137,Compressor,0,1,0.6046,LOW,False
1187
+ 6132,Pump,0,1,0.5548,LOW,False
1188
+ 6133,Compressor,0,1,0.5146,LOW,False
1189
+ 6139,Pump,1,0,0.3276,MEDIUM,False
1190
+ 6147,Turbine,0,1,0.5929,LOW,False
1191
+ 6149,Compressor,1,0,0.1256,HIGH,False
1192
+ 6155,Compressor,0,1,0.6208,LOW,False
1193
+ 6161,Compressor,0,1,0.5738,LOW,False
1194
+ 6165,Turbine,0,1,0.5217,LOW,False
1195
+ 6166,Turbine,0,1,0.5349,LOW,False
1196
+ 6172,Turbine,0,1,0.6699,MEDIUM,False
1197
+ 6175,Compressor,0,1,0.5774,LOW,False
1198
+ 6189,Turbine,0,1,0.5019,LOW,False
1199
+ 6196,Compressor,0,1,0.5504,LOW,False
1200
+ 6207,Compressor,1,0,0.4137,LOW,False
1201
+ 6218,Pump,0,1,0.5041,LOW,False
1202
+ 6239,Compressor,0,1,0.7953,MEDIUM,False
1203
+ 6245,Pump,0,1,0.5079,LOW,False
1204
+ 6262,Compressor,0,1,0.5358,LOW,False
1205
+ 6264,Turbine,0,1,0.615,LOW,False
1206
+ 6273,Pump,0,1,0.5136,LOW,False
1207
+ 6283,Pump,1,0,0.3479,MEDIUM,False
1208
+ 6282,Turbine,0,1,0.5333,LOW,False
1209
+ 6285,Turbine,0,1,0.5697,LOW,False
1210
+ 6289,Turbine,0,1,0.515,LOW,False
1211
+ 6310,Pump,1,0,0.4717,LOW,False
1212
+ 6323,Pump,0,1,0.7183,MEDIUM,False
1213
+ 6324,Turbine,0,1,0.5026,LOW,False
1214
+ 6340,Compressor,0,1,0.5533,LOW,False
1215
+ 6345,Compressor,0,1,0.627,LOW,False
1216
+ 6358,Turbine,0,1,0.5696,LOW,False
1217
+ 6359,Pump,0,1,0.562,LOW,False
1218
+ 6363,Compressor,0,1,0.6019,LOW,False
1219
+ 6366,Pump,1,0,0.3232,MEDIUM,False
1220
+ 6375,Pump,0,1,0.5668,LOW,False
1221
+ 6374,Turbine,0,1,0.6641,MEDIUM,False
1222
+ 6390,Pump,1,0,0.2338,MEDIUM,False
1223
+ 6395,Pump,0,1,0.5599,LOW,False
1224
+ 6401,Compressor,1,0,0.4362,LOW,False
1225
+ 6402,Compressor,1,0,0.236,MEDIUM,False
1226
+ 6412,Turbine,1,0,0.3308,MEDIUM,False
1227
+ 6419,Turbine,0,1,0.5898,LOW,False
1228
+ 6430,Turbine,1,0,0.3027,MEDIUM,False
1229
+ 6428,Pump,1,0,0.3306,MEDIUM,False
1230
+ 6437,Turbine,0,1,0.6126,LOW,False
1231
+ 6450,Turbine,1,0,0.1445,HIGH,False
1232
+ 6458,Compressor,0,1,0.511,LOW,False
1233
+ 6473,Compressor,0,1,0.5805,LOW,False
1234
+ 6463,Pump,0,1,0.522,LOW,False
1235
+ 6470,Compressor,1,0,0.2214,MEDIUM,False
1236
+ 6464,Pump,0,1,0.6075,LOW,False
1237
+ 6475,Pump,0,1,0.5373,LOW,False
1238
+ 6480,Compressor,0,1,0.5846,LOW,False
1239
+ 6485,Pump,0,1,0.5421,LOW,False
1240
+ 6487,Compressor,1,0,0.3885,LOW,False
1241
+ 6491,Pump,0,1,0.5678,LOW,False
1242
+ 6503,Compressor,1,0,0.4515,LOW,False
1243
+ 6506,Turbine,0,1,0.5086,LOW,False
1244
+ 6507,Pump,0,1,0.6396,LOW,False
1245
+ 6508,Turbine,0,1,0.5427,LOW,False
1246
+ 6515,Pump,0,1,0.5178,LOW,False
1247
+ 6519,Compressor,0,1,0.552,LOW,False
1248
+ 6528,Pump,0,1,0.5518,LOW,False
1249
+ 6529,Pump,1,0,0.4563,LOW,False
1250
+ 6534,Turbine,0,1,0.5105,LOW,False
1251
+ 6551,Compressor,0,1,0.5322,LOW,False
1252
+ 6550,Turbine,0,1,0.5687,LOW,False
1253
+ 6556,Pump,0,1,0.5027,LOW,False
1254
+ 6566,Turbine,1,0,0.2396,MEDIUM,False
1255
+ 6569,Pump,0,1,0.6778,MEDIUM,False
1256
+ 6576,Compressor,0,1,0.5947,LOW,False
1257
+ 6581,Turbine,1,0,0.3606,LOW,False
1258
+ 6577,Turbine,0,1,0.6205,LOW,False
1259
+ 6585,Pump,0,1,0.5497,LOW,False
1260
+ 6592,Pump,0,1,0.5602,LOW,False
1261
+ 6595,Compressor,0,1,0.543,LOW,False
1262
+ 6600,Compressor,0,1,0.6078,LOW,False
1263
+ 6602,Turbine,0,1,0.5162,LOW,False
1264
+ 6604,Compressor,1,0,0.4069,LOW,False
1265
+ 6610,Pump,0,1,0.5503,LOW,False
1266
+ 6619,Compressor,0,1,0.5411,LOW,False
1267
+ 6625,Turbine,0,1,0.5471,LOW,False
1268
+ 6622,Pump,0,1,0.6213,LOW,False
1269
+ 6633,Compressor,1,0,0.3849,LOW,False
1270
+ 6647,Turbine,0,1,0.5698,LOW,False
1271
+ 6646,Compressor,0,1,0.5545,LOW,False
1272
+ 6654,Pump,1,0,0.3147,MEDIUM,False
1273
+ 6656,Compressor,0,1,0.532,LOW,False
1274
+ 6663,Pump,0,1,0.5549,LOW,False
1275
+ 6662,Pump,0,1,0.5429,LOW,False
1276
+ 6672,Compressor,0,1,0.5051,LOW,False
1277
+ 6681,Turbine,0,1,0.5366,LOW,False
1278
+ 6682,Compressor,1,0,0.326,MEDIUM,False
1279
+ 6679,Pump,0,1,0.5144,LOW,False
1280
+ 6693,Turbine,0,1,0.5947,LOW,False
1281
+ 6702,Turbine,1,0,0.2903,MEDIUM,False
1282
+ 6716,Pump,1,0,0.4505,LOW,False
1283
+ 6712,Compressor,0,1,0.6308,LOW,False
1284
+ 6717,Pump,1,0,0.2792,MEDIUM,False
1285
+ 6726,Turbine,0,1,0.5493,LOW,False
1286
+ 6744,Compressor,0,1,0.6044,LOW,False
1287
+ 6749,Compressor,0,1,0.6997,MEDIUM,False
1288
+ 6752,Pump,0,1,0.5189,LOW,False
1289
+ 6759,Pump,1,0,0.0488,HIGH,False
1290
+ 6757,Pump,0,1,0.515,LOW,False
1291
+ 6763,Pump,0,1,0.724,MEDIUM,False
1292
+ 6769,Compressor,0,1,0.5317,LOW,False
1293
+ 6774,Turbine,0,1,0.5041,LOW,False
1294
+ 6770,Turbine,0,1,0.5918,LOW,False
1295
+ 6782,Pump,0,1,0.5784,LOW,False
1296
+ 6786,Turbine,0,1,0.6022,LOW,False
1297
+ 6785,Compressor,0,1,0.6275,LOW,False
1298
+ 6796,Turbine,1,0,0.4616,LOW,False
1299
+ 6802,Compressor,1,0,0.4839,LOW,False
1300
+ 6811,Compressor,0,1,0.5535,LOW,False
1301
+ 6817,Pump,0,1,0.5002,LOW,False
1302
+ 6818,Turbine,0,1,0.6193,LOW,False
1303
+ 6828,Compressor,1,0,0.4466,LOW,False
1304
+ 6816,Compressor,1,0,0.2589,MEDIUM,False
1305
+ 6822,Turbine,0,1,0.5348,LOW,False
1306
+ 6838,Compressor,0,1,0.5011,LOW,False
1307
+ 6839,Turbine,0,1,0.6009,LOW,False
1308
+ 6849,Turbine,0,1,0.5812,LOW,False
1309
+ 6850,Turbine,1,0,0.4826,LOW,False
1310
+ 6852,Pump,0,1,0.5326,LOW,False
1311
+ 6856,Turbine,0,1,0.5022,LOW,False
1312
+ 6857,Pump,0,1,0.5021,LOW,False
1313
+ 6869,Pump,0,1,0.535,LOW,False
1314
+ 6866,Compressor,0,1,0.5412,LOW,False
1315
+ 6879,Compressor,0,1,0.5568,LOW,False
1316
+ 6880,Compressor,1,0,0.2854,MEDIUM,False
1317
+ 6881,Compressor,0,1,0.5819,LOW,False
1318
+ 6884,Compressor,1,0,0.3803,LOW,False
1319
+ 6889,Compressor,0,1,0.6966,MEDIUM,False
1320
+ 6898,Turbine,0,1,0.5464,LOW,False
1321
+ 6886,Pump,0,1,0.6719,MEDIUM,False
1322
+ 6899,Compressor,1,0,0.2813,MEDIUM,False
1323
+ 6903,Compressor,0,1,0.6104,LOW,False
1324
+ 6906,Compressor,0,1,0.5376,LOW,False
1325
+ 6914,Pump,0,1,0.5107,LOW,False
1326
+ 6918,Turbine,0,1,0.6122,LOW,False
1327
+ 6920,Pump,1,0,0.0599,HIGH,False
1328
+ 6923,Turbine,0,1,0.6471,LOW,False
1329
+ 6922,Compressor,0,1,0.5886,LOW,False
1330
+ 6924,Compressor,0,1,0.5598,LOW,False
1331
+ 6929,Pump,0,1,0.5044,LOW,False
1332
+ 6935,Turbine,0,1,0.5322,LOW,False
1333
+ 6939,Turbine,0,1,0.6133,LOW,False
1334
+ 6934,Compressor,1,0,0.1402,HIGH,False
1335
+ 6944,Pump,0,1,0.6833,MEDIUM,False
1336
+ 6948,Compressor,1,0,0.1454,HIGH,False
1337
+ 6949,Compressor,0,1,0.6521,MEDIUM,False
1338
+ 6955,Pump,0,1,0.6127,LOW,False
1339
+ 6964,Compressor,0,1,0.7276,MEDIUM,False
1340
+ 6974,Compressor,0,1,0.5525,LOW,False
1341
+ 6985,Turbine,0,1,0.5342,LOW,False
1342
+ 6989,Turbine,1,0,0.2468,MEDIUM,False
1343
+ 6992,Pump,1,0,0.1603,MEDIUM,False
1344
+ 6995,Pump,1,0,0.4879,LOW,False
1345
+ 6991,Compressor,0,1,0.5282,LOW,False
1346
+ 7000,Compressor,0,1,0.6178,LOW,False
1347
+ 7003,Pump,0,1,0.6077,LOW,False
1348
+ 7006,Pump,0,1,0.6598,MEDIUM,False
1349
+ 7011,Turbine,0,1,0.5036,LOW,False
1350
+ 7013,Pump,0,1,0.5463,LOW,False
1351
+ 7022,Compressor,0,1,0.6005,LOW,False
1352
+ 7032,Turbine,1,0,0.3662,LOW,False
1353
+ 7047,Compressor,1,0,0.3829,LOW,False
1354
+ 7045,Turbine,1,0,0.1888,MEDIUM,False
1355
+ 7048,Compressor,0,1,0.6108,LOW,False
1356
+ 7054,Pump,0,1,0.5116,LOW,False
1357
+ 7053,Pump,0,1,0.5631,LOW,False
1358
+ 7059,Compressor,0,1,0.5525,LOW,False
1359
+ 7057,Pump,1,0,0.2804,MEDIUM,False
1360
+ 7062,Turbine,0,1,0.7466,MEDIUM,False
1361
+ 7069,Pump,0,1,0.6977,MEDIUM,False
1362
+ 7071,Compressor,0,1,0.5293,LOW,False
1363
+ 7077,Compressor,0,1,0.5822,LOW,False
1364
+ 7083,Compressor,1,0,0.4784,LOW,False
1365
+ 7095,Pump,0,1,0.6237,LOW,False
1366
+ 7108,Turbine,0,1,0.5422,LOW,False
1367
+ 7109,Compressor,1,0,0.4556,LOW,False
1368
+ 7110,Turbine,0,1,0.5366,LOW,False
1369
+ 7113,Compressor,1,0,0.4496,LOW,False
1370
+ 7121,Turbine,0,1,0.5264,LOW,False
1371
+ 7128,Pump,0,1,0.5339,LOW,False
1372
+ 7130,Pump,0,1,0.5623,LOW,False
1373
+ 7131,Turbine,0,1,0.5118,LOW,False
1374
+ 7137,Turbine,0,1,0.6153,LOW,False
1375
+ 7142,Pump,1,0,0.4233,LOW,False
1376
+ 7143,Turbine,1,0,0.4746,LOW,False
1377
+ 7159,Pump,0,1,0.5287,LOW,False
1378
+ 7163,Compressor,0,1,0.5621,LOW,False
1379
+ 7166,Pump,0,1,0.5821,LOW,False
1380
+ 7169,Pump,0,1,0.531,LOW,False
1381
+ 7181,Pump,0,1,0.6414,LOW,False
1382
+ 7185,Pump,0,1,0.5734,LOW,False
1383
+ 7231,Turbine,0,1,0.5245,LOW,False
1384
+ 7236,Compressor,0,1,0.5308,LOW,False
1385
+ 7233,Turbine,0,1,0.5989,LOW,False
1386
+ 7229,Pump,0,1,0.504,LOW,False
1387
+ 7254,Pump,0,1,0.6348,LOW,False
1388
+ 7259,Compressor,0,1,0.6684,MEDIUM,False
1389
+ 7263,Pump,0,1,0.531,LOW,False
1390
+ 7269,Pump,0,1,0.5046,LOW,False
1391
+ 7279,Turbine,0,1,0.5026,LOW,False
1392
+ 7295,Turbine,1,0,0.37,LOW,False
1393
+ 7296,Compressor,1,0,0.2482,MEDIUM,False
1394
+ 7307,Turbine,0,1,0.6269,LOW,False
1395
+ 7315,Compressor,0,1,0.5934,LOW,False
1396
+ 7316,Compressor,0,1,0.5138,LOW,False
1397
+ 7323,Pump,1,0,0.3301,MEDIUM,False
1398
+ 7328,Compressor,0,1,0.5073,LOW,False
1399
+ 7325,Pump,0,1,0.5076,LOW,False
1400
+ 7326,Compressor,0,1,0.5531,LOW,False
1401
+ 7332,Turbine,0,1,0.5184,LOW,False
1402
+ 7345,Pump,1,0,0.271,MEDIUM,False
1403
+ 7347,Turbine,0,1,0.5223,LOW,False
1404
+ 7349,Pump,0,1,0.575,LOW,False
1405
+ 7351,Pump,0,1,0.5516,LOW,False
1406
+ 7353,Turbine,0,1,0.5447,LOW,False
1407
+ 7359,Pump,0,1,0.5037,LOW,False
1408
+ 7362,Turbine,0,1,0.5015,LOW,False
1409
+ 7366,Compressor,1,0,0.3696,LOW,False
1410
+ 7365,Turbine,1,0,0.4885,LOW,False
1411
+ 7367,Compressor,0,1,0.5196,LOW,False
1412
+ 7373,Pump,0,1,0.5483,LOW,False
1413
+ 7375,Pump,1,0,0.1793,MEDIUM,False
1414
+ 7381,Turbine,0,1,0.5284,LOW,False
1415
+ 7382,Turbine,0,1,0.5169,LOW,False
1416
+ 7392,Compressor,0,1,0.632,LOW,False
1417
+ 7394,Compressor,0,1,0.5372,LOW,False
1418
+ 7403,Pump,1,0,0.4189,LOW,False
1419
+ 7416,Compressor,1,0,0.0995,HIGH,False
1420
+ 7418,Pump,0,1,0.5146,LOW,False
1421
+ 7422,Pump,0,1,0.5635,LOW,False
1422
+ 7435,Pump,0,1,0.5036,LOW,False
1423
+ 7440,Turbine,0,1,0.5104,LOW,False
1424
+ 7445,Compressor,0,1,0.5998,LOW,False
1425
+ 7461,Pump,0,1,0.5484,LOW,False
1426
+ 7469,Turbine,0,1,0.6521,MEDIUM,False
1427
+ 7476,Compressor,0,1,0.5155,LOW,False
1428
+ 7482,Turbine,1,0,0.2969,MEDIUM,False
1429
+ 7486,Compressor,0,1,0.6032,LOW,False
1430
+ 7489,Compressor,0,1,0.65,MEDIUM,False
1431
+ 7494,Compressor,0,1,0.5252,LOW,False
1432
+ 7513,Pump,0,1,0.5423,LOW,False
1433
+ 7522,Compressor,0,1,0.5632,LOW,False
1434
+ 7529,Pump,1,0,0.4069,LOW,False
1435
+ 7534,Turbine,0,1,0.5157,LOW,False
1436
+ 7536,Turbine,0,1,0.5496,LOW,False
1437
+ 7541,Turbine,1,0,0.218,MEDIUM,False
1438
+ 7545,Compressor,0,1,0.5134,LOW,False
1439
+ 7546,Compressor,0,1,0.6626,MEDIUM,False
1440
+ 7552,Compressor,0,1,0.688,MEDIUM,False
1441
+ 7555,Pump,0,1,0.5488,LOW,False
1442
+ 7554,Compressor,0,1,0.5421,LOW,False
1443
+ 7562,Pump,1,0,0.2638,MEDIUM,False
1444
+ 7585,Turbine,0,1,0.5264,LOW,False
1445
+ 7595,Compressor,0,1,0.5096,LOW,False
1446
+ 7599,Turbine,0,1,0.5385,LOW,False
1447
+ 7606,Compressor,0,1,0.5742,LOW,False
1448
+ 7608,Compressor,0,1,0.5289,LOW,False
1449
+ 7609,Pump,0,1,0.6295,LOW,False
1450
+ 7610,Pump,0,1,0.6025,LOW,False
1451
+ 7611,Pump,0,1,0.5427,LOW,False
1452
+ 7623,Compressor,1,0,0.4277,LOW,False
1453
+ 7622,Turbine,0,1,0.5539,LOW,False
1454
+ 7626,Turbine,1,0,0.1758,MEDIUM,False
1455
+ 7635,Pump,0,1,0.5318,LOW,False
1456
+ 7642,Compressor,0,1,0.5181,LOW,False
1457
+ 7641,Turbine,1,0,0.4804,LOW,False
1458
+ 7658,Turbine,0,1,0.582,LOW,False
1459
+ 7668,Compressor,0,1,0.5389,LOW,False
1460
+ 7667,Compressor,0,1,0.6178,LOW,False
1461
+ 7670,Compressor,0,1,0.5204,LOW,False
1462
+ 7677,Pump,0,1,0.5774,LOW,False
1463
+ 7683,Compressor,1,0,0.2548,MEDIUM,False
1464
+ 7685,Compressor,0,1,0.5408,LOW,False
1465
+ 7696,Compressor,0,1,0.6427,LOW,False
1466
+ 7715,Turbine,0,1,0.5009,LOW,False
1467
+ 7723,Turbine,0,1,0.5465,LOW,False
1468
+ 7724,Turbine,0,1,0.5351,LOW,False
1469
+ 7728,Turbine,1,0,0.2388,MEDIUM,False
1470
+ 7731,Pump,0,1,0.5408,LOW,False
1471
+ 7735,Turbine,0,1,0.5574,LOW,False
1472
+ 7741,Pump,0,1,0.5905,LOW,False
1473
+ 7739,Compressor,0,1,0.6603,MEDIUM,False
1474
+ 7745,Pump,0,1,0.5288,LOW,False
1475
+ 7743,Turbine,0,1,0.5696,LOW,False
1476
+ 7749,Compressor,0,1,0.5203,LOW,False
1477
+ 7750,Turbine,0,1,0.5488,LOW,False
1478
+ 7756,Turbine,0,1,0.6766,MEDIUM,False
1479
+ 7757,Compressor,0,1,0.5986,LOW,False
1480
+ 7761,Compressor,1,0,0.1103,HIGH,False
1481
+ 7765,Turbine,1,0,0.3776,LOW,False
1482
+ 7770,Pump,0,1,0.5499,LOW,False
1483
+ 7769,Compressor,0,1,0.557,LOW,False
1484
+ 7775,Pump,0,1,0.5067,LOW,False
1485
+ 7779,Pump,0,1,0.589,LOW,False
1486
+ 7785,Pump,0,1,0.6946,MEDIUM,False
1487
+ 7788,Pump,1,0,0.2158,MEDIUM,False
1488
+ 7790,Pump,0,1,0.5896,LOW,False
1489
+ 7797,Compressor,0,1,0.5967,LOW,False
1490
+ 7811,Compressor,1,0,0.25,MEDIUM,False
1491
+ 7820,Pump,1,0,0.4181,LOW,False
1492
+ 7821,Pump,0,1,0.5457,LOW,False
1493
+ 7819,Compressor,0,1,0.5632,LOW,False
1494
+ 7822,Pump,0,1,0.624,LOW,False
1495
+ 7817,Pump,0,1,0.5184,LOW,False
1496
+ 7826,Turbine,1,0,0.3258,MEDIUM,False
1497
+ 7827,Compressor,0,1,0.5347,LOW,False
1498
+ 7835,Compressor,0,1,0.508,LOW,False
1499
+ 7840,Compressor,0,1,0.5116,LOW,False
1500
+ 7853,Compressor,0,1,0.7144,MEDIUM,False
1501
+ 7858,Turbine,1,0,0.4494,LOW,False
1502
+ 7866,Turbine,0,1,0.5078,LOW,False
1503
+ 7869,Compressor,0,1,0.5021,LOW,False
1504
+ 7877,Pump,0,1,0.5569,LOW,False
1505
+ 7874,Compressor,0,1,0.5793,LOW,False
1506
+ 7878,Pump,0,1,0.5573,LOW,False
1507
+ 7885,Pump,1,0,0.188,MEDIUM,False
1508
+ 7891,Pump,0,1,0.5091,LOW,False
1509
+ 7901,Pump,0,1,0.5697,LOW,False
1510
+ 7905,Turbine,1,0,0.2658,MEDIUM,False
1511
+ 7910,Turbine,0,1,0.5025,LOW,False
1512
+ 7915,Pump,0,1,0.5423,LOW,False
1513
+ 7914,Turbine,1,0,0.4827,LOW,False
1514
+ 7924,Turbine,0,1,0.5167,LOW,False
1515
+ 7928,Compressor,0,1,0.5047,LOW,False
1516
+ 7934,Pump,0,1,0.6016,LOW,False
1517
+ 7930,Turbine,0,1,0.6151,LOW,False
1518
+ 7940,Compressor,0,1,0.5565,LOW,False
1519
+ 7947,Turbine,0,1,0.5779,LOW,False
1520
+ 7946,Pump,0,1,0.5095,LOW,False
1521
+ 7948,Pump,0,1,0.5009,LOW,False
1522
+ 7966,Compressor,0,1,0.6756,MEDIUM,False
1523
+ 7974,Pump,0,1,0.5031,LOW,False
1524
+ 7978,Compressor,0,1,0.508,LOW,False
1525
+ 7986,Compressor,0,1,0.6103,LOW,False
1526
+ 7988,Turbine,0,1,0.6041,LOW,False
1527
+ 7995,Compressor,0,1,0.586,LOW,False
1528
+ 7999,Compressor,1,0,0.4977,LOW,False
1529
+ 8001,Turbine,0,1,0.525,LOW,False
1530
+ 8007,Compressor,0,1,0.6092,LOW,False
1531
+ 8026,Pump,0,1,0.5103,LOW,False
1532
+ 8030,Compressor,0,1,0.5439,LOW,False
1533
+ 8039,Turbine,1,0,0.3115,MEDIUM,False
1534
+ 8044,Pump,0,1,0.5472,LOW,False
1535
+ 8048,Pump,0,1,0.5627,LOW,False
1536
+ 8056,Turbine,0,1,0.5019,LOW,False
1537
+ 8057,Pump,0,1,0.6538,MEDIUM,False
1538
+ 8059,Turbine,0,1,0.6516,MEDIUM,False
1539
+ 8071,Pump,1,0,0.2917,MEDIUM,False
1540
+ 8072,Compressor,0,1,0.7121,MEDIUM,False
1541
+ 8077,Compressor,0,1,0.5028,LOW,False
1542
+ 8090,Turbine,0,1,0.5569,LOW,False
1543
+ 8097,Pump,0,1,0.5628,LOW,False
1544
+ 8099,Pump,0,1,0.685,MEDIUM,False
1545
+ 8103,Pump,0,1,0.6329,LOW,False
1546
+ 8106,Compressor,0,1,0.5008,LOW,False
1547
+ 8119,Pump,0,1,0.5583,LOW,False
1548
+ 8118,Compressor,0,1,0.6097,LOW,False
1549
+ 8121,Pump,0,1,0.5322,LOW,False
1550
+ 8127,Compressor,0,1,0.5634,LOW,False
1551
+ 8125,Pump,0,1,0.5248,LOW,False
1552
+ 8135,Compressor,1,0,0.186,MEDIUM,False
1553
+ 8144,Compressor,1,0,0.07,HIGH,False
1554
+ 8149,Turbine,1,0,0.4916,LOW,False
1555
+ 8155,Compressor,0,1,0.5545,LOW,False
1556
+ 8154,Turbine,0,1,0.6032,LOW,False
1557
+ 8171,Compressor,0,1,0.5342,LOW,False
1558
+ 8167,Turbine,0,1,0.5192,LOW,False
1559
+ 8173,Turbine,1,0,0.3562,LOW,False
1560
+ 8176,Compressor,0,1,0.5501,LOW,False
1561
+ 8178,Pump,0,1,0.5799,LOW,False
1562
+ 8181,Compressor,1,0,0.1393,HIGH,False
1563
+ 8184,Compressor,0,1,0.6101,LOW,False
1564
+ 8193,Compressor,1,0,0.4197,LOW,False
1565
+ 8192,Turbine,0,1,0.5362,LOW,False
1566
+ 8195,Turbine,0,1,0.5787,LOW,False
1567
+ 8200,Compressor,0,1,0.5179,LOW,False
1568
+ 8204,Compressor,0,1,0.5125,LOW,False
1569
+ 8205,Compressor,0,1,0.5281,LOW,False
1570
+ 8216,Compressor,0,1,0.5487,LOW,False
1571
+ 8219,Turbine,0,1,0.5568,LOW,False
1572
+ 8225,Compressor,0,1,0.6922,MEDIUM,False
1573
+ 8227,Turbine,0,1,0.5049,LOW,False
1574
+ 8239,Compressor,0,1,0.6796,MEDIUM,False
1575
+ 8247,Pump,0,1,0.5395,LOW,False
1576
+ 8250,Turbine,1,0,0.2022,MEDIUM,False
1577
+ 8254,Compressor,0,1,0.5495,LOW,False
1578
+ 8259,Compressor,0,1,0.623,LOW,False
1579
+ 8257,Pump,0,1,0.5194,LOW,False
1580
+ 8260,Turbine,0,1,0.523,LOW,False
1581
+ 8261,Compressor,0,1,0.6969,MEDIUM,False
1582
+ 8262,Compressor,0,1,0.6495,LOW,False
1583
+ 8265,Pump,0,1,0.5223,LOW,False
1584
+ 8280,Turbine,1,0,0.0373,HIGH,False
1585
+ 8281,Turbine,0,1,0.6488,LOW,False
1586
+ 8289,Pump,1,0,0.4234,LOW,False
1587
+ 8292,Pump,0,1,0.5397,LOW,False
1588
+ 8293,Compressor,0,1,0.5077,LOW,False
1589
+ 8301,Pump,0,1,0.6048,LOW,False
1590
+ 8306,Compressor,0,1,0.5238,LOW,False
1591
+ 8303,Compressor,0,1,0.5604,LOW,False
1592
+ 8324,Pump,1,0,0.0637,HIGH,False
1593
+ 8323,Compressor,0,1,0.5362,LOW,False
1594
+ 8337,Pump,0,1,0.6535,MEDIUM,False
1595
+ 8339,Compressor,0,1,0.5393,LOW,False
1596
+ 8338,Turbine,0,1,0.5992,LOW,False
1597
+ 8349,Compressor,0,1,0.5032,LOW,False
1598
+ 8361,Compressor,0,1,0.5534,LOW,False
1599
+ 8364,Compressor,0,1,0.5447,LOW,False
1600
+ 8373,Compressor,0,1,0.5063,LOW,False
1601
+ 8381,Compressor,0,1,0.5096,LOW,False
1602
+ 8382,Pump,0,1,0.5276,LOW,False
1603
+ 8376,Compressor,1,0,0.3779,LOW,False
1604
+ 8387,Compressor,0,1,0.5411,LOW,False
1605
+ 8398,Turbine,0,1,0.546,LOW,False
1606
+ 8401,Pump,0,1,0.6176,LOW,False
1607
+ 8413,Compressor,0,1,0.5026,LOW,False
1608
+ 8412,Turbine,1,0,0.3689,LOW,False
1609
+ 8416,Compressor,0,1,0.5462,LOW,False
1610
+ 8417,Pump,0,1,0.5998,LOW,False
1611
+ 8424,Turbine,1,0,0.2057,MEDIUM,False
1612
+ 8423,Turbine,0,1,0.7146,MEDIUM,False
1613
+ 8425,Compressor,0,1,0.5623,LOW,False
1614
+ 8421,Pump,1,0,0.314,MEDIUM,False
1615
+ 8430,Turbine,1,0,0.0528,HIGH,False
1616
+ 8428,Turbine,0,1,0.5027,LOW,False
1617
+ 8436,Pump,0,1,0.5003,LOW,False
1618
+ 8440,Compressor,0,1,0.5363,LOW,False
1619
+ 8439,Compressor,0,1,0.5611,LOW,False
1620
+ 8443,Compressor,1,0,0.4913,LOW,False
1621
+ 8453,Compressor,0,1,0.5805,LOW,False
1622
+ 8460,Compressor,0,1,0.5469,LOW,False
1623
+ 8461,Compressor,0,1,0.5796,LOW,False
1624
+ 8463,Pump,1,0,0.4526,LOW,False
1625
+ 8470,Turbine,0,1,0.642,LOW,False
1626
+ 8482,Pump,0,1,0.5604,LOW,False
1627
+ 8481,Pump,0,1,0.5657,LOW,False
1628
+ 8487,Compressor,0,1,0.5179,LOW,False
1629
+ 8494,Compressor,0,1,0.5012,LOW,False
1630
+ 8498,Compressor,0,1,0.5216,LOW,False
1631
+ 8499,Compressor,0,1,0.58,LOW,False
1632
+ 8502,Turbine,1,0,0.3147,MEDIUM,False
1633
+ 8511,Turbine,1,0,0.4785,LOW,False
1634
+ 8518,Compressor,0,1,0.5922,LOW,False
1635
+ 8519,Turbine,0,1,0.5453,LOW,False
1636
+ 8525,Compressor,0,1,0.548,LOW,False
1637
+ 8529,Turbine,0,1,0.7393,MEDIUM,False
1638
+ 8530,Turbine,0,1,0.5521,LOW,False
1639
+ 8531,Turbine,0,1,0.5114,LOW,False
1640
+ 8539,Pump,0,1,0.6092,LOW,False
1641
+ 8545,Pump,0,1,0.5045,LOW,False
1642
+ 8546,Compressor,0,1,0.6495,LOW,False
1643
+ 8550,Turbine,0,1,0.5004,LOW,False
1644
+ 8553,Compressor,0,1,0.5045,LOW,False
1645
+ 8555,Turbine,1,0,0.3288,MEDIUM,False
1646
+ 8562,Pump,0,1,0.6437,LOW,False
1647
+ 8578,Turbine,1,0,0.1883,MEDIUM,False
1648
+ 8580,Pump,0,1,0.5738,LOW,False
1649
+ 8586,Compressor,0,1,0.5794,LOW,False
1650
+ 8594,Pump,0,1,0.5001,LOW,False
1651
+ 8597,Turbine,0,1,0.5404,LOW,False
1652
+ 8601,Pump,0,1,0.5445,LOW,False
1653
+ 8612,Turbine,0,1,0.5231,LOW,False
1654
+ 8617,Compressor,0,1,0.6205,LOW,False
1655
+ 8622,Turbine,0,1,0.5931,LOW,False
1656
+ 8623,Pump,0,1,0.5273,LOW,False
1657
+ 8638,Compressor,0,1,0.5143,LOW,False
1658
+ 8641,Pump,0,1,0.6846,MEDIUM,False
1659
+ 8653,Pump,1,0,0.2757,MEDIUM,False
1660
+ 8663,Pump,0,1,0.5467,LOW,False
1661
+ 8664,Turbine,0,1,0.5213,LOW,False
1662
+ 8669,Compressor,1,0,0.4065,LOW,False
1663
+ 8678,Pump,1,0,0.1353,HIGH,False
1664
+ 8680,Turbine,0,1,0.5329,LOW,False
1665
+ 8685,Compressor,0,1,0.6694,MEDIUM,False
1666
+ 8695,Turbine,0,1,0.5094,LOW,False
1667
+ 8698,Turbine,0,1,0.6163,LOW,False
1668
+ 8703,Turbine,0,1,0.6641,MEDIUM,False
1669
+ 8711,Turbine,0,1,0.5144,LOW,False
1670
+ 8713,Pump,0,1,0.5541,LOW,False
1671
+ 8716,Turbine,0,1,0.617,LOW,False
1672
+ 8719,Pump,0,1,0.5536,LOW,False
1673
+ 8726,Pump,0,1,0.5161,LOW,False
1674
+ 8737,Compressor,0,1,0.5586,LOW,False
1675
+ 8741,Compressor,1,0,0.3849,LOW,False
1676
+ 8761,Pump,0,1,0.5201,LOW,False
1677
+ 8765,Compressor,0,1,0.5259,LOW,False
1678
+ 8769,Compressor,0,1,0.6176,LOW,False
1679
+ 8767,Pump,0,1,0.5954,LOW,False
1680
+ 8782,Pump,0,1,0.5196,LOW,False
1681
+ 8783,Compressor,1,0,0.4759,LOW,False
1682
+ 8785,Compressor,0,1,0.5445,LOW,False
1683
+ 8803,Pump,0,1,0.6553,MEDIUM,False
1684
+ 8818,Compressor,0,1,0.5371,LOW,False
1685
+ 8817,Compressor,0,1,0.5836,LOW,False
1686
+ 8816,Pump,0,1,0.6154,LOW,False
1687
+ 8823,Pump,0,1,0.5241,LOW,False
1688
+ 8821,Compressor,1,0,0.4506,LOW,False
1689
+ 8837,Compressor,0,1,0.5282,LOW,False
1690
+ 8839,Compressor,0,1,0.519,LOW,False
1691
+ 8847,Compressor,0,1,0.5715,LOW,False
1692
+ 8851,Compressor,0,1,0.7073,MEDIUM,False
1693
+ 8856,Turbine,1,0,0.4977,LOW,False
1694
+ 8864,Pump,0,1,0.565,LOW,False
1695
+ 8863,Pump,0,1,0.5078,LOW,False
1696
+ 8868,Compressor,0,1,0.5326,LOW,False
1697
+ 8869,Compressor,0,1,0.6866,MEDIUM,False
1698
+ 8875,Pump,0,1,0.5031,LOW,False
1699
+ 8876,Compressor,1,0,0.2513,MEDIUM,False
1700
+ 8877,Pump,1,0,0.1742,MEDIUM,False
1701
+ 8872,Compressor,1,0,0.0693,HIGH,False
1702
+ 8887,Compressor,0,1,0.5531,LOW,False
1703
+ 8886,Compressor,0,1,0.5116,LOW,False
1704
+ 8893,Pump,0,1,0.5122,LOW,False
1705
+ 8895,Compressor,1,0,0.3231,MEDIUM,False
1706
+ 8897,Compressor,0,1,0.5744,LOW,False
1707
+ 8907,Compressor,0,1,0.6211,LOW,False
1708
+ 8913,Pump,1,0,0.3404,MEDIUM,False
1709
+ 8916,Compressor,0,1,0.5978,LOW,False
1710
+ 8918,Compressor,0,1,0.5703,LOW,False
1711
+ 8932,Pump,0,1,0.5184,LOW,False
1712
+ 8930,Pump,1,0,0.4379,LOW,False
1713
+ 8936,Turbine,0,1,0.581,LOW,False
1714
+ 8947,Turbine,0,1,0.5426,LOW,False
1715
+ 8949,Turbine,0,1,0.5816,LOW,False
1716
+ 8953,Pump,0,1,0.5726,LOW,False
1717
+ 8954,Compressor,0,1,0.8328,MEDIUM,False
1718
+ 8965,Compressor,1,0,0.3922,LOW,False
1719
+ 8962,Turbine,1,0,0.2067,MEDIUM,False
1720
+ 8974,Pump,1,0,0.2936,MEDIUM,False
1721
+ 8978,Turbine,0,1,0.541,LOW,False
1722
+ 8979,Compressor,0,1,0.5718,LOW,False
1723
+ 8983,Turbine,1,0,0.4869,LOW,False
1724
+ 8991,Pump,0,1,0.5413,LOW,False
1725
+ 8992,Pump,1,0,0.4247,LOW,False
1726
+ 8995,Turbine,0,1,0.5871,LOW,False
1727
+ 8999,Pump,0,1,0.5448,LOW,False
1728
+ 9001,Pump,0,1,0.5029,LOW,False
1729
+ 9004,Pump,0,1,0.5906,LOW,False
1730
+ 9005,Turbine,0,1,0.5047,LOW,False
1731
+ 9008,Pump,0,1,0.6243,LOW,False
1732
+ 9014,Pump,0,1,0.5449,LOW,False
1733
+ 9021,Compressor,0,1,0.5529,LOW,False
1734
+ 9018,Turbine,0,1,0.6051,LOW,False
1735
+ 9036,Pump,0,1,0.532,LOW,False
1736
+ 9041,Pump,0,1,0.6148,LOW,False
1737
+ 9047,Compressor,0,1,0.5098,LOW,False
1738
+ 9046,Pump,0,1,0.538,LOW,False
1739
+ 9054,Compressor,0,1,0.5454,LOW,False
1740
+ 9064,Pump,1,0,0.3264,MEDIUM,False
1741
+ 9071,Compressor,0,1,0.6293,LOW,False
1742
+ 9091,Compressor,0,1,0.5113,LOW,False
1743
+ 9099,Compressor,0,1,0.6347,LOW,False
1744
+ 9100,Compressor,0,1,0.6672,MEDIUM,False
1745
+ 9105,Turbine,0,1,0.5061,LOW,False
1746
+ 9115,Pump,0,1,0.5853,LOW,False
1747
+ 9139,Pump,0,1,0.6135,LOW,False
1748
+ 9153,Turbine,0,1,0.5057,LOW,False
1749
+ 9161,Pump,0,1,0.5469,LOW,False
1750
+ 9166,Compressor,0,1,0.5508,LOW,False
1751
+ 9173,Compressor,1,0,0.2224,MEDIUM,False
1752
+ 9171,Compressor,1,0,0.4177,LOW,False
1753
+ 9175,Pump,0,1,0.5998,LOW,False
1754
+ 9177,Pump,0,1,0.5138,LOW,False
1755
+ 9183,Compressor,1,0,0.1735,MEDIUM,False
1756
+ 9187,Pump,1,0,0.4417,LOW,False
1757
+ 9193,Pump,0,1,0.625,LOW,False
1758
+ 9206,Pump,0,1,0.5052,LOW,False
1759
+ 9215,Compressor,1,0,0.4509,LOW,False
1760
+ 9216,Turbine,1,0,0.2807,MEDIUM,False
1761
+ 9219,Pump,0,1,0.5096,LOW,False
1762
+ 9225,Turbine,1,0,0.4228,LOW,False
1763
+ 9227,Pump,0,1,0.6491,LOW,False
1764
+ 9229,Compressor,0,1,0.5999,LOW,False
1765
+ 9230,Pump,1,0,0.3028,MEDIUM,False
1766
+ 9228,Pump,1,0,0.2772,MEDIUM,False
1767
+ 9238,Pump,0,1,0.5078,LOW,False
1768
+ 9249,Pump,1,0,0.3842,LOW,False
1769
+ 9253,Turbine,0,1,0.6449,LOW,False
1770
+ 9255,Compressor,0,1,0.5757,LOW,False
1771
+ 9262,Compressor,0,1,0.637,LOW,False
1772
+ 9264,Pump,0,1,0.6774,MEDIUM,False
1773
+ 9265,Pump,0,1,0.6868,MEDIUM,False
1774
+ 9273,Turbine,1,0,0.2335,MEDIUM,False
1775
+ 9274,Compressor,0,1,0.5442,LOW,False
1776
+ 9277,Compressor,0,1,0.5809,LOW,False
1777
+ 9279,Compressor,0,1,0.5627,LOW,False
1778
+ 9282,Pump,0,1,0.6285,LOW,False
1779
+ 9275,Turbine,0,1,0.5985,LOW,False
1780
+ 9280,Pump,0,1,0.5377,LOW,False
1781
+ 9291,Compressor,0,1,0.5745,LOW,False
1782
+ 9294,Turbine,0,1,0.6404,LOW,False
1783
+ 9302,Pump,1,0,0.2593,MEDIUM,False
1784
+ 9326,Compressor,0,1,0.5055,LOW,False
1785
+ 9332,Turbine,0,1,0.5281,LOW,False
1786
+ 9337,Pump,0,1,0.5001,LOW,False
1787
+ 9328,Compressor,0,1,0.5493,LOW,False
1788
+ 9338,Compressor,0,1,0.5737,LOW,False
1789
+ 9341,Turbine,1,0,0.1247,HIGH,False
1790
+ 9346,Turbine,0,1,0.715,MEDIUM,False
1791
+ 9350,Compressor,0,1,0.5001,LOW,False
1792
+ 9362,Compressor,0,1,0.6225,LOW,False
1793
+ 9363,Turbine,1,0,0.4675,LOW,False
1794
+ 9376,Compressor,0,1,0.5355,LOW,False
1795
+ 9371,Pump,0,1,0.5173,LOW,False
1796
+ 9380,Pump,1,0,0.4444,LOW,False
1797
+ 9379,Compressor,0,1,0.6514,MEDIUM,False
1798
+ 9402,Turbine,1,0,0.1383,HIGH,False
1799
+ 9407,Compressor,1,0,0.2933,MEDIUM,False
1800
+ 9415,Compressor,0,1,0.5107,LOW,False
1801
+ 9433,Compressor,0,1,0.5608,LOW,False
1802
+ 9444,Compressor,0,1,0.5415,LOW,False
1803
+ 9451,Compressor,0,1,0.5512,LOW,False
1804
+ 9464,Turbine,1,0,0.4734,LOW,False
1805
+ 9468,Compressor,0,1,0.5216,LOW,False
1806
+ 9478,Pump,1,0,0.1534,MEDIUM,False
1807
+ 9486,Turbine,0,1,0.5831,LOW,False
1808
+ 9484,Pump,0,1,0.6109,LOW,False
1809
+ 9497,Compressor,1,0,0.3035,MEDIUM,False
1810
+ 9503,Pump,0,1,0.589,LOW,False
1811
+ 9513,Turbine,0,1,0.6526,MEDIUM,False
1812
+ 9512,Compressor,0,1,0.5133,LOW,False
1813
+ 9516,Turbine,0,1,0.5138,LOW,False
1814
+ 9519,Turbine,0,1,0.6344,LOW,False
1815
+ 9522,Compressor,0,1,0.5167,LOW,False
1816
+ 9526,Pump,0,1,0.5102,LOW,False
1817
+ 9528,Pump,1,0,0.4816,LOW,False
1818
+ 9532,Compressor,0,1,0.6024,LOW,False
1819
+ 9531,Pump,0,1,0.5648,LOW,False
1820
+ 9540,Turbine,1,0,0.4246,LOW,False
1821
+ 9535,Compressor,0,1,0.522,LOW,False
1822
+ 9534,Compressor,0,1,0.6432,LOW,False
1823
+ 9544,Turbine,0,1,0.6416,LOW,False
1824
+ 9550,Pump,0,1,0.5729,LOW,False
1825
+ 9558,Compressor,0,1,0.5341,LOW,False
1826
+ 9565,Compressor,1,0,0.4885,LOW,False
1827
+ 9569,Turbine,0,1,0.5089,LOW,False
1828
+ 9573,Turbine,0,1,0.512,LOW,False
1829
+ 9576,Turbine,0,1,0.5558,LOW,False
1830
+ 9589,Turbine,0,1,0.5113,LOW,False
1831
+ 9586,Turbine,0,1,0.5157,LOW,False
1832
+ 9582,Turbine,0,1,0.5217,LOW,False
1833
+ 9596,Pump,0,1,0.5753,LOW,False
1834
+ 9615,Pump,0,1,0.6396,LOW,False
1835
+ 9617,Pump,0,1,0.558,LOW,False
1836
+ 9619,Compressor,0,1,0.5452,LOW,False
1837
+ 9629,Turbine,0,1,0.5617,LOW,False
1838
+ 9636,Turbine,1,0,0.398,LOW,False
1839
+ 9640,Compressor,0,1,0.5191,LOW,False
1840
+ 9637,Pump,0,1,0.5619,LOW,False
1841
+ 9644,Compressor,0,1,0.5702,LOW,False
1842
+ 9651,Turbine,0,1,0.682,MEDIUM,False
1843
+ 9653,Compressor,0,1,0.5039,LOW,False
1844
+ 9655,Compressor,1,0,0.4376,LOW,False
1845
+ 9663,Pump,1,0,0.2265,MEDIUM,False
1846
+ 9669,Pump,0,1,0.5181,LOW,False
1847
+ 9677,Turbine,0,1,0.5373,LOW,False
1848
+ 9674,Pump,1,0,0.3146,MEDIUM,False
1849
+ 9685,Compressor,1,0,0.2073,MEDIUM,False
1850
+ 9686,Compressor,0,1,0.5331,LOW,False
1851
+ 9684,Pump,0,1,0.5567,LOW,False
1852
+ 9688,Pump,0,1,0.5017,LOW,False
1853
+ 9691,Turbine,0,1,0.6069,LOW,False
1854
+ 9694,Pump,0,1,0.5696,LOW,False
1855
+ 9697,Turbine,0,1,0.5815,LOW,False
1856
+ 9695,Compressor,0,1,0.6248,LOW,False
1857
+ 9704,Turbine,1,0,0.1505,MEDIUM,False
1858
+ 9706,Compressor,0,1,0.7362,MEDIUM,False
1859
+ 9708,Pump,0,1,0.5269,LOW,False
1860
+ 9722,Pump,0,1,0.5162,LOW,False
1861
+ 9735,Turbine,1,0,0.2969,MEDIUM,False
1862
+ 9734,Pump,0,1,0.7061,MEDIUM,False
1863
+ 9739,Compressor,0,1,0.56,LOW,False
1864
+ 9742,Compressor,0,1,0.7285,MEDIUM,False
1865
+ 9749,Turbine,1,0,0.4607,LOW,False
1866
+ 9753,Compressor,1,0,0.2994,MEDIUM,False
1867
+ 9767,Compressor,0,1,0.5586,LOW,False
1868
+ 9765,Compressor,1,0,0.2637,MEDIUM,False
1869
+ 9782,Compressor,0,1,0.5752,LOW,False
1870
+ 9791,Compressor,0,1,0.6937,MEDIUM,False
1871
+ 9790,Pump,0,1,0.5347,LOW,False
1872
+ 9794,Pump,1,0,0.3399,MEDIUM,False
1873
+ 9798,Compressor,0,1,0.5069,LOW,False
1874
+ 9801,Pump,1,0,0.3791,LOW,False
1875
+ 9815,Pump,0,1,0.5361,LOW,False
1876
+ 9821,Compressor,0,1,0.5474,LOW,False
1877
+ 9822,Compressor,0,1,0.5161,LOW,False
1878
+ 9825,Compressor,0,1,0.6996,MEDIUM,False
1879
+ 9828,Turbine,0,1,0.5432,LOW,False
1880
+ 9833,Compressor,0,1,0.7208,MEDIUM,False
1881
+ 9844,Compressor,0,1,0.5873,LOW,False
1882
+ 9847,Compressor,1,0,0.404,LOW,False
1883
+ 9838,Turbine,0,1,0.5473,LOW,False
1884
+ 9839,Turbine,0,1,0.5291,LOW,False
1885
+ 9845,Compressor,0,1,0.9048,HIGH,False
1886
+ 9854,Compressor,0,1,0.5096,LOW,False
1887
+ 9868,Turbine,0,1,0.5587,LOW,False
1888
+ 9890,Pump,0,1,0.58,LOW,False
1889
+ 9896,Compressor,0,1,0.5109,LOW,False
1890
+ 9908,Compressor,0,1,0.6807,MEDIUM,False
1891
+ 9940,Turbine,0,1,0.6619,MEDIUM,False
1892
+ 9946,Turbine,0,1,0.5479,LOW,False
1893
+ 9948,Turbine,0,1,0.6189,LOW,False
1894
+ 9944,Turbine,0,1,0.5795,LOW,False
1895
+ 9953,Pump,0,1,0.5343,LOW,False
1896
+ 9954,Turbine,0,1,0.5916,LOW,False
1897
+ 9961,Turbine,0,1,0.5835,LOW,False
1898
+ 9965,Pump,0,1,0.6007,LOW,False
1899
+ 9962,Pump,1,0,0.3863,LOW,False
1900
+ 9968,Pump,0,1,0.5505,LOW,False
1901
+ 9970,Compressor,0,1,0.5807,LOW,False
1902
+ 9969,Turbine,1,0,0.2243,MEDIUM,False
1903
+ 9983,Pump,1,0,0.1608,MEDIUM,False
1904
+ 9985,Pump,0,1,0.5406,LOW,False
1905
+ 9998,Compressor,0,1,0.5582,LOW,False
1906
+ 9990,Pump,1,0,0.4342,LOW,False
test_mismatches_rf.csv ADDED
@@ -0,0 +1,915 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ index,equipment,true_label,pred_label,probability,confidence,correct
2
+ 40,Compressor,1,0,0.495,LOW,False
3
+ 1,Compressor,1,0,0.3253,MEDIUM,False
4
+ 51,Turbine,1,0,0.4596,LOW,False
5
+ 52,Turbine,1,0,0.4773,LOW,False
6
+ 63,Pump,0,1,0.5073,LOW,False
7
+ 67,Pump,0,1,0.5259,LOW,False
8
+ 72,Pump,1,0,0.2493,MEDIUM,False
9
+ 76,Turbine,0,1,0.5013,LOW,False
10
+ 80,Pump,1,0,0.4148,LOW,False
11
+ 97,Pump,1,0,0.1846,MEDIUM,False
12
+ 93,Pump,1,0,0.4152,LOW,False
13
+ 133,Pump,1,0,0.3592,LOW,False
14
+ 137,Compressor,0,1,0.505,LOW,False
15
+ 160,Turbine,1,0,0.293,MEDIUM,False
16
+ 181,Turbine,1,0,0.489,LOW,False
17
+ 193,Compressor,0,1,0.5434,LOW,False
18
+ 209,Compressor,1,0,0.4866,LOW,False
19
+ 212,Pump,1,0,0.4318,LOW,False
20
+ 221,Pump,0,1,0.5103,LOW,False
21
+ 228,Compressor,0,1,0.5045,LOW,False
22
+ 229,Pump,0,1,0.547,LOW,False
23
+ 234,Turbine,1,0,0.3558,LOW,False
24
+ 264,Turbine,1,0,0.4661,LOW,False
25
+ 282,Pump,1,0,0.4758,LOW,False
26
+ 306,Pump,1,0,0.4766,LOW,False
27
+ 308,Compressor,0,1,0.5355,LOW,False
28
+ 309,Pump,1,0,0.4943,LOW,False
29
+ 313,Turbine,1,0,0.3267,MEDIUM,False
30
+ 338,Turbine,0,1,0.5311,LOW,False
31
+ 352,Compressor,0,1,0.5341,LOW,False
32
+ 354,Turbine,1,0,0.2804,MEDIUM,False
33
+ 357,Pump,1,0,0.3792,LOW,False
34
+ 372,Compressor,1,0,0.3821,LOW,False
35
+ 377,Compressor,1,0,0.4579,LOW,False
36
+ 383,Compressor,1,0,0.4691,LOW,False
37
+ 391,Pump,0,1,0.5119,LOW,False
38
+ 407,Pump,1,0,0.4756,LOW,False
39
+ 410,Pump,1,0,0.3896,LOW,False
40
+ 411,Compressor,1,0,0.37,LOW,False
41
+ 416,Turbine,1,0,0.3286,MEDIUM,False
42
+ 453,Pump,1,0,0.3175,MEDIUM,False
43
+ 467,Pump,1,0,0.413,LOW,False
44
+ 471,Compressor,0,1,0.5021,LOW,False
45
+ 500,Turbine,1,0,0.4525,LOW,False
46
+ 528,Turbine,1,0,0.3898,LOW,False
47
+ 535,Compressor,0,1,0.5263,LOW,False
48
+ 539,Pump,1,0,0.313,MEDIUM,False
49
+ 543,Turbine,1,0,0.4717,LOW,False
50
+ 546,Pump,1,0,0.3345,MEDIUM,False
51
+ 549,Turbine,0,1,0.521,LOW,False
52
+ 570,Pump,1,0,0.3624,LOW,False
53
+ 601,Compressor,0,1,0.5015,LOW,False
54
+ 602,Turbine,1,0,0.3408,MEDIUM,False
55
+ 607,Pump,1,0,0.4126,LOW,False
56
+ 641,Turbine,1,0,0.4291,LOW,False
57
+ 654,Pump,1,0,0.3993,LOW,False
58
+ 658,Compressor,1,0,0.3762,LOW,False
59
+ 675,Compressor,0,1,0.5147,LOW,False
60
+ 677,Pump,0,1,0.5201,LOW,False
61
+ 678,Turbine,1,0,0.1307,HIGH,False
62
+ 683,Compressor,1,0,0.4881,LOW,False
63
+ 684,Pump,1,0,0.4151,LOW,False
64
+ 688,Compressor,1,0,0.3124,MEDIUM,False
65
+ 694,Turbine,1,0,0.419,LOW,False
66
+ 697,Compressor,1,0,0.4885,LOW,False
67
+ 705,Turbine,1,0,0.3064,MEDIUM,False
68
+ 732,Turbine,1,0,0.2189,MEDIUM,False
69
+ 745,Pump,1,0,0.3767,LOW,False
70
+ 752,Turbine,0,1,0.5775,LOW,False
71
+ 763,Turbine,1,0,0.3035,MEDIUM,False
72
+ 769,Turbine,0,1,0.5308,LOW,False
73
+ 782,Compressor,0,1,0.5824,LOW,False
74
+ 797,Compressor,1,0,0.2279,MEDIUM,False
75
+ 805,Turbine,1,0,0.1547,MEDIUM,False
76
+ 823,Turbine,1,0,0.471,LOW,False
77
+ 824,Pump,1,0,0.3357,MEDIUM,False
78
+ 839,Turbine,1,0,0.4384,LOW,False
79
+ 847,Turbine,1,0,0.3805,LOW,False
80
+ 852,Compressor,1,0,0.254,MEDIUM,False
81
+ 863,Compressor,0,1,0.5059,LOW,False
82
+ 865,Pump,1,0,0.4185,LOW,False
83
+ 869,Turbine,0,1,0.5444,LOW,False
84
+ 877,Turbine,1,0,0.4711,LOW,False
85
+ 878,Pump,0,1,0.5009,LOW,False
86
+ 893,Pump,1,0,0.3512,LOW,False
87
+ 895,Compressor,0,1,0.5225,LOW,False
88
+ 908,Turbine,1,0,0.4936,LOW,False
89
+ 924,Pump,0,1,0.5049,LOW,False
90
+ 929,Turbine,0,1,0.5323,LOW,False
91
+ 931,Pump,1,0,0.3882,LOW,False
92
+ 930,Compressor,0,1,0.5518,LOW,False
93
+ 942,Compressor,1,0,0.3633,LOW,False
94
+ 959,Compressor,0,1,0.5339,LOW,False
95
+ 985,Pump,1,0,0.1894,MEDIUM,False
96
+ 991,Pump,1,0,0.4227,LOW,False
97
+ 1005,Pump,0,1,0.5114,LOW,False
98
+ 1012,Pump,0,1,0.5192,LOW,False
99
+ 1010,Compressor,0,1,0.5188,LOW,False
100
+ 1032,Compressor,0,1,0.5125,LOW,False
101
+ 1046,Pump,1,0,0.4234,LOW,False
102
+ 1048,Turbine,1,0,0.4846,LOW,False
103
+ 1071,Compressor,0,1,0.5041,LOW,False
104
+ 1080,Turbine,1,0,0.4647,LOW,False
105
+ 1091,Compressor,1,0,0.4945,LOW,False
106
+ 1109,Compressor,0,1,0.5292,LOW,False
107
+ 1133,Compressor,1,0,0.324,MEDIUM,False
108
+ 1149,Pump,0,1,0.5316,LOW,False
109
+ 1156,Pump,1,0,0.4474,LOW,False
110
+ 1171,Turbine,1,0,0.1353,HIGH,False
111
+ 1182,Turbine,1,0,0.4776,LOW,False
112
+ 1189,Turbine,0,1,0.5003,LOW,False
113
+ 1193,Turbine,0,1,0.5274,LOW,False
114
+ 1202,Turbine,1,0,0.4967,LOW,False
115
+ 1225,Pump,1,0,0.4517,LOW,False
116
+ 1228,Pump,1,0,0.4378,LOW,False
117
+ 1263,Pump,1,0,0.4227,LOW,False
118
+ 1265,Pump,0,1,0.5477,LOW,False
119
+ 1285,Compressor,0,1,0.5003,LOW,False
120
+ 1290,Compressor,0,1,0.5002,LOW,False
121
+ 1296,Compressor,0,1,0.5316,LOW,False
122
+ 1301,Compressor,0,1,0.5069,LOW,False
123
+ 1319,Pump,0,1,0.5296,LOW,False
124
+ 1323,Pump,1,0,0.4069,LOW,False
125
+ 1333,Compressor,1,0,0.4446,LOW,False
126
+ 1344,Pump,1,0,0.4895,LOW,False
127
+ 1362,Turbine,1,0,0.3196,MEDIUM,False
128
+ 1371,Turbine,0,1,0.5282,LOW,False
129
+ 1370,Turbine,1,0,0.2998,MEDIUM,False
130
+ 1375,Turbine,1,0,0.4096,LOW,False
131
+ 1376,Compressor,1,0,0.4825,LOW,False
132
+ 1386,Pump,1,0,0.4599,LOW,False
133
+ 1407,Turbine,1,0,0.3791,LOW,False
134
+ 1412,Compressor,1,0,0.2826,MEDIUM,False
135
+ 1421,Turbine,1,0,0.3808,LOW,False
136
+ 1427,Pump,1,0,0.181,MEDIUM,False
137
+ 1441,Compressor,0,1,0.5678,LOW,False
138
+ 1467,Turbine,1,0,0.4542,LOW,False
139
+ 1475,Pump,1,0,0.4592,LOW,False
140
+ 1476,Compressor,1,0,0.4638,LOW,False
141
+ 1477,Pump,1,0,0.4514,LOW,False
142
+ 1495,Turbine,1,0,0.2812,MEDIUM,False
143
+ 1510,Pump,1,0,0.3794,LOW,False
144
+ 1543,Compressor,1,0,0.2307,MEDIUM,False
145
+ 1570,Pump,1,0,0.4791,LOW,False
146
+ 1572,Turbine,0,1,0.5479,LOW,False
147
+ 1574,Pump,1,0,0.3184,MEDIUM,False
148
+ 1585,Turbine,1,0,0.3057,MEDIUM,False
149
+ 1593,Turbine,1,0,0.3491,MEDIUM,False
150
+ 1594,Turbine,1,0,0.265,MEDIUM,False
151
+ 1605,Compressor,0,1,0.5084,LOW,False
152
+ 1613,Pump,1,0,0.2853,MEDIUM,False
153
+ 1627,Compressor,1,0,0.4667,LOW,False
154
+ 1630,Compressor,1,0,0.3804,LOW,False
155
+ 1649,Pump,1,0,0.4012,LOW,False
156
+ 1659,Pump,1,0,0.336,MEDIUM,False
157
+ 1664,Compressor,0,1,0.5199,LOW,False
158
+ 1668,Turbine,1,0,0.4666,LOW,False
159
+ 1670,Compressor,1,0,0.4869,LOW,False
160
+ 1681,Pump,0,1,0.5081,LOW,False
161
+ 1694,Compressor,1,0,0.3676,LOW,False
162
+ 1692,Compressor,0,1,0.5229,LOW,False
163
+ 1699,Pump,0,1,0.5227,LOW,False
164
+ 1726,Compressor,0,1,0.5065,LOW,False
165
+ 1756,Compressor,1,0,0.3952,LOW,False
166
+ 1760,Compressor,1,0,0.4451,LOW,False
167
+ 1786,Compressor,1,0,0.4102,LOW,False
168
+ 1805,Pump,1,0,0.4535,LOW,False
169
+ 1810,Compressor,1,0,0.451,LOW,False
170
+ 1837,Compressor,1,0,0.3756,LOW,False
171
+ 1839,Pump,1,0,0.4849,LOW,False
172
+ 1844,Turbine,1,0,0.4494,LOW,False
173
+ 1864,Pump,0,1,0.5161,LOW,False
174
+ 1869,Pump,1,0,0.3631,LOW,False
175
+ 1874,Pump,1,0,0.4258,LOW,False
176
+ 1891,Turbine,1,0,0.4316,LOW,False
177
+ 1900,Pump,1,0,0.4161,LOW,False
178
+ 1901,Compressor,0,1,0.54,LOW,False
179
+ 1908,Turbine,0,1,0.5474,LOW,False
180
+ 1916,Compressor,1,0,0.4865,LOW,False
181
+ 1937,Pump,0,1,0.5003,LOW,False
182
+ 1948,Turbine,1,0,0.4002,LOW,False
183
+ 1960,Compressor,0,1,0.5293,LOW,False
184
+ 1972,Pump,0,1,0.5152,LOW,False
185
+ 1976,Pump,1,0,0.4969,LOW,False
186
+ 1975,Turbine,1,0,0.4918,LOW,False
187
+ 1983,Turbine,1,0,0.4015,LOW,False
188
+ 1985,Pump,1,0,0.459,LOW,False
189
+ 1991,Turbine,0,1,0.513,LOW,False
190
+ 1992,Compressor,0,1,0.5125,LOW,False
191
+ 2007,Compressor,0,1,0.5447,LOW,False
192
+ 2009,Compressor,1,0,0.4744,LOW,False
193
+ 2026,Turbine,1,0,0.2556,MEDIUM,False
194
+ 2034,Pump,0,1,0.5075,LOW,False
195
+ 2050,Turbine,1,0,0.3268,MEDIUM,False
196
+ 2052,Turbine,1,0,0.2769,MEDIUM,False
197
+ 2056,Compressor,0,1,0.5293,LOW,False
198
+ 2065,Compressor,1,0,0.3585,LOW,False
199
+ 2069,Turbine,0,1,0.5019,LOW,False
200
+ 2083,Compressor,1,0,0.4181,LOW,False
201
+ 2101,Compressor,1,0,0.3438,MEDIUM,False
202
+ 2102,Turbine,0,1,0.5629,LOW,False
203
+ 2106,Turbine,1,0,0.4448,LOW,False
204
+ 2115,Compressor,1,0,0.4808,LOW,False
205
+ 2120,Turbine,1,0,0.3592,LOW,False
206
+ 2129,Compressor,0,1,0.508,LOW,False
207
+ 2146,Compressor,1,0,0.3455,MEDIUM,False
208
+ 2152,Compressor,1,0,0.4344,LOW,False
209
+ 2158,Turbine,1,0,0.3917,LOW,False
210
+ 2174,Turbine,1,0,0.3109,MEDIUM,False
211
+ 2177,Turbine,1,0,0.2667,MEDIUM,False
212
+ 2191,Compressor,0,1,0.5292,LOW,False
213
+ 2200,Turbine,1,0,0.4673,LOW,False
214
+ 2203,Turbine,0,1,0.512,LOW,False
215
+ 2215,Compressor,1,0,0.3668,LOW,False
216
+ 2247,Compressor,1,0,0.462,LOW,False
217
+ 2252,Compressor,0,1,0.5473,LOW,False
218
+ 2278,Turbine,0,1,0.5021,LOW,False
219
+ 2281,Pump,1,0,0.3785,LOW,False
220
+ 2283,Turbine,0,1,0.5525,LOW,False
221
+ 2286,Compressor,1,0,0.3531,LOW,False
222
+ 2314,Pump,1,0,0.4313,LOW,False
223
+ 2322,Compressor,1,0,0.4965,LOW,False
224
+ 2366,Compressor,0,1,0.5007,LOW,False
225
+ 2398,Turbine,1,0,0.4968,LOW,False
226
+ 2400,Turbine,1,0,0.3397,MEDIUM,False
227
+ 2404,Compressor,1,0,0.4891,LOW,False
228
+ 2407,Compressor,1,0,0.4247,LOW,False
229
+ 2425,Pump,1,0,0.3918,LOW,False
230
+ 2434,Turbine,1,0,0.492,LOW,False
231
+ 2441,Turbine,1,0,0.4318,LOW,False
232
+ 2455,Pump,1,0,0.3493,MEDIUM,False
233
+ 2457,Pump,0,1,0.5009,LOW,False
234
+ 2501,Pump,1,0,0.4564,LOW,False
235
+ 2507,Pump,1,0,0.3756,LOW,False
236
+ 2509,Compressor,1,0,0.4538,LOW,False
237
+ 2523,Compressor,1,0,0.3658,LOW,False
238
+ 2536,Compressor,1,0,0.3733,LOW,False
239
+ 2542,Compressor,1,0,0.2268,MEDIUM,False
240
+ 2589,Compressor,1,0,0.2017,MEDIUM,False
241
+ 2594,Turbine,0,1,0.5171,LOW,False
242
+ 2597,Turbine,0,1,0.5284,LOW,False
243
+ 2608,Pump,1,0,0.3113,MEDIUM,False
244
+ 2607,Compressor,0,1,0.5099,LOW,False
245
+ 2665,Pump,0,1,0.5382,LOW,False
246
+ 2686,Compressor,0,1,0.5131,LOW,False
247
+ 2713,Compressor,0,1,0.5012,LOW,False
248
+ 2715,Pump,1,0,0.472,LOW,False
249
+ 2727,Turbine,0,1,0.5061,LOW,False
250
+ 2739,Turbine,1,0,0.4041,LOW,False
251
+ 2747,Pump,1,0,0.4925,LOW,False
252
+ 2755,Pump,0,1,0.5057,LOW,False
253
+ 2765,Turbine,1,0,0.1363,HIGH,False
254
+ 2771,Compressor,0,1,0.5412,LOW,False
255
+ 2784,Pump,0,1,0.5563,LOW,False
256
+ 2786,Compressor,1,0,0.2991,MEDIUM,False
257
+ 2788,Pump,1,0,0.4191,LOW,False
258
+ 2808,Turbine,1,0,0.462,LOW,False
259
+ 2818,Turbine,0,1,0.5064,LOW,False
260
+ 2835,Compressor,1,0,0.4512,LOW,False
261
+ 2851,Turbine,1,0,0.1625,MEDIUM,False
262
+ 2856,Compressor,1,0,0.4373,LOW,False
263
+ 2859,Compressor,1,0,0.3121,MEDIUM,False
264
+ 2878,Pump,0,1,0.5319,LOW,False
265
+ 2888,Pump,0,1,0.5046,LOW,False
266
+ 2900,Pump,1,0,0.48,LOW,False
267
+ 2904,Compressor,0,1,0.5028,LOW,False
268
+ 2909,Pump,1,0,0.4728,LOW,False
269
+ 2920,Compressor,1,0,0.4081,LOW,False
270
+ 2936,Pump,1,0,0.4457,LOW,False
271
+ 2937,Turbine,1,0,0.3912,LOW,False
272
+ 2939,Compressor,0,1,0.5005,LOW,False
273
+ 2941,Compressor,0,1,0.5081,LOW,False
274
+ 2944,Pump,0,1,0.502,LOW,False
275
+ 2962,Compressor,1,0,0.4836,LOW,False
276
+ 2970,Compressor,0,1,0.5036,LOW,False
277
+ 2976,Compressor,1,0,0.4158,LOW,False
278
+ 2977,Pump,1,0,0.3507,LOW,False
279
+ 2988,Turbine,0,1,0.5444,LOW,False
280
+ 2990,Pump,1,0,0.2701,MEDIUM,False
281
+ 2994,Compressor,0,1,0.5702,LOW,False
282
+ 2997,Turbine,1,0,0.2168,MEDIUM,False
283
+ 3004,Pump,1,0,0.457,LOW,False
284
+ 3010,Compressor,1,0,0.2623,MEDIUM,False
285
+ 3013,Pump,1,0,0.4657,LOW,False
286
+ 3018,Turbine,0,1,0.5584,LOW,False
287
+ 3024,Turbine,1,0,0.4737,LOW,False
288
+ 3023,Pump,1,0,0.4527,LOW,False
289
+ 3028,Compressor,0,1,0.5177,LOW,False
290
+ 3031,Pump,0,1,0.527,LOW,False
291
+ 3042,Pump,1,0,0.343,MEDIUM,False
292
+ 3057,Compressor,1,0,0.3569,LOW,False
293
+ 3063,Pump,1,0,0.4241,LOW,False
294
+ 3083,Turbine,1,0,0.4634,LOW,False
295
+ 3085,Compressor,0,1,0.5632,LOW,False
296
+ 3091,Compressor,1,0,0.1828,MEDIUM,False
297
+ 3095,Compressor,1,0,0.4469,LOW,False
298
+ 3107,Compressor,1,0,0.3634,LOW,False
299
+ 3108,Pump,0,1,0.5197,LOW,False
300
+ 3131,Compressor,1,0,0.3831,LOW,False
301
+ 3133,Pump,1,0,0.3323,MEDIUM,False
302
+ 3141,Turbine,0,1,0.5173,LOW,False
303
+ 3140,Compressor,1,0,0.4113,LOW,False
304
+ 3148,Turbine,1,0,0.2013,MEDIUM,False
305
+ 3205,Compressor,0,1,0.5079,LOW,False
306
+ 3215,Compressor,0,1,0.5166,LOW,False
307
+ 3225,Turbine,0,1,0.5123,LOW,False
308
+ 3236,Turbine,0,1,0.5477,LOW,False
309
+ 3246,Compressor,0,1,0.6141,LOW,False
310
+ 3248,Compressor,1,0,0.4417,LOW,False
311
+ 3288,Pump,1,0,0.3577,LOW,False
312
+ 3313,Pump,1,0,0.3679,LOW,False
313
+ 3315,Pump,1,0,0.4147,LOW,False
314
+ 3317,Turbine,1,0,0.4968,LOW,False
315
+ 3331,Pump,1,0,0.4463,LOW,False
316
+ 3356,Turbine,1,0,0.4824,LOW,False
317
+ 3371,Compressor,0,1,0.51,LOW,False
318
+ 3388,Pump,1,0,0.4478,LOW,False
319
+ 3392,Turbine,0,1,0.5171,LOW,False
320
+ 3395,Pump,1,0,0.3443,MEDIUM,False
321
+ 3399,Compressor,0,1,0.5071,LOW,False
322
+ 3418,Pump,1,0,0.476,LOW,False
323
+ 3440,Turbine,1,0,0.2931,MEDIUM,False
324
+ 3456,Compressor,1,0,0.3499,MEDIUM,False
325
+ 3495,Turbine,0,1,0.545,LOW,False
326
+ 3496,Pump,1,0,0.481,LOW,False
327
+ 3507,Turbine,1,0,0.4259,LOW,False
328
+ 3517,Turbine,0,1,0.5702,LOW,False
329
+ 3521,Pump,0,1,0.5126,LOW,False
330
+ 3520,Pump,1,0,0.4553,LOW,False
331
+ 3538,Turbine,0,1,0.5727,LOW,False
332
+ 3545,Turbine,1,0,0.3592,LOW,False
333
+ 3570,Compressor,1,0,0.3486,MEDIUM,False
334
+ 3583,Turbine,0,1,0.509,LOW,False
335
+ 3593,Pump,0,1,0.5066,LOW,False
336
+ 3608,Pump,1,0,0.4508,LOW,False
337
+ 3610,Pump,1,0,0.2548,MEDIUM,False
338
+ 3630,Compressor,1,0,0.4011,LOW,False
339
+ 3637,Compressor,0,1,0.5246,LOW,False
340
+ 3665,Compressor,0,1,0.5118,LOW,False
341
+ 3667,Compressor,0,1,0.5321,LOW,False
342
+ 3695,Turbine,1,0,0.3028,MEDIUM,False
343
+ 3725,Turbine,1,0,0.4286,LOW,False
344
+ 3726,Compressor,0,1,0.5059,LOW,False
345
+ 3727,Pump,1,0,0.3977,LOW,False
346
+ 3729,Compressor,0,1,0.5034,LOW,False
347
+ 3728,Turbine,0,1,0.5056,LOW,False
348
+ 3733,Compressor,1,0,0.4417,LOW,False
349
+ 3736,Pump,0,1,0.5633,LOW,False
350
+ 3804,Compressor,1,0,0.4967,LOW,False
351
+ 3841,Compressor,1,0,0.3776,LOW,False
352
+ 3844,Compressor,1,0,0.4687,LOW,False
353
+ 3845,Turbine,1,0,0.35,LOW,False
354
+ 3851,Pump,0,1,0.5004,LOW,False
355
+ 3869,Turbine,1,0,0.4765,LOW,False
356
+ 3880,Turbine,1,0,0.4915,LOW,False
357
+ 3886,Pump,0,1,0.5126,LOW,False
358
+ 3887,Turbine,1,0,0.2241,MEDIUM,False
359
+ 3902,Compressor,1,0,0.2697,MEDIUM,False
360
+ 3909,Pump,0,1,0.5173,LOW,False
361
+ 3911,Compressor,0,1,0.5141,LOW,False
362
+ 3917,Pump,1,0,0.4919,LOW,False
363
+ 3925,Compressor,0,1,0.6427,LOW,False
364
+ 3937,Compressor,1,0,0.4383,LOW,False
365
+ 3951,Pump,1,0,0.4032,LOW,False
366
+ 3953,Pump,0,1,0.5094,LOW,False
367
+ 3955,Pump,0,1,0.51,LOW,False
368
+ 3969,Compressor,1,0,0.3249,MEDIUM,False
369
+ 3972,Turbine,1,0,0.4588,LOW,False
370
+ 3984,Turbine,1,0,0.4364,LOW,False
371
+ 3991,Compressor,0,1,0.5548,LOW,False
372
+ 3995,Pump,1,0,0.4768,LOW,False
373
+ 3997,Compressor,1,0,0.4705,LOW,False
374
+ 4001,Turbine,0,1,0.5029,LOW,False
375
+ 4006,Turbine,0,1,0.5001,LOW,False
376
+ 4005,Pump,0,1,0.5095,LOW,False
377
+ 4009,Turbine,0,1,0.5237,LOW,False
378
+ 4016,Pump,1,0,0.3351,MEDIUM,False
379
+ 4051,Compressor,0,1,0.527,LOW,False
380
+ 4070,Pump,1,0,0.359,LOW,False
381
+ 4074,Compressor,0,1,0.5158,LOW,False
382
+ 4101,Pump,1,0,0.4931,LOW,False
383
+ 4121,Turbine,1,0,0.4328,LOW,False
384
+ 4127,Turbine,1,0,0.2919,MEDIUM,False
385
+ 4141,Pump,0,1,0.5229,LOW,False
386
+ 4156,Pump,0,1,0.5517,LOW,False
387
+ 4166,Pump,1,0,0.1748,MEDIUM,False
388
+ 4182,Turbine,1,0,0.4927,LOW,False
389
+ 4195,Turbine,0,1,0.5158,LOW,False
390
+ 4205,Turbine,0,1,0.5055,LOW,False
391
+ 4264,Pump,0,1,0.5185,LOW,False
392
+ 4265,Turbine,1,0,0.4411,LOW,False
393
+ 4271,Compressor,1,0,0.4721,LOW,False
394
+ 4277,Pump,0,1,0.5024,LOW,False
395
+ 4281,Pump,1,0,0.4503,LOW,False
396
+ 4284,Compressor,0,1,0.5371,LOW,False
397
+ 4303,Compressor,0,1,0.5208,LOW,False
398
+ 4312,Turbine,0,1,0.5101,LOW,False
399
+ 4326,Compressor,0,1,0.514,LOW,False
400
+ 4341,Compressor,1,0,0.362,LOW,False
401
+ 4359,Pump,1,0,0.4241,LOW,False
402
+ 4364,Pump,1,0,0.4166,LOW,False
403
+ 4387,Turbine,1,0,0.1292,HIGH,False
404
+ 4399,Turbine,0,1,0.5022,LOW,False
405
+ 4406,Turbine,1,0,0.1637,MEDIUM,False
406
+ 4418,Pump,1,0,0.4088,LOW,False
407
+ 4428,Pump,1,0,0.1489,HIGH,False
408
+ 4432,Pump,1,0,0.3484,MEDIUM,False
409
+ 4433,Turbine,1,0,0.4126,LOW,False
410
+ 4448,Pump,1,0,0.3719,LOW,False
411
+ 4455,Compressor,0,1,0.531,LOW,False
412
+ 4456,Compressor,1,0,0.328,MEDIUM,False
413
+ 4476,Pump,0,1,0.5525,LOW,False
414
+ 4483,Turbine,0,1,0.5157,LOW,False
415
+ 4507,Turbine,1,0,0.4236,LOW,False
416
+ 4515,Pump,0,1,0.5679,LOW,False
417
+ 4552,Turbine,1,0,0.2553,MEDIUM,False
418
+ 4565,Compressor,1,0,0.3851,LOW,False
419
+ 4568,Compressor,1,0,0.4766,LOW,False
420
+ 4567,Turbine,1,0,0.3773,LOW,False
421
+ 4642,Pump,1,0,0.3881,LOW,False
422
+ 4644,Pump,0,1,0.5994,LOW,False
423
+ 4648,Pump,0,1,0.6097,LOW,False
424
+ 4652,Compressor,0,1,0.5546,LOW,False
425
+ 4668,Compressor,1,0,0.3224,MEDIUM,False
426
+ 4681,Turbine,1,0,0.3878,LOW,False
427
+ 4693,Turbine,0,1,0.563,LOW,False
428
+ 4694,Turbine,1,0,0.4162,LOW,False
429
+ 4702,Pump,1,0,0.4638,LOW,False
430
+ 4705,Pump,1,0,0.4282,LOW,False
431
+ 4708,Turbine,0,1,0.526,LOW,False
432
+ 4713,Pump,0,1,0.5166,LOW,False
433
+ 4728,Turbine,1,0,0.2722,MEDIUM,False
434
+ 4732,Compressor,0,1,0.5264,LOW,False
435
+ 4764,Pump,0,1,0.5716,LOW,False
436
+ 4767,Compressor,1,0,0.448,LOW,False
437
+ 4777,Pump,1,0,0.339,MEDIUM,False
438
+ 4793,Turbine,1,0,0.4193,LOW,False
439
+ 4795,Compressor,0,1,0.5054,LOW,False
440
+ 4798,Turbine,1,0,0.4865,LOW,False
441
+ 4809,Turbine,0,1,0.5114,LOW,False
442
+ 4812,Turbine,1,0,0.285,MEDIUM,False
443
+ 4814,Pump,0,1,0.5009,LOW,False
444
+ 4829,Turbine,1,0,0.3837,LOW,False
445
+ 4830,Pump,1,0,0.4045,LOW,False
446
+ 4835,Pump,0,1,0.5655,LOW,False
447
+ 4847,Pump,1,0,0.4021,LOW,False
448
+ 4853,Pump,1,0,0.3882,LOW,False
449
+ 4854,Pump,1,0,0.4538,LOW,False
450
+ 4855,Compressor,0,1,0.521,LOW,False
451
+ 4877,Compressor,0,1,0.5991,LOW,False
452
+ 4927,Compressor,1,0,0.2473,MEDIUM,False
453
+ 4960,Pump,1,0,0.3192,MEDIUM,False
454
+ 4961,Compressor,0,1,0.565,LOW,False
455
+ 4984,Pump,0,1,0.5318,LOW,False
456
+ 4992,Turbine,1,0,0.1567,MEDIUM,False
457
+ 4999,Turbine,1,0,0.4204,LOW,False
458
+ 5000,Pump,1,0,0.2254,MEDIUM,False
459
+ 5010,Compressor,1,0,0.3478,MEDIUM,False
460
+ 5021,Compressor,1,0,0.3702,LOW,False
461
+ 5028,Pump,1,0,0.2517,MEDIUM,False
462
+ 5029,Pump,1,0,0.4004,LOW,False
463
+ 5046,Turbine,0,1,0.5515,LOW,False
464
+ 5051,Turbine,1,0,0.482,LOW,False
465
+ 5063,Pump,0,1,0.539,LOW,False
466
+ 5097,Compressor,0,1,0.5219,LOW,False
467
+ 5113,Pump,1,0,0.4838,LOW,False
468
+ 5120,Pump,0,1,0.5502,LOW,False
469
+ 5142,Turbine,1,0,0.3332,MEDIUM,False
470
+ 5143,Compressor,0,1,0.546,LOW,False
471
+ 5148,Pump,1,0,0.3931,LOW,False
472
+ 5151,Compressor,0,1,0.5121,LOW,False
473
+ 5162,Turbine,1,0,0.4745,LOW,False
474
+ 5182,Compressor,1,0,0.469,LOW,False
475
+ 5194,Compressor,1,0,0.3768,LOW,False
476
+ 5207,Turbine,0,1,0.5587,LOW,False
477
+ 5216,Pump,1,0,0.4982,LOW,False
478
+ 5224,Compressor,1,0,0.3818,LOW,False
479
+ 5229,Turbine,0,1,0.5101,LOW,False
480
+ 5239,Turbine,0,1,0.5404,LOW,False
481
+ 5244,Pump,1,0,0.433,LOW,False
482
+ 5247,Pump,0,1,0.5193,LOW,False
483
+ 5287,Turbine,1,0,0.3892,LOW,False
484
+ 5288,Compressor,1,0,0.3857,LOW,False
485
+ 5312,Turbine,1,0,0.3165,MEDIUM,False
486
+ 5316,Turbine,1,0,0.4183,LOW,False
487
+ 5323,Compressor,0,1,0.5596,LOW,False
488
+ 5327,Turbine,1,0,0.3804,LOW,False
489
+ 5329,Pump,0,1,0.5051,LOW,False
490
+ 5348,Turbine,0,1,0.5274,LOW,False
491
+ 5353,Turbine,1,0,0.421,LOW,False
492
+ 5352,Turbine,1,0,0.4666,LOW,False
493
+ 5354,Compressor,1,0,0.3644,LOW,False
494
+ 5355,Turbine,1,0,0.4595,LOW,False
495
+ 5363,Compressor,1,0,0.43,LOW,False
496
+ 5381,Compressor,1,0,0.4004,LOW,False
497
+ 5385,Turbine,1,0,0.2397,MEDIUM,False
498
+ 5388,Pump,1,0,0.4517,LOW,False
499
+ 5396,Compressor,0,1,0.5992,LOW,False
500
+ 5400,Pump,1,0,0.381,LOW,False
501
+ 5425,Compressor,0,1,0.5219,LOW,False
502
+ 5448,Compressor,1,0,0.4479,LOW,False
503
+ 5459,Turbine,1,0,0.4994,LOW,False
504
+ 5464,Compressor,0,1,0.5558,LOW,False
505
+ 5505,Compressor,0,1,0.5308,LOW,False
506
+ 5523,Pump,1,0,0.3916,LOW,False
507
+ 5559,Pump,1,0,0.302,MEDIUM,False
508
+ 5597,Pump,0,1,0.5123,LOW,False
509
+ 5600,Pump,1,0,0.4286,LOW,False
510
+ 5611,Compressor,0,1,0.5553,LOW,False
511
+ 5633,Turbine,1,0,0.3166,MEDIUM,False
512
+ 5638,Compressor,0,1,0.5763,LOW,False
513
+ 5678,Pump,1,0,0.4755,LOW,False
514
+ 5684,Turbine,1,0,0.483,LOW,False
515
+ 5695,Pump,1,0,0.3592,LOW,False
516
+ 5697,Pump,1,0,0.4211,LOW,False
517
+ 5715,Turbine,1,0,0.4632,LOW,False
518
+ 5724,Pump,1,0,0.4844,LOW,False
519
+ 5751,Pump,0,1,0.5343,LOW,False
520
+ 5752,Compressor,0,1,0.5008,LOW,False
521
+ 5774,Turbine,0,1,0.554,LOW,False
522
+ 5783,Turbine,1,0,0.4391,LOW,False
523
+ 5786,Turbine,1,0,0.3947,LOW,False
524
+ 5804,Turbine,1,0,0.396,LOW,False
525
+ 5809,Pump,1,0,0.4602,LOW,False
526
+ 5819,Turbine,1,0,0.4004,LOW,False
527
+ 5846,Turbine,0,1,0.5427,LOW,False
528
+ 5853,Compressor,1,0,0.3272,MEDIUM,False
529
+ 5857,Turbine,1,0,0.3914,LOW,False
530
+ 5858,Pump,0,1,0.5197,LOW,False
531
+ 5870,Pump,0,1,0.5172,LOW,False
532
+ 5876,Turbine,0,1,0.5023,LOW,False
533
+ 5878,Turbine,0,1,0.5273,LOW,False
534
+ 5901,Compressor,1,0,0.4373,LOW,False
535
+ 5904,Pump,1,0,0.1573,MEDIUM,False
536
+ 5912,Compressor,1,0,0.2857,MEDIUM,False
537
+ 5921,Turbine,0,1,0.5235,LOW,False
538
+ 5935,Compressor,1,0,0.3134,MEDIUM,False
539
+ 5939,Pump,1,0,0.4432,LOW,False
540
+ 5941,Pump,0,1,0.5043,LOW,False
541
+ 5943,Pump,0,1,0.5868,LOW,False
542
+ 5945,Turbine,1,0,0.2467,MEDIUM,False
543
+ 5946,Turbine,0,1,0.543,LOW,False
544
+ 5953,Compressor,1,0,0.4452,LOW,False
545
+ 5969,Pump,1,0,0.3937,LOW,False
546
+ 5979,Turbine,0,1,0.5007,LOW,False
547
+ 5984,Compressor,1,0,0.2859,MEDIUM,False
548
+ 5993,Compressor,1,0,0.4866,LOW,False
549
+ 6008,Turbine,1,0,0.2544,MEDIUM,False
550
+ 6010,Turbine,1,0,0.2578,MEDIUM,False
551
+ 6024,Pump,1,0,0.4572,LOW,False
552
+ 6034,Turbine,0,1,0.5064,LOW,False
553
+ 6044,Compressor,0,1,0.5185,LOW,False
554
+ 6055,Compressor,1,0,0.3888,LOW,False
555
+ 6059,Compressor,1,0,0.4983,LOW,False
556
+ 6062,Turbine,1,0,0.4391,LOW,False
557
+ 6068,Compressor,0,1,0.5181,LOW,False
558
+ 6077,Pump,1,0,0.4473,LOW,False
559
+ 6078,Compressor,0,1,0.5071,LOW,False
560
+ 6084,Compressor,0,1,0.5062,LOW,False
561
+ 6112,Pump,0,1,0.5055,LOW,False
562
+ 6118,Pump,0,1,0.5009,LOW,False
563
+ 6119,Turbine,1,0,0.3437,MEDIUM,False
564
+ 6137,Compressor,0,1,0.5382,LOW,False
565
+ 6139,Pump,1,0,0.4015,LOW,False
566
+ 6149,Compressor,1,0,0.4582,LOW,False
567
+ 6155,Compressor,0,1,0.5308,LOW,False
568
+ 6167,Pump,0,1,0.5006,LOW,False
569
+ 6172,Turbine,0,1,0.5052,LOW,False
570
+ 6182,Pump,1,0,0.4053,LOW,False
571
+ 6207,Compressor,1,0,0.3733,LOW,False
572
+ 6217,Compressor,1,0,0.4958,LOW,False
573
+ 6274,Turbine,1,0,0.4675,LOW,False
574
+ 6283,Pump,1,0,0.4066,LOW,False
575
+ 6285,Turbine,0,1,0.5032,LOW,False
576
+ 6291,Pump,1,0,0.4886,LOW,False
577
+ 6310,Pump,1,0,0.4692,LOW,False
578
+ 6366,Pump,1,0,0.4358,LOW,False
579
+ 6371,Compressor,0,1,0.5165,LOW,False
580
+ 6390,Pump,1,0,0.3626,LOW,False
581
+ 6401,Compressor,1,0,0.3591,LOW,False
582
+ 6402,Compressor,1,0,0.3103,MEDIUM,False
583
+ 6412,Turbine,1,0,0.2859,MEDIUM,False
584
+ 6413,Compressor,0,1,0.5256,LOW,False
585
+ 6428,Pump,1,0,0.4072,LOW,False
586
+ 6430,Turbine,1,0,0.3277,MEDIUM,False
587
+ 6450,Turbine,1,0,0.3498,MEDIUM,False
588
+ 6458,Compressor,0,1,0.5011,LOW,False
589
+ 6470,Compressor,1,0,0.3463,MEDIUM,False
590
+ 6474,Compressor,1,0,0.4079,LOW,False
591
+ 6487,Compressor,1,0,0.4423,LOW,False
592
+ 6503,Compressor,1,0,0.4028,LOW,False
593
+ 6524,Pump,1,0,0.4457,LOW,False
594
+ 6529,Pump,1,0,0.356,LOW,False
595
+ 6534,Turbine,0,1,0.5197,LOW,False
596
+ 6566,Turbine,1,0,0.3006,MEDIUM,False
597
+ 6571,Compressor,1,0,0.4434,LOW,False
598
+ 6576,Compressor,0,1,0.5309,LOW,False
599
+ 6581,Turbine,1,0,0.4297,LOW,False
600
+ 6600,Compressor,0,1,0.5448,LOW,False
601
+ 6604,Compressor,1,0,0.3789,LOW,False
602
+ 6608,Compressor,1,0,0.4723,LOW,False
603
+ 6610,Pump,0,1,0.5416,LOW,False
604
+ 6633,Compressor,1,0,0.4804,LOW,False
605
+ 6645,Turbine,1,0,0.4707,LOW,False
606
+ 6654,Pump,1,0,0.3702,LOW,False
607
+ 6668,Compressor,0,1,0.5456,LOW,False
608
+ 6682,Compressor,1,0,0.3698,LOW,False
609
+ 6704,Turbine,1,0,0.4806,LOW,False
610
+ 6702,Turbine,1,0,0.3974,LOW,False
611
+ 6716,Pump,1,0,0.4008,LOW,False
612
+ 6717,Pump,1,0,0.3453,MEDIUM,False
613
+ 6734,Pump,1,0,0.489,LOW,False
614
+ 6744,Compressor,0,1,0.538,LOW,False
615
+ 6759,Pump,1,0,0.1757,MEDIUM,False
616
+ 6763,Pump,0,1,0.5072,LOW,False
617
+ 6769,Compressor,0,1,0.5176,LOW,False
618
+ 6774,Turbine,0,1,0.5016,LOW,False
619
+ 6796,Turbine,1,0,0.4939,LOW,False
620
+ 6802,Compressor,1,0,0.4347,LOW,False
621
+ 6816,Compressor,1,0,0.4168,LOW,False
622
+ 6822,Turbine,0,1,0.5133,LOW,False
623
+ 6828,Compressor,1,0,0.4593,LOW,False
624
+ 6835,Compressor,1,0,0.4849,LOW,False
625
+ 6850,Turbine,1,0,0.3955,LOW,False
626
+ 6859,Compressor,1,0,0.4562,LOW,False
627
+ 6880,Compressor,1,0,0.3643,LOW,False
628
+ 6884,Compressor,1,0,0.355,LOW,False
629
+ 6889,Compressor,0,1,0.5128,LOW,False
630
+ 6892,Compressor,1,0,0.4428,LOW,False
631
+ 6899,Compressor,1,0,0.3738,LOW,False
632
+ 6913,Turbine,0,1,0.5135,LOW,False
633
+ 6920,Pump,1,0,0.1428,HIGH,False
634
+ 6922,Compressor,0,1,0.555,LOW,False
635
+ 6934,Compressor,1,0,0.1826,MEDIUM,False
636
+ 6939,Turbine,0,1,0.504,LOW,False
637
+ 6944,Pump,0,1,0.5482,LOW,False
638
+ 6948,Compressor,1,0,0.2621,MEDIUM,False
639
+ 6949,Compressor,0,1,0.5129,LOW,False
640
+ 6964,Compressor,0,1,0.5567,LOW,False
641
+ 6989,Turbine,1,0,0.2318,MEDIUM,False
642
+ 6992,Pump,1,0,0.31,MEDIUM,False
643
+ 6995,Pump,1,0,0.4068,LOW,False
644
+ 7000,Compressor,0,1,0.5162,LOW,False
645
+ 7003,Pump,0,1,0.5813,LOW,False
646
+ 7008,Compressor,1,0,0.3993,LOW,False
647
+ 7013,Pump,0,1,0.5068,LOW,False
648
+ 7014,Compressor,1,0,0.4602,LOW,False
649
+ 7022,Compressor,0,1,0.5904,LOW,False
650
+ 7031,Turbine,0,1,0.5107,LOW,False
651
+ 7032,Turbine,1,0,0.4154,LOW,False
652
+ 7047,Compressor,1,0,0.3496,MEDIUM,False
653
+ 7050,Turbine,1,0,0.4158,LOW,False
654
+ 7057,Pump,1,0,0.3746,LOW,False
655
+ 7065,Pump,0,1,0.5116,LOW,False
656
+ 7069,Pump,0,1,0.5471,LOW,False
657
+ 7077,Compressor,0,1,0.5497,LOW,False
658
+ 7083,Compressor,1,0,0.4167,LOW,False
659
+ 7109,Compressor,1,0,0.4817,LOW,False
660
+ 7113,Compressor,1,0,0.337,MEDIUM,False
661
+ 7115,Pump,1,0,0.4012,LOW,False
662
+ 7116,Compressor,1,0,0.4573,LOW,False
663
+ 7128,Pump,0,1,0.5434,LOW,False
664
+ 7142,Pump,1,0,0.4484,LOW,False
665
+ 7143,Turbine,1,0,0.4403,LOW,False
666
+ 7163,Compressor,0,1,0.5306,LOW,False
667
+ 7175,Compressor,1,0,0.4836,LOW,False
668
+ 7191,Turbine,1,0,0.4393,LOW,False
669
+ 7252,Pump,1,0,0.4646,LOW,False
670
+ 7257,Compressor,1,0,0.4707,LOW,False
671
+ 7259,Compressor,0,1,0.6222,LOW,False
672
+ 7270,Compressor,0,1,0.507,LOW,False
673
+ 7279,Turbine,0,1,0.505,LOW,False
674
+ 7295,Turbine,1,0,0.3579,LOW,False
675
+ 7296,Compressor,1,0,0.4015,LOW,False
676
+ 7300,Turbine,0,1,0.5026,LOW,False
677
+ 7303,Pump,1,0,0.4836,LOW,False
678
+ 7307,Turbine,0,1,0.5321,LOW,False
679
+ 7323,Pump,1,0,0.4159,LOW,False
680
+ 7333,Turbine,1,0,0.4802,LOW,False
681
+ 7340,Turbine,1,0,0.4149,LOW,False
682
+ 7345,Pump,1,0,0.3394,MEDIUM,False
683
+ 7352,Compressor,1,0,0.4455,LOW,False
684
+ 7366,Compressor,1,0,0.4323,LOW,False
685
+ 7375,Pump,1,0,0.2218,MEDIUM,False
686
+ 7383,Pump,1,0,0.4995,LOW,False
687
+ 7382,Turbine,0,1,0.5284,LOW,False
688
+ 7394,Compressor,0,1,0.5007,LOW,False
689
+ 7403,Pump,1,0,0.4724,LOW,False
690
+ 7408,Pump,1,0,0.4341,LOW,False
691
+ 7416,Compressor,1,0,0.1995,MEDIUM,False
692
+ 7424,Pump,0,1,0.5478,LOW,False
693
+ 7452,Pump,0,1,0.5022,LOW,False
694
+ 7461,Pump,0,1,0.5518,LOW,False
695
+ 7482,Turbine,1,0,0.3445,MEDIUM,False
696
+ 7527,Compressor,1,0,0.4819,LOW,False
697
+ 7529,Pump,1,0,0.4173,LOW,False
698
+ 7536,Turbine,0,1,0.5342,LOW,False
699
+ 7541,Turbine,1,0,0.4117,LOW,False
700
+ 7552,Compressor,0,1,0.6212,LOW,False
701
+ 7562,Pump,1,0,0.322,MEDIUM,False
702
+ 7569,Pump,1,0,0.4804,LOW,False
703
+ 7590,Turbine,1,0,0.4971,LOW,False
704
+ 7608,Compressor,0,1,0.5076,LOW,False
705
+ 7622,Turbine,0,1,0.5227,LOW,False
706
+ 7623,Compressor,1,0,0.3554,LOW,False
707
+ 7626,Turbine,1,0,0.2831,MEDIUM,False
708
+ 7630,Compressor,0,1,0.5338,LOW,False
709
+ 7635,Pump,0,1,0.5118,LOW,False
710
+ 7641,Turbine,1,0,0.46,LOW,False
711
+ 7643,Compressor,0,1,0.5056,LOW,False
712
+ 7665,Turbine,1,0,0.4791,LOW,False
713
+ 7667,Compressor,0,1,0.5353,LOW,False
714
+ 7683,Compressor,1,0,0.4043,LOW,False
715
+ 7685,Compressor,0,1,0.5296,LOW,False
716
+ 7688,Compressor,0,1,0.5323,LOW,False
717
+ 7695,Turbine,1,0,0.3912,LOW,False
718
+ 7696,Compressor,0,1,0.5297,LOW,False
719
+ 7728,Turbine,1,0,0.3876,LOW,False
720
+ 7730,Pump,0,1,0.564,LOW,False
721
+ 7739,Compressor,0,1,0.5619,LOW,False
722
+ 7761,Compressor,1,0,0.3419,MEDIUM,False
723
+ 7765,Turbine,1,0,0.3607,LOW,False
724
+ 7769,Compressor,0,1,0.5368,LOW,False
725
+ 7779,Pump,0,1,0.5452,LOW,False
726
+ 7784,Pump,0,1,0.5054,LOW,False
727
+ 7788,Pump,1,0,0.3246,MEDIUM,False
728
+ 7811,Compressor,1,0,0.3289,MEDIUM,False
729
+ 7820,Pump,1,0,0.443,LOW,False
730
+ 7826,Turbine,1,0,0.2796,MEDIUM,False
731
+ 7827,Compressor,0,1,0.5556,LOW,False
732
+ 7839,Compressor,0,1,0.5374,LOW,False
733
+ 7848,Pump,1,0,0.4836,LOW,False
734
+ 7853,Compressor,0,1,0.5025,LOW,False
735
+ 7872,Compressor,0,1,0.5162,LOW,False
736
+ 7885,Pump,1,0,0.369,LOW,False
737
+ 7888,Turbine,0,1,0.5019,LOW,False
738
+ 7891,Pump,0,1,0.5053,LOW,False
739
+ 7905,Turbine,1,0,0.3497,MEDIUM,False
740
+ 7909,Compressor,1,0,0.4669,LOW,False
741
+ 7914,Turbine,1,0,0.4105,LOW,False
742
+ 7915,Pump,0,1,0.5013,LOW,False
743
+ 7973,Compressor,1,0,0.481,LOW,False
744
+ 7988,Turbine,0,1,0.5812,LOW,False
745
+ 7995,Compressor,0,1,0.5638,LOW,False
746
+ 7998,Pump,1,0,0.4996,LOW,False
747
+ 7999,Compressor,1,0,0.4513,LOW,False
748
+ 8014,Compressor,0,1,0.5333,LOW,False
749
+ 8039,Turbine,1,0,0.3581,LOW,False
750
+ 8043,Turbine,1,0,0.4903,LOW,False
751
+ 8049,Turbine,0,1,0.5386,LOW,False
752
+ 8059,Turbine,0,1,0.5119,LOW,False
753
+ 8071,Pump,1,0,0.3586,LOW,False
754
+ 8097,Pump,0,1,0.5025,LOW,False
755
+ 8109,Compressor,0,1,0.5176,LOW,False
756
+ 8127,Compressor,0,1,0.535,LOW,False
757
+ 8135,Compressor,1,0,0.3893,LOW,False
758
+ 8143,Compressor,1,0,0.3414,MEDIUM,False
759
+ 8144,Compressor,1,0,0.2089,MEDIUM,False
760
+ 8149,Turbine,1,0,0.4557,LOW,False
761
+ 8154,Turbine,0,1,0.5264,LOW,False
762
+ 8172,Compressor,0,1,0.5099,LOW,False
763
+ 8173,Turbine,1,0,0.2469,MEDIUM,False
764
+ 8181,Compressor,1,0,0.3073,MEDIUM,False
765
+ 8193,Compressor,1,0,0.3576,LOW,False
766
+ 8194,Turbine,1,0,0.4826,LOW,False
767
+ 8195,Turbine,0,1,0.5206,LOW,False
768
+ 8250,Turbine,1,0,0.3278,MEDIUM,False
769
+ 8259,Compressor,0,1,0.527,LOW,False
770
+ 8261,Compressor,0,1,0.5681,LOW,False
771
+ 8280,Turbine,1,0,0.1917,MEDIUM,False
772
+ 8289,Pump,1,0,0.4016,LOW,False
773
+ 8311,Pump,1,0,0.4969,LOW,False
774
+ 8324,Pump,1,0,0.227,MEDIUM,False
775
+ 8376,Compressor,1,0,0.3534,LOW,False
776
+ 8398,Turbine,0,1,0.5116,LOW,False
777
+ 8412,Turbine,1,0,0.3892,LOW,False
778
+ 8416,Compressor,0,1,0.5012,LOW,False
779
+ 8421,Pump,1,0,0.2802,MEDIUM,False
780
+ 8424,Turbine,1,0,0.2955,MEDIUM,False
781
+ 8430,Turbine,1,0,0.2891,MEDIUM,False
782
+ 8433,Compressor,1,0,0.4667,LOW,False
783
+ 8443,Compressor,1,0,0.4272,LOW,False
784
+ 8453,Compressor,0,1,0.5228,LOW,False
785
+ 8471,Compressor,1,0,0.4544,LOW,False
786
+ 8487,Compressor,0,1,0.5455,LOW,False
787
+ 8496,Turbine,1,0,0.4696,LOW,False
788
+ 8502,Turbine,1,0,0.3017,MEDIUM,False
789
+ 8511,Turbine,1,0,0.4587,LOW,False
790
+ 8518,Compressor,0,1,0.5301,LOW,False
791
+ 8529,Turbine,0,1,0.5388,LOW,False
792
+ 8555,Turbine,1,0,0.3664,LOW,False
793
+ 8562,Pump,0,1,0.5135,LOW,False
794
+ 8578,Turbine,1,0,0.1915,MEDIUM,False
795
+ 8592,Pump,1,0,0.4473,LOW,False
796
+ 8619,Pump,1,0,0.4792,LOW,False
797
+ 8622,Turbine,0,1,0.5948,LOW,False
798
+ 8634,Compressor,1,0,0.4658,LOW,False
799
+ 8653,Pump,1,0,0.2815,MEDIUM,False
800
+ 8669,Compressor,1,0,0.4131,LOW,False
801
+ 8678,Pump,1,0,0.19,MEDIUM,False
802
+ 8685,Compressor,0,1,0.5201,LOW,False
803
+ 8703,Turbine,0,1,0.5065,LOW,False
804
+ 8715,Turbine,1,0,0.4474,LOW,False
805
+ 8741,Compressor,1,0,0.4516,LOW,False
806
+ 8765,Compressor,0,1,0.5157,LOW,False
807
+ 8783,Compressor,1,0,0.4991,LOW,False
808
+ 8786,Pump,0,1,0.5179,LOW,False
809
+ 8790,Compressor,0,1,0.5136,LOW,False
810
+ 8793,Compressor,1,0,0.4507,LOW,False
811
+ 8821,Compressor,1,0,0.3854,LOW,False
812
+ 8872,Compressor,1,0,0.2407,MEDIUM,False
813
+ 8875,Pump,0,1,0.5419,LOW,False
814
+ 8876,Compressor,1,0,0.4328,LOW,False
815
+ 8877,Pump,1,0,0.2856,MEDIUM,False
816
+ 8885,Compressor,1,0,0.3805,LOW,False
817
+ 8895,Compressor,1,0,0.2907,MEDIUM,False
818
+ 8897,Compressor,0,1,0.5485,LOW,False
819
+ 8904,Compressor,1,0,0.459,LOW,False
820
+ 8907,Compressor,0,1,0.5814,LOW,False
821
+ 8912,Turbine,1,0,0.4889,LOW,False
822
+ 8913,Pump,1,0,0.4013,LOW,False
823
+ 8930,Pump,1,0,0.4789,LOW,False
824
+ 8953,Pump,0,1,0.5016,LOW,False
825
+ 8954,Compressor,0,1,0.5118,LOW,False
826
+ 8962,Turbine,1,0,0.2906,MEDIUM,False
827
+ 8965,Compressor,1,0,0.4178,LOW,False
828
+ 8974,Pump,1,0,0.443,LOW,False
829
+ 8978,Turbine,0,1,0.5174,LOW,False
830
+ 9064,Pump,1,0,0.3864,LOW,False
831
+ 9072,Pump,0,1,0.5145,LOW,False
832
+ 9093,Compressor,0,1,0.5009,LOW,False
833
+ 9136,Turbine,1,0,0.4486,LOW,False
834
+ 9137,Compressor,1,0,0.4161,LOW,False
835
+ 9153,Turbine,0,1,0.5004,LOW,False
836
+ 9157,Compressor,1,0,0.3625,LOW,False
837
+ 9171,Compressor,1,0,0.3816,LOW,False
838
+ 9173,Compressor,1,0,0.2749,MEDIUM,False
839
+ 9175,Pump,0,1,0.512,LOW,False
840
+ 9183,Compressor,1,0,0.3321,MEDIUM,False
841
+ 9187,Pump,1,0,0.4056,LOW,False
842
+ 9189,Turbine,1,0,0.4268,LOW,False
843
+ 9191,Compressor,1,0,0.4678,LOW,False
844
+ 9207,Compressor,0,1,0.5665,LOW,False
845
+ 9215,Compressor,1,0,0.4617,LOW,False
846
+ 9216,Turbine,1,0,0.36,LOW,False
847
+ 9225,Turbine,1,0,0.4466,LOW,False
848
+ 9228,Pump,1,0,0.3992,LOW,False
849
+ 9230,Pump,1,0,0.4175,LOW,False
850
+ 9249,Pump,1,0,0.4437,LOW,False
851
+ 9264,Pump,0,1,0.5495,LOW,False
852
+ 9273,Turbine,1,0,0.3854,LOW,False
853
+ 9274,Compressor,0,1,0.5077,LOW,False
854
+ 9302,Pump,1,0,0.3354,MEDIUM,False
855
+ 9304,Pump,1,0,0.4914,LOW,False
856
+ 9313,Pump,1,0,0.4888,LOW,False
857
+ 9328,Compressor,0,1,0.5244,LOW,False
858
+ 9338,Compressor,0,1,0.535,LOW,False
859
+ 9341,Turbine,1,0,0.1687,MEDIUM,False
860
+ 9346,Turbine,0,1,0.5021,LOW,False
861
+ 9350,Compressor,0,1,0.5177,LOW,False
862
+ 9357,Pump,1,0,0.462,LOW,False
863
+ 9363,Turbine,1,0,0.4889,LOW,False
864
+ 9364,Turbine,1,0,0.4786,LOW,False
865
+ 9380,Pump,1,0,0.3791,LOW,False
866
+ 9402,Turbine,1,0,0.1344,HIGH,False
867
+ 9407,Compressor,1,0,0.3115,MEDIUM,False
868
+ 9430,Compressor,1,0,0.4823,LOW,False
869
+ 9460,Compressor,1,0,0.4728,LOW,False
870
+ 9466,Compressor,0,1,0.5167,LOW,False
871
+ 9475,Pump,0,1,0.5029,LOW,False
872
+ 9478,Pump,1,0,0.3844,LOW,False
873
+ 9486,Turbine,0,1,0.5143,LOW,False
874
+ 9497,Compressor,1,0,0.3181,MEDIUM,False
875
+ 9504,Compressor,0,1,0.5125,LOW,False
876
+ 9513,Turbine,0,1,0.5195,LOW,False
877
+ 9528,Pump,1,0,0.4436,LOW,False
878
+ 9540,Turbine,1,0,0.4515,LOW,False
879
+ 9558,Compressor,0,1,0.5189,LOW,False
880
+ 9565,Compressor,1,0,0.3759,LOW,False
881
+ 9589,Turbine,0,1,0.506,LOW,False
882
+ 9636,Turbine,1,0,0.3449,MEDIUM,False
883
+ 9644,Compressor,0,1,0.5923,LOW,False
884
+ 9655,Compressor,1,0,0.4041,LOW,False
885
+ 9663,Pump,1,0,0.3732,LOW,False
886
+ 9674,Pump,1,0,0.3551,LOW,False
887
+ 9679,Compressor,0,1,0.5136,LOW,False
888
+ 9685,Compressor,1,0,0.3818,LOW,False
889
+ 9694,Pump,0,1,0.5167,LOW,False
890
+ 9695,Compressor,0,1,0.5625,LOW,False
891
+ 9704,Turbine,1,0,0.1945,MEDIUM,False
892
+ 9734,Pump,0,1,0.533,LOW,False
893
+ 9735,Turbine,1,0,0.4785,LOW,False
894
+ 9742,Compressor,0,1,0.526,LOW,False
895
+ 9749,Turbine,1,0,0.3055,MEDIUM,False
896
+ 9753,Compressor,1,0,0.3964,LOW,False
897
+ 9765,Compressor,1,0,0.4372,LOW,False
898
+ 9782,Compressor,0,1,0.5048,LOW,False
899
+ 9794,Pump,1,0,0.3516,LOW,False
900
+ 9800,Pump,0,1,0.5182,LOW,False
901
+ 9801,Pump,1,0,0.3494,MEDIUM,False
902
+ 9825,Compressor,0,1,0.5359,LOW,False
903
+ 9844,Compressor,0,1,0.5327,LOW,False
904
+ 9845,Compressor,0,1,0.5851,LOW,False
905
+ 9847,Compressor,1,0,0.4227,LOW,False
906
+ 9905,Pump,0,1,0.511,LOW,False
907
+ 9908,Compressor,0,1,0.6432,LOW,False
908
+ 9944,Turbine,0,1,0.5289,LOW,False
909
+ 9954,Turbine,0,1,0.5047,LOW,False
910
+ 9962,Pump,1,0,0.2852,MEDIUM,False
911
+ 9969,Turbine,1,0,0.3396,MEDIUM,False
912
+ 9972,Turbine,1,0,0.4581,LOW,False
913
+ 9979,Pump,0,1,0.5776,LOW,False
914
+ 9983,Pump,1,0,0.3894,LOW,False
915
+ 9990,Pump,1,0,0.4001,LOW,False
test_results_lgbm.csv ADDED
The diff for this file is too large to render. See raw diff
 
test_results_rf.csv ADDED
The diff for this file is too large to render. See raw diff
 
testing_results.txt ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ F:\Mihir\shared_env\Scripts\python.exe F:\Mihir\Trial_AI_ProjDATASET\Fault_Detection_For_Industry\test.py
2
+
3
+ 🚀 FAST TEST STARTING...
4
+
5
+ Rows: 10000
6
+ ✅ Server reachable
7
+
8
+
9
+ 🔥 Testing LGBM...
10
+
11
+ [500/10000] Speed: 24 req/sec
12
+ [1000/10000] Speed: 24 req/sec
13
+ [1500/10000] Speed: 24 req/sec
14
+ [2000/10000] Speed: 24 req/sec
15
+ [2500/10000] Speed: 24 req/sec
16
+ [3000/10000] Speed: 24 req/sec
17
+ [3500/10000] Speed: 24 req/sec
18
+ [4000/10000] Speed: 24 req/sec
19
+ [4500/10000] Speed: 24 req/sec
20
+ [5000/10000] Speed: 24 req/sec
21
+ [5500/10000] Speed: 24 req/sec
22
+ [6000/10000] Speed: 24 req/sec
23
+ [6500/10000] Speed: 24 req/sec
24
+ [7000/10000] Speed: 24 req/sec
25
+ [7500/10000] Speed: 24 req/sec
26
+ [8000/10000] Speed: 24 req/sec
27
+ [8500/10000] Speed: 24 req/sec
28
+ [9000/10000] Speed: 24 req/sec
29
+ [9500/10000] Speed: 24 req/sec
30
+ [10000/10000] Speed: 24 req/sec
31
+
32
+ ⏱ Finished in 413.07s (24 req/sec)
33
+
34
+
35
+ ══════════════════════════════════════════════════
36
+ MODEL: LGBM
37
+ ══════════════════════════════════════════════════
38
+ Accuracy : 0.8095
39
+ Precision: 0.2799
40
+ Recall : 0.5766
41
+ F1 Score : 0.3768
42
+ AUC : 0.7416
43
+ TP=576 TN=7519 FP=1482 FN=423
44
+ ══════════════════════════════════════════════════
45
+
46
+ 🔥 Testing RF...
47
+
48
+ [500/10000] Speed: 23 req/sec
49
+ [1000/10000] Speed: 23 req/sec
50
+ [1500/10000] Speed: 23 req/sec
51
+ [2000/10000] Speed: 23 req/sec
52
+ [2500/10000] Speed: 23 req/sec
53
+ [3000/10000] Speed: 24 req/sec
54
+ [3500/10000] Speed: 24 req/sec
55
+ [4000/10000] Speed: 24 req/sec
56
+ [4500/10000] Speed: 24 req/sec
57
+ [5000/10000] Speed: 24 req/sec
58
+ [5500/10000] Speed: 24 req/sec
59
+ [6000/10000] Speed: 24 req/sec
60
+ [6500/10000] Speed: 24 req/sec
61
+ [7000/10000] Speed: 24 req/sec
62
+ [7500/10000] Speed: 24 req/sec
63
+ [8000/10000] Speed: 24 req/sec
64
+ [8500/10000] Speed: 24 req/sec
65
+ [9000/10000] Speed: 24 req/sec
66
+ [9500/10000] Speed: 24 req/sec
67
+ [10000/10000] Speed: 24 req/sec
68
+
69
+ ⏱ Finished in 420.97s (24 req/sec)
70
+
71
+
72
+ ══════════════════════════════════════════════════
73
+ MODEL: RF
74
+ ══════════════════════════════════════════════════
75
+ Accuracy : 0.9086
76
+ Precision: 0.5556
77
+ Recall : 0.4254
78
+ F1 Score : 0.4819
79
+ AUC : 0.7446
80
+ TP=425 TN=8661 FP=340 FN=574
81
+ ══════════════════════════════════════════════════
82
+
83
+ 🏁 FINAL COMPARISON
84
+
85
+ ACCURACY LGBM=0.8095 RF=0.9086 → RF 🌲
86
+ PRECISION LGBM=0.2799 RF=0.5556 → RF 🌲
87
+ RECALL LGBM=0.5766 RF=0.4254 → LGBM ⚡
88
+ F1 LGBM=0.3768 RF=0.4819 → RF 🌲
89
+ AUC LGBM=0.7416 RF=0.7446 → RF 🌲
90
+
91
+ Process finished with exit code 0