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.
Files changed (96) hide show
  1. supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/__init__.py +47 -0
  2. supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/_common.py +132 -0
  3. supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/credit_model.py +825 -0
  4. supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/mock_sample.py +259 -0
  5. supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/reject_inference.py +522 -0
  6. supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/sample_analysis.py +555 -0
  7. supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/score_comparison.py +295 -0
  8. supermodelingfactory-0.3.0/Modeling_Tool/Pipeline/score_consistency_uat.py +230 -0
  9. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/__init__.py +31 -1
  10. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/PKG-INFO +2 -2
  11. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/README.md +1 -1
  12. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/PKG-INFO +2 -2
  13. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/SOURCES.txt +8 -0
  14. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/pyproject.toml +1 -1
  15. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/setup.py +1 -1
  16. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/ExcelFormatTool.py +0 -0
  17. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/ExcelMaster.py +0 -0
  18. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/Template.py +0 -0
  19. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/Utility.py +0 -0
  20. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/ExcelMaster/__init__.py +0 -0
  21. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/LICENSE +0 -0
  22. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/MANIFEST.in +0 -0
  23. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Binning_Tool.py +0 -0
  24. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Binning_Tool.pyi +0 -0
  25. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Check_DuckDB_Compatibility.py +0 -0
  26. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Json_Data_Converter.py +0 -0
  27. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Model_Registry_Tool.py +0 -0
  28. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/ODPS_Tool.py +0 -0
  29. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Slope_Tool.py +0 -0
  30. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/Slope_Tool.pyi +0 -0
  31. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/XOR_Encryptor.py +0 -0
  32. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/XOR_Encryptor.pyi +0 -0
  33. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/__init__.py +0 -0
  34. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/kDataFrame.py +0 -0
  35. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/kDataFrame.pyi +0 -0
  36. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/sample_weight_utils.py +0 -0
  37. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Core/utils.py +0 -0
  38. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/Evaluation_Tool.py +0 -0
  39. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/Evaluation_Tool.pyi +0 -0
  40. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/Model_Eval_Tool.py +0 -0
  41. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/Model_Eval_Tool.pyi +0 -0
  42. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/__init__.py +0 -0
  43. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/evaluate_model.py +0 -0
  44. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/evaluate_model.pyi +0 -0
  45. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Eval/weighted_eval_utils.py +0 -0
  46. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Explainability/Coalition_Structure.py +0 -0
  47. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Explainability/Model_Explainer.py +0 -0
  48. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Explainability/__init__.py +0 -0
  49. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/Distribution_Tool.py +0 -0
  50. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/Distribution_Tool.pyi +0 -0
  51. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/Feature_Insights.py +0 -0
  52. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/Feature_Insights.pyi +0 -0
  53. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/PSI_Tool.py +0 -0
  54. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/PSI_Tool.pyi +0 -0
  55. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/WOE_Engine_Feature_Patch.py +0 -0
  56. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Feature/__init__.py +0 -0
  57. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/Backward_Tool.py +0 -0
  58. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/Backward_Tool.pyi +0 -0
  59. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/GBM_Search_Tool.py +0 -0
  60. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/GBM_Tool.py +0 -0
  61. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/GBM_Tool.pyi +0 -0
  62. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/LRM_Tool.py +0 -0
  63. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/LRM_Tool.pyi +0 -0
  64. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Model/__init__.py +0 -0
  65. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Distribution_Adaptation.py +0 -0
  66. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Distribution_Adaptation.pyi +0 -0
  67. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Reject_Infer.py +0 -0
  68. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Reject_Infer.pyi +0 -0
  69. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Sample_Split.py +0 -0
  70. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/Sample_Split.pyi +0 -0
  71. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/Sample/__init__.py +0 -0
  72. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/UAT/UAT_Consistency_Checker.py +0 -0
  73. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/UAT/__init__.py +0 -0
  74. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Adapter.py +0 -0
  75. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Adapter.pyi +0 -0
  76. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Master.py +0 -0
  77. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Master.pyi +0 -0
  78. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Monotone_Binner.py +0 -0
  79. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Monotone_Binner.pyi +0 -0
  80. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Plot_Tool.py +0 -0
  81. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Plot_Tool.pyi +0 -0
  82. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Report_Builder.py +0 -0
  83. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Report_Builder.pyi +0 -0
  84. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Tool.py +0 -0
  85. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/WOE_Tool.pyi +0 -0
  86. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/__init__.py +0 -0
  87. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/plot_woe_tool.py +0 -0
  88. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Modeling_Tool/WOE/plot_woe_tool.pyi +0 -0
  89. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Report/Report_Tool.py +0 -0
  90. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/Report/__init__.py +0 -0
  91. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/dependency_links.txt +0 -0
  92. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/not-zip-safe +0 -0
  93. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/requires.txt +0 -0
  94. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/SuperModelingFactory.egg-info/top_level.txt +0 -0
  95. {supermodelingfactory-0.2.1 → supermodelingfactory-0.3.0}/requirements.txt +0 -0
  96. {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