The Data Space#
Input data shared by every by-policy projection.
The seven 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/cancer/, 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
Cancer_JP_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 |
mort_table_file |
mort_table() |
mort_table.csv |
incidence_table_file |
incidence_table() |
incidence_table.csv |
sex_factor_file |
sex_factor_table() |
sex_factor_table.csv |
survival_table_file |
survival_table() |
survival_table.csv |
lapse_table_file |
lapse_table() |
lapse_table.csv |
hosp_stay_file |
hosp_stay_table() |
hosp_stay_table.csv |
The mortality table is a construction, not a copy
mort_table.csv is a [std] construction. 第三分野標準生命表2018 is published by
日本アクチュアリー会 at a stable public URL, free and in full, and can be retrieved and checked by
anyone — but the publisher’s site terms prohibit reproduction, alteration and
transmission to third parties without written consent, so this library must not ship a
copy of it. What is shipped instead is the library-wide [std] construction built on
the union of the individual rates jplib’s products quote and attribute — 22 anchor
rows across the two sexes, 男 q(40) = 0.00076 among them, and the terminal rows
男 q(116) = 1.00000 and 女 q(118) = 1.00000 — graduated log-linearly (geometrically)
between adjacent anchors, q(x) = q(a) (q(b)/q(a))^((x-a)/(b-a)). That graduation
reproduces every quoted rate exactly, which is the property a fitted curve does not
have, and it is locally the Gompertz family the publisher itself uses at the older ages.
Every product that reads this table ships the same file, so one cell carries one value
and one provenance string library-wide; each row’s provenance says whether it is an
anchor or an interpolation. The model reproduces the quoted rates exactly and asserts
nothing else about the IAJ table. The copy here is cut to the ages this model can
reach — male 20-116, female 20-118 — which are the issue-age range and the two terminal
ages. Drop a licensed extract in over the same schema — sex, age,
mort_rate — and no formula changes.
incidence_table.csv is the opposite case and the contrast is the point: the
age-banded 罹患率 of 全国がん登録 are public, freely downloadable and reproduced here verbatim
with their attribution in provenance. What is [std] about the incidence basis is
only the sex split, which lives in sex_factor_table.csv as the two sourced ratios
the notes interpolate between.
hosp_stay_table.csv carries two bases: all_ages, the sourced 14.4-day mean stay
used in the base run, and age_band, the sourced four-band age gradient that the
hosp_age_gradient switch reads instead.
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.
- model_point_table()[source]#
The model point table, read from model_point_table.csv.
Indexed by
point_id;point_id = 1is the technical notes’ worked-example anchor cell.premiumis an input on this product in a stronger sense than on any other in the library: no carrier publishes a rate table for a cancer main contract and the 算出方法書 is not a published document, so every premium in the table is a [std] modelling value.
- mort_table()[source]#
The [std] mortality table by sex and age, from mort_table.csv.
A log-linear graduation of the 第三分野標準生命表2018 rates the library quotes and attributes, 男 q(40) = 0.00076 among them, not a copy of that table; see the Space docstring for why the distinction is load-bearing. Read as the valuation-basis rate, which
Projection.mort_ratescales bymort_be_factor.
- incidence_table()[source]#
全国がん登録 first-diagnosis 罹患率 by five-year age band, from incidence_table.csv.
Both sexes combined, all sites C00-C96, crude rate per 100,000, 2023 diagnoses. Indexed by
band_start; the last row is the 100+ open band. These are sourced values reproduced with their attribution, in deliberate contrast tomort_table().
- sex_factor_table()[source]#
The two sourced male / both-sexes incidence ratios, from sex_factor_table.csv.
72.92 / 132.21 at the 35-39 band midpoint 37.5 and 2,684.60 / 1,948.71 at the 70-74 band midpoint 72.5.
Projection.sex_factorinterpolates linearly in age between them; replacing this two-row file and the interpolation with the by-sex age-band grid from the same workbook is the first thing a serious user should do.
- survival_table()[source]#
全国がん登録 5年相対生存率 by sex, from survival_table.csv.
All sites, 2018 diagnoses. Relative survival nets out background mortality, so it converts into an excess hazard added to the baseline rather than a replacement for it;
Projection.mu_exdoes that conversion.
- lapse_table()[source]#
The [std] annual lapse rates by policy year, from lapse_table.csv.
Shared unchanged with the medical chassis so the two third-sector products do not disagree about persistency. The only published industry-wide figure is a sum-assured-weighted 解約・失効率 on a book dominated by death cover, which a がん保険 with no sum assured cannot enter; the shipped curve averages 5.5% over its first ten years against that 5.6%.
- hosp_stay_table()[source]#
患者調査 mean stay in days for 悪性新生物 discharges, from hosp_stay_table.csv.
Two bases in one file, selected by the
basiscolumn:all_agesis the sourced 14.4-day figure the base run uses, andage_bandis the sourced four-band gradient thatProjection.hosp_age_gradientswitches to.