Mudança de distribuição do conjunto de dados

Projetando Workflows de Machine Learning em Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

O que é mudança de distribuição?

Conjunto elec:

  • 2 anos de dados.
  • class=1 indica que o preço subiu em relação às últimas 24 horas, e 0 que caiu.
   day    period  nswprice  ...    vicdemand  transfer  class
0    2  0.000000  0.056443  ...     0.422915  0.414912      1
1    2  0.553191  0.042482  ...     0.422915  0.414912      0
2    2  0.574468  0.044374  ...     0.422915  0.414912      1

[3 rows x 8 columns]
Projetando Workflows de Machine Learning em Python

O que exatamente está mudando?

Duas classes em duas dimensões separadas por uma fronteira de decisão curva.

Projetando Workflows de Machine Learning em Python

O que exatamente está mudando?

Duas classes em duas dimensões separadas por uma fronteira de decisão curva, ao lado de outra imagem com classes em posições semelhantes, mas com uma fronteira de decisão de formato diferente.

Projetando Workflows de Machine Learning em Python

Janelas

Janela deslizante

window = (t_now-window_size+1):t_now
sliding_window = elec.loc[window]

Um conjunto de dados onde apenas os pontos recentes estão destacados.

Janela expansível

window = 0:t_now
expanding_window = elec.loc[window]

Um conjunto de dados exibido em um terminal.

Projetando Workflows de Machine Learning em Python

Detecção de mudança de distribuição

# t_now = 40000, window_size = 20000
clf_full = RandomForestClassifier().fit(X, y)
clf_sliding = RandomForestClassifier().fit(sliding_X, sliding_y)
# Use dados futuros como teste
test = elec.loc[t_now:elec.shape[0]]
test_X = test.drop('class', 1); test_y = test['class']
roc_auc_score(test_y, clf_full.predict(test_X))
roc_auc_score(test_y, clf_sliding.predict(test_X))
0.775
0.780
Projetando Workflows de Machine Learning em Python

Tamanho da janela

for w_size in range(10, 100, 10):
    sliding = arrh.loc[
      (t_now - w_size + 1):t_now
    ]
    X = sliding.drop('class', 1)
    y = sliding['class']
    clf = GaussianNB()
    clf.fit(X, y)
    preds = clf.predict(test_X)
    roc_auc_score(test_y, preds)

AUC plotado contra o tamanho da janela aumenta até um máximo de 0,83 para janela de 50 e depois volta a cair.

Projetando Workflows de Machine Learning em Python

Mudança de domínio

Conjunto arrhythmia:

   age  sex  height  ...    chV6_TwaveAmp  chV6_QRSA  chV6_QRSTA  class
0   75    0     190  ...              2.9       23.3        49.4      0
1   56    1     165  ...              2.1       20.4        38.8      0
2   54    0     172  ...              3.4       12.3        49.0      0
3   55    0     175  ...              2.6       34.6        61.6      1
4   75    0     190  ...              3.9       25.4        62.8      0

[5 rows x 280 columns]
Projetando Workflows de Machine Learning em Python

Mais dados nem sempre é melhor!

Projetando Workflows de Machine Learning em Python

Preparing Video For Download...