import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
1º Energia Familiar (Gasto de energia elétrica domiciliar): Representa o consumo de energia elétrica pelas famílias!¶
# Carregar os dados
file_path = 'Energia_familiar.xlsx'
energia_familiar_df = pd.read_excel(file_path)
# Converter a coluna de data para o formato datetime e definir como índice
energia_familiar_df['ref.date'] = pd.to_datetime(energia_familiar_df['ref.date'])
energia_familiar_df.set_index('ref.date', inplace=True)
# Converter para série temporal
energia_ts = energia_familiar_df['value']
# Plotar a série temporal original e a transformada
plt.figure(figsize=(14, 6))
# Série original
plt.subplot(1, 2, 1)
plt.plot(energia_ts, color='black')
plt.title('Série Temporal Original de Energia Familiar')
plt.xlabel('Ano')
plt.ylabel('Consumo de Energia Familiar')
plt.grid(True)
# Plotar ACF e PACF para a série original
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(energia_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) - Série Original')
plt.subplot(1, 2, 2)
plot_pacf(energia_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) - Série Original')
plt.tight_layout()
plt.show()
# Aplicar a transformação Box-Cox (apenas se todos os valores forem positivos)
if np.all(energia_ts > 0):
energia_ts_boxcox, lambda_boxcox = stats.boxcox(energia_ts)
else:
energia_ts_boxcox = energia_ts
lambda_boxcox = None
# Série transformada com Box-Cox
plt.subplot(1, 2, 2)
plt.plot(energia_ts.index, energia_ts_boxcox, color='orange')
plt.title('Série Transformada (Box-Cox)')
plt.xlabel('Ano')
plt.ylabel('Consumo de Energia Familiar (Transformado)')
plt.grid(True)
plt.tight_layout()
plt.show()
# Exibir o valor de lambda utilizado na transformação, se aplicável
if lambda_boxcox is not None:
print(f'Lambda da transformação Box-Cox: {lambda_boxcox}')
# Decomposição da série temporal
decomposition = seasonal_decompose(energia_ts, model='additive')
# Criar gráficos individuais para cada componente
fig, axs = plt.subplots(3, 1, figsize=(12, 12), sharex=True)
# Plotar tendência
axs[0].plot(decomposition.trend, color='blue')
axs[0].set_title('Tendência')
axs[0].set_ylabel('Tendência')
axs[0].grid(True)
# Plotar sazonalidade
axs[1].plot(decomposition.seasonal, color='red')
axs[1].set_title('Sazonalidade')
axs[1].set_ylabel('Sazonalidade')
axs[1].grid(True)
# Plotar resíduos
axs[2].plot(decomposition.resid, color='green')
axs[2].set_title('Resíduos')
axs[2].set_xlabel('Tempo')
axs[2].set_ylabel('Resíduos')
axs[2].grid(True)
plt.tight_layout()
plt.show()
# Teste de Dickey-Fuller Aumentado (ADF) para a série original
adf_result = adfuller(energia_ts.dropna())
# Teste de Dickey-Fuller Aumentado (ADF) para a tendência e sazonalidade
adf_trend = adfuller(decomposition.trend.dropna())
adf_seasonal = adfuller(decomposition.seasonal.dropna())
# Ajustar a série removendo a tendência e a sazonalidade se necessário
ts_adjusted = energia_ts.copy()
# Remover tendência
if adf_trend[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.trend
# Remover sazonalidade
if adf_seasonal[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.seasonal
# Plotar ACF e PACF após ajustes
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) após ajuste - Energia Familiar')
plt.subplot(1, 2, 2)
plot_pacf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) após ajuste - Energia Familiar')
plt.tight_layout()
plt.show()
# Criar um DataFrame com os resultados dos testes ADF
results_df = pd.DataFrame({
'Tipo': ['Série Original', 'Tendência', 'Sazonalidade'],
'ADF Statistic': [adf_result[0], adf_trend[0], adf_seasonal[0]],
'p-value': [adf_result[1], adf_trend[1], adf_seasonal[1]],
'Critical Value 1%': [adf_result[4]['1%'], adf_trend[4]['1%'], adf_seasonal[4]['1%']],
'Critical Value 5%': [adf_result[4]['5%'], adf_trend[4]['5%'], adf_seasonal[4]['5%']],
'Critical Value 10%': [adf_result[4]['10%'], adf_trend[4]['10%'], adf_seasonal[4]['10%']]
})
# Exibir a tabela de resultados
print("\nTabela de Resultados ADF:")
print(results_df.to_string(index=False))
Lambda da transformação Box-Cox: -0.32579940561959647
Tabela de Resultados ADF:
Tipo ADF Statistic p-value Critical Value 1% Critical Value 5% Critical Value 10%
Série Original 7.921914e-01 0.991509 -3.472161 -2.879895 -2.576557
Tendência 6.421524e-01 0.988610 -3.475325 -2.881275 -2.577293
Sazonalidade -3.524059e+15 0.000000 -3.471374 -2.879552 -2.576373
Características Gasto de energia elétrica domiciliar¶
Variância Estável¶
Observação: A análise visual da série temporal indica que a variabilidade dos dados parece ser relativamente constante ao longo do tempo, o que sugere uma variância estável (homoscedasticidade). Não há grandes flutuações na amplitude dos dados ao longo dos anos, embora existam variações mensais esperadas.
Tendência¶
Observação: A decomposição da série temporal revelou uma leve tendência ascendente ao longo do período analisado. Isso pode indicar um aumento gradual no consumo de energia familiar ao longo dos anos.
Sazonalidade¶
Observação: A decomposição também mostrou um padrão sazonal claro, com flutuações que se repetem a cada 12 meses. Este comportamento é típico em séries relacionadas ao consumo de energia, que tende a variar de acordo com as estações do ano (por exemplo, maior consumo no verão devido ao uso de ar-condicionado).
Funções de Autocorrelação (ACF) e Autocorrelação Parcial (PACF)¶
- ACF: A função de autocorrelação mostrou correlações significativas em várias defasagens, especialmente nos primeiros meses, confirmando a presença de dependência temporal e sazonalidade na série.
- PACF: A função de autocorrelação parcial indicou que a correlação de curto prazo é importante (as primeiras defasagens são significativas), o que é comum em séries temporais com tendência e sazonalidade.
2º Volume de Vendas no Varejo - Hiper/Supermercado: Indica o nível de consumo no setor de hipermercados e supermercados¶
# Carregar os dados
file_path = 'Hiper_supermercado.xlsx'
hiper_supermercado_df = pd.read_excel(file_path)
# Converter a coluna de data para o formato datetime e definir como índice
hiper_supermercado_df['ref.date'] = pd.to_datetime(hiper_supermercado_df['ref.date'])
hiper_supermercado_df.set_index('ref.date', inplace=True)
# Converter para série temporal
hiper_supermercado_ts = hiper_supermercado_df['value']
# Plotar a série temporal original
plt.figure(figsize=(12, 6))
plt.plot(hiper_supermercado_ts, color='black')
plt.title('Série Temporal de Hiper/Supermercado')
plt.xlabel('Ano')
plt.ylabel('Volume de Vendas')
plt.grid(True)
plt.show()
# Plotar ACF e PACF para a série original
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(hiper_supermercado_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) - Série Original')
plt.subplot(1, 2, 2)
plot_pacf(hiper_supermercado_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) - Série Original')
plt.tight_layout()
plt.show()
# Aplicar a transformação Box-Cox (apenas se todos os valores forem positivos)
if np.all(hiper_supermercado_ts > 0):
hiper_supermercado_ts_boxcox, lambda_boxcox = stats.boxcox(hiper_supermercado_ts)
else:
hiper_supermercado_ts_boxcox = hiper_supermercado_ts
lambda_boxcox = None
# Plotar a série transformada com Box-Cox
plt.figure(figsize=(12, 6))
plt.plot(hiper_supermercado_ts.index, hiper_supermercado_ts_boxcox, color='orange')
plt.title('Série Transformada (Box-Cox)')
plt.xlabel('Ano')
plt.ylabel('Volume de Vendas (Transformado)')
plt.grid(True)
plt.show()
# Exibir o valor de lambda utilizado na transformação, se aplicável
if lambda_boxcox is not None:
print(f'Lambda da transformação Box-Cox: {lambda_boxcox}')
# Decomposição da série temporal
decomposition = seasonal_decompose(hiper_supermercado_ts, model='additive')
# Criar gráficos individuais para cada componente
fig, axs = plt.subplots(3, 1, figsize=(12, 12), sharex=True)
# Plotar tendência
axs[0].plot(decomposition.trend, color='blue')
axs[0].set_title('Tendência')
axs[0].set_ylabel('Tendência')
axs[0].grid(True)
# Plotar sazonalidade
axs[1].plot(decomposition.seasonal, color='red')
axs[1].set_title('Sazonalidade')
axs[1].set_ylabel('Sazonalidade')
axs[1].grid(True)
# Plotar resíduos
axs[2].plot(decomposition.resid, color='green')
axs[2].set_title('Resíduos')
axs[2].set_xlabel('Tempo')
axs[2].set_ylabel('Resíduos')
axs[2].grid(True)
plt.tight_layout()
plt.show()
# Teste de Dickey-Fuller Aumentado (ADF) para a série original
adf_result = adfuller(hiper_supermercado_ts.dropna())
# Teste de Dickey-Fuller Aumentado (ADF) para a tendência e sazonalidade
adf_trend = adfuller(decomposition.trend.dropna())
adf_seasonal = adfuller(decomposition.seasonal.dropna())
# Ajustar a série removendo a tendência e a sazonalidade se necessário
ts_adjusted = hiper_supermercado_ts.copy()
# Remover tendência
if adf_trend[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.trend
# Remover sazonalidade
if adf_seasonal[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.seasonal
# Plotar ACF e PACF após ajustes
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) após ajuste - Hiper/Supermercado')
plt.subplot(1, 2, 2)
plot_pacf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) após ajuste - Hiper/Supermercado')
plt.tight_layout()
plt.show()
# Criar um DataFrame com os resultados dos testes ADF
results_df = pd.DataFrame({
'Tipo': ['Série Original', 'Tendência', 'Sazonalidade'],
'ADF Statistic': [adf_result[0], adf_trend[0], adf_seasonal[0]],
'p-value': [adf_result[1], adf_trend[1], adf_seasonal[1]],
'Critical Value 1%': [adf_result[4]['1%'], adf_trend[4]['1%'], adf_seasonal[4]['1%']],
'Critical Value 5%': [adf_result[4]['5%'], adf_trend[4]['5%'], adf_seasonal[4]['5%']],
'Critical Value 10%': [adf_result[4]['10%'], adf_trend[4]['10%'], adf_seasonal[4]['10%']]
})
# Exibir a tabela de resultados
print("\nTabela de Resultados ADF:")
print(results_df.to_string(index=False))
Lambda da transformação Box-Cox: -1.6644567567561837
Tabela de Resultados ADF:
Tipo ADF Statistic p-value Critical Value 1% Critical Value 5% Critical Value 10%
Série Original -1.490154e+00 0.538376 -3.472431 -2.880013 -2.576619
Tendência -4.422626e-01 0.902800 -3.475637 -2.881410 -2.577365
Sazonalidade -4.123770e+15 0.000000 -3.471633 -2.879665 -2.576434
Características Hiper/Supermercados¶
Variância Estável¶
Observação: A variabilidade da série temporal de vendas no setor de hiper/supermercados parece ser relativamente constante ao longo do tempo, o que sugere uma variância estável (homoscedasticidade). Embora existam flutuações mensais, elas não parecem aumentar ou diminuir consistentemente ao longo do período analisado.
Tendência¶
Observação: A decomposição da série revelou uma tendência ascendente ao longo do tempo. Isso indica que o volume de vendas nos hiper/supermercados aumentou gradualmente ao longo dos anos, o que pode estar associado ao crescimento econômico ou mudanças nos hábitos de consumo.
Sazonalidade¶
Observação: A decomposição também mostrou um padrão sazonal claro, com picos regulares que provavelmente coincidem com períodos de alta demanda, como as festas de fim de ano. Esse comportamento sazonal é típico em séries de vendas no varejo.
Funções de Autocorrelação (ACF) e Autocorrelação Parcial (PACF)¶
ACF: A função de autocorrelação exibiu correlações significativas em várias defasagens, indicando a presença de dependência temporal e sazonalidade. A periodicidade nas correlações reforça a presença de sazonalidade.
PACF: A função de autocorrelação parcial mostrou correlações significativas nas primeiras defasagens, indicando que há uma forte correlação de curto prazo na série.
O comportamento diferenciado da PACF entre as duas últimas séries reflete a diferença na complexidade dos processos subjacentes que governam cada série. Enquanto a série de Energia Familiar pode ser mais adequadamente modelada por um processo autorregressivo simples com tendência e sazonalidade anual, a série de Hiper/Supermercado pode requerer um modelo mais complexo que considere múltiplas sazonalidades ou ciclos de longo prazo.
3° IPCA (Índice Nacional de Preços ao Consumidor Amplo)¶
# Carregar os dados
file_path = 'ipca.xlsx'
ipca_df = pd.read_excel(file_path)
# Converter a coluna de data para o formato datetime e definir como índice
ipca_df['ref.date'] = pd.to_datetime(ipca_df['ref.date'])
ipca_df.set_index('ref.date', inplace=True)
# Converter para série temporal
ipca_ts = ipca_df['value']
# Plotar a série temporal original
plt.figure(figsize=(12, 6))
plt.plot(ipca_ts, color='black')
plt.title('Série Temporal do IPCA')
plt.xlabel('Ano')
plt.ylabel('Variação Mensal (%)')
plt.grid(True)
plt.show()
# Plotar ACF e PACF para a série original
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(ipca_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) - Série Original')
plt.subplot(1, 2, 2)
plot_pacf(ipca_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) - Série Original')
plt.tight_layout()
plt.show()
# Aplicar a transformação Box-Cox (apenas se todos os valores forem positivos)
if np.all(ipca_ts > 0):
ipca_ts_boxcox, lambda_boxcox = stats.boxcox(ipca_ts)
else:
ipca_ts_boxcox = ipca_ts
lambda_boxcox = None
# Plotar a série transformada com Box-Cox
plt.figure(figsize=(12, 6))
plt.plot(ipca_ts.index, ipca_ts_boxcox, color='orange')
plt.title('Série Transformada (Box-Cox)')
plt.xlabel('Ano')
plt.ylabel('Variação Mensal (%) (Transformado)')
plt.grid(True)
plt.show()
# Exibir o valor de lambda utilizado na transformação, se aplicável
if lambda_boxcox is not None:
print(f'Lambda da transformação Box-Cox: {lambda_boxcox}')
# Decomposição da série temporal
decomposition = seasonal_decompose(ipca_ts, model='additive')
# Criar gráficos individuais para cada componente
fig, axs = plt.subplots(3, 1, figsize=(12, 12), sharex=True)
# Plotar tendência
axs[0].plot(decomposition.trend, color='blue')
axs[0].set_title('Tendência')
axs[0].set_ylabel('Tendência')
axs[0].grid(True)
# Plotar sazonalidade
axs[1].plot(decomposition.seasonal, color='red')
axs[1].set_title('Sazonalidade')
axs[1].set_ylabel('Sazonalidade')
axs[1].grid(True)
# Plotar resíduos
axs[2].plot(decomposition.resid, color='green')
axs[2].set_title('Resíduos')
axs[2].set_xlabel('Tempo')
axs[2].set_ylabel('Resíduos')
axs[2].grid(True)
plt.tight_layout()
plt.show()
# Teste de Dickey-Fuller Aumentado (ADF) para a série original
adf_result = adfuller(ipca_ts.dropna())
# Teste de Dickey-Fuller Aumentado (ADF) para a tendência e sazonalidade
adf_trend = adfuller(decomposition.trend.dropna())
adf_seasonal = adfuller(decomposition.seasonal.dropna())
# Ajustar a série removendo a tendência e a sazonalidade se necessário
ts_adjusted = ipca_ts.copy()
# Remover tendência
if adf_trend[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.trend
# Remover sazonalidade
if adf_seasonal[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.seasonal
# Plotar ACF e PACF após ajustes
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) após ajuste - IPCA')
plt.subplot(1, 2, 2)
plot_pacf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) após ajuste - IPCA')
plt.tight_layout()
plt.show()
# Criar um DataFrame com os resultados dos testes ADF
results_df = pd.DataFrame({
'Tipo': ['Série Original', 'Tendência', 'Sazonalidade'],
'ADF Statistic': [adf_result[0], adf_trend[0], adf_seasonal[0]],
'p-value': [adf_result[1], adf_trend[1], adf_seasonal[1]],
'Critical Value 1%': [adf_result[4]['1%'], adf_trend[4]['1%'], adf_seasonal[4]['1%']],
'Critical Value 5%': [adf_result[4]['5%'], adf_trend[4]['5%'], adf_seasonal[4]['5%']],
'Critical Value 10%': [adf_result[4]['10%'], adf_trend[4]['10%'], adf_seasonal[4]['10%']]
})
# Exibir a tabela de resultados
print("\nTabela de Resultados ADF:")
print(results_df.to_string(index=False))
Tabela de Resultados ADF:
Tipo ADF Statistic p-value Critical Value 1% Critical Value 5% Critical Value 10%
Série Original -6.783771e+00 2.461586e-09 -3.468502 -2.878298 -2.575704
Tendência -2.346546e+00 1.573948e-01 -3.474416 -2.880878 -2.577081
Sazonalidade -3.320551e+15 0.000000e+00 -3.471896 -2.879780 -2.576495
Características IPCA¶
Variância Estável¶
Observação: A série do IPCA apresenta flutuações na variação mensal, mas a variabilidade dessas flutuações parece ser relativamente constante ao longo do tempo. Isso sugere uma variância estável (homoscedasticidade), apesar de haver períodos com picos mais altos de variação.
Tendência¶
Observação: A decomposição da série não revelou uma tendência clara. Isso é esperado em uma série de variação mensal do índice de preços, que deve oscilar em torno de uma média sem uma tendência de longo prazo, já que o IPCA é uma medida de inflação e reflete mudanças de curto prazo nos preços.
Sazonalidade¶
Observação: A decomposição da série mostrou um padrão sazonal presente, com flutuações que se repetem anualmente. Esse comportamento sazonal é típico em séries de inflação, onde certos períodos do ano, como as festas de fim de ano, tendem a mostrar variações nos preços mais pronunciadas.
Funções de Autocorrelação (ACF) e Autocorrelação Parcial (PACF)¶
ACF: A função de autocorrelação exibiu correlações significativas nas primeiras defasagens e uma diminuição subsequente, o que é esperado em uma série com componentes sazonais. A presença de correlações em defasagens específicas sugere dependências temporais de curto prazo.
PACF: A função de autocorrelação parcial indicou correlações significativas nas primeiras defasagens, particularmente nas defasagens de 12 meses, que reforçam a presença de sazonalidade anual na série.
A série do IPCA mostra uma variância estável, ausência de uma tendência clara, mas com uma sazonalidade anual bem definida. As análises de ACF e PACF confirmam a presença de dependências temporais e sazonais, sugerindo que modelos sazonais, como SARIMA, podem ser apropriados para capturar essas características ao modelar e prever o IPCA.
4º Câmbio (Dólar e Euro, compra e venda)¶
# Importar as bibliotecas necessárias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from pandas.plotting import register_matplotlib_converters
# Carregar os dados (supondo que estão em um arquivo Excel)
euro_venda_df = pd.read_excel("serie_euro_venda_livre.xlsx")
# Convert 'value' to numeric, forcing errors to NaN if needed
euro_venda_df['value'] = pd.to_numeric(euro_venda_df['value'], errors='coerce')
# Resample by month on the 'ref.date' column, only calculating the mean for numeric columns
euro_venda_monthly_df = euro_venda_df.resample('M', on='ref.date').mean(numeric_only=True)
# Convert to a time series if needed
euro_venda_ts = euro_venda_monthly_df['value']
# Plotar a série temporal original
plt.figure(figsize=(12, 6))
plt.plot(euro_venda_ts, color='black')
plt.title('Série Temporal de Vendas em Euro')
plt.xlabel('Data')
plt.ylabel('Volume de Vendas')
plt.grid(True)
plt.show()
# Plotar ACF e PACF para a série original
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(euro_venda_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) - Série Original')
plt.subplot(1, 2, 2)
plot_pacf(euro_venda_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) - Série Original')
plt.tight_layout()
plt.show()
# Aplicar a transformação Box-Cox (apenas se todos os valores forem positivos)
if np.all(euro_venda_ts > 0):
euro_venda_ts_boxcox, lambda_boxcox = stats.boxcox(euro_venda_ts)
else:
euro_venda_ts_boxcox = euro_venda_ts
lambda_boxcox = None
# Plotar a série transformada com Box-Cox
plt.figure(figsize=(12, 6))
plt.plot(euro_venda_ts.index, euro_venda_ts_boxcox, color='orange')
plt.title('Série Transformada (Box-Cox)')
plt.xlabel('Data')
plt.ylabel('Volume de Vendas (Transformado)')
plt.grid(True)
plt.show()
# Exibir o valor de lambda utilizado na transformação, se aplicável
if lambda_boxcox is not None:
print(f'Lambda da transformação Box-Cox: {lambda_boxcox}')
# Decomposição da série temporal
decomposition = seasonal_decompose(euro_venda_ts, model='additive')
# Criar gráficos individuais para cada componente
fig, axs = plt.subplots(3, 1, figsize=(12, 12), sharex=True)
# Plotar tendência
axs[0].plot(decomposition.trend, color='blue')
axs[0].set_title('Tendência')
axs[0].set_ylabel('Tendência')
axs[0].grid(True)
# Plotar sazonalidade
axs[1].plot(decomposition.seasonal, color='red')
axs[1].set_title('Sazonalidade')
axs[1].set_ylabel('Sazonalidade')
axs[1].grid(True)
# Plotar resíduos
axs[2].plot(decomposition.resid, color='green')
axs[2].set_title('Resíduos')
axs[2].set_xlabel('Data')
axs[2].set_ylabel('Resíduos')
axs[2].grid(True)
plt.tight_layout()
plt.show()
# Teste de Dickey-Fuller Aumentado (ADF) para a série original
adf_result = adfuller(euro_venda_ts.dropna())
# Teste de Dickey-Fuller Aumentado (ADF) para a tendência e sazonalidade
adf_trend = adfuller(decomposition.trend.dropna())
adf_seasonal = adfuller(decomposition.seasonal.dropna())
# Ajustar a série removendo a tendência e a sazonalidade se necessário
ts_adjusted = euro_venda_ts.copy()
# Remover tendência
if adf_trend[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.trend
# Remover sazonalidade
if adf_seasonal[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.seasonal
# Plotar ACF e PACF após ajustes
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) após ajuste - Vendas em Euro')
plt.subplot(1, 2, 2)
plot_pacf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) após ajuste - Vendas em Euro')
plt.tight_layout()
plt.show()
# Criar um DataFrame com os resultados dos testes ADF
results_df = pd.DataFrame({
'Tipo': ['Série Original', 'Tendência', 'Sazonalidade'],
'ADF Statistic': [adf_result[0], adf_trend[0], adf_seasonal[0]],
'p-value': [adf_result[1], adf_trend[1], adf_seasonal[1]],
'Critical Value 1%': [adf_result[4]['1%'], adf_trend[4]['1%'], adf_seasonal[4]['1%']],
'Critical Value 5%': [adf_result[4]['5%'], adf_trend[4]['5%'], adf_seasonal[4]['5%']],
'Critical Value 10%': [adf_result[4]['10%'], adf_trend[4]['10%'], adf_seasonal[4]['10%']]
})
# Exibir a tabela de resultados
print("\nTabela de Resultados ADF:")
print(results_df.to_string(index=False))
C:\Users\027696911\AppData\Local\Temp\ipykernel_15236\2618543574.py:20: FutureWarning: 'M' is deprecated and will be removed in a future version, please use 'ME' instead.
euro_venda_monthly_df = euro_venda_df.resample('M', on='ref.date').mean(numeric_only=True)
Lambda da transformação Box-Cox: 0.18624680323827733
Tabela de Resultados ADF:
Tipo ADF Statistic p-value Critical Value 1% Critical Value 5% Critical Value 10%
Série Original -6.803035e-01 0.851786 -3.468502 -2.878298 -2.575704
Tendência -9.282486e-01 0.778527 -3.475018 -2.881141 -2.577221
Sazonalidade -1.000543e+15 0.000000 -3.471633 -2.879665 -2.576434
Características Euro Venda Livre¶
Variância Estável¶
Observação: A série do Euro Venda Livre apresenta uma variabilidade considerável ao longo do tempo, mas essa variabilidade não mostra um aumento ou diminuição consistente ao longo do período analisado. A variância parece ser relativamente estável, apesar de haver variações significativas no valor do euro.
Tendência¶
Observação: A decomposição da série revela uma tendência clara ao longo do tempo. Observamos períodos em que o valor do euro aumenta consistentemente e outros em que ele diminui, refletindo as condições econômicas globais e políticas monetárias que afetam o câmbio.
Sazonalidade¶
Observação: A decomposição da série sugere a presença de uma componente sazonal. No entanto, essa sazonalidade parece ser menos pronunciada comparada a outras séries como a do IPCA. A sazonalidade pode estar ligada a padrões sazonais no comércio internacional ou em políticas monetárias que afetam a taxa de câmbio.
Funções de Autocorrelação (ACF) e Autocorrelação Parcial (PACF)¶
ACF: A função de autocorrelação mostrou correlações significativas em várias defasagens, com um decaimento gradual, o que sugere a presença de dependências temporais. Isso é comum em séries financeiras, onde as mudanças passadas continuam a influenciar os valores futuros por algum tempo.
PACF: A função de autocorrelação parcial apresentou significância nas primeiras defasagens, indicando que o valor atual do euro está diretamente influenciado pelos valores recentes, com uma diminuição da influência conforme o número de defasagens aumenta.
A série do Euro Venda Livre apresenta uma variância estável, uma tendência clara e uma sazonalidade detectável, mas não muito pronunciada. As análises de ACF e PACF confirmam a presença de dependências temporais, sugerindo que modelos ARIMA ou outros modelos de séries temporais que incorporem tendências e possíveis componentes sazonais podem ser adequados para modelar essa série.
5º Vendas de Veículos Totais:¶
# Importar as bibliotecas necessárias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from scipy import stats
# Carregar os dados
file_path = "Vendas_Veic_Total.xlsx" # Atualize com o caminho correto do arquivo
vendas_veic_df = pd.read_excel(file_path)
# Converter a coluna de data para o formato datetime
vendas_veic_df['ref.date'] = pd.to_datetime(vendas_veic_df['ref.date'])
# Converter para série temporal
vendas_ts = vendas_veic_df.set_index('ref.date')['value']
# Plotar a série temporal original
plt.figure(figsize=(12, 6))
plt.plot(vendas_ts, color='black')
plt.title('Série Temporal de Vendas de Veículos')
plt.xlabel('Data')
plt.ylabel('Volume de Vendas')
plt.grid(True)
plt.show()
# Plotar ACF e PACF para a série original
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(vendas_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) - Série Original')
plt.subplot(1, 2, 2)
plot_pacf(vendas_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) - Série Original')
plt.tight_layout()
plt.show()
# Aplicar a transformação Box-Cox (apenas se todos os valores forem positivos)
if np.all(vendas_ts > 0):
vendas_ts_boxcox, lambda_boxcox = stats.boxcox(vendas_ts.dropna())
else:
vendas_ts_boxcox = vendas_ts.dropna()
lambda_boxcox = None
# Plotar a série transformada com Box-Cox
plt.figure(figsize=(12, 6))
plt.plot(vendas_ts.index, vendas_ts_boxcox, color='orange')
plt.title('Série Transformada (Box-Cox)')
plt.xlabel('Data')
plt.ylabel('Volume de Vendas (Transformado)')
plt.grid(True)
plt.show()
# Exibir o valor de lambda utilizado na transformação, se aplicável
if lambda_boxcox is not None:
print(f'Lambda da transformação Box-Cox: {lambda_boxcox}')
# Decomposição da série temporal
decomposition = seasonal_decompose(vendas_ts.dropna(), model='additive')
# Criar gráficos individuais para cada componente
fig, axs = plt.subplots(3, 1, figsize=(12, 12), sharex=True)
# Plotar tendência
axs[0].plot(decomposition.trend, color='blue')
axs[0].set_title('Tendência')
axs[0].set_ylabel('Tendência')
axs[0].grid(True)
# Plotar sazonalidade
axs[1].plot(decomposition.seasonal, color='red')
axs[1].set_title('Sazonalidade')
axs[1].set_ylabel('Sazonalidade')
axs[1].grid(True)
# Plotar resíduos
axs[2].plot(decomposition.resid, color='green')
axs[2].set_title('Resíduos')
axs[2].set_xlabel('Data')
axs[2].set_ylabel('Resíduos')
axs[2].grid(True)
plt.tight_layout()
plt.show()
# Teste de Dickey-Fuller Aumentado (ADF) para a série original
adf_result = adfuller(vendas_ts.dropna())
# Teste de Dickey-Fuller Aumentado (ADF) para a tendência e sazonalidade
adf_trend = adfuller(decomposition.trend.dropna())
adf_seasonal = adfuller(decomposition.seasonal.dropna())
# Ajustar a série removendo a tendência e a sazonalidade se necessário
ts_adjusted = vendas_ts.copy()
# Remover tendência
if adf_trend[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.trend
# Remover sazonalidade
if adf_seasonal[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.seasonal
# Plotar ACF e PACF após ajustes
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) após ajuste - Vendas de Veículos')
plt.subplot(1, 2, 2)
plot_pacf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) após ajuste - Vendas de Veículos')
plt.tight_layout()
plt.show()
# Criar um DataFrame com os resultados dos testes ADF
results_df = pd.DataFrame({
'Tipo': ['Série Original', 'Tendência', 'Sazonalidade'],
'ADF Statistic': [adf_result[0], adf_trend[0], adf_seasonal[0]],
'p-value': [adf_result[1], adf_trend[1], adf_seasonal[1]],
'Critical Value 1%': [adf_result[4]['1%'], adf_trend[4]['1%'], adf_seasonal[4]['1%']],
'Critical Value 5%': [adf_result[4]['5%'], adf_trend[4]['5%'], adf_seasonal[4]['5%']],
'Critical Value 10%': [adf_result[4]['10%'], adf_trend[4]['10%'], adf_seasonal[4]['10%']]
})
# Exibir a tabela de resultados
print("\nTabela de Resultados ADF:")
print(results_df.to_string(index=False))
Lambda da transformação Box-Cox: 0.6104894229863539
Tabela de Resultados ADF:
Tipo ADF Statistic p-value Critical Value 1% Critical Value 5% Critical Value 10%
Série Original -1.375842e+00 0.593801 -3.471374 -2.879552 -2.576373
Tendência -2.073552e+00 0.255282 -3.475018 -2.881141 -2.577221
Sazonalidade -4.999339e+15 0.000000 -3.471374 -2.879552 -2.576373
Características Vendas de Veículos Totais¶
1. Variância Estável¶
Observação: A série de vendas totais de veículos apresenta variações significativas ao longo do tempo, mas a amplitude dessas variações não mostra um padrão de aumento ou diminuição consistente. Isso sugere que a variância é relativamente estável, embora existam períodos com flutuações mais pronunciadas.
Tendência¶
Observação: A decomposição da série revela uma tendência clara ao longo do tempo. Observa-se uma queda acentuada nas vendas em determinados períodos, seguida por recuperações graduais. Esses movimentos podem estar relacionados a fatores econômicos, como crises ou mudanças nas políticas econômicas que afetam o poder de compra dos consumidores.
Sazonalidade¶
Observação: A decomposição da série mostra um padrão sazonal claro, com flutuações que se repetem anualmente. Esse comportamento sazonal é típico em séries de vendas, onde certos meses do ano, como dezembro, podem apresentar vendas mais altas devido a fatores como promoções e maior consumo durante as festas.
Funções de Autocorrelação (ACF) e Autocorrelação Parcial (PACF)¶
ACF: A função de autocorrelação mostrou correlações significativas em várias defasagens, indicando a presença de dependência temporal e sazonalidade. A periodicidade nas correlações reforça a presença de sazonalidade.
PACF: A função de autocorrelação parcial apresentou valores significativos nas primeiras defasagens, sugerindo que as vendas atuais de veículos são influenciadas fortemente pelas vendas recentes.
A série de vendas totais de veículos apresenta uma variância relativamente estável, uma tendência marcada e uma sazonalidade clara. As análises de ACF e PACF confirmam a presença de dependências temporais e sazonais, o que sugere que modelos como o SARIMA podem ser adequados para capturar a estrutura dessa série.
6º (Receita Nominal de Serviços no Brasil). desempenho do setor de serviços¶
# Importar as bibliotecas necessárias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from scipy import stats
# Carregar os dados
file_path = "Receita_Nom_Servicos_Brasil.xlsx" # Atualize com o caminho correto do arquivo
receita_servicos_df = pd.read_excel(file_path)
# Converter a coluna de data para o formato datetime
receita_servicos_df['ref.date'] = pd.to_datetime(receita_servicos_df['ref.date'])
# Converter para série temporal
receita_ts = receita_servicos_df.set_index('ref.date')['value']
# Plotar a série temporal original
plt.figure(figsize=(12, 6))
plt.plot(receita_ts, color='black')
plt.title('Série Temporal de Receita de Serviços')
plt.xlabel('Data')
plt.ylabel('Valor da Receita')
plt.grid(True)
plt.show()
# Plotar ACF e PACF para a série original
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(receita_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) - Série Original')
plt.subplot(1, 2, 2)
plot_pacf(receita_ts.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) - Série Original')
plt.tight_layout()
plt.show()
# Aplicar a transformação Box-Cox (apenas se todos os valores forem positivos)
if np.all(receita_ts > 0):
receita_ts_boxcox, lambda_boxcox = stats.boxcox(receita_ts.dropna())
else:
receita_ts_boxcox = receita_ts.dropna()
lambda_boxcox = None
# Plotar a série transformada com Box-Cox
plt.figure(figsize=(12, 6))
plt.plot(receita_ts.index, receita_ts_boxcox, color='orange')
plt.title('Série Transformada (Box-Cox)')
plt.xlabel('Data')
plt.ylabel('Valor da Receita (Transformado)')
plt.grid(True)
plt.show()
# Exibir o valor de lambda utilizado na transformação, se aplicável
if lambda_boxcox is not None:
print(f'Lambda da transformação Box-Cox: {lambda_boxcox}')
# Decomposição da série temporal
decomposition = seasonal_decompose(receita_ts.dropna(), model='additive')
# Criar gráficos individuais para cada componente
fig, axs = plt.subplots(3, 1, figsize=(12, 12), sharex=True)
# Plotar tendência
axs[0].plot(decomposition.trend, color='blue')
axs[0].set_title('Tendência')
axs[0].set_ylabel('Tendência')
axs[0].grid(True)
# Plotar sazonalidade
axs[1].plot(decomposition.seasonal, color='red')
axs[1].set_title('Sazonalidade')
axs[1].set_ylabel('Sazonalidade')
axs[1].grid(True)
# Plotar resíduos
axs[2].plot(decomposition.resid, color='green')
axs[2].set_title('Resíduos')
axs[2].set_xlabel('Data')
axs[2].set_ylabel('Resíduos')
axs[2].grid(True)
plt.tight_layout()
plt.show()
# Teste de Dickey-Fuller Aumentado (ADF) para a série original
adf_result = adfuller(receita_ts.dropna())
# Teste de Dickey-Fuller Aumentado (ADF) para a tendência e sazonalidade
adf_trend = adfuller(decomposition.trend.dropna())
adf_seasonal = adfuller(decomposition.seasonal.dropna())
# Ajustar a série removendo a tendência e a sazonalidade se necessário
ts_adjusted = receita_ts.copy()
# Remover tendência
if adf_trend[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.trend
# Remover sazonalidade
if adf_seasonal[1] > 0.05:
ts_adjusted = ts_adjusted - decomposition.seasonal
# Plotar ACF e PACF após ajustes
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plot_acf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação (ACF) após ajuste - Receita de Serviços')
plt.subplot(1, 2, 2)
plot_pacf(ts_adjusted.dropna(), ax=plt.gca(), lags=50)
plt.title('Função de Autocorrelação Parcial (PACF) após ajuste - Receita de Serviços')
plt.tight_layout()
plt.show()
# Criar um DataFrame com os resultados dos testes ADF
results_df = pd.DataFrame({
'Tipo': ['Série Original', 'Tendência', 'Sazonalidade'],
'ADF Statistic': [adf_result[0], adf_trend[0], adf_seasonal[0]],
'p-value': [adf_result[1], adf_trend[1], adf_seasonal[1]],
'Critical Value 1%': [adf_result[4]['1%'], adf_trend[4]['1%'], adf_seasonal[4]['1%']],
'Critical Value 5%': [adf_result[4]['5%'], adf_trend[4]['5%'], adf_seasonal[4]['5%']],
'Critical Value 10%': [adf_result[4]['10%'], adf_trend[4]['10%'], adf_seasonal[4]['10%']]
})
# Exibir a tabela de resultados
print("\nTabela de Resultados ADF:")
print(results_df.to_string(index=False))
Lambda da transformação Box-Cox: -0.7301581324457503
Tabela de Resultados ADF:
Tipo ADF Statistic p-value Critical Value 1% Critical Value 5% Critical Value 10%
Série Original -2.164204e-02 0.956705 -3.475325 -2.881275 -2.577293
Tendência 4.351461e-01 0.982763 -3.479372 -2.883037 -2.578234
Sazonalidade -2.718574e+15 0.000000 -3.475953 -2.881548 -2.577439
Características Receita Nominal de Serviços¶
1º Variância Estável¶
Observação: A série da Receita Nominal de Serviços apresenta variações ao longo do tempo, mas a amplitude dessas variações não demonstra um padrão de aumento ou diminuição consistente. A variância parece ser relativamente estável ao longo do período analisado, mesmo com flutuações nos valores.
2º Tendência¶
Observação: A decomposição da série revelou uma tendência clara de crescimento ao longo do tempo, o que é esperado para uma medida econômica como a receita nominal, que tende a aumentar com o crescimento econômico e a inflação. Esse crescimento contínuo reflete a expansão do setor de serviços no Brasil.
3º Sazonalidade¶
Observação: A decomposição da série mostra um padrão sazonal claro, com variações que se repetem anualmente. Essa sazonalidade pode estar associada a ciclos econômicos anuais, como períodos de alta e baixa demanda por serviços em diferentes épocas do ano.
4º Funções de Autocorrelação (ACF) e Autocorrelação Parcial (PACF)¶
ACF: A função de autocorrelação mostrou correlações significativas em várias defasagens, confirmando a presença de dependência temporal e sazonalidade. A periodicidade observada nas correlações reforça a presença de sazonalidade anual.
PACF: A função de autocorrelação parcial apresentou valores significativos nas primeiras defasagens, sugerindo que a receita atual de serviços é influenciada pelos valores recentes, com a sazonalidade também sendo um fator importante.
A série da Receita Nominal de Serviços no Brasil apresenta uma variância estável, uma tendência crescente e uma sazonalidade anual bem definida. As análises de ACF e PACF confirmam a presença de dependências temporais e sazonais, sugerindo que modelos que incorporem essas características, como SARIMA, seriam adequados para modelar e prever essa série.