Introdução à Ciência de Dados

Mestrado Profissional em Administração

Prof. Washington Santos da Silva

IFMG - Campus Formiga

26 de junho de 2025

Diário de Bordo

O que vimos até aqui?

  • Aula 1 ✅

    • Apresentação da Disciplina ✅
    • Introdução e Contextualização ✅
    • O que é Ciência de Dados? ✅
    • Pesquisa Reproduzível e Ciência de Dados ✅
    • Papéis Profissionais ✅
    • Aplicações ✅
    • Habilidades Interpessoais e Analíticas ✅
    • Apresentação da Disciplina ✅
    • Configurações: Git/GitHub ✅
  • Aula 2 ✅

    • Metodologia CRISP-DM ✅
    • Tipos de Análise de Dados ✅
    • Introdução ao RStudio e criação do seu Projeto da Disciplina ✅
    • Introdução ao Sistema de Publicação Quarto ✅
    • Introdução ao Git e GitHub: controle de versão e criação do seu repositório no GitHub ✅
  • Aula 3 ✅

    • Breve Revisão sobre o RStudio ✅
    • Sistema de Publicação Quarto: (Cont.) ✅
    • Introdução ao Git e GitHub: (Cont.) ✅
    • Sessão Prática: Fluxo de trabalho integrando RStudio/Quarto/R/Git/GitHub ✅
  • Aula 4 ✅

    • Conceitos de Variáveis e Observações em Estatística ✅

    • Conceito de Dados Organizados (Tidy Data) ✅

    • Tipos atômicos e classes principais de dados da linguagem R ✅

    • Tipos de Dados Tradicionais em Finanças: ✅

      • Dados em Secção-Cruzada (ou Transversal) (Cross-Section Data) ✅
      • Dados em Secções-Cruzadas Combinadas (Pooled Cross-Section Data) ✅
      • Dados em Séries Temporais (Time Series Data) ✅
      • Dados em Painel (ou Longitudinais) (Panel Data) ✅
    • Importação e Preparação de Dados Típicos de Finanças com exemplos práticos ✅

  • Aula 5 ✅

    • Metodologia CRISP-DM: Fases 2 e 3 ✅
    • Revisão sobre Dados Organizados (Tidy Data) ✅
    • Introdução ao Pacote tidyr: função pivot_longer() ✅
    • Introdução ao Pacote dplyr: funções select() e filter() ✅
    • Exercícios ✅
  • Aula 6 ✅

    • Função mutate ✅
    • Funções group_by e summarize ✅
    • Exercícios ✅
  • Aula 7 ✅

    • Introdução ao Pacote dplyr: Tipos Básicos de joins
    • Exercícios ✅
  • Aula 8 ✅

    • Modelos

    • Conceitos Fundamentais de Probabilidade

      • O que é Probabilidade?
      • Probabilidade Condicional e Independência
      • Amostra Aleatória
      • Variáveis Aleatórias e Funções de Probabilidade
      • Função de Distribuição Acumulada
      • Lei dos Grandes Números
    • Distribuições de Probabilidade de VA Discretas

      • Distribuição de Bernoulli

      • Características de uma Distribuição de Probabilidade

        • Valor Esperado
        • Variância e Desvio-Padrão
        • Assimetria e Curtose
    • Distribuição Binomial

    • Distribuições de Probabilidade de VA Contínuas

      • Teorema Central do Limite
      • Distribuição Normal

Na Última Aula

Tópicos - Fundamentos de Probabilidade e Simulação

  • Modelos

  • Conceitos Fundamentais de Probabilidade

    • O que é Probabilidade?
    • Probabilidade Condicional e Independência
    • Amostra Aleatória
    • Variáveis Aleatórias e Funções de Probabilidade
    • Função de Distribuição Acumulada
    • Lei dos Grandes Números
  • Distribuições de Probabilidade de VA Discretas

    • Distribuição de Bernoulli

    • Características de uma Distribuição de Probabilidade

      • Valor Esperado
      • Variância e Desvio-Padrão
      • Assimetria e Curtose
    • Distribuição Binomial

  • Distribuições de Probabilidade de VA Contínuas

    • Teorema Central do Limite
    • Distribuição Normal

Nesta Aula

Tópicos - Fundamentos de Probabilidade e Simulação

  • Simulação de Monte Carlo - Aplicações

  • Aplicação - Valor-em-Risco (VaR)

    • Pacote tidyquant, Séries de Preços e de Rretornos de Acões
    • Método Paramétrico
    • Método Histórico
    • Método de Simulação de Monte Carlo
  • Aplicação - CVaR (Conditional Value at Risk, Expected Shortfall)

Diretrizes para Aulas Mais Produtivas

⌨️ Código com método:

95% dos erros são evitáveis com:

  • Atenção na digitação
  • Respeitar a sequência lógica de etapas
  • Revisão antes de pedir ajuda

🤝 Inteligência colaborativa:

  • Compartilhe conhecimento
  • Resolva questões técnicas simples com colegas próximos
  • Reserve ao professor as dúvidas conceituais complexas

💪 Capacidade de Resolver Problemas

Cada erro resolvido é uma evolução da sua habilidade analítica

Simulação de Monte Carlo: Aplicações

Simulação de Monte Carlo

Fundamentos Teóricos

Essência matemática da simulação

Transformamos o valor esperado teórico em um estimador empírico via amostragem aleatória:

\[ \theta = E[g(X)] \;\;\approx\;\; \hat\theta_N = \frac{1}{N} \sum_{i=1}^N g(X_i), \quad \text{com } X_i \overset{\text{i.i.d.}}{\sim} f_X \]

Simular = gerar amostras pseudo-aleatórias e calcular a média.

Por que funciona? Convergência Estatística
Conceito Enunciado (intuitivo) Implicação prática
Lei dos Grandes Números (LLN) \(\hat\theta_N \to \theta\) quando \(N \to \infty\) O estimador é consistente
Teorema Central do Limite (TCL) \(\hat\theta_N \overset{d}{\longrightarrow} N(\theta, \sigma^2 / N)\) Podemos quantificar o erro da estimativa
Erro-Padrão (EP) \(V\text{ar}(\hat\theta_N) = \sigma^2/N \;\Rightarrow\; \text{EP} = \sigma / \sqrt{N}\) Estimamos incerteza e construímos intervalos de confiança
Erro de MC \(\text{EP} \propto 1/\sqrt{N}\) Dobrar \(N\) ↓ erro ≈ 29%; quadruplicar ↓ erro 50%
Visualizando a Convergência

\[ \underbrace{ \hat\theta_N = \frac{1}{N} \sum_{i=1}^{N} g(X_i) }_{\text{média amostral}} \quad \overset{d}{\longrightarrow} \quad N \left( \theta, \frac{\sigma^2}{N} \right) \quad \text{com } \sigma^2 = V\text{ar}[g(X)] \]

Fluxo “5 E” Clássico da Simulação
  1. Especificar o modelo \(f_X\)
  2. Extrair amostras \(X_1,\dots,X_N\)
  3. Estimar a estatística \(\hat\theta_N\)
  4. Estimar o erro via TCL ou bootstrap
  5. Elevar a eficiência com técnicas de redução de variância

Quando Usar Simulação de Monte Carlo?

Critérios de Aplicação

✅ Use Monte Carlo quando:

  • Múltiplas incertezas simultâneas: vários parâmetros incertos
  • Distribuições não-padrão: triangular, uniforme, assimétricas
  • Necessidade de quantificar risco: P(perda), percentis, cenários extremos
  • Correlações entre variáveis: inflação × juros, receita × custos

❌ Evite Monte Carlo quando:

  • Solução analítica simples existe: fórmulas fechadas suficientes
  • Incerteza mínima: parâmetros bem conhecidos
  • Tempo/recursos limitados: urgência na decisão

Exemplos Práticos:

Situação Método Recomendado Justificativa
VPL com taxa fixa e fluxos certos Determinístico Sem incerteza significativa
Projeto com 5+ parâmetros incertos Monte Carlo Múltiplas fontes de risco
Análise rápida de sensibilidade Cenários Simplicidade e velocidade

💡 Regra prática: Se você tem múltiplas incertezas OU precisa quantificar probabilidades de risco, use Monte Carlo.

Monte Carlo vs. Análise de Sensibilidade Tradicional

Comparando Abordagens

Análise de Sensibilidade (3 cenários):

Pessimista: VPL = -R$ 15.000
Base:       VPL = +R$ 2.600  
Otimista:   VPL = +R$ 22.000

Vantagens: Simples, rápida
Limitações: Apenas 3 pontos, sem probabilidades

Simulação de Monte Carlo (100.000 cenários):

P(VPL > 0) = 73%              → probabilidade de sucesso
P(VPL < -10.000) = 8%        → risco de perda severa
VPL médio = R$ 3.200          → retorno esperado
Percentil 5% = -R$ 12.500     → pior caso provável

Vantagens: Informação completa sobre risco
Limitações: Mais complexa

Qual informação é mais útil para decidir?

Pergunta do Gestor Sensibilidade Monte Carlo
“Qual a chance de sucesso?” ❌ “Depende do cenário” ✅ “73% de probabilidade”
“Quanto posso perder?” ❌ “Até R$ 15.000” ✅ “95% chance: perda < R$ 12.500”
“Vale o risco?” ❌ Subjetivo ✅ Quantificado

💡 Monte Carlo fornece exatamente as informações que gestores precisam para decisões sob risco.

Aplicações Essenciais de Monte Carlo em Finanças

Onde é Padrão da Indústria

💼 Análise de Viabilidade de Projetos de Investimento

  • Análise de VPL com múltiplas incertezas
  • Orçamento de capital sob risco
  • Opções reais (expandir, abandonar projeto)

📊 Gestão de Risco

  • Value-at-Risk (VaR): perdas máximas prováveis
  • Stress testing: cenários de crise
  • Risco de crédito: probabilidade de calote

🏛️ Setores que Utilizam Métodos de Monte Carlo no Brasil

Setor Aplicações Típicas Vantagens e Necessidade Casos Brasileiros
Bancos & Finanças - Cálculo de capital regulatório (Basileia III)
- Stress testing de carteiras
- Avaliação de derivativos
- Exigência do BCB
- Modelagem de riscos correlacionados
- Precificação de instrumentos complexos
Itaú, Bradesco, Banco Central do Brasil
Seguradoras & Resseguradoras - Cálculo de reservas técnicas
- Modelagem de catástrofes naturais
- Solvência (SUSEP)
- Normas CNSP
- Eventos de baixa probabilidade/alto impacto
- Agregação de riscos múltiplos
IRB Brasil RE, Porto Seguro
Óleo & Gás - Avaliação de reservas (P50/P90)
- Análise de viabilidade econômica
- Gestão de projetos offshore
- Incerteza geológica
- Volatilidade de preços
- Otimização E&P
Petrobras, Pré-Sal, ANP
Mineração - Avaliação de jazidas
- Análise de viabilidade
- Gestão de commodities
- Variabilidade de teores minerais
- Exposição a preços internacionais
- Longo ciclo de investimento
Vale, CBMM (Nióbio)
Energia - Previsão de geração eólica/solar
- Precificação de energia
- Planejamento de expansão
- Intermitência de fontes renováveis
- Modelagem hidrológica
- Contratos de longo prazo
EPE, Operadores do SIN
Agronegócio - Cálculo de seguros rurais
- Previsão de safras
- Gestão de riscos climáticos
- Exposição a intempéries
- Volatilidade de commodities
- Modelagem espaço-temporal
MAPA, Embrapa, Seguradoras

🎯 Por que esses setores usam?

  • Alto risco financeiro nas decisões
  • Regulamentação exige quantificação de risco
  • Vantagem competitiva na análise sofisticada

Resultado: Simulação de Monte Carlo não é uma técnica acadêmica, é ferramenta de trabalho em finanças corporativas.

O Problema da Incerteza em Decisões Financeiras

Cenário Típico: Avaliação de Projeto

Análise Tradicional (Determinística):

  • Investimento: R$ 75.000 | Receita anual: R$ 15.000 (8 anos) | Taxa: 12%

  • VPL = R$ 2.600 → Projeto viável ✅

Realidade: Múltiplas Incertezas

  • Investimento: R$ 65.000 - R$ 85.000
  • Receitas: R$ 12.000 - R$ 16.000 por ano
  • Duração: 7 - 10 anos
  • Taxa: 10% - 15%

Pergunta crítica: Qual a probabilidade real de sucesso?

Limitações da análise determinística:

  • Ignora a distribuição de resultados possíveis
  • Não quantifica o risco de insucesso

💡 Solução: Simulação de Monte Carlo quantifica a incerteza/risco.

Análise de Viabilidade Econômica sob Incerteza

Distribuição Triangular

  • A distribuição triangular é amplamente utilizada em simulações de Monte Carlo, especialmente em estudos de viabilidade econômica e financeira, devido às suas características únicas e aplicabilidade prática.

  • Função Densidade de Probabilidade

\[ f(x) = \begin{cases} \frac{2(x-a)}{(b-a)(c-a)} & \text{para } a \leq x < c, \\ \frac{2(b-x)}{(b-a)(b-c)} & \text{para } c \leq x \leq b, \\ 0 & \text{caso contrário}. \end{cases} \]

  • Valor Esperado (ou média):

\[ E(X) = \frac{a + b + c}{3} \]

  • Variância

\[ V(X) = \frac{a^2 + b^2 + c^2 - ab - ac - bc}{18} \]

Distribuição Triangular

Função Densidade de Probabilidade

Por que a Distribuição Triangular?

Condições Adequadas para Uso da Distribuição Triangular

  • Dados Limitados ou Incerteza Significativa

A distribuição triangular é particularmente útil quando os dados são escassos ou quando há uma grande incerteza sobre as estimativas das variáveis. Ela é ideal para modelar variáveis com estimativas baseadas em opiniões de especialistas ou quando se tem apenas uma ideia geral sobre os limites superior e inferior e uma estimativa razoável do valor mais provável.

  • Projetos com Escopo Bem Definido, mas com Parâmetros Incertos

Em projetos de investimento onde o escopo é conhecido (por exemplo, desenvolvimento de um novo produto, construção civil), mas os parâmetros individuais são incertos, a distribuição triangular ajuda a modelar os riscos associados a esses parâmetros de forma eficaz.

  • Análise Preliminar de Viabilidade

A distribuição triangular é ideal para análises preliminares, onde a rapidez e a facilidade de implementação são importantes, e a precisão absoluta dos resultados da simulação pode não ser crítica.

Distribuição Triangular em R

Tabela de Parâmetros

Parâmetro Descrição
a Limite mínimo (cenário pessimista)
b Limite máximo (cenário otimista)
c Moda (valor mais provável)
n Número de simulações
  • Em R:
library(triangulr)
rtri(n, a, b, c)

Escolha de Distribuições em Simulações Financeiras

Quando Usar Cada Distribuição?

Distribuição Quando Usar Parâmetros Exemplo Prático
Uniforme Incerteza total; todos os valores igualmente prováveis min, max Receitas anuais entre R$ 12-16 mil
Triangular Opinião de especialistas; valor mais provável conhecido min, max, moda Tempo de projeto: 9-11 anos (mais provável: 10)
Normal Fenômenos naturais; erros de medição; agregações média, desvio Retornos de ativos; inflação

Diretrizes Práticas:

Use Uniforme quando:

  • Não há informação sobre qual valor é mais provável
  • Cenário de “pior caso” vs “melhor caso” equiprováveis
  • Análise conservadora de sensibilidade
# Receitas podem variar igualmente entre os extremos
receitas <- runif(n, 12000, 16000)

Use Triangular quando: - Especialistas podem estimar min, max e “mais provável” - Parâmetros de projetos com base em experiência - Dados históricos limitados, mas há conhecimento do setor

# Tempo de construção: experiência sugere 10 meses como mais provável
tempo <- rtri(n, 9, 11, 10)

Use Normal quando:

  • Retornos financeiros (com cuidado nas caudas)
  • Variáveis que são somas de muitos fatores pequenos
  • Dados históricos abundantes sugerem normalidade
# Retornos de portólio diversificado
retornos <- rnorm(n, 0.08, 0.12)

⚠️ Cuidado: Nunca use Normal para variáveis que não podem ser negativas (preços, quantidades) sem truncamento adequado.

Análise de Insolvência via Simulação de Monte Carlo

Fator de Insolvência de Kanitz

Origem: Desenvolvido por Stephen Kanitz (Kanitz, 1978) para empresas brasileiras.

Fórmula:

\[ FI = 0,05A + 1,65B + 3,55C – 1,06D – 0,33E \]

Indicadores:

  • \(A =\) Rentabilidade do PL: lucro líquido / patrimônio líquido
  • \(B =\) Liquidez Geral: (AC + RLP) / exigível total
  • \(C =\) Liquidez Seca: (AC - estoques) / passivo circulante
  • \(D =\) Liquidez Corrente: ativo circulante / passivo circulante
  • \(E =\) Grau de Endividamento: passivo total / patrimônio líquido

Interpretação:

  • \(FI > 0\): Solvente (baixo risco)
  • \(-3 \leq FI \leq 0\): “Penumbra” (risco moderado)
  • \(FI < -3\): Insolvente (alto risco)

Por que simular? Os indicadores financeiros têm incerteza. A simulação quantifica o risco de classificação incorreta.

Fator de Insolvência de Kanitz

Simulação em R

# ==================================================
# Fator de Insolvência de Kanitz - Simulação em R
# ==================================================

# Fixa a semente para reprodutibilidade
set.seed(2024)

# Número de simulações
n_simulacoes <- 100000

# ==================================================
# 1. CÁLCULO DETERMINÍSTICO (VALOR PONTUAL)
# ==================================================

# Calcular FI usando os valores modais (determinístico)
fi_deterministico <- 0.05*0.15 + 1.65*1.60 + 3.55*0.90 - 1.06*4.50 - 0.33*5.00

# ==================================================
# 2. SIMULAÇÃO DE MONTE CARLO
# ==================================================

# Simular os indicadores financeiros com parâmetros dentro das funções rtri
A <- rtri(n_simulacoes, 0.12, 0.20, 0.15)  # Rentabilidade do PL
B <- rtri(n_simulacoes, 0.80, 2.80, 1.60)  # Liquidez Geral
C <- rtri(n_simulacoes, 0.80, 1.00, 0.90)  # Liquidez Seca
D <- rtri(n_simulacoes, 4.00, 5.30, 4.50)  # Liquidez Corrente
E <- rtri(n_simulacoes, 3.50, 8.00, 5.00)  # Grau de Endividamento

# Calcular o Fator de Insolvência para cada simulação
FI <- 0.05*A + 1.65*B + 3.55*C - 1.06*D - 0.33*E

# ==================================================
# 3. RESULTADOS
# ==================================================

# Resultado determinístico
cat("FI Determinístico:", fi_deterministico, "\n")
FI Determinístico: -0.5775 
# Resultados da simulação
cat("FI Médio (simulação):", mean(FI), "\n")
FI Médio (simulação): -0.62959 
cat("Probabilidade de Solvência:", mean(FI > 0)*100, "%\n")
Probabilidade de Solvência: 22.573 %
cat("Probabilidade de Penumbra:", mean(FI >= -3 & FI <= 0)*100, "%\n")
Probabilidade de Penumbra: 77.379 %
cat("Probabilidade de Insolvência:", mean(FI < -3)*100, "%\n")
Probabilidade de Insolvência: 0.048 %

Distribuição do Fator de Kanitz Simulado

Sumário dos Resultados

Método Determinístico vs. Simulação de Monte Carlo

Resultados Comparativos:

Métrica Determinístico Monte Carlo
FI -0.578 Mediana: -0.634
Incerteza Valor único P5: -2.2 | P95: 0.9
Classificação “Penumbra” Distribuição de Probabilidade do FI

Distribuição de Risco Simulada:

  • P(Solvente): 22.4% → Risco significativo de classificação otimista
  • P(Penumbra): 77.6% → Zona de incerteza predominante
  • P(Insolvente): 0% → Baixo risco de insolvência severa

Nota: P5 e P95 representam os percentis 5% e 95% da distribuição empírica (90% dos cenários ficam neste intervalo)

Vantagens da Simulação de Monte Carlo:

Quantifica incerteza: 22.4% de chance de classificação como solvente vs. valor pontual

Revela amplitude de cenários: 90% dos resultados entre FI = -2.2 e 0.9

Relevância para Análises Complexas:

A simulação torna-se ainda mais útil ao considerar:

  • Múltiplos indicadores com correlações setoriais
  • Cenários macroeconômicos e sazonalidade
  • Portfólios de crédito com dependências entre empresas

💡 Conclusão:

Monte Carlo transforma uma análise determinística em uma avaliação probabilística de risco.

Análise de Viabilidade sob Incerteza

Simulação do VPL

Vamos simular o VPL de um projeto de investimento usando:

\[ \text{VPL} = \sum_{t=1}^{\text{tempo}} \frac{\text{receita}_t}{(1 + \text{taxa})^t} + \frac{\text{valor residual}}{(1 + \text{taxa})^{\text{t}}} - \text{investimento inicial} \]

O código R para simular o VPL de um projeto de investimento é exibido nos próximos slides.

Função sapply() — Simulação de Projetos

Por que usamos sapply()?

Imagine que temos 100 mil projetos diferentes para simular, e cada projeto:

  • Tem duração própria (ex: 9, 10, ou 11 anos)

  • Receitas e taxas diferentes a cada simulação

  • Logo, não é possível vetorizar os cálculos como em um Excel

  • Precisamos de um jeito elegante e eficiente de aplicar uma função a cada simulação individualmente.

  • Função sapply():

vpl_sim <- sapply(1:n_sim, function(i) {
  receitas <- runif(tempo[i], 12000, 16000)
  vpl_fluxos <- sum(receitas / (1 + taxa[i])^(1:tempo[i]))
  vpl_fluxos + residual[i]/(1 + taxa[i])^tempo[i] - invest_rec[i]
})
  • O que está acontecendo?
Etapa O que faz Analogia
1:n_sim Vetor [1, 2, …, 100000] “Fila de projetos a serem analisados”
function(i) {...} Função para calcular VPL do projeto i “Receita de como calcular o VPL de um projeto”
sapply(...) Aplica a função a cada i e devolve vetor de resultados “Esteira automática de cálculo de VPL”
  • Analogia

Imagine uma linha de montagem com 100.000 kits de projeto. sapply() é como uma máquina que pega cada kit, aplica a mesma receita de cálculo, e devolve o resultado final.

  • Por que não usamos for?
for loop tradicional sapply()
Verboso Mais compacto
Exige criar vetor vazio Retorna vetor pronto
Propenso a erros de índice Mais seguro

Resumo: sapply() é como um “for melhorado” que aplica uma função a cada item de uma sequência, devolvendo um vetor com os resultados.

VPL Determinístico vs. Simulação - Cenário Base

Cálculo Determinístico com Parâmetros Modais

Parâmetros do Projeto (Valores Mais Prováveis):

  • Investimento inicial: R$ 75.000 (ponto médio: 65.000 - 85.000)
  • Receitas anuais: R$ 14.000 (ponto médio: 12.000 - 16.000)
  • Duração: 10 anos (valor modal da triangular: 9 - 11 anos)
  • Taxa de desconto: 13% a.a. (valor modal da triangular: 10% - 15%)
  • Valor residual: R$ 5.000 (valor modal da triangular: 4.000 - 6.000)

Cálculo do VPL Determinístico:

# Parâmetros determinísticos (valores modais)
investimento_det <- 75000
receita_anual_det <- 14000
duracao_det <- 10
taxa_desconto_det <- 0.13
valor_residual_det <- 5000

# Cálculo do VPL usando a fórmula padrão
# VPL = ∑[Receitas/(1+r)^t] + Valor_Residual/(1+r)^n - Investimento_Inicial

# Fluxos de receitas descontados
vpl_receitas_det <- sum(receita_anual_det / (1 + taxa_desconto_det)^(1:duracao_det))

# Valor residual descontado
vpl_residual_det <- valor_residual_det / (1 + taxa_desconto_det)^duracao_det

# VPL final
vpl_deterministico <- vpl_receitas_det + vpl_residual_det - investimento_det

# Resultados com formatação brasileira
cat("VPL das receitas:", format(round(vpl_receitas_det, 0), big.mark = ".", decimal.mark = ","), "reais\n")
VPL das receitas: 75.967 reais
cat("VPL do valor residual:", format(round(vpl_residual_det, 0), big.mark = ".", decimal.mark = ","), "reais\n")
VPL do valor residual: 1.473 reais
cat("VPL total (determinístico):", format(round(vpl_deterministico, 0), big.mark = ".", decimal.mark = ","), "reais\n")
VPL total (determinístico): 2.440 reais
# Decisão baseada no VPL determinístico
if (vpl_deterministico > 0) {
  cat("Decisão: Projeto VIÁVEL (VPL > 0)\n")
} else {
  cat("Decisão: Projeto INVIÁVEL (VPL ≤ 0)\n")
}
Decisão: Projeto VIÁVEL (VPL > 0)

Limitações da Análise Determinística:

⚠️ Ignora incerteza: Usa apenas valores pontuais, sem considerar variabilidade

⚠️ Decisão binária: Resultado único não quantifica probabilidade de erro

⚠️ Subestima risco: Não mostra amplitude de cenários possíveis

⚠️ Informação limitada: Não informa sobre distribuição de resultados

💡 Próximo Passo:

A Simulação de Monte Carlo captura toda essa incerteza, fornecendo uma avaliação probabilística completa do risco do projeto.

Análise de Viabilidade sob Incerteza

Simulação de VPL - Código Comentado Detalhadamente

# Configuração inicial para reprodutibilidade
set.seed(567)
n_sim <- 100000  # 100 mil simulações

# PASSO 1: Simula as variáveis/inputs do VPL
invest_rec <- runif(n_sim, 65000, 85000)    # Investimento inicial (uniforme)
residual   <- rtri(n_sim, 4000, 6000, 5000)   # Valor residual (triangular)
tempo      <- round(rtri(n_sim, 9, 11, 10))   # Duração em anos (triangular)
taxa       <- rtri(n_sim, 0.10, 0.15, 0.13)  # Taxa de desconto (triangular)

# PASSO 2: simula as receitas e calcula VPL
vpl_sim <- sapply(seq_len(n_sim), function(i) {
  
  # Gera receitas aleatórias para o projeto i 
  receitas <- runif(tempo[i], 12000, 16000)
  
  # Calcula VPL dos fluxos de receitas descontados
  vpl_fluxos <- sum(receitas / (1 + taxa[i])^(1:tempo[i]))
  
  # VPL total = fluxos + valor residual - investimento inicial
  vpl_total <- vpl_fluxos + residual[i]/(1 + taxa[i])^tempo[i] - invest_rec[i]
  
  return(vpl_total)  # retorna VPL do projeto i
})


# VPL simulado mediano
vpl_mediano <- median(vpl_sim)  # Mediana dos VPLs simulados
vpl_mediano
[1] 3524.3
# Estimativa da Probabilidade de Viabilidade
prob_viavel <- mean(vpl_sim > 0) * 100  # % de projetos com VPL > 0
prob_viavel
[1] 66.995
# Estimativa da Probabilidade de Inviabilidade
prob_inviavel <- mean(vpl_sim <= 0) * 100  # % de projetos com VPL ≤ 0
prob_inviavel
[1] 33.005

Por que esse código é assim?

  • Linha 5-9: Cada projeto tem características fixas (duração, taxa, etc.)

  • Linha 12: sapply() processa cada projeto individualmente

  • Linha 15: Receitas são diferentes para cada projeto (tamanho varia com tempo[i])

  • Linha 18: Fórmula padrão do VPL aplicada ao projeto i

Resultado: Vetor vpl_sim com 100.000 VPLs simulados prontos para análise!

Distribuição do VPL Simulado

Resultados

Análose Determinística vs. Simulação de MC

Resultados Comparativos:

Métrica Determinístico Monte Carlo
VPL R$ 2.440 Mediana: R$ 3.524
Incerteza Valor único P5: R$ -8.226 | P95: R$ 15.401
Decisão Viável (binária) Distribuição probabilística

Distribuição de Risco Simulada:

  • P(Viável, VPL > 0): 67% → Probabilidade de sucesso do projeto

  • P(Inviável, VPL ≤ 0): 33% → Risco de prejuízo financeiro

Nota: P5 e P95 representam os percentis 5% e 95% da distribuição empírica (90% dos cenários ficam neste intervalo)

Vantagens da Simulação de Monte Carlo:

Quantifica risco de insucesso: 33% de chance de VPL negativo vs. decisão binária

Revela amplitude de cenários: 90% dos resultados entre R$ -8.226 e R$ 15.401

Informa decisões: Quantifica a incerteza / risco do projeto

Relevância para Análises Complexas:

A simulação torna-se ainda mais valiosa ao considerar:

  • Correlações entre variáveis (inflação × juros, receita × custos)
  • Cenários macroeconômicos e ciclos econômicos
  • Portfólios de projetos com dependências e restrições orçamentárias

💡 Conclusão:

Monte Carlo transforma uma análise determinística em uma avaliação probabilística de viabilidade

Aplicação: Gestão de Capital de Giro no Agronegócio

Contexto

Importância Econômica:

  • Agronegócio representa parcela significativa do PIB brasileiro

  • Soja: uma das principais commodities de exportação

  • Produção com características sazonais: descasamento temporal entre custos e receitas

Características do Ciclo Financeiro:

  • Desembolsos concentrados: período de plantio (insumos, maquinário)
  • Receitas concentradas: período de colheita e comercialização
  • Déficit de caixa temporário: meses entre investimento e retorno

Principais Incertezas:

  • Produtividade: fatores climáticos, fitossanitários, qualidade do solo
  • Preços: volatilidade dos mercados internacionais de commodities
  • Custos de insumos: fertilizantes, defensivos, combustível
  • Taxa de câmbio: impacta custos (importações) e receitas (exportações)

Problema Gerencial:

Qual o capital de giro necessário para atravessar o ciclo produtivo sem comprometer a operação?

Relevância da Simulação:

  • Métodos determinísticos podem subestimar necessidades de capital
  • Monte Carlo permite capturar interações entre múltiplas variáveis incertas
  • Possibilita quantificar probabilidades de diferentes cenários

Nota: Os parâmetros utilizados neste exemplo são ilustrativos para fins didáticos apenas.

Modelagem: Fluxo de Caixa da Safra de Soja

Estrutura do Exemplo

Fazenda Hipotética:

  • Área: 2.000 hectares
  • Ciclo: Janeiro (plantio) → Outubro (colheita/venda)
  • Custo total: R$ 4.000/hectare

Cronograma de Desembolsos (% do custo total - exemplo típico):

Mês Jan Fev Mar Abr Mai Jun Jul Ago Set Out
% Custo 10% 25% 20% 10% 5% 5% 5% 5% 5% 10%

Nota: Os 10% em outubro representam custos de colheita, transporte e comercialização.

Receitas:

  • Venda antecipada (janeiro): 30% da produção a preço forward (desconto 5%)
  • Venda spot (outubro): 70% da produção restante

Parâmetros Incertos (para fins didáticos):

Variável Mínimo Moda Máximo Unidade
Produtividade 45 60 75 sacas/ha
Preço spot 70 85 100 R$/saca
Custo/hectare 3.500 4.000 4.500 R$/ha

Correlação Assumida:

  • Produtividade × Preço: -0.30 (hipótese: anos de baixa produção → preços mais altos)

Objetivo da Simulação:

Estimar a distribuição do Déficit Máximo (Necessidade de Capital de Giro)

\[ \text{Déficit máximo} = -\min_t\bigl(\mathrm{SA}_t\bigr) \]

Simulação de Monte Carlo (MC)

    • 20 000 cenários de produtividade, preço (correlação –0,30) e custo
    • Resultado: curva de probabilidade da necessidade de caixa ao longo do ciclo

Metodologia:

  • A metodologia de simulação segue as diretrizes de Hardaker et al. (2004) para gestão de risco agrícola e implementa os procedimentos de Richardson, Klose e Gray (2000) para simulação Monte Carlo no agronegócio.

⚠️ Importante: Todos os parâmetros são ilustrativos. Em aplicações reais, devem ser calibrados com dados históricos específicos da região e cultura.

Conceitos Fundamentais: Fluxo de Caixa Acumulado

Entendendo o “Déficit Máximo” e sua Importância

O que é o Fluxo de Caixa Acumulado?

  • Mês a mês: Receitas - Custos = Fluxo líquido mensal
  • Acumulado: Soma progressiva dos fluxos mensais desde janeiro
  • Exemplo: Se jan = -100, fev = -50, mar = +200 → Acumulados: -100, -150, +50

Por que o Déficit Máximo é Importante?

Déficit máximo = MAIOR necessidade de caixa durante o ciclo

Representa quanto de capital de giro a fazenda precisa ter disponível

Exemplo prático: Se déficit máximo = R$ 2 milhões, a fazenda precisa de R$ 2 milhões de capital de giro

Interpretação Gerencial:

Déficit Máximo Significado Ação Necessária
R$ 500 mil Necessidade máxima de R$ 500 mil Linha de crédito de R$ 500 mil
R$ 2 milhões Necessidade máxima de R$ 2 milhões Capital de giro de R$ 2 milhões
R$ 0 Sempre positivo Não precisa de financiamento

💡 Insight Principal:

O déficit máximo identifica o pior momento financeiro do ciclo produtivo - exatamente quando mais precisamos de capital de giro!

Por que Simulamos?

Esse valor varia conforme produtividade, preços e custos. A simulação mostra toda a distribuição de necessidades possíveis, não apenas um valor pontual.

Conceitos Fundamentais: NCG

Definição

Chamamos de Necessidade de Capital de Giro (NCG) o montante máximo de recursos financeiros que a empresa precisa ter disponível para atravessar todo o ciclo produtivo sem interromper suas operações.

Seja

\[ \text{SA}_t = \sum_{k=1}^{t} (\text{Receitas}_k - \text{Custos}_k) \]

o Saldo de Caixa Acumulado até o mês \(t\), obtido somando‐se todos os fluxos líquidos mensais desde o início do ciclo.

A NCG é então definida por

\[ \begin{aligned} \text{NCG} &= -\min_{t}\bigl(\text{SA}_t\bigr) \\[6pt] &= \text{Déficit máximo} \end{aligned} \]

isto é, o valor absoluto do menor (mais negativo) saldo acumulado ao longo de todo o período analisado. \(\text{NCG} = \text{Déficit máximo}\)

  • Quando \(\text{SA}_t\) atinge seu ponto mais baixo, temos o déficit máximo.

  • Financiar exatamente esse déficit garante que a empresa consiga pagar todas as contas até que as receitas da colheita (ou das vendas) entrem no caixa.

Intuição: pense no saldo acumulado como o nível de água de uma caixa d’água — ele desce conforme você paga insumos e sobe quando recebe pelas vendas. A NCG é a profundidade máxima. Disponibilizar esse volume de recursos (via reservas ou linha de crédito) evita que o nível fique “abaixo de zero” e a operação “seque”.

Funções lapply() + do.call()

Por que usaR lapply() + do.call(rbind, ...)?

Precisamos simular 20 mil safras e obter um data frame único com os resultados

Cada simulação (simula_safra()) retorna um data frame de 1 linha com:

  • Déficit máximo

  • Lucro final

  • Produtividade

  • Preço final

  • Passo 1: Usamos lapply() para repetir a função

lista_resultados <- lapply(1:n_sim, function(x) simula_safra())
Função O que faz Analogia
1:n_sim Vetor de números 1 a 20000 Lista de IDs das safras
function(x) simula_safra() Aplica a simulação a cada ID Receita para simular uma safra
lapply(...) Executa para cada safra e guarda numa lista Caixa com 20.000 recibos (um por safra)
  • Passo 2: Usamos do.call(rbind, ...) para juntar tudo
resultados <- do.call(rbind, lista_resultados)
Função O que faz Analogia
do.call() Executa uma função (rbind) em todos os elementos da lista Um robô que empilha os 20.000 recibos numa planilha única
rbind(df1, df2, ..., df20000) Junta todos os data frames Linhas de uma planilha final
  • Tudo junto:
resultados <- do.call(rbind, lapply(1:n_sim, function(x) simula_safra()))
  • Analogia

Você tem 20.000 envelopes (cada um com um relatório de safra). lapply() preenche os envelopes. do.call(rbind, ...) abre todos e cola numa única planilha com os 20.000 resultados.

Por que não usar sapply()?

  • sapply() tenta devolver vetores — bom para números

  • Aqui cada item é um data frame → melhor usar lapply(), que devolve lista

  • Por que não usar for?

for exige criar um data frame vazio e juntar resultados um a um (ineficiente e suscetível a erros)

Resumo: lapply() + do.call(rbind, ...) é a forma mais elegante de simular milhares de cenários complexos e consolidar os resultados.

Simulação de Monte Carlo: Código R

Implementação da Simulação

# Parâmetros da fazenda hipotética
set.seed(123)
area_ha <- 2000
n_sim <- 20000

# Cronograma de desembolsos (% do custo total por mês)
cronograma_custos <- c(0.10, 0.25, 0.20, 0.10, 0.05, 0.05, 0.05, 0.05, 0.05, 0.10)

# Parâmetros de comercialização
venda_antecipada <- 0.30 # 30% vendido antecipadamente
desconto_forward <- 0.95 # preço forward = 95% do spot

# Função para simular um cenário
simula_safra <- function() {
  # Simula parâmetros incertos (distribuições triangulares)
  produtividade <- rtri(1, 45, 75, 60) # sacas/ha
  custo_ha <- rtri(1, 3500, 4500, 4000) # R$/ha
  
  # Gerar preço base
  preco_base <- rtri(1, 70, 100, 85) # R$/saca
  
  # Aplicar correlação negativa de -0.30 entre produtividade e preço
  # Normalizar produtividade em torno da média
  prod_media <- 60
  prod_desvio <- 15 # (75-45)/2
  prod_padronizada <- (produtividade - prod_media) / prod_desvio
  
  # Ajustar preço baseado na correlação
  preco_desvio <- 15 # (100-70)/2
  ajuste_correlacao <- -0.30 * prod_padronizada * preco_desvio
  preco_spot <- preco_base + ajuste_correlacao
  
  # Garantir que o preço permaneça dentro dos limites
  preco_spot <- pmax(70, pmin(100, preco_spot))
  
  # Calcula fluxos mensais
  custos_mensais <- cronograma_custos * custo_ha * area_ha
  
  # Receitas (concentradas em janeiro e outubro)
  receitas <- rep(0, 10)
  receitas[1] <- venda_antecipada * produtividade * area_ha * preco_spot * desconto_forward
  receitas[10] <- (1 - venda_antecipada) * produtividade * area_ha * preco_spot
  
  # Fluxo de caixa acumulado
  fluxo_liquido <- receitas - custos_mensais
  saldo_acumulado <- cumsum(fluxo_liquido)
  
  # Retorna métricas de interesse
  data.frame(
    deficit_maximo = -min(saldo_acumulado), # maior déficit no período (sempre positivo)
    lucro_final = saldo_acumulado[10],      # resultado final
    produtividade = produtividade,
    preco_final = preco_spot
  )
}

# Executa simulação Monte Carlo
resultados <- do.call(rbind, lapply(1:n_sim, function(x) simula_safra()))

# Verificar correlação obtida
correlacao_simulada <- cor(resultados$produtividade, resultados$preco_final)
cat("Correlação obtida:", round(correlacao_simulada, 3), "(alvo: -0.30)\n")
Correlação obtida: -0.279 (alvo: -0.30)
# Exibe resumo básico como data frame
resumo_basico <- data.frame(
  Métrica = c("Déficit máximo médio", "Maior déficit simulado", "Lucro médio esperado"),
  Valor_Mil_Reais = c(
    round(mean(resultados$deficit_maximo) / 1000),
    round(max(resultados$deficit_maximo) / 1000),
    round(mean(resultados$lucro_final) / 1000)
  )
)
print(resumo_basico)
                 Métrica Valor_Mil_Reais
1   Déficit máximo médio            4301
2 Maior déficit simulado            6070
3   Lucro médio esperado            2017

Nota sobre a Implementação da Correlação

Solução Aproximada

Atenção: O método usado para introduzir correlação entre produtividade e preço é uma aproximação simplificada adequada para fins didáticos.

  • Por que usamos esta aproximação?

    • Código mais intuitivo e fácil de entender
    • Adequado para uma primeira experiência com simulação
    • Produz resultados suficientemente próximos do desejado
  • Em aplicações profissionais, usaríamos métodos mais rigorosos como:

    • Decomposição de Cholesky
    • Cópulas
    • Transformação de variáveis correlacionadas
  • Verificação: Nossa aproximação gerou correlação de -0.297 (alvo: -0.30), o que é adequado para este exemplo didático.

💡 Lembre-se: Em ciência de dados/estatística, frequentemente começamos com soluções simples e evoluímos para métodos mais sofisticados conforme necessário.

Resultados da Simulação: Necessidade de Capital de Giro

Análise dos Resultados

# A variável deficit_maximo já está em valores positivos (em reais)
# Converte para milhões para facilitar a leitura
necessidade_capital <- resultados$deficit_maximo / 1000000  # em milhões

# ========================================
# VALIDAÇÃO DO MODELO
# ========================================
correlacao_simulada <- cor(resultados$produtividade, resultados$preco_final)
cat("Correlação obtida entre produtividade e preço:", 
    round(correlacao_simulada, 3), "\n")
Correlação obtida entre produtividade e preço: -0.279 
# ========================================
# ESTATÍSTICAS DESCRITIVAS
# ========================================
estatisticas_basicas <- data.frame(
  Métrica = c("Necessidade média", "Necessidade máxima", "Desvio-padrão"),
  Valor_Milhoes_R = c(
    round(mean(necessidade_capital), 1),
    round(max(necessidade_capital), 1),
    round(sd(necessidade_capital), 1)
  )
)

# Exibe as estatísticas básicas
estatisticas_basicas
             Métrica Valor_Milhoes_R
1  Necessidade média             4.3
2 Necessidade máxima             6.1
3      Desvio-padrão             0.5
# ========================================
# PERCENTIS PARA PLANEJAMENTO
# ========================================
percentis <- quantile(necessidade_capital, probs = c(0.50, 0.75, 0.90, 0.95))
tabela_percentis <- data.frame(
  Percentil = c("50%", "75%", "90%", "95%"),
  Cenarios_Cobertos = c("50% dos cenários", "75% dos cenários", 
                        "90% dos cenários", "95% dos cenários"),
  Necessidade_Milhoes_R = round(percentis, 1)
)

# Exibe a tabela de percentis
tabela_percentis
    Percentil Cenarios_Cobertos Necessidade_Milhoes_R
50%       50%  50% dos cenários                   4.3
75%       75%  75% dos cenários                   4.6
90%       90%  90% dos cenários                   4.9
95%       95%  95% dos cenários                   5.1
# ========================================
# PROBABILIDADES
# ========================================
probabilidades_risco <- data.frame(
  Limite_Milhoes_R = c(1, 2, 3),
  Probabilidade_Exceder_Pct = c(
    round(mean(necessidade_capital > 1) * 100, 1),
    round(mean(necessidade_capital > 2) * 100, 1),
    round(mean(necessidade_capital > 3) * 100, 1)
  )
)

# Exibe as probabilidades de exceder limites
probabilidades_risco
  Limite_Milhoes_R Probabilidade_Exceder_Pct
1                1                     100.0
2                2                     100.0
3                3                      99.7

Visualização da Distribuição:

💡 Interpretação para Administradores:

  • Planejamento Conservador: Use o percentil 95% para garantir cobertura na maioria dos cenários

  • Gestão de Risco: Monitore as probabilidades de necessidades extremas (> R$ 2-3 milhões)

  • Estratégias Financeiras: Combine linha de crédito + reservas para otimizar custo de capital

Decisões Estratégicas Baseadas na Simulação

Aplicações Práticas dos Resultados

              Cenario          Descrição Necessidade_Milhoes_R
1        Cenário Base  Necessidade média                   4.3
2 Cenário Conservador      Percentil 95%                   5.1
3      Cenário Stress Pior caso simulado                   6.1
          Uso_Recomendado
1       Orçamento inicial
2        Linha de crédito
3 Reserva de contingência

Vantagem da Simulação sobre Análise Determinística:

Monte Carlo revela a distribuição completa de necessidades de capital, permitindo:

  • Quantificar probabilidades de diferentes cenários
  • Otimizar estratégias de financiamento
  • Preparar contingências para situações extremas
  • Tomar decisões informadas baseadas em risco quantificado

Extensões e Aplicações Avançadas

Possíveis Refinamentos do Modelo

🌱 Aprimoramentos Realísticos:

Risco Climático:

  • Incluir eventos extremos (seca, geada) com distribuições específicas
  • Modelar correlação espacial entre regiões produtoras

Dinâmica de Preços:

  • Incorporar sazonalidade e tendências de preços
  • Considerar volatilidade condicional (modelos GARCH)

Aspectos Financeiros:

  • Incluir custo do capital sobre déficits
  • Modelar diferentes modalidades de crédito rural
  • Considerar impostos e taxas sobre operações

📊 Análises Complementares:

Análise de Sensibilidade:

  • Identificar quais parâmetros mais impactam a necessidade de capital
  • Determinar os fatores críticos de risco financeiro

Otimização de Estratégias:

  • Percentual ótimo de venda antecipada
  • Timing ideal para contratação de hedge
  • Dimensionamento ótimo de reservas de liquidez

Validação do Modelo:

  • Backtesting com dados históricos disponíveis
  • Comparação com benchmarks setoriais

🎯 Valor para a Tomada de Decisão:

  1. Quantifica necessidades de capital com base probabilística
  2. Identifica os principais direcionadores de risco
  3. Permite simulação de diferentes estratégias de mitigação
  4. Fundamenta negociações financeiras com dados objetivos

Resultado: Transforma a gestão financeira agrícola de decisões intuitivas para escolhas baseadas em análise quantitativa de risco.

Erro de Monte Carlo

Precisão da Estimativa

  • A margem de erro em Monte Carlo decresce com \(\sqrt{n}\):

\[ \text{EP} \approx \frac{\sigma}{\sqrt{n}}. \]

  • Para probabilidade \(p = P(VPL>0)\), o erro padrão é:

\[ SE(p) = \sqrt{\frac{p(1-p)}{n}}. \]

Exemplo Prático:

Se \(P(VPL > 0) = 0.75\) com \(n = 10.000\) simulações:

p_estimado <- 0.75
n_simulacoes <- 10000
erro_padrao <- sqrt(p_estimado * (1 - p_estimado) / n_simulacoes)
erro_padrao  # ≈ 0.0043
[1] 0.0043301
# Intervalo de confiança aproximado (95%)
ic_inferior <- p_estimado - 1.96 * erro_padrao  # ≈ 0.741
ic_superior <- p_estimado + 1.96 * erro_padrao  # ≈ 0.759

Interpretação: A probabilidade verdadeira está entre 74.1% e 75.9% com 95% de confiança.

Regras Práticas:

  • Duplicar \(n\) reduz o erro em \(\approx 1/\sqrt{2} \approx 0.71\) (melhora de 29%)

  • Quadruplicar \(n\) reduz o erro pela metade

  • Para erro < 1% em probabilidades: use \(n \geq 10.000\)

  • Para erro < 0.1% em probabilidades: use \(n \geq 1.000.000\)

Importância: Garanta \(n\) suficientemente grande para decisões confiáveis, especialmente em contextos financeiros críticos.

Limitações e Cuidados com Monte Carlo

Quando Monte Carlo Pode Falhar

⚠️ Principais Limitações:

1. Garbage In, Garbage Out

  • Qualidade dos resultados = qualidade dos inputs
  • Distribuições mal especificadas geram conclusões errôneas
  • Exemplo: assumir normalidade para variáveis que não podem ser negativas

2. Correlações Ignoradas

  • Tratar variáveis independentes quando são correlacionadas
  • Exemplo: inflação e taxa de juros geralmente se movem juntas

3. Excesso de Confiança

  • Resultados podem parecer mais precisos do que realmente são
  • “Pseudo-precisão”: 6 casas decimais em estimativas baseadas em opiniões

4. Complexidade Desnecessária

  • Usar simulação quando análise simples seria suficiente
  • Exemplo: VPL com apenas 1 parâmetro incerto

🎯 Boas Práticas:

Valide as distribuições escolhidas com dados ou especialistas

Teste a sensibilidade dos resultados aos parâmetros

Compare com métodos mais simples quando possível

Documente todas as suposições claramente

Comunique a incerteza inerente às estimativas

Lembre-se: Monte Carlo é uma ferramenta poderosa, mas não substitui o julgamento crítico sobre as suposições do modelo.

Simulação de Monte Carlo

Relevância para o Mestrado

Na pesquisa

  • Dissertações: tópico recorrente em finanças quantitativas
  • Periódicos internacionais: metodologia amplamente aceita

Na carreira

  • Diferencial competitivo: poucos dominam simulação em Python/R
  • Tomada de decisão: quantificar risco → decisões baseadas em dados
  • Compliance: exigências de Basileia, CVM, BACEN (setor financeiro)

🚀 Competências-chave

  1. Desenvolver pensamento probabilístico (vs. determinístico)
  2. Modelar quantitativamente problemas complexos
  3. Comunicar risco de forma clara a stakeholders não-técnicos

Resultado: capacidade de apoiar decisões estratégicas sob incerteza – habilidade altamente valorizada no mercado.

Exercício 1

Simulação do Índice de Liquidez Rápida

O Índice de Liquidez Rápida (ILR) mede a capacidade de uma empresa pagar suas obrigações de curto prazo sem depender da venda de estoques:

\[ \text{ILR} = \frac{\text{Ativo Circulante} - \text{Estoques}}{\text{Passivo Circulante}} \]

Cenário: Você é analista financeiro de uma empresa do setor de varejo e precisa avaliar o risco de liquidez sob incerteza.

Informações dos especialistas (baseadas em dados setoriais):

  • Ativo Circulante: entre R$ 800 mil e R$ 1.200 mil (mais provável: R$ 950 mil)
  • Estoques: entre R$ 200 mil e R$ 400 mil (mais provável: R$ 280 mil)
  • Passivo Circulante: entre R$ 600 mil e R$ 900 mil (mais provável: R$ 720 mil)

Suas tarefas:

  1. Simule 20.000 cenários do ILR usando Monte Carlo com distribuições triangulares

  2. Calcule \(P(\text{ILR} < 1)\) e interprete o resultado

  3. Compare o ILR médio simulado com o modelo determinístico (valores mais prováveis)

  4. Recomende ações se a probabilidade de ILR < 1 for maior que 40%

Código estrutura (complete o código):

# fixa a semente para reprodutibilidade
set.seed(2024)

# Define o número de simulações
n_sim <- 20000

# Complete os parâmetros (min, max, moda)
ativo_circ <- rtri(n_sim, ___, ___, ___)
estoques   <- rtri(n_sim, ___, ___, ___)
passivo_circ <- rtri(n_sim, ___, ___, ___)

# Calcule o ILR
ilr_sim <- (ativo_circ - estoques) / passivo_circ

# Complete as análises
prob_ilr_baixo <- mean(ilr_sim < 1) * 100
ilr_medio <- mean(ilr_sim)

# Modelo determinístico para comparação
ilr_deterministico <- (950 - 280) / 720

# Exiba os resultados
cat("Probabilidade ILR < 1:", round(prob_ilr_baixo, 1), "%\n")
cat("ILR médio simulado:", round(ilr_medio, 2), "\n")
cat("ILR determinístico:", round(ilr_deterministico, 2), "\n")

Perguntas:

  1. Qual a probabilidade de ILR < 1? Como interpreta esse risco?
  2. Por que o ILR médio simulado é próximo ao determinístico?
  3. Que ações recomendaria se P(ILR < 1) > 40%?

Exercício 1

Soluções

Código R completo:

# define os parâmetros necessários
set.seed(2024)
n_sim <- 20000

# Parâmetros das distribuições triangulares (min, max, moda) - em milhares de R$
ativo_circ <- rtri(n_sim, 800, 1200, 950)    # Ativo Circulante
estoques <- rtri(n_sim, 200, 400, 280)       # Estoques
passivo_circ <- rtri(n_sim, 600, 900, 720)   # Passivo Circulante

# Cálculo do ILR para cada cenário
ilr_sim <- (ativo_circ - estoques) / passivo_circ

# Probabilidade de ILR < 1 (em %)
prob_risco <- mean(ilr_sim < 1) * 100       

# ILR médio simulado
ilr_medio <- mean(ilr_sim)

# Desvio-padrão (opcional)
ilr_desvio <- sd(ilr_sim)                     

# Modelo determinístico (valores mais prováveis)
ilr_det <- (950 - 280) / 720    # Resultado: 0.930

# Exibição dos resultados
cat("=== RESULTADOS DA SIMULAÇÃO ===\n")
=== RESULTADOS DA SIMULAÇÃO ===
cat("Probabilidade de ILR < 1:", round(prob_risco, 1), "%\n")
Probabilidade de ILR < 1: 67.4 %
cat("ILR médio simulado:", round(ilr_medio, 3), "\n")
ILR médio simulado: 0.938 
cat("ILR determinístico:", round(ilr_det, 3), "\n")
ILR determinístico: 0.931 
cat("Desvio-padrão do ILR:", round(ilr_desvio, 3), "\n")
Desvio-padrão do ILR: 0.149 
# Visualização opcional
hist(ilr_sim, breaks = 50, col = "lightblue", 
     main = "Distribuição do ILR Simulado",
     xlab = "Índice de Liquidez Rápida", ylab = "Frequência")
abline(v = 1, col = "red", lwd = 2, lty = 2)  # Linha crítica
abline(v = ilr_medio, col = "steelblue", lwd = 2)  # Média
legend("topright", c("ILR = 1.0", "Média"), col = c("red", "blue"), lwd = 2)

  • 1. Qual a probabilidade de ILR < 1? Como interpreta esse risco?

Resposta: A probabilidade é de aproximadamente 49%.

Interpretação: Em cerca de metade dos cenários simulados, a empresa pode ter dificuldades para cobrir suas obrigações de curto prazo sem vender estoques. Isso indica um risco moderado de liquidez que requer monitoramento, mas não caracteriza uma situação de crise.

  • 2. Por que o ILR médio simulado é próximo ao determinístico?

Resposta: Pela Lei dos Grandes Números, a média de muitas simulações (20.000) converge para o valor esperado teórico. Por isso, o ILR médio simulado (0.939) fica muito próximo do cálculo determinístico (0.930).

Diferença fundamental: A simulação revela a variabilidade do ILR (desvio-padrão = 0.134), enquanto o cálculo determinístico mostra apenas um ponto. A simulação quantifica a incerteza.

  • 3. Que ações recomendaria se P(ILR < 1) > 40%?

Resposta: Como a probabilidade (49%) é maior que 40%, recomendo:

Monitoramento:

  • Acompanhar ILR mensalmente
  • Estabelecer alertas quando ILR < 0.85
  • Monitorar tendências sazonais

Gestão de Capital de Giro:

  • Acelerar cobrança de clientes (reduzir prazo médio de recebimento)
  • Negociar prazos maiores com fornecedores
  • Otimizar níveis de estoque (evitar excesso)

Flexibilidade Financeira:

  • Pré-negociar linha de crédito rotativo
  • Diversificar fontes de financiamento de curto prazo
  • Manter reserva de caixa para emergências

Conclusão: Essas são medidas preventivas, não de emergência. Para empresas de varejo, ILR próximo a 1.0 é comum, pois os estoques fazem parte do modelo de negócio.

  • Pontos de Aprendizagem:
  1. Monte Carlo quantifica incerteza que análises determinísticas não capturam

  2. Distribuições triangulares são úteis quando há estimativas de min/max/moda

  3. Interpretação contextual é essencial - mesmos números podem ter significados diferentes por setor

  4. Simulação informa decisões de gestão com base probabilística, não apenas cenários pontuais

Pacote tidyquant, Séries de Preços e de Retornos de Ações

Pacote tidyquant

Descrição

  • Com utilizaremos dados reais de séries de preços de ações do para ilustrar o VaR e ES (CVaR), precisamos entender como importar essas séries de preços de ações usando o tidyquant.

  • O pacote tidyquant integra os melhores pacotes da linguagem R para coletar, manipular e analisar dados financeiros com o tidyverse.

  • Como o tidyquant é possível realizar análises financeiras completas usando a sintaxe do tidyverse.

  • A função tq_get() do pacote tidyquant é uma muito útil para coletar dados financeiros de diversas fontes, como Yahoo Finance, FRED, entre outras.

Função tq_get()

Função tq_get()

  • A sintaxe básica da função tq_get() é:
tq_get(x, from = NULL, to = NULL, ...)

Onde:

  • x: é um vetor de tickers das ações ou o nome do índice que você deseja obter os dados.

  • from: é a data de início para a coleta dos dados (formato “YYYY-MM-DD”).

  • to: é a data de término para a coleta dos dados (formato “YYYY-MM-DD”).

A função retorna um data frame com as colunas:

  • symbol: é o ticker da ação ou do índice.
  • date: é a data da observação.
  • open: é o preço de abertura da ação no dia.
  • high: é o preço mais alto da ação no dia.
  • low: é o preço mais baixo da ação no dia.
  • close: é o preço de fechamento da ação no dia.
  • volume: é o volume de ações negociadas no dia.

Exemplo 1 - Função tq_get()

Importação de Séries de Preços Diários de 2 Ações

# salva as séries importadas no objeto serie_bivariada
serie_bivariada <- c("AAPL", "META") %>% 
  # obtem os dados de fechamento das ações a partir de 01/01/2024
  tq_get(from = "2024-01-01") %>%
  # seleciona as colunas relevantes
  select(symbol, date, close) %>%
  # renomeia as colunas para facilitar a leitura
  rename(
    compania = symbol,
    dia = date,
    preco_fechamento = close
  )

# Exibe as 6 primeiras linhas da data frame
head(serie_bivariada)
# A tibble: 6 × 3
  compania dia        preco_fechamento
  <chr>    <date>                <dbl>
1 AAPL     2024-01-02             186.
2 AAPL     2024-01-03             184.
3 AAPL     2024-01-04             182.
4 AAPL     2024-01-05             181.
5 AAPL     2024-01-08             186.
6 AAPL     2024-01-09             185.
# Exibe as 6 últimas linhas da data frame
tail(serie_bivariada)
# A tibble: 6 × 3
  compania dia        preco_fechamento
  <chr>    <date>                <dbl>
1 META     2025-06-17             697.
2 META     2025-06-18             696.
3 META     2025-06-20             682.
4 META     2025-06-23             699.
5 META     2025-06-24             712.
6 META     2025-06-25             709.

Preparação de Dados: pivot_wider()

Função pivot_wider() do tidyr - Exercício 3

A função pivot_wider() transforma dados do formato longo para o formato largo (wide),.

Por que precisamos transformar?

Para estimar a correlação entre as séries de preços de duas ações, precisamos que cada série de preços seja uma coluna separada, com as datas alinhadas, entretanto, a função tq_get() retorna os dados no formato longo, onde cada linha representa um preço de uma ação em uma data específica, ou seja, as séries de preços estão empilhadas verticalmente.

Formato Longo (estrutura retornada pela função tq_get()):

dados_longo <- 
tibble(
  empresa = c("PETR4.SA", "PETR4.SA", "ITUB4.SA", "ITUB4.SA"),
  data = as.Date(c("2024-01-02", "2024-01-03", "2024-01-02", "2024-01-03")),
  preco = c(35.50, 36.20, 28.30, 28.75)
)

dados_longo
# A tibble: 4 × 3
  empresa  data       preco
  <chr>    <date>     <dbl>
1 PETR4.SA 2024-01-02  35.5
2 PETR4.SA 2024-01-03  36.2
3 ITUB4.SA 2024-01-02  28.3
4 ITUB4.SA 2024-01-03  28.8

Formato Largo:

dados_wide <- 
tibble(
  data = as.Date(c("2024-01-02", "2024-01-03")),
  PETR4.SA = c(35.50, 36.20),
  ITUB4.SA = c(28.30, 28.75)
) 

dados_wide
# A tibble: 2 × 3
  data       PETR4.SA ITUB4.SA
  <date>        <dbl>    <dbl>
1 2024-01-02     35.5     28.3
2 2024-01-03     36.2     28.8

Sintaxe:

dados_wide <- dados_longo %>%
  pivot_wider(
    names_from = empresa,    # variável que será nomes de colunas
    values_from = preco      # variável com os valores
  )
  
dados_wide
# A tibble: 2 × 3
  data       PETR4.SA ITUB4.SA
  <date>        <dbl>    <dbl>
1 2024-01-02     35.5     28.3
2 2024-01-03     36.2     28.8

Exemplo 2 - Função tq_get()

Importação de 3 Séries de Preços Diários de Ações

serie_precos <- c("PETR4.SA", "MGLU3.SA", "ITUB4.SA") %>% 
  # importa as séries de preços as ações: PETR4, MGLU3 e ITUB4
  tq_get(from = "2024-01-01") %>% 
  # seleciona as variáveis relevantes
  select(symbol, date, close) %>%
  # converte o formato longo para o formato largo
  pivot_wider(names_from = symbol, values_from = close) %>% 
  # renomeia as variáveis
  rename(dia = date,
         petr4 = PETR4.SA, 
         mglu3 = MGLU3.SA, 
         itub4 = ITUB4.SA) 


# exibe as primeiras linhas
head(serie_precos)
# A tibble: 6 × 4
  dia        petr4 mglu3 itub4
  <date>     <dbl> <dbl> <dbl>
1 2024-01-02  37.8  19.2  30.5
2 2024-01-03  39.0  18.7  30.1
3 2024-01-04  38.6  18.1  29.9
4 2024-01-05  38.7  18.4  30.6
5 2024-01-08  38.4  19.5  30.3
6 2024-01-09  38.1  20.0  30.3

Por que Analisar Retornos e não Preços?

Vantagens

  • Propriedades estatísticas mais convenientes:

    • Retornos tendem a ser mais estacionários (comportamento estatístico estável ao longo do tempo)
  • Tipos de retornos:

    • Retorno simples: \(R_t = \frac{P_t - P_{t-1}}{P_{t-1}}\) (interpretação: percentual de ganho)

    • Retorno logarítmico: \(r_t = \ln\left(\frac{P_t}{P_{t-1}}\right)\) (vantagem matemática: aditividade)

  • Aplicação prática: Análise de carteiras de investimento e avaliação de desempenho.

Gráficos: Preços x Retornos - Petrobrás

Aplicação - Valor-em-Risco (VaR)

Introdução ao Valor-em-Risco (VaR)

Origem do VaR

  • VaR (Value-at-Risk) foi introduzido pelo banco JP Morgan em 1994, com a metodologia RiskMetrics.

  • Objetivo: sintetizar o risco de uma carteira em um único número.

  • Motivado pela necessidade de apresentar diariamente, às 16:15, uma medida consolidada de risco.

  • Tornou-se uma ferramenta essencial na gestão de riscos e exigência regulatória.

RiskMetrics (JP Morgan)

O Comitê de Basileia e o VaR

Linha do Tempo

  • Basileia I (1988): foco em risco de crédito, exigência de capital mínimo = 8% dos ativos ponderados pelo risco (RWA).

  • Emenda de 1996: introduz uso do VaR para risco de mercado.

  • Basileia II (2004): três pilares; VaR incluído no Pilar 1 (exigências de capital).

-Basileia III (2010-2017): amplia exigências, inclui LCR, NSFR, alavancagem, output floor.

  • FRTB (2019+): substitui o VaR pelo Expected Shortfall (ES).

Principais Siglas Regulatórias

Glossário

Sigla Significado
CET1 Common Equity Tier 1 (capital de alta qualidade)
LCR Liquidity Coverage Ratio
NSFR Net Stable Funding Ratio
RWA Ativos Ponderados pelo Risco
FRTB Nova abordagem para risco de mercado
Output Floor Capital mínimo ≥ 72,5% do padrão

O que é o Valor-em-Risco (VaR)?

Nota

  • O VaR (Value-at-Risk) é uma medida de risco que responde à pergunta:

Qual é a pior perda esperada, com uma pequena probabilidade de ser excedida (\(p\))?

  • O VaR depende de:

    • Um horizonte de tempo (ex: 1 dia, 10 dias);
    • Um nível de probabilidade \(p\) (ex: 1%);
    • A distribuição de perdas (retornos) da carteira.
  • Por exemplo, com \(p = 0,01\), o VaR indica a perda que será excedida em 1% dos dias, em média.

Valor-em-Risco (VaR)

Definição Formal

  • Seja \(L/P\) a variável aleatória de perdas e ganhos de uma carteira.

  • O Valor-em-Risco com nível de probabilidade \(p\) é o quantil de ordem \(1 - p\) da distribuição de \(L/P\):

\[ VaR_{(p)} = \inf \left\{ q \in R \mid P(L \leq q) \geq 1 - p \right\} \] > O VaR com probabilidade \(p\) é o menor valor \(q\) tal que a probabilidade de a perda ser menor ou igual a \(q\) é pelo menos \(1 - p\).

  • Em outras palavras:

\[ P(L > VaR_{(p)}) = p \]

  • A probabilidade da perda exceder o \(VaR_{(p)}\) é igual \(p\).

Valor-em-Risco (VaR)

Interpretação

  • Um VaR de 1 dia com \(p = 0,01 = 1\%\) indica que:

1% de probabilidade da perda ser maior que o VaR, em um único dia.

  • Exemplo:

    • Uma carteira de R$ 1.000 tem um \(VaR_{\text{1%}}\) = R$ 45.
    • Isso significa que 1 em cada 100 dias, espera-se uma perda superior a R$ 45.
  • O restante do tempo (99% dos dias), estima-se que a perda será menor ou igual a R$ 45.

Valor-em-Risco (VaR)

VaR como um Quantil

  • O VaR é o quantil de ordem \(1 - p\) da distribuição de L/P (retornos).

  • Ele separa os \(100 \cdot p\%\) piores dos demais.

\[ P(L \leq VaR_{(p)}) = 1 - p \quad \Rightarrow \quad P(L > VaR_{(p)}) = p \]

  • Assim, a probabilidade de exceder o VaR é igual a \(p\).

VaR e o Valor da Carteira

Nota

  • Seja \(P_t\) o preço atual da ação, \(P_{t-1}\) o preço anterior.

  • O retorno simples é:

\[ R = \frac{P_t - P_{t-1}}{P_{t-1}} \]

  • O valor da perda ou ganho é:

\[ Q = \vartheta \cdot R \]

  • O VaR corresponde ao quantil \(VaR_{(p)}\) tal que:

\[ P(Q \leq -VaR_{(p)}) = p \]

Ou seja, há probabilidade \(p\) de que a perda supere \(VaR_{(p)}\).

Métodos Básicos de Estimação do VaR

Métodos Básicos

  • Métodos Paramétricos
  • Método Histórico (Não-Paramétrico)
  • Método por Simulação de Monte Carlo (Paramétrico ou Não-Paramétrico)

Métodos Básicos de Estimação do VaR

Métodos Paramétricos

  • Um método paramétrico assume que os retornos seguem uma distribuição de probabilidade específica (por exemplo, a distribuição normal).

  • Nesse caso, é necessário estimar os parâmetros da distribuição de normal, que no caso da normal são a média (\(\mu\)) e o desvio-padrão (\(\sigma\)).

  • Daí o termo “método paramétrico”: os parâmetros da distribuição devem ser estimados a partir dos dados observados.

Métodos Básicos de Estimação do VaR

Método Histórico

  • O método histórico é um método não-paramétrico, pois utiliza diretamente os retornos históricos observados, sem assumir qualquer distribuição de probabilidade para os retornos.

  • Como consequência, não há parâmetros a serem estimados, daí o termo “método não-paramétrico”.

Métodos Básicos de Estimação do VaR

Método por Simulação de Monte Carlo

  • O método de simulação de Monte Carlo pode ser:

    • Paramétrico: se os retornos são simulados a partir de uma distribuição teórica (por exemplo, normal ou t-Student);

    • Não-paramétrico: se os retornos são simulados por reamostragem com reposição dos retornos históricos (distribuição empírica).

  • A escolha do método depende da qualidade dos dados, das hipóteses que se está disposto a fazer e do objetivo da análise de risco.

Estimação do VaR Paramétrico (Normal)

Suposição de Normalidade

  • Suponha que os retornos diários \(R\) de uma carteira sejam normalmente distribuídos:

\[ R \sim N(\mu, \sigma^2) \]

  • A perda monetária associada ao retorno \(R\) é:

\[ L = -R \cdot \vartheta \]

onde \(\vartheta\) é o valor da carteira.

  • Cálculo do \(VaR_{(p)}\) com nível de significância \(p\)

  • Por definição, o \(VaR_{(p)}\) satisfaz:

\[ P(L > VaR_{(p)}) = p \]

  • Substituindo \(L = -R \cdot \vartheta\), temos:

\[ P\left(-R \cdot \vartheta > VaR_{(p)}\right) = p \quad \Rightarrow \quad P\left(R < -\frac{VaR_{(p)}}{\vartheta}\right) = p \]

A probabilidade de a perda monetária exceder \(VaR_{(p)}\) é a mesma que a probabilidade de o retorno cair abaixo de \(-VaR_{(p)} / \vartheta\).

  • Fórmula final do VaR paramétrico (normal):

Como \(R \sim N(\mu, \sigma^2)\), temos:

\[ VaR_{(p)} = - (\mu + \Phi^{-1}(1 - p) \cdot \sigma) \cdot \vartheta \]

  • \(\Phi^{-1}(1 - p)\): quantil superior da normal padrão (ex: \(\approx 2{,}326\) para \(p = 0{,}01\))
  • \(\mu\): retorno médio estimado
  • \(\sigma\): desvio-padrão dos retornos
  • \(\vartheta\): valor da carteira

VaR Paramétrico (Normal)

Exemplo 1:

  • Investimento: R$ 100.000
  • Retorno esperado: 0%
  • Volatilidade diária: 2%
  • proabilidade: 1% (\(z_{1- 0.01} = z_{0.99} \approx 2.326\))

\[ VaR = - (0 + 2.326 \cdot 0.02) \cdot 100000 = -R\$ 4.652,00 \]

Interpretação: há 1% de chance da perda exceder R$ 4.652 em um dia.

VaR Paramétrico (Normal)

Exemplo 2:

Se foram investidos R$ 100.000,00 em ações da XYZ SA, cuja volatilidade diária (\(\sigma\) = desvio-padão) é de 2% e o retorno médio de 0%. Assumindo que os retornos da ação possam ser modelados por uma distribuição normal. então, o VaR no nível de 5% é:

\[ \begin{align*} VaR(p) &= \Phi^{-1}(1 - p) \cdot \sigma \cdot \vartheta \\ &= \sigma Z_{0.95} \vartheta \\ &= 0.02 (1.6449)(100.000) \\ &= 3289.7 \end{align*} \]

Em R:

sigma <- 0.02
valor_carteira <- 100000
p <- 0.05

var_95 <- sigma*qnorm(1-p)*valor_carteira
var_95
[1] 3289.7

Isto é, o \(VaR_{1, 0.95}\) de 1-dia = R$ 3.289,71 implica que temos 95% de confiança de que a perda da carteira não será superior a R$ 3.289,80 em um dia, ou que temos 5% de chance de que a perda será superior a R$ 3.289,80.

VaR Paramétrico Normal em R

Estimativa do VaR Paramétrico Normal - 1 Ação

# pipeline para importar os preços da ação da Petrobras
# calcular os retornos e remover valores ausentes
serie_precos_petr4 <- tq_get("PETR4.SA", from = "2024-01-01") %>%
  mutate(ret = log(close / lag(close))) %>%
  drop_na()

# Define parâmetros
retornos <- serie_precos_petr4$ret
valor_carteira <- 1000
p <- 0.01

# calcula o retorno médio 
ret_medio <- mean(retornos)
ret_medio
[1] -0.00051773
# calcula a volatilidade (desvio padrão)
volatilidade <- sd(retornos)
volatilidade
[1] 0.016873
# VaR paramétrico
var_param <- -(ret_medio + qnorm(1 - p) * volatilidade)
var_param
[1] -0.038734
# VaR percentual
var_percentual <- var_param * 100
var_percentual
[1] -3.8734
# VaR paramétrico monetário
var_monetario <- var_param * valor_carteira
var_monetario
[1] -38.734

Visualização do VaR Paramétrico Normal

Interpretação Visual do VaR Paramétrico

Leitura do Gráfico e Considerações

  • A curva azul representa o modelo paramétrico assumido, que, nesse caso, é a distribuição normal.

  • A curva preta tracejada mostra a distribuição empírica dos retornos observados da ação PETR4.

  • O VaR é uma medida de perda potencial: representa o menor retorno (negativo) que será superado com uma pequena probabilidade, como 1%.

  • No gráfico, essa perda está localizada à esquerda da média da distribuição normal.

  • A área vermelha sob a curva normal corresponde à cauda esquerda com probabilidade \(p = 1\%\), ou seja, há 1% de chance de obter um retorno ainda pior que o VaR.

  • A linha vermelha tracejada marca o ponto de corte: o valor do retorno associado ao quantil de 1%, segundo a distribuição normal.

  • Em geral, distribuições empíricas de retornos financeiros apresentam caudas mais pesadas (leptocurtose) e assimetria.

  • Por isso, a suposição de normalidade pode subestimar o risco de perdas extremas, tornando o VaR paramétrico normal menos conservador que métodos baseados na distribuição empírica.

VaR - Método Histórico

Método Histórico (ou Simulação Histórica)

  • O método histórico é uma técnica simples de estimação do risco de perda.
    Baseia-se na hipótese de que o comportamento dos retornos passados se repetirá no futuro próximo.

  • O método consiste em ordenar os retornos históricos do pior para o melhor, e identificar o retorno correspondente ao percentil escolhido (por exemplo, 1%).

  • O VaR com probabilidade \(p\) é o retorno na posição \(T \times p\) da distribuição empírica, multiplicado pelo valor da carteira:

\[ VaR_t = - y_{(i)} \cdot \vartheta_t, \quad \text{com } i = \lceil T \cdot p \rceil \]

  • Onde \(\vartheta_t\) é o valor da carteira no tempo \(t\), dado por:

\[ \vartheta_t = \text{número de ações} \times P_t \]

  • Neste exemplo, adotaremos diretamente o valor total da carteira.

VaR - Método Histórico

VaR - Método Histórico

Simulação Histórica - Algoritmo

  1. Escolha uma probabilidade \(p\) (por exemplo, 1%).

  2. Obtenha uma amostra de retornos históricos \(y\) com tamanho \(T\).

  3. Ordene os retornos \(y\) do menor para o maior.

  4. Encontre o índice \(i = T \times p\) (arredondado para cima).

  5. O VaR é dado por:

\[ VaR_t = - y_{(i)} \cdot \vartheta_t, \quad \text{onde } i = \lceil T \cdot p \rceil \]

  • Pegamos o \(i\)-ésimo pior retorno (de menor valor), que representa uma estimativa conservadora do quantil de nível \(p\) da distribuição empírica.

  • Se a carteira vale R$ 1.000 e o retorno na posição \(i\) for -3%, então o VaR será de R$ 30 para o horizonte de tempo considerado.

Método Histórico

Carteira com 1 Ativo - PETR4

  • Importar os preços da ação PETR4 desde 2024-01-01 com tq_get().

  • Calcular os retornos logarítmicos diários da ação:

\[ \text{retorno}_t = \log(P_t) - \log(P_{t-1}) \]

  • Definir o valor da carteira \(\vartheta_t\) e a probabilidade \(p\);

  • Calcular o VaR utilizando a distribuição empírica dos retornos históricos.

Método Histórico em R

Estimativa do VaR Histórico - 1 Ação

# pipeline para importar os preços da ação da Petrobras
# calcular os retornos e remover valores ausentes
precos_petrobras <- "PETR4.SA" %>%
  tq_get(from = "2024-01-01") %>%
  select(date, close) %>% 
  mutate(ret_petrobras = log(close / lag(close))) %>% 
  drop_na()

# Extrai vetor de retornos
ret_petrobras <- precos_petrobras %>% 
  pull(ret_petrobras)

# Parâmetros
valor_carteira <- 1000
p <- 0.01

# Estimação do VaR

# 1. Ordena os retornos crescentemente
ret_petr_ord <- sort(ret_petrobras)

# 2. Encontra o índice correspondente ao quantil de nível p
#    Isto é, o retorno que define a cauda esquerda com p% de probabilidade
#    ceiling() é usada para garantir que pegamos um valor suficientemente extremo
op <- ceiling(length(ret_petr_ord) * p)  
op
[1] 4
# 3. VaR histórico monetário: valor correspondente ao retorno mais severo
var_petr_hs <- -ret_petr_ord[op] * valor_carteira
var_petr_hs
[1] 57.028
# 4. VaR histórico percentual
var_percentual_petr_hs <- -ret_petr_ord[op] * 100
var_percentual_petr_hs
[1] 5.7028
  • Usamos ceiling() para garantir que selecionamos um retorno que está entre os p% piores casos. Por exemplo, com \(T = 252\) e \(p = 0{,}01\), temos \(T \cdot p = 2{,}52\), e o índice \(i = 3\).

  • Assim, usamos o terceiro pior retorno da amostra. Isso garante que estamos sendo conservadores, pois não usamos interpolação — pegamos o pior valor inteiro que garante cobertura de pelo menos \(p\) da densidade empírica.

Visualização do VaR Histórico em R

Método Histórico

Considerações sobre o Método Histórico

  • A Simulação Histórica é simples e não exige suposições sobre a distribuição dos retornos.

  • Retornos extremos podem variar bastante: quanto maior a amostra histórica, mais confiável a estimativa do VaR.

  • Uma desvantagem é que eventos passados podem não refletir bem as condições futuras, especialmente em períodos de quebra estrutural (como em 2008).

  • Regra prática para tamanho mínimo da amostra:

\[ T_{\text{mínimo}} \geq \frac{3}{p} \]

VaR - Método por Simulação de Monte Carlo

Visão Geral

  • A Simulação de Monte Carlo pode ser aplicada de forma:

    • Paramétrica: assume uma distribuição de probabilidade (ex: normal);
    • Não-paramétrica: utiliza diretamente os dados históricos.
  • Neste exemplo, utilizamos a versão não-paramétrica, que realiza uma reamostragem com reposição (bootstrap) dos retornos históricos da ação, sem supor nenhuma forma funcional específica para a distribuição.

  • O método consiste em gerar cenários simulados de retornos e estimar o VaR como o quantil empírico correspondente ao nível de probabilidade \(p\).

VaR - Simulação de Monte Carlo

Algoritmo - Simulação Não-Paramétrica

  1. Escolha um nível de probabilidade \(p\) (ex: 1%).

  2. Obtenha uma amostra histórica de retornos \(y = (y\_1, \dots, y\_T)\).

  3. Gere \(N\) simulações de retornos por reamostragem com reposição de \(y\).

  4. Ordene os retornos simulados do menor para o maior: \(y^{(s)}*{(1)} \leq \dots \leq y^{(s)}*{(N)}\).

  5. Encontre o índice \(i = \lceil N \cdot p \rceil\).

  6. O VaR é dado por:

\[ VaR_t = - y^{(s)}_{(i)} \times \vartheta_t \]

onde \(\vartheta\_t\) é o valor da carteira no tempo \(t\).

  • O uso de \(\lceil N \cdot p \rceil\) garante uma estimativa conservadora, evitando interpolação ambígua.

Exemplo: Reamostragem Empírica

Exemplo

  • Importar os preços da ação PETR4 a partir de 2024-01-01 usando tq_get().

  • Calcular os retornos logarítmicos diários:

\[ \text{retorno}_t = \log(P_t) - \log(P_{t-1}) \]

  • Definir o valor da carteira e o nível de significância $p$.

  • Estimar o VaR via reamostragem empírica com reposição dos retornos históricos.

Estimativa do VaR (Simulação NP)

Código - Estimativa do VaR Não-Paramétrico

# pipeline para importar os preços da ação da Petrobras
# calcular os retornos e remover valores ausentes
precos_petrobras <- "PETR4.SA" %>%
  tq_get(from = "2024-01-01") %>%
  select(date, close) %>%
  mutate(ret_petrobras = log(close / lag(close))) %>%
  drop_na()

# Extrai os retornos
ret_petrobras <- precos_petrobras$ret_petrobras

# Define parâmetros
valor_carteira <- 1000     # valor investido em reais
p <- 0.01                  # nível de significância (1%)
n <- 1000                  # número de simulações

# Simulação de Monte Carlo (não-paramétrica)
set.seed(123)
ret_simulados <- sample(ret_petrobras, size = n, replace = TRUE)

# Ordena os retornos simulados
ret_simulados_ord <- sort(ret_simulados)

# Encontra o índice do quantil
# Usamos ceiling() para garantir uma estimativa conservadora (valor mais extremo)
indice_var <- ceiling(n * p)

# Estima o VaR monetário
var_petr_mc <- -ret_simulados_ord[indice_var] * valor_carteira
var_petr_mc
[1] 55.821
# Estima o VaR percentual
var_percentual_petr_mc <- -ret_simulados_ord[indice_var] * 100
var_percentual_petr_mc
[1] 5.5821

Visualização do VaR Não-Paramétrico

Visualização do VaR Não-Paramétrico

Considerações

  • A curva preta representa a densidade empírica dos retornos simulados obtidos por reamostragem com reposição (bootstrap).

  • A área vermelha representa os 1% piores retornos simulados, ou seja, a cauda esquerda da distribuição com probabilidade \(p = 1%\).

  • A linha vermelha tracejada marca o valor do VaR estimado, ou seja, o menor retorno tal que apenas 1% dos retornos sejam ainda piores.

  • A linha azul marca a média dos retornos simulados.

  • Essa visualização é análoga à do método histórico, pois ambos são não-paramétricos e não impõem suposições de normalidade.

Valor-em-Risco (VaR)

Resumo do VaR

  • O VaR com nível de probabilidade \(p\) representa a **pior perda esperada com probabilidade \(1 - p\) de não ser superada.

  • Ele é um limite inferior para os piores \(100 \cdot p\%\) retornos negativos (perdas).

  • Exemplo: Com \(p = 0.01 = 1\%\), o VaR quantifica a perda que será excedida em média 1 vez a cada 100 dias.

  • Limitações:

    • O VaR não é subaditivo;
    • O VaR não mostra o tamanho da perda além do VaR;
    • O Expected Shortfall (ES) é uma medida alternativa que busca superar essas limitações.

Expected Shortfall (ES)

O que é o Expected Shortfall (ES)?

  • Um número de medidas de risco alternativas tem sido proposta para superar os problemas do VaR (falta de subaditividade entre eles) do VaR e/ou fornecer mais informaçõs sobre a forma da cauda.

O Expected Shortfall (ES), também chamado de Conditional Value-at-Risk (CVaR), é uma medida de risco que estima a perda média esperada, condicionalmente ao evento de que a perda exceda o VaR.

  • Ele responde à pergunta: “Qual é perda esperada quando as perdas excedem o VaR?

  • Enquanto o VaR é baseado em um quantil da distribuição de perdas, o ES é definido como o valor esperado condicional das perdas, dado que elas excedem esse quantil:

\[ ES = - E[L \mid L \leq VaR_{(p)}] \]

  • O ES é uma medida de risco coerente, satisfazendo os 4 axiomas de Artzner et al. (1999): monotonicidade, subaditividade, homogeneidade positiva e invariância translacional.

Estimação Empírica do ES

Como estimamos o ES empiricamente?

Dado um nível de probabilidade \(p\) (ex: 1%), estimamos o Expected Shortfall como a média condicional dos piores \(p \cdot T\) retornos, onde \(T\) é o tamanho da amostra.

  • Algoritmo (Histórico):
  1. Ordena-se os retornos em ordem crescente: \(r_{(1)} \leq r_{(2)} \leq \dots \leq r_{(T)}\)

  2. Define-se o índice do VaR: \(k = \lceil \alpha \cdot T \rceil\)

  3. O VaR empírico é dado por: \(VaR\_\alpha = -r\_{(k)}\)

  4. O Expected Shortfall empírico é:

\[ ES_\alpha = -\frac{1}{k} \sum_{i=1}^{k} r_{(i)} \]

  • Em outras palavras: o ES é a média dos piores retornos (mais negativos) da amostra que excedem o VaR.

Estimação Empírica do ES

PETR4 — Estimativa Empírica do ES

# 1. Parâmetros
p <- 0.01
valor_carteira <- 1000

# 2. Ordena os retornos da PETR4
retornos_ordenados <- sort(ret_petrobras)

# 3. Índice do quantil
k <- ceiling(length(retornos_ordenados) * p)

# 4. VaR e ES empíricos (percentuais)
var_percentual <- -retornos_ordenados[k] * 100
es_percentual <- -mean(retornos_ordenados[1:k]) * 100

# 5. Valores monetários
var_monetario <- var_percentual / 100 * valor_carteira
es_monetario <- es_percentual / 100 * valor_carteira

# Resultados
var_monetario
[1] 57.028
es_monetario
[1] 69.838

Visualização do Expected Shortfall (ES)

Expected Shortfall - Interpretação Visual

VaR vs. ES

  • No gráfico de densidade dos retornos, o VaR é representado por uma linha vertical tracejada vermelha que separa os 1% piores retornos (quantil de 1%).

  • O Expected Shortfall aparece como uma linha pontilhada mais à esquerda — representando a média dos piores retornos.

  • Visualmente, o ES aparece mais à esquerda do que o VaR e é sempre maior em magnitude (ou seja, mais negativo).

  • O ES é sempre mais conservador que o VaR.

Considerações Finais

Por que o ES é mais informativo que o VaR?

  • O ES leva em conta a severidade das perdas extremas, não apenas sua ocorrência.

  • Ele é mais robusto, pois:

    • Fornece uma estimativa do comportamento da cauda
    • Satisfaz os 4 axiomas da coerência de medidas de risco
  • O FRTB (Basileia III) adotou o ES no lugar do VaR como medida oficial de risco de mercado para cálculo de capital regulatório.

  • O ES complementa e enriquece a análise de risco em cenários de perda severa.

Carteria com 3 Ações

Retorno da Carteira com 3 Ativos

Retorno de uma Carteira

  • Seja uma carteira com três ativos, com pesos \((w\_1, w\_2, w\_3)\) associados a cada ação:
Ação Ticker Peso na Carteira (\(w_i\))
Petrobrás PETR4.SA \(w_1\)
Magazine Luiza MGLU3.SA \(w_2\)
Itaú Unibanco ITUB4.SA \(w_3\)
  • Os retornos diários dos ativos no tempo \(t\) são \((r_{1,t}, r_{2,t}, r_{3,t})\).

  • O retorno da carteira no tempo \(t\)** é a média ponderada dos retornos:

\[ r_{c,t} = w_1 \cdot r_{1,t} + w_2 \cdot r_{2,t} + w_3 \cdot r_{3,t} \]

  • Em notação vetorial:

\[ r_{c,t} = \mathbf{w}^\top \mathbf{r}_t \quad \text{onde } \mathbf{w} = \begin{bmatrix} w_1 \\ w_2 \\ w_3 \end{bmatrix}, \quad \mathbf{r}_t = \begin{bmatrix} r_{1,t} \\ r_{2,t} \\ r_{3,t} \end{bmatrix} \]

Variância e Volatilidade da Carteira

Variância da Carteira

  • A variância dos retornos da carteira, \(\text{Var}(r_c)\), é dada por:

\[ \text{Var}(r_c) = \mathbf{w}^\top \boldsymbol{\Sigma} \mathbf{w} \]

Onde:

  • \(\mathbf{w}\) é o vetor de pesos da carteira;
  • \(\boldsymbol{\Sigma}\) é a matriz de covariância dos retornos dos ativos:

\[ \boldsymbol{\Sigma} = \begin{bmatrix} \sigma_1^2 & \sigma_{12} & \sigma_{13} \\ \sigma_{21} & \sigma_2^2 & \sigma_{23} \\ \sigma_{31} & \sigma_{32} & \sigma_3^2 \end{bmatrix} \]

  • O desvio-padrão da carteira é:

\[ \sigma_c = \sqrt{\text{Var}(r_c)} \]

  • A variância incorpora não apenas a volatilidade individual, mas também a correlação entre os ativos — capturando o benefício da diversificação.

Retornos da Carteira em R

Implementação em R

# Importa as séries de preços das ações
serie_precos <- c("PETR4.SA", "MGLU3.SA", "ITUB4.SA") %>% 
  tq_get(from = "2024-01-01") %>%
  select(symbol, date, close) %>%
  pivot_wider(names_from = symbol, values_from = close) %>%
  rename(dia = date,
         petr4 = PETR4.SA,
         mglu3 = MGLU3.SA,
         itub4 = ITUB4.SA)

# Calcula retornos logarítmicos
retornos <- serie_precos %>%
  mutate(
    ret_petr4 = log(petr4 / lag(petr4)),
    ret_mglu3 = log(mglu3 / lag(mglu3)),
    ret_itub4 = log(itub4 / lag(itub4))
  ) %>%
  drop_na()

# Define os pesos
pesos <- c(0.4, 0.3, 0.3)  # exemplo: 40% PETR4, 30% MGLU3, 30% ITUB4

# Calcula o retorno da carteira
retornos <- retornos %>%
  mutate(
    ret_carteira = pesos[1] * ret_petr4 +
                   pesos[2] * ret_mglu3 +
                   pesos[3] * ret_itub4
  )

# dimensão do retorno da carteira
dim(retornos$ret_carteira)
NULL
# exibie as primeiras linhas
head(retornos$ret_carteira)
[1]  0.0015646 -0.0160882  0.0140190  0.0115100  0.0034628  0.0015940

VaR Histórico da Carteira

Estimativa do VaR — Método Histórico

# Parâmetros
p <- 0.01
valor_carteira <- 1000

# Ordena retornos da carteira
ret_ordenado <- sort(retornos$ret_carteira)

# Índice do quantil
k <- ceiling(length(ret_ordenado) * p)

# VaR percentual e monetário
var_percentual <- -ret_ordenado[k] * 100
var_monetario <- -ret_ordenado[k] * valor_carteira

var_percentual
[1] 5.007
var_monetario
[1] 50.07
  • O VaR histórico é a perda mínima entre as 1% piores perdas históricas.

  • Conservador por natureza — não depende de suposições paramétricas.

Estimativa do Expected Shortfall (ES)

Estimativa do ES — Média Condicional

# Expected Shortfall (ES)
es_percentual <- -mean(ret_ordenado[1:k]) * 100
es_monetario <- -mean(ret_ordenado[1:k]) * valor_carteira

es_percentual
[1] 5.432
es_monetario
[1] 54.32
  • O Expected Shortfall é a média das perdas mais severas, ou seja:

\[ ES = - \frac{1}{k} \sum_{i=1}^{k} r^{(i)} \]

  • O ES sempre excede (em magnitude) o VaR — é mais conservador.

Exercício

Enunciado

Você é o analisata responsável por estimar o risco de uma carteira de investimentos formada exclusivamente pelas ações da empresa Vale S.A. (VALE3.SA), usando dados reais do mercado de capitais.

  1. Usando o pacote tidyquant, importe os preços de fechamento diários da ação VALE3.SA, a partir de 01/01/2024.

  2. Calcule os retornos logarítmicos diários da ação.

  3. Suponha que o valor da carteira seja de R$ 5.000.

  4. Estime o Value-at-Risk (VaR) e o Expected Shortfall (ES) para a carteira, no nível de probabilidade de 5%, utilizando o método histórico.

  5. Interprete os valores obtidos: o que eles indicam sobre o risco da carteira?

Referências

ARTZNER, P. et al. Coherent Measures of Risk. Mathematical Finance, v. 9, n. 3, p. 203–228, 1999.
HARDAKER, J. B. et al. Coping with Risk in Agriculture. 2. ed. Wallingford, UK: CABI Publishing, 2004. p. 332
KANITZ, S. C. Como Prever Falências. São Paulo: McGraw-Hill do Brasil, 1978.
RICHARDSON, J. W.; KLOSE, S. L.; GRAY, A. W. An applied procedure for estimating and simulating multivariate empirical (MVE) probability distributions in farm-level risk assessment and policy analysis. Journal of Agricultural and Applied Economics, v. 32, n. 2, p. 299–315, 2000.

Atualizando os Repositórios

Instruções

  1. No terminal do RStudio, verifique quais arquivos/pastas foram modificados ou criados com:
git status
  1. Você pode adicionar todos os arquivos de uma vez com:
git add .
  1. Execute git status novamente para confirmar que todos os arquivos foram adicionados (aparecerão em verde sob “Changes to be committed”):
git status
  1. Se tudo estiver em verde, faça um commit com uma mensagem descritiva:
git commit -m "atualizacoes aula 10"
  1. Se algum arquivo ou pasta ainda aparecer em vermelho após o segundo git status, adicione as pastas/arquivos um por um:
git add relatorios/08-relatorio/08-relatorio.qmd
  1. Execute git status novamente e faça o commit quando todos os arquivos estiverem em verde:
git commit -m "atualizacoes aula 10"
  1. Envie o repositório local atualizado para o GitHub:
git push origin main