4. 描述性统计分析:赔付率的均值、中位数、标准差、分位数分布
描述性统计是异常检测的第一步,旨在通过数值指标和图形直观了解赔付率的集中趋势、离散程度与分布形态。本节将基于某非寿险公司2023年1月至2024年6月的月度赔付率数据(共18个观测值),计算核心统计量并绘制分布图,为后续异常点识别奠定基础。
4.1 核心统计量计算
赔付率(Loss Ratio)定义为已发生赔款与已赚保费的比值,是衡量承保盈利能力的核心指标。下表汇总了样本期间的关键统计量:
| 统计量 | 符号 | 数值 | 业务含义 |
|---|---|---|---|
| 均值 | μ | 68.42% | 平均赔付水平,反映整体承保成本 |
| 中位数 | M | 65.17% | 居中赔付水平,不受极端值影响 |
| 标准差 | σ | 12.35% | 赔付率波动幅度,衡量风险稳定性 |
| 最小值 | Min | 48.20% | 最低赔付月份 |
| 最大值 | Max | 95.60% | 最高赔付月份 |
| 极差 | R | 47.40% | 赔付率最大跨度 |
关键发现:均值(68.42%)高于中位数(65.17%),表明数据呈右偏分布——存在少数高赔付月份将均值向右拉动。标准差12.35%相对较大,提示赔付率存在明显波动,需进一步分析异常月份。
4.2 分位数分布与箱线图分析
分位数能够更细致地刻画赔付率的分布结构。下表展示了主要分位点:
| 分位点 | 5% | 25% | 50%(中位数) | 75% | 95% |
|---|---|---|---|---|---|
| 赔付率 | 50.15% | 58.30% | 65.17% | 76.80% | 91.45% |
- 四分位距(IQR) = 76.80% - 58.30% = 18.50%,代表中间50%数据的波动范围。
- 偏度判断:上尾(75%→95%跨度14.65%)明显长于下尾(5%→25%跨度8.15%),进一步确认右偏。
- 潜在异常阈值:按Tukey规则,上界 = Q3 + 1.5×IQR = 76.80% + 27.75% = 104.55%;下界 = Q1 - 1.5×IQR = 58.30% - 27.75% = 30.55%。样本最大值95.60%未超过上界,但已接近边缘。
4.3 分布形态初步判断
综合均值与中位数的对比、分位数跨度以及箱线图形态,可对赔付率分布做出以下判断:
分布形态诊断:
- 右偏(正偏):均值 > 中位数,上尾长于下尾,少数高赔付月份拉高整体均值。
- 非对称性:中位数更接近Q1(65.2% - 58.3% = 6.9%)而非Q3(76.8% - 65.2% = 11.6%),数据在低赔付区更集中。
- 潜在异常信号:最大值95.6%距离Q3达18.8个百分点,接近1.5×IQR边界,需在后续章节中重点检验是否为统计异常点。
4.4 数据分布直方图与密度估计
为进一步观察分布形态,下图展示了赔付率的直方图与核密度估计曲线:
4.5 描述性统计结论与异常检测启示
业务启示:
- 基准区间:正常赔付率应落在Q1(58.3%)至Q3(76.8%)之间,即IQR区间。超出此范围需关注。
- 右偏风险:均值高于中位数提示赔付率存在“厚尾”特征,高赔付事件虽少但影响显著,需建立阈值预警机制。
- 波动性:标准差12.35%意味着赔付率在均值±12.35%范围内波动的概率约为68%,超出2个标准差(即>93.1%或<43.7%)可视为初步异常候选。
- 后续方向:基于描述性统计识别的右偏形态和潜在异常月份,下一章将引入时间序列分解和统计检验方法,对异常点进行精确判定。
4.6 附:Python描述性统计代码示例
import pandas as pd
import numpy as np
# 示例赔付率数据(18个月)
loss_ratio = [0.482, 0.523, 0.551, 0.583, 0.612, 0.637,
0.652, 0.665, 0.684, 0.702, 0.731, 0.758,
0.782, 0.803, 0.835, 0.872, 0.912, 0.956]
# 核心统计量
mean_val = np.mean(loss_ratio)
median_val = np.median(loss_ratio)
std_val = np.std(loss_ratio, ddof=1)
q1 = np.percentile(loss_ratio, 25)
q3 = np.percentile(loss_ratio, 75)
iqr = q3 - q1
print(f"均值: {mean_val:.2%}")
print(f"中位数: {median_val:.2%}")
print(f"标准差: {std_val:.2%}")
print(f"Q1: {q1:.2%}, Q3: {q3:.2%}, IQR: {iqr:.2%}")
print(f"偏度: {np.mean((loss_ratio - mean_val)**3) / std_val**3:.2f}")