数据科学定价
用平台精算方法库做定价模型:GLM 和费率相对数、GAM、梯度提升树、神经网络、SHAP 解释、提升图和基尼系数、交叉验证、freMTPL2 的模型比较。
官方技能第 1 版 · 2026/11/14 发布这是旧版本
- 官方技能,由智元数据编写和维护
- 只调用智元数据的 REST 接口
- 1 个取数脚本,只用 Python 3 自带的库
- API Key 从环境变量 WI_API_KEY 读取
- 依赖的数据集
- 2
- 一次对话
- —
- 安装次数
- 6
- 近 7 天调用
- 0
01怎么用
三步,让你的 Agent 用上这些数据
安装和设置只做一次。以后直接向你的 Agent 提问就行。
01
发安装语句
复制页头的安装语句,发给 你的 Agent。它会下载技能,装进自己的技能目录。可以在页头切换你用的 Agent。
02
设置 API Key
在终端里运行下面的命令,再启动 你的 Agent。
export WI_API_KEY=你的 API Key
创建 API Key03
直接提问
03技能内容
装进 Agent 的,全在这里
SKILL.md 可以看预览,也可以看原文。参考文件由平台按当前数据生成,需要时才读。
- 常驻约 368 token
- name 和 description,Agent 一直带着
- 触发后约 2,265 token
- 用到这个技能时读入 SKILL.md 正文
- 按需约 12,206 token
- 需要时才读参考文件、运行脚本
SKILL.md
98 行 · 约 2,633 token · 触发后读入--- name: actuarial-ds-pricing description: 数据科学定价和统计建模,用平台精算方法库 wi_actuarial 里对过标准答案的方法:广义线性模型(泊松、伽马、Tweedie、负二项、logistic、多项 logit)的拟合、检验和费率相对数,偏移量和风险暴露,过度离散,交互作用,正则化(岭回归、Lasso、弹性网),样条和 GAM,混合模型和 BLUP 信度,梯度提升树(GBM、XGBoost 的一步)、随机森林、回归树和分类树,神经网络和 CANN,模型解释(SHAP、PDP、置换重要性),模型检验(提升图、双提升图、基尼系数、校准、交叉验证),freMTPL2 法国车险数据的模型比较,主成分、聚类、K 近邻。用户说"GLM""费率相对数""风险因子""偏移量""泊松回归""Tweedie""GAM""梯度提升树""随机森林""神经网络定价""SHAP""基尼系数""提升图""交叉验证""freMTPL2""回归诊断"时使用。传统费率厘定(费率指示、趋势、信度)用 actuarial-pc,时间序列用 actuarial-risk,人身险用 actuarial-life。通过智元数据 World Insight 的 REST 接口取数,需要环境变量 WI_API_KEY。 ---
数据科学定价
用平台的精算方法库做 GLM、GAM、提升树、神经网络等定价模型和统计建模。方法库里这一部分有 7 个方法族、50 多个方法,每个方法都对过教材例题、闭式解或独立的开源库。你的工作是:找对方法,填对参数(包括用户自己的数据),运行,核对,再说清楚。
开始前
- 所有命令都在本技能的目录里运行:
python3 scripts/wi.py ...。计算用 run_python 写 Python 代码,方法库wi_actuarial已经装好。 - 脚本从环境变量
WI_API_KEY读取 API Key。没有设置时,请用户先设置,不要猜。 - 取数据会扣点,脚本会打印扣了多少。查方法、运行方法不扣点。
- 方法库的用法(查方法、参数的规则、结果的格式、怎么用平台的数据)见
references/library.md。第一次用时读它。做过的例子见references/examples.md。字段说明见references/datasets.md,查询的写法见references/query.md。
步骤
- 弄清问题。 写下目标(出险频率、案均赔款、纯保费、二分类),因子,风险暴露(偏移量),分布族和连接函数,用户要的量(相对数、偏差、基尼系数、AIC)。缺的条件先用方法的默认值,回答里写明。
- 查方法。 在一次 run_python 里查几个关键词,并读最可能的方法的说明:
``python import wi_actuarial as wa for w in ["GLM", "相对数"]: for m in wa.find(w): print(m["id"], m["title"], "|", m["question"]) print(wa.describe("glm.glm_fit")) ``
按下面的"方法族地图"决定先查哪一族。
- 决定数据。 很多方法有一个
data参数,可以选内置的数据,也可以选"自己输入": - 用户给了自己的数(例如几组的风险暴露和出险次数),选自己输入的选项,把数按
describe的说明传进去。例如glm.glm_fit用data="custom",再传counts、exposure、f1、f2(因子水平用 1、2、3 编码,1 是基准水平)。 - 用户问 freMTPL2 法国车险数据,用
validation.fremtpl2_benchmark。这是真实的公开数据。 - 用户没有给数据,只问方法怎么用,用内置的演示数据,并写"演示数据,不是真实数据"。不要把演示数据的结果当成用户问的真实数据集的结果。
- 用平台的数据:先
wi.py query ... --save,再整理成方法要的列表(见"用平台的数据")。 - 运行。 打印
summary、inputs、data、notes和要用的表(例如系数表)。 - 核对。 逐项看:
inputs里的数据、因子、分布族和用户说的一样吗?data.kind是什么?演示数据和真实数据不能混。- 相对数的方向对吗?例如基准水平是 1,旧车的相对数大于 1 表示风险更高。
- 可以用最简单的方法核对一次。例如两个因子、没有交互项的饱和程度低的模型,可以用 statsmodels 直接拟合一次对比。
- 回答。 见"怎么回答"。
方法族地图
| 方法族(family) | 典型问题 | 先看这些方法 |
|---|---|---|
广义线性模型 glm | GLM 的拟合、偏差、似然比、Wald、AIC,费率表和相对数,过度离散,交互作用,logistic,线性回归和诊断,正则化,样条,混合模型和信度 | glm.glm_fit、glm.rating_relativities、glm.overdispersion、glm.interactions、glm.logistic、glm.regularized_regression、glm.mixed_model、glm.credibility_glm、glm.lift_gini |
广义加性模型 gam | 连续变量(例如年龄)的平滑曲线,GAM 和分段 GLM 的比较 | gam.poisson_gam、gam.additive_model |
提升树 boosting | 定价用的梯度提升树(泊松、伽马、Tweedie),XGBoost 的增益和叶子权重 | boosting.gbm_pricing、boosting.newton_split、boosting.least_squares_boosting |
神经网络 neural | 定价用的前馈网络,CANN,平衡性校正 | neural.frequency_net、neural.cann、neural.balance_property |
模型解释 explainability | SHAP,部分依赖,置换重要性 | explainability.tree_shap、explainability.partial_dependence、explainability.variable_importance |
模型检验 validation | 几种模型在同一个测试集上比较,freMTPL2 的比较,校准,交叉验证 | validation.fremtpl2_benchmark、validation.model_comparison、validation.calibration、validation.cross_validation |
统计学习 statistical_learning | 回归树、分类树和剪枝,随机森林,K 近邻,主成分,聚类,分类的评估 | statistical_learning.regression_tree、statistical_learning.bagging_random_forest、statistical_learning.pca、statistical_learning.kmeans、statistical_learning.classification_metrics |
表里的方法只是起点。同一族里还有别的方法,用 wa.find 查。
用平台的数据
| 数据 | 数据集 | 怎么用 |
|---|---|---|
| 健康险保单和理赔 | health-policy、health-claim | 演示数据,不是真实数据。rating.glm_relativities 直接用它们算纯保费的相对数。要自己建模时,先取数据,按因子汇总成每格的风险暴露、次数、金额,再传给方法 |
| freMTPL2 法国车险数据 | 不在平台的数据集里 | validation.fremtpl2_benchmark 内置测试集的样本和离线的预测 |
汇总平台数据再建模的写法:
import json
from collections import defaultdict
d = json.load(open("data/policies.json"))
k = [c["key"] for c in d["columns"]]
cells = defaultdict(lambda: [0.0, 0])
for r0 in d["rows"]:
r = dict(zip(k, r0))
c = cells[(r["因子1"], r["因子2"])] # 换成真实的字段名
c[0] += r["风险暴露"]; c[1] += r["次数"]怎么回答
- 结论:用户问的数(相对数、偏差、基尼系数等)。相对数写清基准水平。
- 方法:方法的名称和标识(例如"GLM 拟合 glm.glm_fit"),分布族、连接函数、偏移量。
- 输入:实际用的数据和参数(来自
inputs)。 - 数据:数据的性质和出处(来自
data)。演示数据写"演示数据,不是真实数据"。 - 说明:
notes里的假设和限制。模型的比较写测试集的大小和随机数种子。 - 代码:把最后一次运行的代码原样附上,方便复算。
不要做
- 不要心算模型的数。所有数字都来自代码的输出,包括相对数的换算(exp(系数))。
- 不要编造方法标识。只用
wa.find查到的方法。方法库里没有合适的方法时,用 statsmodels、scikit-learn 自己写,并说明这不是方法库里测试过的方法。 - 不要用演示数据的结果回答真实数据集的问题。例如用户问 freMTPL2,就不要用
validation.model_comparison的演示数据。 - 不要把模型给出的相对数、纯保费说成最终价格。最终价格由精算和核保人员决定。
和别的技能的关系
- 只用健康险的保单和理赔演示数据算 GLM 相对数时,
actuarial-rating也能做。本技能的模型更全,也能用用户自己的数据。 - 费率指示、趋势、信度、分类相对数的传统方法用
actuarial-pc。时间序列预测用actuarial-risk。

