W tym zadaniu zbudujesz prosty model aktuarialny służący do wyznaczenia składki jednorazowej netto dla terminowego ubezpieczenia na życie.
Terminowe ubezpieczenie na życie to umowa, w której ubezpieczyciel zobowiązuje się wypłacić świadczenie w przypadku śmierci ubezpieczonego w określonym czasie trwania ochrony. Jeśli ubezpieczony przeżyje cały okres ubezpieczenia, świadczenie nie jest wypłacane, a ochrona wygasa.
W modelu zakładamy:
brak kosztów, prowizji i reasekuracji (czyli liczymy składkę netto),
stałą stopę procentową (oprocentowanie techniczne),
stałe miesięczne prawdopodobieństwo zgonu (dla uproszczenia modelu).
Twoim pierwszym krokiem jest utworzenie nowego modelu.
W tym celu:
Otwórz powłokę Python.
Skorzystaj z poniższej komendy, aby utworzyć nowy model o nazwie zadanie_1
:
from cashflower import create_model
create_model("zadanie_1")
W tej części przygotujesz dane wejściowe: dane ubezpieczeniowe (tzw. model point set) oraz założenie dotyczące stopy procentowej.
W pliku input.py
przygotuj dane dotyczące ubezpieczonego. Skorzystaj z klasy ModelPointSet
i przygotuj dane w formie tabeli (DataFrame
). Nazwij swój model point set policy
.
Polisa powinna zawierać następujące atrybuty:
suma ubezpieczenia: 100 000 zł (sum_assured
),
miesięczne prawdopodobieństwo zgonu: 0.003 (mortality_rate
),
czas trwania umowy: 36 miesięcy (term
).
Poniżej znajdziesz szkielet kodu z miejscami do uzupełnienia:
x# input.py
from cashflower import ModelPointSet
import pandas as pd
policy = ModelPointSet(data=pd.DataFrame({
"sum_assured": [_____],
"mortality_rate": [_____],
"term": [_____],
}))
Zadanie:
Uzupełnij brakujące wartości zgodnie z założeniami.
Załóż, że miesięczna stopa procentowa wynosi 0.5%. Zapisz ją jako zmienną skalarną interest_rate
. Umieść ją w tym samym pliku input.py
.
xxxxxxxxxx
# input.py
interest_rate = _____
Zadanie:
Uzupełnij wartość stopy procentowej jako ułamek dziesiętny.
W tej części stworzysz zmienne modelowe potrzebne do obliczenia składki jednorazowej netto.
Na początek zaimportuj dane wejściowe z pliku input.py
. Otwórz plik model.py
.
Znajdziesz tam przykładową zmienną, możesz ją zakomentować lub usunąć, aby mieć czysty plik.
Zaimportuj dane:
policy
– dane polisy,
interest_rate
– stopa procentowa.
Uzupełnij poniższy kod:
xxxxxxxxxx
# model.py
from input import _____, _____
t
miesięcyUtwórz zmienną survival_rate(t)
, która będzie wyznaczać prawdopodobieństwo przeżycia t
miesięcy od początku trwania umowy.
Posłuż się zależnością rekurencyjną:
Załóż, że:
dla t=0
przeżywalność wynosi 1
,
prawdopodobieństwo zgonu miesięczne jest stałe i równe policy.get("mortality_rate")
.
Uzupełnij funkcję poniżej:
xxxxxxxxxx
# model.py
()
def survival_rate(t):
if t == 0:
return 1
else:
q = policy.get("_____")
return survival_rate(t - 1) * (_____ )
Zadanie:
Uzupełnij nazwę atrybutu zawierającego miesięczne prawdopodobieństwo zgonu.
Zastanów się, jak wyrazić prawdopodobieństwo przeżycia t
miesięcy.
Zdefiniuj zmienną expected_benefit(t)
– oczekiwaną wartość świadczenia wypłacanego w miesiącu t
.
Skorzystaj ze wzoru:
Pamiętaj, że:
dla t = 0
oraz po zakończeniu okresu ubezpieczenia świadczenie wynosi 0,
policy.get("sum_assured")
,
długość trwania polisy to policy.get("term")
.
Uzupełnij poniższy kod:
xxxxxxxxxx
# model.py
()
def expected_benefit(t):
if t == 0 or t > policy.get("_____"):
return 0
else:
B = policy.get("_____")
q = policy.get("_____")
return B * _____ * q
Zadanie:
Uzupełnij brakujące nazwy atrybutów (term
, sum_assured
, mortality_rate
).
Uzupełnij część wzoru, która odpowiada za prawdopodobieństwo przeżycia do miesiąca t-1
.
Oblicz wartość składki jednorazowej netto, czyli bieżącej wartości oczekiwanych świadczeń.
Zastosuj podejście rekurencyjne:
gdzie:
interest_rate
),
dla ostatniego miesiąca (maksymalne t
) składka to oczekiwane świadczenie.
Pamiętaj, że maksymalna wartość t
jest ustawiona w settings.py
jako T_MAX_CALCULATION
.
Uzupełnij poniższy kod:
xxxxxxxxxx
# model.py
from settings import settings
()
def net_single_premium(t):
if t == settings["_____"]:
return _____
else:
v = 1 / (1 + _____)
return _____ + v * _____
Zadanie:
Uzupełnij nazwę parametru z settings.py
, który określa maksymalne t
,
Wstaw odpowiednie zmienne do obliczenia składki (np. expected_benefit
, net_single_premium
, interest_rate
).