pythonで、時系列データを用いて教師あり学習を行うための学習データ作成方法

時系列データを用いて教師あり学習を行うための学習データの作成のための考え方

多変量の時系列データを用いて、教師あり学習によって、ある目的変数のt分後の値の推測したい場合の学習データの作成方法をまとめたいと思います。

この一般的な方法としては、時刻tを基準とし、目的変数の値のみを時刻t +1とシフトさせる方法がとられています。

具体的なpythonを用いた手順を以下に示します。 目的変数:TARGET, 説明変数:A,B,C の乱数時系列データを作成します。

import numpy as np
import pandas as pd
data = np.random.randn(10, 4)# 10x4 の乱数データを生成
indices = pd.date_range('2010-01-01', periods=10)  # インデックス名は日付
columns = ('A', 'B', 'C', 'TARGET')  # カラム名

my_dataframe = pd.DataFrame(data, index=indices, columns=columns)
print(my_dataframe)

out>>
                   A         B         C    TARGET
2010-01-01 -1.874536  0.044969  0.077942  0.089603
2010-01-02 -0.922576 -0.778048  0.883617 -0.709655
2010-01-03 -0.481583  0.987507  1.120371 -0.466234
2010-01-04  0.055468 -2.080869 -0.558581 -0.235064
2010-01-05  1.033512 -0.750830 -0.754168  1.090878
2010-01-06 -0.566832  0.201503 -0.264602 -0.003537
2010-01-07  1.890769  1.358429 -1.041281  0.438978
2010-01-08 -0.175302 -1.191327 -0.457195 -0.287566
2010-01-09  1.672760  0.094620  1.225835 -0.147332
2010-01-10  2.042621 -2.651269 -1.356004 -0.066129

次に目的変数(TARGET)の値を一日ずらします。 例えば2010-01-02の値は、2010-01-01へずらされます。

my_dataframe['TARGET'] = my_dataframe['TARGET'].shift(-1)
my_dataframe

out>>
    A   B   C   TARGET
2010-01-01   -1.874536  0.044969   0.077942   -0.709655
2010-01-02   -0.922576  -0.778048  0.883617   -0.466234
2010-01-03   -0.481583  0.987507   1.120371   -0.235064
2010-01-04   0.055468   -2.080869  -0.558581  1.090878
2010-01-05   1.033512   -0.750830  -0.754168  -0.003537
2010-01-06   -0.566832  0.201503   -0.264602  0.438978
2010-01-07   1.890769   1.358429   -1.041281  -0.287566
2010-01-08    -0.175302  -1.191327  -0.457195  -0.147332
2010-01-09    1.672760   0.094620   1.225835   -0.066129
2010-01-10   2.042621   -2.651269  -1.356004  NaN

このように目的変数の値を推測したい時刻の値へずらすことで教師あり学習のための学習データを作成します。