日頃からデータセットを解析していますが、データ解析 = ノイズをうまく扱うこと、といっても過言ではありません。ノイズというのは、不要な情報のことです。ノイズは何も測定誤差や実験誤差に限ったことではありません。たとえば回帰分析において、説明変数 x に含まれる、目的変数と関係のない情報は、すべてノイズです。データ解析をするとき、データセットには必ずノイズがあります。ノイズとうまく付き合う必要があるのです。
目的変数が変われば何がノイズかも変わります。ある目的変数と説明変数の間で回帰分析をするときにノイズだったものが、別の目的変数と説明変数の間で回帰分析をするときにはノイズではなく有用な情報になるかもしれません。たとえば、シドニー (オーストラリア) のあるレストランにおけるビールの注文数という目的変数を予測するときに、東京の気温という説明変数はノイズでしかありませんが、東京のレストランにおけるビールの注文数という目的変数を予測するときには、有用な情報となります (気温が上がればビールの注文数が増えます)。
さらに、説明変数それぞれ、ノイズ 100% の説明変数と ノイズ 0% (有用な情報 100 %) の説明変数に分けられるわけではありません。すべての説明変数が、それらの間のグラデーションの中に存在します。この説明変数には a % のノイズが含まれる (0 ≤ a ≤ 100) といった感じです。もちろん、a がいくつかは、基本的には誰にもわかりません。
このような状況の中において、目的変数 y と説明変数 x との間で、回帰モデル y = f(x) を構築します。誤解を恐れずにいえば、いつも回帰分析を行うとき、精度の高いモデルを作らないように気をつけています。
詳しく説明します。回帰モデルを構築する目的は、目的変数と説明変数との間にある、真の関係をモデル化することです。もちろん真の関係の中にはノイズは含まれません。しかし実際には、データセットには必ずノイズが含まれ、真の関係にとって有用な情報とノイズとの区別はつきません。ノイズを含む目的変数とノイズを含む説明変数との間で、がんばって回帰モデルを構築します。
注意しなければならないことは、目的変数のノイズと説明変数との関係や、目的変数と説明変数のノイズとの関係が回帰モデルに入ってしまうことです。ノイズなのに、どうして回帰モデルに入ってくるの、と考える方もいらっしゃるかもしれませんが、たとえば説明変数のノイズや説明変数のノイズの組み合わせが、たまたま (偶然に) 目的変数とあってしまうことがあるのです。いわゆる chance correlation (偶然の相関) です。
特にサンプルが少なく説明変数の数が多いときに、chance correlation が起こりやすく注意が必要です。サンプルが少なく説明変数の数が多いというのは、偶然起こる確率が上がるということです。極端な例ですが、サンプル数が 3 のとき、目的変数と相関をもつ乱数なら、何回か試行すれば発生させられそうですよね。説明変数の数が多いというのは、その中のノイズも多くなりますし、説明変数の組み合わせで偶然 目的変数との間で関係してしまう確率が上がります。
Chance correlation があるとき、クロスバリデーションでもダブルクロスバリデーションでも、テストデータでも、chance correlation を完全に防ぐことはできず、結果の r2 が大きくなったり、RMSE, MAE が小さくなったりします。真の関係をモデル化できたわけでもないのに、r2 が大きく RMSE, MAE が小さくなり、あたかも高精度のモデルができたと誤解してしまい、問題なわけです。問題なのですが、本当に有用な情報とたまたま合ったノイズとの区別はつきません。
しかし、できることはあります。以下の 2 つです。
- Chance correlation の影響を減らす
- Chance correlation の度合いを検討する
1. Chance correlation の影響を減らす
1 つはサンプルを増やすことです。サンプルを増やすことで、たまたま目的変数と相関をもつノイズやノイズの組み合わせの影響が小さくなります。サンプル数が 3 のときは、目的変数と相関をもつ乱数を発生させるのは簡単ですが、サンプル数を 10, 100, … と増やしたときに、目的変数と相関をもつ乱数を発生させることは難しいですね・
もう 1 つは説明変数の数を減らすことです。ただ、回帰モデルの精度や推定性能が向上するように説明変数を選択してはいけません。すでにデータセットの中には chance correlation がありますので、LASSO, stepwise, GAPLS など、回帰モデルを作ってその推定性能がよくなるように説明変数を選択しても、chance correlation に関連のあるノイズを含む説明変数が選択されるだけです。
そのため、ここでの変数選択では、データセットの背景に関する知識・知見などを利用して説明変数の数を減らしましょう。説明変数の数が減れば、それだけ chance correlation の可能性が小さくなります。
2. Chance correlation の度合いを検討する
Chance correlation の可能性については事前に検討しておく必要があります。つまり、今あるデータセットが、chance correlation を起こしやすいのか起こしにくいのかということの検討です (これは説明変数の数とサンプルの数に依存しますので、いつかたくさんシミュレーションして、傾向を検討してみたいです)。この検討には y-ランダマイゼーションを使います。y-ランダマイゼーションによって、用いているデータセットを解析することで、どれくらい chance correlation が生じやすいのか分かります。ここで生じやすいと判断された場合、つまり y-ランダマイゼーションをしたときに r2 は高く RMSE, MAE が小さくなった場合には、仮にこのデータセットで r2 は高く RMSE, MAE が小さいような結果が出たとしても、それは信じられないということになります。
このようにして、chance correlation の可能性を小さくする努力と、chance correlation の可能性を検討することを行います。1. の説明変数を選択するときには、もちろん目的変数を説明する上で有用な変数を削除してしまう危険もあります。そのため、2. の chance correlation の起きる可能性と一緒に、削除する説明変数を検討するとよいでしょう。
普段の生活でも同じこと!?
データセットにはノイズが必ず含まれますので、ノイズと付き合うしかありません。普段の生活でも同じことだと思います。自分の行動や判断・決定に対して、色々な人から色々な意見をいただくことがあります。その意見というのは、自分にとって有用かもしれませんし、ノイズかもしれません。もちろん、同じ意見でも、ある人にとっては有用なことが、別の人にとってはただのノイズ、みたいなこともあります。
さらに、ノイズ 100% の意見と ノイズ 0% (有用な情報 100 %) の意見に分けられるわけではありません。すべての意見が、それらの間のグラデーションの中に存在します。この意見には a % のノイズが含まれる (0 ≤ a ≤ 100) といった感じです。
このような状況において、誰かからなんらかの意見を言われたとき、自分にとってノイズと感じた意見のノイズの中からがんばって自分に有用な成分を抽出しようと努力するのも一つの選択肢ですし、その意見を排除することも一つの選択肢です。実生活においても、ノイズとうまく付き合うことが大事かもしれませんね。
ちなみに、a がいくつかは、意見を言う人にとっては分かりませんし、言われる側もわからない場合があります。意見を言う側は有用な意見 (a = 0) と考えて (信じて) いても、それを受け取る側が a をどう判断するかはわかりません。人にとっては、ノイズを悪口と捉える人もいますので、注意が必要です。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。