Partilhar via


series_fit_poly()

Aplica uma regressão polinomial de uma variável independente (x_series) a uma variável dependente (y_series). Esta função utiliza uma tabela que contém várias séries (matrizes numéricas dinâmicas) e gera o polinomial de alta ordem mais adequado para cada série através da regressão polinomial.

Dica

  • Para a regressão linear de uma série uniformemente espaçado, conforme criado pelo operador make-series, utilize a função mais simples series_fit_line(). Veja Exemplo 2.
  • Se x_series for fornecida e a regressão for feita para um grau elevado, considere normalizar para o intervalo [0-1]. Veja Exemplo 3.
  • Se x_series for do tipo datetime, tem de ser convertido para duplo e normalizado. Veja Exemplo 3.
  • Para uma implementação de referência da regressão polinomial com o Python inline, veja series_fit_poly_fl().

Syntax

T | extend series_fit_poly(y_series [,graude x_series,])

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
y_series dynamic ✔️ Uma matriz de valores numéricos que contêm a variável dependente.
x_series dynamic Uma matriz de valores numéricos que contêm a variável independente. Necessário apenas para séries espaçados de forma desigual. Se não for especificado, está definido como um valor predefinido de [1, 2, ..., length(y_series)].
grau A ordem necessária do polinomial para ajustar. Por exemplo, 1 para regressão linear, 2 para regressão quadrática, etc. A predefinição é 1, o que indica uma regressão linear.

Devoluções

A series_fit_poly() função devolve as seguintes colunas:

  • rsquare: r-square é uma medida padrão da qualidade de ajuste. O valor é um número no intervalo [0-1], em que 1 - é o melhor ajuste possível e 0 significa que os dados não são ordenados e não cabem em nenhuma linha.
  • coefficients: matriz numérica que mantém os coeficientes do polinomial mais bem ajustado com o grau especificado, ordenado do coeficiente de potência mais elevado para o mais baixo.
  • variance: variância da variável dependente (y_series).
  • rvariance: variância residual que é a variância entre os valores de dados de entrada dos valores aproximados.
  • poly_fit: matriz numérica que contém uma série de valores do polinomial mais bem ajustado. O comprimento da série é igual ao comprimento da variável dependente (y_series). O valor é utilizado para gráficos.

Exemplos

Exemplo 1

Um polinomial de quinta ordem com ruído nos eixos x & y:

range x from 1 to 200 step 1
| project x = rand()*5 - 2.3
| extend y = pow(x, 5)-8*pow(x, 3)+10*x+6
| extend y = y + (rand() - 0.5)*0.5*y
| summarize x=make_list(x), y=make_list(y)
| extend series_fit_poly(y, x, 5)
| project-rename fy=series_fit_poly_y_poly_fit, coeff=series_fit_poly_y_coefficients
|fork (project x, y, fy) (project-away x, y, fy)
| render linechart 

Gráfico a mostrar o ajuste polinomial de quinta ordem a uma série com ruído.

Coeficientes da quinta ordem polinomial ajustam-se a uma série com ruído.

Exemplo 2

Verifique se series_fit_poly com degree=1 corresponde series_fit_linea :

demo_series1
| extend series_fit_line(y)
| extend series_fit_poly(y)
| project-rename y_line = series_fit_line_y_line_fit, y_poly = series_fit_poly_y_poly_fit
| fork (project x, y, y_line, y_poly) (project-away id, x, y, y_line, y_poly) 
| render linechart with(xcolumn=x, ycolumns=y, y_line, y_poly)

Gráfico a mostrar a regressão linear.

Coeficientes da regressão linear.

Exemplo 3

Série temporal irregular (desigavelmente espaçado):

//
//  x-axis must be normalized to the range [0-1] if either degree is relatively big (>= 5) or original x range is big.
//  so if x is a time axis it must be normalized as conversion of timestamp to long generate huge numbers (number of 100 nano-sec ticks from 1/1/1970)
//
//  Normalization: x_norm = (x - min(x))/(max(x) - min(x))
//
irregular_ts
| extend series_stats(series_add(TimeStamp, 0))                                                                 //  extract min/max of time axis as doubles
| extend x = series_divide(series_subtract(TimeStamp, series_stats__min), series_stats__max-series_stats__min)  // normalize time axis to [0-1] range
| extend series_fit_poly(num, x, 8)
| project-rename fnum=series_fit_poly_num_poly_fit
| render timechart with(ycolumns=num, fnum)

Gráfico a mostrar o ajuste polinomial da oitava ordem a uma série temporal irregular.