61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
import pickle
|
|
import pandas as pd
|
|
import numpy as np
|
|
from sklearn.metrics import mean_absolute_error
|
|
|
|
# ======================
|
|
# LOAD MODEL
|
|
# ======================
|
|
|
|
with open("model_pegas.pkl", "rb") as f:
|
|
model_pegas = pickle.load(f)
|
|
|
|
print("Model berhasil dimuat")
|
|
|
|
# LOAD DATA
|
|
|
|
df_gabungan = pd.read_excel("Data_Gabungan.xlsx")
|
|
df_eka = pd.read_excel("Data_Penjualan_Eka.xlsx")
|
|
|
|
# PREPROCESSING
|
|
|
|
df_gabungan['ds'] = pd.to_datetime(df_gabungan['tanggal_penjualan'])
|
|
df_eka['ds'] = pd.to_datetime(df_eka['tanggal_penjualan'])
|
|
|
|
df_gab_w = df_gabungan.resample('W', on='ds')[['jumlah']].sum().reset_index().rename(columns={'jumlah':'y'})
|
|
df_eka_w = df_eka.resample('W', on='ds')[['jumlah']].sum().reset_index().rename(columns={'jumlah':'y'})
|
|
|
|
# REGRESSOR
|
|
|
|
df_gab_w['is_pengetatan'] = (df_gab_w['ds'] >= '2025-10-01').astype(int)
|
|
|
|
# HITUNG RASIO
|
|
|
|
overlap = pd.merge(df_gab_w, df_eka_w, on='ds', suffixes=('_gab','_eka'))
|
|
|
|
ratio = overlap['y_eka'].sum() / overlap['y_gab'].sum()
|
|
|
|
print("Rasio:", ratio)
|
|
|
|
# PREDIKSI
|
|
|
|
forecast = model_pegas.predict(df_gab_w)
|
|
|
|
eval_df = pd.merge(df_eka_w[['ds','y']], forecast[['ds','yhat']], on='ds')
|
|
|
|
y_true = eval_df['y'].values
|
|
y_pred_scaled = eval_df['yhat'].values * ratio
|
|
|
|
# EVALUASI
|
|
|
|
mae = mean_absolute_error(y_true, y_pred_scaled)
|
|
|
|
mape = np.mean(
|
|
np.abs((y_true[y_true>0] - y_pred_scaled[y_true>0]) / y_true[y_true>0])
|
|
) * 100
|
|
|
|
print("----------------------------")
|
|
print("HASIL EVALUASI MODEL PEGAS")
|
|
print("MAE :", round(mae,2), "tabung")
|
|
print("MAPE:", round(mape,2), "%")
|
|
print("----------------------------") |