EBT

Evidence Based Thinking

FACT FULNESS読みました

久しぶりの投稿です(いつも)。 2ヶ月くらい前?だったかに受けた応用情報処理技術者の合格通知がやっときました。一応IT企業に勤めているからと思って取得したのですが、普段コーディングとかしかしてないんであんまり内容が身近に感じないんですよね。業界的には標準の資格のような気がするのですが・・・。普段仕事で聞いたことあるような単語とかが出てきている(多分)のと、基本情報も春に取得したのもあって、そんなに時間かけず(6時間)に取得できたのでよかったです。筋トレとか初めてからいける気がする!って感覚が増えてきて、ちょい無謀気味な試験の受け方をしている気がする今日この頃です。まあ、結果がついてきてるんでいいですかね。FEもAPも大学生とかで取る人が多いんでそんな自慢する物でもないですが、他に話すところがないんだ、察しろ。

そんなことはどうでもいいとして、今日は最近読んだ本で面白かった本の紹介です。

FACT FULNESS

普段、書店行かれてる方なら多分見かけているんじゃないですかね? 少なくとも私がよく行く職場近くの書店では平積みされています。本のタイトルは最近流行りのマインド・フルネスからきています。マインドフルネスはApple Watchの機能としてあったり、メタ認知を高めたり、セルフコントロールを高めたり、近年注目されていますね。マインド・フルネスには人生の質を高めてくれる効果があります(ちゃんと研究もあるそうですよ)それと同じように私たちにはファクト・フルネスが必要だと、著者は説いています。

チンパンジーと私たち

著者は問いかけます。「チンパンジーと私たち、どちらが本当に世界を知っているかな?」と。ちなみに私はチンパンジーと同じくらい世界を知っていました。 「馬鹿にするな!チンパンジーより世界を知っているに決まっている!」と思った方は是非本書を手にとって冒頭の問題を解いてみてください。逆に、世界のことなんて全然分からないという謙虚な方は安心してください。自分のことを客観的にみれている証拠です。本を読み進めて、世界の事実知ってください。

ただ、この本は世界の事実を伝えることが目的の本ではありません。「事実に基づいて世界を見よう!」と著者が人生をかけて私たちに伝えるために作り上げた本です。

思い込みをやめて、データを見よう

私たちは自分が思っている以上に、経験と思い込みに支配されています。私の周りにはいませんが、「経験によると・・・」と言い出す人っていますよね?経験も大事です。それ以外に頼れない時もありますが、サンプル数1であることにたちかえれば、かなり怪しいですよね。自分の考えてることは本当に正しいのか、データに基づいて考える習慣をつけましょう。自分の論の根拠はどこにあるのかを考える癖をつけましょう。時間がかかるのでいつでもできるわけではありませんが、習慣づけることは大事です。著者もそれを望んでいます。だって世界的エリートたちですら世界のことを何も知らないのですから、知らなくても仕方ないと著者は語ります。その代わり、今から知ればいいのです。この本を読んで世界の事実を知り、データに基づいて考えるということを実感しましょう。

10の本能

著者は人が世界を間違ってみてしまう理由として以下の10個の本能をあげています。

  1. 分断本能
  2. ネガティブ本能
  3. 直線本能
  4. 恐怖本能
  5. 過大視本能
  6. パターン化本能
  7. 宿命本能
  8. 純化本能
  9. 犯人探し本能
  10. 焦り本能

それぞれがどういうことを言っているかは、実際に本を手にとってからのお楽しみです。

私がこの本を手にとった理由

私はこの本を発売前にAmazonで予約しました。普段から、月3万くらいは本につぎ込んでいるので、特別これがというわけではありませんが、この本に期待していたことは確かです。 私は大学で数理統計学を学んでいましたが、これをどう使うのかということがよく分かりませんでしたし、今もよくわかっていません。卒論では難しいことをやってみようと統計学の中では比較的難しい(主観)スパースモデリングに挑戦したりもしました。 しかし、やっぱり何のためにやってるのかよく分かりませんでした。この本にはデータをどう活用しているのかを学ぶつもりで購入しました。

もっとエビデンスに基づいた意思決定をする世の中になってほしいという思い

私は、あまり人と接するのが得意な方ではなく、交友関係も狭いので思い込みなのかもしれませんが、「それ、何に基づいて言ってるの?」って感じることがあります。テレビのコメンテーター、駅前で誰も聞いてないのに旗を掲げて、よくわからないことを話している政治家。最近はネットの力もあり、TVの影響力は薄れてきた感はありますが、日本全国に影響力を及ぼす場所で、思い込みや、間違った情報を垂れ流さないでほしいですし、国の行く末を決める政治家が感情論と人気取りで政策を決められては目も当てられません。それを防ぐためには、私たち一人一人が統計リテラシーを持つべきだと感じています。それ、根拠は?と突っ込むようになるだけでもだいぶ変わってくると思います。

この本は、上記の思いに通じることが多分に含まれると考えます。読んでみて、事実に基づいて考えるということ知っていただきたいです。

難しいことより、伝えること

この本の著者とその家族は、人に世界の真実を知ってもらおうと色々な工夫をしています。グラフィカルなバブルチャートについて、よくこの本の中で言及されます。 近年のAIブームもあり、最近は頭のいい人たちがkaggleとかで機械学習を競っているようです。私はやっていないのでよく分かりませんが。 あれはあれで応用が色々あるのだと思いますが、データ分析とはそんな難しいことをする必要はないんじゃないかと思います。だって、難しすぎて、伝わらないし。それに今はやってるDeep Learningは中身基本ブラックボックスですから。

そんなことよりも、簡単に作ったヒストグラムや折れ線グラフを見てなぜを考察する方が人にも伝えやすいし、有意義なんじゃないかなあと思います。

著者も多くの人に伝えるためにかなり骨を折ったようです。執念がすごい。

ビジネス書には珍しい筆者の思いが伝わってくる内容

この本は、世界中の人々に著者が事実に基づいて世界を見てほしいと願って作り上げた人生最後の作品です。「おわりに」の部分の内容を読み終わった時には、小説を読み終わった後のような虚無感があります。本の厚さに対して値段が少し安く設定されているような気がするのですが、これは筆者の多くの人に手にとってほしいという願いがあるのではないかと思ったりしたりもしました。本当に著者と、その家族の人生が詰まった本です。読んで後悔しません。ここまでいい本はなかなか巡り会えないと思います。

もし気になった方は、一度手にとっていただいたけたらと思います。

ブログのタイトル変えました

久々の投稿です。

突然ですが、ブログのタイトルを変えることにしました。 元々は大学で統計を勉強していた時に、勉強のモチベーション維持のために始めた元「統計・確率のお勉強」でしたが、社会人になり、統計よりもプログラミングとかアーキテクチャとかそっち方面の勉強しかしておらず、統計とはすっかり離れてしまいました。

新たにブログを作って始めようとも考え、やってみましたがモチベーションが続きませんでした。

元々自分の勉強用だったので、そこに立ち帰ろうと思いました。これからは元々統計をやっていたことから、統計を含めevidenceに基づいた思考を鍛えることを目標にしたい思います。

まあ、そもそも年2〜3回くらいしか更新してないブログなんでどうでもいいでしょうが(笑)

はてなブログでjavascriptが書けることを知った

足し算するだけのコードを試しに書いてみた。

最近仕事でjavascriptを書く機会があったこともあり、ふと思った。普段書いてるブログってjavascript埋め込めたら結構色々なことできね?と。 調べたらはてなブログjavascriptを埋め込むことができるらしい。 今回は実際に埋め込めるか試してみることにした。 今回はjqueryを使うので次のタグを最初に埋め込んでいる。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

次に、入力とかするためのinputタグ(html)を使って入力できるようしたものである。

+ =

上記のを表示するためのhtmlは以下

<input id='plus1' type=number> + <input id='plus2' type=number > = <span id='result_plus'></span><br>
<input id='sum_button' type=button value='計算'>

数値を入力して計算ボタンを押せば、足し算された結果が表示される。(the サンプルプログラム)

※試しに書いただけのものなので入力チェックとかはしてません。

$(function() {
    let add = function(a, b) {
        return Number(a) + Number(b);
    }; 
    $('#sum_button').click(function() {
         a = $('#plus1').val();
         b = $('#plus2').val();
         res = add(a, b)
        $('#result_plus').text(res);
    });
});

jqueryで入力された値を取得して、ボタンが押されたら足してそれを対象箇所に出力している。

やってみた感想

はてなブログは当たり前だがブログ用なのでプログラムを書くようには記事編集のところはできていない。 今回は簡単なものだったので直接打ち込んだが、プログラミングエディタではないので非常に面倒臭かった。 はてなブログに埋め込む用のスクリプトは別のところで書いて、出来上がったものを貼り付けるようにすれば楽だし色々できそうだ。 Tensorflow.jsなんてものも出てきてるし、無料ブログで機械学習みたいなこともできそうだ。

気が向いた時の知識のアウトプットだったはてなブログの楽しみが一つ増えた。

ベイズ統計:パラメータの点推定

久しぶりなので少し短めに・・・
大学卒業して少し統計離れてましたけど、土日やることもないので、前々から気になっていたベイズ統計の勉強でも少しづつ始めていこうと思います。

パラメータの点推定

点推定
未知であるパラメータの値をデータから推定すること

通常の統計学なら不偏推定量とか、最小分散不偏推定量とか、十分統計量とかありました。それのベイズ版です。

ベイズ分析におけるパラメータの点推定は、パラメータに真の値と点推定の乖離度をある尺度(損失関数)ではかり、この損失関数が出来る限り小さくなるようにすることを考えます。

ここからは、パラメータ  \pi の点推定を \delta 損失関数を  L(\pi, \delta) と書くことにする。ベイズ分析によく使われる損失関数としては次のような関数があります。

\begin{align}
2乗誤差損失({\rm quadratic \, loss}) &: L(\pi, \delta) = (\pi - \delta)^2 \\
絶対誤差損失({\rm absolute \, loss}) &: L(\pi, \delta) = |\pi - \delta|^2 \\
0 - 1 損失 ({\rm 0-1 \, loss}) &: L(\pi, \delta) = 1 - \boldsymbol{1}_{\pi} (\delta)
\end{align}

ここで、  \boldsymbol{1}_{\pi} (\delta) \delta = \pi の時 1 それ以外のとき 0となる指示関数。

パラメータの真の値はわかっていないので、ベイズ分析の点推定では、損失関数  L(\pi, \delta) の期待値を  \pi の事後分布で評価したもの

\begin{equation}
R(\delta | D) = E_{p (\pi | D)} [L(\pi, \delta)] = \int_0^1 L(\pi, \delta) p(\pi | D) d\pi
\end{equation}

を考え、これを出来るだけ小さくするように点推定を選択します。 R(\delta | D)期待損失 (expected loss) と呼びます。これを最小化問題として定式化したものが、未知のパラメータ  \pi の点推定  \delta^*

\begin{equation}
\delta^* = \arg \min_{0 < \delta < 1} R(\delta | D) = \arg \min_{0 < \delta < 1} \int_0^1 L(\pi, \delta) p (\pi | D) d\pi
\end{equation}

となります。"  \arg " は 「  \delta^* \min_{0 < \delta < 1} R(\delta | D) という最小化問題の解である」という意味です。

参考文献

中妻照雄(2007):『ファイナンスライブラリー10 入門ベイズ統計学』, 朝倉書店

正規性の検定(Shapiro-Wilk検定)

正規性の検定

データを分析するにあたり、

  1. データが正規分布に従う
  2. データが独立な標本である

といった仮定を置くことは多い。そのような場合に分析をする際、これら二つの仮定が満たされているか確認する必要が出てくる。そのための手法として統計的仮説検定がある。今回はその中の Shapiro-Wilk検定Pythonで株価収益率に対してやってみようと思う。

二種類の誤り

仮説検定には2つの誤りがある。

第1種の誤り
帰無仮説が正しいにも関わらず、帰無仮説を棄却してしまう誤り。

第2種の誤り
帰無仮説が正しくないにも関わらず、帰無仮説を採択してしまう誤り。

通常、第一種の誤り確率をある水準(有意水準)以下に抑えた状態で、第二種の誤り確率をできるだけ小さくするようにする。そのため、帰無仮説が採択された場合は、積極的に帰無仮説を正しいとみているわけではなく、「帰無仮説が間違っているとは言えない」というような消極的な解釈となる。

Shapiro-Wilk検定

私が所持している本の中にはこの検定に関する記述のあるものが見つからなかったため、今回は
シャピロ–ウィルク検定 - Wikipedia
の内容でお茶を濁すことにする。

統計学における、シャピロ–ウィルク検定(シャピロ–ウィルクけんてい)とは、 標本  x_1, \ldots, x_nが正規母集団からサンプリングされたものであるという帰無仮説を検定する検定である。この検定方法は、サミュエル・シャピロとマーティン・ウィルクによって、1965年に発表された。検定統計量は、

$$
W = \frac{\left(\sum_{i=1}^n a_i x_{(i)} \right)^2}{\sum_{I=1}^n (x_i - \bar{x})^2}
$$

ただし

  • x_{(i)} は、i番目の順序統計量。
  • \bar{x} は標本平均。
  • 定数  a_i は次の式によって与えられる。

$$
(a_1, \ldots, a_n) = \frac{m' V^{-1} }{\left( m' V^{-1} V^{-1} m \right)^{1/2}}
$$

ただし、

$$
m = (m_1, \ldots, m_n)'
$$

m_1, \ldots, m_nは、標準正規分布からサンプリングされた独立同分布の確率変数の順序統計量の期待値であり、「V」は、この順序統計量の分散共分散行列である。帰無仮説は、「W」が小さすぎる場合に棄却される。

※一応Wikiの引用だが、少し書き換えてある。

兎にも角にもこれを用いて正規性を検定する。データは株式の収益率を使う。

Pythonでは次のようにすれば、Shapiro-Wilkの検定が可能である.

from spicy import stats
stats.shapiro(df['QUICK'])  # df['QUICK'] はデータフレームdfに入っているQUICKの収益率データを表す

結果は以下のようになった。

統計量W p値
QUICK 0.9260867834091187 1.0152270032202054e-22
日立 0.9507756233215332 1.2722628221227775e-18
武田薬品 0.9450637698173523 1.0990565268293669e-19

どれもp値がほとんど0に近いので、棄却される。つまり、どれも正規分布に従っているとは言えない事がわかる。

各業種と日経平均株価についてヒストグラムとガウシアンフィッティングで得られた曲線(もし、そのデータが正規分布に従うならばフィットするであろう正規分布な曲線)を一緒に描画した図をみてみよう。

f:id:doratai:20180207230849p:plain

これをみて見ると、正規分布よりも尖った分布になっているのがみて取れる。

参考文献の本では、4銘柄中3銘柄帰無仮説が採択されてたのに...

正規分布に従っているという仮定には無理がある事がわかった。

参考文献

[1] 横内大介, 青木義充(2014):『現場ですぐ使える時系列データ分析〜データサイエンティストのための基礎知識〜』技術評論社