TalentPerformer

Actuarial & Financial Modeling Agent

An AI agent specializing in actuarial calculations, financial modeling, and risk assessment for life insurance products. Focuses on pricing models, cash flow projections, profitability analysis, and stress testing.

LIVE

Instructions

You are ActuarialModelingAgent, an AI-powered actuarial specialist operating under the Product Design Life Insurance Module.
ALWAYS reference the Product_Design_Life_Insurance knowledge base.

## Your Responsibilities:
1. **Pricing Models**
   - Use mortality tables, lapse assumptions, and expense loadings
   - Calculate net premiums and gross premiums with profit margins
   - Develop pricing strategies for different product types

2. **Cash Flow Projections**
   - Forecast premiums, claims, reserves, and expenses across contract duration
   - Include surrender and paid-up values
   - Model different economic and demographic scenarios

3. **Profitability Analysis**
   - Evaluate embedded value (EV), new business value (NBV), and IRR
   - Assess capital strain vs. expected profits
   - Analyze product profitability and capital efficiency

4. **Stress & Scenario Testing**
   - Model mortality shock scenarios (pandemics, longevity risk)
   - Test economic stress scenarios (low interest rates, market downturns)
   - Assess capital adequacy under stress conditions

## Tool Usage Guidelines:
- Use FileTools to access actuarial data, mortality tables, and financial models
- Use ExaTools for actuarial research and industry standards
- Use CalculatorTools for complex mathematical calculations and statistical analysis
- Use calculate_life_insurance_premium for premium calculations and pricing analysis
- Use calculate_cash_value for cash value projections and policy modeling
- Use calculate_embedded_value for profitability analysis and capital assessment
- Always validate assumptions and ensure actuarial soundness

Your goal is to provide **actuarially sound financial modeling** that ensures product profitability, capital adequacy, and risk management.

Knowledge Base (.md)

Business reference guide

Drag & Drop or Click

.md, .txt, .pdf

Data Files

Upload data for analysis (CSV, JSON, Excel, PDF)

Drag & Drop or Click

Multiple files: .json, .csv, .xlsx, .xls, .pdf, .docx, .pptx, .txt

Tools 6

file_tools

FileTools from agno framework

calculator

CalculatorTools from agno framework

calculate_life_insurance_premium

Model for storing functions that can be called by an agent.

@tool(
    name="calculate_life_insurance_premium",
    description="Calculate life insurance premium using actuarial principles",
    show_result=True,
)
def calculate_life_insurance_premium(
    age: int,
    gender: str,
    coverage_amount: float,
    policy_term: int,
    policy_type: str,
    smoker_status: bool,
    occupation_class: str,
) -> Dict[str, Any]:
    """
    Calculate life insurance premium using actuarial principles.

    Args:
        age: Age of the insured
        gender: Gender of the insured(male/female)
        coverage_amount: Death benefit amount
        policy_term: Policy term in years
        policy_type: Type of policy(term/whole/endowment/ulip)
        smoker_status: Whether the insured is a smoker
        occupation_class: Occupational risk class (A/B/C/D)

    Returns:
        Dictionary containing premium calculations and assumptions
    """    
    base_mortality = {
        "male": {20: 0.0005, 30: 0.0008, 40: 0.0012, 50: 0.0020, 60: 0.0040},
        "female": {20: 0.0003, 30: 0.0005, 40: 0.0008, 50: 0.0015, 60: 0.0030},
    }
    age_group = min((age // 10) * 10, 60)
    mortality_rate = base_mortality.get(gender.lower(), base_mortality["male"])[age_group]
    risk_multiplier = 1.0
    if smoker_status:
        risk_multiplier *= 2.5
    occupation_multipliers = {"A": 1.0, "B": 1.2, "C": 1.5, "D": 2.0}
    risk_multiplier *= occupation_multipliers.get(occupation_class.upper(), 1.0)
    net_premium = coverage_amount * mortality_rate * risk_multiplier
    policy_factors = {"term": 1.0, "whole": 1.8, "endowment": 2.2, "ulip": 1.5}
    net_premium *= policy_factors.get(policy_type.lower(), 1.0)
    expense_loading = net_premium * 0.25
    profit_margin = net_premium * 0.15
    gross_premium = net_premium + expense_loading + profit_margin
    return {
        "net_premium": round(net_premium, 2),
        "expense_loading": round(expense_loading, 2),
        "profit_margin": round(profit_margin, 2),
        "gross_premium": round(gross_premium, 2),
        "annual_premium": round(gross_premium, 2),
        "monthly_premium": round(gross_premium / 12, 2),
        "mortality_rate": mortality_rate,
        "risk_multiplier": risk_multiplier,
        "assumptions": {"age": age, "gender": gender, "coverage_amount": coverage_amount, "policy_term": policy_term, "policy_type": policy_type, "smoker_status": smoker_status, "occupation_class": occupation_class},
    }

calculate_cash_value

Model for storing functions that can be called by an agent.

@tool(
    name="calculate_cash_value",
    description="Calculate cash value accumulation for whole life and endowment policies",
    show_result=True,
)
def calculate_cash_value(
    policy_type: str,
    premium: float,
    policy_duration: int,
    interest_rate: float,
    expense_ratio: float,
) -> Dict[str, Any]:
    """
    Calculate cash value accumulation for life insurance policies.

    Args:
        policy_type: Type of policy(whole/endowment)
        premium: Annual premium amount
        policy_duration: Years since policy inception
        interest_rate: Annual interest rate(decimal)
        expense_ratio: Annual expense ratio(decimal)

    Returns:
        Dictionary containing cash value calculations
    """
    if policy_type.lower() not in ["whole", "endowment"]:
        return {"error": "Policy type must be 'whole' or 'endowment'"}
    net_premium = premium * (1 - expense_ratio)
    cash_value = 0.0
    cash_value_progression = []
    for year in range(1, policy_duration + 1):
        cash_value += net_premium
        cash_value *= 1 + interest_rate
        cash_value_progression.append({"year": year, "cash_value": round(cash_value, 2), "net_premium": round(net_premium, 2)})
    surrender_value = cash_value * 0.85
    return {
        "policy_type": policy_type,
        "annual_premium": premium,
        "net_premium": round(net_premium, 2),
        "interest_rate": interest_rate,
        "expense_ratio": expense_ratio,
        "current_cash_value": round(cash_value, 2),
        "surrender_value": round(surrender_value, 2),
        "cash_value_progression": cash_value_progression,
        "total_premiums_paid": round(premium * policy_duration, 2),
    }

calculate_embedded_value

Model for storing functions that can be called by an agent.

@tool(
    name="calculate_embedded_value",
    description="Calculate embedded value for life insurance products",
    show_result=True,
)
def calculate_embedded_value(
    present_value_future_profits: float,
    adjusted_net_asset_value: float,
    cost_of_capital: float,
    risk_margin: float,
) -> Dict[str, Any]:
    """
    Calculate embedded value for life insurance products.

    Args:
        present_value_future_profits: PV of future profits
        adjusted_net_asset_value: Adjusted net asset value
        cost_of_capital: Cost of capital rate
        risk_margin: Risk margin amount

    Returns:
        Dictionary containing embedded value calculations
    """
    embedded_value = present_value_future_profits + adjusted_net_asset_value
    cost_of_capital_amount = embedded_value * cost_of_capital
    value_of_in_force = embedded_value - cost_of_capital_amount
    new_business_value = value_of_in_force * 0.15
    return {
        "present_value_future_profits": round(present_value_future_profits, 2),
        "adjusted_net_asset_value": round(adjusted_net_asset_value, 2),
        "embedded_value": round(embedded_value, 2),
        "cost_of_capital_rate": cost_of_capital,
        "cost_of_capital_amount": round(cost_of_capital_amount, 2),
        "value_of_in_force": round(value_of_in_force, 2),
        "risk_margin": round(risk_margin, 2),
        "new_business_value": round(new_business_value, 2),
        "key_metrics": {"embedded_value": round(embedded_value, 2), "value_of_in_force": round(value_of_in_force, 2), "new_business_value": round(new_business_value, 2)},
    }

exa

ExaTools is a toolkit for interfacing with the Exa web search engine, providing functionalities to perform categorized searches and retrieve structured results. Args: enable_search (bool): Enable search functionality. Default is True. enable_get_contents (bool): Enable get contents functionality. Default is True. enable_find_similar (bool): Enable find similar functionality. Default is True. enable_answer (bool): Enable answer generation. Default is True. enable_research (bool): Enable research tool functionality. Default is False. all (bool): Enable all tools. Overrides individual flags when True. Default is False. text (bool): Retrieve text content from results. Default is True. text_length_limit (int): Max length of text content per result. Default is 1000. api_key (Optional[str]): Exa API key. Retrieved from `EXA_API_KEY` env variable if not provided. num_results (Optional[int]): Default number of search results. Overrides individual searches if set. start_crawl_date (Optional[str]): Include results crawled on/after this date (`YYYY-MM-DD`). end_crawl_date (Optional[str]): Include results crawled on/before this date (`YYYY-MM-DD`). start_published_date (Optional[str]): Include results published on/after this date (`YYYY-MM-DD`). end_published_date (Optional[str]): Include results published on/before this date (`YYYY-MM-DD`). type (Optional[str]): Specify content type (e.g., article, blog, video). category (Optional[str]): Filter results by category. Options are "company", "research paper", "news", "pdf", "github", "tweet", "personal site", "linkedin profile", "financial report". include_domains (Optional[List[str]]): Restrict results to these domains. exclude_domains (Optional[List[str]]): Exclude results from these domains. show_results (bool): Log search results for debugging. Default is False. model (Optional[str]): The search model to use. Options are 'exa' or 'exa-pro'. timeout (int): Maximum time in seconds to wait for API responses. Default is 30 seconds.

Test Agent

Configure model settings at the top, then test the agent below

Enter your question or instruction for the agent