2
2

More than 1 year has passed since last update.

【特徴量の生成/Python】ラグ特徴量の生成・使い方

Posted at

今回の課題

Kaggleで時系列データ分析についてインプットをしていたところ、
ラグ特徴量という特徴量が出てきた。

使い所について、イマイチ理解ができなかったため、勉強することにした。

ラグ特徴量とは

今の時間の特徴だけに注目せずに、過去や未来の特徴を用いて、
現在のデータの特徴量を増やす方法。
ラグ特徴量を用いることで、機械学習モデルの予測精度を向上できる可能性がある。
(ラグ特徴量を追加するので、重回帰分析になる。)

過去のデータを特徴量として使い、機械学習モデルの予測精度を向上させたいときに使うことができる。

※参考:【機械学習】時系列データの前処理 -ラグ特徴量作成-

コード

1)関数を用意しておく

#指定したカラム、指定した単位でgroupbyして集計してデータフレームで返す関数
def grouped(df, key, freq, col):
    # Grouperは、時系列をGroupbyするためのもの。key:groupbyするカラム。freq:集計する単位。
    df_grouped = df.groupby([pd.Grouper(key=key, freq=freq)]).agg(mean = (col, 'mean'))
    df_grouped = df_grouped.reset_index()
    return df_grouped

# ラグ特徴量を追加するための関数
def add_lag(df, freq, col, lag):
    df_grouped = grouped(df, key, freq, col)
    name = 'Lag_' + str(lag)
    df_grouped['Lag'] = df_grouped['mean'].shift(lag)
    return df_grouped

※参考:【Python】pandas.Grouperで時系列データを楽々groupby!

2)Weeklyのラグ特徴量

# add_lag関数を呼び出して、ラグ特徴量を追加する
df_grouped_train_w_lag1 = add_lag(train_df, 'date', 'W', 'sales', 1)
df_grouped_train_m_lag1 = add_lag(train_df, 'date', 'M', 'sales', 1)

df_grouped_train_w_lag1.head()

【出力結果】
image.png

3)ラグ特徴量を使って回帰モデルを可視化する

fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(30,20))
axes[0].plot('Lag', 'mean', data=df_grouped_train_w_lag1, color='0.75', linestyle=(0, (1, 10)))
axes[0].set_title("Sales (grouped by week)", fontsize=20)
axes[0] = sns.regplot(x='Lag', 
                      y='mean', 
                      data=df_grouped_train_w_lag1, 
                      scatter_kws=dict(color='0.75'), 
                      ax = axes[0])


axes[1].plot('Lag', 'mean', data=df_grouped_train_m_lag1, color='0.75', linestyle=(0, (1, 10)))
axes[1].set_title("Sales (grouped by month)", fontsize=20)
axes[1] = sns.regplot(x='Lag', 
                      y='mean', 
                      data=df_grouped_train_m_lag1, 
                      scatter_kws=dict(color='0.75'), 
                      line_kws={"color": "red"},
                      ax = axes[1])

plt.show()

seaborn.regplotメソッドは、
 2次元のデータと線形回帰モデルの結果を重ねてプロットする。
 (2次元データは説明変数が複数あるので、回帰分析の種類は重回帰分析になる。)

【出力結果】
image.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2