Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Análise e predição de Séries Temporais com a biblioteca pyFTS

PyData BH
August 23, 2018

Análise e predição de Séries Temporais com a biblioteca pyFTS

PyData BH

August 23, 2018
Tweet

More Decks by PyData BH

Other Decks in Research

Transcript

  1. COPYRIGHT NOTICE | DIREITOS AUTORAIS Author: Petrônio Cândido de Lima

    e Silva (Montes Claros, MG, Brazil) E-mail: [email protected] [email protected] Site: https://petroniocandido.github.io/ This material is licensed under “ Creative Commons Attribution - NonCommercial - ShareAlike” license. All external portions included in this material are cited in loco. Esse material está licenciado com uma licença “ Creative Commons Atribuição - NãoComercial - CompartilhaIgual ”. Todos os materiais externos inclusos neste material serão referenciados in loco.
  2. Conjunto Nebulosos • Y: Variável numérica (crisp) Y ∈ ℝn

    • U: Universo de Discurso U = [ min(Y), max(Y) ] • μ: Função de Pertinência μ: U → [0,1] • A: Conjunto Nebuloso ◦ É um subconjunto de U definido por uma função de pertinência μ ◦ Os conjuntos são sobrepostos, um mesmo valor y ∈ Y pode pertencer à vários conjuntos simultaneamente, em diferentes graus
  3. Variável Linguística - Ã Temperatura (°C) Pertinência (%) 0 10

    20 30 40 50 0 50 100 Frio Fresco Morno Quente
  4. Sistemas Nebulosos Regras Valores Numéricos Dados em Variáveis Linguísticas Inferência

    Lógica Resultado em Variáveis Linguísticas Fuzzyficar De Fuzzyficar Valores Numéricos
  5. Recapitulando T E R M Ô M E T R

    O A R - C O N D I C I O N A D O Temperatura (°C) Pertinência (%) 0 1 0 2 0 3 0 4 0 5 0 0 5 0 100 [ Frio = 0.1, Fresco = 0.9, Morno = 0, Quente = 0 ] Se Termometro = Frio Então ArCondicionado = Quente Se Termometro = Fresco Então ArCondicionado = Morno Se Termometro = Morno Então ArCondicionado = Fresco Se Termometro = Quente Então ArCondicionado = Frio SE (Variável de Entrada) ENTÃO(Variável de Saída) Frio 0.1 Quente 0.1 Fresco 0.9 Morno 0.9 Morno 0.0 Fresco 0.0 Quente 0.0 Frio 0.0 Temperatura (°C) Pertinência (%) 0 1 0 2 0 3 0 4 0 5 0 0 5 0 100
  6. Características • Data Driven • Não Paramétrico • Modelo de

    caixa branca • Fácil de controlar Under e Overfitting • Simples • Flexível • Computacionalmente Barato • Escalável
  7. CONJUNTOS NEBULOSOS - Ã DADOS NUMÉRICOS - Y PARTICIONAMENTO FUZZYFICAÇÃO

    DADOS FUZZYFICADOS - F REGRAS - EXTRAÇÃO DE PADRÕES NÚMERO DE PARTIÇÕES - k MÉTODO DE PARTICIONAMENTO - Π FUNCTION DE PERTINÊNCIA - μ ORDEM - Ω LEGENDA ▪ PROCESSOS ▪ DADOS ▪ PARÂMETROS ▪ HIPER PARAMETROS PRÉ PROCESS. LAG INDEXES - L α-CUT
  8. CONJUNTOS NEBULOSOS - Ã AMOSTRA NUMÉRICA - y(t) FUZZYFICAÇÃO INFERÊNCIA

    AMOSTRA FUZZYFICADA - f(t) REGRAS - DE FUZZYFICAÇÃO LEGENDA ▪ PROCESSOS ▪ DADOS ▪ PARÂMETROS ▪ HIPER PARÂMETROS f(t+1) ŷ(t+1) PÓS PROCES. PRÉ PROCES. ORDEM - Ω LAG INDEXES - L α-CUT
  9. dados pyFTS.partitioners pyFTS.models modelo particionador = Particionador( data = dados,

    npart = número de partições) Processo de Treinamento - pyFTS modelo = Método( partitioner = particionador, order = ordem) modelo.fit(dados)
  10. dados pyFTS.partitioners pyFTS.models modelo particionador = grid.GridPartitioner( data=dados, npart=número de

    partições) Processo de Treinamento - pyFTS modelo = hofts.HighOrderFTS( partitioner=particionador, order=ordem) model.fit(dados)
  11. Dados from pyFTS.data import SONDA df = SONDA.get_dataframe() dados_treino =

    df[‘glo_avg’].values[:1000] dados_teste = df[‘glo_avg’].values[1000:1200]
  12. Particionamento from pyFTS.partitioners import Grid import matplotlib as plt #Particionamento

    do Universo de Discurso particionador = Grid.GridPartitioner(data=dados_treino, npart=10) # Cria uma figura no Matplotlib fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[15,5]) # Plota o particionamento particionador.plot(ax)
  13. Quantidade de Conjuntos • Se forem poucos conjuntos ◦ Granularidade

    muito grossa ◦ Sub ajuste (underfitting) ◦ O modelo não consegue capturar o sinal dos dados corretamente
  14. Quantidade de Conjuntos • Se forem conjuntos demais ◦ Granularidade

    muito fina ◦ Sobre ajuste (overfitting) ◦ O modelo começa a aprender o ruído dos dados também!
  15. Quantidade de Conjuntos • O número certo de conjuntos ◦

    Granularidade média ◦ Ajuste ideal (fit) ◦ Aprende o sinal sem aprender o ruído ◦ Não há um valor de referência, depende dos dados ◦ Precisa ser testado!
  16. Treinamento from pyFTS.models import hofts from pyFTS.common import Util #

    Cria um modelo vazio, utilizando o método de High Order FTS modelo = hofts.HighOrderFTS(partitioner=particionador, order=2) # Todo o procedimento de treinamento é feito pelo método fit modelo.fit(dados_treino) # Salva o modelo treinado Util.persist_obj(modelo, “arquivo”)
  17. Escolhendo a Ordem • Ordem: ◦ Quantos lags serão usados

    pelo modelo ? • FTS funcionam com base em padrões sequenciais / temporais • A ordem é a quantidade de dados usada para definir esses padrões • Ordem muito baixa: underfit • Ordem muito alta: overfit
  18. Modelo de 1ª Ordem • Um único lag • Difícil

    reconhecer padrões sazonais como “subida e descida” • Modelos sucintos e altamente interpretáveis
  19. Modelo de 1ª Ordem Série Fuzzyficada A0, A1, A2 ,

    ... A2, A1, A0 Padrões A0 → A1, A1 → A2 , … A2 → A1, A1 → A0 Regras A0 → A1 A1 → A0, A2 A2 → A1
  20. Modelo de 2ª Ordem Série Fuzzyficada A0, A1, A2 ,

    ... A2, A1, A0 Padrões A0, A1 → A2, … A2, A1 → A0 Regras A0, A1 → A2 A2, A1 → A0
  21. Escolhendo os melhores lags • Um bom guia é a

    função de autocorrelação (ACF) • Testar variações também ajuda
  22. Teste from pyFTS.models import hofts from pyFTS.common import Util from

    pyFTS.benchmarks import Measures # Carrega o modelo modelo = Util.load_obj(“arquivo”) # Todo o procedimento de inferência é feito pelo método predict predicoes = modelo.predict(dados_teste) # Avalia as predições pelo RMSE, MAPE e U Measures.get_point_statistics(dados_teste,model)
  23. Funcionalidades • Transformações de dados para pré e pós-processamento •

    Previsão por ponto, intervalo e distribuição de probabilidades ◦ opção type na função predict • Previsão para um ou mais passos à frente ◦ opção steps_ahead na função predict • Auditabilidade e interpretabilidade ◦ opção explain da função predict
  24. Funcionalidades • Treinamento distribuído ◦ opção distributed da função fit,

    usa dispy ou PySpark • Otimização de hiperparâmetros ◦ tipo de particionamento ◦ número de partições ◦ ordem ◦ índice dos lags ◦ alfa-cut ◦ ….
  25. Séries Multivariadas • Variável Endógena ◦ O valor que estamos

    interessados em prever • Variáveis Exógenas ◦ Outros valores auxilares Exógenas, Endógena → Endógena Exógenas → Endógena
  26. Séries Multivariadas • Cada variável tem seu próprio particionamento! •

    Um campo de dados pode ser utilizado para mais de uma variável! ◦ Aplicando transformações de dados ◦ Retirando componentes de dados estruturados • Os modelos ficam mais descritivos, porém bem maiores e mais complexos!
  27. Modelos Variantes no Tempo • Dados Não Estacionários (na média

    ou na variância) • Concept Drift ◦ Alteração da distribuição da série temporal • Alternativas: ◦ Retreinar os modelos ◦ Ensemble adaptativo ◦ Conjuntos Nebulosos Não Estacionários