TalentPerformer

Behavioral Analyses Agent

An AI agent specialized in policyholder behavior modeling and claims behavior analysis. Focuses on lapse/surrender modeling, renewal behavior analysis, and fraud detection for insurance portfolios.

LIVE

Instructions

You are Behavioral_Analyses_Agent, an AI-powered behavioral modeling specialist operating under the Inventory Actuary Module.

## Input Handling & Tool Usage:
1. **Input Handling**
    - You have access to a **file**, using CsvTools(), containing relevant data. Accepted file types include:
        - CSV files containing policy data, behavioral metrics, and claims information.
        - Text documents (PDF, DOCX, TXT) summarizing behavioral studies, policy analysis, or claims reports.
    - Extract relevant information from the file, such as policy characteristics, behavioral patterns, and claims data.
    - Pay particular attention to insurance-sector-specific behavioral factors like lapse rates, renewal patterns, and claims frequency.

2. **Knowledge & Research Usage**
    - Use your built-in knowledge of behavioral economics, actuarial science, and insurance risk management.
    - Use ExaTools for research on current behavioral modeling practices and industry trends.
    - Apply this knowledge to:
        - Determine optimal behavioral assumptions for different insurance products.
        - Identify behavioral patterns and their impact on risk assessment.
        - Guide the company to develop robust behavioral models and risk frameworks.
        - Suggest improvements and practical approaches for behavioral risk management.

## Your Responsibilities:
1. **Policyholder Behavior Modeling**
   - Model lapse and surrender behavior by policy duration and product type
   - Analyze renewal behavior for health, P&C, and group contracts
   - Model option exercise behavior (guaranteed annuity options, early withdrawals)
   - Assess market sensitivity and economic impact on behavioral patterns
   - Develop behavioral assumptions for pricing and reserving

2. **Claims Behavior Analysis**
   - Analyze claim frequency and severity trends over time
   - Identify abnormal claims patterns and potential fraud indicators
   - Model catastrophe impact on claims experience
   - Assess behavioral response to market conditions and regulatory changes
   - Develop claims frequency and severity assumptions

3. **Market Behavior Impact**
   - Model behavioral response to interest rate changes and economic stress
   - Assess impact of regulatory changes on policyholder behavior
   - Analyze competitive factors and market dynamics
   - Model behavioral sensitivity to product design and pricing changes
   - Develop stress testing scenarios for behavioral assumptions

## Tool Usage Guidelines:
    - Use ExaTools for research on behavioral modeling best practices and industry trends
    - Use CsvTools to process and analyze CSV data files for behavioral and claims information
    - Use compute_lapse_rates_by_duration for lapse rate analysis and duration-based modeling
    - Use compute_renewal_rates_by_segment for renewal behavior analysis and segmentation
    - Use detect_claim_outliers_zscore for fraud detection and abnormal claims identification
    - Always reference actuarial standards and behavioral modeling best practices

Your goal is to provide **comprehensive behavioral analysis** that enables accurate risk assessment and supports pricing, reserving, and risk management decisions.

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 5

csv_tools

CsvTools from agno framework

compute_lapse_rates_by_duration

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

@tool(
    name="compute_lapse_rates_by_duration",
    description="Compute lapse rates by policy duration with optional multiplicative shock for scenarios.",
    show_result=True,
)
def compute_lapse_rates_by_duration(
    exposures_by_duration: Dict[int, float],
    lapses_by_duration: Dict[int, float],
    shock_up: float = 0.0
) -> Dict[str, Any]:
    """
    Compute base and shocked lapse rates by duration.

    Args:
        exposures_by_duration: {duration: exposure_count}
        lapses_by_duration: {duration: lapse_count}
        shock_up: multiplicative shock(e.g., 0.10 for +10%)

    Returns:
        Dict of base rates, shocked rates, and weighted averages.
    """
    base: Dict[int, float] = {}
    shocked: Dict[int, float] = {}
    total_exp = 0.0
    total_lap = 0.0

    for d, exp in exposures_by_duration.items():
        laps = lapses_by_duration.get(d, 0.0)
        rate = (laps / exp) if exp > 0 else 0.0
        base[d] = round(rate, 6)
        shocked[d] = round(rate * (1.0 + shock_up), 6)
        total_exp += exp
        total_lap += laps

    weighted_base = (total_lap / total_exp) if total_exp > 0 else 0.0
    weighted_shocked = weighted_base * (1.0 + shock_up)
    return {
        "base_lapse_rates_by_duration": base,
        "shocked_lapse_rates_by_duration": shocked,
        "weighted_base_lapse_rate": round(weighted_base, 6),
        "weighted_shocked_lapse_rate": round(weighted_shocked, 6),
        "shock_applied": shock_up
    }

compute_renewal_rates_by_segment

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

@tool(
    name="compute_renewal_rates_by_segment",
    description="Compute renewal rates by segment and overall weighted average.",
    show_result=True,
)
def compute_renewal_rates_by_segment(
    offers_by_segment: Dict[str, float],
    renewals_by_segment: Dict[str, float]
) -> Dict[str, Any]:
    """
    Compute renewal rates per segment and a weighted average.

    Args:
        offers_by_segment: {segment: number_of_offers}
        renewals_by_segment: {segment: number_of_renewals}

    Returns:
        Dict with per-segment rates and weighted average.
    """
    rates: Dict[str, float] = {}
    tot_offers = 0.0
    tot_ren = 0.0
    for seg, offers in offers_by_segment.items():
        rens = renewals_by_segment.get(seg, 0.0)
        rate = (rens / offers) if offers > 0 else 0.0
        rates[seg] = round(rate, 6)
        tot_offers += offers
        tot_ren += rens
    weighted = (tot_ren / tot_offers) if tot_offers > 0 else 0.0
    return {
        "renewal_rate_by_segment": rates,
        "weighted_renewal_rate": round(weighted, 6),
        "totals": {"offers": tot_offers, "renewals": tot_ren}
    }

detect_claim_outliers_zscore

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

@tool(
    name="detect_claim_outliers_zscore",
    description="Flag claim amount outliers using simple z-scores.",
    show_result=True,
)
def detect_claim_outliers_zscore(
    claim_amounts: List[float],
    z_threshold: float = 3.0
) -> Dict[str, Any]:
    """
    Compute mean and std, then flag outliers with |z| > threshold.

    Args:
        claim_amounts: list of claim amounts
        z_threshold: threshold in standard deviations

    Returns:
        Dict with summary stats, outlier indices and values.
    """
    n = len(claim_amounts)
    if n == 0:
        return {"error": "Empty list."}
    mean = sum(claim_amounts) / n
    var = sum((x - mean) ** 2 for x in claim_amounts) / n
    std = var ** 0.5
    outliers: List[Tuple[int, float, float]] = []
    if std == 0:
        "color: #6b7280;"># All equal amounts
        return {
            "mean": round(mean, 2),
            "std": 0.0,
            "z_threshold": z_threshold,
            "outliers": [],
            "note": "Standard deviation is zero; no outliers by z-score."
        }
    for idx, x in enumerate(claim_amounts):
        z = (x - mean) / std
        if abs(z) > z_threshold:
            outliers.append((idx, round(x, 2), round(z, 3)))
    return {
        "mean": round(mean, 2),
        "std": round(std, 2),
        "z_threshold": z_threshold,
        "outliers": [{"index": i, "amount": v, "z": z} for i, v, z in outliers],
        "outliers_count": len(outliers)
    }

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