传统保险与水滴互助保险对比的精算模型如下:
public class YangGuang {
static double[] CL = new double[] { 0.000722, 0.000603, 0.000499, 0.000416, 0.000358, 0.000323, 0.000309, 0.000308,
0.000311, 0.000312, 0.000312, 0.000312, 0.000313, 0.00032, 0.000336, 0.000364, 0.000404, 0.000455, 0.000513,
0.000572, 0.000621, 0.000661, 0.000692, 0.000716, 0.000738, 0.000759, 0.000779, 0.000795, 0.000815,
0.000842, 0.000881, 0.000932, 0.000994, 0.001055, 0.001121, 0.001194, 0.001275, 0.001367, 0.001472,
0.001589, 0.001715, 0.001845, 0.001978, 0.002113, 0.002255, 0.002413, 0.002595, 0.002805, 0.003042,
0.003299, 0.00357, 0.003847, 0.004132, 0.004434, 0.004778, 0.005203, 0.005744, 0.006427, 0.00726, 0.008229,
0.009313, 0.01049, 0.011747, 0.013091, 0.014542, 0.016134, 0.017905, 0.019886, 0.022103, 0.024571, 0.027309,
0.03034, 0.033684, 0.037371, 0.04143, 0.045902, 0.050829, 0.056262, 0.062257, 0.068871, 0.076187, 0.084224,
0.093071, 0.1028, 0.113489, 0.125221, 0.13808, 0.152157, 0.167543, 0.184333, 0.202621, 0.2225, 0.244059,
0.267383, 0.292544, 0.319604, 0.348606, 0.379572, 0.412495, 0.447334, 0.48401, 0.522397, 0.562317, 0.603539,
0.64577, 1 };
static double[] CI = new double[] { 0.00035, 0.000312, 0.000276, 0.000244, 0.000229, 0.000223, 0.000217, 0.000213,
0.00021, 0.000209, 0.00021, 0.000212, 0.000217, 0.000224, 0.000232, 0.000244, 0.000257, 0.000274, 0.000293,
0.000315, 0.00034, 0.000368, 0.000399, 0.000434, 0.000472, 0.000514, 0.00056, 0.00061, 0.000663, 0.000721,
0.000783, 0.00085, 0.000924, 0.001007, 0.001104, 0.001218, 0.001351, 0.001508, 0.001691, 0.001905, 0.002151,
0.002434, 0.002757, 0.003123, 0.003535, 0.003997, 0.004512, 0.005084, 0.005715, 0.006406, 0.007155, 0.00796,
0.008818, 0.009726, 0.010681, 0.011682, 0.012725, 0.013809, 0.01493, 0.016086, 0.017274, 0.018492, 0.019737,
0.021006, 0.022298, 0.023845, 0.025712, 0.027942, 0.029876, 0.031957, 0.034692, 0.036997, 0.039483,
0.041442, 0.043501, 0.045666, 0.047943, 0.050338, 0.052172, 0.05409, 0.056377, 0.058783, 0.061314, 0.06346,
0.065722, 0.068104, 0.070612, 0.073252, 0.07603, 0.078952, 0.081576, 0.084315, 0.087175, 0.09016, 0.093276,
0.096528, 0.099922, 0.103466, 0.107164, 0.111026, 0.114981, 0.11914, 0.123482, 0.128017, 0.132753, 0.1377
};
static double[] KX = new double[] { 2.00, 8.47, 10.91, 11.94, 12.57,
13.10, 13.92, 14.97, 15.78, 16.73,
17.66, 18.53, 19.30, 19.92, 20.36,
20.58, 20.52, 20.15, 19.52, 18.75,
18.01, 17.53, 17.49, 17.98, 18.96,
20.26, 21.68, 23.04, 24.23, 25.25,
26.18, 27.15, 28.23, 29.48, 30.92,
32.52, 34.28, 36.18, 38.21, 40.31,
42.43, 44.49, 46.44, 48.23, 49.86,
51.36, 52.80, 54.23, 55.68, 57.15,
58.57, 59.91, 61.13, 62.23, 63.16,
63.90, 64.42, 64.71, 64.80, 64.73,
64.58, 64.39, 64.24, 64.13, 64.02,
63.84, 63.51, 63.02, 62.36, 61.55,
60.61, 59.56, 58.41, 57.17, 55.86,
54.47, 53.02, 51.54, 50.04, 48.57,
47.14, 45.78, 44.50, 43.32, 42.23,
41.21, 40.25, 39.31, 38.37, 37.40,
36.40, 35.37, 34.31, 33.26, 31.87,
30.19, 28.65, 27.25, 25.97, 24.81,
23.75, 22.80, 21.95, 21.20, 20.55, 13.77
};
static int type = 1;
static double GP = 0;
static double NB = 0;
static double NP = 0;
static double SA = 0;
static double vvv = 0.035;
static double vv = 1 / (1 + vvv);
public static double Qd(int x) {
return CL[x];
}
public static double QDD(int x) {
if( type == 0 ) {
if( x
return CI[x] * (0.0382 / 0.0783);
} else {
return CI[x] * 0.6;
}
} else if( type == 1 ) {
return CI[x];
} else {
return 0;
}
}
public static double DB(double gpx, int t) {
return Math.min(NP, t+1) * gpx;
}
public static double v(double c) {
return Math.pow(vv, c);
}
public static double K(int x) {
return KX[x] / 100;
}
public static double p(int x,int t) {
if( t == 0 ) {
return 1;
}
double res =1 ;
for( int k = 0; k
double r = 1 - Qd(x+k) * (1-K(x+k)) - QDD(x+k);
res = res * r;
}
return res;
}
public static double P1(int gpx,int x) {
return 0.5 * QDD(x) * (DB(gpx, 0) * v(0.25) + SA * v(0.75) );
}
public static double P2(int x) {
double res = 0;
for( int t = 1; t
double now = SA * Math.min(3, t+1) * p(x,t) * QDD(x+t) * v(t+0.5);
res = res + now;
}
return res;
}
public static double P3(int gpx,int x) {
double res = 0;
for( int t = 0; t
double now = DB(gpx, t) * p(x,t) * Qd(x+t) * (1-K(x+t)) * v(t+0.5);
res = res + now;
}
return res;
}
public static double P4(int x) {
double res = 0;
for( int t = 0; t
double now = p(x,t) * v(t);
res = res + now;
}
return res;
}
public static void main(String[] args) {
// 默认都是男性
int x = 30; // 年龄
type = 0; //0 代表A款,保恶性肿瘤
//1 代表B款,保包括恶性肿瘤在内,最常见的6种终疾
SA = 250000; // 保额
NP = 1; // 缴费年限,
NB = 70 - x; // 保障年限,保障到70岁,保障40年
vvv = 0.035; // 预定利率,这个值越高,保费越低
vv = 1 / (1 + vvv);
for( int gpx = 0; gpx
double r1 = P1(gpx,x);
double r2 = P2(x);
double r3 = P3(gpx,x);
double r4 = P4(x);
double r = (r1+r2+r3)/r4;
if( Math.abs(r - gpx)
System.out.println("第一年疾病的保障成本: " + r1);
System.out.println("第一年以后疾病的保障成本: " + r2);
System.out.println("身故保障成本: " + r3);
System.out.println("累计缴费年金因子: " + r4);
System.out.println("年缴保费: " + gpx);
break;
}
}
}
}
public class Shuidi {
static double[] CL = new double[] { 0.000722, 0.000603, 0.000499, 0.000416, 0.000358, 0.000323, 0.000309, 0.000308,
0.000311, 0.000312, 0.000312, 0.000312, 0.000313, 0.00032, 0.000336, 0.000364, 0.000404, 0.000455, 0.000513,
0.000572, 0.000621, 0.000661, 0.000692, 0.000716, 0.000738, 0.000759, 0.000779, 0.000795, 0.000815,
0.000842, 0.000881, 0.000932, 0.000994, 0.001055, 0.001121, 0.001194, 0.001275, 0.001367, 0.001472,
0.001589, 0.001715, 0.001845, 0.001978, 0.002113, 0.002255, 0.002413, 0.002595, 0.002805, 0.003042,
0.003299, 0.00357, 0.003847, 0.004132, 0.004434, 0.004778, 0.005203, 0.005744, 0.006427, 0.00726, 0.008229,
0.009313, 0.01049, 0.011747, 0.013091, 0.014542, 0.016134, 0.017905, 0.019886, 0.022103, 0.024571, 0.027309,
0.03034, 0.033684, 0.037371, 0.04143, 0.045902, 0.050829, 0.056262, 0.062257, 0.068871, 0.076187, 0.084224,
0.093071, 0.1028, 0.113489, 0.125221, 0.13808, 0.152157, 0.167543, 0.184333, 0.202621, 0.2225, 0.244059,
0.267383, 0.292544, 0.319604, 0.348606, 0.379572, 0.412495, 0.447334, 0.48401, 0.522397, 0.562317, 0.603539,
0.64577, 1 };
static double[] CI = new double[] { 0.00035, 0.000312, 0.000276, 0.000244, 0.000229, 0.000223, 0.000217, 0.000213,
0.00021, 0.000209, 0.00021, 0.000212, 0.000217, 0.000224, 0.000232, 0.000244, 0.000257, 0.000274, 0.000293,
0.000315, 0.00034, 0.000368, 0.000399, 0.000434, 0.000472, 0.000514, 0.00056, 0.00061, 0.000663, 0.000721,
0.000783, 0.00085, 0.000924, 0.001007, 0.001104, 0.001218, 0.001351, 0.001508, 0.001691, 0.001905, 0.002151,
0.002434, 0.002757, 0.003123, 0.003535, 0.003997, 0.004512, 0.005084, 0.005715, 0.006406, 0.007155, 0.00796,
0.008818, 0.009726, 0.010681, 0.011682, 0.012725, 0.013809, 0.01493, 0.016086, 0.017274, 0.018492, 0.019737,
0.021006, 0.022298, 0.023845, 0.025712, 0.027942, 0.029876, 0.031957, 0.034692, 0.036997, 0.039483,
0.041442, 0.043501, 0.045666, 0.047943, 0.050338, 0.052172, 0.05409, 0.056377, 0.058783, 0.061314, 0.06346,
0.065722, 0.068104, 0.070612, 0.073252, 0.07603, 0.078952, 0.081576, 0.084315, 0.087175, 0.09016, 0.093276,
0.096528, 0.099922, 0.103466, 0.107164, 0.111026, 0.114981, 0.11914, 0.123482, 0.128017, 0.132753, 0.1377
};
static double[] KX = new double[] { 2.00, 8.47, 10.91, 11.94, 12.57, 13.10, 13.92, 14.97, 15.78, 16.73, 17.66,
18.53, 19.30, 19.92, 20.36, 20.58, 20.52, 20.15, 19.52, 18.75, 18.01, 17.53, 17.49, 17.98, 18.96, 20.26,
21.68, 23.04, 24.23, 25.25, 26.18, 27.15, 28.23, 29.48, 30.92, 32.52, 34.28, 36.18, 38.21, 40.31, 42.43,
44.49, 46.44, 48.23, 49.86, 51.36, 52.80, 54.23, 55.68, 57.15, 58.57, 59.91, 61.13, 62.23, 63.16, 63.90,
64.42, 64.71, 64.80, 64.73, 64.58, 64.39, 64.24, 64.13, 64.02, 63.84, 63.51, 63.02, 62.36, 61.55, 60.61,
59.56, 58.41, 57.17, 55.86, 54.47, 53.02, 51.54, 50.04, 48.57, 47.14, 45.78, 44.50, 43.32, 42.23, 41.21,
40.25, 39.31, 38.37, 37.40, 36.40, 35.37, 34.31, 33.26, 31.87, 30.19, 28.65, 27.25, 25.97, 24.81, 23.75,
22.80, 21.95, 21.20, 20.55, 13.77 };
static double GP = 0;
static double NB = 0;
static double NP = 0;
static double vvv = 0;
static double vv = 0;
public static double Qd(int x) {
return CL[x];
}
public static double QDD(int x) {
if (x
return CI[x] * (0.0382 / 0.0783);
} else {
return CI[x] * 0.6;
}
}
public static double v(double c) {
return Math.pow(vv, c);
}
public static double K(int x) {
return KX[x] / 100;
}
public static double p(int x, int t) {
if (t == 0) {
return 1;
}
double res = 1;
for (int k = 0; k
double r = 1 - Qd(x + k) * (1 - K(x + k)) - QDD(x + k);
res = res * r;
}
return res;
}
public static double SA(int x) {
if (x
return 300000;
} else if (x
return 250000;
} else if (x
return 200000;
} else {
return 100000;
}
}
public static double P1(int x) {
return 0.5 * QDD(x) * SA(x) * v(0.75);
}
public static double P2(int x) {
double res = 0;
for (int t = 1; t
double now = SA(x + t) * p(x, t) * QDD(x + t) * v(t + 0.5);
res = res + now;
}
return res;
}
public static double P4(int x) {
double res = 0;
for (int t = 0; t
double now = p(x, t) * v(t);
res = res + now;
}
return res;
}
public static void main(String[] args) {
// 默认都是男性
int x = 18; // 年龄
for( x = 18; x
NP = 50 - x; // 缴费年限,保障到50岁,缴费32年
NB = 50 - x; // 保障年限,保障到50岁,保障32年
vvv = 0.0; // 预定利率,这个值越高,保费越低
vv = 1 / (1 + vvv);
double r1 = P1(x);
double r2 = P2(x);
double r4 = P4(x);
double r = (r1 + r2) / r4;
System.out.println("年龄: " + x + "\t年缴保费: " + r);
}
}
}
欢迎大家验证!