From 62dfadde20b7f0d30eb07df49b1264318c6135e2 Mon Sep 17 00:00:00 2001 From: admin user Date: Wed, 12 Mar 2025 16:13:29 +0000 Subject: [PATCH] Advanced Graph Series model --- README.md | 3 ++- block.py | 51 ++++++++++++++++++++++++--------------- graph_post_processing.py | 31 ++++++++++++++++++++++++ graph_pre_processing.py | 35 +++++++++++++++++++++++++++ graph_processing.py | 34 ++++++++++++++++++++++++++ request_schema.json | 12 ++++++++- requirements.txt | 6 ++++- response_schema.json | 38 ++++++++++++++++++++++++++++- test_block.py | 27 +++++++++++++++++++++ xgboost_model.joblib | Bin 0 -> 276258 bytes 10 files changed, 214 insertions(+), 23 deletions(-) create mode 100644 graph_post_processing.py create mode 100644 graph_pre_processing.py create mode 100644 graph_processing.py create mode 100644 test_block.py create mode 100644 xgboost_model.joblib diff --git a/README.md b/README.md index 59a3efc..d76e1ab 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ -**Hello world!!!** +# G Series Block +Loads and score G 1 v1 model diff --git a/block.py b/block.py index 3b227f9..662bfba 100644 --- a/block.py +++ b/block.py @@ -1,21 +1,34 @@ -@flowx_block -def example_function(request: dict) -> dict: +import logging +from typing import List, Dict +from graph_pre_processing import pre_processing +from graph_processing import processing +from graph_post_processing import post_processing - # Processing logic here... +# Configure logging +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(name)s - %(message)s", +) +logger = logging.getLogger(__name__) - return { - "meta_info": [ - { - "name": "created_date", - "type": "string", - "value": "2024-11-05" - } - ], - "fields": [ - { - "name": "", - "type": "", - "value": "" - } - ] - } + +def __main__(results: List[Dict]) -> List[Dict]: + logger.info(f"data receiving in g1v1 block: {results}") + data = pre_processing(results) + logger.info(f"pre_processed_data, new_user_app_data: {data}") + + # df = processing(data) + if data.get("cluster_size", 2) < 2: + data["prediction"] = 0 + else: + data = processing(data) + logger.info("prediction: %.8f", float(data['prediction'])) + + # Post-processing: calculate the Final Score and update the dataframe. + final = post_processing(data) + logger.info(final) + + return final + +# testing : +# __main__ diff --git a/graph_post_processing.py b/graph_post_processing.py new file mode 100644 index 0000000..19be35e --- /dev/null +++ b/graph_post_processing.py @@ -0,0 +1,31 @@ +import logging +import math + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(name)s - %(message)s", +) +logger = logging.getLogger(__name__) + +def post_processing(data): + try: + prediction = data.get("prediction", 0) + score_g1 = round( + min(prediction * 100 + 0.00001, 1) * 89 + + max(math.log2(prediction * 100 + 0.000001) * 193, 0), + 0 + ) + data["hd_score_g1"] = score_g1 + logger.info(f"score_g1 calculated: {score_g1}") + except Exception as e: + logger.error(f"Error processing score_g1 calculations: {e}") + + return { + key: data.get(key, None) + for key in [ + "hd_score_m1", "hd_score_g1", "cluster_size_users_v2", + "target_connected_30_sum", "email_cnt", "rejected_app_count", + "app_dt_day_cnt" + ] + } diff --git a/graph_pre_processing.py b/graph_pre_processing.py new file mode 100644 index 0000000..7263c6f --- /dev/null +++ b/graph_pre_processing.py @@ -0,0 +1,35 @@ +import logging + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(name)s - %(message)s", +) +logger = logging.getLogger(__name__) + +def pre_processing(results): + result = results[0] + dtypes = { + "hd_score_m1": float, + "cluster_size_users_v2": float, + "target_connected_30_sum": float, + "email_cnt": float, + "rejected_app_count": float, + "app_dt_day_cnt": float + } + data = { + "hd_score_m1": result["hd_score_m1"], + "cluster_size_users_v2": result["cluster_size_users_v2"], + "target_connected_30_sum": result["target_connected_30_sum"], + "email_cnt": result["email_cnt"], + "rejected_app_count": result["rejected_app_count"], + "app_dt_day_cnt": result["app_dt_day_cnt"], + "cluster_size": result["cluster_size"], + } + + for col, dtype in dtypes.items(): + if col in data: + value = str(data[col]).strip() + data[col] = dtype(value) if value.replace(".", "", 1).isdigit() else None + + return data diff --git a/graph_processing.py b/graph_processing.py new file mode 100644 index 0000000..7ecae86 --- /dev/null +++ b/graph_processing.py @@ -0,0 +1,34 @@ +import xgboost as xgb +import pandas as pd +import joblib +import logging + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(name)s - %(message)s", +) +logger = logging.getLogger(__name__) + + +def processing(data): + df = pd.DataFrame([data]) + if df.empty: + logger.error("Input DataFrame is empty.") + + # Load Model + model_path = "./xgboost_model.joblib" + # model_path ="C:/Users/abinisha/habemco_flowx/g1_v1/xgboost_model.joblib" + model = joblib.load(model_path) + + expected_features = model.feature_names + + df = df.applymap(lambda x: float('nan') if x is None else x) + + dmatrix = xgb.DMatrix(df[expected_features], enable_categorical=True, missing=float('nan')) + + prediction = model.predict(dmatrix) + + df['prediction'] = prediction + + return df.iloc[0].to_dict() diff --git a/request_schema.json b/request_schema.json index 0967ef4..2838865 100644 --- a/request_schema.json +++ b/request_schema.json @@ -1 +1,11 @@ -{} +{ + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "properties": { + "results": { + "type": ["array", "null"], + "items": {"type": "object"} + } + }, + "required": [] +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 0967ef4..c044a52 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,5 @@ -{} +joblib==1.4.2 +pandas==2.2.3 +xgboost==2.1.3 +typing==3.6.1 + diff --git a/response_schema.json b/response_schema.json index 0967ef4..62d7e82 100644 --- a/response_schema.json +++ b/response_schema.json @@ -1 +1,37 @@ -{} +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "hd_score_m1": { + "type": ["number", "null"], + "description": "HD fraud Score M1" + }, + "hd_score_g1": { + "type": ["number", "null"], + "description": "HD fraud Score G1" + }, + "cluster_size_users_v2": { + "type": ["number", "null"], + "description": "Size of the user cluster in version 2." + }, + "target_connected_30_sum": { + "type": ["number", "null"], + "description": "Sum of target connections within 30 days." + }, + "email_cnt": { + "type": ["number", "null"], + "description": "Count of emails associated with the application." + }, + "rejected_app_count": { + "type": ["number", "null"], + "description": "Count of rejected applications for the applicant." + }, + "app_dt_day_cnt": { + "type": ["number", "null"], + "description": "Number of application days counted." + } + } +} + + + diff --git a/test_block.py b/test_block.py new file mode 100644 index 0000000..2cbf95a --- /dev/null +++ b/test_block.py @@ -0,0 +1,27 @@ +import unittest +import pandas as pd +from block import __main__ + + +data = [{ + # "application_key": "0A123C7F-BE45-4912-8E22-0904707325E7", + "hd_score_m1": 1211, + "cluster_size_users_v2": 2, + "target_connected_30_sum": 0, + "email_cnt": 1, + "rejected_app_count": 2, + "app_dt_day_cnt": 2, + "cluster_size": 3 + }] + +class TestBlock(unittest.TestCase): + def test_main_success(self): + blockResult = __main__(data) + + # breakpoint() + self.assertIsInstance(blockResult, dict, "Result should be a dictionary.") + self.assertIn("hd_score_g1", blockResult, "Result dictionary should contain 'hd_score_g1' if success.") + + +if __name__ == "__main__": + unittest.main() diff --git a/xgboost_model.joblib b/xgboost_model.joblib new file mode 100644 index 0000000000000000000000000000000000000000..0805b92f75fbb8e1afd773cc848829f978e6c276 GIT binary patch literal 276258 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