機械学習分野におけるテストの自動化 #ques4

機械学習分野におけるテストの自動化 #ques4

第4回 Ques (2014.4.22 開催) でお話する「機械学習分野におけるテストの自動化」の発表資料です。

E77287648aff5484ac7659748e45c936?s=128

KOMIYA Atsushi

April 22, 2014
Tweet

Transcript

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

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

  3. Self-introduction 3

  4. 4

  5. ALBERT Inc. Analytical technology 5

  6. Background: Java / Web / AWS Machine learning 6

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

  8. QA and me 8

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

  10. QA in ALBERT 10

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

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

  13. Test automation in ALBERT 13

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

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

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

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

  18. Today’s topic 18

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

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

  21. Machine Learning 21

  22. What ? 22

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

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

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

    25
  26. 2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化)

    学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ 26
  27. Use case 27

  28. Recommendations 28

  29. Email filtering 29

  30. Accuracy 30

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

  32. Software testing of Machine learning 32

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

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

  35. 2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化)

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

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

    学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ Input Output 期待する結果 であるか? 37
  38. つまりは ブラックボックス テスト 38

  39. 悩みどころ 39

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

  41. 精度度は  100% ではない 41

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

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

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

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

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

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

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

  49. Patterns & Practices 49

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

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

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

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

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

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

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

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

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

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

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

  61. 61

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

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

  64. 2. 分類・推定フェーズ 1. 学習フェーズ 正解が未知のデータ (特徴量量のみ) 特徴量量と正解情報の 組み合わせから 法則性を導き出す (モデル化)

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

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

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

    学習データ (特徴量量&正解情報) 機械学習 アルゴリズム 分類・推定結果 モデル モデルを元に 正解を推測する Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/ Output 出⼒力力結果は ・連続値なのか? ・離離散値なのか? ・単⼀一なのか? ・複数なのか? 67
  68. 別⾔言語の実装を 利利⽤用して テストデータを 作成する 68

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

    テストデータの作成、 もぅマヂ無理理… 69
  70. ケース (やんごとなき理理由により) フルスクラッチ実装した 機械学習アルゴリズムを テストしたい 70

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

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

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

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

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

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

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

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

    機械学習アルゴリズムの振る舞いに あまり左右されたくない… 78
  79. モックを利利⽤用する 79

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

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

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

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

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

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

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

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

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

  89. やりたいこと 89

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

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

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

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

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

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

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

  97. 97

  98. 98

  99. Conclusion 99

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

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

  102. •  テスト対象の分離離を意識識する •  機械学習に対する理理解を深める •  別⾔言語の実装を利利⽤用してテスト データを作成する •  モックやフィクスチャを活⽤用する • 

    ベースラインの精度度と⽐比較する •  数値計算の特性を理理解する 102
  103. ありがとう ございました! 103