mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-19 10:54:06 -06:00
fix: consertando bug do ultimo commit
This commit is contained in:
parent
153c87374c
commit
2002ea1d83
189
content/01-finquant/2025-s1/cluster-portfolio.md
Normal file
189
content/01-finquant/2025-s1/cluster-portfolio.md
Normal file
@ -0,0 +1,189 @@
|
||||
---
|
||||
title: Otimização de Carteira via Clustering
|
||||
tags:
|
||||
- trilha/finquant
|
||||
- nivel/intermediario
|
||||
---
|
||||
_**Autores:** Felipe Santana · Gabriel Graciano · Rodrigo Menin_
|
||||
## Introdução
|
||||
|
||||
A criação de portfólios de investimentos, atualmente, baseia-se em métodos fundamentalistas ou técnicos. No entanto, em ambos os métodos, reconhece-se a importância da diversificação de uma carteira de investimentos como uma forma de reduzir risco. Nesse contexto, e considerando também limites de capital, atenção e necessidade de alocação sistemática, o presente projeto busca estudar métodos quantitativos no gerenciamento de uma carteira de ações no mercado brasileiro.
|
||||
|
||||
Especificamente, investigou-se o seguinte problema proposto: dado um capital inicial **C** e uma restrição de **k** ações a serem selecionadas, qual alocação maximizaria o **Sharpe Ratio** futuro? Ainda, agrupar previamente ações por similaridade (usando clusterização) melhoraria a relação risco-retorno se comparado à simples seleção das **k** melhores baseado em indicadores?
|
||||
|
||||
Como ponto de partida ao questionamento proposto, assume-se, baseado em pesquisas da literatura realizadas em outros mercados, a hipótese de que **métodos de clusterização** por **indicadores fundamentalistas** aproximam empresas com perfis de risco e resultados semelhantes no mesmo cluster e, por conseguinte, separam empresas com baixa similaridade em clusters distintos. A partir dessa separação, a escolha de um representante por grupo, junto da otimização de pesos, geraria **maior diversificação** e maximizaria o Sharpe Ratio da carteira. Como forma de comparar a efetividade da estratégia de investimento proposta, realizou-se, também, a execução de **backtesting**.
|
||||
|
||||
Para a realização do projeto, obtiveram-se dados de indicadores fundamentalistas dos últimos 5 anos de todas as empresas selecionadas pelo algoritmo. Em seguida, realizou-se pré-processamento dos dados em ambiente Python que eliminou empresas com dados insuficientes, tratou valores faltantes, ajustou desdobramentos e eventos societários e normalizou variáveis geradas a partir dos indicadores, o que garantiu, ao final, uma seleção sólida de empresas para uso no algoritmo de clusterização.
|
||||
|
||||
O **K-means**, método de aprendizado não supervisionado escolhido, se caracteriza por sua rapidez, escalabilidade e necessidade de poucos hiperparâmetros. O algoritmo particiona o conjunto de dados em **k clusters** e atribui cada observação ao centróide mais próximo. Em seguida, cada centróide é recalculado como a média dos vetores das observações do cluster. Esse processo, então, se repete até a ocorrência de convergência.
|
||||
|
||||
## Dados
|
||||
|
||||
A análise exploratória dos dados desenvolvida neste estudo baseia-se em três fontes consolidadas de informações financeiras: as **séries históricas de preços das empresas listadas**, disponibilizadas pela própria B3, e os indicadores fundamentalistas compilados em planilhas a partir das plataformas **Economática** e **Fundamentei**. A escolha delas se justifica por sua ampla adoção no meio acadêmico e profissional, sendo reconhecidas como fontes confiáveis e consolidadas para estudos que relacionam fundamentos econômico-financeiros e variáveis de mercado.
|
||||
|
||||
As séries da B3 foram coletadas diretamente dos arquivos de cotações históricas da bolsa, que incluem **preços de abertura, fechamento, máxima, mínima e volume negociado**. Esses registros constituem a principal referência oficial para a análise da dinâmica dos preços de ações no mercado brasileiro.
|
||||
|
||||
Por sua vez, as plataformas Economática e Fundamentei forneceram uma base estruturada de indicadores fundamentalistas e de desempenho das empresas analisadas. Foram incluídos indicadores de rentabilidade, sendo eles: **margem líquida (ML)**, **margem bruta (MB)**, **margem EBIT**, **margem EBITDA**, **retorno sobre ativos (ROA)**, **retorno sobre patrimônio líquido (ROE)**, **margem de fluxo de caixa operacional (FCO)** e **retorno sobre capital investido (ROIC)**. O período de análise foi definido de forma a maximizar a disponibilidade de dados, abrangendo, sempre que possível, **informações trimestrais de 2020 a 2024**.
|
||||
|
||||
Na etapa de pré-processamento, a fim de garantir a robustez e a confiabilidade da análise, minimizando vieses introduzidos por dados ausentes, foram filtradas apenas as empresas que apresentaram mais **95%** de presença durante esse período; as que não atenderam a esse requisito foram retiradas.
|
||||
|
||||
Os dados da B3 passaram por limpeza de valores faltantes, ajustes decorrentes de eventos societários (fusões, incorporações e deslistagens), recálculo de desdobramentos (via biblioteca **yfinance**) e padronização de datas, assegurando consistência e continuidade nas séries de preços e retornos. No caso da Economática e da Fundamentei, além do processo anterior, foram selecionados apenas os indicadores mais relevantes para o objetivo do estudo, priorizando séries longas e comparáveis, além de uma segmentação entre empresas de setores financeiros e não financeiros.
|
||||
|
||||
Por fim, todos os dados foram exportados para o ambiente **Python** e organizados em **DataFrames**, possibilitando a construção de uma matriz que integrou as cotações históricas com os indicadores fundamentalistas. Essa base consolidada serviu de fundamento empírico para a aplicação do método de **clusterização** e a execução do **backtesting**.
|
||||
## Metodologia
|
||||
|
||||
Com o objetivo de aplicar os conhecimentos adquiridos sobre tratamento, criação e processamento de dados, bem como sobre mercados financeiros e modelagem, este trabalho propõe a implementação de uma **estratégia quantitativa** baseada em **clusterização** e na **teoria moderna de portfólios**. A fim de avaliar a eficiência dessa análise, foi realizado um backtest considerando cenários divergentes no período de **2019 a 2024**. Para isso, este trabalho parte de duas hipóteses principais:
|
||||
|
||||
1. **Quanto menos semelhantes** forem as empresas em seus indicadores, **menor tende a ser a volatilidade idiossincrática** de suas ações.
|
||||
2. **As informações refletidas no preço** das ações coincidem com aquelas apresentadas nas demonstrações de resultado das empresas.
|
||||
|
||||
A primeira hipótese implicaria em uma **sistemática redução (portfólios)** ou **concentração (em certos grupos)** da volatilidade medida. Já a segunda, teria-se uma distribuição de pesos altamente enviesada à ação do subgrupo mais distante da origem e/ou convergência das alocações a uma mesma região.
|
||||
|
||||
Na calibragem da estratégia, o número de subgrupos a serem criados foi decidido empiricamente com testes exploratórios no primeiro período da base de dados, assim este sendo excluído dos testes de hipóteses.
|
||||
|
||||
Dos vieses intrínsecos a cada fonte de informação, tratou-se com a normalização de valores, exclusão de omissos, condensamento de indicadores e recortes sucessivos na amostra. Além disso, para combater o **viés de agrupamento** gerado pelo diferente porte das empresas presentes no mercado de ações, todo grupo de informações usado no algoritmo de cluster foi **normalizado**, ou seja, tiveram suas médias e variâncias convertidas em uma distribuição normal padrão. Ainda, cada tratamento foi feito de maneira separada de dados futuros para que esses não desloquem os indicadores das distribuições dos dados em uso, o que indicaria um **viés ao futuro**. Por fim, os dados que crescem proporcionalmente com o giro das empresas, e que são adimensionais, foram convertidos em **margens** adotando intervalos padrões de (0, 1].
|
||||
|
||||
Ademais, os valores faltantes em séries históricas de preços foram preenchidos de forma adaptativa ao contexto de utilização. Para o cálculo dos retornos, eles foram interpolados linearmente de modo que sua derivada fosse constante e, no caso do cálculo de montante, o preço foi preenchido retroativamente.
|
||||
|
||||
Para os valores faltantes nos indicadores das empresas, empresas sem indicadores publicados na data padrão foram **descartadas** para a simplificação da distribuição de pesos, fixando a data do processo. Por outro lado, as empresas que não publicaram ou tiveram seus indicadores indisponíveis em trimestres pontuais foram **retiradas dinamicamente** do universo de escolhas para o respectivo trimestre.
|
||||
|
||||
Com isso, as carteiras otimizadas em um grupo que apresentaram **retorno esperado negativo** têm a opção de **deixar o dinheiro não investido**, consequência necessária para manter lógica a subdivisão do universo inteiro em subgrupos. Ainda, supondo que para um universo de ações ser completo necessita-se de ter pelo menos metade das empresas com valor esperado menor que o do mercado em geral. Uma consequência disso com a subdivisão do mercado é a possível existência de um grupo em que todas as empresas possuam retornos negativos.
|
||||
|
||||
## Backtest
|
||||
|
||||
O backtest foi implementado em períodos de **três meses**, durante o período de **2020 a 2024**, e com informações retroativas com o mesmo período, assim não havendo sobreposição de teste, inferência e estratégia.
|
||||
|
||||
O algoritmo de **clusterização** foi utilizado como forma de **restringir** o universo de possibilidades a serem otimizadas. Para isso, foram empregados indicadores financeiros derivados de dados públicos divulgados trimestralmente pelas empresas do mercado brasileiro, com base nos **Demonstrativos de Resultados (DRE)** e nos **Fluxos de Caixa**. A calibração do modelo resultou na formação de **três grupos**, número definido a partir dos testes empíricos do **método do cotovelo** e da **silhueta**.
|
||||
|
||||
![[projeto-cluster-portfolio-1.png]]
|
||||
|
||||
>[!info]
|
||||
>A análise visual desses métodos indicou que o teste do cotovelo delimitou a escolha entre **três e oito** clusters
|
||||
|
||||
|
||||
![[projeto-cluster-portfolio-7.png]]
|
||||
|
||||
>[!info]
|
||||
>Enquanto o teste da silhueta mostrou que as pontuações entre **quatro e sete** permaneceram no mesmo patamar
|
||||
|
||||
Assim, a decisão final pela divisão em **três clusters** foi alcançada por meio do algoritmo **K-Means**, implementado na biblioteca **Scikit-learn**.
|
||||
|
||||
Assim, nomeados os três subgrupos do universo máximo de **133 empresas**, foi criada uma **carteira fictícia** para cada um, de forma a **maximizar o Sharpe Ratio realizado** no período dos últimos três meses. Isso se deu através do algoritmo de alocação de carteiras via biblioteca do Python **PyPortfolioOpt (pypfopt)**, uma vez que ela busca uma solução ótima entre a **matriz de correlação** das ações e seus **retornos esperados** (dos últimos 3 meses). E, finalmente, uma carteira com seus pesos distribuídos entre as empresas que tiveram **melhor performance em cada subgrupo** é criada como ponto de comparação.
|
||||
|
||||
A seguinte análise de performance visa responder e comparar tanto os desempenhos **intergrupos**, como entre cada grupo e a **carteira limitada a 3 ações**.
|
||||
|
||||
## Resultados
|
||||
|
||||
O backtest foi realizado considerando todos os trimestres de **2020 a 2024**. Nesse período, a carteira principal selecionou ao todo **29 ações**. Para destacar a relevância das escolhas, priorizou-se analisar as ações mais **recorrentes ao longo do tempo**, em vez das que tiveram **maior peso médio** em períodos isolados. Isso porque houve momentos em que a carteira concentrou peso **excessivo em uma única ação**, que depois acabou não retornando mais ao portfólio, o que poderia **distorcer a análise**.
|
||||
|
||||
![[projeto-cluster-portfolio-9.png]]
|
||||
|
||||
|
||||
As ações que mais se destacaram no portfólio, tanto pela **frequência** quanto pelo **peso médio**, podem ser organizadas e descritas principalmente pelos seguintes setores e suas características:
|
||||
|
||||
### (1) Consumo Não Cíclico
|
||||
|
||||
A **SLC Agrícola** se destacou como a ação **mais relevante** do portfólio, atingindo o **maior peso médio (83%)**. O setor de consumo não cíclico, representado pelo **agronegócio**, possui forte **resiliência a crises internas**, dado seu alinhamento com a demanda externa por **commodities agrícolas** (soja, milho e algodão). Esse desempenho mostra que o modelo captou a relevância estrutural do agronegócio brasileiro como pilar de **rentabilidade estável**.
|
||||
|
||||
### (2) Comunicações
|
||||
|
||||
A presença de **VIVT3**, com o **segundo maior peso médio (62%)**, indica a importância do setor de **telecomunicações** no portfólio. Empresas desse setor apresentam **receitas recorrentes**, **geração de caixa robusta** e **políticas consistentes de dividendos**.
|
||||
|
||||
### (3) Materiais Básicos
|
||||
|
||||
A **Vale (VALE3)** se consolidou como peça-chave, refletindo a relevância dos **ciclos de valorização do minério de ferro** e a exposição da empresa ao **mercado externo**, especialmente à **China**. A **Rani (RANI3)**, do setor de **papel e celulose**, captou a **demanda crescente por embalagens**, impulsionada pela **expansão do e-commerce**. Já a **Unipar (UNIP6)**, voltada ao setor **petroquímico**, evidencia a atratividade de **nichos industriais** ligados à cadeia química.
|
||||
|
||||
### (4) Bens Industriais
|
||||
|
||||
A **WEG (WEGE3)** destacou-se como representante de **bens industriais**. A empresa combina **forte expansão internacional**, **margens consistentes** e **inovação tecnológica**, atributos valorizados pelo modelo. Por outro lado, a **São Carlos (SCAR3)**, voltada à **gestão de imóveis corporativos**, reflete uma inserção mais específica dentro do setor, trazendo exposição ao **mercado imobiliário de alto padrão**, o que **diversifica o portfólio** em relação aos demais industriais.
|
||||
|
||||
### (5) Consumo Cíclico
|
||||
|
||||
O setor de consumo cíclico foi representado por três companhias de segmentos distintos. A **Technos (TECN3)** adicionou um ativo de **menor capitalização**, refletindo oportunidades de curto prazo no **varejo de acessórios**. A **Vulcabras (VULC3)**, com marcas esportivas de renome, esteve associada à **retomada do consumo doméstico**. A **Whirlpool (WHRL4)**, multinacional de eletrodomésticos, reforçou a exposição a **bens duráveis**, geralmente mais sensíveis ao **ciclo econômico**. O conjunto sugere que o algoritmo explorou **nichos de consumo** em diferentes fases do ciclo de renda.
|
||||
|
||||
De forma geral, a carteira apresentou **diversidade setorial**, com predominância de setores ligados à **rentabilidade estrutural**. Isso reforça o objetivo central do projeto: empregar a **clusterização** não apenas para identificar padrões de escolha, mas também uma tentativa de **ampliar a diversificação e de se reduzir riscos**.
|
||||
|
||||
Outro ponto relevante diz respeito à **dinâmica temporal dos pesos atribuídos**. Não basta analisar quais ações foram selecionadas, mas também **quando** e com **qual intensidade** participaram da carteira.
|
||||
|
||||
![[projeto-cluster-portfolio-3.png]]
|
||||
|
||||
>[!info]
|
||||
>A leitura visual mostra que houve uma concentração a um único ativo por período de forma **sistêmica**, justamente pela escolha do critério de **Sharp Ratio**. O algoritimo acabou não fazendo uma boa distribuição de pesos, concentrando o peso do portfólio em cada período em uma única ação somente. Diante desse fato, será mostrado mais adiante, que isso acabou comprometendo a intenção inicial de reduzir riscos sistêmicos e de potencializar o retorno esperado.
|
||||
|
||||
Ademais, pode-se observar que o modelo tem ativos como **VIVT3**, **VALE3** e **WEGE3** aparecendo em **múltiplos períodos** distintos, sugerindo que eles são “candidatos” recorrentes a compor a carteira. Suas características de **rentabilidade estrutural** são consistentemente capturadas pelo modelo em diferentes contextos de mercado. Em contrapartida, ações como **RANI3**, **TECN3** ou **WHRL4**, que aparecem de forma mais esporádica, representam **apostas mais táticas** e surgem como **oportunistas**, selecionadas quando seus fundamentos se destacam em um trimestre específico.
|
||||
|
||||
Portanto, dinâmica da carteira **não é passiva**, no sentido de se comprar e segurar os ativos com os melhores fundamentos por longos períodos. Pelo contrário, é uma estratégia de **rotação quantitativa ativa**.
|
||||
|
||||
Esse comportamento dinâmico levanta a questão central: até que ponto a rotação ativa e a diversificação de setores se traduziram em **resultados financeiros concretos**? Para responder, é necessário observar a **rentabilidade acumulada e parcial** da carteira ao longo do intervalo de tempo.
|
||||
|
||||
![[projeto-cluster-portfolio-6.png]]
|
||||
|
||||
>[!info]
|
||||
>A análise de performance revela que essa dinâmica **não se traduziu em resultados sustentáveis**. O resultado final da estratégia ao longo dos cinco anos (**2020–2025**) foi um **prejuízo acumulado de 24%**. A trajetória até esse desfecho foi **extremamente volátil**: a carteira chegou a registrar ganhos **próximos de 40%** no início de **2023**, mas reverteu toda a valorização e **terminou em território negativo**. O percurso expôs o portfólio a um **risco elevado**, com um **drawdown inicial superior a 50%** no primeiro trimestre de **2020** e uma **curva de capital instável** ao longo do tempo.
|
||||
|
||||
O comportamento trimestral reforça essa leitura: a estratégia alternou trimestres de **ganhos expressivos (acima de 20%)** com **perdas acentuadas (superiores a -20%)**. Isso mostra que a **concentração** em poucas apostas de curto prazo, embora gerasse **picos de performance**, comprometeu a **consistência** dos resultados no horizonte de cinco anos.
|
||||
|
||||
A fins de exercício da estratégia, foi estipulado um **valor patrimonial inicial** de **R$ 100.000,00**. Esse valor serve como referência base para avaliar tanto o crescimento quanto as perdas ao longo do período, permitindo interpretar os movimentos patrimoniais em termos **relativos e absolutos**.
|
||||
|
||||
![[projeto-cluster-portfolio-4.png]]
|
||||
|
||||
>[!info]
|
||||
>A linha de preta de mostra a referência incial dos R$ 100.000,00 investidos incialmente. As barras vermelhas mostram os períodos que o portfólio ficou abaixo desse patamar e as barras verdes mostram os períodos que ficou acima.
|
||||
|
||||
A evolução patrimonial evidencia algumas **lições centrais**. A trajetória foi caracterizada por **alta volatilidade**, refletindo **alocação de risco elevada** e exposição a oscilações significativas. A marca de **R$ 100 mil** atuou como **divisor de águas**: o patrimônio conseguiu superar e se manter acima por cerca de **1,5 ano**, mas acabou recuando, confirmando a resistência dessa faixa. O **drawdown** do primeiro trimestre de **2020** comprometeu fortemente a rentabilidade de longo prazo, revelando **falhas na gestão de risco**.
|
||||
|
||||
Em suma, a trajetória patrimonial demonstra que, apesar do potencial identificado pelo modelo e das oportunidades de ganhos expressivos em períodos pontuais, a estratégia apresentou **consistência limitada** e **alta sensibilidade a choques de mercado**. A **falta de mecanismos robustos de controle de risco** e a **concentração elevada** em poucos ativos por trimestre impediram que os ganhos fossem preservados, resultando em uma **performance final significativamente inferior** ao pico alcançado.
|
||||
## Análise de Risco
|
||||
|
||||
Como descrito anteriormente, o portfólio apresentou um **perfil de risco elevado**, devido à forte **concentração em poucos ativos** e à **alta convicção** nas escolhas da carteira. A fim de comprovar essa percepção, foram incluídas outras **métricas de risco** à análise, sendo elas o **VaR (Value at Risk)** e o **CVaR (Conditional Value at Risk)**.
|
||||
|
||||
O **VaR** estima a **perda máxima esperada** do portfólio em um horizonte de tempo definido, dado um **nível de confiança** específico. Diante disso, foi estimado um **VaR mensal com 95% de confiança** que indicou um resultado de **-15%**, ou seja, em **19 de 20 meses** do período de análise, as perdas **não devem ultrapassar -15%**.
|
||||
|
||||
Já o **CVaR** calcula a **perda média nos piores cenários**, ou seja, quando a perda ultrapassa o valor estimado pelo VaR. No caso do portfólio analisado, essa métrica indicou uma **queda de -30%**, evidenciando a severidade das perdas em **eventos extremos**. Assim, enquanto o VaR estabelece um **limite de perda “esperado”**, o CVaR captura a **magnitude real das perdas** nos piores cenários, sendo especialmente relevante para estratégias **concentradas** ou com **retornos assimétricos**.
|
||||
|
||||
![[projeto-cluster-portfolio-2.png]]
|
||||
|
||||
No caso do portfólio analisado, o VaR mensal de **-15%** confirma que a estratégia **assume risco elevado** de forma consistente, enquanto o CVaR de **-30%** evidencia que, quando o limite do VaR é ultrapassado, o **prejuízo médio esperado é substancial**. Os eventos históricos de **-50%**, **-31%** e **-18%** reforçam a materialização concreta desse risco, demonstrando que perdas severas **não** são meros acidentes, mas sim uma **característica estrutural** da carteira. O **drawdown máximo de 51%** registrado no início de **2020** confirma que o portfólio é vulnerável a **choques extremos**, resultado da **extrema concentração** de capital em poucos ativos.
|
||||
|
||||
Em síntese, os dados demonstram que a estratégia **não apresenta risco otimizado**, mas **risco concentrado**: o portfólio aposta em **retornos elevados**, mas paga caro em **perdas expressivas**. O **resultado final de -24%** evidencia que o prêmio de risco **não compensou** a magnitude das perdas, gerando **retorno ajustado ao risco negativo**.
|
||||
|
||||
## Limitações
|
||||
|
||||
Durante a execução do projeto, houveram **limitações relevantes** na **seleção de indicadores**, nas **especificidades de cada setor** e na **qualidade do banco de dados**.
|
||||
|
||||
Além disso, decorrentes de problemas de **acesso amplo de dados** inicialmente (sem acesso ao Economática por grande período do estudo), o período de **backtest** que pôde ser realizado foi de **2020 a 2024** — intervalo de tempo em que houve a **pandemia**, na qual muitos ativos sofreram desvalorização causada por **choque externo**. Assim, a carteira possui a sua **pior marca de rentabilidade** gerada nesse período, o que pode ter **enviesado negativamente** a performance geral.
|
||||
|
||||
Os indicadores utilizados são predominantemente de **rentabilidade**, decisão motivada pela **dificuldade de coleta sistemática** de outras métricas, como **liquidez** e **solvência** para todo o universo de empresas. Destaca-se, também, a **assimetria de aplicabilidade** dos indicadores entre diferentes setores: **giro de estoque**, por exemplo, é pertinente ao varejo, mas **não** a bancos ou empresas de tecnologia. Esse recorte presente no projeto favorece, então, setores com modelo de negócio melhor traduzidos em rentabilidade, como é o caso dos **bens industriais**, **materiais** e **consumo cíclico**, que foram os setores mais presentes como resultado da estratégia escolhida, e reduz a seleção de outros segmentos, como **empresas de tecnologia**.
|
||||
|
||||
Além disso, foram feitas as seguintes **hipóteses extras**, a fim de facilitar a execução do backtest:
|
||||
|
||||
- **Empresas não pagam dividendos**;
|
||||
- A **taxa livre de risco** foi considerada **0**;
|
||||
- **Todas as empresas da B3** têm **ações fracionadas**;
|
||||
- **Não existem custos de transação**.
|
||||
|
||||
É válido citar também a **retirada de empresas do setor financeiro** da análise (bancos e seguradoras) por apresentarem uma **estrutura de balanço patrimonial diferente** dos outros setores. A razão dessa escolha se deu por essas empresas, por definição, **não apresentarem todos os indicadores de rentabilidade** escolhidos na análise.
|
||||
|
||||
Na fase de **validação interna**, o número de clusters indicados como ideal variou entre **três e oito**. Imagina-se, no entanto, que a utilização de **oito clusters** poderia indicar **overfitting**. Por outro lado, a **carteira composta de apenas 3 ações** teve **problemas no manejo de risco** — visto seu universo reduzido de opções — tendo **quedas maiores** do que a carteira sem tais restrições.
|
||||
|
||||
## Conclusão
|
||||
|
||||
O projeto demonstrou que a estratégia de **otimização via clusterização**, na forma como foi implementada, **não cumpriu o objetivo** inicial de **reduzir risco** e **maximizar o Sharpe Ratio**. A carteira resultante apresentou **desempenho volátil**, **forte concentração** em poucos ativos e um **resultado acumulado negativo**, evidenciando **falhas de gestão de risco**.
|
||||
|
||||
![[projeto-cluster-portfolio-5.png]]
|
||||
|
||||
>[!info]
|
||||
>Comparação entre a **rentabilidade acumulada** da nossa carteira principal com o **Ibovespa** e com a **carteira sem clusterizar**, que apenas pegava ações do universo inteiro com maior maior Sharpe Ratio no período. Podemos perceber o desempenho ficou bem aquém do esperado.
|
||||
|
||||
Apesar de ter identificado **setores relevantes** e capturado **momentos de alta rentabilidade**, a estratégia mostrou-se **inconsistente** no longo prazo. A **diversificação** prometida pela clusterização **não** se concretizou, já que a **alocação excessiva** em um ou dois papéis **anulou** os benefícios esperados, performando **pior** que a carteira na qual **não houve clusterização**.
|
||||
|
||||
O estudo deixa claro que a **simples aplicação de clusterização** não é suficiente para **construir um portfólio robusto**. É necessário incorporar **controles de risco explícitos**, **limites de exposição por ativo** e **métricas adicionais além do Sharpe Ratio**. Sem esses mecanismos, a estratégia tende a se comportar como **especulação de curto prazo**, sem entregar **retorno ajustado ao risco** de forma sustentável.
|
||||
|
||||
Assim, a principal contribuição do trabalho foi **evidenciar os limites** da abordagem testada. Para evoluir, recomenda-se **ampliar o conjunto de indicadores**, introduzir **técnicas de rebalanceamento periódico** e **adotar parâmetros de risco mais rigorosos**. Só com esses ajustes a **clusterização** poderá servir de base para uma **estratégia quantitativa consistente** no mercado brasileiro.
|
||||
|
||||
## Referências
|
||||
|
||||
- LEÓN, Diego; ARAGÓN, Arbey; SANDOVAL, Javier; HERNÁNDEZ, Germán; ARÉVALO, Andrés; NIÑO, Jaime. **Clustering algorithms for risk-adjusted portfolio construction**. *Procedia Computer Science*, v. 108C, p. 1334-1343, 2017. Disponível em: <https://www.sciencedirect.com/science/article/pii/S187705091730772X>. Acesso em: 20 ago. 2025.
|
||||
- CAMPBELL, Sean D. **A review of backtesting and backtesting procedures**. *Finance and Economics Discussion Series*, Washington: Board of Governors of the Federal Reserve System, n. 2005-21, Apr. 2005. Disponível em: <https://www.federalreserve.gov/pubs/feds/2005/200521/200521pap.pdf>. Acesso em: 20 ago. 2025.
|
||||
- CHRISTOFFERSEN, Peter. **Backtesting**. Montreal: McGill University; Copenhagen Business School; CREATES, 2008. Disponível em: <https://ssrn.com/abstract=2044825>. Acesso em: 20 ago. 2025.
|
||||
- BOLOS, Marcel-Ioan; RUSU, Ștefan; LEORDEANU, Marius; SABĂU-POPA, Claudia Diana; PERTICĂȘ, Diana Claudia; CRIȘAN, Mihai-Ioan. **K-means clustering for portfolio optimization: symmetry in risk–return tradeoff, liquidity, profitability, and solvency**. *Symmetry*, v. 17, n. 847, 2025. Disponível em: <https://www.mdpi.com/2073-8994/17/6/847>. Acesso em: 20 ago. 2025.
|
||||
423
content/01-finquant/2025-s1/trading-ia.md
Normal file
423
content/01-finquant/2025-s1/trading-ia.md
Normal file
@ -0,0 +1,423 @@
|
||||
---
|
||||
title: Estratégias de trading com python
|
||||
tags:
|
||||
- trilha/finquant
|
||||
- nivel/avancado
|
||||
---
|
||||
_**Autores:** Ana Beatriz Zaparoli · David Leati · Eduardo Lud · Tiago Toledo_
|
||||
## Introdução
|
||||
|
||||
O mercado de criptoativos revolucionou o cenário financeiro com sua natureza digital e descentralizada. Caracterizado por sua constante evolução e alta volatilidade, ele apresenta tanto oportunidades quanto desafios significativos para os investidores. A dificuldade em prever movimentos de preços e identificar momentos ideais de entrada e saída é um problema persistente, que impede muitos participantes de maximizar seus retornos e gerenciar riscos de forma eficaz.
|
||||
|
||||
A volatilidade, embora possa gerar ganhos substanciais se as negociações forem feitas no momento certo — o que no jargão cripto é conhecido como _“buy the dip”_ (comprar na baixa) e _“taking profit_” (realizar lucro) — , também pode resultar em perdas significativas se não for gerenciada adequadamente. Vender na baixa e comprar na alta são exemplos clássicos de operações prejudiciais. Essa característica intrínseca do mercado cripto não pode ser ignorada no desenvolvimento de estratégias de investimento.
|
||||
|
||||
![[projeto-tiago-1.jpg]]
|
||||
|
||||
Nesse contexto dinâmico, o desenvolvimento de estratégias de trading robustas e adaptáveis é crucial. A busca por métodos que possam explorar as ineficiências do mercado, ao mesmo tempo em que mitigam os riscos inerentes, motiva a criação de abordagens inovadoras. Nosso projeto se insere nessa lacuna, buscando desenvolver e comparar duas estratégias distintas para negociação de criptomoedas, visando não apenas a rentabilidade, mas também a resiliência em cenários voláteis.
|
||||
|
||||
Neste artigo, compartilhamos o processo de construção de uma estratégia de trading de criptomoedas usando duas abordagens distintas. A primeira é uma estratégia de _pair trading_, que se baseia na exploração de relações de longo prazo entre ativos correlacionados, assumindo que desvios temporários tendem a se corrigir. A segunda abordagem utiliza um modelo de _machine learning_, focado na previsão de retornos e na geração de sinais operacionais. Ambas as estratégias foram desenvolvidas e testadas com dados reais da Binance, utilizando a linguagem Python e bibliotecas de código aberto. Nosso objetivo central foi criar uma estrutura flexível de simulação e otimização que permitisse testar diferentes parâmetros e maximizar o desempenho ajustado ao risco, utilizando o retorno/índice de Sharpe como métrica principal de avaliação, e analisar a viabilidade prática de sua implementação no ambiente volátil das criptomoedas.
|
||||
|
||||
## Datasets utilizados
|
||||
|
||||
Foram utilizados dados históricos de diversos criptoativos, com séries de preços de fechamento em intervalos de 1 hora até 1 dia, abrangendo um período de 48 meses (2020–2024). A coleta foi realizada por meio da API da Binance, principal exchange global, que desde 2017 mantém a liderança em volume diário de negociação de criptomoedas.
|
||||
|
||||
Os arquivos .CSV utilizados seguem este padrão:
|
||||
|
||||
● timestamp (em milissegundos)
|
||||
|
||||
● open (preço de abertura)
|
||||
|
||||
● high (preço máximo naquele candlestick)
|
||||
|
||||
● low (preço mínimo naquele candlestick)
|
||||
|
||||
● close (preço de fechamento)
|
||||
|
||||
```python
|
||||
from binance.client import Client
|
||||
import pandas as pd
|
||||
|
||||
# A chave da API não é necessária para pegar dados históricos
|
||||
client = Client(api_key='', api_secret='')
|
||||
|
||||
# Função para pegar dados históricos de velas
|
||||
def get_historical_klines(symbol, interval, start_str=None, end_str=None):
|
||||
return client.get_historical_klines(symbol, interval, start_str, end_str)
|
||||
|
||||
symbol = 'BTCUSDT'
|
||||
begin_symbols = ['BTC', 'WBTC', 'BNB', 'ETH', 'SOL', 'ADA', 'XRP']
|
||||
end_symbol = 'USDT'
|
||||
|
||||
interval = Client.KLINE_INTERVAL_1DAY #5MINUTE, 1HOUR, 1DAY, etc
|
||||
start_str = '20 Jul, 2023'
|
||||
end_str = '20 Jul, 2025'
|
||||
|
||||
klines = get_historical_klines(symbol, interval, start_str, end_str)
|
||||
|
||||
# Converte os dados para um DataFrame do Pandas
|
||||
df = pd.DataFrame(klines,
|
||||
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume',
|
||||
#'close_time', 'quote_asset_volume', 'number_of_trades',
|
||||
#'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
|
||||
#'ignore'
|
||||
] )
|
||||
|
||||
# Converte o timestamp para um formato legível
|
||||
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
|
||||
|
||||
# Salva o DataFrame em um arquivo CSV
|
||||
df.to_csv(f'fechamentos/{symbol}_{interval}_data.csv', index=False)
|
||||
```
|
||||
|
||||
## Escolha das criptomoedas
|
||||
|
||||
A seleção das moedas utilizadas na estratégia foi baseada em seu **valor de mercado (_Market Cap_)**. Assim, foram escolhidas as 13 maiores criptomoedas nesse critério. Em seguida, para a estratégia de arbitragem, realizou-se o teste de cointegração entre todos os pares possíveis, a fim de identificar aqueles mais adequados para a formação das estratégias de negociação. Já para o modelo de _machine learning_, os dados foram acrescidos com variáveis derivadas como: retornos, médias móveis, volatilidade histórica, etc.
|
||||
|
||||
![[projeto-tiago-2.jpg]]
|
||||
|
||||
## Análise exploratória dos dados (estatísticas e gráficos)
|
||||
|
||||
Para compreender as análises e gráficos apresentados a seguir, é importante inicialmente observar o comportamento histórico dos valores das criptomoedas selecionadas. Abaixo, são exibidos, como exemplo, os gráficos de duas das moedas que se mostraram cointegradas após uma análise de correlação histórica.
|
||||
|
||||
![[projeto-tiago-3.jpg]]
|
||||
|
||||
Abaixo, apresenta-se a análise do crescimento do capital inicial da estratégia. O gráfico correspondente ilustra a evolução percentual tanto dos ativos quanto da estratégia de trading no período entre 05/01/2025 e 20/07/2025.
|
||||
|
||||
![[projeto-tiago-4.jpg]]
|
||||
|
||||
>[!info]
|
||||
>Observa-se que o capital inicial da estratégia obteve um crescimento aproximado de **40%** ao final da simulação, enquanto os ativos individualmente apresentaram variações bem mais modestas: cerca de **3%** para o Ativo 1 e praticamente **0%** para o Ativo 2
|
||||
|
||||
## O que é trading?
|
||||
|
||||
O trading é a compra e venda de ativos financeiros com o objetivo de lucrar com flutuações de curto e médio prazo. Exemplos mais comuns de ativos negociados utilizando essa prática são ações, criptomoedas, moedas estrangeiras e commodities.
|
||||
|
||||
Como funciona:
|
||||
O trader (pessoa que pratica trading) tenta prever o movimento futuro do ativo para abrir posições. Caso acredite que vá subir, ele abre uma posição de compra _(“long”_), e caso acredite que vá cair, ele abre uma posição de venda (_“short”_).
|
||||
|
||||
## Tipo de trading:
|
||||
|
||||
Existem vários tipos e estratégias de trading, os principais são:
|
||||
|
||||
**1. Day Trade:** é o ato de comprar e vender ativos no mesmo dia, ou seja, a posição é aberta e fechada no mesmo dia, buscando lucrar com pequenas variações diárias.
|
||||
|
||||
**2. Scalper Trade:** é uma estratégia derivada do _Day Trade_, porém o intervalo de negociações é muito mais curto (segundos ou minutos) e com uma frequência muito maior, com o objetivo de obter pequenos lucros com dezenas ou centenas de operações diárias.
|
||||
|
||||
**3. Swing Trade:** é o ato de manter posições por períodos maiores, como dias ou semanas, aproveitando movimentos maiores de mercado, porém ainda em curto.
|
||||
|
||||
**4. Position Trade:** é uma estratégia que busca obter lucros com operações de médio prazo, seguindo as tendências do mercado. As posições podem durar semanas, meses ou até alguns anos, porém ainda mantendo o foco a médio prazo.
|
||||
|
||||
Ferramentas e análises: Para tomar as decisões, os traders utilizam principalmente 2 tipos de análises:
|
||||
|
||||
**1. Análise Técnica:** é o estudo de gráficos de preços e indicadores quantitativos para identificar padrões e prever os movimentos futuros. Sendo mais comum em trades de curto prazo.
|
||||
|
||||
**2. Análise Fundamentalista:** é a avaliação da saúde da empresa e do setor, analisando fatores qualitativos, macroeconômicos e notícias do mercado para a tomada de decisão. É mais comum em trades de médio e longo prazo.
|
||||
## Estratégia de Pair Trading:
|
||||
|
||||
A arbitragem estatística, ou _pair trading_, é uma estratégia que busca explorar relações históricas entre dois ativos que apresentam alta correlação ou, sendo um pouco mais específico, séries coestacionárias ou cointegradas.
|
||||
|
||||
![[projeto-tiago-5.jpg]]
|
||||
|
||||
>[!info]
|
||||
>Como ilustrado na imagem, durante o período observado, o par de ativos 1 e 2 tende a retornar ao spread médio histórico
|
||||
|
||||
A lógica é simples: quando dois ativos se movem juntos ao longo do tempo, desvios temporários nessa relação tendem a se corrigir no longo prazo. Se essa relação for apenas baseada em correlação, os desvios podem ser espúrios; já no caso de séries cointegradas, existe uma base estatística mais sólida que sugere que eventuais afastamentos tendem a se corrigir. Assim, o trader vende o ativo que está relativamente “caro” e compra o que está “barato”, esperando que ambos retornem ao equilíbrio histórico.
|
||||
|
||||
No contexto de criptomoedas, essa abordagem pode, por exemplo, aproveitar diferenças momentâneas entre pares como **BTC/BNB.** Em muitos casos, a verificação da **cointegração** é ainda mais relevante do que a correlação, já que séries de preços normalmente não são estacionárias individualmente, mas podem formar uma combinação linear estacionária, caracterizando cointegração.
|
||||
|
||||
![[projeto-tiago-7.jpg]]
|
||||
|
||||
>[!info]
|
||||
>A fim de curiosidade, esta figura mostra que a cointegração só permaneceu como condição verdadeira para os pares BNBxLTC durante um período de poucos meses, valendo lembrar que a estratégia de pair trading só ocorre quando estes dois ativos estiverem cointegrados
|
||||
|
||||
![[projeto-tiago-8.jpg]]
|
||||
|
||||
>[!info]
|
||||
>Outra coisa interessante de se analisar é que quando usamos janelas muito curtas de cointegração (menos de 120 dias) começamos a ter problemas com falsos positivos (períodos cointegrados de poucos dias). Então é vital usar janelas de tempo bem definidas e que de fato encapsulem os comportamentos da série.
|
||||
|
||||
A execução prática envolve três etapas principais:
|
||||
|
||||
- **Identificação do par** — seleção de ativos com alta correlação histórica e liquidez adequada;
|
||||
- **Modelagem da relação** — cálculo de métricas como _spread_ e z-score para identificar desvios estatisticamente relevantes;
|
||||
- **Operação e reversão** — abertura simultânea de posições opostas (_long/short_)(comprado/vendido) quando o desvio ultrapassa um limite predefinido e fechamento quando a relação retorna ao padrão.
|
||||
O objetivo é obter lucro mesmo em mercados laterais, já que o ganho não depende da direção geral dos preços, mas sim da convergência do par. Essa característica torna o _pair trading_ atrativo em ambientes voláteis e incertos, como o das criptomoedas.
|
||||
|
||||
```python
|
||||
def gerar_sinais(df, zscore_compra_e_venda, zscore_encerrar_posicao, janela, taxa=0.0001):
|
||||
series1 = df['Ativo1']
|
||||
series2 = df['Ativo2']
|
||||
|
||||
limite_superior =zscore_compra_e_venda
|
||||
limite_inferior = -zscore_compra_e_venda
|
||||
|
||||
spread = calcular_spread(series1, series2)
|
||||
rolling_mean, rolling_std, zscore = calcular_zscore(spread, janela) #Zscore com janela movel
|
||||
media_movel_ativo1, media_movel_ativo2, ativo1_std, ativo2_std = calcular_media_ativos(series1, series2, janela) #media movel do ativo 1 e 2
|
||||
|
||||
nomes_posicoes = ["neutro", "compra_1_vende_2", "vende_1_compra_2"]
|
||||
posicao = nomes_posicoes[0]
|
||||
|
||||
|
||||
sinais_compra_e_venda = []
|
||||
|
||||
for i in range(len(df)):
|
||||
linha_df = df.iloc[i]
|
||||
|
||||
if zscore.iloc[i] > limite_superior:
|
||||
posicao = nomes_posicoes[2] #entra vendido no ativo 1 e comprado no 2
|
||||
if zscore.iloc[i] < limite_inferior:
|
||||
posicao = nomes_posicoes[1] #entra comprado no ativo 1 e vendido no 2
|
||||
|
||||
|
||||
if (-zscore_encerrar_posicao < zscore.iloc[i] < zscore_encerrar_posicao):
|
||||
posicao = nomes_posicoes[0] #posicao mantem neutra ou encerra posicao anterior
|
||||
|
||||
sinais_compra_e_venda.append(posicao)
|
||||
|
||||
|
||||
df_sinais.to_excel('resultados/estrategia.xlsx', index=False)
|
||||
|
||||
return df_sinais
|
||||
```
|
||||
|
||||
Para entender a estratégia, o gráfico mais importante é o **z-score do spread**, que é basicamente o spread normalizado entre os dois ativos. Calculamos como: **ativo 1 (normalizado) − ativo 2 (normalizado)**.
|
||||
|
||||
- Quando o z-score está **positivo e acima do limite**, a estratégia **vende o ativo 1 e compra o ativo 2**.
|
||||
- Quando o z-score está **negativo e abaixo do limite**, faz-se o inverso: **compra o ativo 1 e vende o ativo 2**.
|
||||
|
||||
![[projeto-tiago-9.jpg]]
|
||||
|
||||
>[!info]
|
||||
>Esta imagem ilustra o código acima, em que, dependendo do z-score, assumimos uma posição e encerramos na expectativa de reversão a média histórica.
|
||||
|
||||
O objetivo é obter lucro mesmo em mercados laterais, já que o ganho não depende da direção geral dos preços, mas sim da convergência do par. Mas um dos grandes problemas é que em num ambiente volátil e incerto como o das criptomoedas, relações de cointegração podem facilmente ser quebradas e os pares que antes deveriam convergir acabam se afastando cada vez mais.
|
||||
|
||||
E, como mostrado anteriormente, a estratégia somente irá operar em momentos de cointegração, mesmo assim, ao trabalhar com múltiplas moedas, temos muitas oportunidades ao longo do tempo.
|
||||
|
||||
![[projeto-tiago-10.jpg]]
|
||||
|
||||
>[!info]
|
||||
>Esta simulação de 2020 a 2025, por exemplo, contou com cerca de 12 moedas, totalizando 66 pares, e, em média, operava com cerca de 3,5 posições abertas simultaneamente.
|
||||
|
||||
## Estratégia de Machine Learning:
|
||||
|
||||
A estratégia baseada em _Machine Learning_ no Python consiste no uso de modelos de aprendizado supervisionado para prever a direção futura do preço da criptomoeda e, a partir dessas previsões, abrir posições de forma automática. O processo envolve alimentar o modelo com dados históricos do mercado, incluindo preços e indicadores técnicos, para que ele identifique padrões e relações entre variáveis que precedem movimentos específicos do ativo. A partir disso, o modelo é capaz de gerar previsões para novos dados em tempo real, possibilitando decisões de compra ou venda com base em probabilidade e não apenas em regras fixas.
|
||||
|
||||
O modelo final adotado nesta análise foi o _XGBoost_ (_eXtreme Gradient Boosting_), selecionado por sua alta capacidade de lidar com múltiplas features, robustez frente a dados ruidosos e velocidade de processamento mesmo em bases extensas. Embora tenham sido avaliados outros modelos, como o MLP (_Multi-Layer Perceptron_) e o LSTM (_Long Short-Term Memory_), estes não foram escolhidos devido à maior complexidade de implementação e à demanda por recursos computacionais mais avançados para testes de maior escala.
|
||||
|
||||
Para a construção dessa estratégia foram usados, majoritariamente, as seguintes tecnologias:
|
||||
|
||||
- **XGBoost (xgboost):** O **XGBoost** (e_Xtreme Gradient Boosting_) é o modelo de classificação central da nossa estratégia. Ele se destaca por sua alta performance e eficiência, sendo capaz de estimar a probabilidade de um movimento de alta ou baixa com grande precisão. O modelo funciona construindo uma série de árvores de decisão de forma sequencial. Cada nova árvore é treinada para corrigir os erros das árvores anteriores, resultando em um modelo final extremamente robusto e capaz de identificar padrões complexos nos dados financeiros. Sua eficácia e velocidade de processamento o tornam uma escolha popular e confiável para esta análise.
|
||||
- **MAPIE (mapie):** O MAPIE (_Model Agnostic Prediction Interval_) é um framework que implementa o conceito de previsão conformada (_conformal prediction_). Ele nos permite adicionar uma camada de confiabilidade estatística às previsões do modelo, independentemente do tipo de modelo que estamos usando. Em vez de simplesmente prever se o preço vai subir ou descer, o MAPIE fornece um conjunto de previsão que indica o quão confiável é a previsão. Para cada previsão, o MAPIE cria um conjunto que tem uma probabilidade garantida (por exemplo, 90%) de conter o resultado real. Nossa estratégia só considera sinais quando o MAPIE indica alta certeza, ou seja, um conjunto de previsão contendo apenas uma opção, como {False,True} para subir ou {True,False} para baixar. Sinais de incerteza, como {False, False} ou {True, True}, são descartados, o que é crucial para evitar operações de alto risco.
|
||||
- **Médias Móveis Simples (SMAs):** As SMAs são utilizadas como um filtro de tendência, atuando como um complemento à previsão do modelo. Nessa estratégia são utilizadas duas SMAs, sendo uma de longo prazo e outra de curto prazo (calculada sobre a de longo prazo, sendo ⅕ dela). O modelo só abre posição quando o preço atual está acima do SMA longo e só fecha quando o preço está abaixo do SMA curto. Esses valores de períodos são modificados de acordo com a moeda analisada, visando o melhor desempenho. Moedas mais voláteis possuem um período menor, pois são mais sensíveis às tendências de mercado (ex: Solana), enquanto moedas menos voláteis possuem um período maior, já que são menos sensíveis (ex: Bitcoin).
|
||||
- **Aquisição de Dados — API Binance (python-binance):** Para garantir a qualidade e a padronização dos dados, a coleta de informações de OHLCV (abertura, máxima, mínima, fechamento e volume) é feita diretamente da API oficial da Binance.
|
||||
|
||||
## Passo a Passo da Estratégia de Machine Learning
|
||||
|
||||
O desenvolvimento da estratégia segue um processo bem definido, com etapas lógicas e sequenciais:
|
||||
|
||||
1. **Coleta de Dados (API da Binance):** Definimos o ativo e o _timeframe_ (por exemplo, BTCUSDT, 1h) e baixamos os dados via API. Os dados já chegam formatados e sem erros, porém como garantia ocorre a verificação quando os dados são lidos.
|
||||
2. **Construção de Features:** Esta é uma das etapas mais importantes, nela definimos o que o modelo vai receber para aprender o que define os movimentos de mercado e tentar prevê-lo. O conjunto de features, derivados de indicadores técnicos e outras métricas, inclui:
|
||||
|
||||
- **Retorno e Volatilidade:** retorno simples, assimetria dos retornos, curtose dos retornos, volatilidade, retorno acumulado e volatilidade realizada.
|
||||
- **Volume:** fluxo de dinheiro de Chaikin, saldo de volumes, oscilador de volume e linha de acumulação/distribuição.
|
||||
- **Osciladores e Momentum:** indicador Williams %R, índice de momentum e oscilador estocástico.
|
||||
- **Médias e Tendência:** índice de convergência e divergência de médias móveis (MACD), índice direcional médio (ADX) e médias móveis exponenciais.
|
||||
- **Bandas de Volatilidade:** bandas de Bollinger, incluindo limite superior, limite inferior, largura das bandas e posição do preço dentro das bandas.
|
||||
- **Outros Indicadores:** índice de força relativa (RSI), faixa verdadeira média (ATR) e o indicador parabólico SAR.
|
||||
- **Defasagens Temporais:** versões atrasadas de todos os indicadores, permitindo que o modelo capture o comportamento recente do mercado.
|
||||
- **Horizontes de Tempo:** todos os indicadores são calculados em diferentes prazos, abrangendo curto, médio e longo prazo.
|
||||
|
||||
**3. Divisão Temporal dos Dados (K-Fold Cross Validation):** Para que o modelo aprenda padrões temporais de forma mais robusta e sua performance seja avaliada de maneira mais precisa em vários cenários de mercado, utilizamos a validação cruzada temporal (_Time Series K-Fold Cross Validation_). Nessa abordagem, os dados são divididos em “k” partições, sempre respeitando a ordem cronológica, algo crucial em análise de séries temporais.
|
||||
|
||||
O treino ocorre conforme a imagem abaixo:
|
||||
|
||||
![[projeto-tiago-11.jpg]]
|
||||
|
||||
4. **Treinamento do Modelo (XGBoost):** O modelo é treinado para prever a probabilidade de alta/baixa. Seus **hiperparâmetros** são ajustados para otimizar o desempenho do modelo. Os principais são:
|
||||
|
||||
- **n_estimators:** Define o número de árvores de decisão a serem construídas. Um valor maior geralmente melhora o desempenho, mas pode aumentar o tempo de treinamento.
|
||||
- l**earning_rate**: Controla o quão rapidamente o modelo aprende. Valores menores tornam o processo mais lento, mas podem levar a uma solução mais robusta.
|
||||
- **max_depth:** Limita a profundidade de cada árvore, ajudando a controlar o _overfitting_.
|
||||
- **subsample:** A porcentagem de amostras usadas para treinar cada árvore. Ajuda a reduzir a variância do modelo.
|
||||
- **colsample_bytree:** A porcentagem de features (colunas) usadas para treinar cada árvore, também auxiliando no controle do _overfitting_.
|
||||
- **gamma:** Define o ganho mínimo necessário para a realização de uma nova partição em uma folha da árvore.
|
||||
- **reg_lambda e reg_alpha:** São parâmetros de regularização que penalizam a complexidade do modelo, prevenindo o overfitting.
|
||||
- **early_stopping_rounds:** Permite parar o treinamento se o desempenho no conjunto de validação não melhorar por um certo número de rodadas, economizando tempo e evitando o _overfitting_.
|
||||
- **scale_pos_weight:** Ajuda a lidar com classes desbalanceadas (usado para equilibrar o modelo durante períodos de mudanças unilaterais).
|
||||
|
||||
**5. Estimativa de Incerteza (MAPIE):** Após o treinamento, o modelo é ajustado pelo MAPIE, que gera o conjunto de previsão e permite filtrar os sinais de baixa confiança. O MAPIE funciona de forma agnóstica ao modelo, o que significa que pode ser aplicado a qualquer classificador. A biblioteca usa uma técnica de validação no conjunto de calibração para determinar o tamanho ideal do conjunto de previsão. Esse processo garante que o conjunto gerado para cada nova previsão contenha o valor real com um nível de confiança especificado, tornando as decisões de trading mais seguras.
|
||||
|
||||
**6. Filtro de Tendência (SMAs):** As médias móveis são calculadas para atuar como um filtro adicional, garantindo que as operações estejam alinhadas com a tendência de longo prazo do mercado.
|
||||
|
||||
**7. Geração de Sinais e Regras de Execução:** Com base nas previsões do XGBoost, nos conjuntos do MAPIE e nos filtros das SMAs, os sinais operacionais são convertidos em decisões de compra, venda ou de manter a posição. Os custos de _fee_ também são considerados nesta etapa.
|
||||
|
||||
**8. Backtesting:** A estratégia é simulada em dados históricos que o modelo nunca viu, e seu desempenho é medido utilizando esses mesmos dados não vistos. As métricas de **_accuracy, precision, recall_, F1, AUC-ROC** e o retorno acumulado são comparados com a estratégia de _buy and hold_ para avaliar sua eficácia.
|
||||
|
||||
9.**Simulação Fora da Amostra (“dados não vistos”):** Uma simulação final é realizada em um período de dados subsequente ao _backtest_ para validar a robustez e a consistência dos resultados. Nessa etapa o modelo não é treinado novamente, como ocorre durante a etapa de validação cruzada.
|
||||
|
||||
**10. Monitoramento e Registro:** Por fim, todas as operações e resultados são registrados. É um passo crucial para acompanhar o desempenho da estratégia e identificar a necessidade de recalibrar o modelo ao longo do tempo.
|
||||
|
||||
## Avaliação de risco e métricas de desempenho
|
||||
|
||||
Para assegurar uma análise completa e rigorosa da performance das nossas estratégias de trading algorítmico, implementamos um conjunto robusto de métricas de desempenho e risco. A simples avaliação do retorno bruto não é suficiente para determinar a eficácia de uma estratégia em um mercado tão volátil quanto o de criptoativos. Por isso, a combinação de indicadores se tornou essencial para proporcionar uma visão mais realista e abrangente sobre a viabilidade e a robustez das abordagens propostas, especialmente ao comparar a estratégia de pair trading com o modelo de machine learning.
|
||||
|
||||
A avaliação das estratégias foi realizada com base em indicadores amplamente reconhecidos no campo de finanças quantitativas, focando na combinação de retornos com a exposição ao risco.
|
||||
|
||||
- **Retorno Total/Acumulado:** Esta métrica fundamental quantifica o ganho percentual global obtido pela estratégia ao longo de todo o período de simulação. Ela reflete o crescimento do capital inicial e é um primeiro indicador do potencial de lucratividade da abordagem.
|
||||
- **Volatilidade (Desvio Padrão dos Retornos):** A volatilidade mede o grau de flutuação dos retornos da estratégia. Um desvio padrão elevado indica maior dispersão dos retornos e, consequentemente, um risco maior. Sua análise é crucial em mercados de alta oscilação como o de criptoativos, pois revela a consistência dos ganhos e perdas diárias ou horárias.
|
||||
- **_Drawdown_ (Rebaixamento Máximo):** O _drawdown_ é uma métrica crítica para a gestão de risco, indicando a maior queda percentual do pico de capital de uma estratégia até o ponto mais baixo subsequente, antes que um novo pico seja atingido. Ele quantifica a perda máxima que um investidor teria que suportar em um determinado momento, sendo um forte indicador da resiliência da estratégia em cenários de mercado adversos. Sua análise foi fundamental para compreender os riscos de perdas significativas inerentes a cada estratégia.
|
||||
- **Índice de Sharpe:** Considerado uma das métricas mais importantes na avaliação de performance ajustada ao risco, o Índice de Sharpe calcula o retorno excedente da estratégia (acima de uma taxa de retorno livre de risco) por unidade de risco (volatilidade).
|
||||
$$
|
||||
IS = \frac{R_A - r_f}{\sigma_A}
|
||||
$$
|
||||
**Onde:**
|
||||
- $R_A$: Retorno da Estratégia
|
||||
- $r_f$: Retorno do ativo livre de risco
|
||||
- $\sigma_A$: Volatilidade da Estratégia
|
||||
|
||||
|
||||
>[!info]
|
||||
>Quanto maior o Índice de Sharpe, melhor é a relação entre o retorno gerado e o risco assumido. Essa métrica foi central para comparar a eficiência das estratégias de _pair trading_ e _machine learning_, permitindo identificar qual delas oferecia um desempenho superior considerando o nível de risco envolvido.
|
||||
|
||||
## Resultados da estratégia de Arbitragem:
|
||||
|
||||
O modelo de arbitragem, em sua forma inicial, mostrou-se altamente ineficiente para lidar com quebras na cointegração durante períodos de alta volatilidade. Em diversos momentos, acabou apostando em reversões que nunca ocorreram, resultando em retornos que variaram entre **-15% e -60%**. Como exemplo, uma simulação apresentou **drawdown de 50%** e retorno acumulado de **-28% em quatro anos**, evidenciando o risco excessivo da abordagem original.
|
||||
|
||||
![[projeto-tiago-12.jpg]]
|
||||
|
||||
>[!info]
|
||||
>Inicialmente a estratégia assumia um risco gigantesco e tinha retorno negativo.
|
||||
|
||||
Para mitigar esses problemas, foram adicionados alguns filtros de segurança. Foram adotadas medidas que protegem contra **overtrading em spreads com muito ruído**, exigindo não apenas um desvio estatístico relevante (z-score), mas também uma **qualidade mínima do par** (alta correlação e baixa volatilidade do spread), reduzindo entradas em séries possivelmente espúrias. Além disso, utiliza um **filtro de RSI (**_Relative strength index_**)** para bloquear operações em situações de sobrecompra ou sobrevenda, o que evita entrar contra tendências muito fortes (como estava acontecendo anteriormente).
|
||||
|
||||
Por fim, obtivemos os seguintes resultados:
|
||||
|
||||
![[projeto-tiago-13.jpg]]
|
||||
|
||||
![[projeto-tiago-14.jpg]]
|
||||
|
||||
![[projeto-tiago-15.jpg]]
|
||||
|
||||
>[!info]
|
||||
>Retorno final de apenas 2,5% do dia 01/01/2020 até 01/01/2025.
|
||||
|
||||
![[projeto-tiago-16.jpg]]
|
||||
|
||||
Mesmo com essas melhorias — que reduziram bastante o risco e eliminaram os retornos negativos — a estratégia continuou inconsistente, apresentando **drawdown de 12% e retorno acumulado de apenas 2,5%**. Alguns pares se beneficiaram significativamente, alcançando **mais de 120% de retorno**, enquanto muitos outros registraram resultados negativos. Isso mostra a limitação de um **modelo heurístico**, baseado em regras fixas como “comprar se o z-score cair abaixo de X e vender se voltar a Y”, que não se adapta sozinho às mudanças do mercado. Ainda mais em um mercado como o de criptomoedas, com **alta volatilidade e padrões imprevisíveis**, esse tipo de modelo tende a falhar, mostrando que são necessários ajustes mais sofisticados para lidar com essas condições.
|
||||
|
||||
## Resultados da estratégia de Machine Learning:
|
||||
|
||||
A estratégia de _Machine Learning_, de forma geral, apresentou um desempenho satisfatório. Mesmo com uma variação de desempenho significativa entre os ativos analisados, a abordagem provou seu valor ao superar consistentemente o benchmark de _“Buy_ & _Hold”_ em vários casos.
|
||||
|
||||
Foi feita análise com 13 criptomoedas diferentes, porém apenas as 8 a seguir tiveram resultados relevantes.
|
||||
|
||||
**Análise dos Sucessos:** O modelo foi extremamente eficaz para **Solana (SOL), Bitcoin Cash (BCH), Ripple (XRP) e Litecoin (LTC)**. Nestes casos, a estratégia não apenas entregou retornos acumulados superiores, mas também demonstrou uma melhor gestão de risco, mitigando as perdas durante períodos de baixa do mercado (_drawdowns_). O resultado para Solana foi o mais expressivo, com a estratégia gerando ganhos exponenciais em comparação com a abordagem passiva.
|
||||
|
||||
**Análise das Falhas:** Em contrapartida, o _backtest_ revelou uma clara ineficiência do modelo para **BNB e Cardano (ADA)**. Para estes ativos, a estratégia se mostrou excessivamente conservadora, falhando em capitalizar sobre os fortes ciclos de alta. Consequentemente, o retorno foi ínfimo quando comparado ao crescimento explosivo que teria sido obtido com o _“Buy_ & _Hold”_.
|
||||
|
||||
**Análise de Desempenho Misto:** Para os ativos de maior capitalização, **Bitcoin (BTC) e Ethereum (ETH)**, a estratégia apresentou um resultado misto. Embora tenha navegado de forma semelhante ao mercado durante a maior parte do tempo, não conseguiu estabelecer uma vantagem sustentável, ficando ligeiramente atrás do _“Buy_ & _Hold”_ no período final de validação.
|
||||
|
||||
**Conclusão dos Resultados:** Os resultados indicam que a viabilidade do modelo de _Machine Learning_ não é universal, mas sim dependente da adaptabilidade dos hiperparâmetros. As dinâmicas de mercado, volatilidade e padrões de preço de certos criptoativos foram mais bem decifradas pelo modelo, enquanto para outros, a complexidade ou a força da tendência tornaram a previsão ineficaz.
|
||||
|
||||
## **Análise individual:**
|
||||
|
||||
### 1. Bitcoin (BTCUSDT)
|
||||
|
||||
- **Análise:** O desempenho da estratégia e do _Buy_ & _Hold_ foram muito semelhantes durante a maior parte do período histórico. Em alguns momentos, a estratégia conseguiu reduzir perdas, mas em outros, não capturou totalmente as altas do mercado.
|
||||
- **Veredito:** **Desempenho Misto/Inferior.** No período _“Out-of-Sample”_, a estratégia de _Buy_ & _Hold_ mostrou um retorno superior, indicando que, para o Bitcoin, o modelo não conseguiu gerar um alfa consistente e seria mais vantajoso apenas ter mantido o ativo.
|
||||
|
||||
![[projeto-tiago-17.jpg]]
|
||||
|
||||
![[projeto-tiago-18.jpg]]
|
||||
|
||||
### 2. Ethereum (ETHUSDT)
|
||||
|
||||
- **Análise:** Assim como no Bitcoin, a performance da estratégia para o Ethereum foi bastante próxima à do _Buy_ & _Hold_. A estratégia parece ter navegado um pouco melhor nos períodos de baixa, com _drawdowns_ (quedas) menos acentuados, mas também ficou atrás durante as fortes altas.
|
||||
- **Veredito:** **Desempenho Misto/Inferior.** No período de teste final (_“Out-of-Sample”_), o _Buy_ & _Hold_ novamente superou a estratégia, que não conseguiu acompanhar o ímpeto do mercado.
|
||||
|
||||
![[projeto-tiago-19.jpg]]
|
||||
|
||||
![[projeto-tiago-20.jpg]]
|
||||
|
||||
### 3. Solana (SOLUSDT)
|
||||
|
||||
- **Análise:** Este é o caso de maior sucesso para o modelo. A estratégia superou massivamente o _Buy_ & _Hold_ durante quase todo o período, incluindo uma performance espetacular no período _“Out-of-Sample”_. O modelo conseguiu identificar e se beneficiar da forte tendência de alta da Solana de forma muito mais eficaz.
|
||||
- **Veredito:** **Desempenho Muito Superior.** A estratégia gerou retornos exponencialmente maiores, provando ser extremamente eficaz para este ativo.
|
||||
|
||||
![[projeto-tiago-21.jpg]]
|
||||
|
||||
![[projeto-tiago-22.jpg]]
|
||||
|
||||
### 4. Ripple (XRPUSDT)
|
||||
|
||||
- **Análise:** A estratégia demonstrou uma clara vantagem sobre o _Buy_ & _Hold_. Ela conseguiu capturar os movimentos de alta e, crucialmente, proteger o capital durante as quedas e longos períodos de lateralização do XRP. O gráfico da estratégia é visivelmente mais suave e consistentemente ascendente.
|
||||
- **Resultado:** **Desempenho Superior.** O modelo foi bem-sucedido, entregando retornos mais altos com uma aparente redução de risco em comparação com simplesmente manter o ativo.
|
||||
|
||||
![[projeto-tiago-23.jpg]]
|
||||
|
||||
![[projeto-tiago-24.jpg]]
|
||||
|
||||
### 5. Bitcoin Cash (BCHUSDT)
|
||||
|
||||
- **Análise:** A estratégia apresentou um resultado significativamente melhor que o _Buy_ & _Hold_. Enquanto o _Buy_ & _Hold_ teve um retorno modesto e volátil, a estratégia mostrou um crescimento muito mais robusto e consistente, especialmente a partir de 2023 e continuando no período _“Out-of-Sample”_.
|
||||
- **Resultado:** **Desempenho Superior.** O modelo de _Machine Learning_ conseguiu extrair valor de forma consistente do BCH, superando com folga a estratégia passiva.
|
||||
|
||||
![[projeto-tiago-25.jpg]]
|
||||
|
||||
![[projeto-tiago-26.jpg]]
|
||||
|
||||
### 6. Litecoin (LTCUSDT)
|
||||
|
||||
- **Análise:** A estratégia se mostrou superior ao _Buy_ & _Hold_ na maior parte do tempo. O modelo foi particularmente eficaz em evitar as perdas profundas que o _Buy_ & _Hold_ sofreu entre meados de 2021 e o final de 2023. Embora não tenha capturado o pico máximo em 2021, a gestão de risco resultou em um retorno acumulado maior no final do período.
|
||||
- **Resultado:** **Desempenho Superior.** A capacidade de mitigar perdas foi o grande diferencial, tornando a estratégia mais lucrativa a longo prazo.
|
||||
|
||||
![[projeto-tiago-27.jpg]]
|
||||
|
||||
![[projeto-tiago-28.jpg]]
|
||||
|
||||
### 7. BNB (BNBUSDT)
|
||||
|
||||
- **Análise:** Este é um caso claro de falha do modelo. A estratégia de _Buy_ & _Hold_ para o BNB foi imensamente mais lucrativa. O modelo de _Machine Learning_ gerou um retorno quase irrelevante em comparação com a valorização explosiva do ativo.
|
||||
- **Resultado:** **Desempenho Muito Inferior.** A estratégia falhou completamente em capturar o potencial de crescimento do BNB, tornando o _Buy_ & _Hold_ a escolha indiscutivelmente melhor.
|
||||
|
||||
![[projeto-tiago-29.jpg]]
|
||||
|
||||
![[projeto-tiago-30.jpg]]
|
||||
|
||||
### 8. Cardano (ADAUSDT)
|
||||
|
||||
- **Análise:** Semelhante ao BNB, a estratégia para Cardano teve um desempenho muito fraco. Ela não participou da gigantesca alta de 2021 e, desde então, gerou retornos mínimos. O _Buy_ & _Hold_, mesmo com sua alta volatilidade e quedas acentuadas, foi ordens de magnitude mais rentável.
|
||||
- **Resultado:** **Desempenho Muito Inferior.** O modelo não foi eficaz para o ADA, e um investidor teria tido um resultado drasticamente melhor apenas mantendo a criptomoeda.
|
||||
|
||||
![[projeto-tiago-31.jpg]]
|
||||
|
||||
![[projeto-tiago-32.jpg]]
|
||||
|
||||
## Conclusão e possíveis melhorias no código:
|
||||
|
||||
Os resultados obtidos evidenciam diferenças importantes entre as abordagens testadas. A estratégia de arbitragem estatística (_pair trading_), apesar de se mostrar teoricamente robusta em contextos de cointegração, apresentou desempenho limitado na prática. No período analisado (4 anos), o retorno acumulado foi de apenas **2,5%**, refletindo a dificuldade de capturar ganhos consistentes em um mercado marcado por fortes tendências.
|
||||
|
||||
Um dos principais problemas observados foi justamente a incapacidade da estratégia em lidar com períodos prolongados de desvios que nunca retornaram à média histórica, o que comprometeu sua eficácia. Além disso, a definição de janelas de cointegração confiáveis mostrou-se um desafio: janelas curtas geraram inúmeros falsos positivos, enquanto janelas muito longas tornaram a estratégia pouco responsiva às mudanças do mercado.
|
||||
|
||||
Para mitigar essas limitações, algumas possíveis melhorias seriam:
|
||||
|
||||
- **Incorporação de métricas adicionais de risco** (como ATR — _Average True Range_) para calibrar tamanhos de posição e pontos de entrada/saída;
|
||||
- **Implementação de _stop-loss_ e _take-profit_ dinâmicos**, de modo a evitar perdas excessivas quando as séries deixam de convergir;
|
||||
- **Testes com diferentes metodologias de seleção de pares**, além da simples cointegração, como filtros baseados em liquidez e regime de volatilidade.
|
||||
|
||||
Já para o modelo de _Machine Learning_, para aumentar a robustez e a consistência da estratégia, o foco futuro deve ser em:
|
||||
|
||||
- **Identificação de Tendência:** Substituir indicadores simples (como médias móveis simples) por sistemas que analisem a força da tendência e o regime de mercado, entrando de forma mais robusta nas posições e evitando ruídos de mercado;
|
||||
- **Aprimoramento do Modelo e das Features:** Enriquecer o modelo com dados mais preditivos, como métricas on-chain e análise de sentimento para aumentar a precisão das previsões;
|
||||
- **Controle de Volatilidade:** Implementar um dimensionamento de posição dinâmico, ajustando o capital alocado em cada operação com base na volatilidade atual do mercado.
|
||||
|
||||
## Referências:
|
||||
- [https://www.sciencedirect.com/science/article/abs/pii/S0275531920304050](https://www.sciencedirect.com/science/article/abs/pii/S0275531920304050?utm_source=chatgpt.com)
|
||||
- [https://www.sciencedirect.com/science/article/pii/S1042443122000610](https://www.sciencedirect.com/science/article/pii/S1042443122000610)
|
||||
- [https://youtu.be/Mj9Ml-HPqWI?si=0QHA0Vz2hsoQ81IQ](https://youtu.be/Mj9Ml-HPqWI?si=0QHA0Vz2hsoQ81IQ)
|
||||
- [https://xgboost.readthedocs.io/en/stable/index.html](https://xgboost.readthedocs.io/en/stable/index.html)
|
||||
- [https://medium.com/data-hackers/aplicando-previs%C3%A3o-conforme-em-modelos-de-classifica%C3%A7%C3%A3o-a26b2805ab0](https://medium.com/data-hackers/aplicando-previs%C3%A3o-conforme-em-modelos-de-classifica%C3%A7%C3%A3o-a26b2805ab0)
|
||||
- [https://youtu.be/vV12dGe_Fho?si=GYACKbsWvtHXoEOq](https://youtu.be/vV12dGe_Fho?si=GYACKbsWvtHXoEOq)
|
||||
- [https://arxiv.org/html/2306.08157v2](https://arxiv.org/html/2306.08157v2)
|
||||
|
||||
11
content/01-finquant/index.md
Normal file
11
content/01-finquant/index.md
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
title: " FinQuant"
|
||||
---
|
||||
|
||||
>[!warning]
|
||||
> Se você é membro da dev e quer contribuir com algum material, se liga no **Guia do Hub** disponível na seção Extras: [[trilhas/04-extras/2025-s2/guia-hub|Guia do Hub]]
|
||||
|
||||
## Destaques recentes:
|
||||
|
||||
(colocar acho que 5 redirecionamentos para os nossos melhores projetos)
|
||||
|
||||
453
content/02-ia/2025-s1/desigualdade-ia.md
Normal file
453
content/02-ia/2025-s1/desigualdade-ia.md
Normal file
@ -0,0 +1,453 @@
|
||||
---
|
||||
title: Desvendando Desigualdades em São Paulo Utilizando Inteligência Artificial
|
||||
tags:
|
||||
- "#trilha/ia"
|
||||
- "#nivel/avancado"
|
||||
---
|
||||
_**Autores:** Felipe Bulgareli de Faria · Gustavo Katsuo Tsutsui · Thales Vieira Rodrigues_
|
||||
|
||||
## Lista de Figuras
|
||||
|
||||
- **Figura 1.** Dados concatenados
|
||||
- **Figura 2.** Identificação de valores nulos
|
||||
- **Figura 3.** Coeficiente de variação por indicador
|
||||
- **Figura 4.** Histogramas dos indicadores
|
||||
- **Figura 5.** Boxplot dos indicadores
|
||||
- **Figura 6.** Matriz de correlação entre indicadores
|
||||
- **Figura 7.** Dispersão: domicílios sem água vs. cobertura vegetal per capita
|
||||
- **Figura 8.** Dispersão: domicílios sem esgoto vs. cobertura vegetal per capita
|
||||
- **Figura 9.** Dispersão: domicílios sem esgoto vs. domicílios sem água
|
||||
- **Figura 10.** Dispersão: estabelecimentos formais vs. empregos formais
|
||||
- **Figura 11.** Dispersão: famílias (transferência de renda) vs. famílias em extrema pobreza
|
||||
- **Figura 12.** Dispersão: violência contra pessoas idosas vs. violência contra crianças e adolescentes
|
||||
- **Figura 13.** Dispersão: taxa de mortalidade infantil vs. proporção de gestantes adolescentes
|
||||
- **Figura 14.** Dispersão: taxa de mortalidade infantil vs. idade média ao morrer
|
||||
- **Figura 15.** Dispersão: proporção de gestantes adolescentes vs. idade média ao morrer
|
||||
- **Figura 16.** Dispersão: população em situação de rua vs. livros/serviços de leitura
|
||||
- **Figura 17.** Fluxograma do projeto
|
||||
- **Figura 18.** Tendência linear forte (alto R²)
|
||||
- **Figura 19.** Tendência linear fraca (baixo R²)
|
||||
- **Figura 20.** Visualização dos clusters (K-Means, k = 2)
|
||||
- **Figura 21.** Perfil comparativo (K-Means, k = 2)
|
||||
- **Figura 22.** Análise do coeficiente de silhueta
|
||||
- **Figura 23.** Visualização dos clusters com PCA (k = 12)
|
||||
|
||||
## Lista de Tabelas
|
||||
|
||||
- **Tabela 1.** Indicadores com alta colinearidade
|
||||
- **Tabela 2.** Métricas de performance dos modelos de regressão linear
|
||||
- **Tabela 3.** Perfil detalhado dos 12 clusters
|
||||
|
||||
## Seções
|
||||
- [Introdução](#introdução)
|
||||
- [Descrição e origem dos dados utilizados](#descrição-e-origem-dos-dados-utilizados)
|
||||
- [Processamento e preparação dos dados](#processamento-e-preparação-dos-dados)
|
||||
- [Análise exploratória](#análise-exploratória)
|
||||
- [Metodologia](#metodologia)
|
||||
- [Procedimentos adotados](#procedimentos-adotados)
|
||||
- [Decisões técnicas](#decisões-técnicas)
|
||||
- [Resultados e avaliação](#resultados-e-avaliação)
|
||||
- [Análise de regressão linear](#análise-de-regressão-linear)
|
||||
- [Gráficos e interpretação dos resultados](#gráficos-e-interpretação-dos-resultados)
|
||||
- [Resultados do clustering K-Means (k = 2)](#resultados-do-clustering-k-means-k--2)
|
||||
- [Métricas e gráficos](#métricas-e-gráficos)
|
||||
- [Interpretação dos resultados](#interpretação-dos-resultados)
|
||||
- [Resultados do clustering hierárquico (k = 12)](#resultados-do-clustering-hierárquico-k-12)
|
||||
- [Métricas e gráficos](#métricas-e-gráficos-1)
|
||||
- [Interpretação dos resultados](#interpretação-dos-resultados-1)
|
||||
- [Discussão, limitações e próximos passos](#discussão-limitações-e-próximos-passos)
|
||||
- [Conclusão](#conclusão)
|
||||
- [Referências](#referências)
|
||||
|
||||
## Introdução
|
||||
|
||||
O município de São Paulo, de acordo com o Censo Demográfico de 2022, realizado pelo Instituto Brasileiro de Geografia e Estatística (IBGE), é o maior do Brasil, totalizando quase 12 milhões de habitantes em aproximadamente 1.521 km². Todo esse território é subadministrado em 32 subprefeituras, criadas pela lei municipal nº 13.399, de 1º de agosto de 2002, as quais administram os 96 distritos do município, em que cada uma apresenta características socioeconômicas distintas, de modo a representarem diferentes realidades dentro do mesmo município.
|
||||
|
||||
O Índice de Gini é uma medida estatística, cujo valor varia entre 0 e 1, que serve como uma métrica de desigualdade, ao quantificar a desigualdade na distribuição de renda em um determinado grupo ou população. Quanto mais próximo de 1, maior a desigualdade de renda, enquanto que um valor próximo a 0 indica uma igualdade (WORLD BANK, 2025), No caso de São Paulo, segundo o Departamento de Informação e Informática do SUS (DataSUS), o índice de Gini da renda domiciliar per capita do município é de 0,6453 (MINISTÉRIO DA SAÚDE, 2010), indicando um grau de desigualdade de renda elevado, com uma grande disparidade entre os habitantes. Além disso, outra métrica importante na avaliação de desigualdades regionais é o Índice de Desenvolvimento Humano (IDH), que utiliza indicadores relacionados à renda, educação e saúde para medir a qualidade de vida de uma dada população (WHO, 2025) Cada subprefeitura de São Paulo possui um determinado IDH e, nesse contexto, apesar de servir como uma importante ferramenta para compreender a realidade socioeconômica de dado país, cidade ou Estado, por usar como base indicadores de apenas três dimensões diferentes, ela pode ocultar nuances relevantes quando analisados em escalas territoriais menores, como as subprefeituras de São Paulo.
|
||||
|
||||
Dessa forma, este projeto tem como objetivo estruturar uma análise preditiva e exploratória dos indicadores socioeconômicos das 32 subprefeituras paulistanas, a partir de séries históricas, com o propósito de identificar padrões de evolução, prever tendências futuras e, sobretudo, mapear as regiões com as maiores vulnerabilidades socioeconômicas.
|
||||
|
||||
## Descrição e origem dos dados utilizados
|
||||
|
||||
Os dados utilizados no projeto são oriundos do [ObservaSampa](https://observasampa.prefeitura.sp.gov.br/) (Observatório de Indicadores da Cidade de São Paulo), uma plataforma online da Secretaria Municipal de Urbanismo e Licenciamento da Prefeitura de São Paulo que tem como intuito armazenar e reunir dados (indicadores) que são capazes de mensurar a qualidade de vida dos habitantes do município, acesso a equipamentos públicos pela população, assim como métricas e parâmetros de avaliação de desempenho das iniciativas governamentais. Essa plataforma é alimentada por um trabalho conjunto de várias secretarias municipais, institutos de pesquisa e outras agências. Dessa forma, esses dados servem como uma ferramenta de direcionamento de recursos e políticas públicas, auxiliando na tomada de decisão com base em critérios racionais. Os indicadores estão divididos em 18 temas distintos, como zeladoria, saúde, economia, educação, entre outros. Além dos indicadores, também é possível selecionar os dados com base no nível regional de interesse, sendo eles: distrito, subprefeitura e município. Por fim, ainda, apesar da variação entre cada um, há registro desses indicadores ao longo de cerca de vários anos, permitindo observar como eles flutuaram em um dado período de tempo e obter insights.
|
||||
|
||||
Neste projeto, foram escolhidos 11 temas e 21 indicadores, a nível subprefeitural, a serem trabalhados. Esse nível regional foi escolhido porque, embora possibilite uma granularidade espacial menor que a nível distrital, há uma maior disponibilidade de dados em comparação com este. Outros indicadores foram considerados relevantes, no entanto, não possuíam os dados necessários para a execução do projeto a nível subprefeitural.
|
||||
|
||||
Os temas, com seus respectivos indicadores escolhidos foram:
|
||||
|
||||
- **Assistência social**
|
||||
- População em situação de rua;
|
||||
- Quantidade de famílias que recebem recursos dos programas de transferência de renda (Renda Mínima, Renda Cidadã e Bolsa Família).
|
||||
- **Cultura**
|
||||
- Livros disponíveis nos serviços municipais de leitura (por mil habitantes).
|
||||
- **Economia:**
|
||||
- Estabelecimentos formais no município - Total.
|
||||
- **Educação:**
|
||||
- Taxa de Universalização da Educação Básica obrigatória (%).
|
||||
- **Meio ambiente:**
|
||||
- Cobertura vegetal per capita (m²/hab);
|
||||
- Cobertura vegetal no MSP (%).
|
||||
- Mobilidade e Segurança no Trânsito
|
||||
- Mortes no trânsito (por 100 mil habitantes).
|
||||
- **Moradia:**
|
||||
- Proporção de Domicílios não conectados a rede geral de Esgoto (%);
|
||||
- Proporção de Domicílios não conectados a rede geral de Água (%).
|
||||
- **Saúde:**
|
||||
- Taxa de mortalidade infantil (por mil nascidos vivos);
|
||||
- Proporção de gestantes adolescentes (%);
|
||||
- Tempo médio de espera para exames prioritários (em dias);
|
||||
- Número de Unidades Básicas de Saúde;
|
||||
- Idade média ao morrer (em anos).
|
||||
- **Segurança e Violência**
|
||||
- Número de casos notificados de violência contra crianças e adolescentes;
|
||||
- Número de casos de notificação de violência contra pessoas idosas.
|
||||
- **Trabalho e renda**
|
||||
- Empregos formais no município - Total.
|
||||
- **Zeladoria**
|
||||
- Número de ocorrências atendidas – deslizamento;
|
||||
- Número de ocorrências atendidas – alagamento;
|
||||
- Número de moradias em setores de risco geológico alto ou muito alto.
|
||||
|
||||
## Processamento e preparação dos dados
|
||||
|
||||
A fim de garantir a usabilidade dos dados nas análises a serem realizadas, foram aplicadas etapas de processamento e preparação dos dados. Primeiramente, os arquivos em formato .csv contendo os indicadores escolhidos, foram baixados no ObservaSampa. Em seguida, foi observada a consistência entre as colunas dos arquivos, isto é, se todas possuíam o mesmo nome, uma vez que isso seria necessário para a junção dos arquivos, além da contagem do número de linhas, que deveriam ser iguais, e colunas de cada arquivo. Durante essa etapa, foi verificada uma inconsistência entre os arquivos, uma vez que alguns apresentavam 33 linhas, correspondendo ao número de subprefeituras no município de São Paulo e o cabeçalho, e outras 129 linhas. Após análise, foi constatado que alguns arquivos, apesar de terem sido filtrados no ObservaSampa para incluírem dados unicamente das subprefeituras, também continham informações sobre os distritos. Dessa maneira, foi necessário a inclusão de uma etapa de exclusão desse excedente de dados.
|
||||
|
||||
Subsequentemente, os 21 arquivos foram concatenados em um único DataFrame, que foi convertido de formato wide para long com o intuito de unificar o formato dos dados, resultando em um arquivo de 7.328 linhas e 6 colunas, contendo as informações agrupadas por região, nível regional, indicador, valor, ano e nome do indicador.
|
||||
|
||||
Figura 1 - Dados Concatenados
|
||||
|
||||
![[projeto-desigualdade-ia-18.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Por conseguinte, foi iniciada a etapa de identificação de valores ausentes e nulos. Não foram identificados valores ausentes no DataFrame, porém foram apontados 162 linhas com a coluna “valor” igual a zero. Após inspeção minuciosa, foi observado que esses valores estão corretos e que, de fato, correspondem ao valor zero, refletindo a ausência do fenômeno medido em determinadas subprefeituras, como ocorrência de deslizamentos ou população em situação de rua. Finalmente, após isso, deu-se prosseguimento à análise exploratória de dados.
|
||||
|
||||
Figura 2 - Identificação de Valores Nulos
|
||||
|
||||
![[projeto-desigualdade-ia-16.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
## Análise explanatória
|
||||
|
||||
Na análise exploratória, primeiramente para fins de melhor usabilidade dos dados, foi utilizado a função “pivot()” no DataFrame concatenado para transformar regiões como índice (index = ’região’) e indicadores como colunas (columns = ’nome_indicador’), uma vez que antes havia uma única coluna que continha todos os indicadores. Após esse processo, cada indicador tornou-se uma própria coluna, facilitando a manipulação dos dados. Em seguida, foi inicializado o cálculo de medidas as estatísticas básicas descritivas de cada índice utilizando a função “describe()”, que proporcionou a observação, para cada indicador, do número de valores não nulos em cada coluna, a média, o desvio padrão, o ponto mínimo, o percentil 25%, o percentil 50% (mediana), o percentil 75% e ponto máximo.
|
||||
|
||||
Nesse sentido, também foi calculado e plotado o coeficiente de variação, ferramenta de dispersão que, nesse caso, demonstrou o quanto cada indicador varia percentualmente em relação a sua média. No gráfico gerado, a conclusão nítida é que o índice com menor homogeneidade foi o de cobertura vegetal, e o de maior homogeneidade foi o de idade média ao morrer.
|
||||
|
||||
Figura 3 - Coeficiente de Variação por Indicador
|
||||
|
||||
![[projeto-desigualdade-ia-8.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Ademais, foi inicializada as visualizações exploratórias, para detectar padrões nos dados, valores discrepantes (outliers), eventos anômalos e observar as variáveis dos indicadores mais a fundo. Nessa perspectiva, foram plotados um histograma e um boxplot para cada índice, como demonstrado a seguir:
|
||||
|
||||
Figura 4 - Histograma dos Indicadores
|
||||
|
||||
![[projeto-desigualdade-ia-7.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 5 - Boxplot dos Indicadores
|
||||
|
||||
![[projeto-desigualdade-ia-10.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Além disso, foi realizada uma análise de correlação entre os índices. Para isso, foi plotado um heatmap entre todos os indicadores.
|
||||
|
||||
Figura 6 - Matriz de correlação dos Indicadores
|
||||
|
||||
![[projeto-desigualdade-ia-9.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Subsequentemente, foi realizada a filtragem das correlações para detectar os indicadores com uma alta colinearidade ( > 0.85), os quais estão descritos na tabela abaixo.
|
||||
|
||||
Tabela 1 -Indicadores com alta colinearidade
|
||||
|
||||
| Indicador 1 | Indicador 2 | Correlação |
|
||||
|----------------------------------------------|-----------------------------------------------|-----------:|
|
||||
| domicilios_sem_agua_percentual | cobertura_vegetal_per_capita_m2hab | 0.99 |
|
||||
| domicilios_sem_esgoto_percentual | cobertura_vegetal_per_capita_m2hab | 0.87 |
|
||||
| domicilios_sem_esgoto_percentual | domicilios_sem_agua_percentual | 0.91 |
|
||||
| estabelecimentos_formais_total | empregos_formais_municipio_total | 0.97 |
|
||||
| familias_transferencia_renda | familias_em_extrema pobreza | 0.99 |
|
||||
| pop_em_situacao_de_rua | livros_servicos_leitura_1000hab | 0.88 |
|
||||
| proporcao_gestantes_adolescentes | idade_media_ao_morrer | 0.96 |
|
||||
| taxa_mortalidade_infantil | idade_media_ao_morrer | 0.87 |
|
||||
| violencia_criancas_adolescentes_notificados | proporcao_gestantes_adolescentes | 0.92 |
|
||||
| violencia_pessoas_idosas_notificados | violencia_criancas_adolescentes_notificados | 0.95 |
|
||||
|
||||
Por fim, para esses pares altamente correlacionados, foram feitos gráficos de dispersão, para visualizar suas tendências e observar o comportamento de uma variável à medida que a outra varia:
|
||||
|
||||
Figura 7 - Dispersão domicílios sem água vs. cobertura vegetal per capita
|
||||
|
||||
![[projeto-desigualdade-ia-2.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 8 - Dispersão domicílios sem esgoto vs. cobertura vegetal per capita
|
||||
|
||||
![[projeto-desigualdade-ia-1.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 9 - Dispersão domicílios sem esgoto vs. domicílios sem água
|
||||
|
||||
![[projeto-desigualdade-ia-14.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 10 - Dispersão estabelecimentos formais vs empregos formais
|
||||
|
||||
![[projeto-desigualdade-ia-11.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 11 - Dispersão famílias transferência renda vs famílias em extrema pobreza
|
||||
|
||||
![[projeto-desigualdade-ia-13.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 12 - Dispersão violência pessoas idosas vs violência crianças adolescentes
|
||||
|
||||
![[projeto-desigualdade-ia-15.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 13- Dispersão taxa mortalidade infantil vs proporção gestantes adolescentes
|
||||
|
||||
![[projeto-desigualdade-ia-17.png]]
|
||||
|
||||
Figura 14- Dispersão taxa mortalidade infantil vs idade média ao morrer
|
||||
|
||||
![[projeto-desigualdade-ia-19.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 15- Dispersão proporção gestantes adolescentes vs idade média ao morrer
|
||||
|
||||
![[projeto-desigualdade-ia-20.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 16- Dispersão população situação de rua vs livros servicos leitura
|
||||
|
||||
![[projeto-desigualdade-ia-21.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Portanto, a análise exploratória teve como principal objetivo detectar anomalias, padrões e comportamentos dos indicadores por meio de estatísticas descritivas, plotagem de histogramas, boxplots, mapa de correlação e gráficos de dispersão entre variáveis altamente correlacionadas.
|
||||
|
||||
## Metodologia
|
||||
|
||||
### Procedimentos adotados
|
||||
|
||||
No contexto de Machine Learning, os tipos de treinamentos aos quais foram submetidos os modelos testados neste projeto, a fim de atingir os objetivos propostos, podem ser classificados tanto como aprendizado supervisionado quanto não supervisionado, conforme os objetivos específicos de cada etapa da análise. O principal objetivo num aprendizado supervisionado é treinar um modelo a partir de um conjunto de dados que serve como base para que sejam feitas previsões sobre tendências futuras (RASCHKA; LIU; MIRJALILI, 2022). Já no caso do aprendizado não supervisionado, não há um conjunto de dados que possa “supervisionar” a análise, de modo que, dessa forma, se busca visualizar relações entre as variáveis ((RASCHKA; LIU; MIRJALILI, 2022). Nesse sentido, os modelos testados neste projeto foram aplicados nessas abordagens, respectivamente, com o objetivo de realizar previsões de tendências e agrupar regiões com características socioeconômicas semelhantes. Enquanto que o aprendizado supervisionado foi utilizado para prever a evolução temporal de diversos indicadores em cada subprefeitura, enquanto o aprendizado não supervisionado foi aplicado para a identificação de padrões e agrupamentos de subprefeituras com perfis similares.
|
||||
|
||||
Para as projeções temporais dos indicadores, optou-se pela utilização da regressão linear simples, mesmo existindo abordagens mais sofisticadas e robustas para séries temporais. A escolha foi fundamentada em algumas razões específicas: a disponibilidade limitada de dados históricos (muitas séries possuem apenas 10 a 15 anos de observações); a predominância de tendências lineares claras em grande parte dos indicadores analisados; e, por fim, a necessidade de uma abordagem simples, transparente e de fácil interpretação para a comunicação dos resultados. Como a base de dados possui poucas observações por série, a validação foi conduzida com foco em ajustes in-sample, sem separação de conjuntos de treino e teste, visto que a extrapolação temporal foi limitada a um horizonte de 5 anos futuros, onde o risco de overfitting é mitigado pela simplicidade do modelo linear. A avaliação dos modelos de regressão foi realizada com base em métricas clássicas de análise de predição: R² (coeficiente de determinação), que mede a proporção da variabilidade dos dados explicada pelo modelo; MAE (erro absoluto médio), que avalia o desvio médio entre os valores previstos e observados; e MAPE (erro percentual absoluto médio), que expressa o erro médio em termos percentuais, facilitando a comparação entre indicadores de escalas distintas. Como a base de dados possui poucas observações por série, a validação foi conduzida com foco em ajustes in-sample.
|
||||
|
||||
Para a etapa de agrupamento das subprefeituras, foram aplicadas técnicas de clustering não supervisionado, incluindo K-Means e Agrupamento Hierárquico, com o objetivo de identificar grupos de regiões com comportamentos similares em relação aos indicadores analisados. Nesta etapa, a escolha das técnicas foi guiada pela necessidade de métodos que permitissem tanto uma visão geral dos agrupamentos (K-Means) quanto uma análise mais granular das relações hierárquicas entre as subprefeituras (dendrogramas). O ajuste dos parâmetros considerou tanto critérios quantitativos quanto a interpretação qualitativa dos grupos formados, buscando coerência espacial e socioeconômica nos clusters identificados.
|
||||
|
||||
O processo de ajuste dos parâmetros foi realizado de forma iterativa: no K-Means, variando o número de clusters (k) e analisando a métrica de silhouette score para determinar a coesão e separação dos agrupamentos. Para o Agrupamento Hierárquico, foi testada a estratégia de linkage ward, já que ela minimiza a variância dentro de cada cluster, além de apresentar maior estabilidade e coerência nos resultados. Como etapa complementar à clusterização, foi aplicada a técnica de PCA (análise de componentes principais) para a redução de dimensionalidade e visualização dos agrupamentos, permitindo uma análise visual clara dos clusters formados.
|
||||
|
||||
Em suma, o fluxo metodológico envolveu a utilização de modelos preditivos simples e interpretáveis para projeção de tendências temporais e técnicas de agrupamento não supervisionado para análise espacial dos indicadores, com validação das métricas de desempenho e ajuste criterioso dos parâmetros envolvidos, assegurando resultados alinhados aos objetivos do projeto.
|
||||
|
||||
Figura 17 - Fluxograma do projeto
|
||||
|
||||
![[projeto-desigualdade-ia-22.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
### Decisões técnicas
|
||||
|
||||
Durante o desenvolvimento do projeto, foram tomadas algumas decisões técnicas para garantir a coerência dos resultados e a reprodutibilidade do estudo.
|
||||
|
||||
Primeiramente, o projeto seria focado nos distritos do município de São Paulo, o que permitiria uma melhor análise espacial dos dados, no entanto, optou-se por utilizar dados por subprefeitura devido à maior disponibilidade e consistência dessas informações que da outra subdivisão, embora se reconheça que isso possa reduzir a granularidade da análise. Isso buscou garantir que houvesse dados suficientes para todos os agrupamentos, ainda que a heterogeneidade dos atributos coletados representasse um desafio adicional para a segmentação, o que também aconteceria caso fossem utilizados os dados de distritos.
|
||||
|
||||
Além disso, foram removidas variáveis (indicadores) altamente correlacionadas, com o intuito de evitar redundância de informação e distorção nos resultados de clusterização. Isso foi feito após análise da matriz de correlação, definindo um limiar de corte de 0.85. Essa decisão foi motivada pelos silhouette scores inicialmente baixos no método de clustering por K-Means, de modo que a diferença antes e depois das remoções, apesar de pouca, pode ser observada no Notebook do projeto.
|
||||
|
||||
## Resultados e Avaliação
|
||||
|
||||
### Regressão Linear
|
||||
|
||||
A performance de cada modelo de regressão linear foi avaliada utilizando o Coeficiente de Determinação (R²), o Erro Absoluto Médio (MAE) e o Erro Percentual Absoluto Médio (MAPE). A Tabela 2 resume os resultados médios, agrupando todas as subprefeituras, em ordem decrescente por R². Os resultados correspondentes a cada uma das subprefeituras, por indicador, assim como de todos os demais gráficos gerados, estão presentes no [repositório](https://github.com/Thavr/ProjetoFinalGrupo2) associado ao projeto no GitHub.
|
||||
|
||||
Tabela 2: Métricas de Performance dos Modelos de Regressão Linear
|
||||
|
||||
|
||||
**Alta previsibilidade (R² > 0,90)**
|
||||
|
||||
| Indicador | R² | MAE | MAPE (%) |
|
||||
|-----------------------------------------|-----:|-------:|---------:|
|
||||
| domicilios_sem_agua_percentual | 1.00 | 0.00 | 0.00 |
|
||||
| domicilios_sem_esgoto_percentual | 1.00 | 0.00 | 0.00 |
|
||||
| idade_media_ao_morrer | 0.99 | 0.15 | 0.00 |
|
||||
| moradias_setores_risco_geologico_alto | 0.97 | 33.48 | 0.02 |
|
||||
| violencia_pessoas_idosas_notificados | 0.96 | 3.10 | 0.05 |
|
||||
| numero_ubs | 0.93 | 0.07 | 0.01 |
|
||||
| cobertura_vegetal_msp | 0.91 | 0.83 | 0.03 |
|
||||
| proporcao_gestantes_adolescentes | 0.91 | 0.60 | 0.06 |
|
||||
| violencia_criancas_adolescentes_notificados | 0.90 | 17.13 | 0.07 |
|
||||
|
||||
**Média previsibilidade (0,50 < R² ≤ 0,90)**
|
||||
|
||||
| Indicador | R² | MAE | MAPE (%) |
|
||||
|-----------------------------------|-----:|--------:|---------:|
|
||||
| familias_transferencia_renda | 0.85 | 1229.46 | 0.08 |
|
||||
| taxa_universalizacao_educacao_basica | 0.83 | 1.66 | 0.02 |
|
||||
| empregos_formais_municipio_total | 0.81 | 5220.42 | 0.04 |
|
||||
| mortes_transito_100milhab | 0.78 | 0.85 | 0.11 |
|
||||
| pop_em_situacao_de_rua | 0.75 | 105.05 | 0.25 |
|
||||
| taxa_mortalidade_infantil | 0.69 | 0.27 | 0.02 |
|
||||
|
||||
**Baixa previsibilidade (R² ≤ 0,50)**
|
||||
|
||||
| Indicador | R² | MAE | MAPE (%) |
|
||||
| ---------------------------------- | ---: | ------: | -------: |
|
||||
| estabelecimentos_formais_total | 0.44 | 406.52 | 0.05 |
|
||||
| cobertura_vegetal_per_capita_m2hab | 0.42 | 1.56 | 0.02 |
|
||||
| tempo_espera_exames_prioritarios | 0.40 | 8.66 | 0.18 |
|
||||
| familias_em_extrema pobreza | 0.30 | 1770.36 | 0.10 |
|
||||
| ocorrencias_deslizamento | 0.27 | 3.21 | 0.49 |
|
||||
| ocorrencias_alagamento | 0.26 | 8.76 | 0.51 |
|
||||
| livros_servicos_leitura_1000hab | 0.16 | 64.60 | 8.8e+16 |
|
||||
### Gráficos e Interpretação de Resultados
|
||||
|
||||
A análise das projeções (Figura 1 e 2) revela que indicadores de infraestrutura (saneamento, UBS) e demográficos (longevidade) mostram tendências claras e são altamente previsíveis. Em contrapartida, indicadores de vulnerabilidade social (pobreza, população de rua) e riscos ambientais (alagamentos) são muito mais voláteis, com baixo R², indicando que a sua evolução é influenciada por fatores mais complexos que a regressão linear simples não consegue capturar.
|
||||
|
||||
Figura 18: Tendência Linear Forte (Alto R²)
|
||||
|
||||
![[projeto-desigualdade-ia-23.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 19: Tendência Fraca (Baixo R²)
|
||||
|
||||
![[projeto-desigualdade-ia-24.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
## Resultados do Clustering K-Means (k = 2)
|
||||
|
||||
### Métricas e Gráficos
|
||||
|
||||
Para a análise com K-Means, foi utilizado k = 2, correspondendo ao primeiro pico de estabilidade do coeficiente de silhouette score, que atinge o valor de 0.250.
|
||||
|
||||
Figura 20: Visualização dos Clusters (K-Means, k = 2)
|
||||
|
||||
![[projeto-desigualdade-ia-3.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 21: Perfil Comparativo (K-Means, k=2)
|
||||
|
||||
![[projeto-desigualdade-ia-4.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
### Interpretação dos Resultados
|
||||
|
||||
A análise com k = 2 revelou a principal fratura socioeconómica da cidade, dividindo-a em dois grandes eixos:
|
||||
|
||||
|
||||
|
||||
- Cluster 0 (Eixo da Vulnerabilidade): Agrupa 17 distritos com indicadores consistentemente mais desfavoráveis: maior pobreza, menor longevidade, maior exposição a riscos e maior violência infanto-juvenil.
|
||||
- Distritos Pertencentes: Butantã, Campo Limpo, Capela Do Socorro, Cidade Ademar, Cidade Tiradentes, Freguesia-Brasilândia, Guaianases, Itaim Paulista, Itaquera, Jaçanã-Tremembé, M'Boi Mirim, Parelheiros, Perus, Pirituba-Jaraguá, Sapopemba, São Mateus, São Miguel.
|
||||
|
||||
- Cluster 1 (Eixo do Desenvolvimento): Agrupa 15 distritos com melhores condições de vida: menor pobreza, maior longevidade, melhor acesso à educação e mais estabelecimentos formais.
|
||||
- Distritos Pertencentes: Aricanduva-Formosa-Carrão, Casa Verde-Cachoeirinha, Ermelino Matarazzo, Ipiranga, Jabaquara, Lapa, Mooca, Penha, Pinheiros, Santana-Tucuruvi, Santo Amaro, Sé, Vila Maria-Vila Guilherme, Vila Mariana, Vila Prudente.
|
||||
|
||||
## Resultados do Clustering Hierárquico (k=12)
|
||||
|
||||
### Métricas e Gráficos
|
||||
|
||||
A análise do Coeficiente de Silhueta para o modelo hierárquico (Figura 5) apontou k=12 como o número ótimo de clusters, com um score de 0.3247, permitindo uma segmentação mais detalhada.
|
||||
|
||||
Figura 22: Análise do Coeficiente de Silhueta
|
||||
|
||||
![[projeto-desigualdade-ia-5.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
Figura 23: Visualização dos Clusters com PCA (k=12)
|
||||
|
||||
![[projeto-desigualdade-ia-6.png]]
|
||||
|
||||
>[!info]
|
||||
>Fonte: Elaboração Própria
|
||||
|
||||
### Interpretação dos Resultados
|
||||
|
||||
A segmentação em 12 clusters aprofunda a análise, revelando que os "Eixos de Vulnerabilidade e Desenvolvimento" não são blocos homogêneos. A Tabela 3 resume o perfil de cada cluster.
|
||||
|
||||
Tabela 3: Perfil Detalhado dos 12 Clusters
|
||||
|
||||
| Cluster | Nome sugerido | Perfil principal | Distritos pertencentes |
|
||||
|:------:|----------------------------------------|-----------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
|
||||
| 0 | Elite e Alta Qualidade de Vida | Menor mortalidade infantil, maior longevidade, menor pobreza e violência. | Lapa; Pinheiros; Vila Mariana |
|
||||
| 1 | Polos Educacionais com Desafios | Maior taxa de educação, mas alta pobreza e mortalidade infantil. | Mooca; Penha |
|
||||
| 2 | Vulnerabilidade Crítica em Saúde e Pobreza | Altíssima mortalidade infantil, baixa longevidade e alta pobreza. | Freguesia-Brasilândia; Guaianases; Pirituba-Jaraguá; São Mateus; São Miguel |
|
||||
| 3 | Desafios Moderados e Baixa Escolaridade| Indicadores médios/negativos, com baixa taxa de educação. | Butantã; Casa Verde-Cachoeirinha; Ermelino Matarazzo; Ipiranga; Jabaquara; Vila Prudente |
|
||||
| 4 | Vulnerabilidade em Saúde e Educação | Baixa longevidade, alta mortalidade infantil e baixa taxa de educação. | Jaçanã-Tremembé; Perus; Sapopemba |
|
||||
| 5 | Pobreza e Violência Extremas | Pobreza muito alta e o segundo maior índice de violência. | Campo Limpo; Capela do Socorro; Itaim Paulista |
|
||||
| 6 | Crise Socioeducacional e de Segurança | Pobreza muito elevada, taxa de educação muito baixa e alta violência. | Cidade Ademar; Itaquera |
|
||||
| 7 | Crise de Longevidade | Idade média ao morrer drasticamente baixa (59,5 anos), a menor de todas. | Cidade Tiradentes; Parelheiros |
|
||||
| 8 | Prosperidade com Lacunas na Saúde Infantil | Baixa pobreza, mas alta mortalidade infantil. | Aricanduva-Formosa-Carrão; Vila Maria-Vila Guilherme |
|
||||
| 9 | Qualidade de Vida Elevada | Baixa pobreza, alta longevidade e excelente taxa de educação. | Santana-Tucuruvi; Santo Amaro |
|
||||
| 10 | Epicentro da Crise Múltipla | Piores indicadores de pobreza e violência (caso extremo). | M’Boi Mirim |
|
||||
| 11 | Défice Educacional Crítico | Pior taxa de educação, combinada com alta pobreza. | Sé |
|
||||
|
||||
## Discussão, Limitações e Próximos Passos
|
||||
|
||||
A partir dos resultados das análises realizadas, é possível inferir algumas hipóteses à respeito do que foi observado. Primeiramente, como dito anteriormente, foi verificado que o uso da técnica de regressão linear simples para prever indicadores de infraestrutura, como percentual de domicílios com saneamento básico e número de UBS) e demográficos (longevidade) mostram tendências claras e são altamente previsíveis. Nesse contexto, 9 das 21 análises para os indicadores escolhidos apresentaram um elevado R² (> 0.9).
|
||||
|
||||
Entretanto, a análise para indicadores de vulnerabilidade social e riscos ambientais, que somaram 7 do total de análises, tiveram previsibilidade baixa, com baixo R² (<= 0.5), indicando que são altamente voláteis, e que sua evolução é influenciada por fatores mais complexos que a regressão linear simples não consegue capturar. Assim, em estudos futuros, mostra-se necessário a inclusão de mais modelos de regressão para o estudo da previsão desses indicadores que não possuem tendências claras ao longo do tempo, além de verificar o registro de possíveis fenômenos atípicos que podem estar influenciando a previsibilidade do indicador, como pode ser o caso dos indicadores de riscos ambientais, cujos valores discrepantes em determinados anos podem ser explicados pela influência de fenômenos climáticos naturais de ocorrência irregular como El Niño e La Ninã (INSTITUTO NACIONAL DE PESQUISAS ESPACIAIS, 2024).
|
||||
|
||||
No que se diz respeito às metodologias de clustering utilizadas, no caso do clustering hierárquico, o modelo com k=12 é superior para entender as nuances da desigualdade, uma vez que ele vai além da simples dicotomia centro-periferia e identifica perfis de vulnerabilidade específicos (crise na saúde, na educação, na segurança, etc…), permitindo a formulação de políticas públicas mais focadas e eficazes para cada realidade. Já no modelo de K-Means, k=2 é eficaz para mostrar a divisão de São Paulo, confirmando a narrativa de uma cidade partida entre um centro expandido com melhores condições e uma vasta periferia com maiores carências.
|
||||
|
||||
Embora as análises de clustering realizadas permitissem identificar padrões relevantes entre as subprefeituras com base nos indicadores disponíveis, evidenciando regiões com características socioeconômicas e de infraestrutura semelhantes, os silhouette scores ligeiramente baixos indicam que o estudo apresenta algumas limitações importantes.
|
||||
|
||||
A principal está relacionada à escassez de dados em nível de subprefeitura, já que muitas informações estão disponíveis apenas para o município como um todo. Além disso, a heterogeneidade dos indicadores dificultou a formação de clusters bem definidos, reduzindo a precisão na identificação de grupos homogêneos. Outra limitação foi a sensibilidade dos métodos utilizados, por exemplo, o K-means exige a definição prévia do número de clusters e é mais adequado para dados com variância uniforme, enquanto o hierárquico pode sofrer com a influência de outliers.
|
||||
|
||||
Como próximos passos, recomenda-se a inclusão de outras técnicas de clustering, como o DBSCAN (RASCHKA; LIU; MIRJALILI, 2022), que pode lidar melhor com dados ruidosos e identificar grupos de formatos irregulares , além da aplicação de métricas adicionais para avaliação da qualidade dos clusters, como o índice Davies-Bouldin. Tais abordagens podem refinar a análise, proporcionando interpretações mais robustas e auxiliando na tomada de decisão baseada em dados. Além disso, também seria interessante a realização de análises preditivas que mostram como a composição dos clusters varia ao longo do tempo, sendo uma forma adicional de verificar a evolução da qualidade de vida nas subprefeituras.
|
||||
|
||||
## Conclusão
|
||||
|
||||
Este projeto demonstrou que é possível enxergar pontos de desigualdade entre os bairros da cidade de São Paulo com mais profundidade do que índices muito utilizados atualmente, como o IDH. Com base em 21 indicadores disponibilizados pelo ObservaSampa, sobre as subprefeituras de São Paulo, foram realizadas diversas análises fundamentadas em técnicas profissionais, como projeções temporais com regressão linear, clustering de k-means e clustering no modelo hierárquico.
|
||||
|
||||
Diante disso, a partir de cada método foram obtidas informações bastante relevantes. Na regressão linear, observou-se que indicadores de infraestrutura (saneamento, UBS) e demográficos (longevidade) mostram tendências claras e são altamente previsíveis, ao contrário dos indicadores de vulnerabilidade social (pobreza, população de rua) e riscos ambientais (alagamentos), que apresentaram resultado muito mais voláteis, com baixo R². Nesse sentido, tais reflexos sustentam o uso de modelos simples para infraestrutura e demografia, e abordagens mais complexas para risco e vulnerabilidade.
|
||||
|
||||
Já no modelo de clustering por k-means, foram encontrados uma divisão clara em dois agrupamentos, também divididos em locais com melhor infraestrutura e locais com menor desenvolvimento. Essa dicotomia sintetiza o mapa da desigualdade paulistana e oferece um corte claro para políticas universais com intensidades conflitantes. Por fim, no método de clustering hierárquico, com k=12, foi possível observar que essa dicotomia apresenta traços mais escondidos, pois, com essa maior segmentação hierárquica, surgiram dentro de cada grupo principal (antes determinado pelo modelo anterior) clustering específicos, como “Crise de Longevidade”, “Epicentro da Crise Múltipla”, “Elite e Alta Qualidade de Vida” ou “Prosperidade com lacunas na saúde infantil”, que combinam distintamente os indicadores. Essa segmentação mais elaborada orienta intervenções sob medida (ex.: focos em mortalidade infantil, escolaridade ou violência por cluster), aumentando a eficiência alocativa.
|
||||
|
||||
Em síntese, o trabalho cumpriu seu objetivo proposto: oferecer uma base empírica para priorização territorial e desenho de políticas mais direcionadas para os diferentes agrupamentos. Entretanto, também foram reconhecidas falhas e pontos de melhoria, como o baixo escore de silhouette para os clusterings, o que pode indicar uma complexidade suscetível a erros, apesar da linearidade dos agrupamentos com o contexto real de São Paulo.
|
||||
|
||||
## Referências
|
||||
|
||||
- IBGE – INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Censo Demográfico 2022 [dados]. Rio de Janeiro: IBGE, 2022.
|
||||
- INSTITUTO NACIONAL DE PESQUISAS ESPACIAIS – INPE. O que é El Niño e La Niña? Acesso à Informação – Perguntas Frequentes – Principais Produtos e Serviços – Previsão de Tempo e Clima. Brasília, 20 set. 2024. Atualizado em 24 set. 2024. Disponível em: [https://www.gov.br/inpe/pt-br/acesso-a-informacao/perguntas-frequentes/principais-produtos-e-servicos-do-inpe/previsao-de-tempo-e-clima/o-que-e-el-nino](https://www.gov.br/inpe/pt-br/acesso-a-informacao/perguntas-frequentes/principais-produtos-e-servicos-do-inpe/previsao-de-tempo-e-clima/o-que-e-el-nino). Acesso em: 13 ago. 2025.
|
||||
- MINISTÉRIO DA SAÚDE (Brasil). TabNet – Gini, pesquisa por definição. Disponível em: [http://tabnet.datasus.gov.br/cgi/ibge/censo/cnv/ginisp.def](http://tabnet.datasus.gov.br/cgi/ibge/censo/cnv/ginisp.def). Acesso em: 17 ago. 2025.
|
||||
- PREFEITURA DO MUNICÍPIO DE SÃO PAULO. GeoSampa. Disponível em: [http://geosampa.prefeitura.sp.gov.br/PaginasPublicas/_SBC.aspx](http://geosampa.prefeitura.sp.gov.br/PaginasPublicas/_SBC.aspx). Acesso em: 31 jul. 2025.
|
||||
9
content/02-ia/index.md
Normal file
9
content/02-ia/index.md
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
title: IA
|
||||
---
|
||||
>[!warning]
|
||||
> Se você é membro da dev e quer contribuir com algum material, se liga no **Guia do Hub** disponível na seção Extras: [[trilhas/04-extras/2025-s2/guia-hub|Guia do Hub]]
|
||||
|
||||
## Destaques Recentes:
|
||||
|
||||
(colocar acho que 5 redirecionamentos para os nossos melhores projetos)
|
||||
9
content/03-ciencia-de-dados/index.md
Normal file
9
content/03-ciencia-de-dados/index.md
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Ciência de dados
|
||||
---
|
||||
>[!warning]
|
||||
> Se você é membro da dev e quer contribuir com algum material, se liga no **Guia do Hub** disponível na seção Extras: [[trilhas/04-extras/2025-s2/guia-hub|Guia do Hub]]
|
||||
|
||||
## Destaques Recentes:
|
||||
|
||||
(colocar acho que 5 redirecionamentos para os nossos melhores projetos)
|
||||
56
content/04-extras/2025-s2/Lorem-Ipsum-Document.md
Normal file
56
content/04-extras/2025-s2/Lorem-Ipsum-Document.md
Normal file
File diff suppressed because one or more lines are too long
250
content/04-extras/2025-s2/guia-hub.md
Normal file
250
content/04-extras/2025-s2/guia-hub.md
Normal file
@ -0,0 +1,250 @@
|
||||
---
|
||||
title: Onboarding do Hub – Guia passo a passo
|
||||
---
|
||||
>[!warning]
|
||||
>
|
||||
>Isso aqui é um Tutorial direcionado apenas para os Membros da FEA.dev
|
||||
|
||||
>[!info]
|
||||
>Os passos de 1 a 3 serão feitos uma **única vez**. Caso já tenha feito, você pode pular diretamente para o passo 4 em diante
|
||||
>
|
||||
>Se quiser aprender ou revisar a sintaxe da linguagem do Markdown acesse esse outro arquivo [colocar o caminho aqui]
|
||||
|
||||
Este guia ensina qualquer pessoa a **acessar, editar e publicar** o Hub hospedado no **GitHub da organização** usando **Obsidian + Git + Quartz**.
|
||||
|
||||
## 1) O que você vai precisar (pré‑requisitos)
|
||||
|
||||
- **Acesso ao repositório** da organização (peça para te adicionarem como _member_ e com permissão de escrita no repo do Hub).
|
||||
|
||||
- Ter o **Git e VsCode** instalados na sua máquina.
|
||||
|
||||
- Ter também o **Obsidian** instalado (para editar os arquivos Markdown `.md`)
|
||||
|
||||
|
||||
>[!info]
|
||||
> Links oficiais para download, caso ainda não tenha instalado:
|
||||
>
|
||||
> - [Git](https://git-scm.com)
|
||||
> - [VsCode](https://code.visualstudio.com/)
|
||||
> - [Obsidian](https://obsidian.md/)
|
||||
|
||||
## 2) Clonar o repositório da organização
|
||||
|
||||
Com ambos instalados no seu computador, siga os seguintes passos:
|
||||
|
||||
1- Abra seu VsCode;
|
||||
|
||||
2- Inicialize seu Terminal, pode tanto arrastando com mouse a parte inferior para cima (imagem abaixo como referência) ou por meio do atalho Ctrl + Shift + Aspas;
|
||||
|
||||
![[guia-hub-2.jpg]]
|
||||
|
||||
3- É esperado que você esteja visualizando isso na sua tela:
|
||||
|
||||
![[guia-hub-1.jpg]]
|
||||
|
||||
4- No terminal agora você vai clonar o repositório do github para sua máquina, por meio do git. Dessa forma:
|
||||
|
||||
```powershell
|
||||
# Alterar depois para os links corretos
|
||||
git clone https://github.com/<ORGANIZACAO>/<REPO-DO-HUB>.git
|
||||
cd felipesantanafs.github.io
|
||||
|
||||
# Só para confirmar a branch padrão do projeto
|
||||
git branch -a # o output aqui esperado algo que contenha 'v4'
|
||||
```
|
||||
|
||||
5- Pronto é esperado que você tenha uma pasta com os arquivos do hub na máquina;
|
||||
|
||||
6- Para visualizar ela no seu computador, você deve fazer isso (ainda no terminal do VsCode):
|
||||
|
||||
```powershell
|
||||
explorer . # isso abre a pasta com os arquivos
|
||||
code . # isso abre a pasta no VsCode
|
||||
```
|
||||
|
||||
7- Por enquanto no Vscode é isso, voltaremos para ele depois.
|
||||
|
||||
## 3) Partindo para o Obsidian
|
||||
|
||||
1- Abra o Obsidian;
|
||||
|
||||
2- No canto inferior esquerdo clique no "Vault" padrão que está no seu Obsidian (está ao lado do símbolo de interrogação e da engrenagem):
|
||||
|
||||
![[guia-hub-3.jpg]]
|
||||
|
||||
3- Após clicar nele, selecione em "Gerenciar Cofres...";
|
||||
|
||||
![[guia-hub-4.jpg]]
|
||||
|
||||
4- Nessa nova tela que se abriu, clique em "Abrir" na seção "Abrir pasta como cofre";
|
||||
|
||||
![[guia-hub-5.jpg]]
|
||||
|
||||
5- No explorador de arquivos, você vai colocar o caminho que você encontrou no passo 2.6
|
||||
Você vai escrever na área de busca, algo parecido com isso:
|
||||
|
||||
>[!warning]
|
||||
>Trocar essa imagem quando eu for trocar o nome do repositório para o da dev
|
||||
|
||||
|
||||
![[guia-hub-6.jpg]]
|
||||
|
||||
6- Seguindo a imagem, a pasta que deve estar selecionada é a 'content'. Com isso, você vai estar vendo que o nosso hub dentro do Obsidian (ele servirá como local de apenas de criar mudanças, se quiser utilizar para leitura de preferência a utilizar o site).
|
||||
|
||||
7- A Cara do Hub é essa à princípio (imagem do dia 31/10/2025, no futuro poderá estar diferente):
|
||||
|
||||
![[guia-hub-7.jpg]]
|
||||
|
||||
## 4) Estrutura do Hub:
|
||||
|
||||
### Estrutura do Hub:
|
||||
|
||||
a. Home Page: O arquivo referente a nossa página é o index (que não está em nenhuma pasta), à princípio a sua alteração fica a cargo apenas para o pessoal de Tech e da Gestão, não altera ele sem a permissão do pessoal.
|
||||
|
||||
![[guia-hub-8.jpg]]
|
||||
|
||||
|
||||
>[!warning]
|
||||
>**NÃO RENOMEIE NENHUM ARQUIVO CHAMADO INDEX, ESSE NOME FAZ QUE O QUARTZ RECONHEÇA COMO PÁGINA PRINCIPAL.**
|
||||
|
||||
b. Trilhas: É a pasta que as 4 subpastas das nossas áreas de estudo
|
||||
|
||||
c. Subpastas: Estão organizadas pelas áreas de Finquant, IA, Ciência de dados e Extras. Decorrente a cada área mãe, os arquivos estão organizado por ano e semestre. Serão nelas que vocês irão colocar seus projetos.
|
||||
|
||||
d. Imagens: Logicamente é a pasta que vai conter as imagens que vocês vão anexar em seus arquivos. **É muito importante ela estar organizada**, **SEMPRE** coloque a imagem que vai usar **DENTRO DELA** e **NÃO** apenas cole no seu texto (o Obsidian vai fazer uma bagunça danada se apenas colar). Na próxima seção eu explico a razão.
|
||||
## 4) Criando seu arquivo e pasta:
|
||||
|
||||
>[!info]
|
||||
Aqui eu vou te ensinar como criar seu arquivo e como organizá-lo aqui dentro do hub. As personalizações referentes a sintaxe do Markdown está no arquivo [colocar o arquivo aqui] e te convido a não se limitar apenas a ela, faça suas pesquisas em outras fontes!
|
||||
|
||||
1- Criando arquivo genérico: Na barra lateral no canto superior direito clique no ícone com uma "folha e um lápis" chamado "Nova nota" e pronto vai ter seu arquivo criado. O nome que você colocar nele não importa tanto (o nome que aparecerá no site vai vir de uma personalização dentro dele, confie em mim!) coloque algo intuitivo e siga o mesmo padrão dos já existentes.
|
||||
|
||||
OBS: não utilize ponto no nome do arquivo ( por exemplo: cluster.portfólio, utilize cluster-portfólio ), o ponto faz que o Obsidian tente o ler como arquivo, no caso citado seria um arquivo .portfolio e não como Markdown.
|
||||
|
||||
![[guia-hub-9.jpg]]
|
||||
|
||||
2- Criando pasta: Bom para criar é só clicar no ícone da "pasta com um sinal mais dentro" está do lado do ícone do arquivo. As mesma recomendações do Arquivo valem para as Pastas.
|
||||
|
||||
![[guia-hub-10.jpg]]
|
||||
|
||||
3- Forma alternativa para ambos é só clicar com o botão direito na lateral
|
||||
|
||||
![[guia-hub-11.jpg]]
|
||||
|
||||
|
||||
## 5) Personalização Essencial de sua Página:
|
||||
|
||||
Com a sua primeira página criada, vamos dar um cabeçalho para ela e anexar as tags que vão aparecer lá no site. Para isso siga o seguinte instrução:
|
||||
|
||||
1- Cabeçalho: Escreva exatamente três hífens (---) sem os parêntases no topo do arquivo, bem abaixo do título:
|
||||
|
||||
![[guia-hub-12.jpg]]
|
||||
vai aparecer isso exatamente na hora!
|
||||
|
||||
2- Título: preencha essa propriedade com 'title' e escrava seu título que quiser
|
||||
|
||||
![[guia-hub-13.jpg]]
|
||||
3- Tags: para adicionar uma tag clique em 'Adicionar propriedade' e escreva 'tags'. Até o momento temos 2 tipos de tags e com suas classificações:
|
||||
|
||||
a- Nível: escreva "#nivel/basico" , "#nivel/intermediario" ou "#nivel/avancado"
|
||||
|
||||
b- Trilhas: escreva "#trilha/finquant" , "#trilha/ia" , "#trilha/extras" ou "#trilha/ciencia-de-dados"
|
||||
|
||||
Obs: escreva sem as aspas!
|
||||
|
||||
Pronto seu cabeçalho está pronto, ficará dessa forma:
|
||||
|
||||
![[guia-hub-14.jpg]]
|
||||
|
||||
## 6) Adicionar imagens
|
||||
|
||||
Como já avisei anteriormente as imagens são algo que demandam bastante atenção aqui no Obsidian. Siga esses passos para deixar o ambiente organizado e funcional para todos:
|
||||
|
||||
1- Crie uma subpasta na pasta imagem para armazenar suas imagens dentro, nesse exemplo criei uma que se chama "guia-hub":
|
||||
|
||||
![[guia-hub-15.jpg]]
|
||||
|
||||
2- Observe que todas as imagens que usei nesse arquivo estão dentro dela, tente manter a mesma sintaxe vai te ajudar a selecioná-las depois;
|
||||
|
||||
![[guia-hub-16.jpg]]
|
||||
|
||||
3- Você pode salvar a imagem dando um Ctrl + V da imagem dentro da imagem e depois a renomeando apertando com o botão direito do mouse ou você pode fazer seu manejo pelo explorador de arquivos fique tranquilo
|
||||
|
||||
4- Com isso em mente, para você colocar a sua imagem no corpo do seu arquivo faça a seguinte sintaxe:
|
||||
|
||||
![[guia-hub-17.jpg]]
|
||||
|
||||
Dessa forma, já aparecerá uma sugestão para adicionar uma imagem salva no obsidian.
|
||||
|
||||
5- Referenciando a imagem que você quer, terá algo do tipo:
|
||||
|
||||
![[guia-hub-18.jpg]]
|
||||
|
||||
6- Pronto sua imagem foi indexada ao Texto.
|
||||
|
||||
OBS: Você se deve estar se perguntando todo esse trabalho para criar uma imagem somente, não seria mais fácil color e pronto?
|
||||
Eu concordo com você, seria muito mais fácil e direto, mas vou te mostrar o problemão que isso ai dar!
|
||||
|
||||
se eu simplesmente colasse a imagem que eu queria aconteceria isso:
|
||||
|
||||
![[guia-hub-19.jpg]]
|
||||
O nome da imagem seria algo bem abstrato e que depois para saber o que aquela imagem queria mostrar e de qual projeto faz parte. Além disso, ao se fazer isso o Obsidian adiociona automaticamente a imagem na barra lateral de forma aleatória! Observe na imagem que anexei abaixo:
|
||||
|
||||
![[guia-hub-20.jpg]]
|
||||
|
||||
**Por fim eu sei que é um processo chato, mas que a longo prazo é necessário para a própria manutenção da organização do hub. Com pouco tempo você já acostuma com a sintaxe e já sai quase de forma automática. Conto com vocês com essa parte!**
|
||||
|
||||
## 7) Mandando seu arquivo para o Github e para o Hub
|
||||
|
||||
Bom espero que esteja acompanhando tudo até o momento, supunha que terminou as alterações no seu arquivo e já quer mandar ele para o Github. Para isso siga esses passo:
|
||||
|
||||
1- Volte para o VsCode
|
||||
|
||||
2- Mude para o ambiente da o hub;
|
||||
|
||||
![[guia-hub-21.jpg]]
|
||||
|
||||
3- Adicione o que você alterou na pasta content;
|
||||
|
||||
![[guia-hub-22.jpg]]
|
||||
|
||||
4- Dê o commit (coloquei um exemplo que estou fazendo, descreve o que você fez no seu caso);
|
||||
|
||||
![[guia-hub-23.jpg]]
|
||||
|
||||
Vai aparecer tudo que você fez, que beleza hein!
|
||||
|
||||
5- Por fim, de um push e mandará tudo ao github;
|
||||
|
||||
![[guia-hub-25.jpg]]
|
||||
|
||||
Beleza Tudo foi para o Github lá nosso! Mas se segura ai, a mudança lá no site do Hub não é algo automático!
|
||||
Primeiro verificamos no próprio Github se a nossa adição deu tudo certo
|
||||
|
||||
6- Abrindo a aba "Actions" do nosso repositório;
|
||||
|
||||
![[guia-hub-27.jpg]]
|
||||
|
||||
Clique na última sua última adição, que no meu caso foi essa marcada pela setinha vermelha.
|
||||
Se ao selecioná-la e ainda estiver amarela ainda as mudanças não foram adicionadas ao Hub (ou seja, não adianta ficar dando F5 lá na site ainda não vai ter alteração alguma), espere ele ficar azul que as mudanças foram enviadas (agora pode ficar dando F5 igual um louco)
|
||||
|
||||
![[guia-hub-24.jpg]]
|
||||
(sinal de esperar ainda)
|
||||
|
||||
![[guia-hub-26.jpg]]
|
||||
(agora foi!)
|
||||
|
||||
7- Pronto suas alterações foram feitas e o Hub estará atualizado! 😁
|
||||
## Considerações Finais:
|
||||
|
||||
Bom o guia básico de como acessar e criar seus arquivos foram feitos! Eu sei que parece muito a primeira vista, mas juro que com a prática de vocês logo tudo ficará guardado na cabeça de vocês e vai sair tudo de forma automática praticamente. Revisem tudo e façam todo o passo a passo com calma.
|
||||
|
||||
Conto que vocês para sempre atualizar esse meio com excelentes materiais, você vai ajudar toda a comunidade dev e externa! 🚀🚀🚀
|
||||
|
||||
## [Opcional] - Background do Hub:
|
||||
|
||||
>[!info]
|
||||
>Se ainda ficou curiso e quer saber como o Hub foi feito e entender mais o como funciona o Quartz, leia a seguinte documentação:
|
||||
>- [https://quartz.jzhao.xyz/authoring-content](https://quartz.jzhao.xyz/authoring-content )
|
||||
>- [https://notes.nicolevanderhoeven.com](https://notes.nicolevanderhoeven.com/How+to+publish+Obsidian+notes+with+Quartz+on+GitHub+Pages)
|
||||
>- [https://yagasaki.bohr.io/blog/como-criar-um-blog-usando-github-pages-obsidian-quartz](https://yagasaki.bohr.io/blog/como-criar-um-blog-usando-github-pages-obsidian-quartz)
|
||||
8
content/04-extras/index.md
Normal file
8
content/04-extras/index.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: Extras
|
||||
---
|
||||
>[!warning]
|
||||
> Se você é membro da dev e quer contribuir com algum material, se liga no **Guia do Hub** disponível na seção Extras: [[trilhas/04-extras/2025-s2/guia-hub|Guia do Hub]]
|
||||
## Destaques Recentes:
|
||||
|
||||
(colocar acho que 5 redirecionamentos para os nossos melhores projetos)
|
||||
Loading…
Reference in New Issue
Block a user