From 0dd0ce1fe28bee4432111e61b7daf6546c9e419c Mon Sep 17 00:00:00 2001 From: MrWaradana Date: Mon, 22 Dec 2025 16:23:30 +0700 Subject: [PATCH] refactor: Exclude `seq=0` from historical data, simplify CM prediction logic, and remove hardcoded assetnum from run script. --- src/modules/equipment/Prediksi.py | 19 +++++++----------- .../__pycache__/Prediksi.cpython-311.pyc | Bin 41028 -> 40721 bytes .../equipment/__pycache__/run.cpython-311.pyc | Bin 3029 -> 2686 bytes src/modules/equipment/run.py | 12 +++++------ 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/modules/equipment/Prediksi.py b/src/modules/equipment/Prediksi.py index 14161ec..bd69dae 100644 --- a/src/modules/equipment/Prediksi.py +++ b/src/modules/equipment/Prediksi.py @@ -95,6 +95,7 @@ class Prediksi: FROM lcc_equipment_tr_data WHERE assetnum = %s and is_actual=1 + and seq != 0 ; """ cursor.execute(query, (equipment_id,)) @@ -711,7 +712,6 @@ class Prediksi: if df is None: print("Data tidak tersedia untuk prediksi.") return - # Mendapatkan tahun proyeksi dari DB par_tahun_target = self.__get_param(assetnum) @@ -769,19 +769,14 @@ class Prediksi: try: # Case untuk kolom yang terkait dengan corrective maintenance (cm) 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[df["is_actual"] == 1] - 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_df = df + recent_n = df.shape[0] recent_n = max(1, recent_n) recent_vals = ( - recent_df.sort_values("year", ascending=True) + recent_df + .sort_values("year", ascending=True) .head(recent_n)[column] .dropna() ) @@ -798,7 +793,7 @@ class Prediksi: avg = 0.0 if pd.isna(avg) else float(avg) preds = np.repeat(float(avg), n_future) - print(preds) + # print(preds) else: # 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 diff --git a/src/modules/equipment/__pycache__/Prediksi.cpython-311.pyc b/src/modules/equipment/__pycache__/Prediksi.cpython-311.pyc index 2188689e651d02f196c70fdabbff4a63dea614eb..511bc59a95a97b74a9e136b1e88199ddb0a2b49e 100644 GIT binary patch delta 1538 zcmZuxTTB#Z6#oAiW?^r$v)9?nEDJ6-8x)p{XcZBQrB<+lwq7VI>1Zmot1N@CIHQ=T z?6wcAIaSeEg~U>t(ik%jwRfAEKD2@?^`Z5}ZE6$Kr!_Hc-`aoJu2ADi{xjb>=bJO< z|4uTuZc=Byrq~b7W&qmm5{Kg_<-8P zZNj($64qwi0(ez9)r=vfcjt0WF18`P1pd*x)YZ24DLkP5;z-f>g!;LAhQ(uQy!3k$ zepB62^BIjBRKrTqioaD4ZM>$#<7!~bNh98*UhViJ4Rp`#uZlzfhO3WM4q2o6BO^Dw?LunJ+@pz1STVqld%XT8pEu#G#eu%KgCdNuqqnFHt387{PqM6Pl{}Okqk#ruJ7hLIy?+95mO%8~8Z0kcg-P%p5swBItXc%>HE6lb_p3N1`R1ocJc zOV2CL`CgRgNmX{fHLvSJMsbNq;bqsN30{_6fCqSsWf9Ar5dyoRejos^M=d!DAGU!t z>hu^DekTg&^rHcKC+f#CKh*aBedrXA?CECV&VYyYbU$e-T0F3~-;H^&M0tCri!R%R ztc;&mkk=H%c2J_r>_+*&MP=`!*x{?_DvMnz%VrRo;$Yk_=oGtbAM?ZY@+Giw&`575 z^KTz4#$HecHyFJ#mZ=Gvtdxc`XLxup=&<@E5@$`c%0BqD&|~x+^M&(>LgWd{j&6F2 zWy`QUq$;AVD8uW=*-I?7t6v=5rHAFGijDX52YUB(y&?5=9fYl?lJMN=I^DgTxA%30 zq3iS%_5(XS0v`Ab-{SZAwLnuuhf^)G7Iu!`Q53z4@ zTd}$J5o(1*ykh?g*jk(7eWTG?zAVX?rHV>M^*;xTudbYIyt;Zc@AqKISkGixGFW{# zSUsAT5{mEp%Pw|Ix^C2rb|n4l?)ul=_ZME=Hdc0F_odyFFFs}{f6ZSylwWl5wF^5g z?MUm9rzp+AiFeNDTwu}$we;Oa`gl8sK3N|k{=2|S#hd-qZN}2#q;5N~hMlICBIb4> zrQsmfa8U`t(?)M=2{m1;ai&X5t+mW_mByK_!5XeDC3r@_r0I-5u(^SmSwm@fE!J>D zV-*QztNd*oN?NKlR+2Nct)P=$TU&@umNQx=#AulnZi44HLwg-P=e4z0(Q{QydmVU3 z&f$ExKC;bH$pq8riQ5m3gz7m=Gt1NH8D32#ZtBR3P=Lme9Zl+kH05`g;4 fOK_9A_wrgC>R>VH@NEBRKL2=eRTkjRmA-!gmcg3w delta 1907 zcmah}ZA?>F7{2FTZog=ITl!t@<*N#kva1&$`2RP>kWYcYa5HC8>HK7z*@K*T2 zgqlp<-b9N*M;79m4ISnt+l(J0(d?H(3tcp3PE59FmTak;KlWqUb}qHFer+e`zJ1Pn zp7WgdzVCbc(IxWA1gZT@qfrrf^eGy4H=I4Iy`Uj)Ay`sphVyd0_=o0m1Ya?y(0k$* z-5P|Jz+UBRs1fe#pNHyq?Q+JX8>~wdz&}c}*qn2MM1Jvi<1B^x#2M?P7JVXqTJoJ5 z?GksFpQBK<=&0oNXhIxp_)>;O#LD&k*{D&x_|7j16ci&otwN*X8P89o>}4F%00-fA zH^qfGxZ1u8ad5C}De&G36SoubS^bKjY*0cpM)E-p&Ujboxi-1w9O?(^7HbH9i6}k>hv0PADcnv)9HMa zL`@D}CFmh$HYz+!hzsHe_>Py58e%I=*(9Gmrap!5`+|hu{CV(W2Zyv!Xf$FKCO=2W zX=73{UVDhkylZ5h_u`{Giq`}Up6$NE)JcM9)2FbI!)wQwhc{mG<-xBjbPuCu))*c+ zW0*fADK$ zCwjud6G5wB$%vv+uw>S!ZT>i~n}(O~UkFG0V|3R0tt}qd`9UR&elUjeV8emK z*{U=XZXei}m51L9?yTdWXQ0M#8GoQ1-_r!~=RM*c(MKf6PPjTyN+)DQ!2k?UomUR4R=Q^&X~nHn_C6tr)jsgJ+Dbjri7fZEl6l#bLbdz%gTjYht$LBuzE2sg zwN!6YIdS?GH@27a8P$~97$MFEa6i7Iu$vklsHo= z^*S3pWtKQoRwQ9t3C2+ZVbLhcU+&FW+-8Ui7_y!FcfLkGNI^WF5yJT*Dy^EU{dF0s$&A_PGP78vL^3g zl$dPA$R|+CT*8Y`n#Dd@k6B{!B_?5ML4;@xbBPdwS0XZrS(YE!l`JLVlXaM7Q(5OS zqq{ecAH`j481jVu!cNdHkC<)iIkLenDzYk(L^!pEHHD*!iGcyt)><|UHNenJ;l!en z9cTh)6;QU8BZaGmZ8k#+cMUs`e*Xya2)m zhP#5IQzR!!Pmyl$`XIp0%70f$ccJbQ-3v1MXlV0Kb_phT17HwOS9fG&ILOH5Xv%z$ zTi(%t`Je$Sh;8X;=4`-l*nrDLh54|Ryo)^Z5qVZ1`xZxhd~RZ9UVOYJZxKJxfFjPx zxm>Yqpxkgva`HkhF)r7{Z9w~!`au%5FyozDa8uVNQy1~zp4UxDkOg7Ci; zD6|KL)B+;Dije=-6=WjP5x%9X_R@4Ph4DC!m{#O=-oSS>Jx$UB5yzG6?d|RFZ-+$u8KXxF=`Vl=T4O>9OJ#isrH{jw{>T~D#; zo&`>VC3iA{J~Su8XeBJLbfv9*Pz9^1`#g_U8=D8?Xf-add`(K89*Tocad+wzT9=zs z-DtgAV7Vh{S~hK3n%1shfBA3n&^q}B^id+Wb*g0(8Ny0u4NY?p^Xm=x!HNJ!S@L457P diff --git a/src/modules/equipment/run.py b/src/modules/equipment/run.py index 400a047..ebadb24 100644 --- a/src/modules/equipment/run.py +++ b/src/modules/equipment/run.py @@ -10,14 +10,14 @@ from src.modules.equipment.Eac import Eac, main as eac_run async def main(): start_time = time.time() - try: - await query_data() - except Exception as e: - print(f"Error in query_data: {str(e)}") - return + # try: + # await query_data() + # except Exception as e: + # print(f"Error in query_data: {str(e)}") + # return try: - prediction_result = await predict_run(assetnum="A22277") + prediction_result = await predict_run() if prediction_result is False: print("Prediction step failed or was skipped. Skipping EAC run.") return