こんにちは、株式会社ラクスで横断的にITエンジニアの育成や、技術推進、採用促進などを行っている開発管理課に所属している鈴木( @moomooya )です。
ラクスの開発部ではこれまで社内で利用していなかった技術要素を自社の開発に適合するか検証し、ビジネス要求に対して迅速に応えられるようにそなえる 「
2019年度下期にこのプロジェクトで「機械学習プロジェクトの進め方」について検証したので紹介したいと思います。対象読者は非エンジニアを含む、機械学習を用いた機能を企画・設計する全ての関係者となります。
今までの記事はかみせんカテゴリからどうぞ。 tech-blog.rakus.co.jp
今回の目標
「人工知能が幻滅期に入った」と言われるようになったので1、啓蒙活動期に向けて本格的な検証を開始しています。
プロダクトに機械学習を利用した機能を実装するにあたってエンジニアサイドだけではなく、ビジネスサイドも含めて、どういった考えで取り組むべきなのかをまとめます。
いきなり難しい領域に取り組むのは無謀なので一番わかりやすい「教師あり学習」のみを想定します。toBサービスの場合だとクライアントに説明しにくい処理を組み込むのはハードルが高すぎるということも考慮しています。
参考書籍
特に第1部第1章は関係者全員に読ませましょう。
プロジェクトを進めていくにあたってのケーススタディが豊富。
あらためて機械学習とは
何ができるのか
大まかにいって
- 入力データを分類すること
- 入力データから数値を予測すること
の2つです2。
機械学習プロジェクトのアンチパターン
「機械学習でなにかすごいことをしたい」という上司が現れて、何をすればいいかというところから頭をひねるようなプロジェクトになってしまい、うまくいかない結果に終わる危険性が高まります。
「言わずもがな」ですね。
システムに組み込むまでの手順
まずはデータがないと話がはじまりません。後から出てくるScikit-Learnのチートシートではデータの特徴によって適切なアルゴリズムが選択できますが、少なくとも50サンプル以上が必要となります。他にも基準として「1万サンプルを超えるか」「10万サンプルを超えるか」という目安が大規模なデータかどうかという基準として出てきます。
データを用意したら次に行うことはデータの前処理です。機械学習の世界では「前処理8割」という言葉があるようで、非常に重視されています。収集した生のデータはそのままだと扱いにくい書式や値であることが多く、それを学習アルゴリズムへの入力として都合の良い形に整形しましょう、というのが「前処理」になります。 取り組む前は次の学習モデル作成が大変なのかと思っていましたが、自前のアルゴリズム構築を行わない場合は前処理工程の方が遥かに大変です。
前処理を行ったデータを入力として学習モデルの作成を行います。自前で学習アルゴリズムの構築を行わない場合、公開されているアルゴリズム選択チートシートと機械学習ライブラリを用いて、学習アルゴリズムの選定と実装ができるので比較的容易に学習モデルの作成は出来ます。
作成した学習モデルをシステムに組み込みます。組み込みの際には作成した学習モデルファイルを読み込んで利用します。併せてモニタリングに必要な数字も取得できるように作り込みましょう。
プロジェクトの進め方
問題の明確化
機械学習を使っても人間が真偽を判断できない問題は解くことが出来ません3。
注意しなければならないのは「人間が判断できるかどうか」を考えるときに所要時間はあまり意識する必要がないことです。例えば「何日もかければ正しいかどうか判断できる」というような実務上現実的ではない時間がかかる場合でも、判断することができれば多くの場合問題ないです。なぜならプログラムの実行速度は人間の何倍もの速度があるため時間的な制約は問題にならないためです。
問題と対になる成果の指標も最初に決めておきましょう。機械学習を利用した機能の運用は高コストになりがちなのでビジネスに貢献出来ていることが必須です。ビジネス観点でのKPIを定めておくべきです。
問題を人間が解けることの確認とKPIが定まったら、取り組む問題が本当に必要なのか、取り組む問題に機械学習が必要なのかを検証しましょう。『仕事ではじめる機械学習』でも大きく扱われているように機械学習を使わない方法を検討します。想定しているよりも機能や利用シーンが制限されたものでもよいのでプロトタイプを作成し、問題設定が想定通りかどうか検証しましょう。検証の結果、機械学習を利用しなくても要件を満足することもあると思います。その時はオーバースペックなものを作らずに済んだと喜びましょう。手段を目的と勘違いしてはいけません。
システム設計
機能設計
- データ収集方法
- 予測誤りのカバー方法
- 撤退ラインの定義
先述の通り、データ収集の仕組みが必要になります。数千サンプルのデータを継続的に収集することは手作業では割に合わない作業です。最初の1, 2回を検証を兼ねて手作業でやることは否定しませんが、それが3回、4回と続くようなら見直したほうが良いでしょう。
また、機械学習では誤った結果を出力することがあります。大体よく見かける予測正解率は80~90%程度なので5~10回に1度くらいと、それなりの頻度で誤った結果を出力するため仕組みとして誤った結果を出力しても問題にならないような機能設計が必要です。
そしてこのフェイズを超えたあたりからサンクコスト効果により、撤退判断が遅れやすくなります。なので、この時点で撤退条件を定義しておくとよいでしょう。
アルゴリズム選定
機械学習アルゴリズムの選定については自前でアルゴリズムを構築しない場合であれば以下でアルゴリズム選定用のフローチャートが公開されています。
昔はアルゴリズムから開発することが必要だったようですが、現在は優秀なアルゴリズムが簡単に利用することができます。感謝して使わせてもらいましょう。
前処理
いちばん大変な工程です。機械学習はデータからデータを導くアルゴリズムなので入力データが重要で、最終的な予測精度にも影響するようです。なのでたくさんのデータを集めて精度を上げるわけですが、収集したデータが都合の良い書式であるとは限りません。というよりも都合が悪い形式であることを前提に取り組んだほうが良さそうです。データソースが1つであればまだマシでしょうが、複数のデータソースからデータを集めてきた場合にはさらに手間が増加するでしょう。
「前処理8割」という言葉があるらしいですが、以下のような様々な処理が必要になるようです。
- データクリーニング(データクレンジングとも)
- 不要なサンプルの除去
- ノイズとなる外れ値の除去
- 値がない項目の処理
- 値の整形
- 値の分布を正規化
- よくあるのは0~1の範囲に変換
- 細分化しすぎている分類を集約
- 自然言語での時制、語尾変化、類語の統一
- 値の分布を正規化
これらを実現するための手法もいろいろ考案されているようで、前処理だけに絞った書籍も複数出版されています。
今回は前処理がこんなに奥深いテーマだということを知らなかったため深追いしませんでしたが、来年度の取り組みテーマとして前処理の掘り下げを予定しています。
モデルの作成
判断材料となるデータは場合によっては非常に大きなデータサイズになり得るため、そのままシステムに組み込むわけには行きません。そのため機械学習アルゴリズムを通して作成した学習モデルのみを組み込みます。学習モデルは誤解を恐れずに言うとデータを分析して抽出した条件式の詰め合わせのようなイメージです。 機械学習アルゴリズムの選定や実装も先述の通り、既存のフローチャートやライブラリを利用することで比較的容易に実現することが出来ます。
ただし忘れてはいけないのは運用を開始しても、新たに収集したデータを元に定期的に学習モデルの再作成(再学習)が必要になります。再学習を行わないと入力傾向の変化や未知の入力パターンに適応できなくなるためで、この現象はコンセプトドリフトと呼ばれています。
モニタリング
2つのモニタリング
機械学習の予測精度は入力傾向の変化によりいつかは劣化します。予測精度劣化の兆候を検知するためにもモニタリングは必要です。予測結果が把握できている入力データセットをベンチマークデータセットとして利用します。このデータセットのことを「ゴールドスタンダード」というそうです。
もう一つはビジネス的な成果のモニタリングです。機能を作成してもビジネスに貢献できていなければ意味がありません。ビジネス観点の指標をモニタして成果が上がっていることを確認しましょう。
活用事例
では進め方はともかくどのような使い方をすればよいのでしょうか。
システム設計の項で触れた「誤った結果を出力しても問題にならないような機能設計」という観点を交えて見ていくと非常に参考になるケースを見つけました。
大日本住友製薬と英Exscientiaの創薬事例
こちらの大日本住友製薬と英Exscientiaが2020年1月30日に発表したAIを活用した新薬が臨床試験を始めた事例です。新薬開発の世界では膨大な組み合わせの中から候補となる組み合わせを専門家の知識と経験で見つけ出し、それを検証して製品化につなげるそうです。この事例では「膨大な組み合わせの中から候補となる組み合わせを見つけ出す」部分にAIを活用しているそうです。
膨大な組み合わせから候補を探すという「0を1にする」部分においては専門家が取り組んでもとても時間がかかる部分ですが、専門家よりもたとえ精度が劣ったとしても圧倒的な早さで候補を挙げてくれるとすれば大きな成果となるでしょう。もちろん専門家が取り組んだ場合に比べて使えない候補は多かったと考えられます。ただし使える候補か使えない候補か判断する部分に専門家(人間)が入ることで誤った結果を排除し、臨床試験に望むまでを4年半から12ヶ月未満と大幅に縮めることが出来たよい活用事例だと考えられます。
他にも同じような活用事例として、三菱マテリアルも同様のプロセスで新素材の開発に活用しているようです。三菱マテリアルは機械学習プロジェクトを始める際のビジネスフレームワークとなる機械学習プロジェクトキャンバスを作成し公開してくれています。今回の取組中にも参考にさせてもらいました。
講談社のTEZUKA2020プロジェクト
こちらは2020年2月26日に発表された講談社による「手塚治虫が新作を作ったらどんな漫画になるだろう」という課題にAIを活用したものです。
こちらも本質的なプロジェクトの進め方は上記の創薬プロジェクトと同様で、漫画の軸となるプロットとキャラクターデザインの候補をAIが提示し、それを人間の判断により選び出し制作を行うという流れで取り組んだそうです。
結論
- 分類と数値予測
- 入力データの収集が必要
- 入力データはそのまま使えない、整形には手間とノウハウが必要
- 従来の方法では手間がかかりすぎることをやらせると良い
- 「人間ができること」を「間違えることもあるが」「高速に判断できる」
- 間違えたときのカバーする仕組みが大事
- 運用を始めると必ず劣化するので監視と再学習が必要
社内勉強会の際に挙がった声と回答
エンジニア、ビジネスサイドを交えた勉強会を社内で実施したときの声をいくつかピックアップします。
- Q. プロジェクトに着手して試行錯誤しながらやることを決めると思うけど見積もりできなくない?
- A. 最初から正確な見積もりはできないのはそのとおりで、段階的に見積もることになります。数段階再見積もりを行うフェイズを計画時に設定し、段階的に精度を上げていくことになると思います。
- Q. ユーザーに選択を求めるようなインタフェースで選択結果を正解として再学習すれば精度は上がる?
- A. 特定のケースに特化して学習してしまう「過学習」の状態にならないよう注意が必要です。過学習になってしまうと新しい入力パターンに弱くなってしまいます。
- 「お客さんの利用方法や行動をもとにアップセル候補の抽出に使えるかも。ベテランの勘を実装できれば」
- 「被検索などのデータから広報施策のタイミングとか見つけられそう」
- 「逆に機械学習ではないけど世間でAIと呼ばれている領域の知識も知りたい」
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
forms.gleイベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください! rakus.connpass.com