見出し画像

回帰に使用する学習データを標準化したらどうなるの? 分からないのでやってみた編


回帰でも学習データの標準化を行うべき?

機械学習の勉強のために読んだ本の中に、回帰で使用する学習データに対して標準化(Standardization)を行っているものがありました。

標準化とは、データの分布が中心を0、分散を1とするスケーリング手法のことです。

標準化の算出式は、下記となります。

$$
X=\frac{x-\mu}{\sigma}
$$

上式において、各変数の意味は次の通りです。

  • $${x}$$: 標準化を行う対象のデータ(基となる学習データ)

  • $${\mu}$$: 全データの平均

  • $${\sigma}$$: 全データの標準偏差

  • $${X}$$: 標準化された後のデータ(実際に使用する学習データ)

上記において、標準偏差とは平均からのズレを表す数値であり、標準偏差が分かれば平均に対する数値のバラつき度合いを知ることができます。

例えば、標準偏差が1の正規分布を表すグラフは、下記となります。

正規分布 グラフ
標準偏差が1の正規分布を示すグラフ

上記のグラフにおいて、横軸が標準偏差($${\sigma=1}$$)を、縦軸が発生確率を表しています。

標準偏差が$${\pm\sigma}$$に収まる発生確率が68.27%, $${\pm2\sigma}$$ であれば95.45%, $${\pm3\sigma}$$なら99.73%となります。

改めて、標準化の算出式を見てみると、$${x-\mu}$$でデータ中心を0に移動させ、また、$${\sigma}$$で割ることで分散を1とする分布にスケーリングされていることが分かると思います。

ところで、私は二値分類では学習データに対して標準化を行っていましたが、回帰では標準化を行っていませんでした。

その理由は、二値分類と回帰でのAIモデルの出力の違いにあります。

例えば、学習データに対して標準化を行うと、その値は0.5とか2.1とかの数値に変換されます。

二値分類の場合は、AIモデルの出力が0 or 1のため、AIモデルに入力される学習データとAIモデルの出力とはほぼ同レベルです。

しかし、回帰の場合は、AIモデルの出力は日経平均株価であるため、20000とか30000とかです。

AIモデルの入力と出力で数値の桁数が違いすぎるため、AIモデルの出力にも標準化を行わなければなりません。

その結果、AIモデルの出力は標準化されたデータとなります。

このため、最終的にAIモデルの予測した日経平均株価を知るためには、AIモデルの出力したデータに対して標準化とは逆の変換を行う必要があります。

この手間が面倒で、それなら学習データを標準化せずにAIモデルを学習させれば良いだろうと私は考えていました。

しかし、学習データを標準化している本を読んで、現在の回帰による予測精度が低い状況を抜け出すきっかけになるのであれば、やる価値があると感じました。

そこで、試しにやってみました。

学習データに対して標準化を行いAIモデルを学習させた結果

今回は、4層Affine構造のAIモデルを使用しました。

また、学習データ(説明変数)は、5日分の日経平均株価としました。

標準化を行った学習データを使用してAIモデルを学習させた結果を次に示します。

始めに、学習曲線です。

学習曲線 4層Affine構造 5日分 日経平均株価 標準化
学習曲線(4層Affine構造、5日分の日経平均株価、標準化)

学習曲線の縦軸は、リニアスケールです。

学習データを標準化しているので、COSTおよび各ERRORも値が小さくなっています。

学習曲線からは、何やら期待できそうな雰囲気が漂っているように感じます。

続いて、AIモデルの評価結果に対する実際の日経平均株価と予測値の比較を行います。

ただし、今回は学習データの標準化に伴い、評価データも標準化しています。

この点にご注意ください。

下記は、実際の日経平均株価の終値(y__3)とAIモデルの終値に対する予測値(y'__3)を比較したグラフです。

終値 実際の値 予測値 比較 4層Affine構造 5日分 日経平均株価 標準化
終値に対する実際の値と予測値の比較(4層Affine構造、5日分の日経平均株価、標準化)

グラフの縦軸は日経平均株価を標準化した値を、横軸は評価期間における営業日の日数を表しています。

上記の結果を見ると、これまでと同じく、実際の値と予測値との間にズレが生じているのが確認できます。

標準化された実際の終値(y__3)と終値に対する予測値(y'__3)のRMSE(Root Mean Squared Error, 二乗平均平方根誤差)を算出すると、4.95*10^(-2)となりました。

次に、実際の終値(y__3)と翌営業日の終値に対する予測値(y'__3[翌])を比較しました。

終値 実際の値 予測値 翌営業日 比較 4層Affine構造 5日分 日経平均株価 標準化
終値に対する実際の値と予測値(翌営業日)の比較(4層Affine構造、5日分の日経平均株価、標準化)

やはり、実際の終値(y__3)と翌営業日の終値を比較すると、ズレが激減しているのが確認できます。

標準化された実際の終値(y__3)と翌営業日の終値に対する予測値(y'__3[翌])のRMSEを算出したところ、9.77*10^(-3)となりました。

最後に、実際の終値(y__3)と終値に対する予測値(y'__3)の差分と、実際の終値(y__3)と翌営業日の終値に対する予測値(y'__3[翌])の差分を比較しました。

終値 差分 比較 4層Affine構造 5日分 日経平均株価 標準化
終値に対する差分の比較(4層Affine構造、5日分の日経平均株価、標準化)

グラフの縦軸は、標準化された各終値の差分を、横軸は評価期間における営業日の日数を表しています。

標準化された終値に対する差分の比較結果からも、実際の終値(y__3)と翌営業日の終値に対する予測値(y'__3[翌])がほぼ同じであることが確認できます。

結論

今回の検証結果より、学習データを標準化しても、標準化しない場合の結果と同じであることが確認できました。

つまり、日経平均株価の予測が1営業日遅れる問題は解決できないということです。

いいなと思ったら応援しよう!