utilizando R ou Python com ferramentas de Big Data
2024-11-29
Por que Big Data é relevante ?
Volume de Dados: A análise do mercado de commodities envolve um enorme volume de dados financeiros e econômicos que cresce rapidamente, especialmente considerando históricos de preços diários, transações e eventos externos que influenciam os mercados.
Variabilidade e Velocidade: As séries de preços de commodities possuem mudanças rápidas e variações, exigindo a capacidade de processar e analisar dados em tempo hábil para garantir insights relevantes.
Análises em Profundidade: Necessidade de descobrir padrões ocultos que requerem recursos computacionais consideráveis para manipular e analisar um volume grande e complexo de dados.
Source: Data extraction from Yahoo!Finances API ploted by using Plotly
Perguntas
Quais as causas ou desencadeadores desses movimentos repentinos de inversão de tendência nas séries de preços ?
É possível estimar/medir o quanto essas mudanças bruscas de tendência geram de impacto na economia e no mercado de commodities agrícolas ?
Como podemos antecipar/prever o acontecimento dessas “quebras” nas séries temporais de preços no futuro ?
Pode-se otimizar o processo decisório de compra e venda de grãos recomendando as melhores alocações de portfólio de commodities em condições de risco e incerteza ?
Como decidir ou facilitar o processo decisório humano dentro de um contexto de massivo volume e velocidade de informações ?
Qual o volume de dados ou tamanho de série histórica necessária pra construir um modelo eficiente ?
Área de Ciência | Teoria | Pensadores |
---|---|---|
Microeconomia | Teoria da Demanda e do Consumidor | Walrás, Pareto, Arrow, Debreu, Samuelson, Hicks |
Microeconomia | Estruturas de Mercado | Porter, Chamberlin, Joan Robinson, Bain |
Microeconomia | Finanças Comportamentais | Daniel Kahneman, Amos Tversky, Robert Shiller |
Microeconomia | Eficiência de Mercado | Eugene Fama, Fischer Black e Myron Scholes, Jensen |
Microeconomia | Teoria do Portfólio | Harry Markowitz, Milton Friedman, Keynes |
Finanças | Teoria dos Ciclos Financeiros | Hyman Minsky, Irving Fischer, Joseph Schumpeter e Kondratiev |
Finanças | Teoria do Mais Tolo (ou Teoria do Toque de Midas Reverso) | John Kenneth Galbraith, Nassim Taleb |
Econometria Financeira | Bayesian GARCH with Markov Regime Switching | David Ardia, Robert Engle, Tim Bollerslev, Gary Koop |
Macroeconomia | Teoria da Formação das Expectativas | Robert Lucas, Milton Friedman, Edmund Phelps, Franco Modigliani |
Neuroeconomia | Teoria da Hipótese da Antecipação de Recompensa | Wolfram Schultz, Antonio Rangel, Paul Glimcher |
Microeconomia | Teoria da Seleção Adversa | George Akerlof, Michael Spence, Stiglitz |
Complexidade (Física de redes) | Sistemas Dinâmicos Adpatativos não-lineares | Arthur Ávila, Brian Arthur, Robert May |
Insights
Contribuições teóricas
Identificação dos drivers dos preços auxilia na investigação da causa dos movimentos repentinos nas séries de preços (Teoria da Demanda do Consumidor, Estruturas de Mercado e Teoria do Portfólio [motivo transação, especulação ou precaução]) pode ser utilizada em conjunto com a técnica Econométrica de Análise de Intervenção em Séries Temporais [Angrist e Imbens, Brodersen et. alli (2015)] para avaliar seu impacto causal na série de preço estudada;
A Teoria dos Ciclos Financeiros ajuda a compreender em qual contexto econômico a disseminação de efeito econômico-financeiro nocivo ou positivo está inserida frente a quebra repentina da tendência da trajetória de preços de alimentos (commodities)
O uso das técnicas pertinentes dentro da teoria da Econometria Financeira com o uso do modelo Bayesiano GARCH com mudanças de regime markovianos se mostra aderente à realidade dos dados e condizente com os últimos desenvolvimentos teóricos a respeito do fenômeno da dinâmica complexa dos preços dessas commodities;
A teoria de alocação de portfólio desde Markowitz pode ser melhor elaborada combinando as ferramentas de otimização multiobjetivo multiperíodo de maneira dinâmica em consonância com modelos econométricos que consigam incorporar com maior clareza a “incerteza” percebida pelos players de mercado na sua aferição de risco x retorno. Assim, os processos decisórios de compra e venda em momentos oportunos se tornariam mais claros.
Amostragem de Dados Significativa
Estratégia de Amostragem: Utilizar amostragem estratificada para garantir que a variabilidade ao longo do tempo seja capturada de forma adequada (como choques econômicos ou eventos climáticos que impactam os preços).
Redução de Dimensionalidade: Utilizar técnicas de PCA (Principal Component Analysis) para reduzir o número de variáveis sem perder informações importantes, permitindo uma análise mais eficiente dos dados.
Uso de Dados Representativos: A seleção de um subconjunto representativo de dados pode ser feita para capturar as tendências de mercado de diferentes períodos, garantindo que os insights gerados sejam válidos e aplicáveis.
Ferramentas e Bibliotecas Utilizadas (alguns exemplos)
Python:
PySpark
: Uma ferramenta poderosa para processamento distribuído e análise de grandes volumes de dados, ideal para trabalhar com dados de commodities de históricos extensivos.
Dask
: Alternativa à biblioteca Pandas, que facilita o processamento de grandes datasets que não cabem na memória. Dask permite a execução de operações paralelas, otimizando análises.
R:
sparklyr
e SparkR
: Integração do Spark no ambiente R, possibilitando o processamento distribuído e a manipulação eficiente de datasets gigantescos, com foco em análises financeiras.
vroom
e data.table
: Utilizadas para leitura rápida e manipulação de grandes volumes de dados armazenados em arquivos CSV, permitindo o carregamento de arquivos grandes em poucos segundos.
*Existem algumas outras pra R e Python que poderiam ser mencionadas aqui, mas por questões de parcimônia limitaremos a pequenos exemplos.
Análise de Commodities com sparklyr
e vroom
library(sparklyr)
library(dplyr)
library(vroom)
# Conectar ao Spark
sc <- spark_connect(master = "local[*]") # Você pode rodar também no Databricks, Azure, AWS, Google Colab...
# Ler grandes volumes de dados usando vroom
file_list <- list.files("data", pattern = "*_data.csv", full.names = TRUE)
combined_data <- vroom(file_list, col_types = list(
Date = col_date(),
Open = col_double(),
High = col_double(),
Low = col_double(),
Close = col_double(),
Volume = col_double(),
Adj.Close = col_double(),
Ticker = col_character()
))
# Copiar os dados para o Spark
spark_data <- copy_to(sc, combined_data, "commodities_data", overwrite = TRUE)
# Executar análise no Spark: calcular a média de fechamento ajustado por commodity
average_close <- spark_data |>
group_by(Ticker) |>
summarise(Average_Close = mean(Adj.Close, na.rm = TRUE)) |>
collect()
print(average_close)
# Desconectar do Spark
spark_disconnect(sc)
Análise de Commodities com PySpark
e Dask
from pyspark.sql import SparkSession
import dask.dataframe as dd
# Inicializar a sessão Spark
spark = SparkSession.builder.master("local").appName("Commodities Analysis").getOrCreate()
# Carregar dados grandes de commodities usando Dask
file_list = ["data/ZC=F_data.csv", "data/ZO=F_data.csv", "data/KE=F_data.csv"]
df_dask = dd.read_csv(file_list)
# Converter o DataFrame Dask para Spark
df_spark = spark.createDataFrame(df_dask.compute())
# Analisar os dados no Spark
df_spark.createOrReplaceTempView("commodities_data")
result = spark.sql("SELECT Ticker, AVG(Adj_Close) as Average_Close FROM commodities_data GROUP BY Ticker")
result.show()
# Finalizar a sessão Spark
spark.stop()
A partir das instruções contidas no post em como ler com o Sparklyr Big Data localmente, leia e processe usando o pacote do R sparklyr
localmente o conjunto de dados vix-daily.csv (menor) e o .rds gbt-model-responses. 1.a) Agora leia eles usando o Dask
(Python), data.table
e vroom
(R) localmente e as reporte num documento Quarto
Como você analisaria o conjunto de dados de hipotecas (mortgages) ou outra fonte aqui no repo ? Ele contém dados fictícios ou anonimizados sobre empréstimos imobiliários, fornecendo informações que podem ser usadas para estudar padrões de empréstimos, análise de risco de crédito ou previsões de inadimplência. Elabore uma proposta de projeto a partir desse dataset em R ou em Python utilizando o report utilizando o quarto.org pra ganhar velocidade!
E quando o Spark, data.table
, vroom
, Dask
e etc. não derem mais conta do recado ? Pesquise alternativas e sugira algumas estratégias pra lidar com grandes volumes de dados e modelá-los ! Lembre-se de citar as fontes, pacotes, métodos e referências necessárias. (Algumas sugestões de uso de dados brasileiros via extração por API em Repo Doc. gitHub)
Expanda o exemplo do portfólio de commodities, utilizando uma extração de séries temporais mais longas no tempo, inserindo mais ativos no portfólio (utilize o pacote do R quantmod
ou do Python yfinance
) utilizando a sintaxe do Spark e experimente os pacotes do R úteis pra isso como a sintaxe do data.table
ou a leitura do conjunto de dados com o vroom
localmente. Como poderemos analisar tendências desses dados utilizando um modelo de médias móveis simples ?
Envie esses reports nos formatos .qmd e .html num arquivo .zip para rodrigo.ozon@fae.edu.br
Prazo de envio (1 e 2 até o final da próxima semana) e 3 e 4 (até o final da semana subsequente)
Maiores detalhes a respeito de fontes, referências, recomendações de cursos online, pacotes e libs, consulte por favor o Plano de Aula de hoje
Rodrigo Hermont Ozon
\(\Rightarrow\) Agradecimentos à todos os membros da banca examinadora e demais ouvintes:
"Situations emerge in the process of creative destruction in which many firms may have to perish that nevertheless would be able to live on vigorously and usefully if they could weather a particular storm. [... Capitalism requires] the perennial gale of Creative Destruction." Schumpeter, Joseph A. (1994) [1942]. Capitalism, Socialism and Democracy. London: Routledge. pp. 82–83. ISBN 978-0-415-10762-4. Retrieved 23 November 2011.