Forecast simples

Segue um exercício / desafio.

Dadas séries históricas, como a do print abaixo, como fazer o forecast para os próximos 12 meses?

Forecast é um assunto extremamente difícil, pelo simples motivo de que não conseguimos prever o futuro.

Há vários tipos de técnicas, média móvel, ARMA, ARIMA, cada uma adequada a uma situação específica. Em particular, o R tem muitos métodos.

Como fazer direto no Excel?

Ou utilizando um misto de Excel / R / python?

Uma solução possível. Uma macro que faz decomposição clássica (tendência + sazonalidade).

A sazonalidade considerada é de 12 meses.

Exemplo. Uma das séries era sazonal. O forecast vai seguir isto.

Link para download: https://1drv.ms/x/s!Aumr1P3FaK7jkWqkK0Xx3RgNLZ__?e=JNoCDG


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Anúncios

Função para detectar campos numéricos

Em relatórios, digamos do BI ou SAP, muitas vezes a informação numérica vem com um # ou alguma outra informação não numérica. Isto pode dar um erro de “Tipos incompatíveis” no código subquente.

Para tratar, podemos utilizar a função “IsNumeric”. Ela retorna verdadeiro se o campo for numérico, e falso se não for numérico (string, data).

If Information.IsNumeric( variável ) Then          

                ‘se for numérico, vai em frente

Else

                ‘se não for, faz algum tratamento

endif

Vide exemplo aqui.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Pequeno teste

Segue um exerciciozinho que é chato de fazer no braço, mas trivial para um computador resolver – seja excel, vba, python.

729 cubos formam um cubo maior de 9x9x9.

É possível formar três cubos menores a partir dos 729 cubos?

Ou seja, quero encontrar a, b e c inteiros tais que

9^3 = a^3 + b^3 + c^3

Basicamente é só fazer três loops aninhados, testando todas as possibilidades.

For a = 1 To 9
    For b = 1 To 9
        For c = 1 To 9
        
            If a * a * a + b * b * b + c * c * c = 729 Then
                MsgBox "a=" & a & ", b = " & b & ", c=" & c
            End If
        Next c
    Next b
Next a

Vai dar 6 respostas, mas todas permutações da mesma resposta.

Resultado 9^3 = 1^3 + 6^3 + 8^3, que é a única solução para inteiros positivos.

Para evitar isto no código, era só diminuir o espaço de busca, com o b começando de a+1 e o c começando de b+1 (ou seja, a<b<c).

For a = 1 To 9
    For b = a+1 To 9
        For c = b+1 To 9
        
            If a * a * a + b * b * b + c * c * c = 729 Then
                MsgBox "a=" & a & ", b = " & b & ", c=" & c
            End If
        Next c
    Next b
Next a

Download aqui.

Sobre o problema de Josephus

A macro simula várias rodadas do jogo, até sobrar só um.

Link para download.

Um array para armazenar quem está vivo ou não:

ReDim arrMorto(1 To n)

Rodar isso n-1 vezes

For i = 1 To n – 1 ‘Para cada rodada

    count = 0

    While count < passo

        ‘A formula complicada abaixo é para considerar quando a contagem dá a volta no círculo e volta para o primeiro

        pos = ((pos + 1 – 1) Mod (n)) + 1

       ‘só incrementa o contador se a pessoa na posição estiver viva

        If arrMorto(pos) = 0 Then

            count = count + 1

        End If

      ‘A pessoa que estiver exatamente na posição escolhida para ser eliminada, executa a instrução abaixo

        If count = passo Then

            arrMorto(pos) = 1 ‘A pessoa nesta posição morre

            colore (pos) ‘subrotina para colorir a bolinha

            timeout (0.5) ‘espera 0,5 segundo para criar efeito de animação

        End If

    Wend

Next i


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Teste: O problema de Josephus

O problema de Josephus é um jogo com dois parâmetros: número de participantes e distância entre eliminações.

Diz a lenda que um certo Flavius Josephus, durante uma guerra, se encontrava entre um bando de 41 judeus rebeldes encurralados pelos romanos em uma caverna.

Os rebeldes formam um círculo e começam a partir de certo ponto a executar a terceira pessoa numa direção.
Sabe-se que Josephus sobreviveu. Em que posição ele estava para ser o último?

Por exemplo, para 7 participantes e eliminar a cada 3:

Na primeira rodada, elimina o número 3.

Pulando mais três, eliminar o número 6.

Depois, é a vez do número 2.

Depois, o número 7 – note que o 3 e o 6 já tinham sido eliminados.

Na sequência, o 5 e o 1.

No final das contas, o número 4 é o vencedor. Neste jogo, Josephus deveria ficar na posição 4 para sobreviver!

Desafio: criar uma função Josephus(n, p), que receba o número de participantes (n) e a distância a eliminar (p), e retorne qual a posição vencedora.

A resposta foi publicada aqui.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Resposta – Teste Soma e Produto no VBA

Segue a resposta do Teste anterior.

Há uma quantidade infindável de soluções possíveis. Fiz o mais simples possível, com ranges fixos.

Coloquei a resposta do Maurício Cota junto no arquivo aqui.

Sub respostaVBA()

Dim i As Integer

Dim soma As Double

For i = 2 To 200    ‘Percorre a linha 2 até a linha 200

    soma = soma + Range(“a” & i) * Range(“b” & i) 

    ‘Faz o produto da coluna A e coluna B e armazena na variável soma

Next i

‘Escreve a resposta na célula e1

Range(“e1”) = soma

End Sub


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Teste – Soma e Produto no VBA

Gostaria de propor um teste por semana, para quem deseja treinar VBA.

Usando VBA, fazer o seguinte.

Multiplicar o valor da coluna A (unidades compradas) pelo valor da coluna B (Valor unitário em R$), somar tudo isso e escrever o resultado na célula “E1”.

Planilha para download.

Semana que vem, envio a minha solução.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/