SuperModelingFactory 0.2.1__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/__init__.py +47 -0
- supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/_common.py +132 -0
- supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/credit_model.py +825 -0
- supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/mock_sample.py +259 -0
- supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/reject_inference.py +522 -0
- supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/sample_analysis.py +555 -0
- supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/score_comparison.py +295 -0
- supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/score_consistency_uat.py +230 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/__init__.py +31 -1
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/PKG-INFO +2 -2
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/README.md +1 -1
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/PKG-INFO +2 -2
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/SOURCES.txt +8 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/pyproject.toml +1 -1
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/setup.py +1 -1
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/ExcelFormatTool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/ExcelMaster.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/Template.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/Utility.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/LICENSE +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/MANIFEST.in +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Binning_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Binning_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Check_DuckDB_Compatibility.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Json_Data_Converter.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Model_Registry_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/ODPS_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Slope_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Slope_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/XOR_Encryptor.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/XOR_Encryptor.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/kDataFrame.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/kDataFrame.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/sample_weight_utils.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/utils.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/Evaluation_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/Evaluation_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/Model_Eval_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/Model_Eval_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/evaluate_model.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/evaluate_model.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/weighted_eval_utils.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Explainability/Coalition_Structure.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Explainability/Model_Explainer.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Explainability/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/Distribution_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/Distribution_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/Feature_Insights.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/Feature_Insights.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/PSI_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/PSI_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/WOE_Engine_Feature_Patch.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/Backward_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/Backward_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/GBM_Search_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/GBM_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/GBM_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/LRM_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/LRM_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Distribution_Adaptation.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Distribution_Adaptation.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Reject_Infer.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Reject_Infer.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Sample_Split.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Sample_Split.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/UAT/UAT_Consistency_Checker.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/UAT/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Adapter.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Adapter.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Master.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Master.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Monotone_Binner.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Monotone_Binner.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Plot_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Plot_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Report_Builder.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Report_Builder.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/plot_woe_tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/plot_woe_tool.pyi +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Report/Report_Tool.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Report/__init__.py +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/dependency_links.txt +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/not-zip-safe +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/requires.txt +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/top_level.txt +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/requirements.txt +0 -0
- {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/setup.cfg +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from .credit_model import CreditModelPipeline, CreditModelPipelineConfig, CreditModelPipelineResult
|
|
2
|
+
from .reject_inference import (
|
|
3
|
+
RejectInferencePipeline,
|
|
4
|
+
RejectInferencePipelineConfig,
|
|
5
|
+
RejectInferencePipelineResult,
|
|
6
|
+
)
|
|
7
|
+
from .score_comparison import (
|
|
8
|
+
ScoreComparisonPipeline,
|
|
9
|
+
ScoreComparisonPipelineConfig,
|
|
10
|
+
ScoreComparisonPipelineResult,
|
|
11
|
+
)
|
|
12
|
+
from .score_consistency_uat import (
|
|
13
|
+
ScoreConsistencyUATPipeline,
|
|
14
|
+
ScoreConsistencyUATPipelineConfig,
|
|
15
|
+
ScoreConsistencyUATPipelineResult,
|
|
16
|
+
)
|
|
17
|
+
from .sample_analysis import (
|
|
18
|
+
SampleAnalysisPipeline,
|
|
19
|
+
SampleAnalysisPipelineConfig,
|
|
20
|
+
SampleAnalysisPipelineResult,
|
|
21
|
+
)
|
|
22
|
+
from .mock_sample import (
|
|
23
|
+
MockSamplePipeline,
|
|
24
|
+
MockSamplePipelineConfig,
|
|
25
|
+
MockSamplePipelineResult,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
__all__ = [
|
|
29
|
+
"RejectInferencePipeline",
|
|
30
|
+
"RejectInferencePipelineConfig",
|
|
31
|
+
"RejectInferencePipelineResult",
|
|
32
|
+
"CreditModelPipeline",
|
|
33
|
+
"CreditModelPipelineConfig",
|
|
34
|
+
"CreditModelPipelineResult",
|
|
35
|
+
"ScoreComparisonPipeline",
|
|
36
|
+
"ScoreComparisonPipelineConfig",
|
|
37
|
+
"ScoreComparisonPipelineResult",
|
|
38
|
+
"ScoreConsistencyUATPipeline",
|
|
39
|
+
"ScoreConsistencyUATPipelineConfig",
|
|
40
|
+
"ScoreConsistencyUATPipelineResult",
|
|
41
|
+
"SampleAnalysisPipeline",
|
|
42
|
+
"SampleAnalysisPipelineConfig",
|
|
43
|
+
"SampleAnalysisPipelineResult",
|
|
44
|
+
"MockSamplePipeline",
|
|
45
|
+
"MockSamplePipelineConfig",
|
|
46
|
+
"MockSamplePipelineResult",
|
|
47
|
+
]
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from dataclasses import fields, is_dataclass
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any, Iterable, Mapping
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
import pandas as pd
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def make_dirs(*paths: str | os.PathLike | None) -> None:
|
|
13
|
+
for path in paths:
|
|
14
|
+
if path:
|
|
15
|
+
os.makedirs(str(path), exist_ok=True)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def as_list(value: Any | Iterable[Any] | None, default: list[Any] | None = None) -> list[Any]:
|
|
19
|
+
if value is None:
|
|
20
|
+
return list(default or [])
|
|
21
|
+
if isinstance(value, str):
|
|
22
|
+
return [value]
|
|
23
|
+
return list(value)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def merge_dict(base: Mapping[str, Any] | None, override: Mapping[str, Any] | None) -> dict[str, Any]:
|
|
27
|
+
merged = dict(base or {})
|
|
28
|
+
merged.update(dict(override or {}))
|
|
29
|
+
return merged
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def dataclass_to_dict(obj: Any) -> dict[str, Any]:
|
|
33
|
+
if not is_dataclass(obj):
|
|
34
|
+
return dict(obj)
|
|
35
|
+
return {field.name: getattr(obj, field.name) for field in fields(obj)}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def safe_to_csv(df: pd.DataFrame | None, path: str | os.PathLike, index: bool = False) -> None:
|
|
39
|
+
if df is None:
|
|
40
|
+
return
|
|
41
|
+
Path(path).parent.mkdir(parents=True, exist_ok=True)
|
|
42
|
+
df.to_csv(path, index=index)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def get_raw_model(model: Any) -> Any:
|
|
46
|
+
if hasattr(model, "_model") and hasattr(model._model, "model"):
|
|
47
|
+
return model._model.model
|
|
48
|
+
if hasattr(model, "model"):
|
|
49
|
+
return model.model
|
|
50
|
+
return model
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def predict_positive(model: Any, data: pd.DataFrame, feature_cols: list[str]) -> np.ndarray:
|
|
54
|
+
raw_model = get_raw_model(model)
|
|
55
|
+
x = data[feature_cols]
|
|
56
|
+
|
|
57
|
+
if hasattr(model, "_model") and hasattr(raw_model, "predict_proba"):
|
|
58
|
+
pred = raw_model.predict_proba(x)
|
|
59
|
+
elif model.__class__.__name__ == "LRMaster" and hasattr(model, "predict_proba"):
|
|
60
|
+
pred = model.predict_proba(data, varlist=feature_cols)
|
|
61
|
+
elif hasattr(model, "predict_proba"):
|
|
62
|
+
try:
|
|
63
|
+
pred = model.predict_proba(x)
|
|
64
|
+
except TypeError:
|
|
65
|
+
pred = model.predict_proba(data, varlist=feature_cols)
|
|
66
|
+
elif hasattr(raw_model, "predict_proba"):
|
|
67
|
+
pred = raw_model.predict_proba(x)
|
|
68
|
+
elif hasattr(model, "predict"):
|
|
69
|
+
pred = model.predict(x)
|
|
70
|
+
elif hasattr(raw_model, "predict"):
|
|
71
|
+
pred = raw_model.predict(x)
|
|
72
|
+
else:
|
|
73
|
+
raise TypeError(f"Model {type(model)!r} does not expose predict/predict_proba")
|
|
74
|
+
|
|
75
|
+
pred_arr = np.asarray(pred)
|
|
76
|
+
if pred_arr.ndim == 2 and pred_arr.shape[1] > 1:
|
|
77
|
+
return pred_arr[:, 1]
|
|
78
|
+
return pred_arr.reshape(-1)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def add_dataset_with_optional_weight(
|
|
82
|
+
evaluator: Any,
|
|
83
|
+
name: str,
|
|
84
|
+
data: pd.DataFrame,
|
|
85
|
+
weight_col: str | None = None,
|
|
86
|
+
) -> None:
|
|
87
|
+
if weight_col:
|
|
88
|
+
try:
|
|
89
|
+
evaluator.add_dataset(name, data, weight_col=weight_col)
|
|
90
|
+
return
|
|
91
|
+
except TypeError:
|
|
92
|
+
pass
|
|
93
|
+
evaluator.add_dataset(name, data)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def write_basic_excel(
|
|
97
|
+
report_path: str,
|
|
98
|
+
sheets: Mapping[str, pd.DataFrame | None],
|
|
99
|
+
title: str | None = None,
|
|
100
|
+
) -> str:
|
|
101
|
+
from ExcelMaster.ExcelMaster import ExcelMaster
|
|
102
|
+
|
|
103
|
+
Path(report_path).parent.mkdir(parents=True, exist_ok=True)
|
|
104
|
+
em = ExcelMaster(report_path, verbose=False)
|
|
105
|
+
used: set[str] = set()
|
|
106
|
+
|
|
107
|
+
def sheet_name(name: str) -> str:
|
|
108
|
+
clean = str(name).replace("/", "_").replace("\\", "_").replace(":", "-")
|
|
109
|
+
clean = clean.replace("[", "(").replace("]", ")").replace("*", "_").replace("?", "_")
|
|
110
|
+
clean = clean.strip("' ") or "Sheet"
|
|
111
|
+
base = clean[:31]
|
|
112
|
+
candidate = base
|
|
113
|
+
i = 2
|
|
114
|
+
while candidate.lower() in used:
|
|
115
|
+
suffix = f"_{i}"
|
|
116
|
+
candidate = f"{base[:31 - len(suffix)]}{suffix}"
|
|
117
|
+
i += 1
|
|
118
|
+
used.add(candidate.lower())
|
|
119
|
+
return candidate
|
|
120
|
+
|
|
121
|
+
if title:
|
|
122
|
+
ws = em.add_worksheet(sheet_name("Overview"))
|
|
123
|
+
em.write_text_content(ws, input_text=title)
|
|
124
|
+
|
|
125
|
+
for name, df in sheets.items():
|
|
126
|
+
if df is None:
|
|
127
|
+
continue
|
|
128
|
+
ws = em.add_worksheet(sheet_name(name))
|
|
129
|
+
em.write_dataframe(ws, df=df, title=str(name), index=False)
|
|
130
|
+
|
|
131
|
+
em.close_workbook()
|
|
132
|
+
return report_path
|