Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

KOMIYA Atsushi

April 22, 2014
Tweet

More Decks by KOMIYA Atsushi

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. Self-introduction
    3

    View Slide

  4. 4

    View Slide

  5. ALBERT Inc.
    Analytical technology
    5

    View Slide

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

    View Slide

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

    View Slide

  8. QA and me
    8

    View Slide

  9. 知識識はあんまり
    ありません  (>_9

    View Slide

  10. QA in ALBERT
    10

    View Slide

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

    View Slide

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

    View Slide

  13. Test automation
    in
    ALBERT
    13

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. Today’s topic
    18

    View Slide

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

    View Slide

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

    View Slide

  21. Machine Learning
    21

    View Slide

  22. What ?
    22

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. Use case
    27

    View Slide

  28. Recommendations
    28

    View Slide

  29. Email filtering
    29

    View Slide

  30. Accuracy
    30

    View Slide

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

    View Slide

  32. Software testing
    of
    Machine learning
    32

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  39. 悩みどころ
    39

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  49. Patterns
    &
    Practices
    49

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  61. 61

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  79. モックを利利⽤用する
    79

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  89. やりたいこと
    89

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  97. 97

    View Slide

  98. 98

    View Slide

  99. Conclusion
    99

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide