Metadata-Version: 2.4
Name: newsAR
Version: 0.3.1
Summary: Autorregressão Bayesiana com Sentimento de Notícias para previsão de commodities
License: MIT
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.24
Requires-Dist: pandas>=2.0
Requires-Dist: matplotlib>=3.7
Requires-Dist: statsmodels>=0.14
Requires-Dist: requests>=2.28
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.25; extra == "anthropic"
Provides-Extra: openailib
Requires-Dist: openai>=1.0; extra == "openailib"
Provides-Extra: groq
Requires-Dist: groq>=0.9; extra == "groq"
Provides-Extra: all
Requires-Dist: anthropic>=0.25; extra == "all"
Requires-Dist: openai>=1.0; extra == "all"
Requires-Dist: groq>=0.9; extra == "all"
Requires-Dist: joblib>=1.3; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0; extra == "dev"
Requires-Dist: anthropic>=0.25; extra == "dev"
Requires-Dist: openai>=1.0; extra == "dev"
Requires-Dist: groq>=0.9; extra == "dev"
Requires-Dist: joblib>=1.3; extra == "dev"
Dynamic: license-file

# newsAR

**Previsão de séries temporais com Autorregressão Bayesiana + Sentimento de Notícias via LLM**

[![PyPI](https://img.shields.io/pypi/v/newsAR.svg)](https://pypi.org/project/newsAR/)
[![Python](https://img.shields.io/badge/python-%3E%3D3.10-blue)](https://pypi.org/project/newsAR/)
[![License](https://img.shields.io/badge/license-MIT-green)](https://github.com/)

---

**newsAR** combina **Autorregressão Bayesiana** (Gibbs Sampling com verossimilhança t-Student) com **Sentimento de Notícias** extraído por Grandes Modelos de Linguagem (Groq, OpenAI, Anthropic).

A hipótese central: fluxos de informação (notícias) afetam variáveis econômicas e de commodities *antes* de se materializarem nos dados quantitativos. O sentimento capturado pelo LLM atua como variável exógena que melhora a acurácia preditiva além do que um AR puro consegue.

## Por que usar?

- **Modelo AR Bayesiano** com Gibbs Sampling e likelihood t-Student — robusto a outliers
- **Sentimento de notícias via LLM** (Groq, OpenAI ou Anthropic) como variável exógena
- **Seleção automática de lags** combinando PACF + AIC
- **Benchmark walk-forward** contra ARIMA, OLS-AR, Random Walk e Seasonal Naive, com Theil's U
- **Diagnóstico completo de resíduos**: normalidade, autocorrelação e efeitos ARCH

## Instalação

```bash
pip install newsAR

# Com suporte a LLMs
pip install "newsAR[groq]"      # Groq (recomendado: gratuito e rápido)
pip install "newsAR[openai]"    # OpenAI
pip install "newsAR[anthropic]" # Anthropic
pip install "newsAR[all]"       # todos os provedores + joblib
```

## Uso rápido

```python
import pandas as pd
import numpy as np
from newsAR import quick_fit

# Série mensal com DatetimeIndex
y = pd.Series(
    np.random.default_rng(0).normal(100, 5, 60),
    index=pd.date_range("2019-01", periods=60, freq="MS"),
)

forecaster = quick_fit(y, keyword="commodity")
forecast = forecaster.predict(steps=6)
print(forecast)
```

### Com sentimento de notícias (Groq)

```bash
export GROQ_API_KEY="gsk_..."
```

```python
from newsAR import quick_fit

forecaster = quick_fit(
    y=minha_serie,
    keyword="petróleo",
    csv_path="noticias.csv",   # CSV com colunas: data, texto
    groq_api_key="gsk_...",    # ou lê de GROQ_API_KEY automaticamente
)

forecast = forecaster.predict(steps=6, credible_interval=0.90)
```

### Benchmark vs Random Walk

```python
from newsAR.benchmark import run_benchmark

results = run_benchmark(y=minha_serie, keyword="petróleo", test_size=12, verbose=True)
print(results[["modelo", "RMSE", "Theil_U", "melhoria_vs_Naive_%"]])
```

## Pipeline

```
[Notícias] → [Sentimento via LLM] → [Seleção de Lags] → [AR Bayesiano (Gibbs)]
                                                              ↓
                                                     NewsARForecaster
```

## Documentação completa

A documentação detalhada (API completa, diagnósticos, módulos internos, FAQ) está disponível no repositório do projeto.

## Licença

MIT
