Um projeto acadêmico para previsão de preços de criptomoedas usando modelos de aprendizado de máquina.
Este projeto foi desenvolvido para o curso de especialização em Inteligência Artificial do IFG câmpus Goiânia. O objetivo é desenvolver um modelo para prever preços de fechamento de criptomoedas e calcular a lucratividade de diferentes estratégias de investimento.
- Carrega dados históricos de 10 criptomoedas diferentes
- Cria indicadores técnicos básicos (média móvel, volatilidade, retornos)
- Treina modelos de previsão (MLP, Linear, Polinomial)
- Calcula lucros simulados usando as previsões
- Gera análises estatísticas com boxplots, histogramas e testes
- Compara variabilidade entre criptomoedas
- Realiza testes de hipóteses e ANOVA
git clone https://github.com/alexpereiramaranhao/crypto-predictor
cd crypto-predictor
pip install -r requirements.txt
ou use Poetry via
poetry install
python -m src.main --model linear
crypto-predictor/
├── data/ # Dados das 10 criptomoedas
│ ├── Poloniex_ADAUSDT_d.csv # Dados da Cardano
│ ├── Poloniex_BTCUSDT_d.csv # Dados do Bitcoin
│ └── ... # Outras 8 criptomoedas
├── figures/ # Gráficos gerados
├── src/ # Código principal
│ ├── data_load.py # Carregamento de dados
│ ├── features.py # Criação de indicadores
│ ├── models.py # Modelos de ML
│ ├── lucro.py # Cálculos de lucro
│ ├── statistics/ # Análises estatísticas
│ └── util/ # Funções auxiliares
├── tests/ # Testes automatizados
├── requirements.txt # Dependências
└── README.md # Este arquivo
Para executar o projeto com um modelo específico e processar as 10 criptomoedas:
python -m src.main --model linear
--model
(OBRIGATÓRIO): Escolha do modelo de previsãolinear
: Regressão linear simples e rápidamlp
: Rede neural multicamadas (mais complexa)poly
: Regressão polinomial (captura não-linearidades)
--kfolds
: Número de divisões para validação cruzada (padrão: 5, mínimo: 2)--teste-retorno
: Percentual de retorno esperado para teste de hipótese (ex: 5.0 para 5%)- Se não especificado, o teste de hipótese não será executado
- Valor sugerido: entre 1.0 e 10.0 (1% a 10% de retorno)
Para ver todos os parâmetros disponíveis:
python -m src.main --help
# Usar modelo linear com validação cruzada de 5 folds
python -m src.main --model linear --kfolds 5
# Usar rede neural MLP com 10 folds
python -m src.main --model mlp --kfolds 10
# Usar regressão polinomial
python -m src.main --model poly
# Executar com teste de hipótese para retorno de 3%
python -m src.main --model linear --teste-retorno 3.0
Para ver todas as funcionalidades em ação com todas as 10 criptomoedas:
python -m src.main --model mlp --kfolds 5 --teste-retorno 2.0
⏱️ Tempo estimado: 3-5 minutos (processando 10 criptomoedas)
Este comando irá:
- Carregar dados das 10 criptomoedas
- Criar indicadores técnicos básicos para todas
- Treinar modelos de previsão (MLP, Linear, Polinomial)
- Calcular lucros simulados para cada criptomoeda
- Realizar análises estatísticas completas (ANOVA, testes de hipótese)
- Gerar gráficos na pasta
figures/
🚀 Executando pipeline usando modelo mlp com 5 folds
📊 Processando ADA...
┌─────────────────────────────────────────────────────┐
│ Medidas resumo e de dispersão - ADA │
├─────────────────────────────────────────────────────┤
│ Estatística │ Valor │
│ mean │ 1.234567 │
│ median │ 1.123456 │
│ std │ 0.456789 │
└─────────────────────────────────────────────────────┘
🔧 Criando features...
🔍 Análise Completa de Lucro - ADA
🤖 Treinando MLP...
📈 Treinando Regressão Linear...
🔢 Encontrando melhor grau polinomial (2-10)...
💰 Calculando lucros...
📊 Gerando gráficos...
✅ ADA processado com sucesso!
[... repete para as outras 9 criptomoedas ...]
📈 RESUMO GERAL
📊 ANÁLISES DE VARIÂNCIA (ANOVA)
🔍 A) ANOVA entre criptomoedas
🔍 B) ANOVA entre grupos de volatilidade
🎉 Pipeline completo executado!
- Média Móvel 7 dias: Suaviza variações de preço
- Volatilidade: Medida de risco (desvio padrão)
- Retorno Diário: Variação percentual dia a dia
- Indicador de Alta: Se o preço subiu (1) ou desceu (0)
- Linear: Simples e rápido
- MLP: Rede neural básica
- Polinomial: Captura relações não-lineares
- Estatísticas descritivas: média, mediana, moda, desvio padrão, variância
- Boxplots: distribuição dos preços de fechamento
- Histogramas: frequência dos preços com curva de densidade
- Gráficos de linha: preços + média móvel, mediana móvel e moda
- Variabilidade entre criptomoedas: comparação de dispersão
- Teste de hipóteses: retornos médios superiores a valor esperado
- ANOVA entre criptomoedas: diferenças significativas nos retornos
- ANOVA por grupos: agrupamento por volatilidade com testes post-hoc
- Validação cruzada: performance dos modelos
- Comparação de lucros: estratégias de investimento
pytest
pytest --cov=src --cov-report=html
Depois abra htmlcov/index.html
no navegador para ver o relatório.
pytest tests/test_features.py
black src/ tests/
ruff check --fix src/ tests/
bandit -r src/
safety scan
Executando pipeline para múltiplas moedas usando modelo linear com 5 folds.
Processando ADA: 1000 dias de dados
Processando AKITA: 850 dias de dados
Processando BTC: 1200 dias de dados
...
┌─────────────────────────────────────────────────────┐
│ Medidas resumo e de dispersão - BTC │
├─────────────────────────────────────────────────────┤
│ Estatística │ Valor │
│ mean │ 45123.456789 │
│ median │ 43500.000000 │
│ std │ 12345.678901 │
└─────────────────────────────────────────────────────┘
Após a execução, você encontrará em figures/
:
- Boxplots:
boxplot_BTC.png
,boxplot_ADA.png
, etc. - Histogramas:
histogram_BTC.png
,histogram_ADA.png
, etc. - Gráficos de linha:
price_summary_BTC.png
, etc.
- Evolução do lucro:
evolucao_lucro_modelos.png
(subplots 1x3) - Dispersão de previsões:
dispersao_modelos.png
(subplots 1x3)
🎯 Total: ~32 arquivos PNG (resolução 150 DPI)
# ❌ Erro
python -m src.main
# ✅ Correto
python -m src.main --model linear
- Verifique se está na pasta raiz do projeto
- Confirme se a pasta
data/
existe com os arquivos CSV
# ❌ Erro - executando de pasta errada
cd src
python main.py
# ✅ Correto - executar da pasta raiz
cd crypto-predictor
python -m src.main --model linear
- Normal: processa 10 criptomoedas com 3 modelos cada
- Use menos folds:
--kfolds 3
(em vez de 5) - Teste com modelo mais rápido:
--model linear
- Primeiro teste:
python -m src.main --model linear --kfolds 3
- Análise completa:
python -m src.main --model mlp --kfolds 5
- Com testes de hipótese: adicione
--teste-retorno 2.0
- ✅ 10 criptomoedas já incluídas no repositório
- Dados obtidos de CryptoDataDownload
- Formato padronizado USDT para facilitar comparações
- Apenas 3 modelos básicos implementados
- Não há otimização automática de hiperparâmetros
- 4 indicadores técnicos básicos
- não há uso de features de dados externos
- Não há RSI, MACD ou outros indicadores avançados
Este projeto atende aos requisitos do trabalho acadêmico:
- ✅ Modelos de ML para previsão de preços
- ✅ Validação cruzada K-fold
- ✅ Análise estatística para 10 criptomoedas
- ✅ Medidas resumo e dispersão completas
- ✅ Boxplots e histogramas individuais
- ✅ Análise de variabilidade entre criptomoedas
- ✅ Gráficos de linha com média, mediana e moda
- ✅ Teste de hipóteses e ANOVA
- ✅ Cálculo de lucro com estratégia de investimento
- ✅ Comparação entre modelos
- ✅ Visualizações com matplotlib/seaborn
- ✅ Estrutura modular com docstrings
- ✅ Testes automatizados com pytest
- ✅ Ferramentas de qualidade de código
Este é um projeto acadêmico, mas se você quiser contribuir:
- Faça um fork do projeto
- Crie uma branch para sua feature
- Rode os testes e formatação
- Faça um pull request
Para dúvidas sobre o projeto acadêmico:
Para dúvidas sobre a implementação:
Nota: Este é um projeto educacional para fins acadêmicos. Não deve ser usado para decisões reais de investimento.