読者です 読者をやめる 読者になる 読者になる

hidekatsu-izuno 日々の記録

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

「ダメな統計学」お勉強メモ

確率統計

レックス・ラインハート著「ダメな統計学」は、いわゆるトンデモ統計批判の書ではない。ここで説明されるのは、科学者が意図せず間違って使用している確率・統計の手法についてだ。科学者ならば統計についての知識水準は高いものがあるのだろうと思っていたが、実際にはそうではないようだ。ある論文によれば、公刊されたほとんどの論文に問題があるとのこと。

ダメな統計学: 悲惨なほど完全なる手引書

ダメな統計学: 悲惨なほど完全なる手引書

 

 本書は平易に書かれているので読み進めることはできるのだが、前提となる知識が不足しているため、なかなか理解が難しい。過去、確率・統計には何度か挑戦しているのだが、いまだに分かった感がない。残念ながらこの本を読んでも系統だった理解には程遠い。というわけで、今回は、本書のお勉強メモだと思っていただきたい(誤解している部分もあると思うので、思う所があれば指摘願いたい)。本書には面白い事例の紹介に多くのページが割かれているが、そちらは買って読んでもらうとして、ここでは定義や結論を中心に抜粋(場合により補足)した。

第1章 統計的有意性入門

  • p値:有意確率。仮説検定手法のひとつで、結論が誤っているならば驚くべきことである確率。経験的に、5%有意(p値<0.05)とか1%有意(p値<0.01)で判断する。結果が単一値で求まり便利なため広く使われている。
  • 偽陽性:間違った結論を正しいとしてしまうこと
  • 偽陰性:正しい結論を間違っているとしてしまうこと
  • p値の誤解1:統計的に有意である=効果が大きい、ことを意味するわけではない
  • p値の誤解2:統計的に有意ではない=効果がない、ことを意味するわけではない
  • p値の誤解3:p値=偽陽性率と解釈してはいけない。期待する偽陽性率を有意水準として定め、有意か否かの判断をするためだけにしか利用できない。
  • p値の問題1:同じ観測データを使っても、観測されていないデータの違いで異なる値が出る(問題設定がp値に影響する)
  • 有意性を見たいのであれば、信頼区間を使う方が適切。

第2章 検定力と検定力の足りない統計

  • 検定力:偶然と効果を区別する確率。経験的には、検定力が80%以上あれば良しとされる
  • 小さな効果を調べるには、多くのデータがないと十分な検定力が得られない
  • データが足りないと、分散が大きくなり効果が誇張される
  • データ群にデータ数のばらつきがある場合(例えば、都道府県ごとの人口が影響する調査)は、縮小処理(データ群に対する重み付け)が有効だが、本当に極端な現象が起こっていることを隠してしまう場合がある
  • 効果を見たいのであれば、有意性検定や検定力を見るかわりに、信頼区間を見るべき。有意でも信頼区間の広い結論は解釈が困難なことがわかるし、信頼区間にゼロが含まれていても、狭ければ効果が小さいことを示唆しているのかもしれない。
  • 信頼区間の応用例として、リコメンデーションの機能に信頼区間の下限を重みを使うことで、より適切な評価ランキングが実現できるという例が挙げられている。

第3章 疑似反復:データを賢く選べ

  • 疑似反復:独立していないデータを繰り返し取得すること
  • 交絡因子:有意な結果をもたらす隠れた原因
  • データ数は多くても、独立でないため意味がない。独立でないデータは平均化などの処理を行う必要がある(計測誤差は減るという意味では意味がある)
  • データの入手ルートが異なる場合、系統誤差が発生する可能性がある。主成分分析を行うことで入手ルートごとの偏りを補正することができる。
  • 有意=効果がある、ではない。交絡因子が原因となっている可能性など、きちんと結論を導き出せる実験の設計が必要

第4章 p値と基準率の誤り

  • 基準率:調査対象のうち有効なものが含まれる確率 
  • p値は効果がある場合の確率ではなく、あくまで効果がないとしたら驚くべき結果が出る確率。そのため、調査対象に無効な対象が含まれている場合には、偽陽性の確率が上がり有意であるからといって正しいとは言えなくなる。
  • 何度も同じ調査を繰り返す場合も同じ現象が起こる。
  • 複数回調査した場合はp値を回数で割ることで偽陽性の確率を下げることができるが、検定力が下がる(ボンフェローニ法)。より良い方法としてベンジャミーニ=ホッホベルク法がある。

第5章 有意性に関する間違った判断

  • p値は効果の大きさを表さない。そのため、ふたつの調査対象の比較をするときは、それぞれ単独で調査して算出したp値を比較しても意味がなく、両方を直接比較する必要がある
  • ふたつのグループのそれぞれの平均に統計的有意差があるかを調べる場合には t 検定を使う

第6章 データの二度づけ

  • 大量のデータから有効性の高そうなデータだけを抽出し分析すると、誇張された結果が得られる
  • 特徴的なデータだけを集めると平均への回帰によって、存在しない効果があるかのように見えてしまう
  • 効果が出た時点で調査をやめると、特徴的なデータが多く含まれた状態になりやすいため、誇張された結果が得られる

第7章 連続性の誤り

  • データを不必要に分割して分析するのは偽陽性が増すためやめるべき。回帰分析を使えば、あえて分割して分析する必要がない。
  • どうしても分割したい場合には、コンセンサスのある外部の基準に従うこと。データを上手く分離できる最適な基準を選ぶと、p値が良い分割となり誇張された結果が得られてしまう。

第8章 モデルの乱用

  • データに比べ変数の数が多い場合、過剰適合が起こる。
  • 重要な変数を選んでいく段階的回帰(ステップワイズ法)は、何度も比較する場合と同様、偽陽性が発生し、過剰適合が起こりやすくおすすめできない。変数を選ぶ基準に赤石情報量規準(AIC)やベイズ情報量規準(BIC)を使うとある程度過剰適合を抑えることはできる。
  • データを教育用と検証用にわけ交差検証を行うと過剰適合しているかの確認が可能。
  • 相関と因果は違う。
  • シンプソンのパラドックス:全体の傾向と部分の傾向では異なる場合がある
  • ランダム化試験なしに交絡因子を防ぐことはできないが、一方でランダム化試験が現実的にはできない場合も多い

第9章 研究者の自由:好ましい雰囲気?

  • 研究者はデータや手法だけでなく分析目的すらも自由に選ぶことができる。そのため、結果として研究者にとって都合の良い結果を導きやすいというバイアスがある。
  • 探索的研究と確認的研究を混同すべきではない。研究目的、手法を決めてから分析をするべき。

第10章 誰もが間違える

  • 統計手法に長けていない問題以前に、そもそもp値を正しく計算できていないケースも多い(「ネイチャー」掲載論文の38%でp値に誤字や掲載間違いがあったそうだ)
  • 再現できない研究成果も多い。医学で最も引用されている研究論文の四分の一が刊行後に再試験されておらず、三分の一が後で誤りか誇張されていることが発覚している。

第11章 データを隠すこと

  • データを公開しないことで論文の問題を隠す場合がある。
  • 効果がない、という研究は発表されにくいため、メタ分析をすると効果がある方に偏りが生じてしまう。

第12章 何ができるだろうか

  • p値を使わず信頼区間と効果量推定を使え。
  • まじめに学ぶには時間がかかるので統計学者を外注しろ。

読後の感想

  • 確率統計よくわからんなぁ、と思っていたがみんなわかっていないのだということがわかって安心した(おい)
  • 時系列分析とか正規分布でない場合の注意事項について知りたかったのだけど、載っていなかったのが残念。

 

新・工数見積りの海を彷徨う

前回までのエントリにて、IPAソフトウェア開発データ白書 2014-2015 を元に機能数から工数見積りを行う方法について検討してきた。

先日、IPAソフトウェア開発データ白書 2016-2017が公開されたため、改めて数値の算出を行おうと思う。ただ、前回と同じことをやっても面白くないので、前々から試してみたかった標準工期からの乖離度をパラメータに加えてみることにしてみた。

先に言っておくと、これが意外なほどうまくいかない。標準工期に比べて短納期になるほど機能数に比べ工数が大きくなるように思えるが、実際のデータを散布図で見てみるとまったくそんなようには見えない。

f:id:hidekatsu-izuno:20161221225506p:plain

標準工期からの乖離率で調整した工数を使いロバスト回帰をかけてみたが、結果は同様で、むしろ工期の乖離を考えないほうが残差が少なかったりする。

というわけで、最終的には標準工期からの乖離率は考えないことにした。前年のデータと比べると次の通り前回の数値より一割ほど上振れしている。

工数[開発5工程/人時]=131.33×画面数+78.55×帳票数+61.29×バッチ数

機械学習をさらに理解する

前回のエントリで機械学習とは空間に線を引く作業に他ならないと書いた。これはこれで正しいとは思うのだけれど、さらに調べていくと例外も当然ある。具体的にはベイズ統計を用いた機械学習モデルがそれにあたる。

古典的な確率論では、誤差に分布があるだけで、真の境界は線上にあると考えるが、ベイズな世界では、境界線自体に分布がある状態こそが真であると考える。だから、出力となる結果は値ではなく確率分布となる。

とはいえ、線が確率分布となるだけなので、脳内イメージ的には、ぼんやりとした線が引かれると考えればそう大きな飛躍があるわけではない。

ベイズ的な確率論を含めた機械学習では、機械学習を「識別関数」「確率的識別モデル」「確率的生成モデル」に分類して説明するのが一般的なようだ。「識別関数」と呼ばれるものが古典的な確率論をベースにした機械学習法、「確率的識別モデル」「確率的生成モデル」はベイズ的な確率論がベースとしたモデルだ。「確率的識別モデル」が条件付き確率分布を直接推定するのに対し、「確率的生成モデル」は、データの尤度と事前確率分布を推定し、そこから条件付き確率分布を導出するものを言う。

「識別関数」も対ベイズとしてはひとつにまとめられているが、「線形識別関数」、線形識別関数に非線形変換を組み合わせた「間接的非線形識別関数」、直接的に非線形識別関数を推定する「直接的非線形識別関数」の三種類に分類できるようだ。

ただ、このように分類したところで、どれがどのように良いのかと言われるとよくわからないところがある。線形よりは非線形の方がより細かい分類が可能だろうとか、ベイズ確率のほうがより現実的な感じもする、といった感覚はあるのだけれど、こういう問題にはこの方法を使うべき、という指針らしきものはあるのだろうか。

機械学習を理解する

機械学習には昔から興味がありSVMとかちょくちょく調べてはいたのだけど、体系的理解がなく、全体としてはもやもやした感想を持っていた。

先日、特にきっかけがあったわけでもないのだけれど、急に思いたち機械学習で用いられる手法を整理すれば何かわかるのではないかと、いろいろ調べてみた。

まず、機械学習がどのような目的に用いられているかを調べるのがいいのでは思い機械学習チートシートをひとつひとつ紐解いていくと、概ね次のようなものに集約されることが見えてきた。

最初は、この目的と教師あり/教師なし/強化学習を組み合わせればパターン分けできるのではないか、と思ったのだけれどもどうにもしっくりこない。クラス分類で用いられる手法は概ね回帰でも利用できたりするし、異常検出に至っては他の目的の応用例ともいえるくらい多様な手法が導入されている。

いろいろ考えてみた結果、見方を変える必要があるという気になり、最終的に落ち着いたのが次の説明となる。

  • 機械学習とは、入力データをうまく分割できるよう、空間に線を引く作業に他ならない
  • 分割した線上の値に注目するのが回帰分析(予測)
  • 分割した領域に注目するのが識別(クラス分類やクラスタリングなど)

2クラス分類であれば一本の線を引けばよいし、複数クラス分類についても、複数本の線を引くだけのことだ。線を引くということは関数のパラメータを推定する、ということに他ならないわけだから最終的には機械学習とは、

  • 入力データをうまく分割する関数のパラメータを推定する

ということを意味することになる。この説明のよいところは、教師あり/教師なし/強化学習の意味合いも教師データの違いとして説明可能なところだ。

  • 入力データと出力データの組から関数のパラメータを推定するのが教師あり学習
  • 入力データと分割終了条件から関数のパラメータを推定するのが教師なし学習
  • 入力データと出力データの評価の組から関数のパラメータを推定するのが強化学習

学習というとフィードバックがあるかのような前提を想定してしまうが、フィードバックのありなしはオンライン学習(あるいはミニバッチ学習)が可能か、という手法の問題であって本質的な話ではない。

だから何だ、という話に感じる人もいるかもしれない(し、実は全然間違っている説明なのかもしれない)けれども、私の中ではうまく整理できたような感覚を持った。人工知能と言うと何かすごいもののような気もするけれど、その内実は関数近似の延長線上の話なんだ、と考えるとちょっとはわかった気になれるというものだ。

データモデリング・テクニック

開発

社内勉強会用に流用するつもりではあるんだけど、一度データモデリングについては考えをまとめておきたかったので、資料化してみました。

 データモデリングについては、昔読んだ本を読み返したりもしたのだけど、なんとなく共通的な基盤がありながらも、これが標準と言えるような方法論がないのが難しいところ。私個人としては、「楽々ERDレッスン」の著者の羽生章洋さんがWeb+DBプレスに書いていた記事とか当時のブログに強く影響を受けました。

自分の考えが絶対に正しいというつもりはないんだけど、わりとトラディショナルな考え方をベースにいろんな人のノウハウっぽいものを詰め込んで書いたので、新人向けの教育資料としては手頃なんじゃないかと思ったりもしています。

まぁ、データモデリングは関しては、強い意見を持っている人も多いとは思うので、ご意見あればこのブログなりTwitter なりにお寄せいただければ、と。

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

 

 [2016/10/24追記] 用語の説明が足りてなかったところや非正規化の補足を追加しました。 

「科学が役に立つ」について思うこと

ノーベル医学・生理学賞の受賞が決まった大隅教授の

「科学が『役に立つ』という言葉が社会を駄目にしている。本当に役立つのは100年後かもしれない。将来を見据え、科学を一つの文化として認めてくれる社会を願っている」 

 という言葉が注目を集めている。とはいいつつも、科学系で日本人がノーベル賞受賞すると毎度同じようなことは言っている気はするけれど。

私も理工系の出身なので、その意見には賛同したい気もするのだけれど、やっぱり間違ってるよなぁ、と思ってしまう。この手の言い分は「企業は利益のためだけではなく、周辺社会や従業員の生活のためにも存在している」に通底するように思う。

例えば、誰から見ても一点の曇もなく役に立たない研究があったとしよう。具体的に思いつかなければ、「トリビアの泉」で紹介されるトリビアの種をひとつ念頭に置いていただきたい。通常、大学の教授ともなれば、1000万円程度の年収はあるだろう。この誰から見ても言っての曇りもなく役に立たない研究に政府は、年間1000万円を拠出しても構わないだろうか。日本にも貧困に苦しむ人はいくらでもいる。その人に渡した方がいいかもしれない。

文化として認めてほしいという言葉にも微妙なところがある。夜這いのようにすでに滅びた日本文化もあれば、一部のイスラム教国に見られる非人道的な規則も文化といえば文化だ。ゲームやアニメのように、かつては文化として認められなかったものが文化として浸透する場合もある。文化とは人々が自然と培っていくものであり、認めてもらえるようお願いするものではないように思う。

企業の目的は「収益を最大化すること」だ。だから、周辺社会や従業員の生活に気をかけるのは、そうすることが最終的には自社の利益に繋がるからと考えるのが筋だろう。

同じように、科学者は「私には今は思いつかないけれど、長い目でみれば役に立つんです。こういう地道な研究が社会の生産性を向上させるんです」というべきなのではないだろうか。一見、直接的には役には立たなそうな宇宙科学や歴史学であっても、多くの人の知的好奇心を満たすのであれば、経済学的な考えに沿って人々がその知的好奇心に支払ってもよいと考える金額に相応した費用を投じることは正当化できる。

言い方だけの問題かもしれないけれど、科学者にはもっと自信を持って「役に立つんです」と言ってほしいと個人的には思うのだ。

才能か努力か(おかわり)

以前のエントリーで「超一流になるのは才能か努力か?」を取り上げたけれども、その後、バランスを取るためにこれも読め、というツィートで紹介されていたのが次の本。

スポーツ遺伝子は勝者を決めるか?──アスリートの科学 (ハヤカワ・ノンフィクション文庫)

スポーツ遺伝子は勝者を決めるか?──アスリートの科学 (ハヤカワ・ノンフィクション文庫)

 

 「超一流…」本が努力すれば誰でも一流になれるという本に対して、この本はスポーツには遺伝子が重要であると主張する著者により書かれていて一見対極にある主張に見える。だけれども、読んでみるとむしろ「超一流…」本を補完する内容であることに気付かされる。

この本で書かれていることは、特に身体能力がそのまま成功につながる特に陸上競技のようなスポーツにおいては、遺伝によって形成される身体的特徴が決定的に重要であるということだ。具体的には次のよう例が紹介されている。

  • マラソンランナーは、酸素吸収能力が重要
  • バスケット選手は、身長と身体の横幅が重要
  • 高跳びの選手は、アキレス腱の長さが重要
  • 野球のバッターは、視力が重要

身長や骨格、アキレス腱の長さなどの身体的特徴は、遺伝の影響が極めて大きく、訓練だけでは、その形質を獲得することができない。そのため、トップアスリートになるには、素質が極めて重要になるということのようだ。データからは、幼いころ足の遅い人が、その後の練習によって速くなるケースはないとさえ結論されている。

だが、この本の面白さはそこで終わらないところにある。素質があると考えられるケースであっても、生まれながらにトップアスリート並みの能力を持つ突然変異的な人もいれば、練習量に応じて爆発的に能力が増加するタイプの人もいる、であったり、環境的要因、たとえば毎日ゲームや甘いものに囲まれた生活ではもし素質を持っていたとしても、それを開花させる環境にないため、結果的に貧しい地域の出身者にトップアスリートが生まれやすいという、遺伝子の複雑さやそれをとりまく様々な環境との相互作用が説明される。

さらに、逆のケース、優れた遺伝的形質を持っているが故に上手くいかないケースも紹介されている。サッカーのコーチは皆、足の速いアスリートを求めるが、速筋線維の多い選手は大腿屈筋群を痛め怪我するケースが多く、結果的に速筋線維の少ない選手のみが残ってしまう。痛みを感じない家系の話などは(不謹慎な話ではあるが)とても興味深い。

別の遺伝子が、一〇代のパキスタン人ストリートパフォーマーの才能を追求した科学者によって発見された。

パキスタンのラホールにある病院の関係者は、この少年をよく知っていた。自分の腕にナイフを突き通したり、燃えている炭の上に立ったりした後にやって来ては、傷口を元通りに縫い合わせてもらっていた。ただし、痛みから救うために治療を行ったのではない。少年は痛みをまったく感じることができなかったのだ。

イギリスの遺伝学者が少年を研究するためにパキスタンを訪れる前に、彼は一四歳ですでになくなっていた。友だちの気を引こうとして屋根から飛び降りたのだ。

(中略)

生まれつき痛みに対する感覚がない人間はそれほど長くは生きられない傾向にある。座ったり、眠ったり、立ったりするときに、私たちが無意識にするように体重移動をせず、それがもとで関節感染症を起こして死んでしまうのだ。

この本で語られる内容と「超一流…」本をあわせて考えれば、どこまでが遺伝子の影響で、どこまでが努力の結果なのか、何となく想像できる。結局、コンピュータのハードウェア、ソフトウェアの関係と同じということなのだろう。

ハードウェアの性能は遺伝で決まり、大きくは変えられない。だからハードウェアの能力が決定的に重要な場合には、ソフトウェアでいくらカバーしようとしてもカバーできない。それはファイルI/O性能ではHDDがSSDに太刀打ちできないのと同じことだ。

しかし、いくらSSDのファイルI/O性能が良くても、常に同期書き込みをするようなことをしていたら、HDDにも劣る性能になるかもしれない。性能を活かすには、それ相応のソフトウェアが必要となる。

特にトップアスリートでは、ソフトウェアは極限までチューニングしている状態に等しく差がつかない。だからハードウェアの性能が決定的に重要になる。

一方で、ソフトウェアについては、「頭のでき―決めるのは遺伝か、環境か」などからも、個々の人々でさほど差が出ないことが伺える。実際には遺伝により多少の差はあるのかもしれないが、ソフトウェアはアルゴリズムの優秀さで大きな差が出る。訓練により専用回路を獲得してしまえば、多少の素質の差は問題にならないということなのかもしれない。頭脳や戦術が重要な分野では、「超一流…」本の内容は引き続き有効ということになる。

とはいえ、多少気になる記載もある。それは、「脳科学は人格を変えられるか?」でも議論となっていた楽観的/悲観的、あるいはやる気の部分だ。「超一流…」本では、意志の力の差などない、と結論づけられていたが、本書では少なくともスポーツに関してはもっと運動したいという「やる気」に関する形質が存在することが明らかにされている。誰でも努力すれば成長できるけれども、努力する気持ちは遺伝によって決まっているのだとすると悲しいものがある。では、ドーピングで改善できれば良いのか、というと自由意志の問題にも発展しかねない。なかなか難しい問題だ。 

超一流になるのは才能か努力か?

超一流になるのは才能か努力か?