winpredict / predictor /utils.py
Tothemnoo's picture
Upload 71 files
97b5000 verified
Raw
History Blame Contribute Delete
2.75 kB
import os, json, joblib
import pandas as pd
from threading import Lock
_LOCK = Lock()
_MODELS = {}
_FEATURES = {}
ARTIFACT_DIR = os.path.join(os.path.dirname(__file__), '..', 'artifacts')
def _load_json(name):
with open(os.path.join(ARTIFACT_DIR, name), 'r', encoding='utf-8') as f:
return json.load(f)
def _load_pkl(name):
return joblib.load(os.path.join(ARTIFACT_DIR, name))
def load_artifacts_once():
global _MODELS, _FEATURES
with _LOCK:
if _MODELS:
return
_FEATURES['feat10'] = _load_json('feature_names_10.json')
_FEATURES['feat15'] = _load_json('feature_names_15.json')
try:
_FEATURES['objectives'] = _load_json('objective_features.json')
except FileNotFoundError:
meta = _load_json('model_meta.json')
_FEATURES['objectives'] = meta.get('objective_features', [
'firstdragon','firstherald','firsttower','firstblood','firstmidtower'
])
_FEATURES['meta'] = _load_json('model_meta.json')
objs = _FEATURES.get('objectives', [])
_FEATURES['feat10'] = list(dict.fromkeys(_FEATURES['feat10'] + objs))
_FEATURES['feat15'] = list(dict.fromkeys(_FEATURES['feat15'] + objs))
_MODELS['rf_10'] = _load_pkl('rf_10.pkl')
_MODELS['xgb_10'] = _load_pkl('xgb_10.pkl')
_MODELS['lr_10'] = _load_pkl('lr_10.pkl')
_MODELS['rf_15'] = _load_pkl('rf_15.pkl')
_MODELS['xgb_15'] = _load_pkl('xgb_15.pkl')
_MODELS['lr_15'] = _load_pkl('lr_15.pkl')
_MODELS['meta'] = _load_pkl('meta_model.pkl')
_MODELS['meta10'] = _load_pkl('meta_model10.pkl')
_MODELS['meta15'] = _load_pkl('meta_model15.pkl')
def required_features(which: str):
if which == 'at10': return _FEATURES['feat10']
if which == 'at15': return _FEATURES['feat15']
raise ValueError("which must be 'at10' or 'at15'")
def dict_to_df(feature_dict: dict, which: str) -> pd.DataFrame:
cols = required_features(which)
row = [feature_dict.get(c, 0) for c in cols] # 기입안한 값 0으로 대체
return pd.DataFrame([row], columns=cols)
def assemble_meta(prob10: dict, prob15: dict):
meta_X = pd.DataFrame([{
'rf_10': prob10['rf'], 'xgb_10': prob10['xgb'], 'lr_10': prob10['lr'],
'rf_15': prob15['rf'], 'xgb_15': prob15['xgb'], 'lr_15': prob15['lr'],
}])
meta_10X = pd.DataFrame([{
'rf_10': prob10['rf'], 'xgb_10': prob10['xgb'], 'lr_10': prob10['lr'],
}])
meta_15X = pd.DataFrame([{
'rf_15': prob15['rf'], 'xgb_15': prob15['xgb'], 'lr_15': prob15['lr'],
}])
return meta_X, meta_10X, meta_15X