霞と側杖を食らう

ほしいものです。なにかいただけるとしあわせです。[https://www.amazon.jp/hz/wishlist/ls/2EIEFTV4IKSIJ?ref_=wl_share]

好きなモデルは?と問われたならば

大政絢だと私は答える。こんな超絶真面目な冗談は置いておいて、モデル(数理モデル、とくに統計モデル※1)について少し書いていく。ただし、モデル観というものは、人によって違っていると思っていて、ここに書くものが一概に正しいというわけではないであろうことは注意されたい。モデルは分析対象や分析対象を扱う分野によって異なり、見えるところで同じような表現をされていても、暗黙のところに存在する見方のようなものがあるように思う。自分の知らないモデル観はきっと存在して、それについて知らないので書けない(違うモデル観を言語化して文章として公開してくださると私は嬉しく思う)。また、偉そうに色々書いているが、自分の理解もけっして深く広くあるわけではないので注意されたい。

さて、モデルを作って使っていく過程について、ざっくりと説明する。分析対象をまず決める。分析対象は複雑すぎるので(そうでなければモデルで考える必要がない)、モデルに必要な要素を残して、それ以外は捨象する。モデルが数理モデルであれば、必要な要素が仮定となって、数理構造となる。その仮定、構造に従って、結果を導いていく。その結果を分析対象に照らし合わせ、解釈して、理解を促し、必要ならば意思決定に繋げていく。

モデルというものに不慣れな人もいるかもしれないので※2、例を使って、モデルで考えてみる。とある隣町に、とある時刻までに到着したいとする。このとき、移動時間がどのくらいになるのかということが分析対象となる。最も簡単なモデルを設定するとして、隣町まで直線距離が8kmということが分かっているとする。時速4kmで歩けるとしたら、2時間で着けると解析的に導き出せる。それならば、2時間前に出発すれば良いという結論が出るが、これで良いのだろうか。最も簡単なモデルには二つの大きな要素があった。隣町まで8kmというものと時速4kmで歩けるというものだ。直線距離は8kmかもしれないが、歩ける道があるのは8kmより長いかもしれないし、信号や踏切、坂道、天候、疲労の関係で時速4kmでは歩けないかもしれない。2時間ぴったりで着けなくても大体の時間が分かればいいというのならば、先の最も簡単なモデルによる結論で十分なのだが、遅れると困る場合や、早く着きすぎるのも嫌だという場合は、モデルの要素をもう少し複雑にして分析する必要がある。複雑化した結果、解析的に解けなければ、数値シミュレーションするなどして、結果を導くことになる。疲れているならば2時間20分、雨の場合は2時間10分になるとか導けて、意思決定ができる。

簡単にモデルを作ってみたが、持っている情報や知識、分析の目的で、モデルの構築の仕方は変わってくるだろう。データを持っているならば統計モデルを組んで、統計的推測をして確率論的に評価することもできる。隣町の例で言えば、2時間5分だとか1時間55分だとか、かかった時間の記録があれば、確率分布を推測して考えることもできる。付随して、天候だとか時間帯だとか曜日とか疲弊具合のデータがあれば、それを用いた構造のモデルを組むことも可能だ。かかる時間の予測分布を出せば、リスク評価して、自分の損得に応じた出発時刻の決定ができる。

今では統計ソフトも充実しているので、PCでポチポチ触れば、何かしら結果を出して、それに基づいた結論が出せるわけだが、中身が分からなくとも、ただ手順をたどっているだけの人もいる。モデルの目的が予測であって、それで利益が出るからいいのだという人もいるだろうが、モデルの目的が説明である場合、果たしてそれでいいのかと思うことがある。少しでも理解を促すために、以下では統計モデルについて少し書いていくことにする。

統計モデリングの一連の手続きの中には、モデルと推定手法と計算アルゴリズムがある。モデルでいえば、GLM(Generalized Linear Model)なら、指数分布族の確率分布とリンク関数を指定して数理構造を表す※3。選んだ数理構造に応じて、表現できる範囲が決まる。この数理構造の範囲の中から、何かしらの指標を最適化したり、揃えたりすることで、パラメータを推定して、モデルの構造の中から特定する。推定手法は最尤法であれば、尤度関数を最大化してモデルのパラメータを推定する。推定手法が解析的な解が得られるのならばそれでいいが、そうでない場合はコンピュータに計算してもらう必要がある。最尤法でよく使われる最適化の方法はBFGS法だとか、Nelder-Mead法だとかがある。これらのアルゴリズムに従って、最適解を得て、モデルを決定する。

これらの理解がごちゃごちゃの人がいる。たとえば、線形モデルのことを推定手法である最小二乗法だと言っている人はたまにいる。モデルを選ぶと、よく使う手法やアルゴリズムがセットになって理解するから一緒のものだと思ってしまいやすいのかもしれないが、OLS(Ordinary Least Squares)とGLM(Generalized Linear Model)が同カテゴリーのものとして並べられているのを見ると、違和を感じてしまう。

雑然とした理解にしないようにするには、モデルと推定手法と計算アルゴリズムのそれぞれの理論や体系を知るべきなのだと思う。モデルについては、仮定があって数理に従って結果が出るので、仮定が妥当でなければ適切な結果が得られるとは限らないという話は冒頭の方で書いた(ただし、統計モデルの場合、結果が出るまでの数理に推定手法が入っていて、モデルは表現できる範囲なので、注意が必要かもしれない)。推定手法については、手法はいくつもある(おぼろげに数字が浮かんでくる、おぼろげ推定法だって、推定法のひとつだ)ということが大前提で、ということは、推定手法の良し悪しは比較したくなるわけで、推定する上で望ましい性質(不偏性や一致性、十分性、精度などなど)で以て、推定手法を評価して、良い推定手法が使われているということを知っておくべきかもしれない。そして、そういった望ましい性質が成立するためには条件があるので、その条件は何かを知っておくと良いだろう(回帰分析のガウス=マルコフ定理あたりを丁寧に追うと、何が条件で導かれているかの簡単な例になるだろう※4)。数値計算アルゴリズムについては、まず単純なアルゴリズムでいいから、解析解が分かっている問題を自分で実装してみるのがよいかもしれない。許容誤差の話とか、オーバーフローの話とか、実行速度の話とか、上手くいったり上手くいかなかったりと経験できる。私は全然詳しくないので、このことについては詳しい人に聞いてほしい※5。

諸々の仮定だとか条件が妥当なのかどうかは、ドメイン知識から判断するしかない場合が多い。得られた結果が妥当でないとか、測定やサンプリングの問題だとか、その分野の知識から仮定に反していることと考えられるだとかから判断する※6。仮定や条件がズレていたとして、そのズレが本来の目的にとってどのくらい問題になるのかだとか、現状の制約(経済的理由だとか倫理的理由だとか技術的理由だとか)から実行可能かどうかだとか、そういったことも気にしないといけない。

色々とつらつらと書いてきたが、結局何が書きたかったんだ?と問われたならば、こういうことだと私は答える。モデルを構築するときの仮定、数理モデルの数理の性質、実装があるならその実装の性質、ドメイン知識などなどが分析、推論、意思決定に影響する。これらのすべてを完全に理解するのは極めて困難だが、そういうものの上に成り立っていることを知らないのでは、認識できていない危うさを抱えてしまう。「予測が外れた、ああ無情」で終わるなら、その危うさは無視してもいいかもしれないが、モデル分析、とくに統計分析は簡単に使えてしまえて、重要な意思決定につながりうる。ときとして、人の命を奪ってしまう判断にもつながってしまうことがある。公衆衛生や経済政策・金融政策の決定といった多大な影響を与えるものは当然だが、もっと身近な決定も命につながりうる。言ってしまえば、統計モデルは便利だが危うさもある刃物なのだ。その刃物の特性を事前に把握しておくためには、完全な理解はできないなりにも、知らないことを知ろうとする努力を続けるべきだろうし、果てしなく広大な関連知識※7が背景にあるということを知っておいてほしいということが書きたかった※8。完璧なモデルなどといったものは存在しないが、モデルで考えることは有益となりうる。そのためには、モデルで考えることへの理解を深く広くしていくしかないのだ。

 

※1) ワイスバーグ『科学とモデル シミュレーションの哲学入門』では、モデルを構造と解釈の組み合わせから成り立つとし、モデルの構造を具象モデル、数理モデル数値計算モデルの3種類に分類している。作者がシミュレーション寄りの人ではあるが、モデルとは何かを理解する一歩目になる。ペイジ『多モデル思考:データを知恵に変える24の数理モデル』では、数理モデルの用途をREDCAPEと7つに分類している(Reason, Explain, Design, Communication, Act, Predict, Explore)。

※2) 浜田『その問題、数理モデルが解決します』は、社会科学や統計学のモデルを平易な言葉で説明していて、これまで数理モデルというものに触れてこなかった人が、その考え方を身に着けるのに役立つと思う。ほかに、江崎『データ分析のための数理モデル入門 本質をとらえた分析のために』あたりも参考になる。アヒル本こと、松浦『StanとRでベイズ統計モデリング』は、統計モデルについて、丁寧に言語化されていて理解を促進してくれる。ベイズ統計については色々な話があるみたいだが、自分で分かっていないことが多いので、ここでは書かない。

※3) Dobson『一般化線形モデル入門』あたりが詳しい。LMMに進みたかったら、McCulloch『線形モデルとその拡張』あたりが良いかもしれない。

※4) こういった話は浅野・中村『計量経済学』などの、数理を解説している計量経済学のテキストを読むと分かるようになると思う。数式を介さないで理解に到達するのは極めて難しいと思われる。ちなみに、Hansenが"A Modern Gauss-Markov Theorem"という論文でガウス=マルコフ定理を拡張しているという話が昨年か今年に話題になったが、私は読んでいないので詳細は分からない。

※5) 数値計算の話を知りたいというときに、最初に紹介してもらったのが、東大の公開している講義動画(https://ocwx.ocw.u-tokyo.ac.jp/course_11404/)だったが、松尾先生の「僕らは脆弱な数の体系の上に暮らしている」という言葉が印象的だったし、講義内容も分かりやすくて良かった。もっと奥深くに行くならば、コンピュータの中身へ掘り下げていく必要があるように思う。開発環境だとかバージョン管理とかも、私は全く詳しくないが重要だと思う。

※6) 江崎『分析者のためのデータ解釈学入門 データの本質をとらえる技術』が、こういったことに関して散在している知識を一冊にまとめていて、参考になるかもしれない。サンプリングについては社会調査法など、測定については心理学や工学などの分野を漁るといいかもしれない。

※7) 果てしなく広大な関連知識をなんでもかんでも修得することはできないので、何を詳しく学んで何を軽く学ぶかという切り捨てと選択が重要になってくると日々感じる。この切り捨てと選択はモデルの構築と一緒だなと思う。切り捨てた部分は他の人と協力して補完していけばいいと考えるようにもなったが、他の人との協力をスムーズに行うためには協力してもらう分野の知識が軽くでもあった方が望ましいとも思う。

※8) 何も考えずにテキトーに予測して上手くいったという人と、問題が生じないか熟慮してモデリングして予測して上手くいっている人の評価において、予測して利益を出すことが至上とされるならば、前者の方がスピーディーで正しいのかもしれないが、前者は後者に比べて大きなリスクを抱えている可能性があることを評価者は知っていてほしい。知らないこと、思いつかないことに対して、我々は意を注ぐことはできないのだ。