SuperModelingFactory 0.7.2__tar.gz → 0.8.1__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 (116) hide show
  1. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Parallel_Engine.py +6 -0
  2. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/Feature_Screen.py +4 -0
  3. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/credit_model.py +21 -2
  4. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/feature_validation.py +26 -2
  5. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Master.py +24 -2
  6. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Master.pyi +2 -2
  7. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Monotone_Binner.py +371 -29
  8. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Monotone_Binner.pyi +4 -2
  9. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Tool.py +208 -4
  10. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Tool.pyi +7 -2
  11. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/__init__.py +1 -1
  12. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/PKG-INFO +2 -2
  13. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/README.md +1 -1
  14. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/SuperModelingFactory.egg-info/PKG-INFO +2 -2
  15. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/pyproject.toml +1 -1
  16. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/setup.py +1 -1
  17. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/ExcelMaster/ExcelFormatTool.py +0 -0
  18. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/ExcelMaster/ExcelMaster.py +0 -0
  19. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/ExcelMaster/Template.py +0 -0
  20. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/ExcelMaster/Utility.py +0 -0
  21. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/ExcelMaster/__init__.py +0 -0
  22. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/LICENSE +0 -0
  23. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/MANIFEST.in +0 -0
  24. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Binning_Tool.py +0 -0
  25. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Binning_Tool.pyi +0 -0
  26. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Check_DuckDB_Compatibility.py +0 -0
  27. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Json_Data_Converter.py +0 -0
  28. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Model_Registry_Tool.py +0 -0
  29. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/ODPS_Tool.py +0 -0
  30. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Parallel_ODPS_Manager.py +0 -0
  31. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Proc_Compare.py +0 -0
  32. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Slope_Tool.py +0 -0
  33. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/Slope_Tool.pyi +0 -0
  34. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/XOR_Encryptor.py +0 -0
  35. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/XOR_Encryptor.pyi +0 -0
  36. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/__init__.py +0 -0
  37. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/kDataFrame.py +0 -0
  38. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/kDataFrame.pyi +0 -0
  39. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/sample_weight_utils.py +0 -0
  40. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Core/utils.py +0 -0
  41. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Eval/Evaluation_Tool.py +0 -0
  42. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Eval/Evaluation_Tool.pyi +0 -0
  43. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Eval/Model_Eval_Tool.py +0 -0
  44. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Eval/Model_Eval_Tool.pyi +0 -0
  45. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Eval/__init__.py +0 -0
  46. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Eval/evaluate_model.py +0 -0
  47. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Eval/evaluate_model.pyi +0 -0
  48. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Eval/weighted_eval_utils.py +0 -0
  49. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Explainability/Coalition_Structure.py +0 -0
  50. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Explainability/Model_Explainer.py +0 -0
  51. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Explainability/__init__.py +0 -0
  52. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/Distribution_Tool.py +0 -0
  53. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/Distribution_Tool.pyi +0 -0
  54. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/Feature_Insights.py +0 -0
  55. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/Feature_Insights.pyi +0 -0
  56. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/ODPS_Distribution_Tool.py +0 -0
  57. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/ODPS_Distribution_Tool.pyi +0 -0
  58. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/PSI_Tool.py +0 -0
  59. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/PSI_Tool.pyi +0 -0
  60. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/Screen_Gates.py +0 -0
  61. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/WOE_Engine_Feature_Patch.py +0 -0
  62. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/Weighted_Screen.py +0 -0
  63. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Feature/__init__.py +0 -0
  64. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Model/Backward_Tool.py +0 -0
  65. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Model/Backward_Tool.pyi +0 -0
  66. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Model/GBM_Search_Tool.py +0 -0
  67. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Model/GBM_Tool.py +0 -0
  68. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Model/GBM_Tool.pyi +0 -0
  69. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Model/LRM_Tool.py +0 -0
  70. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Model/LRM_Tool.pyi +0 -0
  71. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Model/__init__.py +0 -0
  72. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/__init__.py +0 -0
  73. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/_common.py +0 -0
  74. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/field_meta.py +0 -0
  75. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/mock_sample.py +0 -0
  76. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/orchestrator.py +0 -0
  77. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/reject_inference.py +0 -0
  78. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/sample_analysis.py +0 -0
  79. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/score_comparison.py +0 -0
  80. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/score_consistency_uat.py +0 -0
  81. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Pipeline/screening_artifact.py +0 -0
  82. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Sample/Distribution_Adaptation.py +0 -0
  83. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Sample/Distribution_Adaptation.pyi +0 -0
  84. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Sample/Reject_Infer.py +0 -0
  85. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Sample/Reject_Infer.pyi +0 -0
  86. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Sample/Sample_Split.py +0 -0
  87. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Sample/Sample_Split.pyi +0 -0
  88. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/Sample/__init__.py +0 -0
  89. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/UAT/UAT_Consistency_Checker.py +0 -0
  90. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/UAT/__init__.py +0 -0
  91. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Adapter.py +0 -0
  92. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Adapter.pyi +0 -0
  93. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Plot_Tool.py +0 -0
  94. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Plot_Tool.pyi +0 -0
  95. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Report_Builder.py +0 -0
  96. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/WOE_Report_Builder.pyi +0 -0
  97. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/__init__.py +0 -0
  98. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/plot_woe_tool.py +0 -0
  99. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/WOE/plot_woe_tool.pyi +0 -0
  100. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/_utils/__init__.py +0 -0
  101. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/_utils/nan_guard.py +0 -0
  102. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/_utils/robust.py +0 -0
  103. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/_utils/sentinels.py +0 -0
  104. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/ref_font/KaiTi.ttf +0 -0
  105. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/ref_font/WeiRuanYaHei.ttf +0 -0
  106. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/ref_font/__init__.py +0 -0
  107. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Modeling_Tool/ref_font/simsun.ttc +0 -0
  108. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Report/Report_Tool.py +0 -0
  109. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/Report/__init__.py +0 -0
  110. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/SuperModelingFactory.egg-info/SOURCES.txt +0 -0
  111. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/SuperModelingFactory.egg-info/dependency_links.txt +0 -0
  112. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/SuperModelingFactory.egg-info/not-zip-safe +0 -0
  113. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/SuperModelingFactory.egg-info/requires.txt +0 -0
  114. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/SuperModelingFactory.egg-info/top_level.txt +0 -0
  115. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/requirements.txt +0 -0
  116. {supermodelingfactory-0.7.2 → supermodelingfactory-0.8.1}/setup.cfg +0 -0
@@ -189,9 +189,15 @@ class ParallelApplyEngine:
189
189
  func_args: tuple[Any, ...],
190
190
  func_kwargs: dict[str, Any],
191
191
  ) -> None:
192
+ # joblib < 1.6 vendors cloudpickle; joblib >= 1.6 dropped the copy and depends on
193
+ # the cloudpickle package. Resolve the serializer outside the check below so an
194
+ # import problem is never reported as a non-serializable callable.
192
195
  try:
193
196
  from joblib.externals import cloudpickle
197
+ except ImportError:
198
+ import cloudpickle
194
199
 
200
+ try:
195
201
  cloudpickle.dumps((func, func_args, func_kwargs))
196
202
  except Exception as exc:
197
203
  raise TypeError(
@@ -51,6 +51,10 @@ _MONOTONE_INIT_KEYS = frozenset({
51
51
  "direction_conflict_policy",
52
52
  "missing_bin_strategy",
53
53
  "refine_min_n_bins_policy",
54
+ "sv_min_bin_size",
55
+ "sv_small_policy",
56
+ "sv_woe_smoothing",
57
+ "sv_smoothing_alpha",
54
58
  })
55
59
  _MONOTONE_FIT_KEYS = frozenset({"chi2_binning", "chi2_p", "chi2_init_size", "n_jobs"})
56
60
 
@@ -62,11 +62,30 @@ class CreditModelPipelineConfig:
62
62
  woe_engine: str = "equal_freq"
63
63
  woe_fit_query: str | None = None
64
64
  extra_eval_datasets: dict[str, pd.DataFrame] | None = None
65
+ # sv_* govern special-value (SV) WOE bins only; the defaults below reproduce
66
+ # pre-0.8.0 behavior bit-for-bit. They reach WOE_Master via fit(**woe_params)
67
+ # and MonotoneWOEBinner via __init__(**monotone_woe_params).
65
68
  woe_params: dict[str, Any] = field(
66
- default_factory=lambda: {"nbins": 10, "equal_freq": True, "min_bin_prop": 0.05}
69
+ default_factory=lambda: {
70
+ "nbins": 10,
71
+ "equal_freq": True,
72
+ "min_bin_prop": 0.05,
73
+ "sv_min_bin_size": 0.0,
74
+ "sv_small_policy": "keep",
75
+ "sv_woe_smoothing": "none",
76
+ "sv_smoothing_alpha": 0.0,
77
+ }
67
78
  )
68
79
  monotone_woe_params: dict[str, Any] = field(
69
- default_factory=lambda: {"n_init_bins": 20, "min_bin_size": 0.03, "min_n_bins": 2}
80
+ default_factory=lambda: {
81
+ "n_init_bins": 20,
82
+ "min_bin_size": 0.03,
83
+ "min_n_bins": 2,
84
+ "sv_min_bin_size": 0.0,
85
+ "sv_small_policy": "keep",
86
+ "sv_woe_smoothing": "none",
87
+ "sv_smoothing_alpha": 0.0,
88
+ }
70
89
  )
71
90
 
72
91
  train_models: list[str] = field(default_factory=lambda: ["lr", "lgb", "xgb", "cat"])
@@ -66,11 +66,31 @@ class FeatureValidationPipelineConfig:
66
66
  woe_enabled: bool = True
67
67
  woe_fit_query: str | None = None
68
68
  woe_engine: str = "monotone"
69
+ # sv_* govern special-value (SV) WOE bins only; the defaults below reproduce
70
+ # pre-0.8.0 behavior bit-for-bit. Monotone-side sv_* keys only survive because
71
+ # they are listed in _MONOTONE_INIT_KEYS below — unlisted keys are dropped
72
+ # silently, so the two lists must be kept in sync.
69
73
  woe_params: dict[str, Any] = field(
70
- default_factory=lambda: {"nbins": 10, "equal_freq": True, "min_bin_prop": 0.05}
74
+ default_factory=lambda: {
75
+ "nbins": 10,
76
+ "equal_freq": True,
77
+ "min_bin_prop": 0.05,
78
+ "sv_min_bin_size": 0.0,
79
+ "sv_small_policy": "keep",
80
+ "sv_woe_smoothing": "none",
81
+ "sv_smoothing_alpha": 0.0,
82
+ }
71
83
  )
72
84
  monotone_woe_params: dict[str, Any] = field(
73
- default_factory=lambda: {"n_init_bins": 20, "min_bin_size": 0.03, "min_n_bins": 2}
85
+ default_factory=lambda: {
86
+ "n_init_bins": 20,
87
+ "min_bin_size": 0.03,
88
+ "min_n_bins": 2,
89
+ "sv_min_bin_size": 0.0,
90
+ "sv_small_policy": "keep",
91
+ "sv_woe_smoothing": "none",
92
+ "sv_smoothing_alpha": 0.0,
93
+ }
74
94
  )
75
95
  categorical_features: list[str] | None = None
76
96
  monotone_refine_cate_enabled: bool = False
@@ -170,6 +190,10 @@ class FeatureValidationPipeline:
170
190
  "direction_conflict_policy",
171
191
  "missing_bin_strategy",
172
192
  "refine_min_n_bins_policy",
193
+ "sv_min_bin_size",
194
+ "sv_small_policy",
195
+ "sv_woe_smoothing",
196
+ "sv_smoothing_alpha",
173
197
  }
174
198
  _MONOTONE_FIT_KEYS = {"chi2_binning", "chi2_p", "chi2_init_size", "n_jobs"}
175
199
 
@@ -289,7 +289,9 @@ class WOE_Master(object):
289
289
  self.varlist = varlist
290
290
 
291
291
  def fit(self, nbins=10, equal_freq=True, tree_binning_seed=None, chi2_config=None,
292
- precision=5, min_bin_prop=0.05, include_missing=True, fillna=None, spec_values=[]):
292
+ precision=5, min_bin_prop=0.05, include_missing=True, fillna=None, spec_values=[],
293
+ sv_min_bin_size=0.0, sv_small_policy="keep",
294
+ sv_woe_smoothing="none", sv_smoothing_alpha=0.0):
293
295
  """Fit WOE binning for variables in varlist.
294
296
 
295
297
  Args:
@@ -302,6 +304,11 @@ class WOE_Master(object):
302
304
  include_missing: bool, include missing value bin (default True)
303
305
  fillna: int/float, value to fill missing data
304
306
  spec_values: list, special values to handle
307
+ sv_min_bin_size: float, low-frequency special-value bin threshold as a
308
+ share of all samples; 0.0 disables the fallback (legacy behaviour)
309
+ sv_small_policy: str, 'keep' (default) / 'neutral' / 'merge_missing'
310
+ sv_woe_smoothing: str, 'none' (default) / 'laplace'
311
+ sv_smoothing_alpha: float, Laplace smoothing strength alpha (pseudo-counts)
305
312
  Returns:
306
313
  None, updates self.woe_dict attribute
307
314
  """
@@ -323,6 +330,10 @@ class WOE_Master(object):
323
330
  ascending=True,
324
331
  fillna=fillna,
325
332
  spec_values=spec_values,
333
+ sv_min_bin_size=sv_min_bin_size,
334
+ sv_small_policy=sv_small_policy,
335
+ sv_woe_smoothing=sv_woe_smoothing,
336
+ sv_smoothing_alpha=sv_smoothing_alpha,
326
337
  drop_bin_info=True,
327
338
  ret_woe_table=True)
328
339
  woe_table = woe_res[-1]
@@ -381,7 +392,9 @@ class WOE_Master(object):
381
392
  return data_woe
382
393
 
383
394
  def update_woe(self, varlist, nbins=10, equal_freq=True, tree_binning_seed=None, chi2_config=None,
384
- precision=5, min_bin_prop=0.05, include_missing=True, fillna=None, spec_values=[]):
395
+ precision=5, min_bin_prop=0.05, include_missing=True, fillna=None, spec_values=[],
396
+ sv_min_bin_size=0.0, sv_small_policy="keep",
397
+ sv_woe_smoothing="none", sv_smoothing_alpha=0.0):
385
398
  """Update WOE binning for specified variables.
386
399
 
387
400
  Args:
@@ -395,6 +408,11 @@ class WOE_Master(object):
395
408
  include_missing: bool, include missing value bin (default True)
396
409
  fillna: int/float, value to fill missing data
397
410
  spec_values: list, special values to handle
411
+ sv_min_bin_size: float, low-frequency special-value bin threshold as a
412
+ share of all samples; 0.0 disables the fallback (legacy behaviour)
413
+ sv_small_policy: str, 'keep' (default) / 'neutral' / 'merge_missing'
414
+ sv_woe_smoothing: str, 'none' (default) / 'laplace'
415
+ sv_smoothing_alpha: float, Laplace smoothing strength alpha (pseudo-counts)
398
416
  Returns:
399
417
  None, updates self.woe_dict attribute
400
418
  """
@@ -417,6 +435,10 @@ class WOE_Master(object):
417
435
  ascending=True,
418
436
  fillna=fillna,
419
437
  spec_values=spec_values,
438
+ sv_min_bin_size=sv_min_bin_size,
439
+ sv_small_policy=sv_small_policy,
440
+ sv_woe_smoothing=sv_woe_smoothing,
441
+ sv_smoothing_alpha=sv_smoothing_alpha,
420
442
  drop_bin_info=True,
421
443
  ret_woe_table=True)
422
444
  woe_table = woe_res[-1]
@@ -27,11 +27,11 @@ class WOE_Master(object):
27
27
  def __init__(self, train_data, varlist, dep = None, graph_save_dir = '', woe_suffix = '_woe', missing_ref_value = ..., remove_exist_dir = False): ...
28
28
  def remove_folder(file_path): ...
29
29
  def load_mapping_table(self, mapping_table_csv): ...
30
- def fit(self, nbins = 10, equal_freq = True, tree_binning_seed = None, chi2_config = None, precision = 5, min_bin_prop = 0.05, include_missing = True, fillna = None, spec_values = []): ...
30
+ def fit(self, nbins = 10, equal_freq = True, tree_binning_seed = None, chi2_config = None, precision = 5, min_bin_prop = 0.05, include_missing = True, fillna = None, spec_values = [], sv_min_bin_size = 0.0, sv_small_policy = 'keep', sv_woe_smoothing = 'none', sv_smoothing_alpha = 0.0): ...
31
31
  def get_mapping_table(self): ...
32
32
  def save_mapping_table(self, save_dir): ...
33
33
  def transform(self, data = None, varlist = None): ...
34
- def update_woe(self, varlist, nbins = 10, equal_freq = True, tree_binning_seed = None, chi2_config = None, precision = 5, min_bin_prop = 0.05, include_missing = True, fillna = None, spec_values = []): ...
34
+ def update_woe(self, varlist, nbins = 10, equal_freq = True, tree_binning_seed = None, chi2_config = None, precision = 5, min_bin_prop = 0.05, include_missing = True, fillna = None, spec_values = [], sv_min_bin_size = 0.0, sv_small_policy = 'keep', sv_woe_smoothing = 'none', sv_smoothing_alpha = 0.0): ...
35
35
  def plot_bivar_graph(self, data, group = None, dirname = None, varlist = None): ...
36
36
  def load_mapping_table(mapping_table_csv): ...
37
37
  def get_mapping_table(woe_dict): ...