レイヤーつくってグルグル学習させればよいという訳ではないらしい。
データの前処理が予測精度に直結するらしいので整理してみます。
データの前処理とは
大きく分けると
・きちんとしたデータを集める
・データの内容を精査する
・データのスケールを合わせる
の3つになる模様。
今回は株価を対象とするので、そんなに大きくずれることは無いと思ってます。
データの精査については、ノイズなどのゴミデータ削除もあるらしいけど、個人的にはノイズはノイズとして扱った方が良いと考えています。
プログラムに食わせるデータの種類は考慮しますが、データの内容については人間が手を加えない方が良いのではないかと思ってます。
人間では気づけない法則をプログラムで見つけることを目的とするのであれば、人間の価値観で「このデータはおかしい」と判断するのはルール違反だと思ってます。
データのスケールを合わせる
入力データとして、複数データを扱う場合は数値のスケールを合わせた方が良い結果が出る模様。
大抵は「0~1」「-1~1」の間に収めるように値を変換するそうです。
株価の場合は「日経平均」の価格と「各企業の株価」は大きな差がある場合があります。
日経平均は2万円前半の値で推移していますが、各企業の株価は1万円のものもあれば、何十万円のものもあります。
ここのスケールを合わせないと「日経平均の値が影響を与えすぎる」「企業の株価が影響を与えすぎる」という問題が起きてくる模様。
数値が大きい方が影響度が大きいのでスケールを合わせて「平等」に扱えるようにすることになります。
スケールを合わせる手法
最初はsklearnで提供されている方式を基準に試していこうと思います。
MinMaxScaler はデータの最大値/最小値を元に計算を行い、値を「0-1」の間に収めてくれます。
ただ、データの中に極端に大きいデータ(異常値)があるとそちらに引っ張られてしまう模様。
安定しているデータや、カラーコードなどのように数値に意味があるデータに使うのが良いかも。
StandardScaler はデータの平均値が「0」、標準偏差が「1」になるように値を変換します。
MinMaxScalerよりも異常値の影響が少ない模様。
RobustScaler は中央値を「0」にします。四分位範囲(IQR)を合わせるみたいな説明がありますが難しいのでパス。
MaxAbsScaler は最大値の絶対値を「1」にする。MinMaxScalerと異なり「絶対値」なのでマイナスの値も取ります。
コメント