※この「プロにキク!」では、毎回その道のプロに話を聞いて、私たちエンジニアに効きそうなノウハウをシェアしていきます。
さて、今回のテーマは「データサイエンスと機械学習」です。単語としてよく耳にするようになりましたが、「それを仕事にするってどういうこと?」みたいな点は分からない人も多いのでは。
今回は、書籍『RとPythonで学ぶ[実践的]データサイエンス&機械学習』を共著で書かれた野村総合研究所のお二人に登場いただき、「データサイエンスと機械学習」の基本的な部分についてお話しを聞いていきたいと思います。
共著者の有賀友紀さん(左)と大橋俊介さん(右)
――お二人、どうぞよろしくお願いします。
有賀さん:大橋さん:よろしくお願いします。
データサイエンスとは何なのか
――ではまず、「データサイエンス」って簡単に言うと何なんでしょうか。
有賀さん:言葉自体は1990年代からありますが、基本的にはデータを扱うための統計的もしくは数理的なテクニックとその応用、と考えていただければよいと思います。
――言葉としてはそんな前からあったんですね。
有賀さん:ええ、ただいわゆる“バズワード”として頻繁に出てきたのは2010年以降ですね。
――それは何が背景だったんでしょう?
有賀さん:やはり、インターネットの浸透によって利用できるデータがものすごく増えてきたというのが大きいでしょうね。
――インターネット上のデータが増えたからデータサイエンスが必要になったと。
有賀さん:それには、もちろんコンピュータやネットワークの性能向上も関係しています。
――じゃあ、これから5Gとかになってくるとデータ量はもっと大きくなりますね。
有賀さん:そうですね。量も増えていますが、実は質も結構変わってきています。対象となるデータは、これまでは“集計のために作られたデータ”でしたが、最近ではSNSのデータなど“最初から集計できる綺麗な形にはなっていないもの”が増えています。
――SNSなどの不完全で膨大なデータをどう捉えればいいのでしょうか?
大橋さん:重要なのは何を比較したいのかとか、どんなことをやりたいのかとか、そういったことをしっかり考えることだと思っています。
――なるほど。実際の“データサイエンス業務”というのはそういうことをやるわけですか。
大橋さん:そうですね。お客様も「まず何から手を付けていいか分からない」という方が非常に多いように思います。「みんなが取り組んでいるから、うちもなにか検討しなきゃいけない」というような感じで。
――ああ、よくありそう。でもよく理解されてないわけですよね。
大橋さん:そうです。ですからまず我々の仕事の第一歩というのは、どういったテーマがお客様にとって重要なのか。そして社内にどういったデータが溜まってそうなのか。さらに、将来的にどう事業を拡大していきたいのか。そういった点を順に伺っていきます。
――しっかりとヒアリングをする、と。
大橋さん:はい、そのうえで実際にデータをいただいて分析して示唆を提示していく、という流れですね。目的意識が無いままにデータと向き合ってもどこから手をつけていいか分からなくなってしまいますから。
――へえ。データサイエンスの仕事ってひたすらデータと向き合ってゴリゴリやってるようなイメージでしたが、それはあくまで一部なんですね。
大橋さん:やはりビジネスですから、お客様の事業拡大や利益に繋がることが何なのかを考えないと、どうしてもデータサイエンティストの自己満足に陥っちゃうと思います。
――じゃあ、場合によっては「データ分析は必要ないですね」という答えもあり得るかもしれないわけですか。
大橋さん:その通りです。これってシステムを作る時と考え方は変わらないと思います。何かしらの目的があってそのシステムや機能を実装するわけですよね。データ分析もその機能の一つというわけです。ですから、「これ、何のためにやるんでしたっけ」ということを常に考えることは大事ですよね。
――なるほど、確かに。データサイエンティストってすごいですね。
有賀さん:ただし、一口にデータサイエンティストって言っても位置づけは様々だと思います。例えば自動運転の先端的なアルゴリズムを開発する人であれば、大学院で数学をやっていて最先端の論文に触れたり自分で書いたりという人もいるでしょう。
――ああ、最初は完全にそういうイメージでしたね。
有賀さん:でも、多くの企業で求められているデータサイエンティストは必ずしもそんな人ではなくて、より身近なビジネスの課題を解決するということが求められます。そういう場合に必要なのは、様々な仮説を立てて検証しながら、課題を解決していける力だと思います。
機械学習って何なんですか?
――では続いて、機械学習って何なんでしょうか。
有賀さん:そうですね、機械学習という言葉はイメージが独り歩きしていて、「機械が勝手に学習してくれる」みたいなイメージがあると思うんですよ。
――確かに、そんな印象を持ってます。
有賀さん:基本的にはそうではなくて、簡単に言えば“データから何らかの結果を推定する”ということですよね。“統計的機械学習”という言われ方もします。
――統計的機械学習……。
有賀さん:データの中にある統計的な傾向をもとに、例えばこの顧客は解約しそうかとか、この機械は故障しそうかとか、そういったことを判定する。それが機械学習ですね。
――なるほど、最近よく耳にするAIとはどう違うんでしょう。
有賀さん:AIの一分野と言っていいですね。ただ、機械学習=AIではないです。そこは勘違いしやすいところですけども。
――では、その機械学習を学ぶ際のポイントってありますでしょうか。
大橋さん:機械学習を動かすこと自体はさほど難しくないですが、機械に“学習させたいことを学習させる”のは本当に難しいです。最初はほぼ確実にうまくいかないんです。データを機械学習アルゴリズムに与えると簡単に目的どおりの結果が得られるわけではなく、自分がある程度コントロールしなければいけない部分もあってここで試行錯誤が必要です。この試行錯誤の過程を含めて機械学習なのかな、と思うところはありますね。
――試行錯誤ありきだ、と。
大橋さん:ええ。私も取り組み始めて随分経ちますけど、未だに試行錯誤でやっているので、最初にやる時にうまくいかないっていうのはある意味当たり前のことだと思います。なのでそこで「自分は向いてないんだ」とか、「数学的な部分が解ってないから出来ないんじゃないか」とか、そんな風に思わないでほしいですね。
――とにかく繰り返すしかないということですね。
大橋さん:はい。逆に失敗から学ぶことというのが非常に多いです。失敗の傾向を調べると、次に何を試さなければいけないかというのも見えてきます。その辺りの思考実験みたいなところは人間に残されている仕事なのかなと思いますし、そこがこの仕事をやるうえでユニークさを出すところなのかなと。
――なるほど。
有賀さん:あとは、失敗と成功を左右する要因として、背景にある「ドメイン知識」の有無が重要ですね。業務知識と言い換えてもいいかもしれません。例えば顧客の解約であれば、「そもそも解約ってどういう原因で起きるんだっけ」とか、「一般的に考えて、解約とサービスへの満足度は結びついてるはずだ」とか、そういうことを考えながらやっていくのが重要なことだと思います。
――先ほどのデータサイエンティストと同じで、技術的な知識だけではダメだということですね。
大橋さん:ええ、私自身も新しい業界の仕事に挑戦するときには、その業界のことをかなり勉強してから臨んでいますよ。
なぜRとPythonなの?
――この本ではデータサイエンスと機械学習について「RとPythonに学ぶ」となってるんですが、なぜRとPythonなんでしょうか。
有賀さん:RとPythonは異なる言語ですが、データサイエンスの分野でいずれも非常によく使われる2つだということです。ただ、特性がそれぞれ違いますので、使い分けが出来るようにということで両方を扱っています。
――この2つはどう違うんでしょう?
有賀さん:簡単に言うと、Rは統計解析向きで、Pythonは機械学習向きですね。おそらくユーザーも微妙に違っていると思います。Rはさまざまな分野の研究者や統計のユーザーで、例えば大学で生物学や心理学をやっていて、調査や実験の結果を分析するために複雑な統計解析をしたいという人が使う。一方でプログラミングを専門とするソフトウェアエンジニアが機械学習を応用した仕組みを作りたいという場合にはPythonを使う、ということになるでしょうね。
――なるほど。そうすると先ほど仰っていたように用途によって使い分ける、と。
有賀さん:例えばマーケティングで集めたデータを分析して傾向を知りたいというときはRを使い、一方、何らかのサービスで解約しそうなお客さまを予測し、その人たちにDMを送るなど自動的に何か施策を打つようなシステムを実装したいときはPythonを使う、という感じでしょうか。
――どちらも知ってる方が強いわけですか。
有賀さん:共通しているところもかなりありますので、どっちをやりたいかがハッキリしていれば片方でいいと思いますし、腕に自信があれば好きな方を使えばいいと思います。ただ、向き不向きは多少あるという感じですね。ちなみに、RとPythonを両方扱っていて二つが比較できるようにしている本って少ないんですよ。そのあたりはかなり意識して書いています。
――色々まとまってる本はこれしかないぞ、と。
大橋さん:マークしている限りは、ですけども(笑)
データサイエンティストの学びかた
――では、いま別のエンジニアとして仕事をしている人が「データサイエンティストになりたい」と考えた場合、どういったスキルを身につけたらいいのでしょうか?
有賀さん:ひとつは、当たり前ですがコミュニケーションスキルなどの基礎的なビジネススキルが必要ですね。あと技術的な面は、最近はオープンソースのツールが増えていますしパソコンの性能も非常に高いですから、まずは“自分で手を動かしてやってみる”というのが一番の近道だと思います。
――大学で学ばなきゃいけない、とかそういうものでは無いわけですね。
大橋さん:ええ。エンジニアの方は有利だと思いますよ。普通の人は手を動かそうと思っても動かせないし、プログラミングに対する苦手意識があると試せませんからね。エンジニアの方はやろうと思えばすぐに挑戦できる立場にあるのかなと。
有賀さん:いきなり仕事で会社のデータで試すというのは難しいでしょうけど、自分の時間を使ってやるのであれば、Webから入手できるオープンデータもたくさんあります。あと「Kaggle」というコンテストサイトがありまして、そこに色々な企業がサンプルデータを出していたりするので、そういうものも使って自分でいじってみるというのは凄く勉強になると思います。
機械学習コンペのプラットフォーム「Kaggle(カグル)」
――なるほど、「Kaggle」のデータをいじって勉強すると。有賀さんは社内研修の講師も担当されているわけですよね。
有賀さん:野村総合研究所の社員全員というわけではありませんが。希望者や推薦者、あと関連部署の新人には受けてもらっています。社内の研修では行政が公開しているオープンデータを使って演習をやっています。
――実際に企業さんがデータサイエンスに取り掛かる際に注意すべきところは具体的にどんな点なんでしょうか。
大橋さん:データサイエンスって一人で全部できるという人はあまりいらっしゃらないと思うんです。あと色んなデータサイエンティストがいると思っていて、それぞれの特徴を活かしてうまくコミュニケーションを図っていくっていうことが実務上において必須になってくるかなと思います。
――そうか、システムをやっているからと言って自社のシステムの全てを理解しているわけではないですものね。
大橋さん:ええ。基盤担当の人に「こういうことを今やりたくてデータを探しているんですが、どんなデータを取ってくればいいでしょうか」とか、色んな人を巻き込みながらコミュニケーションを図っていかなければいけません。一人で全部やろうとすると破綻してしまいますので、みんなで根気よく話し合うということが求められる仕事ではないかなと思います。
――それはちょっと意外な観点でしたね。
データサイエンティストに求められる3つのスキル
有賀さん:データサイエンティスト協会という団体がありまして、当社も会員になっているんですが、そのデータサイエンティスト協会では、データサイエンティストのスキルを3つに整理しているんですよ。
――ほう、その3つとは。
有賀さん:ビジネス力と、データサイエンス力と、データエンジニアリング力。その3つが噛み合っていることが重要だというわけです。ただ、一人で全部を備えるというのは事実上難しいので、やっぱりチームでやっていかないといけない、という話です。
――なるほど、そういうことですか。あと何かデータサイエンティストとして働く際のポイントって何かありますかね。
有賀さん:そうですね、実際に現場でデータを扱うと教科書通りにはいかないんですよね。分析に入る前のデータ自体の処理や加工が非常に大変で、むしろその部分の方が重要だったりします。そこのスキルは軽視しないほうが良いでしょうね。
――では、機械学習を自分で学びたいといった場合は何からすべきでしょうか。
大橋さん:やっぱりツールを使って手を動かしてみるということですね。私はよくみんなに「写経をしなさい」と言っています。
――「写経」?
大橋さん:ええ、例にならって書き写すことです。簡単な例題を書き写してみるとなんとなく構造が分かってくるので、そうしたらソースコードをそのままにデータだけ別のものに入れ替えて、どんな結果が出てくるかやってみる。思うようにいかなかったら、なぜ上手くいかなかったか考えてみる。そういう思考プロセスの繰り返しが大事なのかなと思います。
――なるほど。この本にもサンプルコードがたくさんあるので写経をしてみると良いかもしれませんね。
有賀さん:そうですね。“ツールの使い方”の本でもないですし、“理論だけ”の本でもないですし、その中間と言うか、良いバランスの本になっていると思います。
――なんといっても野村総合研究所の研修を基にして作られた本ですものね。
有賀さん:はい、加筆・修正などもだいぶしていますが(笑)
業界の最先端が網羅的に学べる1冊、皆さんもぜひ読んでみてください。
「RとPythonで学ぶ[実践的]データサイエンス&機械学習」(技術評論社)
野村総合研究所の有賀さん、大橋さん、ありがとうございました!