1. Introdução

Pedi ao ChatGPT a criação de um dataset com o seguinte prompt:

"Crie um dataset para análise de séries temporais sobre 5 tipos de sabores de sorvete:
1. Chocolate
2. Morango
3. Creme
4. Limão
5. Uva
As variáveis explicativas serão: Data, Sabor, Local de venda (supermercado, shopping, praia e cidade), Preço, Tamanhos do sorvete (Casquinha, 250 gramas, 500 gramas e 1 kilograma).
A variável resposta será Vendas, contendo o volume de vendas ao longo de 3 anos entre 2021 e 2024. 
As datas da variável Data deverá conter dados semanais.

Faça com que os sabores mais vendidos sejam baseados na preferência dos brasileiros."

Resultando em:

##          Data     Sabor Local de venda Preço   Tamanho Vendas
##        <IDat>    <char>         <char> <num>    <char>  <int>
## 1: 2021-01-03 Chocolate   Supermercado  3.41 Casquinha     30
## 2: 2021-01-03 Chocolate   Supermercado  6.52      250g     33
## 3: 2021-01-03 Chocolate   Supermercado 10.94      500g     26
## 4: 2021-01-03 Chocolate   Supermercado 20.83       1kg     28
## 5: 2021-01-03 Chocolate       Shopping  3.16 Casquinha     31
## 6: 2021-01-03 Chocolate       Shopping  6.56      250g     21

A análise a seguir foi feita baseada nestes dados: Vendas semanais de sorvetes entre 2021 e 2023, com foco em sabores, tamanhos, estabelecimentos e padrões temporais.

Esta análise consiste desde da Análise Exploratória até a Previsão dos Dados. Pedi para que o ChatGPT colocasse nesse documento os insights que fizemos de forma resumida e clara.

Será notório quando estivermos analisando a Decomposição da Série que faltou algo a ser solicitado ao prompt (será que vocês sabem o que faltou?). Farei uma Parte 2 deste mesmo dataset, porém solicitando à IA a inclusão do que está faltando e veremos se teremos conclusões diferentes das encontradas com esses dados (com certeza teremos!).

2. Análise Exploratória

## # A tibble: 5 × 2
##   sabor     vendas_total
##   <fct>            <int>
## 1 Chocolate        72732
## 2 Morango          59315
## 3 Creme            47788
## 4 Limão            36986
## 5 Uva              26361

Insight: Chocolate lidera as vendas, Uva é o sabor menos vendido.

Insight: Uva tem o maior ticket médio, Morango o menor.

Insight: Chocolate combina alto volume com ticket médio equilibrado. Uva tem alta rentabilidade mas baixa demanda.

Insight: Casquinhas vendem mais na praia. 1kg gera mais receita. Ticket médio é consistente entre estabelecimentos.

3. Análise de Correlação

## `geom_smooth()` using formula = 'y ~ x'

Insight: Relação linear clara, mas com diferentes inclinações por tamanho. 1kg tem maior valor unitário.

## `geom_smooth()` using formula = 'y ~ x'

Insight: Chocolate domina em todos os tamanhos. Uva tem menor volume de vendas.

4. Testes de Hipóteses

• Existe diferença entre os tipos de estabelecimento?

##                  Df Sum Sq Mean Sq F value Pr(>F)
## estabelecimento   3   0.09  0.0314   0.066  0.978
## Residuals       624 296.35  0.4749

• Existe diferença entre os sabores?

##              Df Sum Sq Mean Sq F value  Pr(>F)    
## sabor         4   13.8   3.451   4.701 0.00094 ***
## Residuals   780  572.6   0.734                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Insight: Estabelecimentos não diferem significativamente no ticket médio. Sabores são diferentes entre si.

• Quais sabores diferem entre si?

dunnTest(ticket_medio ~ as.factor(sabor), data = dados_teste2, method = "bonferroni")
## Dunn (1964) Kruskal-Wallis multiple comparison
##   p-values adjusted with the Bonferroni method.
##             Comparison            Z     P.unadj      P.adj
## 1    Chocolate - Creme -0.007963971 0.993645738 1.00000000
## 2    Chocolate - Limão -0.967871364 0.333108617 1.00000000
## 3        Creme - Limão -0.959907393 0.337101825 1.00000000
## 4  Chocolate - Morango  0.433787551 0.664442722 1.00000000
## 5      Creme - Morango  0.441751523 0.658669022 1.00000000
## 6      Limão - Morango  1.401658915 0.161017125 1.00000000
## 7      Chocolate - Uva -2.835173715 0.004580077 0.04580077
## 8          Creme - Uva -2.827209744 0.004695556 0.04695556
## 9          Limão - Uva -1.867302351 0.061859377 0.61859377
## 10       Morango - Uva -3.268961267 0.001079431 0.01079431

Insight: O sabor Uva é o que se diferencia com relação aos demais sabores, exceto o sabor Limão.

5. Modelagem de Séries Temporais

# Gráfico: Decomposição STL
autoplot(decomposicao) + labs(title = "Decomposição STL da Série de Vendas Semanais")

Insight: A série apresenta tendência clara, sem sazonalidade marcada.

gg_season(dados_ts, vendas_total)

Insight: Não existe sazonalidade bem definida em nenhum dos anos.

Insight: AR(1) e MA(1) foram sugeridos como candidatos. Modelo ARIMA(2,0,0) foi o melhor ajustado.

# Gráfico: Diagnóstico dos resíduos
gg_tsresiduals(modelo_arima_2)

Insight: Resíduos são normais, homocedásticos, não autocorrelacionados.

6. Previsões

# Previsão geral
autoplot(previsao_25s, dados_ts)

Insight: A previsão geral é estável, consistente com o padrão da série.

# Previsão por sabor
autoplot(previsao_por_sabor, dados_sabor)

Insight: Chocolate e Morango são mais confiáveis. Uva tem alta incerteza.

# Previsão por tamanho
autoplot(previsao_por_tamanho, dados_tamanho)

Insight: Casquinha lidera em volume, mas 500g é mais previsível.

# Previsão por estabelecimento
autoplot(previsao_por_estabelecimento, dados_estabelecimento)

Insight: Cidade tem o melhor comportamento. Shopping é o mais incerto.

# Previsão por sabor + tamanho
autoplot(previsao_por_sabor_tam, dados_sabor_tam_ts) +
  labs(
    title = "Previsão de Vendas Totais por Sabor e Tamanho - 25 Semanas",
    x = "Data", y = "Vendas Totais"
  ) +
  facet_wrap(sabor ~ tamanho) +
  theme_minimal()

Insight: Chocolate Casquinha lidera com estabilidade. Uva tem problemas de previsibilidade em todos os tamanhos.

7. Acurácia dos Modelos por Grupo

## # A tibble: 4 × 11
##   tamanho   .model .type        ME  RMSE   MAE    MPE  MAPE  MASE RMSSE     ACF1
##   <chr>     <chr>  <chr>     <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>    <dbl>
## 1 1kg       ARIMA… Trai… -9.29e- 2  37.8  29.9 -2.43  12.5  0.702 0.692  0.00887
## 2 250g      ARIMA… Trai…  8.45e-14  41.0  33.3 -1.04   8.34 0.727 0.715  0.0180 
## 3 500g      ARIMA… Trai… -6.14e- 2  37.6  29.3 -1.45   9.35 0.636 0.657 -0.00765
## 4 Casquinha ARIMA… Trai…  3.48e- 2  38.7  31.8 -0.459  5.62 0.677 0.681 -0.0320
## # A tibble: 4 × 11
##   estabelecimento .model    .type        ME  RMSE   MAE    MPE  MAPE  MASE RMSSE
##   <chr>           <chr>     <chr>     <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>
## 1 Cidade          ARIMA(ve… Trai…  5.54e-15  40.5  32.3 -1.23   8.84 0.700 0.685
## 2 Praia           ARIMA(ve… Trai…  9.80e-14  39.2  30.8 -0.789  7.01 0.748 0.733
## 3 Shopping        ARIMA(ve… Trai… -1.55e-13  43.8  34.9 -1.75  10.6  0.717 0.715
## 4 Supermercado    ARIMA(ve… Trai… -1.27e- 1  43.9  34.7 -1.39   9.33 0.659 0.676
## # ℹ 1 more variable: ACF1 <dbl>
## # A tibble: 20 × 12
##    sabor    tamanho .model .type        ME  RMSE   MAE     MPE  MAPE  MASE RMSSE
##    <chr>    <chr>   <chr>  <chr>     <dbl> <dbl> <dbl>   <dbl> <dbl> <dbl> <dbl>
##  1 Chocola… 1kg     ARIMA… Trai… -1.73e- 3  18.7  14.8   -8.24  23.6 0.700 0.715
##  2 Chocola… 250g    ARIMA… Trai… -3.60e-12  20.1  16.0   -2.94  13.9 0.698 0.708
##  3 Chocola… 500g    ARIMA… Trai… -1.97e- 2  19.2  15.4   -4.51  17.5 0.689 0.670
##  4 Chocola… Casqui… ARIMA… Trai… -8.14e-14  20.8  16.8   -1.51  10.0 0.697 0.713
##  5 Creme    1kg     ARIMA… Trai… -1.79e-14  16.8  13.4  -16.5   36.0 0.743 0.721
##  6 Creme    250g    ARIMA… Trai… -2.17e-14  18.6  14.2   -6.25  19.9 0.721 0.733
##  7 Creme    500g    ARIMA… Trai… -3.17e-14  20.3  16.3  -17.1   35.5 0.676 0.671
##  8 Creme    Casqui… ARIMA… Trai… -1.56e- 2  20.1  16.3   -3.62  15.6 0.684 0.685
##  9 Limão    1kg     ARIMA… Trai… -2.49e-14  17.0  13.5  -32.4   54.3 0.659 0.674
## 10 Limão    250g    ARIMA… Trai… -2.03e-15  18.0  14.3  -14.3   31.7 0.722 0.731
## 11 Limão    500g    ARIMA… Trai… -3.00e-12  16.9  13.5  -20.6   40.5 0.699 0.696
## 12 Limão    Casqui… ARIMA… Trai…  3.61e-14  16.5  12.4   -4.06  15.6 0.697 0.731
## 13 Morango  1kg     ARIMA… Trai…  5.64e-13  18.6  15.6  -12.3   31.6 0.727 0.709
## 14 Morango  250g    ARIMA… Trai… -3.44e-14  17.6  13.9   -3.69  15.4 0.722 0.709
## 15 Morango  500g    ARIMA… Trai…  3.42e-12  19.9  15.7   -9.26  24.5 0.722 0.711
## 16 Morango  Casqui… ARIMA… Trai… -1.02e-13  20.5  17.1   -2.27  12.7 0.713 0.690
## 17 Uva      1kg     ARIMA… Trai… -1.30e-14  13.6  11.2 -Inf    Inf   0.777 0.745
## 18 Uva      250g    ARIMA… Trai… -1.23e- 2  17.3  13.7  -52.5   74.0 0.686 0.698
## 19 Uva      500g    ARIMA… Trai… -1.53e- 2  15.7  13.0  -29.5   53.6 0.745 0.722
## 20 Uva      Casqui… ARIMA… Trai… -3.07e-14  16.4  13.2   -9.25  25.7 0.722 0.722
## # ℹ 1 more variable: ACF1 <dbl>

Insight: MASE abaixo de 0.75 na maioria dos casos. Combinações com Uva e tamanhos grandes são menos previsíveis.

8. Conclusão


9. Considerações finais

Acredito que vocês devam ter entendido que o que faltou no prompt inicial tenha sido pedir a garantia da sazonalidade de vendas de sorvete também baseada no comportamento dos brasileiros. Assim, teríamos o componente sazonal atrelado principalmente ao verão e inverno no país, e provalmente o modelo escolhido teria sido outro.

O chat desse projeto foi bem extenso, então por conta disso não consigo revelar para vocês como a interação com o ChatGPT para essa análise foi muito enriquecedora, tanto observando os aspectos positivos da ferramenta (passagem do conhecimento adaptada para o meu perfil, conversa profunda sobre o tema, insights criados em conjunto, conhecimento amplo sobre a lingugaem R e seus pacotes, etc), assim como os aspectos negativos. (por exemplo, tive a experiência de ver o viés de confirmação da IA através de uma conclusão que havia feito e comentado no chat, porém posteriormente vi que essa conclusão estava equivocada e o ChatGPT ao invés de me corrigir, afirmou o meu erro como se fosse verdade). Por isso é sempre importante relembrar de nunca confiar 100% no que as IAs nos entregam, pois assim como nós até elas são passíveis de erros (pelo menos até o momento).