日本ソフトウェア科学会第 35 回大会 (2018 年度) 講演論文集

機械学習を利用したシステムにおける不確実性を考慮した開発プロセスに関する考察
土肥 拓生
近年，機械学習に関する技術に注目を集めている．機械学習を利用したシステムにおいては，その企画から開発，運用まで，様々な種類の仮説検証が必要となる．一方，従来のソフトウェア工学の技術は，原則的に計画主導であり，不確実性を徐々に減らしてくものであるため，常に仮説検証が必要な場合には，そのまま適用することが難しい場合も多い．また，近年，主流になりつつあるアジャイル型の開発は，ビジネス上の仮説検証を考慮した開発手法と考えることができるが，機械学習を利用したシステムには，他の観点における仮説検証も考慮すべきであり，単純なアジャイル開発そのままでは解決できない課題も存在する．本論文では，機械学習を利用したシステムを念頭におき，考慮すべき仮説検証のパターンを分析し，それに基づき，どのような観点でソフトウェア開発のプロセスを変更する必要があるかについて述べる．

Recently machine learning are has been very focused. We have to do hypothesis testing for software systems
with machine learning(machine learning system) in the whole process from planning to operation. Traditionally software engineering support us to make plans and reduce the uncertainty of the development.
So it is diﬃcult to apply the software engineering techniques to machine learning system. Although agile
development which has been adopted all over the world can support to verify hypothesis on business, weneed hypothesis testing of the other perspective. In this paper, we examine the characteristics of hypothesis
testing for the machine learning systems. Furthermore we sugest the features of the software development
process for them.

を適切に扱うためにはどのようなことに留意すべき

1 はじめにかを議論する．

近年，機械学習に関する技術が注目を集めている．

以降，2 章で，本論文で想定する機械学習システム

計算資源の高速化により深層学習 (ディープラーニンとその特徴について述べ，3 章で，その特徴を考慮しグ) などの技術が利用しやすくなり，実用的なシステたソフトウェア開発が留意すべき要件について提示すムにおいても有益な結果が出せるようになってきたこる．その後，その要件を満たす開発プロセスとして，とが大きい．その一方で，機械学習を利用したシステ

仮説指向ソフトウェア開発プロセス (HOP) を 4 章でム (機械学習システム) に関するソフトウェア工学と提案する．最後に，5 章でまとめる．

いった大規模なシステムや，汎用的なソフトウェア開発で利用するための学術的な研究が必要となる [3]．

2 機械学習システムの特徴

本論文では，機械学習システムを構築するための汎機械学習システムが持つ従来のソフトウェアシステ用的な開発指針，開発プロセスの確立を目指し，機械ムにはない特性は，これまで存在していなかった「仮学習システム特有の考慮すべき点を考察し，その特徴説検証」が求められるということである．

Development Process Supporting Uncertainty in Software with Machine Learning
Takuo Doi, ラ イ フ マ ティック ス 株 式 会 社/国 立 情報 学 研 究 所, Lifematics Inc./National Institute ofInformatics.

ソフトウェア工学の歴史は，より多くの仮説検証を工学的に可能としてきた歴史である．初期のソフト
ウェア工学は，いかにユーザの要求を確定させ，その要求をいかに間違いなく実装するかというものであった．ユーザのニーズの多様化が進むとともに，環境も多い．Pre-Poc において，例えば，ごく一部のデーの変化が加速するにつれて，全てを計画的に実施すタで検証させたり，代表的な手法での精度を計測するるソフトウェア開発がなかなかうまく行かなくなり，ことにより，より大規模なデータでコストをかけて要求に対する仮説検証を実施する顧客開発 [2] というPoC に取り組んだり，よりアルゴリムのチューニン考え方や，それを実現するためにソフトウェア開発のグにリソースをかけるなどの妥当性を検証するのでプロセスにおける仮説検証を可能にするアジャイルある．

開発 [1] が利用されるようになってきている．そして，ソフトウェアシステムとは，最終的にはユーザに対より柔軟なシステムが求められるようになり，機械学して価値を提供するものである．そのため，PoC に習システムに注目が集っているが，まだ未解決な課題より何らかの判断をある程度の精度予測するだけでも多い [4]．機械学習のモデルは，学習したデータには不十分である．また，その提供する価値がユーザに基づき確率的に決定されるため，そもそもシステムとって本質的なものでなければ，そのソフトウェアシが期待したように振る舞うかを完全に論理的に保証ステムが利用されることはない．また，モデルの振るすることは難しく，どの要素を特徴量とした扱うか，舞いは確率的であるが，そのシステムで利用されるモ

どの学習アルゴリズムを選択するか，どのように学習デルが確率的な挙動を示した場合に，ユーザにどのよパラメタを設定するかについては，仮説検証を繰り返うな価値を提供できるかが重要である．例えばである

す必要がある．

が，迷惑メールを判別するモデルを使ったシステムでさて，そもそもなぜ仮説検証が必要となるのであろ

あれば，90%の精度で予測できれば，ユーザは満足すうか．著者は仮説検証は，不確実性を扱うための有用るかもしれないが，自動運転の判断をするモデルの場な道具であることがその理由であると考える．この合は，同じ精度で予測するシステムが搭載された自不確実性をいかに扱うかが機械学習システムの開発・動車には誰も乗らないだろう．ここでは非常に分かり運用には非常に重要である．本章では，著者が経験しやすい例を提示したが，一般的なシステムにおいて，た，あるいは，見聞きした実際の機械学習を利用した

どのようなモデルをどのように利用すればユーザにプロジェクトの事例より抽出した機械学習システムの価値を提供できるかは，非常に重要な仮説検証の対象不確実性の特徴を示す．

である．
そして，全ての機械学習システムにおいて必要な

2. 1 プロジェクトの進捗とその不確実性

訳ではないが，運用中に妥当な学習をし続けられる機械学習は，学習に利用するデータ，データのどのかというのも重要な仮説検証である．例えば，迷惑情報を特徴量として扱うか，どの学習アルゴリズムをメールの例はこれがうまくいきやすいケースである．

選択するか，学習パラメタの設定によって，その結果実際にユーザがメールを読むという操作 (運用) の中として生成されるモデルの性質は異なる．そのため，で，扱うメールを学習することにより，よりユーザに従来のシステム開発のように，いかに詳細に設計した

とっての迷惑メールかどうかの判断に近づける可能としても，必ずしも期待したモデルを生成できると性がある．しかし，一方で，実際の運用においては，は限らない．そのため，一般的には，利用可能なデーどのような環境でどのようなデータを学習するか分タから期待するモデルを生成できるかという仮説検かない状況において，適切な学習をし続けるための仮証から実施することが多い．そして，この課程のこと

説検証をいかに扱うかは非常に大事なのである．

を，Proof of Concept(PoC) と呼ぶ．
また，PoC ですら事前に予測不可能なことが多く，かつ，PoC にも膨大な時間やリソースが必要となる場合もあり，そのリスクを低減するために，PoC の事前検証のために，Pre-PoC という段階を踏むこと

以上，まとめると機械学習システムのプロジェクトには，3 つの不確実性を扱う必要がある．


データ
環境データの追加

1. モジュールがモデルの不確実性を扱うこと学習が可能

2. ソフトウェアがモデルの不確実性を吸収すモデル

ることが可能モデルの利用3. ユーザや環境からの情報をデータとして追モジュール

価値提供とフィードバック

ソフトウェアシステム

加による不確実性を扱うことが可能

最初の 2 つの課題は似ているが観点が異なる．例
えば，雨の降りやすさを示すような値を提供するモデ

図1ルがあったとしよう．学習モデルが分類モデルであれ機械学習システムの構造ば想定外の結果を返すことはないが，回帰モデルであ1. PoC の実現性に関する不確実性れば，その値域には不確定な部分が存在する．その場

2. ソフトウェアにおけるモデルの不確実性

合に，モデルの結果を 2 倍したものが降水確率とし

3. 運用における学習の不確実性て利用していたとして，65 という値をモデルが返してもモジュールとして整合性がとれるかというのが前者である．傘を持っていくべきかどうかを指示するソ

2. 2 ソフトウェアの構造とその不確実性

フトウェアだったとして，上記の 100%以上や，0 以

本論文では，簡単のために，機械学習システムの構下といった想定外の値だった場合に，何か問題が起き造を図 1 に簡略化して議論をすすめる．ていると判断し「不安定なので注意してください」とこの図において，モデルが学習モデルであり，確率いった情報を提供したり，他の天気予報の情報を提供的な挙動を示すものである．モジュールと記載した部したりするというシステムとしての振る舞いが考慮分が，通常のソフトウェアモジュールを表現し，確率されているかというのが後者である．もちろん，いず的な挙動をせず，プログラムの通りに動作するものでれの場合も何が例外的な事象なのかというのは規定ある．これらが連携して動作するものがソフトウェアされている必要がある．

システムであり，ユーザに価値を提供するとともに，その結果に対して，ユーザからフィードバックを得る

3 機械学習システムのためのプロセス要件ことができる．また，そのフィードバックや環境から前章で述べたように，機械学習システムプロジェクの情報がデータに追加され，その変化したデータに基トが成功を納めるためには，プロジェクトの進捗に関づいて，学習モデルが再構築される．

する 3 つの不確実性を適切に扱い，ソフトウェアの非常に簡略化した構造ではあるが，例えば，複数の学習モデルが組み込まれたシステムであったり，機械構造に起因する 3 つの不確実性に対する課題に対処する必要がある．

学習を利用しない部分が非常に複雑なシステムであっ

本章では，これらの観点から機械学習システムを開たとしても，その機能ではなく，確率的な挙動を持発する際に適した開発プロセスが満たすべき要件につ部分とそうでない部分で分けることは可能である．

ついて検討する．

そのため，議論に十分な汎用性を持っているはずである．

3. 1 PoC の実現性に関する不確実性

この図を，確率的な挙動をするモデルを中心に見てPoC の実現性に対しては，一般的に不確実である

いくと，モデルの不確実性に誘発されることにより，ことが認識されている場合が多い．しかし，プロジェ次の課題が導かれる．

クトとして考えた場合に，どれだけ多くの PoC を実施しても，どれだけ PoC で精度を上げることができユーザ自身に判断を仰ぐといった設計が適している場

たとしても，製品に貢献できなければ，ユーザに対し合もあるだろう．て価値を提供できない．また，いくらリソース費やしいずれにせよ，新しく学習したモデルが，そのソフたとしても，データによっては期待するモデルを構築

トウェアにとって最低限の水準を満たしていることをできない可能性は十分にある．そのため，PoC とし保証する仕組みが必要となる．ての成功，並びに，失敗を規定することにより，無駄にリソースを費してしまわないように注意を払う必要がある．
なお，機械学習を使わない手法との比較も重要である．

3. 4 モジュールがモデルの不確実性を扱うことが可能
学習モデルがある入力に対して，どのような出力を返すかは，不確実であったとしても，その結果を利用する側のモジュールは期待した通りに動作すること

3. 2 ソフトウェアにおけるモデルの不確実性を保証する必要がある．このモデルの不確実性をモ

ソフトウェアにおいて，どのような不確実性が許容ジュールが扱うためには，モジュールに対する自動テできるのかを把握することが必要である．また，PoCストと組み合わせることが最も容易であると考える．

により未知の知識を得てそれを利用した画期的なシ

なぜなら，モデルの挙動は予測不能であっても，モデステムを構築したいという話を聞くことが度々ある

ルの出力に対する期待する範囲は予想可能である．そが，そのようなアプローチを完全に否定することはでのため，例外状態における自動テストを用意するこ

きないが，現時点での機械学習の効果から考えれば，とで，モデルが想定外の結果を導き出した場合でも，要求工学や顧客開発など，ソフトウェア工学のこれまモジュールとしては，想定された挙動を保証することでの知見を十分に活用して，ユーザが求めているものが可能になる．

を見定めた上で，それを実現するために欠けているものを機械学習で補えないかを検討する方が妥当であると考える．

3. 5 ソフトウェアがモデルの不確実性を吸収することが可能

すなわち，ユーザにどのような価値を届けるのかを前節で述べたように，モジュールが適切にモデルの見据え，その価値を提供するために欠けている情報不確実性を考慮されていれば，ソフトウェアとしてを機械学習で補えるという仮説を立て，その仮説をは，モジュールの挙動は想定内に収まるため，その際PoC として検証する方が望ましい．の挙動について検討を行えばよい．ただし，前章の例
で言えば，モデルが適切に学習できなかったために，

3. 3 運用における学習の不確実性

常に「不安定なので注意してください」という表示を運用における学習を実現するためには，そのソフするようになってしまっていないかなど，継続的なソトウェアの重要度に応じた対策が必要となる．前章でフトウェアとして妥当な動きをしているかを確認する

例示した迷惑メールの判別のような比較的重要度の仕組みがある方が望ましい．

小さいものであれば，数多くの学習データを収集できるような運用を検討する方が，最終的なユーザへ提供可能な価値は大きい可能性があるが，自動運転

3. 6 ユーザや環境からの情報をデータとして追加による不確実性を扱うことが可能のような場合であれば，新しく学習したモデルが，少

この課題は，運用における学習の不確実性の扱いなくとも最低限の水準を満たしていることを保証すと共通する部分が多い．ソフトウェアの利用というる仕組みが必要であろう．この最低限の水準を保証す

観点からすると，利用において取得できたデータがるためには，製品自身に新しい学習モデルを評価す全て有効なデータとは限らない．PoC や事前の学習る仕組みが内包させることなども考えうる．または，であれば，エンジニアがデータ処理をすることが一般的であるが，運用後に取得したデータにおいては，恣意的に欠損値を埋めたりすることができないため，

PoC仮説1-1...
価値仮説 1

そのようなデータの加工についても十分に検証する...

PoC仮説1-m...

PoC仮説 x
価値仮説 n必要がある．

Pocフェーズ

4 仮説指向ソフトウェア開発プロセス
図2

PoC フェーズの概要

本章では，3 章で提示した特性を持つ具体的なプロセスを提案する．著者はこのプロセスを仮説指向プてその期間は変動する．図 2 にその全体像を示す．

ロセス (Hypothesis Oriented software development

Process: HOP) と呼んでいる．HOP は，大きく PoC

4. 2 プロダクトフェーズ

フェーズ，プロダクトフェーズ，運用フェーズの 3 つ

プロダクトフェーズでは，モデル構築とプロダクトのフェーズに分けられる．

開発を実施する．このフェーズにおいては，アジャイ

4. 1 PoC フェーズを進める．本論文では，Scrum の詳細については省

PoC フェーズは，その名前の通り PoC を実施する

略するが，ユーザストーリと呼ばれるユーザの体験ごフェーズである．しかし，単に PoC を実施するのでとに機能を実装し，スプリントと呼ばれる期間を固定はなく，以下の手順に基づく反復的な開発を実施する．

した反復開発を実施するフレームワークである．

ルのフレームワークである Scrum [5] に基づいて開発

1. ユーザへ提供する価値仮説を策定
2. 価値を提供するための PoC 仮説を策定
3. PoC 仮説を検証
4. PoC 仮説の検証結果に基づき，以下のいづれかを選択(a) 新しい PoC 仮説の策定し，3 に戻る(b) 新しい価値仮説の策定し，2 に戻る(c) PoC フェーズ終了(d) プロジェクト終了
ここで価値仮説とは，ユーザに提供したい価値を設定し，その価値を提供するためには，あるデータから

ただし，機械学習を使わないソフトウェア開発とは異なり，以下のことを考慮する．

• 直接的にユーザに価値を提供しないモデル構築のための要件もユーザストーリとして扱う• 運用フェーズを想定した学習モデルの妥当性の確認手法を確立する• 機械学習システムの性質に応じた自動テストを記述する• done の定義として，モデルが想定外の振る舞いをした場合のテストケースを記述することを規定するあることが予測できれば，その価値を提供できるはず

特に確率的な挙動の機能に対する自動テストは手だという仮説である．PoC 仮説とは，あるデータか法を検討する必要がある．その手法は本論文の範囲でらある要素を特徴量としてあるアルゴリズムで学習はないが，単体テストに代表される通常の自動テストすることで，あることをある精度で予測可能なはずだの考えを拡張することも考えられる．例えば，一般的という仮説であり，言わゆる PoC の一回の試行と対な単体テストであれば，ある入力に対して期待する出応する概念である．また，Pre-PoC に相当する場合力が得られるかを検証するが，ある入力群に対して，も PoC フェーズで実施する．

期待する出力が得られた割合が一定以上あるといったなお，詳細は省略するが，価値仮説によって，PoC検証などが必要となる場合がある．

仮説の検証において検証する精度や速度といった性能が決定される．

4. 3 運用フェーズ

PoC フェーズにおいては，PoC 仮説の検証単位で運用フェーズは，プロダクトごとに検討する必要が反復的に開発を実施する．そのため，PoC 仮説によっあり画一的な手順を設定することは現実的ではない

と考える．ただし，以下の点は考慮すべき点である．

• 運用中に取得できたデータにより学習をするかを確定するように拡張する予定である．さらに，実際の機械学習システムで HOP を適用することでの実証実験も検討していきたい．

• 学習する場合は，その妥当性をどのように検証

謝 辞 第 1 回 機 械 学 習 工 学 ワ ー ク ショップ

するかを確定し，妥当でない場合にどうするかも（MLSE2018）での議論が本論文をまとめるに当た規定するり非常に有益なものとなった．ワークショップに参加• 運用中にソフトウェアのアップデートなどの介し，議論させて頂いた皆様に感謝の意を表します．

入方法について規定しておく
参 考 文 献5 まとめと今後の課題
本論文では，プロジェクトの進捗と，ソフトウェアシステムの構造という 2 つの観点から，機械学習システムの不確実性の種類を分類し，それらの不確実性を対処する開発プロセスに必要な要件を検討した．
また，その一例として，仮説指向ソフトウェア開発プ
ロセス (HOP) を提案した．
現時点では，限定的な観点からのみ機械学習システムに必要な要件を抽出し，それに基づくプロセスとなっている．また，HOP の運用フェーズは概要としての指針に留まっている．今後は，機械学習システムの開発を安定的に実施するための手法を，他の観点からの要件も加味するとともに，プロセスとして規定することが現実的でない部分においても，チェックリス
トという形で体系的まとめ，より安定的に利用できる[1] Beck, K., Beedle, M., van Bennekum, A., Cockburn, A., Cunningham, W., Fowler, M., Grenning,J., Highsmith, J., Hunt, A., Jeﬀries, R., Kern, J.,Marick, B., Martin, R. C., Mellor, S., Schwaber,K., Sutherland, J., and Thomas, D.: Manifesto for
Agile Software Development, 2001.
[2] Blank, S., Blank, S., and Dorf, B.: The Startup
Owner’s Manual: The Step-by-step Guide for
Building a Great Company, K&S Ranch, Incorporated, 2012.
[3] Masuda, S., Ono, K., Yasue, T., and Hosokawa,N.:
A Survey of Software Quality for Machine Learning Applications, 2018 IEEE International Conference on Software Testing, Verification
and Validation Workshops (ICSTW), April 2018,
pp. 279–284.
[4] Mitchell, T.: The discipline of machine learning,Technical Report CMU ML-06 108, 2006.
[5] Schwaber, K. and Beedle, M.: Agile Software Development with Scrum, Prentice Hall PTR, Upper
Saddle River, NJ, USA, 1st edition, 2001.