Prevedere i dati nel tempo

Machine Learning per dati di serie temporali in Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Classificazione vs. Regressione

Classificazione
classification_model.predict(X_test)
array([0, 1, 1, 0])
Regressione
regression_model.predict(X_test)
array([0.2, 1.4, 3.6, 0.6])
Machine Learning per dati di serie temporali in Python

Correlazione e regressione

  • La regressione è simile al calcolo della correlazione, ma con differenze chiave
    • Regressione: un processo che produce un modello formale dei dati
    • Correlazione: una statistica che descrive i dati. Fornisce meno informazioni di un modello di regressione.
Machine Learning per dati di serie temporali in Python

La correlazione tra variabili spesso cambia nel tempo

  • Le serie temporali spesso hanno schemi che cambiano nel tempo
  • Due serie temporali che sembrano correlate in un momento possono non rimanerlo nel tempo
Machine Learning per dati di serie temporali in Python

Visualizzare le relazioni tra serie temporali

fig, axs = plt.subplots(1, 2)

# Make a line plot for each timeseries
axs[0].plot(x, c='k', lw=3, alpha=.2)
axs[0].plot(y)
axs[0].set(xlabel='time', title='X values = time')

# Encode time as color in a scatterplot
axs[1].scatter(x_long, y_long, c=np.arange(len(x_long)), cmap='viridis')
axs[1].set(xlabel='x', ylabel='y', title='Color = time')
Machine Learning per dati di serie temporali in Python

Visualizzare due serie temporali

Machine Learning per dati di serie temporali in Python

Modelli di regressione con scikit-learn

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, y)
model.predict(X)
Machine Learning per dati di serie temporali in Python

Visualizzare le previsioni con scikit-learn

alphas = [.1, 1e2, 1e3]
ax.plot(y_test, color='k', alpha=.3, lw=3)
for ii, alpha in enumerate(alphas):
    y_predicted = Ridge(alpha=alpha).fit(X_train, y_train).predict(X_test)
    ax.plot(y_predicted, c=cmap(ii / len(alphas)))
ax.legend(['True values', 'Model 1', 'Model 2', 'Model 3'])
ax.set(xlabel="Time")
Machine Learning per dati di serie temporali in Python

Visualizzare le previsioni con scikit-learn

Machine Learning per dati di serie temporali in Python

Valutare i modelli di regressione

  • Due metodi più comuni:
    • Correlazione ($r$)
    • Coefficiente di determinazione ($R^2$)
Machine Learning per dati di serie temporali in Python

Coefficiente di determinazione ($R^2$)

  • Il valore di $R^2$ è al massimo 1 e può essere anche molto basso
  • Valori vicini a 1 indicano previsioni migliori del modello

$$ 1 - \frac{error(model)}{variance(testdata)} $$

Machine Learning per dati di serie temporali in Python

$R^2$ in scikit-learn

from sklearn.metrics import r2_score
print(r2_score(y_predicted, y_test))
0.08
Machine Learning per dati di serie temporali in Python

Esercitiamoci!

Machine Learning per dati di serie temporali in Python

Preparing Video For Download...