В этом посте объясняется, как использовать индекс Джини и кривую Лоренца для сравнения моделей оценки рисков для страховых полисов.

введение

Индекс Джини или коэффициент Джини — это статистическая мера распределения, разработанная итальянским статистиком Коррадо Джини в 1912 году. Она используется в качестве меры экономического неравенства, измеряя распределение доходов среди населения.

Индекс Джини представляет собой число от 0 до 1, измеряемое в соответствии с отношением между площадью, заключенной между кривой Лоренца и линией 45 градусов, и площадью всего треугольника (того, который находится ниже линии 45 градусов и площадь которого составляет 0,5). Нулевой коэффициент означает полное равенство, то есть у всех одинаковый доход; Тогда как коэффициент 1 означает абсолютное неравенство, означающее, что у одного человека есть весь доход, а у остальных вообще нет дохода.

Джини — это мера статистической дисперсии, и как таковая она может измерять любой ряд числовых данных, а не только доход, богатство или политический риск. Это индекс, который на самом деле пытается объяснить распространение неопределенности, а оценка риска — это на самом деле неопределенность, которую мы пытаемся уменьшить. Когда мы проверяем результаты моделей оценки риска, мы стремимся к как можно более высокому индексу Джини, то есть неравенству, которое будет максимально отражать предсказание только политики высокого риска.

В примере мы построили две модели оценки риска страховых полисов (в данном случае транспортных средств) и оценили риск группы полисов. Прогноз каждой модели — это значение утверждения каждой политики. После выполнения прогноза мы классифицировали уровень риска каждой политики. Каждая точка на оси X символизирует уровень риска полиса, а каждая точка на оси Y — сумму денег, заявленную группой в реальных деньгах. Группа 10 — это группа, которая спрогнозировала наиболее рискованные полисы с точки зрения фактических требований.

Расчет индекса Джини

Пойдем шаг за шагом. Первым шагом является получение результата двух моделей в предикации. Построенные нами модели показывают группу риска и сумму требования всех полисов в них (в предикации). В итоге мы создали три столбца: первый — рейтинг риска от 1 до 10, второй — сумма денег, которую претендовала группа полисов в одной модели, и второй столбец — то же самое, но результат второго модель.

total=df['side_a'].sum()
df['side_a_cumsum']=df['side_a'].cumsum()
df['side_b_cumsum'] = df['side_b'].cumsum()
df ['side_a_ratio']=df['side_a']/total
df ['side_b_ratio']=df['side_b']/total
df['side_a_ratio_cumsum']= df ['side_a_ratio'].cumsum()
df['side_b_ratio_cumsum']= df ['side_b_ratio'].cumsum()

Приведенный выше код создает относительные столбцы, чтобы рассчитать индекс Джини и сгенерировать линию, которую он будет представлять на диаграмме Лоренца («model_a_ratio_cumsum» и «model_b_ratio_cumsum»). Итак, кадр данных выглядит так:

Следующий код генерирует область, которая будет отображаться на кривой Лоренца для каждого результата модели. Теперь в DataFrame добавлены столбцы.

number_of_risk_level = 10
df['bassline'] = 0.1
counter = 0
for i, row in df.iterrows():
    df.loc[df['risk_level']==counter, 'bassline'] = df['risk_level']/number_of_risk_level
    counter = counter + 1
df.bassline[9]=1
# Area under lorenz by Seenity
df['Area_under_lorenz_model_a'] = 0
row['risk_level'] = row['risk_level'].astype (int)
for i, row in df.iterrows():
    if ((row['risk_level']!=1   & (row['risk_level']<10))):
            level_1 = float(df[df['risk_level']==row['risk_level']-1]['model_a_ratio_cumsum'])
            level_2=float(df[df['risk_level']==row['risk_level']]['model_a_ratio_cumsum'])
            df.loc[row['risk_level']-1,'Area_under_lorenz_model_a'] = (level_1+level_2)/2*0.1
# Area under lorenz by custmer
df['Area_under_lorenz_model_b'] = 0
for i, row in df.iterrows():
    if ((row['risk_level']!=1   & (row['risk_level']<10))):
            level_1 = float(df[df['risk_level']==row['risk_level']-1]['model_b_ratio_cumsum'])
            level_2=float(df[df['risk_level']==row['risk_level']]['model_b_ratio_cumsum'])
            df.loc[row['risk_level']-1,'Area_under_lorenz_model_b'] = (level_1+level_2)/2*0.1

sum_Area_under_lorenz_side_a = df['Area_under_lorenz_model_a'].sum()
sum_Area_under_lorenz_side_b = df['Area_under_lorenz_model_b'].sum()

После расчета площади можно рассчитать индекс Джини для модели (код выше).

# calac gini
# seenity_gini
seenity_area_model_a = 0.5  - sum_Area_under_lorenz_side_a
print ("Area model a: "+str(round(seenity_area_model_a, 8)))
seenity_gini = seenity_area_model_a/ 0.5
print ("Gini model a: "+str(round(seenity_gini*100, 2))+'%')
print ('********************')
# clinet_gini 
clinet_area_model_b = 0.5  - sum_Area_under_lorenz_side_b
print ("Area model b: "+str(round(clinet_area_model_b, 8)))
clinet_gini = clinet_area_model_b/ 0.5
print ("Gini model b: "+str(round(clinet_gini*100, 2))+'%')

И это дает следующие результаты:

Нарисуем кривую Лоренца для каждой модели

df_graph = df[['bassline', 'model_a_ratio_cumsum', 'model_b_ratio_cumsum', 'risk_level', ]]
df_graph.plot(kind='line',x='risk_level',  figsize=(8,6), ls = '-',
     linewidth=2, markersize=12, )
font1 = {'color':'blue','size':20}
font2 = {'color':'darkred','size':15}
plt.title("Comparing policies in risk groups", fontdict = font1)
plt.xlabel("Risk group", fontdict = font2)
plt.ylabel("Percentage of total money (total claims)", fontdict = font2)
plt.grid(color = 'black', linestyle = '--', linewidth = 0.5)

Синяя линия представляет собой линию под углом 45 градусов, зеленая — модель B, а зеленая — модель A.

Выводы:

С точки зрения примера, индекс Джини показывает, что модель A лучше с точки зрения результатов, чем модель B. Вы также можете видеть на кривой Лоренца, что модель A предсказывает более высокую группу риска, больше денег, чем модель B. И, конечно же, коэффициент площади модели А больше коэффициента модели В, а значит, дисперсия (фактический рейтинг) модели при прогнозировании рискованной политики лучше.

Индекс Джини с кривой Лоренца также может быть эффективен при сравнении результатов двух моделей. Если предположить, что вы хотите предсказать риск (утверждение полиса), и в приведенном выше примере мы показываем сравнение между результатами прогнозирования политик, кривая Лоренца очень хорошо наглядно показывает преимущество результатов одной модели по сравнению с другими. вторая модель. Хорошая возможность сравнения результатов модели дает возможность автоматически публиковать новую модель.