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

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

SEが機械学習を学ぶためのヒント&おすすめ本5選

f:id:ku2t:20181123111641j:plain

 

AIをめぐるお祭りが少し落ち着いてきている気がしますが、その一方で、データサイエンスの重要性は高まり続けています。マーケティングWebサービスだけでなく、業務システムに機械学習の機能を取り入れるタスクも増えてきました。

こうしたこともあって、データサイエンティストに対するニーズは高まるばかりです。以下の記事を読むと売り手市場という状況は変わっていないようです。

別の見方をすると、データサイエンス・機械学習のスキルが労働市場で競争力を高めることになります。これは、SEのようなエンジニアだけでなく、プロマネやチームリーダのようにマネジメントにかかわる人も同様だと言えるでしょう。

こうしたこともあり、最近、社内の同僚から機械学習について教えてほしいという相談を受けることがよくあります。仕事だけでなく、個人的に勉強したいので学び方を教えてほしいと相談されることも増えてきました。

そんなとき、以下でご紹介した定評ある機械学習の入門書をおすすめしてきたのですが、なかなか手を出しにくいようで、最近は見直しています。

 

この記事では、まず初めにSEが機械学習を学ぶときにつまずきやすい点を整理します。

その上で、これまで社内のSEや私のチームに新しく配属された新人におすすめして評判が良かった本と、それを使った学び方のヒントをお伝えします。

 

 

SEがつまずきやすい3つのポイント

SEの方は、実際に動かしてみないとわからないとおっしゃる方が多い印象があります。そこで、機械学習の定番的な入門書である「Python 機械学習プログラミング」や、数式なしで概念を理解できる「戦略的データサイエンス入門」をおすすめしてきました。一方、気合が入っている方は、「深層学習」「パターン認識と機械学習」「ITエンジニアのための機械学習理論入門」のような本格的な入門書から入る人もいます。

しかし、社会人になって長らく数式と無縁の生活を送ってきた人にはかなりハードルが高く、詰まってしまう人もいます。また、今の仕事との関連がつかめず、イメージがわかないという人も多くいました。

何よりも、私がSEからデータサイエンティストに転身したときも、同じように本質をつかめず苦しんだ時期がありました。

 

SEとしてSI開発に携わってきた人が、機械学習を学ぶときにつまずくポイントは3つあると思っています。

  1. 処理内容の本質的な理解:システムへの組み込み方を意識したときに、「機械学習」の処理内容がわからない。In/Outの仕様、どんな仕組みで動いているのか?
  2. 実務における位置付けの把握:自分が携わっているシステム開発でどの部分に位置づけされるのかわからない。どこに置けばよいのか?
  3. ものの見方:プロジェクトの進め方やテスト方法が独特でわからない。精度がパーセントで示されても困る。精度を100%にできないのか?

それぞれ少し深く見ていき、壁を乗り越えるヒントをお伝えします。

 

機械学習処理の本質を理解する

SEが機械学習を学ぶ直接のきっかけは、自分が構築しているシステムに「機械学習」なるものを組み込むことになったときだと思います。また、上司から「機械学習を活用方法を考えて」とリクエストが来ることもあるでしょう。

こうしたとき、まず機械学習でできることを知るために、多くのSEが”事例”を求めます。そこでなんとなく理解が進むのですが、仕組みが気になってきて、機械学習の入門書を手に取ります。やはり根はエンジニア。手を動かして処理内容や仕組みを理解したくなるのでしょう。

そこで、多くの方がPythonやRのコードが載っているものを選び、自分のPCでポチポチと試しながら少しずつ分類や回帰の概念を理解していきます。機械学習と聞いてさぞ大量のコードを必要があると思いきや、たった数行で学習できる例題を動かしてみて、拍子抜けするかもしれません。

 

なんとなくわかるが応用できないというジレンマ

しかし、こうして学んでいっても、スキルが身についたような気がしないのではないでしょうか。果たして、自分が本質を理解できているのか、新しいデータを渡されて「学習モデル」を作れるのか―。私のチームに配属された新人がまさに同じような状態に陥っていました。彼の話を少ししてみましょう。

 

彼はデータサイエンス未経験の新人として入社し、たまたまデータサイエンティスト集団の一員となりました。未経験ということもあり、実戦投入の前に社内外の教育を受けてもらったり、定番の機械学習入門書で自主的な勉強をしてもらったりしました。しかし、やってもやっても「実感」がなく、不安が募るばかりだったと言います。

そこで、リアルな実務データの解析をやってみようということになりました。まず手始めに、これまで学んだことをベースにデータビューイングしてインサイトを導出するタスクです。基本統計量の確認やデータ数の確認などベーシックな報告を期待してのことで、Pythonの実践的な練習という側面もありました。しかし、彼はどのようにデータを見てよいかわからず途方に暮れてしまったのです。データを目の前にして、手を動かすことができなかったということです。

 

上で挙げた話は、私自身も経験したことでした。私が研究所に異動になってRを触り始めたとき、参考書として「Rによるデータサイエンス」を読み込み、Rのコードを書いて動かしながら理解していきました。しかし、いざテキスト分類のタスクに取り掛かろうとしたときに、何からやって良いかわからないという状態に陥りました。知識の点と点が繋がらず、応用が利かないという状態でした。

同じようなアプローチで機械学習を学び始めたSEの多くも、このジレンマに直面していることでしょう。

 

リアルなタスクをガイドライン付きで演習する

応用力を高めるには実務経験を積むのが一番です。問題設定がなされたタスクとデータがあって、それの前処理からモデル作成、評価・チューニングまでを一通りやってみるのが、理解を深めるための王道です。しかし、手ごろなタスクがないこともあるでしょうし、前処理の一部だけを下積みとしてやり続けても、機械学習の本質はつかめません。

この問題を解決するために、本屋に頻繁に立ち寄って題材を探していました。いくつか購入して新人やSEに紹介し、スキルアップ効果があった本を紹介します。

scikit-learnとTensorFlowによる実践機械学習

scikit-learnとTensorFlowによる実践機械学習

 

 

この本は、機械学習の実行ライブラリとして定番のscikit-learnとTensorFlowを学べる本として人気のある本です。通常の機械学習からディープラーニングまでを、わかりやすい解説とコードで理解できるのが特徴です。各手法の解説は概要的なものになっていますが、全体像をつかむにはかえって良いかもしれません。

この本で特に良いのは、「2章 エンドツーエンドの機械学習プロジェクト」で、リアルな機械学習タスクを初めから終わりまで学べる点です。ここでは、カルフォルニアの住宅価格を推定する例題がでてきます。これをこなすことで、データ加工からモデル構築までを、手を動かしながら習得できます。

 

このように、ガイドライン付きでリアルなタスクを疑似的に学べる題材は見かけませんでした。なので、この本を見つけたときに、これだ!と思ってすぐに購入しました。そして、会社の新人に2章をやってもらったところ、かなり効果的でスキルアップに繋がりました。本人もやっていて楽しかったと言ってくれたので良かったと思っています。

副読本として、以下の参考書を活用してもらいました。わからないことをググるだけでなく、自分で本で調べながらやっていくと、より効果的だと思います。

  1. Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
  2. Pythonによるデータ分析入門 第2版

 

実システムのコンテクストで機械学習を理解する

プロマネをやっている人が、機械学習を含むシステム構築を立ち上げようとしたとき、機械学習というものがシステムのどこに位置付けられるのか気になるはずです。プロマネの方が数式レベルでアルゴリズムを理解する時間はないかもしれませんが、リーダーとして実システムの中での位置付けを知る必要があるからです。

これまで、多くのSEの方に機械学習の説明をしてきましたが、同じSEでも機械学習処理の捉え方が違うことがわかってきました。大雑把に分けて、アプリケーション系のSEとインフラ系のSEで、コンテクストが大きく異なります。

 

SEはどのように新しい技術を捉えるのか?

アプリケーション系のSEは、顧客の機能要件を元にシステム化要求→設計→プログラミングという順に細分化・具体化することでシステムを作っていきます。そのため、システムや処理の全体像を機能ブロックと処理・データのフローで捉えていきます。この意味で、機械学習を機能ブロックの一つとして捉え、そのIn/Outとデータレイアウト・構造から位置付けを理解しようとします。

一方、インフラ系のSEは、顧客の非機能要件を元にシステム構成を考え、サーバースペック、ミドルウェア、ネットワーク仕様などを策定していきます。そのため、機械学習のように新しい機能要素が出てくると、そのミドルウェアに対する理解から始まり、サーバーに必要なCPU・メモリのスペック、データ処理件数、バッチ要件などを押さえていきます。そして、最終的にはシステム構成図の中での位置づけを理解しようとします。

 

このように、一口にSEといっても、システム・技術を捉える目が全く違うのです。

 

システムの中で機械学習を理解する

残念ながら、上にあげたような視点で機械学習を解説してくれる参考書はなかなかありません。しかし、つい最近、”システム”という観点で機械学習を丁寧に解説してくれる本が出版されました。 

仕事ではじめる機械学習

仕事ではじめる機械学習

 

 

この本は、機械学習を「仕事で使う」ためにどうするかという視点で解説した本です。データ分析のためではなく、実システムにどうやって機械学習を組み込むかを解説していることがポイントです。処理、環境両面で説明されているので、アプリケーションSE、インフラSEを問わず読みやすいのではないでしょうか。

まず、「1章 機械学習プロジェクトのはじめ方」にて、データサイエンスプロジェクトの全体像を示します。その後、2章・3章で技術的な説明が続き、「4章 システムに機械学習を組み込む」にて、機械学習を使ったシステム設計の考え方が示されます。

機械学習の処理を理解した上でこの4章を読むと、実システムのコンテクストで機械学習を理解することができるはずです。後は、自分自身がかかわっているプロジェクト、システムで機械学習を活用することをイメージし、具体的に考えてみるとより一層理解が深まることでしょう。

 

確率的・統計的なものの見方を自分にインストールする

最終的かつ本質的な壁は、機械学習特有の「確率的・統計的」なものの見方を身につけることだと思います。私がアプリケーションSEからデータサイエンティストに転身したとき、この考え方の転換にもっとも苦労しました。

 

優秀なSEであればあるほど理解しにくいデータサイエンス

大雑把にいって、SEが直面している問題の多くは、不確実性によって生じることです。顧客要件の思わぬ変更や人間関係など、コントロールが難しい不確実性にどうやって立ち向かうのかが大きな関心事になります。そして、エンジニアリングにおいては、やわらかくて確定的でない「顧客要件・要求」を、カチッとした「システム化要求事項」に落としていくことが基本スキルになります。

つまり、エンジニアは、日々不確実性を排除してロジックが通るブレのない設計を行っています。そして、優秀なエンジニアであればあるほど、物事の矛盾点や確定要素の抜け漏れを瞬時に見抜き、的確なコミュニケーションを通してシステムを作り上げる能力に長けます。一方、機械学習・データサイエンスの世界では、不確実性自体を内包したモデルを作って動くものを作っていきます。前者は演繹的なモデル、後者は機能的なモデルともいえ、極端に言えば180度違う思想であると言えるでしょう。

 

統計的なものの見方を身につけよう

機械学習はデータの集合から帰納的にモデルを構築する手法であり、アルゴリズム、学習プロセス、評価(テスト)それぞれにおいて、統計的な考え方が登場します。これを理解するには、自然に統計的な観点でデータや物事を捉えるスキルを身につける必要があります。

しかし、これが大変に難しく、統計学・統計解析の入門書を読んでもなかなか身につけることができません。データを触って分析したり、機械学習モデルを構築したりすることを続けていくと、自然とわかるようになってくるものですが、そうも言ってられない方も多くいると思います。

そこで、読み物的に気軽に読めつつ、データの眺め方や実世界での応用例をイメージできる本をいくつかご紹介します。 

 

統計学が最強の学問である

統計学が最強の学問である

 

まずは、ビッグデータ時代のベストセラー「統計学が最強の学問である」です。相当に売れた本で、いまだに本屋で見かける定番本となっています。PythonやRで機械学習を触ったことがある方も、統計に自信がない方は一度読んでみることをおすすめします。実例が豊富なだけでなく、さまざまな統計モデルを俯瞰し整理していることも大きな特徴です。また、「ランダム化」について平坦に解説されていて、統計学のキモである重要な考え方を身につけることができます。

 

ヤバい統計学

ヤバい統計学

  • 作者: カイザー・ファング,Kaiser Fung,矢羽野薫
  • 出版社/メーカー: CCCメディアハウス
  • 発売日: 2011/02/19
  • メディア: 単行本
  • 購入: 11人 クリック: 93回
  • この商品を含むブログ (24件) を見る
 

交通渋滞、クレジットカード、入試など、実世界における統計学の活用例を豊富かつ丁寧に解説する本です。まったくのド素人だった私がデータサイエンスチームに異動したとき、一番初めにすすめられたのがこの本と、「その数学が戦略を決める」でした。読みやすいので、さらっと読めてしまうかもしれません。

私も、一度読んだだけで劇的に理解できた!とはなりませんでした。しかし、後々になってさまざまなデータ、プロジェクトにかかわっていると、ふとこの本で読んだことを思いだされて、リンクすることがあります。そういった意味で、統計的な考え方を身につけるには、よい材料になると思っています。

 

コンサルタントが書いた問題解決に関する本です。コンサルタントの基本思考を身につけるための本として有名ですが、データを見る目を養うための本としても有用です。特に、第1章から第5章で統計的なものの見方を身につけるために重要な概念が示されます。

 第1章 「大きさ」を考える

 第2章 「分けて」考える

 第3章 「比較して」考える

 第4章 「変化/時系列」を考える

 第5章 「バラツキ」を考える

統計学のポイントは、データ、値のバラツキを考えることであり、データの塊を比較して分析することでさまざまな知見を得ることです。この考え方が、演繹的案思考に慣れたSEには想像しにくいのですが、この本では実ビジネスの事例を通して解きほぐしていきます。コンサルタント向けなのでやや硬い印象がありますが、大変貴重な本だと考えています。

 

 

【関連記事】