YutaroOgawa / causal_book

書籍「作りながら学ぶ! PyTorchによる因果推論・因果探索」の実装コードのリポジトリです
MIT License
113 stars 32 forks source link

【第5章第2節p115】Meta-Learnersにおけるパラメータチューニング #16

Open Tsutomu-Aoyama opened 3 years ago

Tsutomu-Aoyama commented 3 years ago

ある行動(Z)を行うことで、変数Yがどの程度増加するのか、という効果検証を行うべく、本書で勉強させて頂いている者です。 Meta-Learnersのハイパーパラメータ調整に関して、疑問点が2つあります。

まず1点目は 5-2のX-Learnerの実装部分では記述を簡単にするため、ランダムフォレストのmax_depthは決め打ちで3とされていますが、 その後、まとめにおいて、ハイパーパラメータは検証データに分割するか、n-foldクロスバリデーションにより決定する、という記述がありますが、データの分割のタイミングがよくわかりません。

最初に、処置群と対照群に分割して、変数Yを回帰するモデルを作成しますが、その前に学習データと検証データに分割して、モデルM0〜M3とモデルgのパラメータチューニングに全てこの(学習,検証)のセットを用いるのか。 それとも、各モデルに対して、学習させる前にそれぞれ別々に検証データを作成するべきなのか。

続いて2点目は、 X-Learnerにおいて、各人の因果効果ITEを計算する際に、τ0やτ1を算出するためにM2やM3を使います。この際、τ0の学習にはx1は用いていないですが、x0は使われてしまっています。ハイパーパラメータを調整することで、検証データとなった一部のx0に対する評価が不当に高くなってしまうリークのような現象が発生してしまうのではないか、という点です。

一般に機械学習では学習データを学習用と検証データに分けて、パラメータチューニングを行い、その後に一切使っていないテストデータに対して予測性能を測定すると思いますが、因果推論では、目的変数であるτが正解であるとは限らないため、学習に利用したデータに対して予測を行い、評価しても問題がないのでしょうか?

以上に2点について、もう少し具体的にパラメータチューニングの方法についてご説明が頂けると幸いです。 よろしくお願いします。

YutaroOgawa commented 3 years ago

@Tsutomu-Aoyama さま

非常に本質的で重要な質問、誠にありがとうございます。

一番安全な方法はデータを一番最初に訓練用と検証用に分けて、 以降、実際のモデル構築には訓練用しか使わない方法です。

それ以外のn-foldクロスバリデーションなどにしても、何にしても、検証として使用したデータが含まれた訓練モデルを使用すると、ご指摘の通り、そのデータに対する結果は性能が良くなってしまいます。

ですが、理想的に最初から完全に分けた状態はデータ数が多くないとできないので、 そこからどこまで妥協していくかは、業界により様々かと思います(同じ因果推論でも。医学系と経済系では異なりそう)

一番良いのは、ご自身の分野の論文を数本確かめ、実際どう扱っているのかの例を把握し、その通りに合わせるのが良いと思います。

かっちりした答えを返せず、大変申し訳ございませんが、どうぞよろしくお願い致します。