Python para Análise de Séries Temporais: Previsão de Vendas e Tendências
Neste post, vamos explorar como iniciar a análise de séries temporais em Python, identificar padrões sazonais, treinar modelos de previsão e aplicar técnicas para prever vendas e tendências futuras.
1. O que são Séries Temporais
Uma série temporal é uma sequência de observações de uma variável ao longo do tempo, geralmente registradas em intervalos regulares (diário, semanal, mensal, anual).
Exemplo de série temporal de vendas:
| Data | Vendas |
|---|---|
| 2025-01-01 | 150 |
| 2025-01-02 | 165 |
| 2025-01-03 | 140 |
| 2025-01-04 | 170 |
Elementos principais de séries temporais:
Tendência (Trend): direção geral dos dados (subida ou descida)
Sazonalidade (Seasonality): padrões que se repetem em intervalos fixos
Ruído (Noise): variações aleatórias ou imprevisíveis
2. Bibliotecas Python essenciais para séries temporais
2.1 Pandas
Para armazenar e manipular séries temporais.
import pandas as pd
# Criando uma série temporal simulada
datas = pd.date_range(start="2025-01-01", periods=10, freq="D")
vendas = [150, 165, 140, 170, 160, 175, 180, 190, 185, 200]
df = pd.DataFrame({"Data": datas, "Vendas": vendas})
df.set_index("Data", inplace=True)
print(df)
2.2 Matplotlib e Seaborn
Para visualizar tendências e padrões.
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10,5))
sns.lineplot(data=df, x=df.index, y="Vendas")
plt.title("Vendas Diárias")
plt.xlabel("Data")
plt.ylabel("Vendas")
plt.show()
2.3 Statsmodels
Para análise estatística e modelagem clássica.
from statsmodels.tsa.seasonal import seasonal_decompose
resultado = seasonal_decompose(df["Vendas"], model='additive', period=3)
resultado.plot()
plt.show()
2.4 scikit-learn
Para previsão usando regressão ou aprendizado de máquina.
from sklearn.linear_model import LinearRegression
import numpy as np
# Criando variável de tempo
df["Dia"] = np.arange(len(df))
X = df[["Dia"]]
y = df["Vendas"]
modelo = LinearRegression()
modelo.fit(X, y)
# Previsão
df["Previsao"] = modelo.predict(X)
df.plot(y=["Vendas","Previsao"], figsize=(10,5))
plt.title("Previsão Linear de Vendas")
plt.show()
2.5 Prophet (Facebook)
Para previsão de séries temporais com tendências e sazonalidade.
from prophet import Prophet
# Preparando dados
df_prophet = df.reset_index().rename(columns={"Data":"ds","Vendas":"y"})
# Treinando modelo
modelo = Prophet()
modelo.fit(df_prophet)
# Previsão futura
future = modelo.make_future_dataframe(periods=7)
forecast = modelo.predict(future)
modelo.plot(forecast)
plt.show()
3. Etapas da Análise de Séries Temporais
3.1 Coleta e Limpeza de Dados
Importar dados de CSV, Excel ou APIs
Tratar valores faltantes ou duplicados
Converter colunas de data para
datetime
df['Data'] = pd.to_datetime(df['Data'])
df.set_index('Data', inplace=True)
3.2 Visualização e Exploração
Gráficos de linha para tendência geral
Boxplots para identificar sazonalidade e outliers
Heatmaps para correlações temporais
3.3 Decomposição de Série Temporal
Separar série em tendência, sazonalidade e resíduos:
resultado = seasonal_decompose(df["Vendas"], model='additive', period=7)
resultado.plot()
plt.show()
Benefícios:
Entender padrões sazonais
Ajustar estratégias de marketing ou estoque
3.4 Modelos de Previsão
3.4.1 Modelos Clássicos
ARIMA / SARIMA: Capturam dependência temporal e sazonalidade
Exponential Smoothing: Dá mais peso aos dados recentes
from statsmodels.tsa.arima.model import ARIMA
modelo = ARIMA(df["Vendas"], order=(1,1,1))
resultado = modelo.fit()
print(resultado.summary())
3.4.2 Modelos de Machine Learning
Regressão Linear, Random Forest, XGBoost para séries temporais
Requer engenharia de features temporais (lags, médias móveis)
df["Lag1"] = df["Vendas"].shift(1)
df.dropna(inplace=True)
X = df[["Lag1"]]
y = df["Vendas"]
modelo = LinearRegression()
modelo.fit(X, y)
df["Previsao"] = modelo.predict(X)
3.4.3 Modelos Avançados
Prophet para sazonalidade diária, semanal e anual
LSTM / RNN para séries temporais complexas com deep learning
3.5 Avaliação de Modelos
MAE (Mean Absolute Error): erro absoluto médio
RMSE (Root Mean Squared Error): penaliza grandes erros
MAPE (Mean Absolute Percentage Error): erro relativo
from sklearn.metrics import mean_absolute_error, mean_squared_error
mae = mean_absolute_error(df["Vendas"], df["Previsao"])
rmse = mean_squared_error(df["Vendas"], df["Previsao"], squared=False)
print(f"MAE: {mae}, RMSE: {rmse}")
4. Aplicações práticas
Previsão de vendas diárias, semanais ou mensais
Planejamento de estoque e logística
Detecção de tendências de mercado
Identificação de sazonalidade em produtos ou serviços
Análise de séries financeiras, preços de ativos ou indicadores econômicos
5. Boas práticas em séries temporais com Python
Considere sazonalidade e feriados
Use validação cruzada temporal, não aleatória
Teste múltiplos modelos e compare métricas
Documente e versionamento de dados e modelos
Automatize previsões com Dashboards ou scripts periódicos
6. Conclusão
Python oferece um ecossistema completo para análise de séries temporais, permitindo:
Explorar tendências e padrões históricos
Criar previsões confiáveis usando ARIMA, Prophet ou Machine Learning
Automatizar análises para aplicações reais de vendas e negócios
Tomar decisões estratégicas baseadas em dados históricos
Com a prática e o uso das bibliotecas corretas, qualquer iniciante em Python pode evoluir para análises avançadas de séries temporais, construindo previsões úteis para negócios e mercado financeiro.

Comentários
Postar um comentário