Slide 1

Slide 1 text

機械学習分野に おける テストの⾃自動化 2014.4.22 Ques #4 in DeNA @komiya_atsushi

Slide 2

Slide 2 text

※この資料料は http://bit.ly/ques4_ML_test で公開しています 2

Slide 3

Slide 3 text

Self-introduction 3

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

ALBERT Inc. Analytical technology 5

Slide 6

Slide 6 text

Background: Java / Web / AWS Machine learning 6

Slide 7

Slide 7 text

Jobs: Curation service, Marketing automation and Recommender systems developer 7

Slide 8

Slide 8 text

QA and me 8

Slide 9

Slide 9 text

知識識はあんまり ありません  (>_<) 9

Slide 10

Slide 10 text

QA in ALBERT 10

Slide 11

Slide 11 text

QA 専任の エンジニアは いません 11

Slide 12

Slide 12 text

QA = 開発エンジニア のお仕事 ※インフラ構築や運⽤用も 開発エンジニアのお仕事です. つまりフルスタ(ry 12

Slide 13

Slide 13 text

Test automation in ALBERT 13

Slide 14

Slide 14 text

Test automation = Code-driven testing (xUnit / xSpec) + Continuous integration 14

Slide 15

Slide 15 text

Code-driven testing by JUnit / Spock ※レガシーなシステムを除く 15

Slide 16

Slide 16 text

Continuous integration by Jenkins  . ※最近開発しているシステム 16

Slide 17

Slide 17 text

Test-driven development ※少しずつ導⼊入中 17

Slide 18

Slide 18 text

Today’s topic 18

Slide 19

Slide 19 text

機械学習 × テスト⾃自動化 19

Slide 20

Slide 20 text

Code-driven testing に関わる話題を 中⼼心にお話しします 20

Slide 21

Slide 21 text

Machine Learning 21

Slide 22

Slide 22 text

What ? 22

Slide 23

Slide 23 text

“⼈人間が⾃自然に⾏行行っている 学習能⼒力力と同様の機能を コンピュータで実現しよう とする技術・⼿手法” from Wikipedia (機械学習) 23

Slide 24

Slide 24 text

“第⼀一にそのデータが⽣生成した 潜在的機構の特徴を捉え、複雑な 関係を識識別(すなわち定量量化) する。そして第⼆二にその識識別した パターンを⽤用いて新たなデータに ついて予測を⾏行行う” from Wikipedia (機械学習) 24

Slide 25

Slide 25 text

“コンピューターでアルゴリズムを構築し、 学習データを読み込ませることで、⾃自動的に 今あるデータを分類&まだ⾒見見ぬデータを 予測できるようにするもの” “ヒトの情報処理理能⼒力力を超えて、複雑なデータを 分類&予測できるようにするもの” from 銀座で働くデータサイエンティスト のブログ http://tjo.hatenablog.com/entry/2013/04/30/191947 25

Slide 26

Slide 26 text

2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化) 学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ 26

Slide 27

Slide 27 text

Use case 27

Slide 28

Slide 28 text

Recommendations 28

Slide 29

Slide 29 text

Email filtering 29

Slide 30

Slide 30 text

Accuracy 30

Slide 31

Slide 31 text

機械学習の 精度度は  100 % ではない ⼈人間と同じように、分類・ 推定に失敗することがある 例例)メールのスパム誤判定 31

Slide 32

Slide 32 text

Software testing of Machine learning 32

Slide 33

Slide 33 text

機械学習への Code-driven testing 適⽤用の基本 33

Slide 34

Slide 34 text

⼊入⼒力力データと 出⼒力力結果を 意識識する 34

Slide 35

Slide 35 text

2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化) 学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ 35

Slide 36

Slide 36 text

2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化) 学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ Input Output 36

Slide 37

Slide 37 text

2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化) 学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ Input Output 期待する結果 であるか? 37

Slide 38

Slide 38 text

つまりは ブラックボックス テスト 38

Slide 39

Slide 39 text

悩みどころ 39

Slide 40

Slide 40 text

「期待する結果」 の定義が難しい 40

Slide 41

Slide 41 text

精度度は  100% ではない 41

Slide 42

Slide 42 text

ランダムな 振る舞いをする アルゴリズム 42

Slide 43

Slide 43 text

テストデータを 作るのが⾟辛い 43

Slide 44

Slide 44 text

どのような ⼊入⼒力力データを 与えればよいか? 44

Slide 45

Slide 45 text

どのような 出⼒力力結果が 得られるのか? 45

Slide 46

Slide 46 text

テストケースが NG となったときに 何がダメなのかが 分かりづらい 46

Slide 47

Slide 47 text

実装上の不不具合に よって   NGとなったのか? 47

Slide 48

Slide 48 text

はたまた ⼊入⼒力力データに 不不⼿手際があったの か? 48

Slide 49

Slide 49 text

Patterns & Practices 49

Slide 50

Slide 50 text

テスト対象の 分離離を意識識する 50

Slide 51

Slide 51 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 51

Slide 52

Slide 52 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 特にビジネスロジックと 機械学習アルゴリズムを 切切り離離して考える 52

Slide 53

Slide 53 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 実装の正しさを 検証する 使い⽅方の正しさ を検証する 得られる精度度を 検証する 53

Slide 54

Slide 54 text

どの粒粒度度のテストを 実施すべきなのかを 明らかにしておく 54

Slide 55

Slide 55 text

機械学習アルゴリズム に対するテスト 既存のライブラリを 利利⽤用するならテストは不不要 フルスクラッチ・独⾃自実装 する場合は必要 55

Slide 56

Slide 56 text

ビジネスロジックに 対するテスト 機械学習に与える ⼊入⼒力力データや出⼒力力結果の 取り扱いが複雑な場合に 実施すべき 56

Slide 57

Slide 57 text

アプリケーションに 対するテスト 機械学習の結果の精度度を 定量量評価できる仕組みが 整っている場合に実現可能 57

Slide 58

Slide 58 text

機械学習に対する 理理解を深める 58

Slide 59

Slide 59 text

ケース テストデータを作成したい テスト結果が  NG となった 場合に何が悪いのかを 明らかにしたい 59

Slide 60

Slide 60 text

擬似コードや 数式を理理解 するのがベスト 60

Slide 61

Slide 61 text

61

Slide 62

Slide 62 text

数式が理理解できれば テストデータは ⼿手計算(Excel)で 作れる 62

Slide 63

Slide 63 text

数式に弱くとも ⼊入⼒力力データ タスク 出⼒力力結果 は把握できるように 63

Slide 64

Slide 64 text

2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化) 学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ 64

Slide 65

Slide 65 text

2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化) 学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ Input ⼊入⼒力力データ(説明変数、独⽴立立変数)は ・数値なのか? ・⽂文字列列なのか? ・質的変数なのか?   ・量量的変数なのか? 65

Slide 66

Slide 66 text

2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化) 学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ タスクは ・分類なのか? ・数値の予測なのか? 66

Slide 67

Slide 67 text

2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化) 学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ Output 出⼒力力結果は ・連続値なのか? ・離離散値なのか? ・単⼀一なのか? ・複数なのか? 67

Slide 68

Slide 68 text

別⾔言語の実装を 利利⽤用して テストデータを 作成する 68

Slide 69

Slide 69 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 実装の正しさを 検証する 使い⽅方の正しさ を検証する 得られる精度度を 検証する テストデータの作成、 もぅマヂ無理理… 69

Slide 70

Slide 70 text

ケース (やんごとなき理理由により) フルスクラッチ実装した 機械学習アルゴリズムを テストしたい 70

Slide 71

Slide 71 text

別⾔言語の 実装が存在する ことが前提 71

Slide 72

Slide 72 text

かつ、 その別⾔言語の 実装が⼗十分に 枯れていること 72

Slide 73

Slide 73 text

ライブラリ: libsvm, liblinear, SciPy, OpenCV 73

Slide 74

Slide 74 text

フレームワーク・ ソフトウェア: Mahout, Jubatus, R 74

Slide 75

Slide 75 text

モックや フィクスチャを 活⽤用する 75

Slide 76

Slide 76 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 実装の正しさを 検証する 使い⽅方の正しさ を検証する 得られる精度度を 検証する 76

Slide 77

Slide 77 text

ケース ビジネスロジックを テストしたい ランダムに振る舞う 機械学習アルゴリズムを テストしたい 77

Slide 78

Slide 78 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 実装の正しさを 検証する 使い⽅方の正しさ を検証する 得られる精度度を 検証する 機械学習アルゴリズムの振る舞いに あまり左右されたくない… 78

Slide 79

Slide 79 text

モックを利利⽤用する 79

Slide 80

Slide 80 text

モックライブラリ Mockito https://code.google.com/p/mockito/ JMockit https://code.google.com/p/jmockit/ 80

Slide 81

Slide 81 text

アプリケーション ビジネスロジック モック アルゴリズム モックに 差し替える ダミーの 結果を返す 81

Slide 82

Slide 82 text

フィクスチャで 状態を固定する 82

Slide 83

Slide 83 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム モデル モデルを固定する (setup / teardown) 83

Slide 84

Slide 84 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 乱数発⽣生器 乱数のシードを 固定する 84

Slide 85

Slide 85 text

※ご参考 85 http://bit.ly/random_junit

Slide 86

Slide 86 text

ベースラインの 精度度と⽐比較する 86

Slide 87

Slide 87 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 実装の正しさを 検証する 使い⽅方の正しさ を検証する 得られる精度度を 検証する 87

Slide 88

Slide 88 text

ケース サービスレベルの 精度度を検証したい 88

Slide 89

Slide 89 text

やりたいこと 89

Slide 90

Slide 90 text

「期待される精度度」 の設定に 別のアルゴリズムの 精度度を利利⽤用する 90

Slide 91

Slide 91 text

例例) オンライン学習の アルゴリズムなら パーセプトロンの 精度度をベースラインに SCW の精度度を検証する 91

Slide 92

Slide 92 text

数値計算の 特性を把握する 92

Slide 93

Slide 93 text

アプリケーション ビジネスロジック 機械学習 アルゴリズム 実装の正しさを 検証する 使い⽅方の正しさ を検証する 得られる精度度を 検証する 93

Slide 94

Slide 94 text

ケース 独⾃自の機械学習 アルゴリズムを 実装したので より緻密にテストしたい 94

Slide 95

Slide 95 text

ホワイトボックス テスト 95

Slide 96

Slide 96 text

分岐だけではなく 数値計算にも注意 を払う 96

Slide 97

Slide 97 text

97

Slide 98

Slide 98 text

98

Slide 99

Slide 99 text

Conclusion 99

Slide 100

Slide 100 text

業務システムの テストとは異異なる 知識識を求められる のは事実 100

Slide 101

Slide 101 text

ただ  QA の知識識を ⼗十分に活⽤用する ことはできる! 101

Slide 102

Slide 102 text

•  テスト対象の分離離を意識識する •  機械学習に対する理理解を深める •  別⾔言語の実装を利利⽤用してテスト データを作成する •  モックやフィクスチャを活⽤用する •  ベースラインの精度度と⽐比較する •  数値計算の特性を理理解する 102

Slide 103

Slide 103 text

ありがとう ございました! 103