ins-pricing 0.4.4__py3-none-any.whl → 0.4.5__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.
- ins_pricing/README.md +66 -74
- ins_pricing/cli/BayesOpt_incremental.py +904 -904
- ins_pricing/cli/bayesopt_entry_runner.py +1442 -1442
- ins_pricing/frontend/README.md +573 -419
- ins_pricing/frontend/config_builder.py +1 -0
- ins_pricing/modelling/README.md +67 -0
- ins_pricing/modelling/core/bayesopt/README.md +59 -0
- ins_pricing/modelling/core/bayesopt/config_preprocess.py +12 -0
- ins_pricing/modelling/core/bayesopt/core.py +3 -1
- ins_pricing/setup.py +1 -1
- {ins_pricing-0.4.4.dist-info → ins_pricing-0.4.5.dist-info}/METADATA +182 -162
- {ins_pricing-0.4.4.dist-info → ins_pricing-0.4.5.dist-info}/RECORD +14 -21
- ins_pricing/CHANGELOG.md +0 -272
- ins_pricing/RELEASE_NOTES_0.2.8.md +0 -344
- ins_pricing/docs/LOSS_FUNCTIONS.md +0 -78
- ins_pricing/docs/modelling/BayesOpt_USAGE.md +0 -945
- ins_pricing/docs/modelling/README.md +0 -34
- ins_pricing/frontend/QUICKSTART.md +0 -152
- ins_pricing/modelling/core/bayesopt/PHASE2_REFACTORING_SUMMARY.md +0 -449
- ins_pricing/modelling/core/bayesopt/PHASE3_REFACTORING_SUMMARY.md +0 -406
- ins_pricing/modelling/core/bayesopt/REFACTORING_SUMMARY.md +0 -247
- {ins_pricing-0.4.4.dist-info → ins_pricing-0.4.5.dist-info}/WHEEL +0 -0
- {ins_pricing-0.4.4.dist-info → ins_pricing-0.4.5.dist-info}/top_level.txt +0 -0
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# ins_pricing
|
|
2
|
-
|
|
3
|
-
This directory contains reusable production-grade tooling and training frameworks, with a focus on the BayesOpt series.
|
|
4
|
-
|
|
5
|
-
Key contents:
|
|
6
|
-
- `core/bayesopt/`: core subpackage (data preprocessing, trainers, models, plotting, explainability)
|
|
7
|
-
- `plotting/`: standalone plotting helpers (lift/roc/importance/geo)
|
|
8
|
-
- `explain/`: explainability helpers (Permutation/Integrated Gradients/SHAP)
|
|
9
|
-
- `core/BayesOpt.py`: compatibility entry point for legacy imports
|
|
10
|
-
- `cli/BayesOpt_entry.py`: batch training CLI
|
|
11
|
-
- `cli/BayesOpt_incremental.py`: incremental training CLI
|
|
12
|
-
- `cli/utils/cli_common.py` / `cli/utils/notebook_utils.py`: shared CLI and notebook utilities
|
|
13
|
-
- `examples/modelling/config_template.json` / `examples/modelling/config_incremental_template.json`: config templates
|
|
14
|
-
- `cli/Explain_entry.py` / `cli/Explain_Run.py`: explainability entry points (load trained models)
|
|
15
|
-
- `examples/modelling/config_explain_template.json` / `examples/modelling/Explain_Run.ipynb`: explainability demo
|
|
16
|
-
|
|
17
|
-
Note: `examples/modelling/` is kept in the repo only and is not shipped in the PyPI package.
|
|
18
|
-
Migration note: CLI entry points now live under `cli/` and demo assets are under `examples/modelling/`.
|
|
19
|
-
|
|
20
|
-
Common usage:
|
|
21
|
-
- CLI: `python ins_pricing/cli/BayesOpt_entry.py --config-json ...`
|
|
22
|
-
- Notebook: `from ins_pricing.bayesopt import BayesOptModel`
|
|
23
|
-
|
|
24
|
-
Explainability (load trained models under `Results/model` and explain a validation set):
|
|
25
|
-
- CLI: `python ins_pricing/cli/Explain_entry.py --config-json ins_pricing/examples/modelling/config_explain_template.json`
|
|
26
|
-
- Notebook: open `ins_pricing/examples/modelling/Explain_Run.ipynb` and run it
|
|
27
|
-
|
|
28
|
-
Notes:
|
|
29
|
-
- Models load from `output_dir/model` by default (override with `explain.model_dir`).
|
|
30
|
-
- Validation data can be specified via `explain.validation_path`.
|
|
31
|
-
|
|
32
|
-
Operational notes:
|
|
33
|
-
- Training outputs are written to `plot/`, `Results/`, and `model/` by default.
|
|
34
|
-
- Keep large data and secrets outside the repo and use environment variables or `.env`.
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
# Quick Start Guide
|
|
2
|
-
|
|
3
|
-
Get started with the Insurance Pricing Model Training Frontend in 3 easy steps.
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
1. Install the `ins_pricing` package
|
|
8
|
-
2. Install Gradio:
|
|
9
|
-
```bash
|
|
10
|
-
pip install gradio>=4.0.0
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Step 1: Launch the Application
|
|
14
|
-
|
|
15
|
-
### On Windows:
|
|
16
|
-
Double-click `start_app.bat` or run:
|
|
17
|
-
```bash
|
|
18
|
-
python -m ins_pricing.frontend.app
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### On Linux/Mac:
|
|
22
|
-
Run the shell script:
|
|
23
|
-
```bash
|
|
24
|
-
./start_app.sh
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Or use Python directly:
|
|
28
|
-
```bash
|
|
29
|
-
python -m ins_pricing.frontend.app
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
The web interface will automatically open at `http://localhost:7860`
|
|
33
|
-
|
|
34
|
-
## Step 2: Configure Your Model
|
|
35
|
-
|
|
36
|
-
### Option A: Upload Existing Config (Recommended)
|
|
37
|
-
1. Go to the **Configuration** tab
|
|
38
|
-
2. Click **"Upload JSON Config File"**
|
|
39
|
-
3. Select a config file (e.g., `config_xgb_direct.json` from `examples/`)
|
|
40
|
-
4. Click **"Load Config"**
|
|
41
|
-
|
|
42
|
-
### Option B: Manual Configuration
|
|
43
|
-
1. Go to the **Configuration** tab
|
|
44
|
-
2. Scroll to **"Manual Configuration"**
|
|
45
|
-
3. Fill in the required fields:
|
|
46
|
-
- **Data Directory**: Path to your data folder
|
|
47
|
-
- **Model List**: Model name(s)
|
|
48
|
-
- **Target Column**: Your target variable
|
|
49
|
-
- **Weight Column**: Your weight variable
|
|
50
|
-
- **Feature List**: Comma-separated features
|
|
51
|
-
- **Categorical Features**: Comma-separated categorical features
|
|
52
|
-
4. Adjust other settings as needed
|
|
53
|
-
5. Click **"Build Configuration"**
|
|
54
|
-
|
|
55
|
-
## Step 3: Run Training
|
|
56
|
-
|
|
57
|
-
1. Switch to the **Run Task** tab
|
|
58
|
-
2. Click **"Run Task"**
|
|
59
|
-
3. Watch real-time logs appear below
|
|
60
|
-
|
|
61
|
-
Training will start automatically and logs will update in real-time!
|
|
62
|
-
|
|
63
|
-
## New Features
|
|
64
|
-
|
|
65
|
-
### FT Two-Step Workflow
|
|
66
|
-
|
|
67
|
-
For advanced FT-Transformer → XGB/ResN training:
|
|
68
|
-
|
|
69
|
-
1. **Prepare Base Config**: Create or load a base configuration
|
|
70
|
-
2. **Go to FT Two-Step Workflow tab**
|
|
71
|
-
3. **Step 1 - FT Embedding Generation**:
|
|
72
|
-
- Configure DDP settings
|
|
73
|
-
- Click "Prepare Step 1 Config"
|
|
74
|
-
- Copy the config to Configuration tab
|
|
75
|
-
- Run it in "Run Task" tab
|
|
76
|
-
4. **Step 2 - Train XGB/ResN**:
|
|
77
|
-
- After Step 1 completes, click "Prepare Step 2 Configs"
|
|
78
|
-
- Choose which models to train (XGB, ResN, or both)
|
|
79
|
-
- Copy the generated configs and run them
|
|
80
|
-
|
|
81
|
-
### Open Results Folder
|
|
82
|
-
|
|
83
|
-
- In the **Run Task** tab, click **"📁 Open Results Folder"**
|
|
84
|
-
- Automatically opens the output directory in your file explorer
|
|
85
|
-
- Works on Windows, macOS, and Linux
|
|
86
|
-
|
|
87
|
-
## Example Configuration
|
|
88
|
-
|
|
89
|
-
Here's a minimal example to get started:
|
|
90
|
-
|
|
91
|
-
```json
|
|
92
|
-
{
|
|
93
|
-
"data_dir": "./Data",
|
|
94
|
-
"model_list": ["od"],
|
|
95
|
-
"model_categories": ["bc"],
|
|
96
|
-
"target": "response",
|
|
97
|
-
"weight": "weights",
|
|
98
|
-
"feature_list": ["age", "gender", "region"],
|
|
99
|
-
"categorical_features": ["gender", "region"],
|
|
100
|
-
"runner": {
|
|
101
|
-
"mode": "entry",
|
|
102
|
-
"model_keys": ["xgb"],
|
|
103
|
-
"max_evals": 50
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Save this as `my_first_config.json` and upload it!
|
|
109
|
-
|
|
110
|
-
## Tips
|
|
111
|
-
|
|
112
|
-
- **Save Your Config**: After building a configuration, save it using the "Save Configuration" button for reuse
|
|
113
|
-
- **Check Logs**: Training logs update in real-time - watch for errors or progress indicators
|
|
114
|
-
- **GPU Usage**: Toggle "Use GPU" checkbox in Training Settings to enable/disable GPU acceleration
|
|
115
|
-
- **Model Selection**: Specify which models to train in "Model Keys" (xgb, resn, ft, gnn)
|
|
116
|
-
- **Open Results**: Use the "📁 Open Results Folder" button to quickly access output files
|
|
117
|
-
- **FT Workflow**: Use the dedicated FT tab for automated two-step FT → XGB/ResN training
|
|
118
|
-
|
|
119
|
-
## Troubleshooting
|
|
120
|
-
|
|
121
|
-
**Problem**: Interface doesn't load
|
|
122
|
-
- **Solution**: Check that port 7860 is not in use, or specify a different port
|
|
123
|
-
|
|
124
|
-
**Problem**: Configuration validation fails
|
|
125
|
-
- **Solution**: Ensure all required fields are filled and feature lists are properly formatted
|
|
126
|
-
|
|
127
|
-
**Problem**: Training doesn't start
|
|
128
|
-
- **Solution**: Verify data paths exist and configuration is valid
|
|
129
|
-
|
|
130
|
-
**Problem**: Results folder won't open
|
|
131
|
-
- **Solution**: Make sure the task has run at least once to create the output directory
|
|
132
|
-
|
|
133
|
-
**Problem**: Step 2 configs fail to generate
|
|
134
|
-
- **Solution**: Ensure Step 1 completed successfully and embedding files exist
|
|
135
|
-
|
|
136
|
-
## Next Steps
|
|
137
|
-
|
|
138
|
-
- Explore advanced options in the Configuration tab
|
|
139
|
-
- Try the FT Two-Step Workflow for better model performance
|
|
140
|
-
- Experiment with different model combinations (xgb, resn, ft)
|
|
141
|
-
- Try different split strategies
|
|
142
|
-
- Use the Explain mode for model interpretability
|
|
143
|
-
- Check the full [README.md](README.md) for detailed documentation
|
|
144
|
-
|
|
145
|
-
## Support
|
|
146
|
-
|
|
147
|
-
For issues or questions, refer to:
|
|
148
|
-
- Full documentation: [README.md](README.md)
|
|
149
|
-
- Example configs: `ins_pricing/examples/`
|
|
150
|
-
- Package documentation: `ins_pricing/docs/`
|
|
151
|
-
|
|
152
|
-
Happy modeling!
|
|
@@ -1,449 +0,0 @@
|
|
|
1
|
-
# Phase 2 Refactoring: Simplified BayesOptModel API
|
|
2
|
-
|
|
3
|
-
**Completion Date**: 2026-01-15
|
|
4
|
-
**Status**: ✅ COMPLETE
|
|
5
|
-
**Backward Compatibility**: 100% maintained
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Executive Summary
|
|
10
|
-
|
|
11
|
-
**Goal**: Simplify BayesOptModel instantiation by accepting a configuration object instead of 56+ individual parameters.
|
|
12
|
-
|
|
13
|
-
**Impact**:
|
|
14
|
-
- **Before**: 56 individual parameters (overwhelming for users)
|
|
15
|
-
- **After**: Single `config` parameter (clean, maintainable)
|
|
16
|
-
- **Compatibility**: Both old and new APIs work; old API shows deprecation warning
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## What Changed
|
|
21
|
-
|
|
22
|
-
### 1. New Recommended API (Config-Based)
|
|
23
|
-
|
|
24
|
-
**Before (Old API - 56 parameters)**:
|
|
25
|
-
```python
|
|
26
|
-
model = BayesOptModel(
|
|
27
|
-
train_data, test_data,
|
|
28
|
-
model_nme="my_model",
|
|
29
|
-
resp_nme="target",
|
|
30
|
-
weight_nme="weight",
|
|
31
|
-
factor_nmes=["feat1", "feat2", "feat3"],
|
|
32
|
-
task_type="regression",
|
|
33
|
-
epochs=100,
|
|
34
|
-
use_gpu=True,
|
|
35
|
-
use_resn_ddp=True,
|
|
36
|
-
output_dir="./models",
|
|
37
|
-
optuna_storage="sqlite:///optuna.db",
|
|
38
|
-
cv_strategy="stratified",
|
|
39
|
-
cv_splits=5,
|
|
40
|
-
final_ensemble=True,
|
|
41
|
-
final_ensemble_k=3,
|
|
42
|
-
# ... 40+ more parameters
|
|
43
|
-
)
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
**After (New API - Single Config Object)**:
|
|
47
|
-
```python
|
|
48
|
-
config = BayesOptConfig(
|
|
49
|
-
model_nme="my_model",
|
|
50
|
-
resp_nme="target",
|
|
51
|
-
weight_nme="weight",
|
|
52
|
-
factor_nmes=["feat1", "feat2", "feat3"],
|
|
53
|
-
task_type="regression",
|
|
54
|
-
epochs=100,
|
|
55
|
-
use_gpu=True,
|
|
56
|
-
use_resn_ddp=True,
|
|
57
|
-
output_dir="./models",
|
|
58
|
-
optuna_storage="sqlite:///optuna.db",
|
|
59
|
-
cv_strategy="stratified",
|
|
60
|
-
cv_splits=5,
|
|
61
|
-
final_ensemble=True,
|
|
62
|
-
final_ensemble_k=3,
|
|
63
|
-
# All other parameters with sensible defaults
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
model = BayesOptModel(train_data, test_data, config=config)
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### 2. Benefits of New API
|
|
70
|
-
|
|
71
|
-
1. **Cleaner Code**: Configuration is separated from model instantiation
|
|
72
|
-
2. **Reusability**: Config objects can be saved, loaded, and reused
|
|
73
|
-
3. **IDE Support**: Better auto-completion and type hints
|
|
74
|
-
4. **Validation**: Config validation happens at construction time
|
|
75
|
-
5. **Serialization**: Easy to serialize/deserialize configurations
|
|
76
|
-
6. **Testing**: Easier to mock and test with config objects
|
|
77
|
-
|
|
78
|
-
### 3. Backward Compatibility
|
|
79
|
-
|
|
80
|
-
The old API **continues to work** but shows a deprecation warning:
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
DeprecationWarning: Passing individual parameters to BayesOptModel.__init__
|
|
84
|
-
is deprecated. Use the 'config' parameter with a BayesOptConfig instance instead:
|
|
85
|
-
config = BayesOptConfig(model_nme=..., resp_nme=..., ...)
|
|
86
|
-
model = BayesOptModel(train_data, test_data, config=config)
|
|
87
|
-
Individual parameters will be removed in v0.4.0.
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Migration Guide
|
|
93
|
-
|
|
94
|
-
### Step 1: Identify Current Usage
|
|
95
|
-
|
|
96
|
-
Search your codebase for:
|
|
97
|
-
```python
|
|
98
|
-
BayesOptModel(train_data, test_data, model_nme=..., resp_nme=..., ...)
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Step 2: Convert to New API
|
|
102
|
-
|
|
103
|
-
**Option A: Direct Conversion** (Recommended)
|
|
104
|
-
```python
|
|
105
|
-
# Before
|
|
106
|
-
model = BayesOptModel(
|
|
107
|
-
train_data, test_data,
|
|
108
|
-
model_nme="model1",
|
|
109
|
-
resp_nme="target",
|
|
110
|
-
weight_nme="weight",
|
|
111
|
-
factor_nmes=features,
|
|
112
|
-
epochs=50,
|
|
113
|
-
use_gpu=True
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
# After
|
|
117
|
-
config = BayesOptConfig(
|
|
118
|
-
model_nme="model1",
|
|
119
|
-
resp_nme="target",
|
|
120
|
-
weight_nme="weight",
|
|
121
|
-
factor_nmes=features,
|
|
122
|
-
epochs=50,
|
|
123
|
-
use_gpu=True
|
|
124
|
-
)
|
|
125
|
-
model = BayesOptModel(train_data, test_data, config=config)
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
**Option B: Load from File**
|
|
129
|
-
```python
|
|
130
|
-
# Load config from JSON/CSV/TSV
|
|
131
|
-
config = BayesOptConfig.from_file("config.json")
|
|
132
|
-
model = BayesOptModel(train_data, test_data, config=config)
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
**Option C: Modify Existing Config**
|
|
136
|
-
```python
|
|
137
|
-
# Start with defaults, override specific values
|
|
138
|
-
config = BayesOptConfig(
|
|
139
|
-
model_nme="model1",
|
|
140
|
-
resp_nme="target",
|
|
141
|
-
weight_nme="weight",
|
|
142
|
-
factor_nmes=features
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
# Modify for specific experiment
|
|
146
|
-
config.epochs = 100
|
|
147
|
-
config.use_resn_ddp = True
|
|
148
|
-
config.final_ensemble = True
|
|
149
|
-
|
|
150
|
-
model = BayesOptModel(train_data, test_data, config=config)
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### Step 3: Test
|
|
154
|
-
|
|
155
|
-
Run your code and verify:
|
|
156
|
-
1. ✓ No errors during model creation
|
|
157
|
-
2. ✓ Same behavior as before
|
|
158
|
-
3. ✓ Deprecation warning appears (if using old API)
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## Technical Implementation Details
|
|
163
|
-
|
|
164
|
-
### File Modified
|
|
165
|
-
|
|
166
|
-
- **[core.py:50-292](ins_pricing/modelling/core/bayesopt/core.py#L50-L292)**: `BayesOptModel.__init__` method
|
|
167
|
-
|
|
168
|
-
### Changes Made
|
|
169
|
-
|
|
170
|
-
1. **New Parameter**: Added `config: Optional[BayesOptConfig] = None` as first parameter
|
|
171
|
-
2. **Required Parameters**: Made `model_nme`, `resp_nme`, `weight_nme` optional (None by default)
|
|
172
|
-
3. **Detection Logic**: Added if/else to detect which API is being used:
|
|
173
|
-
- If `config` is provided → use it directly
|
|
174
|
-
- If `config` is None → construct from individual parameters (old API)
|
|
175
|
-
4. **Validation**: Added type checking for config parameter
|
|
176
|
-
5. **Deprecation Warning**: Added warning when old API is used
|
|
177
|
-
6. **Error Messages**: Added helpful error messages for missing required params
|
|
178
|
-
7. **Documentation**: Updated docstring with examples of both APIs
|
|
179
|
-
|
|
180
|
-
### Code Structure
|
|
181
|
-
|
|
182
|
-
```python
|
|
183
|
-
def __init__(self, train_data, test_data,
|
|
184
|
-
config: Optional[BayesOptConfig] = None,
|
|
185
|
-
# All 56 individual parameters with defaults
|
|
186
|
-
model_nme=None, resp_nme=None, ...):
|
|
187
|
-
"""Docstring with examples."""
|
|
188
|
-
|
|
189
|
-
if config is not None:
|
|
190
|
-
# New API path
|
|
191
|
-
if isinstance(config, BayesOptConfig):
|
|
192
|
-
cfg = config
|
|
193
|
-
else:
|
|
194
|
-
raise TypeError("config must be BayesOptConfig")
|
|
195
|
-
else:
|
|
196
|
-
# Old API path (backward compatibility)
|
|
197
|
-
warnings.warn("Individual parameters deprecated...", DeprecationWarning)
|
|
198
|
-
|
|
199
|
-
# Validate required params
|
|
200
|
-
if model_nme is None:
|
|
201
|
-
raise ValueError("model_nme required")
|
|
202
|
-
# ... validate other required params
|
|
203
|
-
|
|
204
|
-
# Infer categorical features
|
|
205
|
-
inferred_factors, inferred_cats = infer_factor_and_cate_list(...)
|
|
206
|
-
|
|
207
|
-
# Construct config from individual params
|
|
208
|
-
cfg = BayesOptConfig(
|
|
209
|
-
model_nme=model_nme,
|
|
210
|
-
resp_nme=resp_nme,
|
|
211
|
-
# ... all 56 parameters
|
|
212
|
-
)
|
|
213
|
-
|
|
214
|
-
# Rest of initialization (unchanged)
|
|
215
|
-
self.config = cfg
|
|
216
|
-
self.model_nme = cfg.model_nme
|
|
217
|
-
# ...
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## Testing
|
|
223
|
-
|
|
224
|
-
### Automated Tests
|
|
225
|
-
|
|
226
|
-
Created [test_bayesopt_api.py](test_bayesopt_api.py) with 5 test scenarios:
|
|
227
|
-
|
|
228
|
-
1. ✅ **New API**: Config-based instantiation (no warnings)
|
|
229
|
-
2. ✅ **Old API**: Individual parameters (shows deprecation warning)
|
|
230
|
-
3. ✅ **Equivalence**: Both APIs produce identical results
|
|
231
|
-
4. ✅ **Error Handling**: Missing required params raise ValueError
|
|
232
|
-
5. ✅ **Type Validation**: Invalid config type raises TypeError
|
|
233
|
-
|
|
234
|
-
### Manual Verification
|
|
235
|
-
|
|
236
|
-
Run syntax validation:
|
|
237
|
-
```bash
|
|
238
|
-
python -m py_compile ins_pricing/modelling/core/bayesopt/core.py
|
|
239
|
-
```
|
|
240
|
-
Result: ✅ No syntax errors
|
|
241
|
-
|
|
242
|
-
---
|
|
243
|
-
|
|
244
|
-
## Impact Analysis
|
|
245
|
-
|
|
246
|
-
### Files Affected
|
|
247
|
-
|
|
248
|
-
**Direct Changes**:
|
|
249
|
-
- `ins_pricing/modelling/core/bayesopt/core.py` - Modified `BayesOptModel.__init__`
|
|
250
|
-
|
|
251
|
-
**No Changes Required** (backward compatible):
|
|
252
|
-
- All trainer classes (GLMTrainer, XGBTrainer, ResNetTrainer, FTTrainer, GNNTrainer)
|
|
253
|
-
- All model classes (GraphNeuralNetSklearn, etc.)
|
|
254
|
-
- All existing user code and scripts
|
|
255
|
-
|
|
256
|
-
### Breaking Changes
|
|
257
|
-
|
|
258
|
-
**None**. This refactoring is 100% backward compatible.
|
|
259
|
-
|
|
260
|
-
- Old code continues to work (with deprecation warning)
|
|
261
|
-
- Deprecation warnings can be suppressed if needed
|
|
262
|
-
- Removal planned for v0.4.0 (future major version)
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
## Metrics
|
|
267
|
-
|
|
268
|
-
### Code Simplification
|
|
269
|
-
|
|
270
|
-
| Metric | Before | After | Change |
|
|
271
|
-
|--------|--------|-------|--------|
|
|
272
|
-
| Required positional params | 58 | 3 | -95% |
|
|
273
|
-
| Function signature length | 56 lines | 61 lines | +9% (temp for compat) |
|
|
274
|
-
| User code complexity | High | Low | Significantly improved |
|
|
275
|
-
| Type safety | Weak | Strong | Config is type-checked |
|
|
276
|
-
| Reusability | None | High | Config objects reusable |
|
|
277
|
-
|
|
278
|
-
### Future Cleanup (v0.4.0)
|
|
279
|
-
|
|
280
|
-
When old API is removed:
|
|
281
|
-
- Function signature: 61 lines → 5 lines (-92%)
|
|
282
|
-
- Complexity: Removed 100+ lines of parameter-to-config mapping
|
|
283
|
-
- Maintenance: Single source of truth (BayesOptConfig)
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## Examples
|
|
288
|
-
|
|
289
|
-
### Example 1: Basic Usage
|
|
290
|
-
|
|
291
|
-
```python
|
|
292
|
-
from ins_pricing.modelling.core.bayesopt import BayesOptModel, BayesOptConfig
|
|
293
|
-
import pandas as pd
|
|
294
|
-
|
|
295
|
-
# Load data
|
|
296
|
-
train_df = pd.read_csv("train.csv")
|
|
297
|
-
test_df = pd.read_csv("test.csv")
|
|
298
|
-
|
|
299
|
-
# Create configuration
|
|
300
|
-
config = BayesOptConfig(
|
|
301
|
-
model_nme="insurance_pricing",
|
|
302
|
-
resp_nme="premium",
|
|
303
|
-
weight_nme="exposure",
|
|
304
|
-
factor_nmes=["age", "vehicle_type", "region"],
|
|
305
|
-
task_type="regression"
|
|
306
|
-
)
|
|
307
|
-
|
|
308
|
-
# Create model
|
|
309
|
-
model = BayesOptModel(train_df, test_df, config=config)
|
|
310
|
-
|
|
311
|
-
# Tune and train
|
|
312
|
-
model.tune(n_trials=100)
|
|
313
|
-
results = model.train()
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
### Example 2: Reusing Configuration
|
|
317
|
-
|
|
318
|
-
```python
|
|
319
|
-
# Base configuration for all experiments
|
|
320
|
-
base_config = BayesOptConfig(
|
|
321
|
-
model_nme="experiment",
|
|
322
|
-
resp_nme="target",
|
|
323
|
-
weight_nme="weight",
|
|
324
|
-
factor_nmes=feature_list,
|
|
325
|
-
task_type="regression",
|
|
326
|
-
epochs=50,
|
|
327
|
-
use_gpu=True
|
|
328
|
-
)
|
|
329
|
-
|
|
330
|
-
# Experiment 1: Default settings
|
|
331
|
-
model1 = BayesOptModel(train_df, test_df, config=base_config)
|
|
332
|
-
|
|
333
|
-
# Experiment 2: Enable DDP for ResNet
|
|
334
|
-
config2 = BayesOptConfig(**asdict(base_config))
|
|
335
|
-
config2.use_resn_ddp = True
|
|
336
|
-
model2 = BayesOptModel(train_df, test_df, config=config2)
|
|
337
|
-
|
|
338
|
-
# Experiment 3: Enable ensemble
|
|
339
|
-
config3 = BayesOptConfig(**asdict(base_config))
|
|
340
|
-
config3.final_ensemble = True
|
|
341
|
-
config3.final_ensemble_k = 5
|
|
342
|
-
model3 = BayesOptModel(train_df, test_df, config=config3)
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
### Example 3: Loading from File
|
|
346
|
-
|
|
347
|
-
```python
|
|
348
|
-
# config.json
|
|
349
|
-
{
|
|
350
|
-
"model_nme": "production_model",
|
|
351
|
-
"resp_nme": "claim_amount",
|
|
352
|
-
"weight_nme": "exposure",
|
|
353
|
-
"factor_nmes": ["age", "gender", "vehicle_age"],
|
|
354
|
-
"task_type": "regression",
|
|
355
|
-
"epochs": 100,
|
|
356
|
-
"use_gpu": true,
|
|
357
|
-
"cv_strategy": "stratified",
|
|
358
|
-
"cv_splits": 5,
|
|
359
|
-
"final_ensemble": true
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
# Python code
|
|
363
|
-
config = BayesOptConfig.from_file("config.json")
|
|
364
|
-
model = BayesOptModel(train_df, test_df, config=config)
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
---
|
|
368
|
-
|
|
369
|
-
## Rollback Plan
|
|
370
|
-
|
|
371
|
-
If issues arise:
|
|
372
|
-
|
|
373
|
-
1. **Code is backward compatible** - no changes needed to existing code
|
|
374
|
-
2. **Old API still works** - can continue using individual parameters
|
|
375
|
-
3. **Deprecation warnings can be suppressed**:
|
|
376
|
-
```python
|
|
377
|
-
import warnings
|
|
378
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
4. **Revert changes** (if absolutely necessary):
|
|
382
|
-
```bash
|
|
383
|
-
git revert <commit_hash>
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
## Future Work
|
|
389
|
-
|
|
390
|
-
### v0.3.x (Current)
|
|
391
|
-
- ✅ Both APIs supported
|
|
392
|
-
- ✅ Deprecation warnings shown
|
|
393
|
-
- ✅ Documentation complete
|
|
394
|
-
|
|
395
|
-
### v0.4.0 (Future Major Release)
|
|
396
|
-
- 🔄 Remove old API entirely
|
|
397
|
-
- 🔄 Clean up function signature
|
|
398
|
-
- 🔄 Remove parameter-to-config mapping code
|
|
399
|
-
- 🔄 Update all examples and documentation
|
|
400
|
-
|
|
401
|
-
---
|
|
402
|
-
|
|
403
|
-
## Success Criteria
|
|
404
|
-
|
|
405
|
-
- ✅ **Functionality**: Both APIs produce identical results
|
|
406
|
-
- ✅ **Compatibility**: All existing code works without changes
|
|
407
|
-
- ✅ **Warnings**: Deprecation warnings guide users to new API
|
|
408
|
-
- ✅ **Documentation**: Clear migration guide and examples
|
|
409
|
-
- ✅ **Type Safety**: Config parameter validated at runtime
|
|
410
|
-
- ✅ **Testing**: Comprehensive test coverage
|
|
411
|
-
- ✅ **Syntax**: No Python syntax errors
|
|
412
|
-
- ✅ **Code Quality**: Clean, maintainable implementation
|
|
413
|
-
|
|
414
|
-
---
|
|
415
|
-
|
|
416
|
-
## Related Documentation
|
|
417
|
-
|
|
418
|
-
- [Phase 1 Refactoring: Utils Module Split](REFACTORING_SUMMARY.md)
|
|
419
|
-
- [BayesOptConfig Reference](config_preprocess.py)
|
|
420
|
-
- [Migration Examples](test_bayesopt_api.py)
|
|
421
|
-
- [Original Refactoring Plan](~/.claude/plans/linked-percolating-sketch.md)
|
|
422
|
-
|
|
423
|
-
---
|
|
424
|
-
|
|
425
|
-
## Changelog Entry
|
|
426
|
-
|
|
427
|
-
### v0.2.10 (Upcoming)
|
|
428
|
-
|
|
429
|
-
**Added**:
|
|
430
|
-
- New config-based API for BayesOptModel initialization
|
|
431
|
-
- BayesOptModel now accepts `config` parameter with BayesOptConfig instance
|
|
432
|
-
|
|
433
|
-
**Deprecated**:
|
|
434
|
-
- Individual parameter passing to BayesOptModel.__init__ (use config instead)
|
|
435
|
-
- Old API will be removed in v0.4.0
|
|
436
|
-
|
|
437
|
-
**Migration**:
|
|
438
|
-
```python
|
|
439
|
-
# Old (deprecated but still works)
|
|
440
|
-
model = BayesOptModel(train_df, test_df, model_nme="...", resp_nme="...", ...)
|
|
441
|
-
|
|
442
|
-
# New (recommended)
|
|
443
|
-
config = BayesOptConfig(model_nme="...", resp_nme="...", ...)
|
|
444
|
-
model = BayesOptModel(train_df, test_df, config=config)
|
|
445
|
-
```
|
|
446
|
-
|
|
447
|
-
---
|
|
448
|
-
|
|
449
|
-
**End of Phase 2 Refactoring Summary**
|