69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
import logging
|
|
from typing import Dict
|
|
from pre_processing import pre_processing
|
|
from processing import processing
|
|
from post_processing import post_processing
|
|
from parse_report import extract_model_variables
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s [%(levelname)s] %(name)s - %(message)s",
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def __main__(application_id: str, creditBureau: dict) -> Dict:
|
|
"""
|
|
Process a single application record via the scoring pipeline.
|
|
Accepts extra keys; only required features are used and others ignored.
|
|
|
|
Returns:
|
|
A dict containing:
|
|
- prediction: float
|
|
- grade: str
|
|
- reason_description: str or None
|
|
"""
|
|
# whitelist of required feature keys (lowercase)
|
|
required_keys = {
|
|
'application_id',
|
|
'evtg04','eads66','s004s','utlmag02','cv13','rev231','rev14','g106s','ct320',
|
|
'mt34s','trv01','g250a','g960s','re36s','rev232','bc102s','utlmag04','re102s',
|
|
'agg911','p02h','g051s','g417s','bc20s','rev225','duemag01','fi21s','us21s',
|
|
'us34s','at36s','g102s','bkc14','balmag04','bkc323','bkc84','rev202','cta20',
|
|
'cta21','agg902','utlmag03','rev84','mt20s','bc21s','st32s','fi34s','rev201',
|
|
'bc97a','balmag01','g232s','balmag02','index02','bc28s','at28a','rev322','bkc322',
|
|
'g201a','g416s','walshr02','fi35s','rle904','re28s','rev233','rev224','rev252',
|
|
'rev253','cv21','rev321','index01','bkc328','br20s','pb34s','g403s','ct319','at28b',
|
|
'mnpmag03','utlmag01','bc36s','bkc321','agg908','cv25','bc107s','bkc327','g990s',
|
|
'pb28s','g411s','g221d','bc104s','g405s','p02d','ret12','bc98a','trv02','rev54',
|
|
'bkc324','s114s','paymnt08','g105s','rev223','rev12','rev13','all231','agg901',
|
|
'g408s','rev203','rvlr75','rvlr77','cv17','cta11','g242b'
|
|
}
|
|
|
|
record = extract_model_variables(creditBureau)
|
|
|
|
processed = pre_processing(record)
|
|
|
|
out = processing(processed)
|
|
|
|
final = post_processing(out)
|
|
|
|
final_result = {
|
|
'application_id': application_id,
|
|
'prediction': out['prediction'],
|
|
'grade': final['grade'],
|
|
'reason_description': final['reason_description'],
|
|
# 'tu_credit_report': record,
|
|
# 'pre_processed_output': processed
|
|
}
|
|
|
|
logger.info(f"final_result: {final_result}")
|
|
|
|
return final_result
|
|
|
|
if __name__ == "__main__":
|
|
import json, sys
|
|
with open(sys.argv[1]) as f:
|
|
data = json.load(f)
|
|
__main__(application_id=data["application_id"], creditBureau=data) |