Быстро рассчитать страховые суммы по миллионам полисов

Постановка задачи

Какова справедливая годовая выплата по договору страхования, по которому в конце года смерти выплачивается 100 000 долларов? Мы говорим, что выплата является справедливой, если ожидаемая приведенная стоимость произведенных платежей равна ожидаемой приведенной стоимости будущих выгод.

Предварительное знание предметной области

Если смелое утверждение в предыдущем разделе имеет смысл, пропустите этот раздел. В противном случае, пожалуйста, ознакомьтесь с содержанием следующих ресурсов:

  • "Приведенная стоимость"
  • "Ожидаемое значение"

Приведенная стоимость и ожидаемая стоимость — это два отдельных понятия, но в страховании они часто встречаются вместе, потому что

  • Время смерти является случайной величиной (используйте ожидаемое значение, чтобы справиться с этим)
  • Денежные потоки существуют в будущем (дисконтируйте будущие денежные потоки, чтобы получить текущую стоимость)

Некоторые обозначения

В Международной актуарной нотации есть символы для таких вещей, как коэффициенты смертности и коэффициенты дисконтирования. Соответствующие символы приведены ниже:

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

Решение для P дает -

Факторы дисконтирования различаются, поскольку страховые взносы выплачиваются в начале года, а страховые выплаты — в конце года.

Почему Python для актуарного моделирования?

Речь идет не о самом языке Python, а об экосистеме глубокого обучения Python, которая предоставляет нам тензорные библиотеки, работающие на графическом процессоре. Мы будем использовать JAX от Google.

В JAX Quickstart говорится, что

JAX — это NumPy на CPU, GPU и TPU с отличной автоматической дифференциацией для высокопроизводительных исследований в области машинного обучения.

Актуарное моделирование часто является досадно параллельным, включающим множество политик или экономических сценариев, которые мы можем распараллелить. JAX предоставляет знакомый API NumPy, позволяя графическому процессору ускорить наши высокопараллельные актуарные рабочие нагрузки.

Достаточно фоновых знаний. Давайте начнем!

Рассчитать справедливую цену контракта

Загрузка таблиц смертности

Нам нужны вероятности смерти, чтобы сделать расчет. Общество актуариев ведет сборник таблиц смертности. Я опубликовал пакет Python под названием pymort, который упрощает загрузку этих таблиц в тензорный формат.

Приведенный ниже код загружает набор таблиц смертности для десяти различных профилей риска, поэтому ведущее измерение имеет размер 10.

Поиск рейтинга из таблиц смертности

Традиционные актуарные модели определяются рекурсивно, и каждый уровень стека вызовов представляет собой новый временной шаг. Напротив, мы вычисляем для всех моментов времени одновременно. Это позволяет распараллелить измерение времени на графическом процессоре.

Застрахованное лицо должно пройти медицинский андеррайтинг, который отбирает лиц с неизлечимыми заболеваниями. Это изначально снижает уровень смертности, и именно поэтому существует таблица select, которая снижает уровень смертности при переходе к таблице ultimate, предназначенной для населения в целом.

Ожидаемая приведенная стоимость денежных потоков

Мы создаем тензор, представляющий ожидаемую текущую стоимость претензий на каждом временном шаге для каждой политики.

Приведенный выше тензор можно описать в матричных обозначениях

Получение справедливой цены

Вот формула (опять же) —

Посмотрите, что приведенный ниже код решает проблему.

P.S. Эта премия несправедлива, если у страховой компании есть расходы! Эта модель является упрощением, но, надеюсь, она была поучительной.

Большое спасибо, что нашли время, чтобы прочитать эту статью. Я старался изо всех сил, чтобы это стоило вашего времени.

LinkedIn group for open source actuarial discussion — https://www.linkedin.com/groups/13937070/