hidekatsu-izuno 日々の記録

プログラミング、経済政策など伊津野英克が興味あることについて適当に語ります(旧サイト:A.R.N [日記])

なぜ統計モデルは一次関数と正規分布ばかりなのか

統計学とは何か、そしてベイズ統計学の話」に反論があまり寄せられなかったので調子に乗って、今度は(古典的な)統計モデルの話(ただ、だいぶ理解の怪しい話なので間違いがあれば教えてほしい)。

 

現実の世界では単なる加減算だけでなく2乗や 3 乗あるいはべき乗、反比例といったいろいろな関係があるはずなのに統計モデルではめったに出てこない。あったとしても対数変換や一般化線形モデルのリンク関数のように、それぞれの方法で1次関数の線形モデルに落とし込んで扱うものばかりで任意のモデルを自由に扱えるようなものではない。

 

では、n次関数はどう扱うんだろうと思って、調べた結果「Wikipedia: 多項式回帰」にたどり着いてはたと気付いた。これも結局、基底関数を使って1次関数の形に。そして、この先にはカーネル法を使うSVMがある。これもカーネル関数を使って1次関数に変換して解いている。

 

そういえば昔、人類は結局、線形しか理解できないんだよ、というツィートを読んだことを思い出した。なるほど統計モデルというのは結局、どんなモデルであれ最終的に勝手知ったる一次関数になんとか落とし込んでしまえ、という話だったのか。

 

逆にそこから出発すると、階層モデルというのは単に一次関数で表現できるようにデータを分割せよという話だし、カテゴリデータを0/1のバイナリで表現するのも同様だ。その一方で順序カテゴリデータは一次関数で扱いにくいので、ウィルコクソンの順位和検定のようにノンパラメトリック手法に頼らざるを得なくなる。こう考えると、いろいろと腑に落ちる。

 

もしかすると正規分布が良く使われるのも同じなのかもしれない。大数の法則中心極限定理からサンプル数が多くなれば多くの場合、正規分布になる。正規分布の和も積も正規分布になる。実際の分布がどうあれ、だいたい正規分布になるなら正規分布になる前提で扱い、そうでない場合にはじめて困りましょう(例えば、サンプルサイズが小さい場合は t 分布を使うなど)、と。

 

ベイズ統計学の場合はどうなんだろうか。pymc を使う限り普通に式と確率分布を指定すればよく、前述のような制限は特にない。ベイズ更新しているだけで最小二乗法を使っているわけでもないので、扱える統計モデルの自由度は古典統計学よりも大きいように思える。*1

*1:順序カテゴリデータのあつかいについては似たようなもんだと思うけれども。

最低限必要な日本史の知識を考えてみた

歴史を学び直した話」の続きと言えば続き。

 

まだ、子供は2歳にもならないのですぐにどうこうするわけではないけれど、ある程度ものごころがついてきたら日本で生活する上で最低限困らない程度の歴史の知識は教えてあげたい。

以前書いた通り、私は歴史にとても疎い。京都駅で適当に散策した挙句の二条城にて立て看板を読み、そこが大政奉還の地であることをはじめて知る、などという感じで本当によくわかっていなかった。平安時代と江戸時代くらいはわかるけれど、その間に何時代があるかも曖昧な感じだった。日本史とはだいたいこんな感じと思えるようになったのも、つい最近のことだ。

 

そういうド素人の私が日本史を見たときに問題だと思うのは、教科書レベルでも覚えなければならない出来事や人物が多すぎる、ということ。正直、観光地や歴史ドラマの背景として必要となる日本史知識はもっと薄くていい。世の普通の人が常識として知っている程度の知識を薄く広く知ることがまず重要で、その他のことは必要に応じて理解していけばいい。小中高と歴史を学ぶ機会はあるものの、あまりにも盛沢山で記憶に残っているのはたいてい最初に学ぶ古代のことばかりではないか。*1

 

そこで最初に学ぶべき最低限必要な日本史というものを考えてみた。

  • 現在は2024年、西暦と呼ばれるものでキリストが産まれたとされていた年を基準に春夏秋冬が2024回ほどあったと思えばいい。
  • 歴史は事実の積み重ねというより、権力争いの記録だと思った方がわかりやすい。
  • 原始時代:700万年前、アフリカ北部で産まれた人類は時間をかけて世界に散らばっていく。4万年ほど前に日本に到達し縄文人の祖先となる。狩猟中心の生活が行われていた(縄文時代)。その後、3000年ほど前に大陸から朝鮮半島を経由して渡ってきた弥生人と共に稲作が伝わる(弥生時代)。現代の日本人の多くは縄文人弥生人の混血をルーツとしている。なお、恐竜は6000万年以上前に絶滅しているため、人類と恐竜が同時にいたことはない。
  • 古代:部族間の争いを経て、300年頃から奈良を本拠地とするヤマト王権が勢力を広げ(古墳時代)、600年頃には今に至る天皇の元での中央集権国家が成立(飛鳥・奈良時代)。この頃、インド発、中国経由で仏教が伝来し、日本古来の神道との融合が進む(神仏習合)。その後、京都に都が移り(平安時代)、東京に首都が移る明治時代まで政治の中心となる。なお、三国志の時代ですら200年代なのでこの頃の日本は中国から見たら蛮族からの成り上がりレベル。
  • 中世:1200年頃から武士が台頭、源平合戦を経て、源頼朝による武家政権が成立。天皇による支配は形式的なものとなり、武士が実質的に支配する時代となる(鎌倉時代)。足利尊氏による室町幕府室町時代)、織田信長豊臣秀吉による短期間の天下統一(戦国時代)を経て、徳川家康が開いた江戸幕府(江戸時代)へと繋がる。
  • 近世:1600年頃から260年間にわたり、いろいろあったがそれなりに平和な江戸時代が続く。この時代に蝦夷(今の北海道)と琉球王国(今の沖縄)を併合し今に至る。ちなみに、蝦夷琉球の人々は縄文人の血筋だそうだ(民族は異なるが同じ人種)。
  • 近代:1860年頃、先に近代化した欧米からの圧力に難しい舵取りを迫られる中、明治維新が起こり江戸幕府に代わり、天皇の権力の復活と共に議員内閣制や資本主義による近代化が急速に進む(明治・大正時代)。神道と仏教も分離(神仏分離)。その後、昭和時代に入ると、列強に追いつけ追い越せと権益確保のため、中国やロシアと戦争(日清・日露戦争)し勝利、台湾、韓国を植民地化。第一次世界大戦では日英同盟に基づき参戦し戦勝国側となるものの野心を見抜かれ、昭和時代に勃発した第二次世界大戦では日独伊三国同盟に基づきアメリカと戦争することに。東京大空襲や広島・長崎への原爆投下などを経て1945年に敗戦。連合国(主にアメリカ)に一時統治されるものの1952年に主権回復、象徴天皇を持つ民主主義国家として生まれ変わり現代に至る。

 

これくらいわかっていれば、歴史の細部も大きな流れの一部として認識できるようになるし、1時間もかからずに説明できるのではないかと思う。間違いがあれば指摘歓迎。

*1:この手のものとしては、ぴよぴーよ速報が有名だが、それはそれで端折りすぎな気がする。

Qiita に「Node.js のサポート期間を8年に延ばせる(かもしれない)ひとつのやり方」を書いた

いやまぁ、どこまで本気かと言う話はあると思うんですが。

 

しかし、Node.js のサポート期間30カ月は短すぎる。大規模基幹系システムとかだと開発にテストだけでも1年くらいやっていることがあるので、リリースするまでの間にサポート期間が終わっちゃってすぐにメジャーバージョンアップしないとダメということになりかねないわけだし。有償でもいいからどこか延長サポート出してくれないかな……

ニューラルネットとランダムフォレストと統計学の決定的違いって何?

最近、統計学にはそれなり詳しくなってきたと思う一方、統計学機械学習は本質的に何が違うのか、という基本的なところでずっともやもやを抱えていた。統計学にもノンパラメトリックなものはあるし、統計学も広い意味では機械学習のひとつと言えなくもない。機械学習の中にもNNもあれば、テーブルデータにより適していると言われる決定木モデルやクラスタリングに使う教師なし学習の k-means もある。

たしかに「「統計学と機械学習の違い」はどう論じたら良いのか - 渋谷駅前で働くデータサイエンティストのブログ」で説明されるように、統計学は説明に、機械学習は予測により重きが置かれているという目的の違いはあるものの、例えばランダムフォレストなどの決定木モデルは機械学習と言えど説明にも使えるし、ベイズ推定などは予測を通じて説明するという側面も強い。そこにはグラデーションがある。

ニューラルネットとランダムフォレストと統計学が異なる手法であるのは明らかであるが、ではどういう考えにおいて使い分ければよいのだろうか。例えば、予測にをするなら線形回帰よりもニューラルネットを使う「方がいい」と言えるのだろうか。

 

そんな中、先日ある考えが浮かんだ。「前提として仮定する制約条件の強さの違い」であり「制約条件の強さ=説明」と考えればいいのではなかろうか、ということだ。

統計学とは何か、そしてベイズ統計学の話」で書いたように統計学と言うのは不良設定問題であり、推測には様々な仮定を必要とする。この様々な仮定は、きつい制約であればあるほど少ないデータでも的確な推定ができる一方で、その制約が間違ったものであればまったく意味のない分析になってしまう。例えば、概ね直線的に並んでいるが数点外れ値があるようなデータがあったとして、外れ値が単なる異常値であれば単回帰こそがよい分析となるだろうし、外れ値が別の要因による正常値であれば単回帰よりももっと複雑なより制約の緩いモデルを使う方が適切となる。

そして「物事を説明する」、ということはその物事の本質を表現したモデルで表現できているか、が重要になるだろう。ニューラルネットのある層が本質(例えば画像の輪郭と言った)を表現していたとしても、事前に意味付けがされていないが故に、説明はできずまた新たな推測が必要になる。

 

統計学は頻度主義統計学であろうとベイズ統計学であろうと必ず固定のモデルを必要とする。このことは、これらの手法が「説明」を目的にしていることを意味している。ブートストラップ法のようなノンパラメトリックの手法であっても、「平均値」と「分散」というモデルを通してデータを説明しようとしている、と言える。

 

ランダムフォレストのような決定木モデルはどうか。これらの手法を使うと決定木の確率分布が得られる。これも結果的に「説明」に繋がる。統計学ほど制約は強くない分、「説明」の度合いは大きくないかもしれないが、どの変数による分岐の影響が強いかを通じて「説明」が得られる。ランダムフォレストのような決定木モデルはテーブルデータに強いというより、テーブルデータの「説明」に適した形にモデル化がされている、と考えることができる。

 

そしてニューラルネットはどうか。各パラメータは汎用的であり、そこには何ら意味付けはない。各層に残った特徴から類推するしかない。「説明」がない以上、どんなに精度が高くても「予測」としての役割しか果たせない。もし、ニューラルネットによる推定を「説明」するのだとすれば、各層が持つ特徴量抽出の役割をそれに特化した専用モジュールに置き換えても同じ動作をするかによって確認するしかない。なぜならトレーニングをするたびに各層の値はまったく変わってしまうかもしれないわけだから。

 

ニューラルネットワークでもSHAPを使えば説明できるじゃないか、という話もあるがSHAPが説明するのは結果の根拠であってモデルそのものの説明ではない。例えば、ある結果の根拠として説明変数が提示されたとして、その説明変数の値を変えたからと言って思った通りの結果になるとは限らない。あくまで1例に対してその根拠を示すだけだ。

 

まぁ、私個人はこういう理解で納得したという話で、学術的にどうこうという話ではないので批判もあろうとは思うけれども。

「Javaエンジニアのための Nodejs/Nuxt3入門」というスライドを公開した

ここ数年、私が担当しているプロジェクトは Nuxt で構築することが多いだが、なかなか同じように考える人が広がっていかない。この過程で必要になったライブラリも公開しているのだが、なかなか利用も伸びていない。

というわけで今回、「Javaエンジニアのための Nodejs/Nuxt3入門」というスライドを作って公開してみた。

speakerdeck.com

 

もちろん業務システムで Node.js が選択されにくい理由はあって、現在の業務システムにおいては Javaデファクトスタンダードであり、実行環境である JavaVM のサポート期間も含めて企業にとってその選択は合理的である。今となっては Node.js の非互換などないといってもいいのだが、LTS が 3年しかないなどなかなか厳しいところもある。

一方で、Java でフロントエンド開発するのはさすがにもう時代遅れなのではないかというのも事実だ。サーバーサイドをどうするかはともかく、高度でレスポンスの良いUIを考えると JSP や Thymeleaf の MVC モデルを使い続けるのは限界がある。なんらかの形で Node.js と組み合わせなければならないのであれば、すべてを Node.js に寄せてもいいはずだとも思う。

 

資料の誤りなどご意見があれば X の @hidekatsu_izuno まで頂ければ幸い。

「引き寄せの法則」の歴史

先日紹介したルメルト「戦略の要諦」の前著「良い戦略、悪い戦略」の中にいわゆる「引き寄せの法則」の歴史について書かれていたので紹介したい。

長いが「引き寄せの法則」を好む人は多くおり、考えるきっかけになると思う。

ニューソート運動の創始者であるプレンティス・マルフォードは、一八八九年の著作『精神力』の中で次のように述べている。

 

「何らかの事業や発明のために計画を立てるとき、私たちはちょうど機械を作るときに鉄を扱うように、思考という見えない要素を扱っている。計画つまり思考は、練り上げられると同時に、また別の見えない要素、すなわち計画を実行し具体的な成果を出す能力を自ずと生み出す。私たちが失敗を恐れ不運を予感するときも、見えない思考を形作っているのであり、先ほどと同じ引き寄せの法則により、自ら失敗や不運を招く」

 

二〇世紀初めのニ〇年間ほどは、この種のマインド本の全盛期だった。おそらく最も影響力があったのは、ウォレス・ワトルズ『富を引き寄せる科学的法則』だろう。ワトルズは、どんな人にも神のようなパワーがあると考えていた。しかし宗教を連想させるようなものは巧みに排除して、魅力的な呪文の数々を書き連ねている。(中略)

クリスチャン・サイエンスの影響を受けて宗教科学運動を起こしたアーネスト・ホームズは、一九一九年の著作『クリエーティブ・マインドと成功』の中で、成功するためには失敗という観念を完全に排除しなければならないと説いた。(中略)

ニューソート運動は一九二〇年代前半にピークに達し、その後はさまざまな思考法に形を変えて、一九三〇年代にはモチベーションやポジティブ・シンキングが主流になる。一九三七年に書かれていまなお人気のナポレオン・ヒル『思考は現実化する』を筆頭に、ノーマン・V・ピール『積極的考え方の力』、クレメント・ストーン『心構えが奇跡を生む』、キャサリン・ポンダー『「宇宙の力」を使いこなす方法』、アンソニー・ロビンズ『一瞬で自分を変える法』、ディーパック・チョプラ『富と成功をもたらす7つの法則』……。最近では、ワトルズの信奉者であるロンダ・バーンがニ〇〇七年に書いた『ザ・シークレット』が大ヒットし、映画化もされている。とは言えバーンの「秘密」はマルフォードの「引き寄せの法則」とまったく同じで、要するに願ったことは叶うというのである。今日ではこうした考え方を、一世紀前に書かれた著作の焼き直しであるにも関わらず、「ニューエイジ」と呼ぶ。

言うまでもなく著者のルメルトはこのような考えを否定し、この思想を経営論や組織論に展開したピーター・センゲ『最強組織の法則』を例に的外れであると断言する。

センゲが強調する「共有ビジョン」の重要性は、企業経営者に多大な影響を与えた。「AT&T、フォード、アップルといった企業の成功は、共有ビジョンの存在なしには考えられない。(中略)こうした個人のビジョンが企業のあらゆるレベルで共有されることこそが重要なのだ。それによって何千人もの社員のエネルギーを集中させ、多様な人々の間に共通のアイデンティティを生み出すことができる」とセンゲは主張する。

この主張は多大な説得力を持っていたが、実際には的外れである。フォードやアップルの成功は卓越した能力と幸運の賜物であって、それをあらゆるレベルで共有されたビジョンに帰すのは、事実の歪曲と言わざるを得ない。

 

ルメルトの言い分はごもっともである、とは思う。ただ、引き寄せの法則がまったくの間違いかと言うとそうでもないな、とは感じる。

起業家は成功するまであきらめないことが必要で、様々なトラブルにくじけない心が必要なことは間違いない。まったくトラブルなくうまく行く起業家など存在しないであろうから、宝くじを買わなければ当たらない、と同じ理屈で信念は重要であるとは言えるかもしれない。もちろん、信念を持てば成功するわけでもないのだから、必要条件ではあっても十分条件ではない。

同様に、特に若手には「自分のやりたいことがあれば常にアピールしておくといいよ」と言うことがある。何かしらポジションが空いた場合に、そういえば彼がやりたいと言っていたな、という理由で話が回ってくることは実際多い。

 

とは言っても、それを拡大解釈して経営にまで広げるのは問題だろう。「共有ビジョン」は結果的にそう見えるだけ、という側面が強いように思う。なぜアップルやフォードが成功したのか、という結果から逆引きで何か共通項を見出したもののように思える。彼らが意図的に効果を狙って「共有ビジョン」を出したわけではないだろう。そもそも、前回のエントリでも触れたように複合的な事業体であれば意味のある「共有ビジョン」など出しようがない。

個人的にはビジョンは「デフォルトの行動指針」としては使えるのではないか、と考えているのでルメルトよりは前向きではある。が、成功の決定的要因ではないことに疑問の余地はない。

ベイズファクターが難しすぎる件について

ベイジアンサイドでは p 値に代わるものとしてベイズファクターが推されている。ベイズファクターは、2つのモデルの尤度比から算出される値だ。

p 値の問題点はいろいろあるが、実務的にはデータの追加ができないというところが大きい。ベイズ統計学を使う場合、尤度原理に従う限りデータを随時追加しながら検定を行うことができる。

しかし、このベイズファクター、p 値ほど簡単に導出できないうえに、値の取り扱いが難しい。

  1. 導出が解析的にできない
    ベイズファクターを求めるには周辺尤度を計算する必要があるが、これは解析的に求めることができない(場合が多い)ベイズ推論同様、近似計算を行う必要が出てくる。
  2. 事前分布の影響を受けやすい
    ベイズ推論自体はデータが増えれば事前分布の影響が緩和されるが、ベイズファクターは事前と事後のオッズ比となるため事前分布の影響が緩和されない。このため事前分布として無情報や弱情報の事前分布を使う場合、ベイズファクターの値は使い物にならなくなる。
    ベイジアン的にはそもそも妥当な事前分布を設定すべきで無情報や弱情報を使うべきではない、という考えもあるが、その境界がどこにあるのかはよくわからない。
  3. 計算方法がいろいろある
    メジャーなのは前述の方法だが、2つのモデルが(帰無仮説と対立仮説のような)入れ子の関係の場合に使える Savage-Dickey 法があり、これが良く使われているようだ(ただ、後述のような留意点もある模様)。Arivz の plot_bf を使うことで簡単に求めることができる。
    メジャーでない方式として、p値ベースのベイズファクターとかテストベースのベイズファクターなどもあるようだ。

そしてベイズファクターを求めても、正しく理解/報告できていないケースも後を絶たないようで次のような論文もある。

論文を軽く読んだ限りだと

  • 事前分布を報告していない
  • ベイズファクターが1付近なのに対立仮説を採用
  • ベイズファクターの値をオッズ比や効果量として扱う

みたいなケースが多いようで。事前分布の報告を忘れるというのは分からなくもないけど、後ろの2つは普通にダメな気が……

参考