第2回 機械学習に必要なスキルセットDeep Insiderオピニオン:吉崎亮介

機械学習は全員が同じことを学べばよいわけではない。ビジネスサイドとエンジニアサイドに分けて、それぞれどういう目的で、どのようなスキルセットが必要なのかを説明する。

» 2017年11月27日 05時00分 公開
[吉崎亮介キカガク]
「Deep Insiderオピニオン:吉崎亮介」のインデックス

連載目次

ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「www.buildinsider.net」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

はじめに

 前回は人工知能機械学習ディープラーニングの位置づけや、学習と推論というキーワードについて説明しました。

 今回は「実際に機械学習を学んでいきたい」という人向けに、どのようなスキルセットが必要か、そしてどのように学んでいくとよいかをご紹介していきます。

必要なスキルセット

 まずはじめに、機械学習は全員が同じような事柄について学んでいくことがベストではありません。

 大きく分けてビジネスサイドエンジニアサイドで分けられると考えています。

 ビジネスサイドの方は、企画からエンジニアサイドの方に仕事をパスできるまでを担当します。

 エンジニアサイドの方は、出てきたお題をどのように実装して解決していくかが問われます。

 ただし、両者がそれぞれ異なるスキルであることは確かですが、協力していく必要があるため、ビジネスサイドは「どのような情報をまとめてパスすると喜ばれるか」と、エンジニアサイドは「実装した結果をどのように報告すると喜ばれるか」と心掛けるなど、お互いに歩み寄れると良いプロジェクトになります。

 それでは、それぞれどのようなスキルセットが必要になるのか? まずはビジネスサイドから説明していきます。

ビジネスサイド

 ビジネスサイドの方は、以下の2つをしっかりと決められることが大切です。

  • 課題設定
  • 費用対効果

課題設定

 これはどの企画でも当たり前の話ですが、機械学習を含めたAI案件では、「AIで何か面白いことをやってほしい」といった手段が目的となるケースが少なくありません。この目的と手段が逆転してしまう問題を避けるためにも、「解決すべき問題は何か?」を考えていただきたいです。

 そして、もう一つ考えていただきたいことが「AIでないと解決できないのか?」ということです。

 これまで多くの方の相談に乗ってきましたが、ほとんどの案件がシステムの自動化で解決するケースであり、AIでなくても解決できました。むしろ、AIを組み込むと、仕様書の詰めが甘くなるため、検収が難しくなり、納品まで遠回りをしてしまうということも考えられます。

 このあたりは、私自身の過去の失敗経験を下記リンク先の記事につづっておりますので、ぜひお読みいただけると、現場で起こっている問題が見えてくるかもしれません。

 そして、課題設定を行う際に、「どのような課題を解決できるか?」も非常に重要ながら、「その解決に対するKPIが正しく定量評価できるか?」が大事です。

 ここで、「AIを使って人材と企業のマッチングをしたい」という例え話を考えてみましょう。このような問題設定は実際よくありますし、身近に転職する友人がいると、「こういうサービスがあればよいのにな」とも思います。人材紹介の会社も、これをサービス化できれば当然うれしいでしょう。

 課題設定としては、まだまだ曖昧ですが「AIによって人材と企業の良いマッチングを行う」で大丈夫です。

 さて、課題設定ができたので、これで「人材と企業の良いマッチングを行うAIを作って」とエンジニアへパスすればOKかというと、全然Noです。Noであることはお分かりかと思いますが、では具体的に何が足りていないかを洗い出してみてください。

 まず、機械学習の「学習」と「推論」の違いが分からないという方は、ぜひ前回の記事を読んでみてください。

 これを読んでいただければお分かりの通り、学習の段階で、良いマッチングに対応する出力yが定量評価されている必要があります(参考: 図1)。また、人材と企業のマッチングの良しあしの根拠になる入力xも必要となります。

 そのため、入力xとして、「遅刻の回数、やる気、etc…」といったその根拠となるファクターを洗い出し、そして出力としては、「良い」マッチングを定量評価するために、例えば「退職までの期間」といった定量評価が可能なものを定める必要があります。また、上記の「やる気」に関しては一見それらしく見えるのですが、これもどのように定量評価されているかが肝になることもご注意ください。

 そして、これらが机上の空論であるファクターではなく、データとして揃えられることも非常に重要です。どの部署に掛け合えばデータが手に入るかWebから情報が取得できるか、など具体的なデータの取得手段まで詰めておきましょう。その点が決まっていれば、あとはエンジニアサイドで自動的にデータを収集してくれる仕組みを作ってくれるはずです。

図1 前回の記事からの再掲: 入力xと出力yのイメージ(画像から「吉崎」を学習させる例) 図1 前回の記事からの再掲: 入力xと出力yのイメージ(画像から「吉崎」を学習させる例)

費用対効果

 課題設定ともう一つ大事なこととして、費用対効果が挙げられます。

 機械学習のプロジェクトを進めていく上で、「この手持ちのデータから実現可能か?」という観点もあるのですが、もう一つ大事な観点として「このプロジェクトを本当にAIで進めていくか?」も大切です。日頃のビジネスにおいては当たり前の話ですが、これがAIというマントを着ると、「AI使いたい」が先走ってしまうケースがよくあります。

 ここでも例え話として、「事務作業をAIで自動化する」という例について考えてみましょう。これもよくある相談の1つです。

 FAXで送ってこられる請求書を毎回パソコンに入力するのが面倒だと思っている方も多いのではないでしょうか。そうなると、こう考えるわけですね。

AIで請求書の文字起こしを自動化できないか

 画像処理という技術は目覚ましい勢いで発展しており、特にディープラーニングという技術が登場してからは、文字の書き起こしに関しては精度がかなり上がっています。そうなると、請求書からの文字起こしも、実現可能な問題設定となるわけです。

 しかし、実際に開発コストをかけて完成したとして、これでどのぐらいのコスト削減が見込めるでしょうか。FAXで送られてくる請求書が1日に多くても10回ほどであれば、開発費に対する費用対効果が全く見合うはずがありません。

 それに対し、製造業における商用スケールのプラント運用では、製造コストが年間数百億円とかかっているといったケースがあり、機械学習によってこのシステムの運用改善を1%でも実現できれば、それだけで年間数億円のコスト削減につながり、「開発コストに対する費用対効果が高い」と言えます。

 そうとはいえ、機械学習の案件を始めたいけれど、実際にデータを解析してみないと、どのくらいの精度が出るか分からず、費用対効果を見積もることができないといった「鶏が先か、卵が先か」の問題があります。

 この問題を解決するには、Azure Machine LearningなどのGUIで操作できるタイプのツールでよいので、ビジネスサイドの方も、機械学習の原理を理解し、必要なデータを収集し、簡単に解析をかけてみるところまでやってみることです。これができると、本格的に開発を進めるかの意思決定もできるようになります。

ビジネスサイドに必要なスキルまとめ

  • データ収集まで見据えた課題設定力
  • 大ざっぱな解析を行うことで費用対効果を見積もる力

エンジニアサイド

 エンジニアサイドの方は以下の3つのスキルが重要となります。

  • データの整理・前処理
  • 機械学習アルゴリズムに対する数学的な理解
  • 検証も踏まえた運用

データの整理・前処理

 機械学習の実務に従事している人が声をそろえて言われることとして、大半の時間をデータの整理と前処理に費やしているがあります。

 具体的にデータの整理とは、データベースから該当の日付のデータを抽出したり、各テーブルにまたがっているデータをつないだりといった作業のことです。それ以外にも、教師データがないために、簡易のアノテーションツールを作って、手動でデータにラベル付けを行ったりと、涙ぐましい努力の下で、機械学習プロダクトは完成します。しかし、このようなデータ整理に関してはあまり体系立っていないことから、収集できる情報が少ない現状であり、「この点を甘く見ていた」と後悔される方にも、しばしば遭遇します。

 また、データの前処理では、画像向けに機械学習にデータを投入する前の特徴抽出が主な作業です。お手元にある画像を最初から入力データとして使用するわけではありません。ディープラーニングの登場以来、画像をそのままお手軽に入力データとして使用するケースも増えてきてはいますが、それでも大半のケースは目的に合わせた前処理を行うことで予測精度を大幅に向上させることができるのです。

機械学習アルゴリズムに対する数学的な理解

 scikit-learnChainerTensorFlowといった非常にお手軽に機械学習を実装できるライブラリの登場以来、機械学習エンジニアという肩書きの方が一気に増えました。これはとても良いことで、「課題を解決する」という目標を達成できるのであれば、プログラミングの時間が短いに越したことはありません。しかも、これらのライブラリを使用すれば、あまり数学の知識がなくても実装ができるため、プログラミングに親和性の高いエンジニアの方にとっては、仕事の幅が広がる良い機会となっています。

 しかし、この新米機械学習エンジニアの方々が実務に従事した際に、すぐに壁にぶつかります。

 機械学習では与えられたデータに対して試行錯誤しながらモデルを構築していくのですが、ハイパーパラメーターと呼ばれる人間側でチューニングすべき変数がいくつか存在します。しかし、このハイパーパラメーターを調整しようにも、原理が理解できていないため、どのように調整すればよいかの検討がつかないのです。

 この壁にぶつかった方が、「やはり数学を学ばないと原理が理解できないから、人に説明もできないし、チューニングの方法も分からない」と言って、泣く泣く避けていた数学の参考書を読まれるわけです。

 最近では営業の方も機械学習について勉強されている方が多く、話を聞いてみると、「お客さま先で自社のAI製品を売り込むにしても、原理が分からないため、差別化できている点について説明できない」とのことでした。

 そう考えると、「人に説明するため」「チューニングするため」にも原理の理解が必要となってきます。

検証を踏まえた運用

 機械学習では、手持ちのデータを訓練データ検証データに分けます。訓練データでモデルを学習させて、その学習済みモデルを使用して予測した結果を、検証データと比較することで、未来のデータに対する予測精度を測ることができます。一般的にこの作業を検証と呼ぶのですが、実際にお客さまと一緒に解析する際には、この検証データに対する結果だけを報告したとしても、「なんとなく納得できるけれども、実際に動かしながら検証するまで納得できない」といった問題が起こることがあります。この問題に関して、詳しくはこちらの記事(前掲した記事と同じ:「機械学習案件を納品するのは、そんなに簡単な話じゃないから気をつけて - Qiita」)で書いているのですが、一般的に図2のフローでよく議論がされています。

図2 一般的な機械学習のフロー 図2 一般的な機械学習のフロー

 しかし実際のところ、「運用しながら検証してほしい」と考えるお客さまも多く、仮の運用まで行わないと、納得感のある案件にはならないこともあります。そのような際には、図3のフローで議論する必要があるため、見積りを行う際に、「仮運用」の部分も忘れないようにしましょう。

図3 仮運用を含めた機械学習のフロー 図3 仮運用を含めた機械学習のフロー

 この運用には、システム自動化のスキルが必要となります。例えば、Webから定期的に情報を収集して、機械学習を使ってある予測値を計算し、Webでその結果をリアルタイムに見られるような仮運用の仕組みを作るといったことが考えられます(図4はシステム構成の例)。この場合、ざっくりと以下のようなスキルセットが必要となります。

  • サーバーでの環境構築: LinuxやDockerなど
  • データベース: MySQL、PostgreSQL、SQLiteなど
  • Webアプリケーション: Ruby on Rails、HTML、CSS、JavaScriptなど
  • Web API: Python、Flaskなど
  • Webサーバー: nginxやApache
  • Cron: 定期実行
図4 仮運用を自動化するシステムの構成例 図4 仮運用を自動化するシステムの構成例

おわりに

 今回は機械学習をビジネスで活用するという広い範囲で見た際に必要なスキルセットをまとめました。

 「AI≒魔法」と言われかねない扱いをされているケースにも遭遇することがありますが、ビジネスサイドの方もエンジニアサイドの方も、それぞれ必要なスキルセットが多くあり、これらを堅実に積み上げていくことができる企業や個人がこれから成長していくでしょう。

「Deep Insiderオピニオン:吉崎亮介」のインデックス

Deep Insiderオピニオン:吉崎亮介

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。