refactor: Exclude `seq=0` from historical data, simplify CM prediction logic, and remove hardcoded assetnum from run script.

main
MrWaradana 3 weeks ago
parent fa4ea74d9b
commit 0dd0ce1fe2

@ -95,6 +95,7 @@ class Prediksi:
FROM lcc_equipment_tr_data FROM lcc_equipment_tr_data
WHERE assetnum = %s WHERE assetnum = %s
and is_actual=1 and is_actual=1
and seq != 0
; ;
""" """
cursor.execute(query, (equipment_id,)) cursor.execute(query, (equipment_id,))
@ -711,7 +712,6 @@ class Prediksi:
if df is None: if df is None:
print("Data tidak tersedia untuk prediksi.") print("Data tidak tersedia untuk prediksi.")
return return
# Mendapatkan tahun proyeksi dari DB # Mendapatkan tahun proyeksi dari DB
par_tahun_target = self.__get_param(assetnum) par_tahun_target = self.__get_param(assetnum)
@ -769,19 +769,14 @@ class Prediksi:
try: try:
# Case untuk kolom yang terkait dengan corrective maintenance (cm) # Case untuk kolom yang terkait dengan corrective maintenance (cm)
if "cm" in col_lower: if "cm" in col_lower:
# Tentukan jumlah baris recent yang dianggap actual jika kolom is_actual ada
if "is_actual" in df.columns: recent_df = df
recent_df = df[df["is_actual"] == 1] recent_n = df.shape[0]
recent_n = recent_df.shape[0]
avg_recent = recent_df[column].mean()
print(f"avg_recent: {avg_recent}")
else:
recent_df = df
recent_n = df.shape[0]
recent_n = max(1, recent_n) recent_n = max(1, recent_n)
recent_vals = ( recent_vals = (
recent_df.sort_values("year", ascending=True) recent_df
.sort_values("year", ascending=True)
.head(recent_n)[column] .head(recent_n)[column]
.dropna() .dropna()
) )
@ -798,7 +793,7 @@ class Prediksi:
avg = 0.0 if pd.isna(avg) else float(avg) avg = 0.0 if pd.isna(avg) else float(avg)
preds = np.repeat(float(avg), n_future) preds = np.repeat(float(avg), n_future)
print(preds) # print(preds)
else: else:
# Untuk kolom non-cm, gunakan nilai dari last actual year bila ada, # Untuk kolom non-cm, gunakan nilai dari last actual year bila ada,
# jika tidak ada gunakan last available non-NA value, jika tidak ada pakai 0.0 # jika tidak ada gunakan last available non-NA value, jika tidak ada pakai 0.0

@ -10,14 +10,14 @@ from src.modules.equipment.Eac import Eac, main as eac_run
async def main(): async def main():
start_time = time.time() start_time = time.time()
try: # try:
await query_data() # await query_data()
except Exception as e: # except Exception as e:
print(f"Error in query_data: {str(e)}") # print(f"Error in query_data: {str(e)}")
return # return
try: try:
prediction_result = await predict_run(assetnum="A22277") prediction_result = await predict_run()
if prediction_result is False: if prediction_result is False:
print("Prediction step failed or was skipped. Skipping EAC run.") print("Prediction step failed or was skipped. Skipping EAC run.")
return return

Loading…
Cancel
Save