0Pricing
AI Prompt Engineering · Lezione

Prompt finanziari e quantitativi

Analisi degli utili, valutazione del rischio e prompt per l’estrazione da filing SEC

Prompt finanziari e quantitativi è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Prompt Engineering, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Prompt Engineering include 4 lezioni in totale.

Contesto dei prompt per il settore finanziario

La progettazione di prompt per il settore finanziario estrae dati strutturati da documenti non strutturati: relazioni sugli utili, comunicazioni SEC e note degli analisti. La precisione è fondamentale: interpretare male un dato sui ricavi o invertire la direzione della crescita può causare gravi errori a valle.

Prompt per l'estrazione dei dati sugli utili

I report sugli utili seguono una struttura semi-standardizzata. Un prompt di estrazione mirato recupera con precisione i principali indicatori finanziari, gestendo sia le varianti GAAP sia quelle non-GAAP.

EARNINGS_EXTRACTION_PROMPT = '''Extract the following financial metrics from the earnings report below.
Return ONLY a JSON object with these exact keys.
If a value is not stated, use null.
Do not calculate or derive values — only extract explicitly stated figures.

Required fields:
- revenue_usd_millions: total net revenue (GAAP)
- revenue_yoy_pct: year-over-year revenue growth percentage
- gross_margin_pct: gross margin percentage (GAAP)
- operating_income_usd_millions: GAAP operating income/loss
- ebitda_usd_millions: Adjusted EBITDA (non-GAAP, if reported)
- net_income_usd_millions: GAAP net income/loss
- eps_diluted: diluted EPS (GAAP)
- eps_adj_diluted: adjusted diluted EPS (non-GAAP, if reported)
- guidance_next_quarter_revenue_low: low end of next quarter revenue guidance
- guidance_next_quarter_revenue_high: high end of next quarter revenue guidance
- fiscal_period: e.g. "Q3 FY2024"

Earnings Report:
{report_text}'''

import anthropic, json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')

def extract_earnings(report_text):
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=1000,
        messages=[{'role': 'user', 'content':
            EARNINGS_EXTRACTION_PROMPT.format(report_text=report_text)}]
    )
    return json.loads(response.content[0].text)

Prompt per il calcolo degli indici finanziari

Quando si desidera che il modello calcoli gli indici finanziari, è necessario fornire esplicitamente la formula. Non si deve presumere che il modello conosca la definizione esatta: analisti diversi usano formule leggermente differenti.

RATIO_PROMPT = '''Calculate the following financial ratios using the data provided.
Show your work: state the formula, plug in the numbers, and give the result.
Round all ratios to 2 decimal places.

Ratios to calculate:
1. Gross Margin = (Revenue - COGS) / Revenue * 100
2. Operating Margin = Operating Income / Revenue * 100
3. Net Margin = Net Income / Revenue * 100
4. Current Ratio = Current Assets / Current Liabilities
5. Quick Ratio = (Current Assets - Inventory) / Current Liabilities
6. Debt-to-Equity = Total Debt / Total Shareholders Equity
7. Return on Equity (ROE) = Net Income / Average Shareholders Equity * 100
8. EV/EBITDA = Enterprise Value / EBITDA (if EV is provided)

Financial Data:
{financial_data}'''

def calculate_ratios(financial_data):
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=2000,
        messages=[{'role': 'user', 'content':
            RATIO_PROMPT.format(financial_data=financial_data)}]
    )
    return response.content[0].text

Estrazione della crescita anno su anno

La crescita YoY può essere riportata come variazione assoluta, percentuale oppure in entrambe le forme. Il prompt deve gestire tutti i casi e distinguere tra crescita dichiarata e crescita a valuta costante.

YOY_PROMPT = '''From the financial document below, extract year-over-year growth metrics.

For each metric found, provide:
- metric_name: e.g. "Revenue", "Gross Profit", "Operating Income"
- current_period: value and period (e.g. "$4.2B, Q3 2024")
- prior_period: value and period (e.g. "$3.8B, Q3 2023")
- yoy_change_pct: percentage change (positive = growth, negative = decline)
- constant_currency_yoy_pct: if reported, the constant-currency growth rate (else null)
- commentary: any management commentary on drivers of the change

IMPORTANT:
- Do not mix GAAP and non-GAAP figures in the same row.
- Mark each row with gaap: true or false.
- If growth is reported only in narrative form (e.g. "revenue grew 15%"),
  still capture it but set current_period and prior_period to null.

Document:
{document_text}'''

def extract_yoy_growth(document_text):
    import json
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=2000,
        messages=[{'role': 'user', 'content':
            YOY_PROMPT.format(document_text=document_text)}]
    )
    return response.content[0].text

Pattern per l'estrazione dai documenti SEC

I documenti depositati presso la SEC (10-K, 10-Q) presentano intestazioni di sezione standardizzate. Per ridurre l'uso della finestra di contesto e migliorare la precisione, è consigliabile mirare a sezioni specifiche con prompt di estrazione consapevoli della struttura delle sezioni.

SEC_EXTRACTION_PROMPT = '''You are analyzing a {filing_type} SEC filing.

From {section_name}, extract the following:
{extraction_targets}

Rules:
1. Quote exact figures as stated — do not round or reformat numbers.
2. Note the fiscal year end and reporting currency.
3. If the section uses tables, extract all rows of the table.
4. Flag any restatements: "[RESTATED from prior filing]".
5. Note any forward-looking statements with [FLS] tag.

Filing Section Text:
{section_text}'''

# Section targets by filing type
SECTION_TARGETS = {
    '10-K': {
        'Item 7 MD&A': 'Revenue breakdown by segment, key cost drivers, liquidity discussion',
        'Item 1A Risk Factors': 'Top 5 risks by category (operational, financial, regulatory, competitive)',
        'Item 8 Financial Statements': 'Consolidated income statement, balance sheet key line items'
    },
    '10-Q': {
        'Item 1 Financial Statements': 'Revenue, operating income, cash flow from operations',
        'Item 2 MD&A': 'Quarter-over-quarter and YoY comparisons'
    }
}

def extract_sec_section(filing_type, section_name, section_text):
    targets = SEC_EXTRACTION_TARGETS = SECTION_TARGETS[filing_type][section_name]
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=3000,
        messages=[{'role': 'user', 'content':
            SEC_EXTRACTION_PROMPT.format(
                filing_type=filing_type, section_name=section_name,
                extraction_targets=targets, section_text=section_text
            )}]
    )
    return response.content[0].text

Riepilogo dei fattori di rischio

I documenti depositati presso la SEC possono contenere più di 50 pagine dedicate ai fattori di rischio. Un prompt di riepilogo che categorizzi e ordini i rischi per importanza consente agli analisti di individuare rapidamente quelli più rilevanti.

RISK_FACTOR_PROMPT = '''Summarize the risk factors from this SEC filing.

Categories to use:
1. Financial Risks (liquidity, debt, interest rate, FX)
2. Operational Risks (supply chain, technology, key personnel)
3. Regulatory / Legal Risks (compliance, litigation, government action)
4. Market / Competitive Risks (competition, market conditions, pricing)
5. Macroeconomic Risks (recession, inflation, geopolitical)

For each risk:
- Title: 5-8 word summary
- Category: one of the 5 above
- Materiality: HIGH / MEDIUM / LOW (based on language used: "could significantly...",
  "may adversely affect...", "could result in material...")
- Summary: 2-3 sentence description

Sort each category by Materiality descending.
Limit to top 3 risks per category (15 total max).

Risk Factors Section:
{risk_factors_text}'''

def summarize_risk_factors(risk_factors_text):
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=3000,
        messages=[{'role': 'user', 'content':
            RISK_FACTOR_PROMPT.format(risk_factors_text=risk_factors_text)}]
    )
    return response.content[0].text

Generazione di note per analisti

Dopo aver estratto e analizzato i dati finanziari, è possibile generare una nota in stile analista che ne riepiloghi i risultati. Il prompt deve imporre la struttura e il tono obiettivo tipici della ricerca finanziaria professionale.

ANALYST_NOTE_PROMPT = '''Write an equity research analyst note for the earnings results below.

STRUCTURE (required sections):
1. Headline: one sentence (include ticker, period, key takeaway, and target price if updated)
2. Investment Thesis: 2-3 sentences on the core bull/bear case
3. Earnings Summary: revenue, gross margin, EPS vs consensus estimates
4. Key Positives: 3 bullet points
5. Key Risks/Concerns: 3 bullet points
6. Guidance Commentary: management outlook, consensus vs guidance delta
7. Valuation: brief note on current multiple vs historical and peers
8. Recommendation: OUTPERFORM / MARKET PERFORM / UNDERPERFORM with 12-month target

TONE: Professional, data-driven, third person. Attribute claims to the company
("Management guided...", "The company reported...").
Do not use vague language — state numbers.

DISCLAIMER: This is AI-generated analysis for informational purposes only.
It does not constitute investment advice. Past performance is not indicative
of future results.

Earnings Data:
{earnings_data}'''

Pattern per le avvertenze finanziarie

Come gli strumenti legali e medici, anche gli strumenti di IA finanziaria richiedono avvertenze obbligatorie. È consigliabile inserirle a livello applicativo per assicurarsi che non vengano mai omesse.

FINANCIAL_DISCLAIMER = (
    '\n\n---\n'
    'DISCLAIMER: This content is generated by an AI system for informational '
    'and educational purposes only. It does not constitute investment advice, '
    'a solicitation to buy or sell any security, or a recommendation to invest. '
    'Financial data extracted by AI may contain errors — always verify against '
    'primary source filings. Past performance does not guarantee future results. '
    'Consult a licensed financial advisor before making investment decisions.'
)

def get_financial_analysis(prompt):
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=2000,
        messages=[{'role': 'user', 'content': prompt}]
    )
    raw = response.content[0].text
    return raw + FINANCIAL_DISCLAIMER

# Always use get_financial_analysis() rather than calling the API directly
# to ensure disclaimer is never accidentally omitted

Disambiguazione tra GAAP e non-GAAP

Uno degli errori più comuni nell'estrazione finanziaria consiste nel mescolare valori GAAP e non-GAAP. I prompt devono richiedere esplicitamente al modello di etichettare ogni numero e segnalare le discrepanze.

GAAP_PROMPT = '''Extract all income statement figures from the text below.
For every number:
- Label it as GAAP or Non-GAAP (Adjusted/Pro Forma)
- If the company reports both, show both on separate rows
- Never combine GAAP and Non-GAAP in a single calculation

Common non-GAAP labels to watch for:
"Adjusted", "Non-GAAP", "Pro Forma", "Normalized", "Underlying",
"Core", "Recurring", "Organic" (for revenue)

Output as a table:
| Metric | GAAP Value | Non-GAAP Value | Period |
|--------|------------|----------------|--------|

Also note in a separate section any reconciliation items between GAAP and Non-GAAP:
- Stock-based compensation
- Amortization of acquired intangibles
- Restructuring charges
- Any other adjustments

Document:
{document_text}'''

print('Always verify GAAP/Non-GAAP labels against the company\'s own reconciliation tables.')

Analisi delle tendenze su più periodi

L'estrazione relativa a un singolo periodo offre un'istantanea. Un prompt per l'analisi delle tendenze confronta gli indicatori su più periodi, facendo emergere l'andamento e i pattern di accelerazione o decelerazione.

TREND_PROMPT = '''Analyze the financial trend for {company_name} using the multi-period data below.

1. Create a summary table with these columns:
   | Period | Revenue | Rev Growth YoY | Gross Margin | Op Margin | Net Margin |

2. Identify trends:
   - Is revenue growth accelerating, decelerating, or stable?
   - Margin expansion or compression trend?
   - Any notable inflection points (period where trend changed direction)?

3. Key observations (5 bullet points max):
   - Focus on directional changes, not just absolute numbers
   - Note any seasonality patterns if visible in quarterly data

4. Risks in the trend:
   - Flag any deterioration that management has not addressed
   - Note if guidance implies trend continuation or reversal

Data ({num_periods} periods):
{multi_period_data}'''

def analyze_trend(company_name, multi_period_data, num_periods):
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=2000,
        messages=[{'role': 'user', 'content':
            TREND_PROMPT.format(
                company_name=company_name,
                multi_period_data=multi_period_data,
                num_periods=num_periods
            )}]
    )
    return response.content[0].text

Convalida: verifica incrociata dei numeri estratti

Gli errori nell'estrazione finanziaria sono pericolosi. È consigliabile creare un passaggio di convalida che verifichi i numeri estratti usando identità contabili, ad esempio utile lordo = ricavi - COGS, per rilevare allucinazioni o errori di estrazione.

def validate_financials(extracted):
    errors = []

    # Check revenue consistency
    if extracted.get('revenue_usd_millions') and extracted.get('cogs_usd_millions'):
        calc_gp = extracted['revenue_usd_millions'] - extracted['cogs_usd_millions']
        stated_gp = extracted.get('gross_profit_usd_millions')
        if stated_gp and abs(calc_gp - stated_gp) > 1:  # $1M tolerance
            errors.append(
                f'Gross profit mismatch: calculated {calc_gp:.1f}M '
                f'vs stated {stated_gp:.1f}M'
            )

    # Check gross margin consistency
    if extracted.get('revenue_usd_millions') and extracted.get('gross_profit_usd_millions'):
        calc_gm = (extracted['gross_profit_usd_millions'] /
                   extracted['revenue_usd_millions']) * 100
        stated_gm = extracted.get('gross_margin_pct')
        if stated_gm and abs(calc_gm - stated_gm) > 0.5:  # 0.5 pp tolerance
            errors.append(
                f'Gross margin mismatch: calculated {calc_gm:.1f}% '
                f'vs stated {stated_gm:.1f}%'
            )

    return errors

# Always run validation after extraction
errors = validate_financials(extracted_data)
if errors:
    print('Validation errors — manually verify:', errors)
else:
    print('Validation passed')

Verifica rapida

Durante l'estrazione degli indicatori finanziari da un report sugli utili, il modello restituisce un margine lordo del 45%, ma i valori di ricavi e COGS implicano un margine lordo del 51%. Che cosa si dovrebbe fare?

Riepilogo dei prompt finanziari

La creazione di prompt finanziari e quantitativi richiede precisione, etichettatura e convalida:

  • Prompt di estrazione: specificare i nomi esatti dei campi e restituire JSON per l'elaborazione automatica
  • Formula esplicita: fornire sempre la formula esatta per il calcolo degli indici
  • GAAP e non-GAAP: etichettare ogni numero; non mescolarli mai nei calcoli
  • Sezioni SEC: mirare a sezioni Item specifiche per ridurre il rumore
  • Convalida: verificare i dati usando identità contabili per rilevare errori di estrazione
  • Avvertenze: inserire sempre l'avvertenza sugli investimenti a livello applicativo

Domande Frequenti

La lezione «Prompt finanziari e quantitativi» è gratuita?

Sì — il testo completo di «Prompt finanziari e quantitativi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Prompt Engineering, passa a CoddyKit PRO. Il corso AI Prompt Engineering include 4 lezioni in totale.

Cosa imparerò in «Prompt finanziari e quantitativi»?

Analisi degli utili, valutazione del rischio e prompt per l’estrazione da filing SEC Eserciti AI Prompt Engineering con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Prompt Engineering?

Non è richiesta alcuna esperienza precedente. AI Prompt Engineering su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Prompt finanziari e quantitativi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Prompt Engineering?

Sì. Ogni lezione AI Prompt Engineering include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Pattern di prompt per il settore legale
  2. Prompting medico e clinico
  3. Prompt finanziari e quantitativi
  4. Iniezione di glossari e ontologie di dominio
← Torna a AI Prompt Engineering