2017年10月〜2018年3月で読んだ本

2017年度下半期で読んだ本。

  • 仕事ではじめる機械学習
  • やさしく学ぶ 機械学習を理解するための数学のきほん
  • ビジュアライジング・データ(データ収集、可視化)
  • WordPress ステップアップブック
  • バンディットアルゴリズム
  • 機械学習の連続最適化
  • チーム開発実践入門

全部読めた本もあれば、途中で止まっている本もある。

機械学習関連は、Qiitaにも書いた。

平均にひと手間加えて統計的に分析する方法

統計的推計を業務内で何度か試す機会があったのですが、ある程度知見も溜まってきたので、共有しておきたいと思います。(以前読んだ本のまとめとして……)

平均だけで良いのか

「最強の学問は統計学である」(西内啓)の書籍の中では、「平均」は19世紀の統計学者がやる集計だと言っていました(たしか)。ちょっとひと手間加えるだけで、統計的な推計ができるようになるので、データへの信頼度?安心度?を高めることができます。
(当然ながら、単なる数字の上の話なので、実際にはどうなのかは、やってみなければわからない)

平均以外のアプローチ

平均以外にも、Excelやスプレッドシートでできるアプローチがいくつもあります。ここではざっくり、4つ挙げておきます。

  • 中央値、最頻値
  • 分散、標準偏差

中央値、最頻値(MEDIAN、MODE)

外れ値があって平均を大きく上げ下げするようなデータがあるときは、中央値や最頻値を出しておくと、データの傾向をつかみやすくなります。中央値は、ソート済みの全データを2分した場所の値。最頻値は、読んで字のごとく、最も多く出現する値のこと。

下の画像は、とあるバッチの実行時間の平均、分散、標準偏差、中央値、最頻値を求めたものです。時間を扱うときは、単位を秒に変換すると便利ですが、変換しなくても計算はできます。

秒に変換してから計算するとやりやすい

↑7回目と8回目のデータが、平均(AVERAGE)に大きく影響しています。一方で、中央値(MEDIAN)は全体の傾向をうまく表せています。ばらつきの大きいデータのため、分散(VAR.P)、標準偏差(STDEV.P)が大きな値になりました。

※ 全体のデータから最大値・最小値を取り除いたデータで分析にかけることもあるようです(データのばらつきを抑えることができる)

分散、標準偏差(VAR、STDEV)

これらの数字は見てもピンとこないし、普段は使いません。もっとも、これらの値の使いみちは、「あるデータは、全体の中でどれくらいの位置にいるのか(いわゆる偏差値)」を知るときに使うわけですがここでは扱いません。

※得られた数字がよく出てくる数字なのか、はたまためったに出現しなさそうな値なのかを調べるときに使えます。

推計

データは取ったし、平均も出たけど、いまいち心もとないときには、区間推定が役に立ちます。これさえ覚えておけば、だいぶ統計っぽくなります。

95%の信頼区間で推計します。この95%というのは統計では「ほとんど確実にそうなりそうといえる」という意味になるそうです。

母平均が95%の確率で取りうる範囲の推計

何回か試行をやってみた結果から、さらにデータが増えていったときの平均(母平均)の範囲を推計することができるそうです。「平均値はこの範囲に収まるっぽい」と言えるみたいです。
わかりにくいですが、[データ範囲]のところだけ書き換えればOK。

(上限)

=AVERAGE([データ範囲]) + TINV(0.05, COUNTA([データ範囲])-1) * SQRT(VAR([データ範囲]) / COUNTA([データ範囲]))

(下限)

=AVERAGE([データ範囲]) - TINV(0.05, COUNTA([データ範囲])-1) * SQRT(VAR([データ範囲]) / COUNTA([データ範囲]))

面倒なことは考えず、平均TINV(0.05, COUNTA([データ範囲])-1) * SQRT(VAR([データ範囲]) / COUNTA([データ範囲]))だけ計算しておきます。あとはこの2つを ± で繋いであげればOK。

スクショをサンプルとして載せておきますが、下のような結果が出てきます。(上で挙げたデータ例とは異なります)

バッチの実行時間や、データサイズの傾向を示すことができるようになります。

データの95%が取りうる範囲の推計

とりあえずデータをとって、95%のデータがこの範囲に収まる、というのを計算したい場合は以下の式が使えます。[データ範囲]のところだけExcelやスプレッドシートで置き換えればOK。(データを母集団としたときの場合)

※ 以下の式が合っているのかは、ちょっと不安がある。本には書いてあったけど。

(上限)

=AVERAGE([データ範囲]) + 1.96 * STDEVP([データ範囲])

(下限)

=AVERAGE([データ範囲]) - 1.96 * STDEVP([データ範囲])

上の範囲に収まりそう、といえるらしいです。
1.96がなんなのかは、これといって覚える必要はありません。

もう少しわかりやすい表現を言うと、平均 ± 1.96×標準偏差の範囲にデータの95%が存在するということのようです。つまり、平均1.96 * STDEVP([データ範囲])を計算しておけばOK。

分析に必要なデータの個数は…

母平均を推定する手法では TINV という関数を用いて、分析に使うデータの個数を考慮した計算をするようにしてあります(データが少ないときは、推定範囲が広がるようになっている)。しかしながら、サンプルは多い方が推定の精度が高まります。

TINVの値は、95%の信頼区間(有意水準 0.05)のとき、自由度(サンプルの数 – 1)の値が大きくなるに連れて、1.96に近づいていきます(実際には1.959…)

自由度(n-1) TINV(0.05, 自由度)
1 12.71
2 4.30
3 3.18
4 2.78
5 2.57
10 2.23
20 2.09
30 2.04
40 2.02
50 2.01
80 1.99
100 1.98
200 1.97
500 1.96

少なくともサンプルは5個あると安心かなと(でもまだ安心ではない)。
しきい値を2.0で考えると、だいたい60〜70個くらいデータのサンプルがあると、だいぶいい感じの分析になるのかなぁと思います。確実な精度を求めるのであれば、501個以上で頑張るのが良さそうです。


そんなわけで、たまには平均以外も使えるようになると、統計っぽいことができて、いい感じのデータができるかなと思います。

「仕事ではじめる機械学習」のメモ

仕事ではじめる機械学習
オライリー・ジャパン
有賀康顕、山中心太、西林孝

読んだので、印象的だった部分をメモする。

本の内容と構成

機械学習についてベースとなる知識は知っているけど、それを実際に業務に適用させるにはどうしたら良いのかといった、現実の課題解決にフォーカスした内容だった。そのため、具体的な実装や数式関しては多くは紹介されていない(Jupyterのサンプルコードが利用できる https://github.com/oreilly-japan/ml-at-work)。詳しい内容を学べる文献も多く紹介されていた。構成は以下の通り。

  • 機械学習をプロジェクトに導入し、運用する話
    • プロジェクトの進め方
    • アルゴリズムの選定と評価
    • システムへの組み込み
    • データ収集
    • 効果検証
      • 効果の有り無しを統計的に検定する話がメイン
  • 実践的な内容を3つの例で紹介
    • 映画の推薦システム(協調フィルタリング、Factorization Macine)
    • Kickstarterの分析(機械学習しない例、Excel)
    • Uplift Modeling(DMのコンバージョンアップ、A/Bテスト)

“「仕事ではじめる機械学習」のメモ” の続きを読む

「専門知識ゼロでも使いこなせるビジネス統計入門」を読んだのでメモ

監修:内田学
著:兼子良久
発行:アスキー・メディアワークス

記述統計

  • データの特性をつかむ
    • 集計表(度数分布表)、棒グラフを作成する
      • 最大値、最小値を見つける、データの区分(階級)を決める、区分ごとにデータの件数を数える、データの件数をパーセントに直す(相対度数)
  • 変化の特徴をつかむ
    • 平均
    • 偏差(各データの平均からの離れ具合、平均との差)
    • 分散(偏差の2乗の平均、偏差の合計は0になるため2乗する)
    • 標準偏差(分散の平方根)
  • データに偏りがあるとき
    • 中央値、最頻値
      • より実態に近い特徴を示すことができる
  • 確率95%で推定
    • 正規分布、正規分布曲線
      • 「平均-1.96×標準偏差〜平均+1.96×標準偏差」の中にデータの95%が存在する
    • 統計学では「95%」を、ほぼ間違いのない基準として採用
  • 特定の値になる確率
    • 標準正規分布、標準正規分布表
      • 標準正規分布(平均0、標準偏差1の正規分布)
      • 標準正規分布表(平均から特定の値までに何%のデータが存在するかを示す表)
    • 標準化
      •  標準正規分布上の値に変換する
      • 単位に関係なくデータを比較できる
      • (データの値 – 平均)÷標準偏差

推測統計

  • 母平均の区間推定
    • 標本から得た結果がどの程度信頼できるかを確認する
    • 母平均が95%の確率で取りうる区間の推定
      • 母平均-1.96×(不偏分散の平方根÷標本数)〜母平均+1.96×(不偏分散の平方根÷標本数)
        • 標本分散 = 偏差の2乗の合計÷標本数
        • 標本標準偏差 = 標本分散の平方根
        • 不偏分散 = 偏差の2乗の合計÷(標本数-1)
  • 標本数が少ないときの推測方法
    • 「t分布表」を使って「1.96」の値を調整する
    • 自由度 = 標本数 – 1
  • 母平均の差の検定
    • t統計量を使う
      • -t <= (標本平均の差 – 母平均の差) ÷ (差の不偏分散の平方根 / 標本数の平方根) <= t
      • 母平均を0(= 平均に差はない)とした時、上の不等式が成立したら、平均に差はないといえる
  • 異常値の検出
    • 標準化して1.96の範囲か調べる
    • グラブス・スミルノフ検定
      • 出現確率が2.5%以下か
      • グラブス・スミルノフの棄却検定表を使う
      • (データの値-標本平均)÷不偏分散の平方根
      • 棄却したら、再度、最大値・最小値を検定する

多変量解析

  • 2つのデータの関係を視覚的に表す
    • 散布図
      • 正の相関:右上がり
      • 負の相関:右下がり
    • 相関係数
      • 0.0〜0.2:ほとんど関係性なし
      • 0.2〜0.4:やや関係性あり
      • 0.4〜0.7:かなり関係性あり
      • 0.7〜1.0:強い関係性あり
    • 相関係数の求め方
      • すべての値(x, y)に対して、標準化したx × 標準化したy の平均
  • 回帰分析
    • 独立変数:予測に使うデータ
    • 従属変数:予測したいデータ
    • 単回帰分析
      • 予測に使うデータは1つ
      • 回帰直線:y=a+bx
      • 重決定R2(決定係数)
        • 0.4以上なら問題ない
      • P値
        • 予測したいデータと予測に使うデータとの間に、関係性がない確率(係数が0になる確率)
        • 0.05(5%)を超えると、係数が0になる可能性が高いと判断する
    • 重回帰分析
      • 複数のデータを利用して予測
      • 回帰直線:y=a+bx+cx’+…
      • 補正R2(調整済み決定係数)
        • 重決定R2の増加分の調整
        • 0.4以上あれば問題ない
      • 重回帰分析の不具合
        • 多重共線性(multicolinearity)
          • 予測に使うデータ(独立変数)間の相関が強いこと
        • マルチコ現象
          • 多重共線性が有るにも関わらず重回帰分析をしたときに結果がおかしくなること
        • 予測に使うデータ同士の相関係数を調べてから重回帰分析をすること
    • 質的データの分析
      • 量的データに変換すればOK
        • 質的データを0と1の値に変換する
        • n種類ある質的データの場合、n-1種類のデータで回帰分析をすればOK

感想

統計的な分析手法がわかりやすくまとまっていた。
今のところ活用する機会はまだないが、今後使えるようにメモ。