【要注意】初心者が回帰分析を行うときにやってしまいがちな間違い




データ分析を仕事としてはじめた頃、ついやってしまった間違いがありました。それをネットで調べるとやはりデータ分析を始めたての人が陥ってしまいがちな間違いのパターンがあることに気づいたのです。そこで、今回の記事ではデータ分析を行うときに最低でもこれだけは気をつけてね!という間違いのパターンを紹介していきます。

異なるデータから作ったモデルの評価指標を比べてしまう

回帰分析でつくったモデルに対して、 評価をする指標がいくつかあります。例えば、

  • 決定係数R2
  • AIC
  • 絶対平均誤差(Mean Absolute Error, MAE)
  • 平均二乗誤差(Mean Square Error, MSE)
  • 平均平方二乗誤差(Mean Root Square Error, MRSE)

などがあります。重要なことは、これらのモデル精度指標で比較できるのは、全く同じデータセットで作ったモデル同士のみ、ということです。つまり、ネストしたモデル間同士であれば決定係数が大きい方のモデルがデータに対して当てはまりが良いモデルであると単純に言うことができます。

一方で、全く異なるデータセットを使っている、あるいはデータセットAがあるとして、データセットAのすべてのデータを使ってつくったモデルとデータセットAの一部だけを使ってつくったモデルを上記の精度指標で対等に比較することは出来ません。

AICと決定係数・MAE・MSE・MRSEの違いを認識しない

モデルの精度指標にはいくつかありましたが、AICはモデルの予測精度を表す指標です。一方で、決定係数・MAE・MSE・MRSEはモデルの当てはまりの良さを表す指標です。

つまり、予測のためにモデルを使うときはAICを、回帰係数などから起きている現象を説明・理解するためにはその他の指標を使うのが良いです。

AIC

AICの計算式は、AIC = -2×(最大対数尤度)+ 2kです。最大対数尤度は、モデルに対してデータが当てはまり良いほど大きくなります。一方で、kはパラメーター数を表しています。

AICは小さければ小さいほど良いので、最大対数尤度は大きいほうがよく、パラメータ数kは小さいほど良いです。なぜパラメーター数が少ないほうがいいのか、簡単に説明します。

例えば、多項式でモデルを作成するときにパラメーターが多ければ多いほど当てはまりは良くなります。3次までの数式で表すよりも、9次までの数式で表したほうが6つ分多くのパラメータを利用できるからです。しかし、確かに当てはまりは良くなるのですが、式を複雑にしすぎると過学習が発生して予測精度が落ちるという問題があります。

標本データに対して大量のパラメータを用意すればモデルの当てはまりはよくなります。これは言い方を変えると、モデル生成のときに標本データひとつひとつが持つ影響力が過度なまでに大きくなってしまいます。(ここ大事)

そのため標本データが母集団に対して偏りがあった場合、母集団に対して偏りがあるモデルが生成されてしまうというので予測性能が上がりません。パラメーターは多ければ多いわけではないのです。

そのため、最大対数尤度が大きければ大きいほどいいんだけど、パラメーターをむやみに増やしてはいけないので制約として2kのペナルティを与えているのです。

AICは当てはまりの良さではなく、予測性能を見積もるための精度評価指標になっているのです。

決定係数・MAE・MSE・MRSE

一方で、これらの指標はモデルが実データに対してどのくらい当てはまりが良いかを表しています。非常にざっくり言えば、出来たモデルの回帰線と実データの距離がどのくらい近いかを表しています。そのため、未知のデータに対する予測精度を表しているわけでは無いので注意が必要です。

決定係数の補足

決定係数は線形回帰モデルのみで使える指標です。非線形回帰では使えません。

トレーニングデータとテストデータを分けないで予測精度を評価してしまう

機械学習やディープラーニングなど予測目的でモデルをつくる場合は、トレーニングデータとテストデータに分けて精度評価するのが良いでしょう。何故かと言うと、気が付かぬうちに過学習が発生している可能性があるからです。

僕らが知りたいのは、手元にあるデータに対する予測精度を上げることではありません。まだ手元に無い未知のデータに対して高精度な予測を行うことです。そのため、手元にあるデータに対して予測精度をただ上げることを目指してしまうと過学習に陥ります。

モデル作成に使用したデータは、モデルにそこそこ当てはまって当たり前です。全く未知のデータに対する予測精度を把握するためには、モデル作成に全く関わっていないテスト用のデータを用意しておく必要があるのです。

そのため、トレーニングデータとテストデータを分けずにモデルを作り決定係数が0.9以上になったからといって予測精度が高いということは出来ないのです。

とりあえず説明変数を増やしてしまい多重共線性が発生する

説明変数をむやみに増やしすぎるのはよくありません。一見、情報が多ければ多いほど良いように思ってしまいがちですが、それは間違いです。なぜならば多重共線性が発生してしまう可能性があるし、モデルが必要以上に複雑になるからです。

多重共線性とは、相関が高い(R>0.8くらい?)変数同士を説明変数としてしまうことで、推測したいパラメーターの分散が大きくなってしまったり、本来マイナスにならないのにマイナスになってしまうなどの問題が起こることです。

回帰分析は説明変数間がそれぞれ独立である(=相関がない)ことが前提となっています。そのため、何でもかんでも説明変数に入れるのではなく、相関係数が高い変数があったら一方を落とすことで説明変数を絞っていく必要があるのです。

データを可視化せずにいきなり回帰分析をしてしまう

データの可視化は重要です。データの傾向をつかめないと、異常が起きた時に気がつくことが出来ません。仕事で扱うデータは人か機械のどちらかが作成したものですが、どちらも予期しないミスやエラーによって変なデータをつくることがしょっちゅうあります。

それこそ、手入力でデータをずらして記入してしまったとか、ネットワークエラーで機械が誤作動したとか異常値をデータにしてしまうことはよくあります。

Garbage in Garbage out(ゴミを入れてもゴミしか生まれない)という言葉があるように、データ分析や機械学習はデータの質と量がほぼすべてを決定します。間違えて本来より20%低い数値が入ったデータが奇跡的に完璧にモデリングできたとしても、このモデルは本来より20%常に低い値を吐き出し続けます。

データ分析を行う場合は、データをしっかりと見て使えるものと使えないものを精査する力がとても重要になってきます。

やはりデータそのものが一番重要です

機械学習やディープラーニングを非常に簡単に実装できるライブラリは、無料で使える時代です。アルゴリズム自体は超頭がいい人たちによって今日もアップデートされて、誰でも使えるように実装されています。

それにも関わらず、データの活用がなかなか進まないのは、そもそもデータが無いとか、データが構造化されていない(個人ごとにオリジナルのフォーマットを使っており統一性ゼロとか)ことが多いからです。

ここまで初心者が陥りがちな間違いを書いてきましたが、特にデータがしっかりと取れているかについては誰であっても最優先で考えなければいけないことだと思います。