The Data Space#
Input data shared by every by-policy projection.
The eight input CSVs are read here, once per model, and referenced from
Projection as data. Projection is
parameterized by point_id, so each Projection[N] is a separate ItemSpace with
its own cells cache; if the readers lived there, every model point would re-read every
file. Holding them in an unparameterized Space reads each file once no matter how many
policies are projected.
Inputs are external files: plain CSVs in the model folder’s parent directory,
products/guaranteed_ul/, rather than data stored inside the model. The model
folder therefore holds nothing but formulas – no _data/, no IOSpec, no embedded
values – so a diff of the model shows logic changes only. This follows
annuallife.TradLife_A; contrast basiclife.BasicTerm_S, which keeps its inputs
inside the model through modelx’s IOSpec machinery.
The consequence worth knowing: the model is not portable on its own. Copying the
ULSG_US_S folder without its parent’s CSVs produces a model that reads and
then fails on first evaluation.
input_dir() resolves the directory from _model.path.parent at run time, so
the model works wherever the repository is checked out. Each table has a filename
Reference and a reader Cells:
Reference |
Cells |
File |
|---|---|---|
model_point_file |
model_point_table() |
model_point_table.csv |
coi_rates_file |
coi_rates() |
coi_rates.csv |
corridor_file |
corridor_factors() |
corridor_factors.csv |
mort_table_file |
mort_table() |
mort_table.csv |
class_factor_file |
class_factor_table() |
class_factor_table.csv |
lapse_table_file |
lapse_table() |
lapse_table.csv |
surr_charge_file |
surr_charge_table() |
surr_charge_table.csv |
rop_file |
rop_table() |
rop_table.csv |
coi_rates.csv carries the guaranteed maximum annual rate per $1,000, by
attained age; Projection.coi_rate_guar divides it by twelve, which is the notes’
simple-twelfth conversion and one of their named pitfalls. The current scale is that
rate times Projection.coi_curr_factor (65%) and the shadow scale times
Projection.coi_sg_factor (55%), because no carrier publishes either [std].
Both mortality tables are small illustrative ones [std], not published tables:
the notes forbid hard-coding the licensed 2017 CSO and 2015 VBT families, so
coi_rates.csv ships a Perks curve fitted to the two figures the notes state – the
8.615 per $1,000 per month guaranteed maximum at attained age 85, and a solved level
lifetime no-lapse premium near $10,800 for the anchor cell – and mort_table.csv
ships the same curve at 72% of the guaranteed basis. To swap in a licensed basis,
replace a file with a same-schema one, or point its filename Reference at a different
name, then clear the cache. No formula changes.
Cells Descriptions#
- input_dir()[source]#
The directory holding the input CSVs: the model folder’s parent.
Inputs are external files, not data stored inside the model, so the model folder is pure formulas. The path is resolved at run time from where the model was read, following
annuallife.TradLife_A.
- coi_rates()[source]#
Guaranteed maximum annual COI rates, read from coi_rates.csv.
Per $1,000 of net amount at risk, keyed by sex, rate class and attained age. The monthly rate is the annual rate divided by twelve [std] structure; [R3] requires the guaranteed maxima to be stated in the policy, and [REG-R17] names the 2017 CSO family the notes point at.
- corridor_factors()[source]#
The GPT corridor factor table by attained age, read from corridor_factors.csv.
- mort_table()[source]#
The best-estimate annual mortality table by attained age, read from mort_table.csv.