Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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