reserveai 1.0.0rc2__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 (43) hide show
  1. reserveai-1.0.0rc2/.gitignore +47 -0
  2. reserveai-1.0.0rc2/LICENSE.txt +13 -0
  3. reserveai-1.0.0rc2/PKG-INFO +246 -0
  4. reserveai-1.0.0rc2/README.md +126 -0
  5. reserveai-1.0.0rc2/pyproject.toml +415 -0
  6. reserveai-1.0.0rc2/reserveai/__init__.py +51 -0
  7. reserveai-1.0.0rc2/reserveai/api/__init__.py +87 -0
  8. reserveai-1.0.0rc2/reserveai/api/auth.py +274 -0
  9. reserveai-1.0.0rc2/reserveai/api/config.py +510 -0
  10. reserveai-1.0.0rc2/reserveai/api/model/__init__.py +81 -0
  11. reserveai-1.0.0rc2/reserveai/api/model/base.py +28 -0
  12. reserveai-1.0.0rc2/reserveai/api/model/load.py +66 -0
  13. reserveai-1.0.0rc2/reserveai/api/model/run.py +529 -0
  14. reserveai-1.0.0rc2/reserveai/api/model/scope.py +541 -0
  15. reserveai-1.0.0rc2/reserveai/api/model/status.py +92 -0
  16. reserveai-1.0.0rc2/reserveai/client/__init__.py +5 -0
  17. reserveai-1.0.0rc2/reserveai/client/api.py +2317 -0
  18. reserveai-1.0.0rc2/reserveai/client/protocols/__init__.py +4 -0
  19. reserveai-1.0.0rc2/reserveai/client/protocols/scope_api.py +17 -0
  20. reserveai-1.0.0rc2/reserveai/client/protocols/valuation_api.py +144 -0
  21. reserveai-1.0.0rc2/reserveai/client/scope.py +1049 -0
  22. reserveai-1.0.0rc2/reserveai/client/valuation.py +1117 -0
  23. reserveai-1.0.0rc2/reserveai/data/__init__.py +10 -0
  24. reserveai-1.0.0rc2/reserveai/data/reserving.py +5912 -0
  25. reserveai-1.0.0rc2/reserveai/data/triangle.py +4697 -0
  26. reserveai-1.0.0rc2/reserveai/examples/__init__.py +21 -0
  27. reserveai-1.0.0rc2/reserveai/examples/cas.csv +211 -0
  28. reserveai-1.0.0rc2/reserveai/examples/sample_datasets.py +381 -0
  29. reserveai-1.0.0rc2/reserveai/examples/sme.csv +211 -0
  30. reserveai-1.0.0rc2/reserveai/examples/swiss.csv +191 -0
  31. reserveai-1.0.0rc2/reserveai/utils/__init__.py +72 -0
  32. reserveai-1.0.0rc2/reserveai/utils/generators/__init__.py +4 -0
  33. reserveai-1.0.0rc2/reserveai/utils/generators/grid_search.py +191 -0
  34. reserveai-1.0.0rc2/reserveai/utils/generators/meta_modeling.py +191 -0
  35. reserveai-1.0.0rc2/reserveai/utils/generators/stochastic.py +20 -0
  36. reserveai-1.0.0rc2/reserveai/utils/generators/valuation.py +180 -0
  37. reserveai-1.0.0rc2/reserveai/utils/helpers/__init__.py +4 -0
  38. reserveai-1.0.0rc2/reserveai/utils/helpers/async_map.py +42 -0
  39. reserveai-1.0.0rc2/reserveai/utils/helpers/throttle.py +28 -0
  40. reserveai-1.0.0rc2/reserveai/utils/typing/__init__.py +69 -0
  41. reserveai-1.0.0rc2/reserveai/utils/typing/enum.py +555 -0
  42. reserveai-1.0.0rc2/reserveai/utils/typing/exceptions.py +52 -0
  43. reserveai-1.0.0rc2/reserveai/utils/typing/warnings.py +46 -0
@@ -0,0 +1,47 @@
1
+ # Python generated local folders
2
+ .venv/
3
+ __pycache__/
4
+ .aws-sam/
5
+ dist/
6
+ .uv-cache/
7
+ .env
8
+ .coverage
9
+ .pytest_cache/
10
+
11
+ # IDE
12
+ .vscode/
13
+ .vscode-server/
14
+ .vscode-server-insiders/
15
+ .history/
16
+ .idea/
17
+ .hypothesis
18
+
19
+ htmlcov/
20
+
21
+ # Terraform files
22
+ **/.terraform/*
23
+ *.tfstate
24
+ *.tfstate.*
25
+ crash.log
26
+ crash.*.log
27
+ *.tfvars
28
+ *.tfvars.json
29
+ override.tf
30
+ override.tf.json
31
+ *_override.tf
32
+ *_override.tf.json
33
+ .terraformrc
34
+ terraform.rc
35
+ .terraform.lock.hcl
36
+
37
+ # Exclude all .tfplan files
38
+ *.tfplan
39
+ *.tfplan.*
40
+
41
+ # Sphinx directories
42
+ jupyter_execute/
43
+ _build/
44
+ doctrees/
45
+
46
+ # Exports
47
+ *.xlsx
@@ -0,0 +1,13 @@
1
+ Copyright 2025 insureAI.
2
+
3
+ The ReserveAI SDK (by insureAI) is licensed under the Apache License, Version 2.0 (the "License"); you may not use the
4
+ source code except in compliance with the License. The License applies only to the SDK code; it does not grant any
5
+ rights to insureAI's proprietary APIs, algorithms, or platforms.
6
+
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
12
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
13
+ specific language governing permissions and limitations under the License.
@@ -0,0 +1,246 @@
1
+ Metadata-Version: 2.4
2
+ Name: reserveai
3
+ Version: 1.0.0rc2
4
+ Summary: Python SDK for insureAI's ReserveAI API
5
+ Project-URL: issues, https://gitlab.com/insureai/engineering/sdk-res-py/-/issues
6
+ Project-URL: repository, https://gitlab.com/insureai/engineering/sdk-res-py
7
+ License-Expression: Apache-2.0
8
+ License-File: LICENSE.txt
9
+ Keywords: claims,insurance,insureAI,reserveai,reserving
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Financial and Insurance Industry
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Requires-Python: <3.15,>=3.10
18
+ Requires-Dist: httpx==0.28.*; python_version == '3.10'
19
+ Requires-Dist: httpx==0.28.*; python_version == '3.11'
20
+ Requires-Dist: httpx==0.28.*; python_version == '3.12'
21
+ Requires-Dist: httpx==0.28.*; python_version == '3.13'
22
+ Requires-Dist: httpx==0.28.*; python_version == '3.14'
23
+ Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.10'
24
+ Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.11'
25
+ Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.12'
26
+ Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.13'
27
+ Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.14'
28
+ Requires-Dist: pyarrow<25,>=18; python_version == '3.10'
29
+ Requires-Dist: pyarrow<25,>=18; python_version == '3.11'
30
+ Requires-Dist: pyarrow<25,>=18; python_version == '3.12'
31
+ Requires-Dist: pyarrow<25,>=18; python_version == '3.13'
32
+ Requires-Dist: pyarrow<25,>=22; python_version == '3.14'
33
+ Requires-Dist: pydantic>=2.12.0; python_version == '3.10'
34
+ Requires-Dist: pydantic>=2.12.0; python_version == '3.11'
35
+ Requires-Dist: pydantic>=2.12.0; python_version == '3.12'
36
+ Requires-Dist: pydantic>=2.12.0; python_version == '3.13'
37
+ Requires-Dist: pydantic>=2.12.0; python_version == '3.14'
38
+ Requires-Dist: python-dateutil>=2.8.2; python_version == '3.10'
39
+ Requires-Dist: python-dateutil>=2.8.2; python_version == '3.11'
40
+ Requires-Dist: python-dateutil>=2.8.2; python_version == '3.12'
41
+ Requires-Dist: python-dateutil>=2.8.2; python_version == '3.13'
42
+ Requires-Dist: python-dateutil>=2.8.2; python_version == '3.14'
43
+ Requires-Dist: requests>=2.32; python_version == '3.10'
44
+ Requires-Dist: requests>=2.32; python_version == '3.11'
45
+ Requires-Dist: requests>=2.32; python_version == '3.12'
46
+ Requires-Dist: requests>=2.32; python_version == '3.13'
47
+ Requires-Dist: requests>=2.32; python_version == '3.14'
48
+ Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.10'
49
+ Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.11'
50
+ Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.12'
51
+ Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.13'
52
+ Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.14'
53
+ Provides-Extra: all
54
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.10') and extra == 'all'
55
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.11') and extra == 'all'
56
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.12') and extra == 'all'
57
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.13') and extra == 'all'
58
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.14') and extra == 'all'
59
+ Requires-Dist: openpyxl==3.1.*; extra == 'all'
60
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.10') and extra == 'all'
61
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.11') and extra == 'all'
62
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.12') and extra == 'all'
63
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.13') and extra == 'all'
64
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.14') and extra == 'all'
65
+ Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.10') and extra == 'all'
66
+ Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.11') and extra == 'all'
67
+ Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.12') and extra == 'all'
68
+ Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.13') and extra == 'all'
69
+ Requires-Dist: pandas<3,>=2.3.3; (python_version == '3.14') and extra == 'all'
70
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.10') and extra == 'all'
71
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.11') and extra == 'all'
72
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.12') and extra == 'all'
73
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.13') and extra == 'all'
74
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.14') and extra == 'all'
75
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.10') and extra == 'all'
76
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.11') and extra == 'all'
77
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.12') and extra == 'all'
78
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.13') and extra == 'all'
79
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.14') and extra == 'all'
80
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.10') and extra == 'all'
81
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.11') and extra == 'all'
82
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.12') and extra == 'all'
83
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.13') and extra == 'all'
84
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.14') and extra == 'all'
85
+ Provides-Extra: pandas
86
+ Requires-Dist: openpyxl==3.1.*; extra == 'pandas'
87
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.10') and extra == 'pandas'
88
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.11') and extra == 'pandas'
89
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.12') and extra == 'pandas'
90
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.13') and extra == 'pandas'
91
+ Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.14') and extra == 'pandas'
92
+ Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.10') and extra == 'pandas'
93
+ Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.11') and extra == 'pandas'
94
+ Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.12') and extra == 'pandas'
95
+ Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.13') and extra == 'pandas'
96
+ Requires-Dist: pandas<3,>=2.3.3; (python_version == '3.14') and extra == 'pandas'
97
+ Provides-Extra: plotly
98
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.10') and extra == 'plotly'
99
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.11') and extra == 'plotly'
100
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.12') and extra == 'plotly'
101
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.13') and extra == 'plotly'
102
+ Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.14') and extra == 'plotly'
103
+ Provides-Extra: polars
104
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.10') and extra == 'polars'
105
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.11') and extra == 'polars'
106
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.12') and extra == 'polars'
107
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.13') and extra == 'polars'
108
+ Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.14') and extra == 'polars'
109
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.10') and extra == 'polars'
110
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.11') and extra == 'polars'
111
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.12') and extra == 'polars'
112
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.13') and extra == 'polars'
113
+ Requires-Dist: polars<2,>=1.25; (python_version == '3.14') and extra == 'polars'
114
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.10') and extra == 'polars'
115
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.11') and extra == 'polars'
116
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.12') and extra == 'polars'
117
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.13') and extra == 'polars'
118
+ Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.14') and extra == 'polars'
119
+ Description-Content-Type: text/markdown
120
+
121
+ <div align="center">
122
+ <h1>ReserveAI SDK</h1>
123
+ <p>
124
+ By <a href="https://www.insureai.co/">insureAI</a>
125
+ </p>
126
+ </div>
127
+
128
+
129
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
130
+ # 📔 Table of Contents
131
+
132
+ - [📔 Table of Contents](#-table-of-contents)
133
+ - [🌟 About the Project](#-about-the-project)
134
+ - [🎯 Features](#-features)
135
+ - [🧰 Install](#-install)
136
+ - [👀 Getting Started](#-getting-started)
137
+ - [⚠️ License](#️-license)
138
+ - [🤝 Contact](#-contact)
139
+ - [💎 Acknowledgements and Citations](#-acknowledgements-and-citations)
140
+
141
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
142
+ ## 🌟 About the Project
143
+
144
+ The ReserveAI SDK (by [insureAI](https://www.insureai.co/)) provides exclusive access to a powerful new approach for
145
+ actuarial reserving. Designed to seamlessly integrate with [ReserveAI](https://reserveai.co/) and move beyond the
146
+ limitations of traditional, static analysis, this toolkit introduces a systematic framework to address the core
147
+ challenges of modern reserving: eliminating subjectivity, managing volatility, and providing a robust, defensible
148
+ basis for your ultimate liability estimates.
149
+
150
+ At its core, the SDK allows you to effortlessly back-test thousands of model variations against your own data. Our
151
+ proprietary evaluation engine assesses each model on multiple dimensions of performance. This provides a holistic and
152
+ uniquely insightful view of model quality that conventional methods fail to capture. This SDK is designed for actuaries
153
+ and risk managers who need to conduct reserve reviews with greater confidence and efficiency.
154
+
155
+ To get started, we recommend visiting our documentation:
156
+ - The [Tutorials](https://sdk.docs.reserveai.co/) provide step-by-step examples on using the SDK.
157
+ - The [FAQ](./docs/sphinx/faq/index.md) has quick answers to common questions.
158
+ - The Methodologies which may be accessed after contacting [support@insureai.co](mailto:support@insureai.co).
159
+
160
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
161
+ ## 🎯 Features
162
+
163
+ - **Run industry-standard actuarial methods**: Run reserving methods such as Cape Cod, Chain Ladder, and
164
+ Bornhuetter–Ferguson (with more methods in active development).
165
+
166
+ - **Triangle data utilities**: Convenient representation of triangle datasets:
167
+ - Switch between long or wide (triangle) views.
168
+ - Plot standard reserving visuals.
169
+ - Run quick diagnostics.
170
+
171
+ - **Data science friendly**: Full interoperability with Pandas and Polars: input data and results can be seamlessly
172
+ converted to and from dataframes. Thus, for more complex workflows, the full Python data science ecosystem can be
173
+ brought to bear by extracting the underlying dataframes.
174
+
175
+ - **Automated model exploration**: Each reserving run evaluates hundreds or thousands of model variations. The
176
+ models are returned for review, comparison, and deeper analysis.
177
+
178
+ - **Rich model diagnostics**: Inspect detailed outputs for chosen models, including triangle projections, cubes, and
179
+ performance metrics, to support robust reserve reviews.
180
+
181
+ - **Server-side computation**: All reserving runs execute on ReserveAI’s secure servers; the SDK provides a
182
+ lightweight yet seamless interface for managing runs and fetching results through the ReserveAI REST API.
183
+
184
+ - **Multiple-line multiple-target support**: Run multiple reserving methods on multiple lines of business and
185
+ multiple target variables simultaneously.
186
+
187
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
188
+ ## 🧰 Install
189
+
190
+ The SDK is available via PyPI, and hence can be installed using your preferred package manager:
191
+
192
+ - Using `pip`:
193
+
194
+ ```bash
195
+ pip install reserveai[all]
196
+ ```
197
+
198
+ - Using `poetry`:
199
+
200
+ ```bash
201
+ poetry add reserveai[all]
202
+ ```
203
+
204
+ - Using `uv`:
205
+
206
+ ```bash
207
+ uv add reserveai[all]
208
+ ```
209
+
210
+ There are several optional dependencies that can be installed using the `[optional]` extras syntax:
211
+
212
+ - `pandas`: Installs the `pandas` dependency (e.g., `uv add reserveai[pandas]`).
213
+ - `polars`: Installs the `polars` dependency.
214
+ - `plotly`: Installs the `plotly` dependency.
215
+
216
+ These can be combined, e.g., `reserveai[polars,plotly]`. Use `reserveai[all]` to install all optional dependencies.
217
+
218
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
219
+ ## 👀 Getting Started
220
+
221
+ To use the SDK against the ReserveAI API, you'll need ReserveAI client credentials. To obtain these, please contact
222
+ us at [support@insureai.co](mailto:support@insureai.co). Don't have credentials yet? Not a problem — the notebooks in
223
+ the [tutorials and recipes](https://sdk.docs.reserveai.co/) section that show how to get started with
224
+ the SDK are already pre-rendered!
225
+
226
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
227
+ ## ⚠️ License
228
+
229
+ The ReserveAI SDK is distributed under the Apache License 2.0; see `LICENSE.txt` for more information. (That license
230
+ applies only to the SDK code; it does not grant any rights to insureAI's proprietary APIs, algorithms, or platforms.)
231
+
232
+ The use of the API (via the SDK, or directly) is subject to the [API Terms of Use](TODO).
233
+
234
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
235
+ ## 🤝 Contact
236
+
237
+ We are not actively accepting contributions at this time. However, if you encounter a bug, have a question, or wish to
238
+ report a security vulnerability, please reach out to us at [support@insureai.co](mailto:support@insureai.co).
239
+
240
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
241
+ ## 💎 Acknowledgements and Citations
242
+
243
+ We thank the Casualty Actuarial Society (CAS), Swiss Re, and SME data providers for making datasets available that aided the development of this SDK. Full data attributions are available in [The Actuary and IBNR Techniques: A Machine Learning Approach](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2704364) by Balona and Richman.
244
+
245
+
246
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
@@ -0,0 +1,126 @@
1
+ <div align="center">
2
+ <h1>ReserveAI SDK</h1>
3
+ <p>
4
+ By <a href="https://www.insureai.co/">insureAI</a>
5
+ </p>
6
+ </div>
7
+
8
+
9
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
10
+ # 📔 Table of Contents
11
+
12
+ - [📔 Table of Contents](#-table-of-contents)
13
+ - [🌟 About the Project](#-about-the-project)
14
+ - [🎯 Features](#-features)
15
+ - [🧰 Install](#-install)
16
+ - [👀 Getting Started](#-getting-started)
17
+ - [⚠️ License](#️-license)
18
+ - [🤝 Contact](#-contact)
19
+ - [💎 Acknowledgements and Citations](#-acknowledgements-and-citations)
20
+
21
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
22
+ ## 🌟 About the Project
23
+
24
+ The ReserveAI SDK (by [insureAI](https://www.insureai.co/)) provides exclusive access to a powerful new approach for
25
+ actuarial reserving. Designed to seamlessly integrate with [ReserveAI](https://reserveai.co/) and move beyond the
26
+ limitations of traditional, static analysis, this toolkit introduces a systematic framework to address the core
27
+ challenges of modern reserving: eliminating subjectivity, managing volatility, and providing a robust, defensible
28
+ basis for your ultimate liability estimates.
29
+
30
+ At its core, the SDK allows you to effortlessly back-test thousands of model variations against your own data. Our
31
+ proprietary evaluation engine assesses each model on multiple dimensions of performance. This provides a holistic and
32
+ uniquely insightful view of model quality that conventional methods fail to capture. This SDK is designed for actuaries
33
+ and risk managers who need to conduct reserve reviews with greater confidence and efficiency.
34
+
35
+ To get started, we recommend visiting our documentation:
36
+ - The [Tutorials](https://sdk.docs.reserveai.co/) provide step-by-step examples on using the SDK.
37
+ - The [FAQ](./docs/sphinx/faq/index.md) has quick answers to common questions.
38
+ - The Methodologies which may be accessed after contacting [support@insureai.co](mailto:support@insureai.co).
39
+
40
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
41
+ ## 🎯 Features
42
+
43
+ - **Run industry-standard actuarial methods**: Run reserving methods such as Cape Cod, Chain Ladder, and
44
+ Bornhuetter–Ferguson (with more methods in active development).
45
+
46
+ - **Triangle data utilities**: Convenient representation of triangle datasets:
47
+ - Switch between long or wide (triangle) views.
48
+ - Plot standard reserving visuals.
49
+ - Run quick diagnostics.
50
+
51
+ - **Data science friendly**: Full interoperability with Pandas and Polars: input data and results can be seamlessly
52
+ converted to and from dataframes. Thus, for more complex workflows, the full Python data science ecosystem can be
53
+ brought to bear by extracting the underlying dataframes.
54
+
55
+ - **Automated model exploration**: Each reserving run evaluates hundreds or thousands of model variations. The
56
+ models are returned for review, comparison, and deeper analysis.
57
+
58
+ - **Rich model diagnostics**: Inspect detailed outputs for chosen models, including triangle projections, cubes, and
59
+ performance metrics, to support robust reserve reviews.
60
+
61
+ - **Server-side computation**: All reserving runs execute on ReserveAI’s secure servers; the SDK provides a
62
+ lightweight yet seamless interface for managing runs and fetching results through the ReserveAI REST API.
63
+
64
+ - **Multiple-line multiple-target support**: Run multiple reserving methods on multiple lines of business and
65
+ multiple target variables simultaneously.
66
+
67
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
68
+ ## 🧰 Install
69
+
70
+ The SDK is available via PyPI, and hence can be installed using your preferred package manager:
71
+
72
+ - Using `pip`:
73
+
74
+ ```bash
75
+ pip install reserveai[all]
76
+ ```
77
+
78
+ - Using `poetry`:
79
+
80
+ ```bash
81
+ poetry add reserveai[all]
82
+ ```
83
+
84
+ - Using `uv`:
85
+
86
+ ```bash
87
+ uv add reserveai[all]
88
+ ```
89
+
90
+ There are several optional dependencies that can be installed using the `[optional]` extras syntax:
91
+
92
+ - `pandas`: Installs the `pandas` dependency (e.g., `uv add reserveai[pandas]`).
93
+ - `polars`: Installs the `polars` dependency.
94
+ - `plotly`: Installs the `plotly` dependency.
95
+
96
+ These can be combined, e.g., `reserveai[polars,plotly]`. Use `reserveai[all]` to install all optional dependencies.
97
+
98
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
99
+ ## 👀 Getting Started
100
+
101
+ To use the SDK against the ReserveAI API, you'll need ReserveAI client credentials. To obtain these, please contact
102
+ us at [support@insureai.co](mailto:support@insureai.co). Don't have credentials yet? Not a problem — the notebooks in
103
+ the [tutorials and recipes](https://sdk.docs.reserveai.co/) section that show how to get started with
104
+ the SDK are already pre-rendered!
105
+
106
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
107
+ ## ⚠️ License
108
+
109
+ The ReserveAI SDK is distributed under the Apache License 2.0; see `LICENSE.txt` for more information. (That license
110
+ applies only to the SDK code; it does not grant any rights to insureAI's proprietary APIs, algorithms, or platforms.)
111
+
112
+ The use of the API (via the SDK, or directly) is subject to the [API Terms of Use](TODO).
113
+
114
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
115
+ ## 🤝 Contact
116
+
117
+ We are not actively accepting contributions at this time. However, if you encounter a bug, have a question, or wish to
118
+ report a security vulnerability, please reach out to us at [support@insureai.co](mailto:support@insureai.co).
119
+
120
+ <!-- -------------------------------------------------------------------------------------------------------------- -->
121
+ ## 💎 Acknowledgements and Citations
122
+
123
+ We thank the Casualty Actuarial Society (CAS), Swiss Re, and SME data providers for making datasets available that aided the development of this SDK. Full data attributions are available in [The Actuary and IBNR Techniques: A Machine Learning Approach](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2704364) by Balona and Richman.
124
+
125
+
126
+ <!-- -------------------------------------------------------------------------------------------------------------- -->