SuperModelingFactory 0.3.4__tar.gz → 0.3.5__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 (104) hide show
  1. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/credit_model.py +33 -1
  2. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/__init__.py +1 -1
  3. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/PKG-INFO +2 -2
  4. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/README.md +1 -1
  5. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/SuperModelingFactory.egg-info/PKG-INFO +2 -2
  6. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/pyproject.toml +1 -1
  7. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/setup.py +1 -1
  8. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/ExcelMaster/ExcelFormatTool.py +0 -0
  9. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/ExcelMaster/ExcelMaster.py +0 -0
  10. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/ExcelMaster/Template.py +0 -0
  11. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/ExcelMaster/Utility.py +0 -0
  12. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/ExcelMaster/__init__.py +0 -0
  13. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/LICENSE +0 -0
  14. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/MANIFEST.in +0 -0
  15. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Binning_Tool.py +0 -0
  16. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Binning_Tool.pyi +0 -0
  17. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Check_DuckDB_Compatibility.py +0 -0
  18. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Json_Data_Converter.py +0 -0
  19. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Model_Registry_Tool.py +0 -0
  20. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/ODPS_Tool.py +0 -0
  21. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Parallel_Engine.py +0 -0
  22. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Parallel_ODPS_Manager.py +0 -0
  23. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Proc_Compare.py +0 -0
  24. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Slope_Tool.py +0 -0
  25. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/Slope_Tool.pyi +0 -0
  26. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/XOR_Encryptor.py +0 -0
  27. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/XOR_Encryptor.pyi +0 -0
  28. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/__init__.py +0 -0
  29. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/kDataFrame.py +0 -0
  30. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/kDataFrame.pyi +0 -0
  31. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/sample_weight_utils.py +0 -0
  32. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Core/utils.py +0 -0
  33. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Eval/Evaluation_Tool.py +0 -0
  34. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Eval/Evaluation_Tool.pyi +0 -0
  35. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Eval/Model_Eval_Tool.py +0 -0
  36. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Eval/Model_Eval_Tool.pyi +0 -0
  37. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Eval/__init__.py +0 -0
  38. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Eval/evaluate_model.py +0 -0
  39. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Eval/evaluate_model.pyi +0 -0
  40. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Eval/weighted_eval_utils.py +0 -0
  41. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Explainability/Coalition_Structure.py +0 -0
  42. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Explainability/Model_Explainer.py +0 -0
  43. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Explainability/__init__.py +0 -0
  44. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Feature/Distribution_Tool.py +0 -0
  45. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Feature/Distribution_Tool.pyi +0 -0
  46. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Feature/Feature_Insights.py +0 -0
  47. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Feature/Feature_Insights.pyi +0 -0
  48. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Feature/PSI_Tool.py +0 -0
  49. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Feature/PSI_Tool.pyi +0 -0
  50. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Feature/WOE_Engine_Feature_Patch.py +0 -0
  51. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Feature/__init__.py +0 -0
  52. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Model/Backward_Tool.py +0 -0
  53. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Model/Backward_Tool.pyi +0 -0
  54. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Model/GBM_Search_Tool.py +0 -0
  55. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Model/GBM_Tool.py +0 -0
  56. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Model/GBM_Tool.pyi +0 -0
  57. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Model/LRM_Tool.py +0 -0
  58. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Model/LRM_Tool.pyi +0 -0
  59. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Model/__init__.py +0 -0
  60. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/__init__.py +0 -0
  61. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/_common.py +0 -0
  62. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/feature_validation.py +0 -0
  63. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/mock_sample.py +0 -0
  64. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/reject_inference.py +0 -0
  65. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/sample_analysis.py +0 -0
  66. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/score_comparison.py +0 -0
  67. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Pipeline/score_consistency_uat.py +0 -0
  68. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Sample/Distribution_Adaptation.py +0 -0
  69. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Sample/Distribution_Adaptation.pyi +0 -0
  70. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Sample/Reject_Infer.py +0 -0
  71. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Sample/Reject_Infer.pyi +0 -0
  72. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Sample/Sample_Split.py +0 -0
  73. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Sample/Sample_Split.pyi +0 -0
  74. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/Sample/__init__.py +0 -0
  75. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/UAT/UAT_Consistency_Checker.py +0 -0
  76. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/UAT/__init__.py +0 -0
  77. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Adapter.py +0 -0
  78. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Adapter.pyi +0 -0
  79. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Master.py +0 -0
  80. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Master.pyi +0 -0
  81. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Monotone_Binner.py +0 -0
  82. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Monotone_Binner.pyi +0 -0
  83. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Plot_Tool.py +0 -0
  84. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Plot_Tool.pyi +0 -0
  85. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Report_Builder.py +0 -0
  86. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Report_Builder.pyi +0 -0
  87. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Tool.py +0 -0
  88. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/WOE_Tool.pyi +0 -0
  89. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/__init__.py +0 -0
  90. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/plot_woe_tool.py +0 -0
  91. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/WOE/plot_woe_tool.pyi +0 -0
  92. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/ref_font/KaiTi.ttf +0 -0
  93. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/ref_font/WeiRuanYaHei.ttf +0 -0
  94. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/ref_font/__init__.py +0 -0
  95. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Modeling_Tool/ref_font/simsun.ttc +0 -0
  96. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Report/Report_Tool.py +0 -0
  97. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/Report/__init__.py +0 -0
  98. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/SuperModelingFactory.egg-info/SOURCES.txt +0 -0
  99. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/SuperModelingFactory.egg-info/dependency_links.txt +0 -0
  100. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/SuperModelingFactory.egg-info/not-zip-safe +0 -0
  101. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/SuperModelingFactory.egg-info/requires.txt +0 -0
  102. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/SuperModelingFactory.egg-info/top_level.txt +0 -0
  103. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/requirements.txt +0 -0
  104. {supermodelingfactory-0.3.4 → supermodelingfactory-0.3.5}/setup.cfg +0 -0
@@ -26,6 +26,7 @@ class CreditModelPipelineConfig:
26
26
  split_col: str | None = None
27
27
  sample_col: str = "sample_ind"
28
28
  oot_col: str | None = "oot_flag"
29
+ weight_col: str | None = None
29
30
  random_state: int = 42
30
31
  write_outputs: bool = True
31
32
  write_excel: bool = True
@@ -283,6 +284,8 @@ class CreditModelPipeline:
283
284
  excluded.add(cfg.split_col)
284
285
  if cfg.oot_col:
285
286
  excluded.add(cfg.oot_col)
287
+ if cfg.weight_col:
288
+ excluded.add(cfg.weight_col)
286
289
  numeric_cols = data.select_dtypes(include=[np.number]).columns
287
290
  return [col for col in numeric_cols if col not in excluded]
288
291
 
@@ -292,6 +295,12 @@ class CreditModelPipeline:
292
295
  missing = [col for col in missing if col not in data.columns]
293
296
  if missing:
294
297
  raise KeyError(f"Missing required columns: {missing}")
298
+ if cfg.weight_col:
299
+ if cfg.weight_col not in data.columns:
300
+ raise KeyError(f"Missing weight_col {cfg.weight_col!r}")
301
+ from Modeling_Tool.Core.sample_weight_utils import resolve_sample_weight
302
+
303
+ resolve_sample_weight(data=data, weight_col=cfg.weight_col, expected_len=len(data))
295
304
  if cfg.warm_start_enabled:
296
305
  if not cfg.warm_start_score_col:
297
306
  raise ValueError("warm_start_score_col is required when warm_start_enabled=True")
@@ -302,6 +311,21 @@ class CreditModelPipeline:
302
311
  if cfg.warm_start_on_unsupported not in {"skip", "raise"}:
303
312
  raise ValueError("warm_start_on_unsupported must be 'skip' or 'raise'")
304
313
 
314
+ def _gbm_weight_kwargs(self, train: pd.DataFrame, val: pd.DataFrame) -> dict[str, Any]:
315
+ cfg = self.config
316
+ if not cfg.weight_col:
317
+ return {}
318
+ from Modeling_Tool.Core.sample_weight_utils import resolve_sample_weight
319
+
320
+ kwargs: dict[str, Any] = {}
321
+ train_sw = resolve_sample_weight(data=train, weight_col=cfg.weight_col, expected_len=len(train))
322
+ if train_sw is not None:
323
+ kwargs["sample_weight"] = train_sw
324
+ eval_sw = resolve_sample_weight(data=val, weight_col=cfg.weight_col, expected_len=len(val))
325
+ if eval_sw is not None:
326
+ kwargs["eval_sample_weight"] = eval_sw
327
+ return kwargs
328
+
305
329
  def _validate_gbm_feature_source_config(self) -> None:
306
330
  source_cfg = self.config.gbm_feature_source
307
331
  if isinstance(source_cfg, dict):
@@ -614,6 +638,7 @@ class CreditModelPipeline:
614
638
  val_data=val,
615
639
  val_varlist=feature_cols,
616
640
  val_tgt_name=cfg.target_col,
641
+ weight_col=cfg.weight_col,
617
642
  )
618
643
  models[name] = (lr, getattr(lr, "model", lr), list(feature_cols))
619
644
  elif name in {"lgb", "xgb", "cat"}:
@@ -629,6 +654,7 @@ class CreditModelPipeline:
629
654
  valx=val[feature_cols],
630
655
  valy=val[cfg.target_col].astype(int),
631
656
  init_score=init_score,
657
+ **self._gbm_weight_kwargs(train, val),
632
658
  )
633
659
  raw = gbm._model.model if hasattr(gbm, "_model") else gbm
634
660
  models[name] = (gbm, raw, list(feature_cols))
@@ -651,6 +677,8 @@ class CreditModelPipeline:
651
677
  "model_type": f"{cfg.backward_model}m" if cfg.backward_model == "lgb" else cfg.backward_model,
652
678
  "validation_data": splits["oos"],
653
679
  "test_data_dict": {"oot": splits["oot"]},
680
+ "weight_col": cfg.weight_col,
681
+ "validation_weight_col": cfg.weight_col,
654
682
  },
655
683
  cfg.backward_params.get("init", {}),
656
684
  )
@@ -711,6 +739,8 @@ class CreditModelPipeline:
711
739
  tgt_name=cfg.target_col,
712
740
  eval_sets={"oos": splits["oos"], "oot": splits["oot"]},
713
741
  param_grid=cfg.lr_search_param_grid,
742
+ weight_col=cfg.weight_col,
743
+ eval_weight_col=cfg.weight_col,
714
744
  **params,
715
745
  )
716
746
  self._lr_best_params = dict(getattr(lr, "best_params_", {}) or {})
@@ -831,6 +861,8 @@ class CreditModelPipeline:
831
861
  data=splits["ins"],
832
862
  search_space=search_spaces[name],
833
863
  fit_kwargs=fit_kwargs or None,
864
+ weight_col=cfg.weight_col,
865
+ eval_weight_col=cfg.weight_col,
834
866
  **common,
835
867
  )
836
868
  except Exception as exc:
@@ -858,7 +890,7 @@ class CreditModelPipeline:
858
890
  for ds_name, df in splits.items():
859
891
  scored = df.copy()
860
892
  scored[f"pred_{name}"] = self._predict_model_positive(name, wrapper, scored, feature_cols)
861
- add_dataset_with_optional_weight(evaluator, ds_name, scored)
893
+ add_dataset_with_optional_weight(evaluator, ds_name, scored, weight_col=cfg.weight_col)
862
894
  fig_save_path = None
863
895
  if cfg.write_outputs and cfg.plot_outputs:
864
896
  fig_save_path = str(Path(cfg.output_dir) / "figs" / "perf" / f"perf_{name}.png")
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  __author__ = "Jingkai Sun"
4
- __version__ = "0.3.4"
4
+ __version__ = "0.3.5"
5
5
 
6
6
  # Core module - base data structures
7
7
  from .Core import (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SuperModelingFactory
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Credit risk modeling factory: WOE binning, scorecards, LightGBM, Excel reporting.
5
5
  Home-page: https://github.com/Kyle-J-Sun/SuperModelingFactory
6
6
  Author: Kyle Sun
@@ -262,7 +262,7 @@ em.close_workbook()
262
262
 
263
263
  ## 版本
264
264
 
265
- - **Version**: 0.3.4
265
+ - **Version**: 0.3.5
266
266
  - **Author**: Jingkai Sun
267
267
 
268
268
  ## 许可证
@@ -205,7 +205,7 @@ em.close_workbook()
205
205
 
206
206
  ## 版本
207
207
 
208
- - **Version**: 0.3.4
208
+ - **Version**: 0.3.5
209
209
  - **Author**: Jingkai Sun
210
210
 
211
211
  ## 许可证
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SuperModelingFactory
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Credit risk modeling factory: WOE binning, scorecards, LightGBM, Excel reporting.
5
5
  Home-page: https://github.com/Kyle-J-Sun/SuperModelingFactory
6
6
  Author: Kyle Sun
@@ -262,7 +262,7 @@ em.close_workbook()
262
262
 
263
263
  ## 版本
264
264
 
265
- - **Version**: 0.3.4
265
+ - **Version**: 0.3.5
266
266
  - **Author**: Jingkai Sun
267
267
 
268
268
  ## 许可证
@@ -12,7 +12,7 @@ build-backend = "setuptools.build_meta"
12
12
 
13
13
  [project]
14
14
  name = "SuperModelingFactory"
15
- version = "0.3.4"
15
+ version = "0.3.5"
16
16
  description = "Credit risk modeling factory: WOE binning, scorecards, LightGBM, Excel reporting."
17
17
  readme = "README.md"
18
18
  requires-python = ">=3.10"
@@ -15,7 +15,7 @@ def _read(path: str) -> str:
15
15
 
16
16
  setup(
17
17
  name="SuperModelingFactory",
18
- version=os.environ.get("SMF_VERSION", "0.3.4"),
18
+ version=os.environ.get("SMF_VERSION", "0.3.5"),
19
19
  description="Credit risk modeling factory: WOE binning, scorecards, LightGBM, Excel reporting.",
20
20
  long_description=_read("README.md"),
21
21
  long_description_content_type="text/markdown",