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

StatModeling Memorandum

StanとRとPythonでベイズ統計モデリングします. たまに書評.

「データ分析プロセス」福島真太朗

書籍のタイトルは「データ分析プロセス」とありますが、偉い人を説得してどのようにデータを集めていくかを決めて、KPIをどう設定して~という、いわゆる啓蒙書ではありません。すでに顧客の行動データやPOSデータなどをデータベースに格納しつつあり、そこから例えば解約予測をするにはRで具体的にどうすればよいか、という問いに答えるRの本です。Useful RというRのシリーズ本の中の一冊であり、Rを使って機械学習をするためのエンジニア向けの本です。特におすすめする読者は、Rで機械学習をする人の他、欠損値・外れ値・不均衡データといったものにどういった対処方法があるのか知りたい、使ってみたいという人です。また、書籍のページではRのソースコードとともに対応するPythonソースコードが一部提供されています。

まえがきには「本書では、可能な範囲で実データを使用した分析例を例示しようと心がけた」とあり、そのために著者はKDD Cup 2009の顧客の解約予測のデータやPOSデータをはじめ、様々なデータの権利者から使用許諾を得ています。そのおかげで、いかに現実のデータは外れ値を含み、欠損値にまみれたものか、そしてクラスの分類が偏っているのか実感でき、そんな困った状況をデータ分析のプロはどうさばいていくかが実感できます。

1章「データ分析のプロセス」は導入章で啓蒙書に相当する部分ですが薄いです。他の書籍を参考にしましょう。

2章「基本的なデータ操作」ではRでテキストファイル・Excelファイル・データベースからどうデータを読み込むかを簡潔に触れたあと、標準的なRの関数を使った加工・集計と最近の流行であるdplyrを使った加工・集計を比べながら紹介していきます。24ページですので、じっくりというわけにはいきませんが、「Rデータ自由自在」などを読んだことある人には最近のRを使った加工・集計を軽くおさらいできる内容です。

3章「前処理・変換」は4章とともに著者の恐ろしいサーベイ力が発揮された貴重な情報が載っている章です。プログラミングの本で論文をメインとした参考文献が120個弱あるのは異常です。調べすぎです。個人的に嬉しかったのは3.2節の「欠損値への対応」と3.3節の「外れ値の検出」です。

まずはtableplot関数で分かりやすく可視化する方法からはじまり、欠損値の埋め方だけで7通りの方法をRで行う方法を紹介しています。どれがどの状況でオススメとかは書いてありません。それは、欠損値は欠損するメカニズムが異なるとダメになる方法もあり、扱いが非常に難しく、一般的には正解がないものだからだと思います。個人的には全ての方法を試して様子を見るものだと理解しています。様子を見るというのは、「その中で1つだけダントツ予測成績が良くなるものを探す」という意味ではなく、「どの方法でも結果が大きく変わらないか」を見ます。個人的にはデータ解析はロバストネス(頑健性)が重要と考えているからです。逆に結果が大きく変われば、その差はどこからきているのかを考えていきます。

  • この点、著者の方からコメントをいただきまして、「欠損値や外れ値の手法選択はいろいろと試行しましたが,機械学習アルゴリズムの選択と同様にケースバイケースと思っています.」とのことでした。そうなりますよねぇ。

外れ値に関しても簡単な箱ひげ図の見方から、高次元の外れ値検出まで5種類もの外れ値の検出を行う方法を紹介しています。特にELKI(Environment for Developing KDD-Applications Supported by Index-Structures)と呼ばれるJavaデータマイニングツールを使って高度な外れ値検出を紹介している和書はこの本しか見たことがありません。また、個人的に好きなところははどういったものを外れ値と見なすかの指標の算出方法が具体的に載っているところです。この算出方法は自分でアルゴリズムを書いているようなエンジニアの方にも有益だと思います。

3.5節と4.1.7節の属性選択では、相関係数・情報利得・ジニ係数などを使った属性選択の方法(フィルタ法)やRecursive Feature Elimination(RFE, SVM-RFEとか有名でしょうか)を使った属性選択の方法が簡潔に触れられています。個人的にはPCA・特異値分解・MDSなどの次元削減も含めてもう少し深く触れられて欲しかったところではありますが、紙面の都合もありますし、紹介されているGuyonらによるサーベイ論文の出来がよいこともあるのだと思います。

4章「パターンの発見」はRで機械学習をする人には必読の章です。4.1.2節では予測モデル構築のプロセスとして、予測問題の設定(予測対象や予測のタイミングや…お楽しみ)、特徴量の構築、ハイパーパラメータの最適化、予測モデルの構築に分けて説明していきます。特に、評価の所で混合行列とROC曲線の非常に詳しい説明と、Rにおける機械学習の様々な手法の統合ラッパーである{caret}パッケージを使った実行・クロスバリデーション・評価関数や既存にはない手法の追加などのカスタマイズ方法・スタッキング・並列化が詳しく載っている和書はこの本以外見たことありません。この{caret}のところだけでも買う価値があると思います。その他には不均衡データに対処する方法として、{caret}のupSample関数などを使う方法、{unbalanced}パッケージのubSMOTE関数に実装されているSMOTEアルゴリズムを使った方法、{ROSE}パッケージに実装されているROSEアルゴリズムを使った方法が使用例と共に説明があって有用です。

4.2節では頻出パターンマイニング・系列パターンマイニングを扱っています。アイテム集合に頻繁に現れる組合せパターンを抽出する手法です。Rでは{arules}や{arulesSequences}パッケージで実行できます。ELKIの例もそうですが、この書籍の素晴らしい所は、同じ目的に対してRにこだわらず優れたツールがあればそれを紹介し、使用例をためらわずに載せているところです。ここでは頻出パターンマイニングでは木構造を使ったアルゴリズムであるFP-Growthが使えるコマンドラインツールの使用例、Javaで実装された包括的な系列パターンマイニングソフトでであるSPMFの使用例があります。

4章の一部と5章では記述は短いですが、実データに対して今までのおさらいを意味を込めて解析しています。1~4章では触れてこなかった特徴量の作成の部分や日付の扱い方のRコードが参考になりました。

データ解析者は引き出しの多さが重要だと思っていますが、その引き出しをぐっと増やしてくれた本でした。その一方で機械学習のコンペで好成績を残すにはこの書籍の知識からさらに「特徴量をいかに作るか」みたいな能力がないといけないのでしょう。こういう情報は書籍になるというよりも上位者が書いている論文やブログ記事を参考にするのがよさそうです。