ins-pricing 0.4.4__py3-none-any.whl → 0.5.0__py3-none-any.whl

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. ins_pricing/README.md +74 -56
  2. ins_pricing/__init__.py +142 -90
  3. ins_pricing/cli/BayesOpt_entry.py +52 -50
  4. ins_pricing/cli/BayesOpt_incremental.py +832 -898
  5. ins_pricing/cli/Explain_Run.py +31 -23
  6. ins_pricing/cli/Explain_entry.py +532 -579
  7. ins_pricing/cli/Pricing_Run.py +31 -23
  8. ins_pricing/cli/bayesopt_entry_runner.py +1440 -1438
  9. ins_pricing/cli/utils/cli_common.py +256 -256
  10. ins_pricing/cli/utils/cli_config.py +375 -375
  11. ins_pricing/cli/utils/import_resolver.py +382 -365
  12. ins_pricing/cli/utils/notebook_utils.py +340 -340
  13. ins_pricing/cli/watchdog_run.py +209 -201
  14. ins_pricing/frontend/README.md +573 -419
  15. ins_pricing/frontend/__init__.py +10 -10
  16. ins_pricing/frontend/config_builder.py +1 -0
  17. ins_pricing/frontend/example_workflows.py +1 -1
  18. ins_pricing/governance/__init__.py +20 -20
  19. ins_pricing/governance/release.py +159 -159
  20. ins_pricing/modelling/README.md +67 -0
  21. ins_pricing/modelling/__init__.py +147 -92
  22. ins_pricing/modelling/bayesopt/README.md +59 -0
  23. ins_pricing/modelling/{core/bayesopt → bayesopt}/__init__.py +64 -102
  24. ins_pricing/modelling/{core/bayesopt → bayesopt}/config_preprocess.py +562 -550
  25. ins_pricing/modelling/{core/bayesopt → bayesopt}/core.py +965 -962
  26. ins_pricing/modelling/{core/bayesopt → bayesopt}/model_explain_mixin.py +296 -296
  27. ins_pricing/modelling/{core/bayesopt → bayesopt}/model_plotting_mixin.py +482 -548
  28. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/__init__.py +27 -27
  29. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_ft_trainer.py +915 -913
  30. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_gnn.py +788 -785
  31. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_resn.py +448 -446
  32. ins_pricing/modelling/bayesopt/trainers/__init__.py +19 -0
  33. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_base.py +1308 -1308
  34. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_ft.py +3 -3
  35. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_glm.py +197 -198
  36. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_gnn.py +344 -344
  37. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_resn.py +283 -283
  38. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_xgb.py +346 -347
  39. ins_pricing/modelling/bayesopt/utils/__init__.py +67 -0
  40. ins_pricing/modelling/bayesopt/utils/constants.py +21 -0
  41. ins_pricing/modelling/bayesopt/utils/io_utils.py +7 -0
  42. ins_pricing/modelling/bayesopt/utils/losses.py +27 -0
  43. ins_pricing/modelling/bayesopt/utils/metrics_and_devices.py +17 -0
  44. ins_pricing/modelling/{core/bayesopt → bayesopt}/utils/torch_trainer_mixin.py +623 -623
  45. ins_pricing/modelling/{core/evaluation.py → evaluation.py} +113 -104
  46. ins_pricing/modelling/explain/__init__.py +55 -55
  47. ins_pricing/modelling/explain/metrics.py +27 -174
  48. ins_pricing/modelling/explain/permutation.py +237 -237
  49. ins_pricing/modelling/plotting/__init__.py +40 -36
  50. ins_pricing/modelling/plotting/compat.py +228 -0
  51. ins_pricing/modelling/plotting/curves.py +572 -572
  52. ins_pricing/modelling/plotting/diagnostics.py +163 -163
  53. ins_pricing/modelling/plotting/geo.py +362 -362
  54. ins_pricing/modelling/plotting/importance.py +121 -121
  55. ins_pricing/pricing/__init__.py +27 -27
  56. ins_pricing/production/__init__.py +35 -25
  57. ins_pricing/production/{predict.py → inference.py} +140 -57
  58. ins_pricing/production/monitoring.py +8 -21
  59. ins_pricing/reporting/__init__.py +11 -11
  60. ins_pricing/setup.py +1 -1
  61. ins_pricing/tests/production/test_inference.py +90 -0
  62. ins_pricing/utils/__init__.py +116 -83
  63. ins_pricing/utils/device.py +255 -255
  64. ins_pricing/utils/features.py +53 -0
  65. ins_pricing/utils/io.py +72 -0
  66. ins_pricing/{modelling/core/bayesopt/utils → utils}/losses.py +125 -129
  67. ins_pricing/utils/metrics.py +158 -24
  68. ins_pricing/utils/numerics.py +76 -0
  69. ins_pricing/utils/paths.py +9 -1
  70. {ins_pricing-0.4.4.dist-info → ins_pricing-0.5.0.dist-info}/METADATA +55 -35
  71. ins_pricing-0.5.0.dist-info/RECORD +131 -0
  72. ins_pricing/CHANGELOG.md +0 -272
  73. ins_pricing/RELEASE_NOTES_0.2.8.md +0 -344
  74. ins_pricing/docs/LOSS_FUNCTIONS.md +0 -78
  75. ins_pricing/docs/modelling/BayesOpt_USAGE.md +0 -945
  76. ins_pricing/docs/modelling/README.md +0 -34
  77. ins_pricing/frontend/QUICKSTART.md +0 -152
  78. ins_pricing/modelling/core/BayesOpt.py +0 -146
  79. ins_pricing/modelling/core/__init__.py +0 -1
  80. ins_pricing/modelling/core/bayesopt/PHASE2_REFACTORING_SUMMARY.md +0 -449
  81. ins_pricing/modelling/core/bayesopt/PHASE3_REFACTORING_SUMMARY.md +0 -406
  82. ins_pricing/modelling/core/bayesopt/REFACTORING_SUMMARY.md +0 -247
  83. ins_pricing/modelling/core/bayesopt/trainers/__init__.py +0 -19
  84. ins_pricing/modelling/core/bayesopt/utils/__init__.py +0 -86
  85. ins_pricing/modelling/core/bayesopt/utils/constants.py +0 -183
  86. ins_pricing/modelling/core/bayesopt/utils/io_utils.py +0 -126
  87. ins_pricing/modelling/core/bayesopt/utils/metrics_and_devices.py +0 -555
  88. ins_pricing/modelling/core/bayesopt/utils.py +0 -105
  89. ins_pricing/modelling/core/bayesopt/utils_backup.py +0 -1503
  90. ins_pricing/tests/production/test_predict.py +0 -233
  91. ins_pricing-0.4.4.dist-info/RECORD +0 -137
  92. /ins_pricing/modelling/{core/bayesopt → bayesopt}/config_components.py +0 -0
  93. /ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_ft_components.py +0 -0
  94. /ins_pricing/modelling/{core/bayesopt → bayesopt}/utils/distributed_utils.py +0 -0
  95. {ins_pricing-0.4.4.dist-info → ins_pricing-0.5.0.dist-info}/WHEEL +0 -0
  96. {ins_pricing-0.4.4.dist-info → ins_pricing-0.5.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ins_pricing
3
- Version: 0.4.4
3
+ Version: 0.5.0
4
4
  Summary: Reusable modelling, pricing, governance, and reporting utilities.
5
5
  Author: meishi125478
6
6
  License: Proprietary
@@ -56,18 +56,19 @@ A reusable toolkit for insurance modeling, pricing, governance, and reporting.
56
56
 
57
57
  ## Overview
58
58
 
59
- Insurance-Pricing (ins_pricing) is an enterprise-grade Python library designed for machine learning model training, pricing calculations, and model governance workflows in the insurance industry.
59
+ Insurance-Pricing (ins_pricing) is an enterprise-grade Python library designed for machine learning
60
+ model training, pricing calculations, and model governance workflows in the insurance industry.
60
61
 
61
62
  ### Core Modules
62
63
 
63
64
  | Module | Description |
64
65
  |--------|-------------|
65
- | **modelling** | ML model training (GLM, XGBoost, ResNet, FT-Transformer, GNN) and model interpretability (SHAP, permutation importance) |
66
- | **pricing** | Factor table construction, numeric binning, premium calibration, exposure calculation, PSI monitoring |
67
- | **production** | Model prediction, batch scoring, data drift detection, production metrics monitoring |
68
- | **governance** | Model registry, version management, approval workflows, audit logging |
69
- | **reporting** | Report generation (Markdown format), report scheduling |
70
- | **utils** | Data validation, performance profiling, device management, logging configuration |
66
+ | modelling | ML model training (GLM, XGBoost, ResNet, FT-Transformer, GNN) and model interpretability |
67
+ | pricing | Factor table construction, numeric binning, premium calibration, exposure calculation, PSI monitoring |
68
+ | production | Model prediction, batch scoring, data drift detection, production metrics monitoring |
69
+ | governance | Model registry, version management, approval workflows, audit logging |
70
+ | reporting | Report generation (Markdown format), report scheduling |
71
+ | utils | Data validation, performance profiling, device management, logging configuration |
71
72
 
72
73
  ### Quick Start
73
74
 
@@ -110,17 +111,17 @@ registry.register(model_name, version, metrics=metrics)
110
111
 
111
112
  ```
112
113
  ins_pricing/
113
- ├── cli/ # Command-line entry points
114
- ├── modelling/
115
- │ ├── core/bayesopt/ # ML model training core
116
- │ ├── explain/ # Model interpretability
117
- │ └── plotting/ # Model visualization
118
- ├── pricing/ # Insurance pricing module
119
- ├── production/ # Production deployment module
120
- ├── governance/ # Model governance
121
- ├── reporting/ # Report generation
122
- ├── utils/ # Utilities
123
- └── tests/ # Test suite
114
+ cli/ # Command-line entry points
115
+ modelling/
116
+ core/bayesopt/ # ML model training core
117
+ explain/ # Model interpretability
118
+ plotting/ # Model visualization
119
+ pricing/ # Insurance pricing module
120
+ production/ # Production deployment module
121
+ governance/ # Model governance
122
+ reporting/ # Report generation
123
+ utils/ # Utilities
124
+ tests/ # Test suite
124
125
  ```
125
126
 
126
127
  ### Installation
@@ -139,24 +140,43 @@ pip install ins_pricing[plotting] # Visualization
139
140
  pip install ins_pricing[gnn] # Graph neural networks
140
141
  ```
141
142
 
142
- #### Multi-platform & GPU installation notes
143
+ #### Multi-platform and GPU notes
143
144
 
144
- - **PyTorch (CPU/GPU/MPS)**: Install the correct PyTorch build for your platform/GPU first (CUDA on
145
- Linux/Windows, ROCm on supported AMD platforms, or MPS on Apple Silicon). Then install the
146
- optional extras you need (e.g., `bayesopt`, `explain`, or `gnn`). This avoids pip pulling a
147
- mismatched wheel.
148
- - **Torch Geometric (GNN)**: `torch-geometric` often requires platform-specific wheels (e.g.,
149
- `torch-scatter`, `torch-sparse`). Follow the official PyG installation instructions for your
150
- CUDA/ROCm/CPU environment, then install `ins_pricing[gnn]`.
151
- - **Multi-GPU**: Training code will use CUDA when available and can enable multi-GPU via
152
- `torch.distributed`/`DataParallel` where supported. On Windows, CUDA DDP is not supported and will
153
- fall back to single-GPU or DataParallel where possible.
145
+ - Install the correct PyTorch build for your platform/GPU before installing extras.
146
+ - Torch Geometric requires platform-specific wheels; follow the official PyG install guide.
147
+ - Multi-GPU uses torch.distributed/DataParallel where supported; Windows disables CUDA DDP.
154
148
 
155
- ### Requirements
149
+ ---
150
+ ## PyPI Upload (scripts)
156
151
 
157
- - Python >= 3.9
158
- - Core dependencies: numpy >= 1.20, pandas >= 1.4
152
+ This repo includes upload scripts for Windows and Linux/macOS.
159
153
 
160
- ### License
154
+ ### Windows
161
155
 
162
- Proprietary
156
+ ```cmd
157
+ set TWINE_PASSWORD=your_pypi_token_here
158
+ python -m build
159
+ upload_to_pypi.bat
160
+ ```
161
+
162
+ ### Linux / macOS
163
+
164
+ ```bash
165
+ chmod +x upload_to_pypi.sh
166
+ export TWINE_PASSWORD='your_pypi_token_here'
167
+ python -m build
168
+ ./upload_to_pypi.sh
169
+ ```
170
+
171
+ ### Makefile (if make is available)
172
+
173
+ ```bash
174
+ make build
175
+ make upload
176
+ ```
177
+
178
+ ### Tips
179
+
180
+ - Never commit tokens to version control.
181
+ - Use environment variables or secret managers to store credentials.
182
+ - Test with TestPyPI before publishing when needed.
@@ -0,0 +1,131 @@
1
+ ins_pricing/README.md,sha256=pufz_ChEpXXfLk96prv8ciqwgyVvHE5aEZ8iAH-u6k0,3679
2
+ ins_pricing/__init__.py,sha256=pATYokjg75DXHd2zyoct62efui98SCBO2H8B06Q68r0,4317
3
+ ins_pricing/exceptions.py,sha256=5fZavPV4zNJ7wPC75L215KkHXX9pRrfDAYZOdSKJMGo,4778
4
+ ins_pricing/setup.py,sha256=feMDVmV2OzKeTV_VXlydPRlS5fqUYifXfp2E_o42O6E,1702
5
+ ins_pricing/cli/BayesOpt_entry.py,sha256=FxGzUydBHeNdcNDVxh8D2J8bTGsJBDLTnV56a4AKQa0,1746
6
+ ins_pricing/cli/BayesOpt_incremental.py,sha256=N2s7OpwLBXewRgL0wkDeFociZj5BxSHqPs3pLsc8cw8,34650
7
+ ins_pricing/cli/Explain_Run.py,sha256=AG8KS1gl_EN4BqYFDBc9GCIGXHoZFZ1-auOkZgGO_s8,968
8
+ ins_pricing/cli/Explain_entry.py,sha256=n1oI9GhKpjplWAwXGc6koUAxQHjKByf0mqWxJwP58to,22762
9
+ ins_pricing/cli/Pricing_Run.py,sha256=Wj2InvD_Vxini-RBu0k7Xkei_cnRnnPiiD65OCYwbKQ,1015
10
+ ins_pricing/cli/__init__.py,sha256=F296f1J_tBPv33lDJQ6LaN_CPwMJTMtOuTsMof0dr2o,50
11
+ ins_pricing/cli/bayesopt_entry_runner.py,sha256=Mk9SaAc7fvsK7qQjKtu16ekZt4Rv0uGJjkHOlCy06QU,55374
12
+ ins_pricing/cli/watchdog_run.py,sha256=J1lWn8fSpWIx0OOX3d01K-ALGYqItuGhTQQ4JoZx6SM,6683
13
+ ins_pricing/cli/utils/__init__.py,sha256=u3kt1B27OiuOEgw6PQN-fNs9vNiAjdPyybsRQsZkM_I,54
14
+ ins_pricing/cli/utils/cli_common.py,sha256=Tjr20GWK3XT-KidrFCHwodrRukpaInNzsMzEgM9MgYQ,8530
15
+ ins_pricing/cli/utils/cli_config.py,sha256=ZGfvLSUNJAZjW-QTLVP64Z6MvXDB3444r5Q0khdx5sk,13643
16
+ ins_pricing/cli/utils/evaluation_context.py,sha256=0zuDOcVzkWiuj4HyAT0psaAfEbSqpDXEGXSjxztHY6E,9485
17
+ ins_pricing/cli/utils/import_resolver.py,sha256=_KyQ9mNv-1juyK5rOKQXJpRDpJFZwDgKjdzRU7SJWks,13760
18
+ ins_pricing/cli/utils/notebook_utils.py,sha256=de-5QKU9mcxi1Rxcva8Z6VWBhjJZ8rOcek1KNypoOwM,12398
19
+ ins_pricing/cli/utils/run_logging.py,sha256=V3Wh2EV6c1Mo0QTvfe4hl2J4LOR6bdQsT210o__YBWk,3677
20
+ ins_pricing/frontend/README.md,sha256=MKQuVtwpvrOKBJhcz9wgVtMc-jKERYATRNDIj-hA78Y,17551
21
+ ins_pricing/frontend/__init__.py,sha256=mbvo89webbtirzVCNmp26FrtYmLFtuwxkmZ5tcdab2U,405
22
+ ins_pricing/frontend/app.py,sha256=DBrnewX5RUjuJXGEezihZJcDnp-tEeA-fCuTeqAFEqU,38484
23
+ ins_pricing/frontend/config_builder.py,sha256=GNeEe7-Xt-WLakKlbdbQOE82ogWWwEFaKQ5LxxZeLFc,12261
24
+ ins_pricing/frontend/example_config.json,sha256=aDXH9_5bVlIclwMWH5WfgK572LVuraNbj4565o3d71k,741
25
+ ins_pricing/frontend/example_workflows.py,sha256=-yyoEucItAdVMVnmt6X7oDldaAqe5bWdrstMoNpZOxo,36815
26
+ ins_pricing/frontend/ft_workflow.py,sha256=CWrviErHEjZ2NPibIbPh69AYKPVkn-mXY7uncPihn-0,11206
27
+ ins_pricing/frontend/runner.py,sha256=0OB7C04PHpU04VrzZlEE-zOWrbdk5aztRck2BXKzbTc,13471
28
+ ins_pricing/governance/README.md,sha256=XnXLS5RPzWhEiicJ3WtGmpN935jppHhPftA9Lo2DPnQ,511
29
+ ins_pricing/governance/__init__.py,sha256=kCVZ_eNJnVNCFtefJBFz78KZxaR41IU1L2JoefiojiU,625
30
+ ins_pricing/governance/approval.py,sha256=cjJQjU1ziR-d-9wVSXyMyX6S5zijJqDWERZNxjqGAUE,2879
31
+ ins_pricing/governance/audit.py,sha256=f0aw-LaOxH5NGzxwczeLrGMJcxO-JDRn99BpI55KRn4,1040
32
+ ins_pricing/governance/registry.py,sha256=2uxQL6qMGY5IYWJti9MpaV_auvL--piJaasFrX20ghk,3139
33
+ ins_pricing/governance/release.py,sha256=9s-6V41RFaJ-z0V0RFw3_xgrk77BYfun0WN_w3uspqc,4946
34
+ ins_pricing/modelling/README.md,sha256=4q3CykeFcXo5FILGD2EtoX2yYVV0EbrYW-hwgcySBN0,2157
35
+ ins_pricing/modelling/__init__.py,sha256=1Z_fDHMpuGYOGh4s662mHh4EGMQkYG5hH8Fcg5Aln3I,4366
36
+ ins_pricing/modelling/evaluation.py,sha256=tgmQ-7RHhOkzPCLHtfm4HHNLJVwxYaFExnCVjoBqoeM,4154
37
+ ins_pricing/modelling/bayesopt/README.md,sha256=4wCQBJio0BwTG6ucu35iZ8h90EI6tB-CVjtW-KLTknw,1613
38
+ ins_pricing/modelling/bayesopt/__init__.py,sha256=wkTYjfU9Oi6sNCrn4pmF1QevEc2f_EF6k_PIiCYt-aY,1555
39
+ ins_pricing/modelling/bayesopt/config_components.py,sha256=OjRyM1EuSXL9_3THD1nGLRsioJs7lO_ZKVZDkUA3LX8,12156
40
+ ins_pricing/modelling/bayesopt/config_preprocess.py,sha256=g-D_jyhccEI2m5cqnerb0wjgTa9Ap4BkUoM8799AIS0,22752
41
+ ins_pricing/modelling/bayesopt/core.py,sha256=PVoKpSAPal5NbH4gKIjJGZHDIbDe7SLXUJ6NePUNI_E,45818
42
+ ins_pricing/modelling/bayesopt/model_explain_mixin.py,sha256=8LX72wJrzkyINI0AOE5labGhsH2VT1muIRDTiHQ2JQ4,11973
43
+ ins_pricing/modelling/bayesopt/model_plotting_mixin.py,sha256=PhpuRJM1tpeWvTIEvofMzB3EeIrDNOg2tpfR7XZT0wI,19243
44
+ ins_pricing/modelling/bayesopt/models/__init__.py,sha256=gFMAdElw08bnSM2qldv3IT8O6NSlWEUevHUfFrVtYGM,875
45
+ ins_pricing/modelling/bayesopt/models/model_ft_components.py,sha256=oDhmJQ26zF0PhoDC5Z2McA-JpLbXFQjSREqy0w_hWlQ,11883
46
+ ins_pricing/modelling/bayesopt/models/model_ft_trainer.py,sha256=0nE975FlPvE4jdML2-XoEPNVZdky_1t-ZdJBJwPAagA,40860
47
+ ins_pricing/modelling/bayesopt/models/model_gnn.py,sha256=_pc84cJElL_YxY6gF_AgnQWRH9hQx7pJii6RSATXIv0,33875
48
+ ins_pricing/modelling/bayesopt/models/model_resn.py,sha256=b6zHwccYYcyQ71JxByeDvmWg3tpraBSzD9A5vbqGhtc,18183
49
+ ins_pricing/modelling/bayesopt/trainers/__init__.py,sha256=O7u5452eQV9da6jBJRhjn_KkFLe4APGTq1x018wMqdM,734
50
+ ins_pricing/modelling/bayesopt/trainers/trainer_base.py,sha256=fPtwCWL1EQE8kcqy7t2KBziTotmVWEXAqEQnd-kzppg,57129
51
+ ins_pricing/modelling/bayesopt/trainers/trainer_ft.py,sha256=LNngZ7Jyw_tLkr79l7vVBZi8KpVH9mQY1790kNORV0U,37171
52
+ ins_pricing/modelling/bayesopt/trainers/trainer_glm.py,sha256=_gmgi5pcvMV4smUHp_Aj5vJsRVU0UnKRUAHdF_hHlEk,8167
53
+ ins_pricing/modelling/bayesopt/trainers/trainer_gnn.py,sha256=O9SzmjZUwidS_DqGdtOv1YlFHrj2aK1nDglJmB9Q1ns,14691
54
+ ins_pricing/modelling/bayesopt/trainers/trainer_resn.py,sha256=UArfQGUQeFr-8UWOjLOq3BY1e-pcGWDhBwYLzTtdk78,12216
55
+ ins_pricing/modelling/bayesopt/trainers/trainer_xgb.py,sha256=NDaEW2KV23JaSCdmsfsYiNAw6f-WqETkT0m-mCpA4ao,14156
56
+ ins_pricing/modelling/bayesopt/utils/__init__.py,sha256=SnFPs_g4eut2h2RrBjOO40Vh-tBBTCWOIHPdm7vMfqk,1553
57
+ ins_pricing/modelling/bayesopt/utils/constants.py,sha256=SNC5NJ1FfRQ-iuNmM8xHlaoaFgNpy1vnS_QOqNbJYRE,485
58
+ ins_pricing/modelling/bayesopt/utils/distributed_utils.py,sha256=cu01dHyYE5EREbmtJgCHSH6z5mQIqajz8_-oWZV6zVc,5787
59
+ ins_pricing/modelling/bayesopt/utils/io_utils.py,sha256=2Bg0fz1dngmBU8G8GZp3-CGLIGyhAxeMxwzIXYRINMc,224
60
+ ins_pricing/modelling/bayesopt/utils/losses.py,sha256=m4moKKwfKFl6yDIa9SGQV1u1sgX5MpKoSDF2KI85wyc,634
61
+ ins_pricing/modelling/bayesopt/utils/metrics_and_devices.py,sha256=-TKUHBEumWC4UssZIuthr5yzRBiKFivYXvI9-rCIvxg,317
62
+ ins_pricing/modelling/bayesopt/utils/torch_trainer_mixin.py,sha256=zGvwsulnjX4lXGyG2XJDcxvZ5QNmJaJuGNbpM75ZoUo,26522
63
+ ins_pricing/modelling/explain/__init__.py,sha256=WU4Fy0mEvqnmpX-aalKktj1goo9tnKCht9WOrWmZAtI,1342
64
+ ins_pricing/modelling/explain/gradients.py,sha256=9TqCws_p49nFxVMcjVxe4KCZ7frezeL0uV_LCdoM5yo,11088
65
+ ins_pricing/modelling/explain/metrics.py,sha256=9Dh-RcmV1uUlo8eacswsGeNTxTBRwSnjFHncFUFZZ8g,473
66
+ ins_pricing/modelling/explain/permutation.py,sha256=-_6KRkMA1EKHXrfCVs6ohjS9pI65af5zfWKSLLYHZkc,9599
67
+ ins_pricing/modelling/explain/shap_utils.py,sha256=70zRIHPPdoECFOFQeBTRxLZF-6sjaGJBNMIRS4_kmVI,10462
68
+ ins_pricing/modelling/plotting/__init__.py,sha256=AfqRYacai9UzMPBy4xQk3PdVTbCwT31saInSOJKIbeM,1398
69
+ ins_pricing/modelling/plotting/common.py,sha256=_kFq7JMA0LnKIp4bqAFvr-24VaHjj9pegDMm1qP9_7Y,1439
70
+ ins_pricing/modelling/plotting/compat.py,sha256=rmOct4rrjIX7EFodMfWnDtd8D4qE1inNTMvE9FUWa9k,8039
71
+ ins_pricing/modelling/plotting/curves.py,sha256=AyNeESaXOIN6efd3K0vAQ7hmDU4ifJNq6lx_9e3Xi7c,19000
72
+ ins_pricing/modelling/plotting/diagnostics.py,sha256=iHvZY1zCnFRbSczVluMYYRkkQXc-mwo0Z1DXyL3XMkI,5357
73
+ ins_pricing/modelling/plotting/geo.py,sha256=jQogaHt57W1-f8vzeGUdWE1oON2k4WVZKf2qoOM2Ct8,11401
74
+ ins_pricing/modelling/plotting/importance.py,sha256=j5FkPJH9FA6mJHMUfNkqU4Yi7IcqdGdIpcG-d76ORiw,3817
75
+ ins_pricing/pricing/README.md,sha256=PEcyw5oDkqJHOqnNdzBdbbpZwG4SOlnhMwY-owwQ0GI,1064
76
+ ins_pricing/pricing/__init__.py,sha256=hPgQP4IyhLfP1hEC5XckNzYmByhYEdlqw1D83X0hC8s,1022
77
+ ins_pricing/pricing/calibration.py,sha256=cx9fbDoOnNEMGPH6Js1EDMfVwy9J7zf_90yuNwD7W6I,6196
78
+ ins_pricing/pricing/data_quality.py,sha256=8FecBE60cABsTZE7HETuoKCEOXIrirGAFgg5wQCZrmU,4043
79
+ ins_pricing/pricing/exposure.py,sha256=rw8kKZ_1QdeGTCm13ck9NXrRBPt6TunxRw2s_qkHYkg,2575
80
+ ins_pricing/pricing/factors.py,sha256=1cqDqdXRLb9-yt-x60f0lPWdgAAOvk7slnawVIKcWDo,6573
81
+ ins_pricing/pricing/monitoring.py,sha256=GnfF2g1C9KzDks9ELBykfAd0zzVBUvjuTWoffa7aGbI,613
82
+ ins_pricing/pricing/rate_table.py,sha256=llDW95i7gR6cCtGFwcGqgpgFvOOPCURaJWmuQw1oce8,2473
83
+ ins_pricing/production/__init__.py,sha256=4PkwZFR3qmTXyY7g3xELqobC1KcFcozJaJ95hPPB9to,1231
84
+ ins_pricing/production/drift.py,sha256=q_oE_h2NbVETTBkh9QUu8Y68ERuFFcrfKpOb3zBcvsA,383
85
+ ins_pricing/production/inference.py,sha256=RaTQAI92XGuvb0cU224EEfQTzGs8ODshwCSFfkAyKog,27286
86
+ ins_pricing/production/monitoring.py,sha256=0quH2bvsDIHefVxwEE4lRIHC61t51fVEo1x6bdfhQdw,4144
87
+ ins_pricing/production/preprocess.py,sha256=cl20X0rVcKNCjVJswB8SdHffMgox6Qga4Ac29L6pW5g,9404
88
+ ins_pricing/production/scoring.py,sha256=yFmMmbYb7w_RC4uZOCMnAjLMRcjXQWIuT1nsfu-bwuc,1379
89
+ ins_pricing/reporting/README.md,sha256=kTVdB6pNewwh1HlCHrI2SzWTgprtQoQprLRQ2qLdgNA,486
90
+ ins_pricing/reporting/__init__.py,sha256=9MIGXjLrmW4lRunRz3dGhdeEGBkYJbrOO07C1ZPl6Ck,295
91
+ ins_pricing/reporting/report_builder.py,sha256=53ZFqGUx2isAoigT5IDwvXkek67zN7-6IgKeGpJhO7c,2241
92
+ ins_pricing/reporting/scheduler.py,sha256=9koG_1cmWvLqrS66uzMJuAlYI2VTkynV19ssB2TtcKU,1336
93
+ ins_pricing/tests/governance/__init__.py,sha256=5Nxg4_dIxY_J58_x2QOXrrRgw6L51Md0Wnt5Up-chqg,39
94
+ ins_pricing/tests/governance/test_audit.py,sha256=ubybXSTVILPN4VxQ2fMnG6oPNv4LjJJE3EsQ53NYdLU,1702
95
+ ins_pricing/tests/governance/test_registry.py,sha256=TvkNMLHViNuopjjho6oETwZ9d6MNaNM1xbL6URPDKSk,4602
96
+ ins_pricing/tests/governance/test_release.py,sha256=Cdo6prZ0xlioAP2AYHodzgASEIa6ZCLjbXW9Me2RGKk,2347
97
+ ins_pricing/tests/modelling/conftest.py,sha256=0KUXnkTgIGEIsf0J4uzIx5Kq4JkDyFo81Mv0qvIzW9k,180
98
+ ins_pricing/tests/modelling/test_cross_val_generic.py,sha256=iLZOFmdyrycB15lFWoQphkFlEjzZTozQXTLVOHLw2Qg,1721
99
+ ins_pricing/tests/modelling/test_distributed_utils.py,sha256=9cStpDw7jPdQwmm0Po-G2tB04uzSR1CoOUZMLuB61yI,466
100
+ ins_pricing/tests/modelling/test_explain.py,sha256=NZqKYuL-eSf9eC5ttjcMirfOc48ORMXZQm5PjmYk4jY,1445
101
+ ins_pricing/tests/modelling/test_geo_tokens_split.py,sha256=Ti57IynKB0aWOosr0g2RcZlDZyZC012XZ-hm6tWXBJg,1554
102
+ ins_pricing/tests/modelling/test_graph_cache.py,sha256=QEI5cLLtQ9_zwRR50KqUf8qxo9Jcp1WLxIGs4dSoMNk,821
103
+ ins_pricing/tests/modelling/test_plotting.py,sha256=4gJax72l40fQrjyJQLOgUmaT6xn6zXpujEaFNeHVwGw,1911
104
+ ins_pricing/tests/modelling/test_plotting_library.py,sha256=SB5RjKTaPydK848V0xpqEaJtEWhRv6ZfnHmnnzjaPh4,4079
105
+ ins_pricing/tests/modelling/test_preprocessor.py,sha256=FqbKltV803Pd-ZY1xBc4XF1T-INDuUliaVcMIDPmBxI,1438
106
+ ins_pricing/tests/pricing/__init__.py,sha256=SVfgUYBlCmc4wjYLMRX5xPFgQZxTS3aHBOA_Cx1aJg4,36
107
+ ins_pricing/tests/pricing/test_calibration.py,sha256=hLZuSWOH4t9WKcQ-2srvYp4P5ldr1Yh1dhl7s61vMp8,2420
108
+ ins_pricing/tests/pricing/test_exposure.py,sha256=CrpSncVce-PGt2XzjOX6qV0SA22vKPUv1u8RlKQjt_g,2054
109
+ ins_pricing/tests/pricing/test_factors.py,sha256=NTE7lz1RWChhoRt2K5003DoNRqG_Gu4X1Aauy2NexOg,5093
110
+ ins_pricing/tests/pricing/test_rate_table.py,sha256=ICHfAQsC9TaxXbQVKM5AvBaJXRTVY723Vaz1XOWNMW8,1250
111
+ ins_pricing/tests/production/__init__.py,sha256=WFWlvBVdjg-E-nKaiJ8VTKNELYufJusufpij1p1xwso,39
112
+ ins_pricing/tests/production/test_inference.py,sha256=l1wxpuukgdr4DLO_pSwyqxByIoVHQHmPR6LYIMQmeE0,2417
113
+ ins_pricing/tests/production/test_monitoring.py,sha256=jettbaVLH4a3efLWeiQ6FFukGEw7mmz6_AeYhYX0caQ,11409
114
+ ins_pricing/tests/production/test_preprocess.py,sha256=tsHYANwJjNlaSo8O4qiwqBvMOMtwmtZymRFm6UrODrE,11084
115
+ ins_pricing/tests/production/test_scoring.py,sha256=fKz2tJomodrRt333apCrjtyJCwg9RHRbWm0lvcU6xm0,9848
116
+ ins_pricing/utils/__init__.py,sha256=-TTuQohYWxqkrAUdRkPh5VFkGqQVQRUxv-Av4MBOvkc,3619
117
+ ins_pricing/utils/device.py,sha256=hPwaI1J4qMqADrENiPQBwx2SHq4tDQKm4eRLEb0qxSI,7804
118
+ ins_pricing/utils/features.py,sha256=_uPkX6wpzdC3XTeAYSI1qLYDVTN1Lcfh4OJ8OtBw5-8,1704
119
+ ins_pricing/utils/io.py,sha256=uu7PqXVbcvfSnN3ry6PsCKCaYy6kxL3GLXuJRciVDWA,2678
120
+ ins_pricing/utils/logging.py,sha256=_AKB4ErmvygwGLtu7Ai7ESemj6Hh8FTgh4cs8j_gVW4,2258
121
+ ins_pricing/utils/losses.py,sha256=u7JFgjnu9kuGD4tB8Lgvfihit5lOL0mbExN2h_JV5mg,4008
122
+ ins_pricing/utils/metrics.py,sha256=hh4PeDBYh3cXiOuTq6e6B084Lz1WbrzDvdJ85JRkx6A,13675
123
+ ins_pricing/utils/numerics.py,sha256=gLz3MVaTzz3xyH_qKaONRslBzUdJ7RCY7JoRGWbwa-U,2207
124
+ ins_pricing/utils/paths.py,sha256=ds_nt2JmP4Gq8nERJUdUFjh3rxGL2duOXNMifgutI6g,9153
125
+ ins_pricing/utils/profiling.py,sha256=kmbykHLcYywlZxAf_aVU8HXID3zOvUcBoO5Q58AijhA,11132
126
+ ins_pricing/utils/torch_compat.py,sha256=UrRsqx2qboDG8WE0OmxNOi08ojwE-dCxTQh0N2s3Rgw,2441
127
+ ins_pricing/utils/validation.py,sha256=4Tw9VUJPk0N-WO3YUqZP-xXRl1Xpubkm0vi3WzzZrv4,13348
128
+ ins_pricing-0.5.0.dist-info/METADATA,sha256=TP4HMzFA-XMgMx7mpEo_QkGJ5vBfGdsLu_Qoy-FoJ1s,6073
129
+ ins_pricing-0.5.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
130
+ ins_pricing-0.5.0.dist-info/top_level.txt,sha256=haZuNQpHKNBEPZx3NjLnHp8pV3I_J9QG8-HyJn00FA0,12
131
+ ins_pricing-0.5.0.dist-info/RECORD,,
ins_pricing/CHANGELOG.md DELETED
@@ -1,272 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to the ins_pricing project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [0.2.11] - 2026-01-15
9
-
10
- ### Changed
11
-
12
- #### Refactoring Phase 3: Utils Module Consolidation
13
- - **Eliminated code duplication** - Consolidated duplicated utility classes:
14
- - `DeviceManager` and `GPUMemoryManager` now imported from `ins_pricing.utils`
15
- - Removed 181 lines of duplicate code from `bayesopt/utils/metrics_and_devices.py`
16
- - File size reduced from 721 to 540 lines (25% reduction)
17
- - **Benefit**: Single source of truth for device management utilities
18
- - **Impact**: Bug fixes now propagate automatically, no risk of code drift
19
- - **Compatibility**: 100% backward compatible - all import patterns continue working
20
-
21
- **Technical Details**:
22
- - Package-level `ins_pricing/utils/device.py` is now the canonical implementation
23
- - BayesOpt utils automatically re-export these classes for backward compatibility
24
- - No breaking changes required in existing code
25
-
26
- ## [0.2.10] - 2026-01-15
27
-
28
- ### Added
29
-
30
- #### Refactoring Phase 2: Simplified BayesOptModel API
31
- - **BayesOptModel config-based initialization** - New recommended API using configuration objects:
32
- - Added `config` parameter accepting `BayesOptConfig` instances
33
- - **Before**: 56 individual parameters required
34
- - **After**: Single config object parameter
35
- - **Benefits**: Improved code clarity, reusability, type safety, and testability
36
-
37
- ### Changed
38
-
39
- #### API Improvements
40
- - **BayesOptModel initialization** - Enhanced parameter handling:
41
- - New API: `BayesOptModel(train_df, test_df, config=BayesOptConfig(...))`
42
- - Old API still supported with deprecation warning
43
- - Made `model_nme`, `resp_nme`, `weight_nme` optional (validated when config=None)
44
- - Added type validation for config parameter
45
- - Added helpful error messages for missing required parameters
46
-
47
- ### Deprecated
48
-
49
- - **BayesOptModel individual parameters** - Passing 56 individual parameters to `__init__`:
50
- - Use `config=BayesOptConfig(...)` instead
51
- - Old API will be removed in v0.4.0
52
- - Migration guide: See `modelling/core/bayesopt/PHASE2_REFACTORING_SUMMARY.md`
53
-
54
- ### Fixed
55
-
56
- - **Type hints** - Improved type safety in BayesOptModel initialization
57
- - **Documentation** - Added comprehensive examples of both old and new APIs
58
-
59
- ## [0.2.9] - 2026-01-15
60
-
61
- ### Added
62
-
63
- #### Refactoring Phase 1: Utils Module Split
64
- - **Modular utils package** - Split monolithic 1,503-line utils.py into focused modules:
65
- - `utils/constants.py` (183 lines) - Core constants and simple helpers
66
- - `utils/io_utils.py` (110 lines) - File I/O and parameter loading
67
- - `utils/distributed_utils.py` (163 lines) - DDP and CUDA management
68
- - `utils/torch_trainer_mixin.py` (587 lines) - PyTorch training infrastructure
69
- - `utils/metrics_and_devices.py` (721 lines) - Metrics, GPU, device, CV, plotting
70
- - `utils/__init__.py` (86 lines) - Backward compatibility re-exports
71
-
72
- - **Upload automation** - Cross-platform PyPI upload scripts:
73
- - `upload_to_pypi.sh` - Shell script for Linux/macOS with auto-version extraction
74
- - `upload_to_pypi.bat` - Updated Windows batch script with auto-version extraction
75
- - `Makefile` - Cross-platform build automation (build, check, upload, clean)
76
- - `README_UPLOAD.md` - Comprehensive upload documentation in English
77
- - `UPLOAD_QUICK_START.md` - Quick start guide for package publishing
78
-
79
- ### Changed
80
-
81
- #### Code Organization
82
- - **utils module structure** - Improved maintainability and testability:
83
- - Average file size reduced from 1,503 to 351 lines per module
84
- - Each module has single responsibility
85
- - Independent testing now possible for each component
86
- - **Impact**: 100% backward compatibility maintained via re-exports
87
-
88
- ### Deprecated
89
-
90
- - **utils.py single file import** - Direct import from `bayesopt/utils.py`:
91
- - Use `from .utils import ...` instead (package import)
92
- - Old single-file import shows deprecation warning
93
- - File will be removed in v0.4.0
94
- - **Note**: All imports continue to work identically
95
-
96
- ### Removed
97
-
98
- - **verify_core_decoupling.py** - Obsolete test script for unimplemented refactoring
99
- - Cleanup logged in `.cleanup_log.md`
100
-
101
- ## [0.2.8] - 2026-01-14
102
-
103
- ### Added
104
-
105
- #### New Utility Modules
106
- - **utils/validation.py** - Comprehensive data validation toolkit with 8 validation functions:
107
- - `validate_required_columns()` - Validate required DataFrame columns
108
- - `validate_column_types()` - Validate and optionally coerce column types
109
- - `validate_value_range()` - Validate numeric value ranges
110
- - `validate_no_nulls()` - Check for null values
111
- - `validate_categorical_values()` - Validate categorical values against allowed set
112
- - `validate_positive()` - Ensure positive numeric values
113
- - `validate_dataframe_not_empty()` - Check DataFrame is not empty
114
- - `validate_date_range()` - Validate date ranges
115
-
116
- - **utils/profiling.py** - Performance profiling and memory monitoring utilities:
117
- - `profile_section()` - Context manager for execution time and memory tracking
118
- - `get_memory_info()` - Get current memory usage statistics
119
- - `log_memory_usage()` - Log memory usage with custom prefix
120
- - `check_memory_threshold()` - Check if memory exceeds threshold
121
- - `cleanup_memory()` - Force memory cleanup for CPU and GPU
122
- - `MemoryMonitor` - Context manager with automatic cleanup
123
- - `profile_training_epoch()` - Periodic memory profiling during training
124
-
125
- - **pricing/factors.py** - LRU caching for binning operations:
126
- - `_compute_bins_cached()` - Cached bin edge computation (maxsize=128)
127
- - `clear_binning_cache()` - Clear binning cache
128
- - `get_cache_info()` - Get cache statistics (hits, misses, size)
129
- - Enhanced `bin_numeric()` with `use_cache` parameter
130
-
131
- #### Test Coverage Expansion
132
- - **tests/production/** - Complete production module test suite (4 files, 247 test scenarios):
133
- - `test_predict.py` - Prediction and model loading tests (87 scenarios)
134
- - `test_scoring.py` - Scoring metrics validation (60 scenarios)
135
- - `test_monitoring.py` - Drift detection and monitoring (55 scenarios)
136
- - `test_preprocess.py` - Preprocessing pipeline tests (45 scenarios)
137
-
138
- - **tests/pricing/** - Pricing module test suite (4 files):
139
- - `test_factors.py` - Factor table construction and binning
140
- - `test_exposure.py` - Exposure calculation tests
141
- - `test_calibration.py` - Calibration factor fitting tests
142
- - `test_rate_table.py` - Rate table generation tests
143
-
144
- - **tests/governance/** - Governance workflow test suite (3 files):
145
- - `test_registry.py` - Model registry operations
146
- - `test_release.py` - Release management and rollback
147
- - `test_audit.py` - Audit logging and trail verification
148
-
149
- ### Enhanced
150
-
151
- #### SHAP Computation Parallelization
152
- - **modelling/explain/shap_utils.py** - Added parallel SHAP computation:
153
- - `_compute_shap_parallel()` - Parallel SHAP value computation using joblib
154
- - All SHAP functions now support `use_parallel` and `n_jobs` parameters:
155
- - `compute_shap_glm()` - GLM model SHAP with parallelization
156
- - `compute_shap_xgb()` - XGBoost model SHAP with parallelization
157
- - `compute_shap_resn()` - ResNet model SHAP with parallelization
158
- - `compute_shap_ft()` - FT-Transformer model SHAP with parallelization
159
- - Automatic batch size optimization based on CPU cores
160
- - **Performance**: 3-6x speedup on multi-core systems (n_samples > 100)
161
- - Graceful fallback to sequential computation if joblib unavailable
162
-
163
- #### Documentation Improvements
164
- - **production/preprocess.py** - Complete documentation overhaul:
165
- - Module-level docstring with workflow explanation and examples
166
- - `load_preprocess_artifacts()` - Full parameter and return value documentation
167
- - `prepare_raw_features()` - Detailed data preparation steps and examples
168
- - `apply_preprocess_artifacts()` - Complete preprocessing pipeline documentation
169
-
170
- - **pricing/calibration.py** - Comprehensive documentation:
171
- - Module-level docstring with business context and use cases
172
- - `fit_calibration_factor()` - Mathematical formulas, multiple examples, business guidance
173
- - `apply_calibration()` - Usage examples showing ratio preservation
174
-
175
- #### Configuration Validation
176
- - **modelling/core/bayesopt/config_preprocess.py** - BayesOptConfig validation already comprehensive:
177
- - Task type validation
178
- - Parameter range validation
179
- - Distributed training conflict detection
180
- - Cross-validation strategy validation
181
- - GNN memory settings validation
182
-
183
- ### Performance Improvements
184
-
185
- - **Memory optimization** - DatasetPreprocessor reduces unnecessary DataFrame copies:
186
- - Conditional copying only when scaling needed
187
- - Direct reference assignment where safe
188
- - **Impact**: 30-40% reduction in memory usage during preprocessing
189
-
190
- - **Binning cache** - LRU cache for factor table binning operations:
191
- - Cache size: 128 entries
192
- - **Impact**: 5-10x speedup for repeated binning of same columns
193
-
194
- - **SHAP parallelization** - Multi-core SHAP value computation:
195
- - **Impact**: 3-6x speedup depending on CPU cores and sample size
196
- - Automatic batch size tuning
197
- - Memory-efficient batch processing
198
-
199
- ### Fixed
200
-
201
- - **Distributed training** - State dict key mismatch issues already resolved in previous versions:
202
- - model_ft_trainer.py: Lines 409, 738
203
- - model_resn.py: Line 405
204
- - utils.py: Line 796
205
-
206
- ### Technical Debt
207
-
208
- - Custom exception hierarchy fully implemented in `exceptions.py`:
209
- - `InsPricingError` - Base exception
210
- - `ConfigurationError` - Invalid configuration
211
- - `DataValidationError` - Data validation failures
212
- - `ModelLoadError` - Model loading failures
213
- - `DistributedTrainingError` - DDP/DataParallel errors
214
- - `PreprocessingError` - Preprocessing failures
215
- - `PredictionError` - Prediction failures
216
- - `GovernanceError` - Governance workflow errors
217
-
218
- ### Testing
219
-
220
- - **Test coverage increase**: From 35% → 60%+ (estimated)
221
- - 250+ new test scenarios across 11 test files
222
- - Coverage for previously untested modules: production, pricing, governance
223
- - Integration tests for end-to-end workflows
224
-
225
- ### Documentation
226
-
227
- - **Docstring coverage**: 0% → 95% for improved modules
228
- - 150+ lines of new documentation
229
- - 8+ complete code examples
230
- - Business context and use case explanations
231
- - Parameter constraints and edge case documentation
232
-
233
- ---
234
-
235
- ## [0.2.7] - Previous Release
236
-
237
- (Previous changelog entries would go here)
238
-
239
- ---
240
-
241
- ## Release Notes for 0.2.8
242
-
243
- This release focuses on **code quality, performance optimization, and documentation** improvements. Major highlights:
244
-
245
- ### 🚀 Performance
246
- - **3-6x faster SHAP computation** with parallel processing
247
- - **30-40% memory reduction** in preprocessing
248
- - **5-10x faster binning** with LRU cache
249
-
250
- ### 📚 Documentation
251
- - **Complete module documentation** for production and pricing modules
252
- - **150+ lines of new documentation** with practical examples
253
- - **Business context** explanations for insurance domain
254
-
255
- ### 🧪 Testing
256
- - **250+ new test scenarios** across 11 test files
257
- - **60%+ test coverage** (up from 35%)
258
- - **Complete coverage** for production, pricing, governance modules
259
-
260
- ### 🛠️ Developer Experience
261
- - **Comprehensive validation toolkit** for data quality checks
262
- - **Performance profiling utilities** for optimization
263
- - **Enhanced error messages** with clear troubleshooting guidance
264
-
265
- ### Migration Notes
266
- - All changes are **backward compatible**
267
- - New features are **opt-in** (e.g., `use_parallel=True`)
268
- - No breaking changes to existing APIs
269
-
270
- ### Dependencies
271
- - Optional: `joblib>=1.2` for parallel SHAP computation
272
- - Optional: `psutil` for memory profiling utilities