隨時間預測資料

Python 的時間序列資料機器學習

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

分類 vs. 迴歸

分類
classification_model.predict(X_test)
array([0, 1, 1, 0])
迴歸
regression_model.predict(X_test)
array([0.2, 1.4, 3.6, 0.6])
Python 的時間序列資料機器學習

相關與迴歸

  • 迴歸類似於計算相關,但有關鍵差異:
    • 迴歸:產生資料的正式模型的過程。
    • 相關:描述資料的統計量,資訊少於迴歸模型。
Python 的時間序列資料機器學習

變數間的相關常隨時間改變

  • 時間序列常隨時間出現變化的模式。
  • 某一時刻看似相關的兩個時間序列,之後可能不再相關。
Python 的時間序列資料機器學習

視覺化時間序列關係

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')
Python 的時間序列資料機器學習

視覺化兩個時間序列

Python 的時間序列資料機器學習

使用 scikit-learn 建立迴歸模型

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, y)
model.predict(X)
Python 的時間序列資料機器學習

用 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")
Python 的時間序列資料機器學習

用 scikit-learn 視覺化預測

Python 的時間序列資料機器學習

評分迴歸模型

  • 兩種最常見方法:
    • 相關($r$)
    • 決定係數($R^2$)
Python 的時間序列資料機器學習

決定係數($R^2$)

  • $R^2$ 的上界為 1,下限可趨近負無限大。
  • 越接近 1,模型對輸出的預測越好。

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

Python 的時間序列資料機器學習

scikit-learn 中的 $R^2$

from sklearn.metrics import r2_score
print(r2_score(y_predicted, y_test))
0.08
Python 的時間序列資料機器學習

一起來練習吧!

Python 的時間序列資料機器學習

Preparing Video For Download...