Python 時系列分析 1,000本ノック
– ノック94: ラグ特徴量 –

Python 時系列分析 1,000本ノック– ノック94: ラグ特徴量  –
次の Python コードで shift() を使って作成している列は、何のためのものですか?

Python コード:

import numpy as np, pandas as pd
from sklearn.ensemble import RandomForestRegressor

np.random.seed(42)
t = np.arange(300)
df = pd.DataFrame({'y': 50 + 10*np.sin(2*np.pi*t/12) + 0.05*t 
                        + np.random.randn(300)*2})
for k in [1, 2, 3, 12]:
    df[f'lag{k}'] = df['y'].shift(k)
df = df.dropna()

X, y = df.drop(columns='y'), df['y']
m = RandomForestRegressor(random_state=0).fit(X[:200], y[:200])
pred = m.predict(X[200:])

print(df.head(3).round(2))
print(f"\nRMSE: {np.sqrt(((y[200:]-pred)**2).mean()):.4f}")
print(pd.Series(m.feature_importances_, index=X.columns).round(4))

回答の選択肢:
(A) 時系列データを平滑化してノイズを除去するため
(B) 時系列データを教師あり学習で扱える説明変数に変換するため
(C) 時系列データの季節成分を分解して取り出すため
(D) 時系列データの欠損値を前方補完するため