Minee12's picture
Model Gradient Boosting hasil tuning + pra-pemrosesan + model card
d1a5847 verified
Raw History Blame Contribute Delete
1.49 kB
import json
import joblib
import pandas as pd
from huggingface_hub import hf_hub_download
BERKAS = ["model_gb_tuned.joblib", "scaler.joblib", "model_columns.json", "preprocessing_config.json"]
def muat_model(repo_id):
p = {nama: hf_hub_download(repo_id=repo_id, filename=nama) for nama in BERKAS}
return {
"model": joblib.load(p["model_gb_tuned.joblib"]),
"scaler": joblib.load(p["scaler.joblib"]),
"columns": json.load(open(p["model_columns.json"])),
"config": json.load(open(p["preprocessing_config.json"])),
}
def siapkan_fitur(data_mentah, bundel):
cfg = bundel["config"]
df = data_mentah.copy() if isinstance(data_mentah, pd.DataFrame) else pd.DataFrame(data_mentah)
df = df[cfg["urutan_fitur_input"]]
for kol, valid in cfg["kategori_valid"].items():
asing = set(df[kol].astype(str)) - set(valid)
if asing:
raise ValueError(f"Nilai {sorted(asing)} pada kolom '{kol}' tidak dikenal model. Nilai valid: {valid}")
X = pd.get_dummies(df, columns=cfg["fitur_kategorikal"])
X = X.reindex(columns=bundel["columns"], fill_value=0).astype(float)
if cfg.get("model_membutuhkan_scaling"):
X[cfg["fitur_numerik"]] = bundel["scaler"].transform(X[cfg["fitur_numerik"]])
return X
def prediksi_gaji(data_mentah, bundel):
# Mengembalikan prediksi gaji tahunan (USD) untuk satu atau beberapa baris data mentah
return bundel["model"].predict(siapkan_fitur(data_mentah, bundel))