スーツ姿のプロダクトマネージャー

ITで新しいプロダクトを生み出したいすべての人を応援するブログです。

データサイエンティスト中級者になるために読むべき本

f:id:ku2t:20180317205220j:plain

 

以前、はじめて機械学習を学ぶ方に向けて、質の良い3つの入門書をご紹介しました。

機械学習やデータ分析の入門書は、選ぶのに困るほど数が多くなっています。自分に合いそうなものか定評のある書籍を1冊選んでじっくり読み込こむことで、基礎的な考え方やアイデアを学ぶことができます。

しかし、そこから進んで中級者を目指そうとすると、入門書の各章で書かれている内容がそれぞれ専門分野に分かれていたり、入門書では触れられていない分野にも手を出す必要が出てきたりします。

そこで、このエントリーでは、機械学習のタスクや例題を手を動かしながら経験した方を想定し、より専門的で有益な本をご紹介します。

 

 

データサイエンティスト必読の書「統計的学習の基礎」

世界的に著名な機械学習に関する参考書です。

原著The Elements of Statistical Learning(ESL)であれば、著者のウェブサイト経由でPDFをダウンロードすることができます。ありがたいことですね。

日本語版が出たとき、あまりにも高額なので買うのを躊躇したのですが、自分にとってどうしても必要な本だ!と思って、思い切って購入しました。辞書のように厚く重い本でしたが、電車、自宅、職場を問わず、ずっと読んでいました。
家族や同僚からは鈍器のようだと言われましたが…。

基礎から実務に使えるノウハウを網羅している

本書の特徴は、機械学習アルゴリズムに対して丁寧な解説があるだけではなく、評価の方法、アルゴリズムの特性やチューニング方法、発展的なトピックスへの誘導に至るまで、網羅されていることです。

例えば、実例を通してランダムフォレストやブースティングの比較を行っていたり、ハイパーパラメータを変更することでどのような変化があるかなどを比較していたりします。

また、機械学習モデルを作るときに、うっかり「カンニング」してしまったときにどういった弊害が起きるのかということを、様々な実例を通して解説しています。学習に使ったデータを用いて評価するような単純なミスだけでなく、研究者でもやってしまいがちなミスも取り上げられています。実験と理論の両面から、クロスバリデーションの意味を丁寧に解説している個所もあり、圧巻です。

更に、他の本ではあまり取り上げられない一般化加法モデルの解説があるのも魅力的です。

本書を通して「統計モデリング」と「機械学習」の境界線を探る

また、私が一番感銘を受けたのは、本書を読むことで「統計モデリング」と「機械学習」の境界線がなんとなく掴めたことです。

本書を読み始める前は、実務ではどちらかというと統計モデリングを使ったタスクをこなしていました。当時は、世間的にも「ビッグデータ解析」がはやり始めた時期だったので、購入する参考書も統計学やRの本が中心でした。

その一方で、徐々に異常検知や分類モデルを実用的に使うためのタスクが増えてきました。そこで、SVMやアンサンブル学習等の機械学習系の参考書を読み始めたのですが、統計モデリングの参考書とは似てるようで似てないところがあり、混乱してしまいました。統計モデリングは説明中心、機械学習は予測中心という解説を読んでも、道具としては似ているので、腑に落ちない状況でした。

本書では、第3章「回帰のための線形手法」にて、単純な線形モデルから議論を開始し、最小2乗法、変数選択と進み、縮小推定というトピックスの中でリッジ回帰やlassoに至ります。

この流れが実に自然であり、統計モデリング機械学習的な考え方を滑らかに繋いでくれます。両方に精通している方には当たり前なのかもしれませんが、どちらか一方を中心に仕事をしてきた人には、有益な視点ではないでしょうか。

この後に、第7章「モデルの選択と評価」、第16章「アンサンブル学習」を読むことで、現代の機械学習におけるキーテクノロジーである「正則化」を深く理解することができます。

社内でも、統計モデリングを長年やってきたデータサイエンティストと、機械学習から入ったデータサイエンティストの間で、意見が対立することがしばしばあります。実務としては、場面によって使い分ければいいのですが、この見えない壁はなかなか強力です。本書は、この壁を取り払ってくれることになると思います。

 

予測モデルにフォーカスした「Applied Predictive Modeling」

Rの機械学習ライブラリcaretを作成した著者による、予測モデルを作る方法を解説した本です。Rのコードが出てくる本ですが、内容は一般的な観点で整理された本ですので、Pythonユーザなど使用言語を問わず有益な情報となるでしょう。

教師あり学習による回帰・分類モデルの作り方にフォーカス

本書では、教師あり学習によるモデル作りの方法にフォーカスしていて、そのための前処理の方法から、予測アルゴリズム、評価方法を深く広く解説していきます。このため、教師なし学習の手法も、教師あり学習モデルの精度向上策の一環として紹介されます。私にとっては、これが非常にわかりやすいところでした。

データサイエンスの本では、教師あり学習、教師なし学習のアルゴリズムを網羅的に解説したような本も多いと思います。しかし、初学者にとっては、それらをどういった場面で応用するのか?と問われたときに、ハタと困ってしまうのではないでしょうか。

例えば、教師なし学習手法のひとつに、主成分分析があります。主成分分析は、多次元のデータセットに対して、各データ列の情報が数学的には直交するような別の空間にマッピングする手法です。応用としては、次元を圧縮するために使用したり、データの特性を見るために使用します。

しかし、特に統計学の色が強い本では、主成分分析をデータの特性を見る手法に限定して紹介する傾向にあります。一方、予測モデル構築の前処理として主成分分析を使うことで、精度向上に寄与する可能性があることが知られていて、実務で使われています。また、前処理として主成分分析を使うのなら、変数のスケーリングをやっておくことは必須であり、合わせて用いられます。

こうした話は、経験豊富なデータサイエンティストは知っている話ですが、初心者はあまり知りません。そこで、うっかり統計学系の本から読み始めてしまうと、このようなノウハウにたどり着くのに時間を要してしまうことなります。

本書では、教師あり学習による回帰・分類モデルの構築にフォーカスすることで、データサイエンティストのノウハウを丁寧に解説しています。

アルゴリズムの特性を比較できる

今のところ、すべてのデータや問題設定に万能な機械学習アルゴリズムは存在していません。そのため、実験的にどのアルゴリズムがよいか確かめるしかありません。

ところで、実験的に確かめるといっても、データの量や性質との相性により、そのデータに合わない手法があります。例えば、変数の数がデータ数よりも極端に多い場合には、最小2乗法を用いた線形回帰モデルをあてはめるべきではありません。また、変数のスケールがあっていない状態でそのままつっ込めるのは、主にランダムフォレストなどのTree系のアルゴリズムに限られます。逆に、ランダムフォレストを使う場合に、スケーリングを施しても、結果はほぼ変わりません。

こうした特性というのは、各アルゴリズムの解説を注意深く読んで実務経験を積むか、経験者から教えてもらうことで習得するものです。本書は、これについてまとまった情報元となりうるものです。特に、付録に「A Summary of Various Models」という一覧が掲載されていて、文字通り1枚でアルゴリズムの特性が俯瞰できるようになっています。これが大変便利で、自分が使ったことがないアルゴリズムについても、ある程度想像できるようになっています。

全体的に硬派な印象ですが、知見が詰まった本です。

 

異常検知のやり方を網羅的に学べる本「Outlier Analysis」

異常検知というのは、データから状態の異常を捉えるタスクです。例えば、エンジンなどの工業製品に様々なセンサーを取り付けて振動や温度を定点計測し、正常(壊れていない状態)と異常な状態を判別できるようなモデルを構築します。

この時、正常時と異常時のデータがまんべんなく入手できるのであればあまり悩まないのですが、多くの異常検知タスクでは正常時のデータしか手に入らないことが多いため、モデル構築が難しくなってきます。多くの場合、外れ値検知のような正常時のデータから正常時のモデルを構築し、それからどれだけ逸脱するかを測ることでそれを実現します。

外れ値検知に特化した稀な本

外れ値(Outlier)とは、与えられたデータ母集団において他のデータ群から極端に逸脱したデータ値のことを言います。統計モデルや教師あり学習モデルを作るときには、こうした外れ値が邪魔をすることがあるので、学習データから取り除くことがあります。そのために、さまざまな外れ値検知手法が提案されてきました。

一方、異常検知タスクでは、外れ値検知そのものが問題解決のアプローチそのものになります。したがって、正常データの「分布」をいかにモデル化するか、ということが勝負になってきます。分布推定という話になるのですが、高次元になればなるほど目で確認できないので、難易度が高くなります。

こうした外れ値検知については、正規分布を使った統計学的なアプローチから、 Local Outlier Factor のような情報工学的なアプローチまで幅広く存在しています。本書では、こうした手法を網羅的に解説していて、非常にためになります。

異常検知の本が国内でも増えてきた

外れ値検知に関する情報源としては、本書の他に以下のような論文があります。

また、SNSデータに対する異常検知については、「バースト検知」と呼ばれていて、独自の発展を遂げています。例えば、以下のような論文が参考になります。

上にあげたように、異常検知や外れ値検知については日本語で読める情報源があまりない状態が続いていました。ところが、ここ数年で井出先生の本が相次いで出版されていて、盛り上がってきています。

異常検知というのは厄介なタスクなのですが、知っていると知らないのでは、実務上大きな違いが出てきます。たとえ教師あり学習をやる場合であっても、外れ値検知や分布推定の考え方を知っておくと、助けられる場面が出てくることもあります。

 

時系列データの深淵を知るための「計量時系列分析」「時系列解析入門」

 

時系列データは、ある観測値を一定間隔で繰り返し計測して得られたデータ群のことを言います。例えば、ある地域の時間雨量のデータ、特定銘柄の株価データ、SNS上の特定のキーワードを含む投稿数をカウントしたデータなど、世の中にありふれたデータです。

時系列データのモデリングで最も注意すべきこと

時系列データはありふれたデータですが、取り扱いが非常に厄介なデータでもあります。特に重要な点として、「見せかけの回帰」という現象が発生しうることです。

見せかけの回帰とは、大雑把に言うと、ある条件下において、時系列データの目的変数と説明変数の間で本当は全く相関がない(独立である)にも関わらず、計算上有意な相関関係にあると見えてしまう現象のことです。これは、説明のためのモデルであっても、予測モデルであっても致命的な事象で、時系列データを扱う場合には注意が必要です。

また、この他にもトレンドや周期性を考慮したモデルをいかに作っていくか、という点で、時系列データならではの手法や考え方があります。こうした内容というのは、一般的な機械学習の教科書ではあまり触れられないため、上にあげた2冊のような本を頼る必要があります。

応用統計学分野で発展してきた時系列データ分析

時系列データは、様々な分野で登場するのですが、応用統計学として様々な分野で発展してきました。特に、経済や金融データの解析のために応用されていて、モデルの呼び方が独特な場合もあるので、こうした本を読んでおいた方がよいでしょう。

また、時空間を取り扱える状態空間モデルや、最近話題になっているFacebookの時系列解析ライブラリProphetを理解するための土台として、時系列データ分析の基礎を学んでおくことは有益だと考えています。

時系列データ分析のよりベーシックな教科書としては、以下の本もおすすめです。

 

自然言語処理の基礎を押さえるための「言語処理のための機械学習入門」

私たち人間が普段の日常生活で使っている言葉の体系を、情報工学では自然言語といいます。そして、自然言語をコンピューター上で処理させるための一連の技術要素を、自然言語処理といいます。データサイエンスでは、取り扱うデータに文字列や文書が存在する場合には、必ず必要な処理になります。また、近年の人工知能ブームの中で、質問応答やチャットボットなどが脚光を浴びていますが、これらを処理するために中核となる技術となります。

基礎的な自然言語処理の話題を俯瞰する

自然言語処理は、言語によって処理方法が異なります。特に日本語を扱う場合には、単語を取り出すだけでも手間がかかります。また、日本語は語順に縛られない言語なので、文に含まれる単語間の関係性が曖昧になることがあります。また、単語の表記揺れや動詞の活用形を考慮して、ある程度正規化する必要があります。

このように、テキストデータを使って機械学習を行うためには、ある程度自然言語処理の考え方を知ったうえで、データを構造化する必要があります。とはいえ、自然言語処理の参考書から入ってしまうと、自然言語処理自体を研究開発する人向けの内容になってしまいます。

本書は、まさにテキストデータを入力として、機械学習を活用したい人にフィットする本です。コンピューター上でテキストデータをどのように構造化するのかということから、機械学習を使った文書分類まで、広く解説しています。

テキストデータを初めて扱ったときに、先輩から勧められたのが本書でした。実験方法についても丁寧な説明があるので、大変助かりました。

最近では、ディープラーニングを使って、テキストデータを文字のまま(バイナリで)入力する事例も出てきています。こうなると自然言語処理の細かな処理が不要になるのですが、いつもうまくいくわけではありません。いずれにしても、テキストデータの初期分析やデータビューイングを行うためには自然言語処理は欠かせません。MeCabを使ってデータをハンドリングできるようになったら、本書を読むべきです。

自然言語処理の発展的な手法

自然言語処理は、形態素解析のような基礎的な技術から、情報検索技術の発展形である質問応答まで広範囲に活用されています。また、教師なし型学習モデルも独自に発展を遂げていて、Word2Vecに代表される分散表現技術や潜在トピックモデルのような有用なモデリング手法が提案されています。

特に、分散表現技術を活用したWord Embeddings は、ディープラーニングでテキストデータを扱うためのキーテクノロジーになっているだけでなく、カテゴリカル変数の新たなエンコーディング法としても注目されています。

このように、本書を起点として自然言語処理関連の参考書を順次読んでいくことで、知見を広げることができるでしょう。例えば、以下のような参考書が有益です。

ただし、全部を一気に読むというのは無駄が多いでしょうから、気になる技術や今とりかかっているタスクにひっかけて読むというのがよいと思います。

 

スモールデータモデリングに最適な「ベイズ統計モデリング

 

機械学習を中心にされている方であっても、統計モデリングの考え方を知っておくことは有用だと思います。その中でも、今日の統計モデリング手法の発展的な話題である、ベイズ統計を用いたモデリング手法は重要なテーマだと考えています。

ベイズと統計モデリング

統計解析分野において、ベイズ推定は少し前まで一般的にはあまり注目されていませんでした。

その大きな理由として、事前分布を仮定した主観的な確率を使う手法であるため、伝統的な統計学の識者から敬遠されてきたことがあげられます。また、複雑なモデルを構築した場合に、解析的な方法で推定できなくなるため、活用の幅が広がらないという状況もあったようです。

近年のコンピューター開発の発展により計算コストが下がったことと、マルコフ連鎖モンテカルロ法(MCMC)という手法の応用が進んだことで、ベイズ推定を活用した統計モデリングの利用が進んできました。さらに、BUGSStanといった使い勝手の良いライブラリが登場したことにより、多くの分野で利用が進んでいます。

ベイズ統計モデリングは、生態学、心理学、社会学などで観察データの解析に利用されています。また、医学においても、アカデミックな分野では研究が進んでいます。いずれも、観察されるデータは限られた被験者のデータであるため、ビッグデータとは言えないデータ量となります。いわば、スモールデータの解析となるわけですが、このような分野ではまさにベイズ統計モデリングが威力を発揮します。

データ分析のコンテストでも利用されたことがあるようです。私も、実務で場面に応じて利用してきました。

ここでご紹介した2冊は、各言語でどうやって動かすのかという話もありますが、それぞれモデリングに対するアプローチが豊富なので、利用言語を問わず参考になる部分があるはずです。この2冊の他にも、以下の本が参考になるでしょう。

 

機械学習モデルの構築が中心でも知っておくべき概念

システムやWebサービスの開発チームの方で、機械学習モデルの構築を中心に行っている方も多いと思います。機械学習の手法というのは、多くの場合、アルゴリズムベイズの考え方を内包していたとしても、応用上はデータの量が十分にあることを想定する頻度主義的なアプローチをとることになります。

そうすると、必然的に扱うデータ量が常にビッグデータであることが前提となってしまい、スモールデータを扱うときに困ってしまうことになるでしょう。そうしたとき、ベイズ統計モデリングの考え方を知っていたら、何かしらの解法を思いつくかもしれません。全面的に活用できなくても、前処理の一部として使える場面もあるはずです。

なお、上で紹介した時系列モデルの中で複雑なモデルや、自然言語処理の潜在トピックモデルは、ベイズ推定を用いてパラメータを求めます。

また、機械学習のハイパーパラメータの推定というのは、ハイパーパラメータを分布と見立てて、汎化誤差が最小になる点を見つける作業です。これは、ベイズ推定の問題として考えることもできます。実際に、ハイパーパラメータの探索を単純なグリッドサーチではなく、こうした考えで探索する方法も提案されています。

このように、ベイズ主義の考え方、ベイズ推定の方法、階層モデルに代表されるモデリング手法、各分野での活用例について学ぶことで、アプローチの幅を広げることができるはずです。